[ Index ]
 

Code source de Symfony 1.0.0

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/lib/addon/propel/builder/ -> SfPeerBuilder.php (source)

   1  <?php
   2  
   3  require_once 'propel/engine/builder/om/php5/PHP5ComplexPeerBuilder.php';
   4  
   5  /*
   6   * This file is part of the symfony package.
   7   * (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
   8   *
   9   * For the full copyright and license information, please view the LICENSE
  10   * file that was distributed with this source code.
  11   */
  12  
  13  /**
  14   * @package    symfony
  15   * @subpackage addon
  16   * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
  17   * @version    SVN: $Id: SfPeerBuilder.php 2534 2006-10-26 17:13:50Z fabien $
  18   */
  19  class SfPeerBuilder extends PHP5ComplexPeerBuilder
  20  {
  21    public function build()
  22    {
  23      if (!DataModelBuilder::getBuildProperty('builderAddComments'))
  24      {
  25        return sfToolkit::stripComments(parent::build());
  26      }
  27  
  28      return parent::build();
  29    }
  30  
  31    protected function addIncludes(&$script)
  32    {
  33      if (!DataModelBuilder::getBuildProperty('builderAddIncludes'))
  34      {
  35        return;
  36      }
  37  
  38      parent::addIncludes($script);
  39    }
  40  
  41    protected function addSelectMethods(&$script)
  42    {
  43      parent::addSelectMethods($script);
  44  
  45      if ($this->getTable()->getAttribute('isI18N'))
  46      {
  47        $this->addDoSelectWithI18n($script);
  48      }
  49    }
  50  
  51    protected function addDoSelectWithI18n(&$script)
  52    {
  53      $table = $this->getTable();
  54      $thisTableObjectBuilder = OMBuilder::getNewObjectBuilder($table);
  55      $className = $table->getPhpName();
  56      $pks = $table->getPrimaryKey();
  57      $pk = PeerBuilder::getColumnName($pks[0], $className);
  58  
  59      // get i18n table name and culture column name
  60      foreach ($table->getReferrers() as $fk)
  61      {
  62        $tblFK = $fk->getTable();
  63        if ($tblFK->getName() == $table->getAttribute('i18nTable'))
  64        {
  65          $i18nClassName = $tblFK->getPhpName();
  66          // FIXME
  67          $i18nPeerClassName = $i18nClassName.'Peer';
  68  
  69          $i18nTable = $table->getDatabase()->getTable($tblFK->getName());
  70          $i18nTableObjectBuilder = OMBuilder::getNewObjectBuilder($i18nTable);
  71          $i18nTablePeerBuilder = OMBuilder::getNewPeerBuilder($i18nTable);
  72          $i18nPks = $i18nTable->getPrimaryKey();
  73          $i18nPk = PeerBuilder::getColumnName($i18nPks[0], $i18nClassName);
  74  
  75          $culturePhpName = '';
  76          $cultureColumnName = '';
  77          foreach ($tblFK->getColumns() as $col)
  78          {
  79            if (("true" === strtolower($col->getAttribute('isCulture'))))
  80            {
  81              $culturePhpName = $col->getPhpName();
  82              $cultureColumnName = PeerBuilder::getColumnName($col, $i18nClassName);
  83            }
  84          }
  85        }
  86      }
  87  
  88      $script .= "
  89  
  90    /**
  91     * Selects a collection of $className objects pre-filled with their i18n objects.
  92     *
  93     * @return array Array of $className objects.
  94     * @throws PropelException Any exceptions caught during processing will be
  95     *     rethrown wrapped into a PropelException.
  96     */
  97    public static function doSelectWithI18n(Criteria \$c, \$culture = null, \$con = null)
  98    {
  99      if (\$culture === null)
 100      {
 101        \$culture = sfContext::getInstance()->getUser()->getCulture();
 102      }
 103  
 104      // Set the correct dbName if it has not been overridden
 105      if (\$c->getDbName() == Propel::getDefaultDB())
 106      {
 107        \$c->setDbName(self::DATABASE_NAME);
 108      }
 109  
 110      ".$this->getPeerClassname()."::addSelectColumns(\$c);
 111      \$startcol = (".$this->getPeerClassname()."::NUM_COLUMNS - ".$this->getPeerClassname()."::NUM_LAZY_LOAD_COLUMNS) + 1;
 112  
 113      ".$i18nPeerClassName."::addSelectColumns(\$c);
 114  
 115      \$c->addJoin(".$pk.", ".$i18nPk.");
 116      \$c->add(".$cultureColumnName.", \$culture);
 117  
 118      \$rs = ".$this->basePeerClassname."::doSelect(\$c, \$con);
 119      \$results = array();
 120  
 121      while(\$rs->next()) {
 122  ";
 123              if ($table->getChildrenColumn()) {
 124                $script .= "
 125        \$omClass = ".$this->getPeerClassname()."::getOMClass(\$rs, 1);
 126  ";
 127              } else {
 128                $script .= "
 129        \$omClass = ".$this->getPeerClassname()."::getOMClass();
 130  ";
 131              }
 132              $script .= "
 133        \$cls = Propel::import(\$omClass);
 134        \$obj1 = new \$cls();
 135        \$obj1->hydrate(\$rs);
 136        \$obj1->setCulture(\$culture);
 137  ";
 138  //            if ($i18nTable->getChildrenColumn()) {
 139                $script .= "
 140        \$omClass = ".$i18nTablePeerBuilder->getPeerClassname()."::getOMClass(\$rs, \$startcol);
 141  ";
 142  //            } else {
 143  //              $script .= "
 144  //      \$omClass = ".$i18nTablePeerBuilder->getPeerClassname()."::getOMClass();
 145  //";
 146  //            }
 147  
 148              $script .= "
 149        \$cls = Propel::import(\$omClass);
 150        \$obj2 = new \$cls();
 151        \$obj2->hydrate(\$rs, \$startcol);
 152  
 153        \$obj1->set".$i18nClassName."ForCulture(\$obj2, \$culture);
 154        \$obj2->set".$className."(\$obj1);
 155  
 156        \$results[] = \$obj1;
 157      }
 158      return \$results;
 159    }
 160  ";
 161    }
 162  
 163    protected function addDoValidate(&$script)
 164    {
 165        $tmp = '';
 166        parent::addDoValidate($tmp);
 167  
 168        $script .= str_replace("return {$this->basePeerClassname}::doValidate(".$this->getPeerClassname()."::DATABASE_NAME, ".$this->getPeerClassname()."::TABLE_NAME, \$columns);\n",
 169          "\$res =  {$this->basePeerClassname}::doValidate(".$this->getPeerClassname()."::DATABASE_NAME, ".$this->getPeerClassname()."::TABLE_NAME, \$columns);\n".
 170          "    if (\$res !== true) {\n".
 171          "        \$request = sfContext::getInstance()->getRequest();\n".
 172          "        foreach (\$res as \$failed) {\n".
 173          "            \$col = ".$this->getPeerClassname()."::translateFieldname(\$failed->getColumn(), BasePeer::TYPE_COLNAME, BasePeer::TYPE_PHPNAME);\n".
 174          "            \$request->setError(\$col, \$failed->getMessage());\n".
 175          "        }\n".
 176          "    }\n\n".
 177          "    return \$res;\n", $tmp);
 178    }
 179  
 180    protected function addDoSelectRS(&$script)
 181    {
 182      $tmp = '';
 183      parent::addDoSelectRS($tmp);
 184  
 185      if (DataModelBuilder::getBuildProperty('builderAddBehaviors'))
 186      {
 187        $mixer_script = "
 188  
 189      foreach (sfMixer::getCallables('{$this->getClassname()}:addDoSelectRS:addDoSelectRS') as \$callable)
 190      {
 191        call_user_func(\$callable, '{$this->getClassname()}', \$criteria, \$con);
 192      }
 193  
 194  ";
 195        $tmp = preg_replace('/{/', '{'.$mixer_script, $tmp, 1);
 196      }
 197  
 198      $script .= $tmp;
 199    }
 200  
 201    protected function addDoUpdate(&$script)
 202    {
 203      $tmp = '';
 204      parent::addDoUpdate($tmp);
 205  
 206      if (DataModelBuilder::getBuildProperty('builderAddBehaviors'))
 207      {
 208        // add sfMixer call
 209        $pre_mixer_script = "
 210  
 211      foreach (sfMixer::getCallables('{$this->getClassname()}:doUpdate:pre') as \$callable)
 212      {
 213        \$ret = call_user_func(\$callable, '{$this->getClassname()}', \$values, \$con);
 214        if (false !== \$ret)
 215        {
 216          return \$ret;
 217        }
 218      }
 219  
 220  ";
 221  
 222        $post_mixer_script = "
 223  
 224      foreach (sfMixer::getCallables('{$this->getClassname()}:doUpdate:post') as \$callable)
 225      {
 226        call_user_func(\$callable, '{$this->getClassname()}', \$values, \$con, \$ret);
 227      }
 228  
 229      return \$ret;
 230  ";
 231  
 232        $tmp = preg_replace('/{/', '{'.$pre_mixer_script, $tmp, 1);
 233        $tmp = preg_replace("/\t\treturn ([^}]+)/", "\t\t\$ret = $1".$post_mixer_script.'  ', $tmp, 1);
 234      }
 235  
 236      $script .= $tmp;
 237    }
 238  
 239    protected function addDoInsert(&$script)
 240    {
 241      $tmp = '';
 242      parent::addDoInsert($tmp);
 243  
 244      if (DataModelBuilder::getBuildProperty('builderAddBehaviors'))
 245      {
 246        // add sfMixer call
 247        $pre_mixer_script = "
 248  
 249      foreach (sfMixer::getCallables('{$this->getClassname()}:doInsert:pre') as \$callable)
 250      {
 251        \$ret = call_user_func(\$callable, '{$this->getClassname()}', \$values, \$con);
 252        if (false !== \$ret)
 253        {
 254          return \$ret;
 255        }
 256      }
 257  
 258  ";
 259  
 260        $post_mixer_script = "
 261      foreach (sfMixer::getCallables('{$this->getClassname()}:doInsert:post') as \$callable)
 262      {
 263        call_user_func(\$callable, '{$this->getClassname()}', \$values, \$con, \$pk);
 264      }
 265  
 266      return";
 267  
 268        $tmp = preg_replace('/{/', '{'.$pre_mixer_script, $tmp, 1);
 269        $tmp = preg_replace("/\t\treturn/", "\t\t".$post_mixer_script, $tmp, 1);
 270      }
 271  
 272      $script .= $tmp;
 273    }
 274  }


Généré le : Fri Mar 16 22:42:14 2007 par Balluche grâce à PHPXref 0.7