| [ Index ] |
|
Code source de Symfony 1.0.0 |
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 }
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
| Généré le : Fri Mar 16 22:42:14 2007 | par Balluche grâce à PHPXref 0.7 |