       1: <?php
       2:
       3: namespace Thelia\Model\om;
       4:
       5: use \BaseObject;
       6: use \BasePeer;
       7: use \Criteria;
       8: use \Exception;
       9: use \PDO;
      10: use \Persistent;
      11: use \Propel;
      12: use \PropelException;
      13: use \PropelPDO;
      14: use Thelia\Model\Feature;
      15: use Thelia\Model\FeatureI18n;
      16: use Thelia\Model\FeatureI18nPeer;
      17: use Thelia\Model\FeatureI18nQuery;
      18: use Thelia\Model\FeatureQuery;
      19:
      20: /**
      21:  * Base class that represents a row from the 'feature_i18n' table.
      22:  *
      23:  *
      24:  *
      25:  * @package    propel.generator.Thelia.Model.om
      26:  */
      27: abstract class BaseFeatureI18n extends BaseObject implements Persistent
      28: {
      29:     /**
      30:      * Peer class name
      31:      */
      32:     const PEER = 'Thelia\\Model\\FeatureI18nPeer';
      33:
      34:     /**
      35:      * The Peer class.
      36:      * Instance provides a convenient way of calling static methods on a class
      37:      * that calling code may not be able to identify.
      38:      * @var        FeatureI18nPeer
      39:      */
      40:     protected static $peer;
      41:
      42:     /**
      43:      * The flag var to prevent infinit loop in deep copy
      44:      * @var       boolean
      45:      */
      46:     protected $startCopy = false;
      47:
      48:     /**
      49:      * The value for the id field.
      50:      * @var        int
      51:      */
      52:     protected $id;
      53:
      54:     /**
      55:      * The value for the locale field.
      56:      * Note: this column has a database default value of: 'en_US'
      57:      * @var        string
      58:      */
      59:     protected $locale;
      60:
      61:     /**
      62:      * The value for the title field.
      63:      * @var        string
      64:      */
      65:     protected $title;
      66:
      67:     /**
      68:      * The value for the description field.
      69:      * @var        string
      70:      */
      71:     protected $description;
      72:
      73:     /**
      74:      * The value for the chapo field.
      75:      * @var        string
      76:      */
      77:     protected $chapo;
      78:
      79:     /**
      80:      * The value for the postscriptum field.
      81:      * @var        string
      82:      */
      83:     protected $postscriptum;
      84:
      85:     /**
      86:      * @var        Feature
      87:      */
      88:     protected $aFeature;
      89:
      90:     /**
      91:      * Flag to prevent endless save loop, if this object is referenced
      92:      * by another object which falls in this transaction.
      93:      * @var        boolean
      94:      */
      95:     protected $alreadyInSave = false;
      96:
      97:     /**
      98:      * Flag to prevent endless validation loop, if this object is referenced
      99:      * by another object which falls in this transaction.
     100:      * @var        boolean
     101:      */
     102:     protected $alreadyInValidation = false;
     103:
     104:     /**
     105:      * Flag to prevent endless clearAllReferences($deep=true) loop, if this object is referenced
     106:      * @var        boolean
     107:      */
     108:     protected $alreadyInClearAllReferencesDeep = false;
     109:
     110:     /**
     111:      * Applies default values to this object.
     112:      * This method should be called from the object's constructor (or
     113:      * equivalent initialization method).
     114:      * @see        __construct()
     115:      */
     116:     public function applyDefaultValues()
     117:     {
     118:         $this->locale = 'en_US';
     119:     }
     120:
     121:     /**
     122:      * Initializes internal state of BaseFeatureI18n object.
     123:      * @see        applyDefaults()
     124:      */
     125:     public function __construct()
     126:     {
     127:         parent::__construct();
     128:         $this->applyDefaultValues();
     129:     }
     130:
     131:     /**
     132:      * Get the [id] column value.
     133:      *
     134:      * @return int
     135:      */
     136:     public function getId()
     137:     {
     138:         return $this->id;
     139:     }
     140:
     141:     /**
     142:      * Get the [locale] column value.
     143:      *
     144:      * @return string
     145:      */
     146:     public function getLocale()
     147:     {
     148:         return $this->locale;
     149:     }
     150:
     151:     /**
     152:      * Get the [title] column value.
     153:      *
     154:      * @return string
     155:      */
     156:     public function getTitle()
     157:     {
     158:         return $this->title;
     159:     }
     160:
     161:     /**
     162:      * Get the [description] column value.
     163:      *
     164:      * @return string
     165:      */
     166:     public function getDescription()
     167:     {
     168:         return $this->description;
     169:     }
     170:
     171:     /**
     172:      * Get the [chapo] column value.
     173:      *
     174:      * @return string
     175:      */
     176:     public function getChapo()
     177:     {
     178:         return $this->chapo;
     179:     }
     180:
     181:     /**
     182:      * Get the [postscriptum] column value.
     183:      *
     184:      * @return string
     185:      */
     186:     public function getPostscriptum()
     187:     {
     188:         return $this->postscriptum;
     189:     }
     190:
     191:     /**
     192:      * Set the value of [id] column.
     193:      *
     194:      * @param int $v new value
     195:      * @return FeatureI18n The current object (for fluent API support)
     196:      */
     197:     public function setId($v)
     198:     {
     199:         if ($v !== null && is_numeric($v)) {
     200:             $v = (int) $v;
     201:         }
     202:
     203:         if ($this->id !== $v) {
     204:             $this->id = $v;
     205:             $this->modifiedColumns[] = FeatureI18nPeer::ID;
     206:         }
     207:
     208:         if ($this->aFeature !== null && $this->aFeature->getId() !== $v) {
     209:             $this->aFeature = null;
     210:         }
     211:
     212:
     213:         return $this;
     214:     } // setId()
     215:
     216:     /**
     217:      * Set the value of [locale] column.
     218:      *
     219:      * @param string $v new value
     220:      * @return FeatureI18n The current object (for fluent API support)
     221:      */
     222:     public function setLocale($v)
     223:     {
     224:         if ($v !== null && is_numeric($v)) {
     225:             $v = (string) $v;
     226:         }
     227:
     228:         if ($this->locale !== $v) {
     229:             $this->locale = $v;
     230:             $this->modifiedColumns[] = FeatureI18nPeer::LOCALE;
     231:         }
     232:
     233:
     234:         return $this;
     235:     } // setLocale()
     236:
     237:     /**
     238:      * Set the value of [title] column.
     239:      *
     240:      * @param string $v new value
     241:      * @return FeatureI18n The current object (for fluent API support)
     242:      */
     243:     public function setTitle($v)
     244:     {
     245:         if ($v !== null && is_numeric($v)) {
     246:             $v = (string) $v;
     247:         }
     248:
     249:         if ($this->title !== $v) {
     250:             $this->title = $v;
     251:             $this->modifiedColumns[] = FeatureI18nPeer::TITLE;
     252:         }
     253:
     254:
     255:         return $this;
     256:     } // setTitle()
     257:
     258:     /**
     259:      * Set the value of [description] column.
     260:      *
     261:      * @param string $v new value
     262:      * @return FeatureI18n The current object (for fluent API support)
     263:      */
     264:     public function setDescription($v)
     265:     {
     266:         if ($v !== null && is_numeric($v)) {
     267:             $v = (string) $v;
     268:         }
     269:
     270:         if ($this->description !== $v) {
     271:             $this->description = $v;
     272:             $this->modifiedColumns[] = FeatureI18nPeer::DESCRIPTION;
     273:         }
     274:
     275:
     276:         return $this;
     277:     } // setDescription()
     278:
     279:     /**
     280:      * Set the value of [chapo] column.
     281:      *
     282:      * @param string $v new value
     283:      * @return FeatureI18n The current object (for fluent API support)
     284:      */
     285:     public function setChapo($v)
     286:     {
     287:         if ($v !== null && is_numeric($v)) {
     288:             $v = (string) $v;
     289:         }
     290:
     291:         if ($this->chapo !== $v) {
     292:             $this->chapo = $v;
     293:             $this->modifiedColumns[] = FeatureI18nPeer::CHAPO;
     294:         }
     295:
     296:
     297:         return $this;
     298:     } // setChapo()
     299:
     300:     /**
     301:      * Set the value of [postscriptum] column.
     302:      *
     303:      * @param string $v new value
     304:      * @return FeatureI18n The current object (for fluent API support)
     305:      */
     306:     public function setPostscriptum($v)
     307:     {
     308:         if ($v !== null && is_numeric($v)) {
     309:             $v = (string) $v;
     310:         }
     311:
     312:         if ($this->postscriptum !== $v) {
     313:             $this->postscriptum = $v;
     314:             $this->modifiedColumns[] = FeatureI18nPeer::POSTSCRIPTUM;
     315:         }
     316:
     317:
     318:         return $this;
     319:     } // setPostscriptum()
     320:
     321:     /**
     322:      * Indicates whether the columns in this object are only set to default values.
     323:      *
     324:      * This method can be used in conjunction with isModified() to indicate whether an object is both
     325:      * modified _and_ has some values set which are non-default.
     326:      *
     327:      * @return boolean Whether the columns in this object are only been set with default values.
     328:      */
     329:     public function hasOnlyDefaultValues()
     330:     {
     331:             if ($this->locale !== 'en_US') {
     332:                 return false;
     333:             }
     334:
     335:         // otherwise, everything was equal, so return true
     336:         return true;
     337:     } // hasOnlyDefaultValues()
     338:
     339:     /**
     340:      * Hydrates (populates) the object variables with values from the database resultset.
     341:      *
     342:      * An offset (0-based "start column") is specified so that objects can be hydrated
     343:      * with a subset of the columns in the resultset rows.  This is needed, for example,
     344:      * for results of JOIN queries where the resultset row includes columns from two or
     345:      * more tables.
     346:      *
     347:      * @param array $row The row returned by PDOStatement->fetch(PDO::FETCH_NUM)
     348:      * @param int $startcol 0-based offset column which indicates which restultset column to start with.
     349:      * @param boolean $rehydrate Whether this object is being re-hydrated from the database.
     350:      * @return int             next starting column
     351:      * @throws PropelException - Any caught Exception will be rewrapped as a PropelException.
     352:      */
     353:     public function hydrate($row, $startcol = 0, $rehydrate = false)
     354:     {
     355:         try {
     356:
     357:             $this->id = ($row[$startcol + 0] !== null) ? (int) $row[$startcol + 0] : null;
     358:             $this->locale = ($row[$startcol + 1] !== null) ? (string) $row[$startcol + 1] : null;
     359:             $this->title = ($row[$startcol + 2] !== null) ? (string) $row[$startcol + 2] : null;
     360:             $this->description = ($row[$startcol + 3] !== null) ? (string) $row[$startcol + 3] : null;
     361:             $this->chapo = ($row[$startcol + 4] !== null) ? (string) $row[$startcol + 4] : null;
     362:             $this->postscriptum = ($row[$startcol + 5] !== null) ? (string) $row[$startcol + 5] : null;
     363:             $this->resetModified();
     364:
     365:             $this->setNew(false);
     366:
     367:             if ($rehydrate) {
     368:                 $this->ensureConsistency();
     369:             }
     370:             $this->postHydrate($row, $startcol, $rehydrate);
     371:             return $startcol + 6; // 6 = FeatureI18nPeer::NUM_HYDRATE_COLUMNS.
     372:
     373:         } catch (Exception $e) {
     374:             throw new PropelException("Error populating FeatureI18n object", $e);
     375:         }
     376:     }
     377:
     378:     /**
     379:      * Checks and repairs the internal consistency of the object.
     380:      *
     381:      * This method is executed after an already-instantiated object is re-hydrated
     382:      * from the database.  It exists to check any foreign keys to make sure that
     383:      * the objects related to the current object are correct based on foreign key.
     384:      *
     385:      * You can override this method in the stub class, but you should always invoke
     386:      * the base method from the overridden method (i.e. parent::ensureConsistency()),
     387:      * in case your model changes.
     388:      *
     389:      * @throws PropelException
     390:      */
     391:     public function ensureConsistency()
     392:     {
     393:
     394:         if ($this->aFeature !== null && $this->id !== $this->aFeature->getId()) {
     395:             $this->aFeature = null;
     396:         }
     397:     } // ensureConsistency
     398:
     399:     /**
     400:      * Reloads this object from datastore based on primary key and (optionally) resets all associated objects.
     401:      *
     402:      * This will only work if the object has been saved and has a valid primary key set.
     403:      *
     404:      * @param boolean $deep (optional) Whether to also de-associated any related objects.
     405:      * @param PropelPDO $con (optional) The PropelPDO connection to use.
     406:      * @return void
     407:      * @throws PropelException - if this object is deleted, unsaved or doesn't have pk match in db
     408:      */
     409:     public function reload($deep = false, PropelPDO $con = null)
     410:     {
     411:         if ($this->isDeleted()) {
     412:             throw new PropelException("Cannot reload a deleted object.");
     413:         }
     414:
     415:         if ($this->isNew()) {
     416:             throw new PropelException("Cannot reload an unsaved object.");
     417:         }
     418:
     419:         if ($con === null) {
     420:             $con = Propel::getConnection(FeatureI18nPeer::DATABASE_NAME, Propel::CONNECTION_READ);
     421:         }
     422:
     423:         // We don't need to alter the object instance pool; we're just modifying this instance
     424:         // already in the pool.
     425:
     426:         $stmt = FeatureI18nPeer::doSelectStmt($this->buildPkeyCriteria(), $con);
     427:         $row = $stmt->fetch(PDO::FETCH_NUM);
     428:         $stmt->closeCursor();
     429:         if (!$row) {
     430:             throw new PropelException('Cannot find matching row in the database to reload object values.');
     431:         }
     432:         $this->hydrate($row, 0, true); // rehydrate
     433:
     434:         if ($deep) {  // also de-associate any related objects?
     435:
     436:             $this->aFeature = null;
     437:         } // if (deep)
     438:     }
     439:
     440:     /**
     441:      * Removes this object from datastore and sets delete attribute.
     442:      *
     443:      * @param PropelPDO $con
     444:      * @return void
     445:      * @throws PropelException
     446:      * @throws Exception
     447:      * @see        BaseObject::setDeleted()
     448:      * @see        BaseObject::isDeleted()
     449:      */
     450:     public function delete(PropelPDO $con = null)
     451:     {
     452:         if ($this->isDeleted()) {
     453:             throw new PropelException("This object has already been deleted.");
     454:         }
     455:
     456:         if ($con === null) {
     457:             $con = Propel::getConnection(FeatureI18nPeer::DATABASE_NAME, Propel::CONNECTION_WRITE);
     458:         }
     459:
     460:         $con->beginTransaction();
     461:         try {
     462:             $deleteQuery = FeatureI18nQuery::create()
     463:                 ->filterByPrimaryKey($this->getPrimaryKey());
     464:             $ret = $this->preDelete($con);
     465:             if ($ret) {
     466:                 $deleteQuery->delete($con);
     467:                 $this->postDelete($con);
     468:                 $con->commit();
     469:                 $this->setDeleted(true);
     470:             } else {
     471:                 $con->commit();
     472:             }
     473:         } catch (Exception $e) {
     474:             $con->rollBack();
     475:             throw $e;
     476:         }
     477:     }
     478:
     479:     /**
     480:      * Persists this object to the database.
     481:      *
     482:      * If the object is new, it inserts it; otherwise an update is performed.
     483:      * All modified related objects will also be persisted in the doSave()
     484:      * method.  This method wraps all precipitate database operations in a
     485:      * single transaction.
     486:      *
     487:      * @param PropelPDO $con
     488:      * @return int             The number of rows affected by this insert/update and any referring fk objects' save() operations.
     489:      * @throws PropelException
     490:      * @throws Exception
     491:      * @see        doSave()
     492:      */
     493:     public function save(PropelPDO $con = null)
     494:     {
     495:         if ($this->isDeleted()) {
     496:             throw new PropelException("You cannot save an object that has been deleted.");
     497:         }
     498:
     499:         if ($con === null) {
     500:             $con = Propel::getConnection(FeatureI18nPeer::DATABASE_NAME, Propel::CONNECTION_WRITE);
     501:         }
     502:
     503:         $con->beginTransaction();
     504:         $isInsert = $this->isNew();
     505:         try {
     506:             $ret = $this->preSave($con);
     507:             if ($isInsert) {
     508:                 $ret = $ret && $this->preInsert($con);
     509:             } else {
     510:                 $ret = $ret && $this->preUpdate($con);
     511:             }
     512:             if ($ret) {
     513:                 $affectedRows = $this->doSave($con);
     514:                 if ($isInsert) {
     515:                     $this->postInsert($con);
     516:                 } else {
     517:                     $this->postUpdate($con);
     518:                 }
     519:                 $this->postSave($con);
     520:                 FeatureI18nPeer::addInstanceToPool($this);
     521:             } else {
     522:                 $affectedRows = 0;
     523:             }
     524:             $con->commit();
     525:
     526:             return $affectedRows;
     527:         } catch (Exception $e) {
     528:             $con->rollBack();
     529:             throw $e;
     530:         }
     531:     }
     532:
     533:     /**
     534:      * Performs the work of inserting or updating the row in the database.
     535:      *
     536:      * If the object is new, it inserts it; otherwise an update is performed.
     537:      * All related objects are also updated in this method.
     538:      *
     539:      * @param PropelPDO $con
     540:      * @return int             The number of rows affected by this insert/update and any referring fk objects' save() operations.
     541:      * @throws PropelException
     542:      * @see        save()
     543:      */
     544:     protected function doSave(PropelPDO $con)
     545:     {
     546:         $affectedRows = 0; // initialize var to track total num of affected rows
     547:         if (!$this->alreadyInSave) {
     548:             $this->alreadyInSave = true;
     549:
     550:             // We call the save method on the following object(s) if they
     551:             // were passed to this object by their coresponding set
     552:             // method.  This object relates to these object(s) by a
     553:             // foreign key reference.
     554:
     555:             if ($this->aFeature !== null) {
     556:                 if ($this->aFeature->isModified() || $this->aFeature->isNew()) {
     557:                     $affectedRows += $this->aFeature->save($con);
     558:                 }
     559:                 $this->setFeature($this->aFeature);
     560:             }
     561:
     562:             if ($this->isNew() || $this->isModified()) {
     563:                 // persist changes
     564:                 if ($this->isNew()) {
     565:                     $this->doInsert($con);
     566:                 } else {
     567:                     $this->doUpdate($con);
     568:                 }
     569:                 $affectedRows += 1;
     570:                 $this->resetModified();
     571:             }
     572:
     573:             $this->alreadyInSave = false;
     574:
     575:         }
     576:
     577:         return $affectedRows;
     578:     } // doSave()
     579:
     580:     /**
     581:      * Insert the row in the database.
     582:      *
     583:      * @param PropelPDO $con
     584:      *
     585:      * @throws PropelException
     586:      * @see        doSave()
     587:      */
     588:     protected function doInsert(PropelPDO $con)
     589:     {
     590:         $modifiedColumns = array();
     591:         $index = 0;
     592:
     593:
     594:          // check the columns in natural order for more readable SQL queries
     595:         if ($this->isColumnModified(FeatureI18nPeer::ID)) {
     596:             $modifiedColumns[':p' . $index++]  = '`id`';
     597:         }
     598:         if ($this->isColumnModified(FeatureI18nPeer::LOCALE)) {
     599:             $modifiedColumns[':p' . $index++]  = '`locale`';
     600:         }
     601:         if ($this->isColumnModified(FeatureI18nPeer::TITLE)) {
     602:             $modifiedColumns[':p' . $index++]  = '`title`';
     603:         }
     604:         if ($this->isColumnModified(FeatureI18nPeer::DESCRIPTION)) {
     605:             $modifiedColumns[':p' . $index++]  = '`description`';
     606:         }
     607:         if ($this->isColumnModified(FeatureI18nPeer::CHAPO)) {
     608:             $modifiedColumns[':p' . $index++]  = '`chapo`';
     609:         }
     610:         if ($this->isColumnModified(FeatureI18nPeer::POSTSCRIPTUM)) {
     611:             $modifiedColumns[':p' . $index++]  = '`postscriptum`';
     612:         }
     613:
     614:         $sql = sprintf(
     615:             'INSERT INTO `feature_i18n` (%s) VALUES (%s)',
     616:             implode(', ', $modifiedColumns),
     617:             implode(', ', array_keys($modifiedColumns))
     618:         );
     619:
     620:         try {
     621:             $stmt = $con->prepare($sql);
     622:             foreach ($modifiedColumns as $identifier => $columnName) {
     623:                 switch ($columnName) {
     624:                     case '`id`':
     625:                         $stmt->bindValue($identifier, $this->id, PDO::PARAM_INT);
     626:                         break;
     627:                     case '`locale`':
     628:                         $stmt->bindValue($identifier, $this->locale, PDO::PARAM_STR);
     629:                         break;
     630:                     case '`title`':
     631:                         $stmt->bindValue($identifier, $this->title, PDO::PARAM_STR);
     632:                         break;
     633:                     case '`description`':
     634:                         $stmt->bindValue($identifier, $this->description, PDO::PARAM_STR);
     635:                         break;
     636:                     case '`chapo`':
     637:                         $stmt->bindValue($identifier, $this->chapo, PDO::PARAM_STR);
     638:                         break;
     639:                     case '`postscriptum`':
     640:                         $stmt->bindValue($identifier, $this->postscriptum, PDO::PARAM_STR);
     641:                         break;
     642:                 }
     643:             }
     644:             $stmt->execute();
     645:         } catch (Exception $e) {
     646:             Propel::log($e->getMessage(), Propel::LOG_ERR);
     647:             throw new PropelException(sprintf('Unable to execute INSERT statement [%s]', $sql), $e);
     648:         }
     649:
     650:         $this->setNew(false);
     651:     }
     652:
     653:     /**
     654:      * Update the row in the database.
     655:      *
     656:      * @param PropelPDO $con
     657:      *
     658:      * @see        doSave()
     659:      */
     660:     protected function doUpdate(PropelPDO $con)
     661:     {
     662:         $selectCriteria = $this->buildPkeyCriteria();
     663:         $valuesCriteria = $this->buildCriteria();
     664:         BasePeer::doUpdate($selectCriteria, $valuesCriteria, $con);
     665:     }
     666:
     667:     /**
     668:      * Array of ValidationFailed objects.
     669:      * @var        array ValidationFailed[]
     670:      */
     671:     protected $validationFailures = array();
     672:
     673:     /**
     674:      * Gets any ValidationFailed objects that resulted from last call to validate().
     675:      *
     676:      *
     677:      * @return array ValidationFailed[]
     678:      * @see        validate()
     679:      */
     680:     public function getValidationFailures()
     681:     {
     682:         return $this->validationFailures;
     683:     }
     684:
     685:     /**
     686:      * Validates the objects modified field values and all objects related to this table.
     687:      *
     688:      * If $columns is either a column name or an array of column names
     689:      * only those columns are validated.
     690:      *
     691:      * @param mixed $columns Column name or an array of column names.
     692:      * @return boolean Whether all columns pass validation.
     693:      * @see        doValidate()
     694:      * @see        getValidationFailures()
     695:      */
     696:     public function validate($columns = null)
     697:     {
     698:         $res = $this->doValidate($columns);
     699:         if ($res === true) {
     700:             $this->validationFailures = array();
     701:
     702:             return true;
     703:         }
     704:
     705:         $this->validationFailures = $res;
     706:
     707:         return false;
     708:     }
     709:
     710:     /**
     711:      * This function performs the validation work for complex object models.
     712:      *
     713:      * In addition to checking the current object, all related objects will
     714:      * also be validated.  If all pass then <code>true</code> is returned; otherwise
     715:      * an aggreagated array of ValidationFailed objects will be returned.
     716:      *
     717:      * @param array $columns Array of column names to validate.
     718:      * @return mixed <code>true</code> if all validations pass; array of <code>ValidationFailed</code> objets otherwise.
     719:      */
     720:     protected function doValidate($columns = null)
     721:     {
     722:         if (!$this->alreadyInValidation) {
     723:             $this->alreadyInValidation = true;
     724:             $retval = null;
     725:
     726:             $failureMap = array();
     727:
     728:
     729:             // We call the validate method on the following object(s) if they
     730:             // were passed to this object by their coresponding set
     731:             // method.  This object relates to these object(s) by a
     732:             // foreign key reference.
     733:
     734:             if ($this->aFeature !== null) {
     735:                 if (!$this->aFeature->validate($columns)) {
     736:                     $failureMap = array_merge($failureMap, $this->aFeature->getValidationFailures());
     737:                 }
     738:             }
     739:
     740:
     741:             if (($retval = FeatureI18nPeer::doValidate($this, $columns)) !== true) {
     742:                 $failureMap = array_merge($failureMap, $retval);
     743:             }
     744:
     745:
     746:
     747:             $this->alreadyInValidation = false;
     748:         }
     749:
     750:         return (!empty($failureMap) ? $failureMap : true);
     751:     }
     752:
     753:     /**
     754:      * Retrieves a field from the object by name passed in as a string.
     755:      *
     756:      * @param string $name name
     757:      * @param string $type The type of fieldname the $name is of:
     758:      *               one of the class type constants BasePeer::TYPE_PHPNAME, BasePeer::TYPE_STUDLYPHPNAME
     759:      *               BasePeer::TYPE_COLNAME, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_NUM.
     760:      *               Defaults to BasePeer::TYPE_PHPNAME
     761:      * @return mixed Value of field.
     762:      */
     763:     public function getByName($name, $type = BasePeer::TYPE_PHPNAME)
     764:     {
     765:         $pos = FeatureI18nPeer::translateFieldName($name, $type, BasePeer::TYPE_NUM);
     766:         $field = $this->getByPosition($pos);
     767:
     768:         return $field;
     769:     }
     770:
     771:     /**
     772:      * Retrieves a field from the object by Position as specified in the xml schema.
     773:      * Zero-based.
     774:      *
     775:      * @param int $pos position in xml schema
     776:      * @return mixed Value of field at $pos
     777:      */
     778:     public function getByPosition($pos)
     779:     {
     780:         switch ($pos) {
     781:             case 0:
     782:                 return $this->getId();
     783:                 break;
     784:             case 1:
     785:                 return $this->getLocale();
     786:                 break;
     787:             case 2:
     788:                 return $this->getTitle();
     789:                 break;
     790:             case 3:
     791:                 return $this->getDescription();
     792:                 break;
     793:             case 4:
     794:                 return $this->getChapo();
     795:                 break;
     796:             case 5:
     797:                 return $this->getPostscriptum();
     798:                 break;
     799:             default:
     800:                 return null;
     801:                 break;
     802:         } // switch()
     803:     }
     804:
     805:     /**
     806:      * Exports the object as an array.
     807:      *
     808:      * You can specify the key type of the array by passing one of the class
     809:      * type constants.
     810:      *
     811:      * @param     string  $keyType (optional) One of the class type constants BasePeer::TYPE_PHPNAME, BasePeer::TYPE_STUDLYPHPNAME,
     812:      *                    BasePeer::TYPE_COLNAME, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_NUM.
     813:      *                    Defaults to BasePeer::TYPE_PHPNAME.
     814:      * @param     boolean $includeLazyLoadColumns (optional) Whether to include lazy loaded columns. Defaults to true.
     815:      * @param     array $alreadyDumpedObjects List of objects to skip to avoid recursion
     816:      * @param     boolean $includeForeignObjects (optional) Whether to include hydrated related objects. Default to FALSE.
     817:      *
     818:      * @return array an associative array containing the field names (as keys) and field values
     819:      */
     820:     public function toArray($keyType = BasePeer::TYPE_PHPNAME, $includeLazyLoadColumns = true, $alreadyDumpedObjects = array(), $includeForeignObjects = false)
     821:     {
     822:         if (isset($alreadyDumpedObjects['FeatureI18n'][serialize($this->getPrimaryKey())])) {
     823:             return '*RECURSION*';
     824:         }
     825:         $alreadyDumpedObjects['FeatureI18n'][serialize($this->getPrimaryKey())] = true;
     826:         $keys = FeatureI18nPeer::getFieldNames($keyType);
     827:         $result = array(
     828:             $keys[0] => $this->getId(),
     829:             $keys[1] => $this->getLocale(),
     830:             $keys[2] => $this->getTitle(),
     831:             $keys[3] => $this->getDescription(),
     832:             $keys[4] => $this->getChapo(),
     833:             $keys[5] => $this->getPostscriptum(),
     834:         );
     835:         if ($includeForeignObjects) {
     836:             if (null !== $this->aFeature) {
     837:                 $result['Feature'] = $this->aFeature->toArray($keyType, $includeLazyLoadColumns,  $alreadyDumpedObjects, true);
     838:             }
     839:         }
     840:
     841:         return $result;
     842:     }
     843:
     844:     /**
     845:      * Sets a field from the object by name passed in as a string.
     846:      *
     847:      * @param string $name peer name
     848:      * @param mixed $value field value
     849:      * @param string $type The type of fieldname the $name is of:
     850:      *                     one of the class type constants BasePeer::TYPE_PHPNAME, BasePeer::TYPE_STUDLYPHPNAME
     851:      *                     BasePeer::TYPE_COLNAME, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_NUM.
     852:      *                     Defaults to BasePeer::TYPE_PHPNAME
     853:      * @return void
     854:      */
     855:     public function setByName($name, $value, $type = BasePeer::TYPE_PHPNAME)
     856:     {
     857:         $pos = FeatureI18nPeer::translateFieldName($name, $type, BasePeer::TYPE_NUM);
     858:
     859:         $this->setByPosition($pos, $value);
     860:     }
     861:
     862:     /**
     863:      * Sets a field from the object by Position as specified in the xml schema.
     864:      * Zero-based.
     865:      *
     866:      * @param int $pos position in xml schema
     867:      * @param mixed $value field value
     868:      * @return void
     869:      */
     870:     public function setByPosition($pos, $value)
     871:     {
     872:         switch ($pos) {
     873:             case 0:
     874:                 $this->setId($value);
     875:                 break;
     876:             case 1:
     877:                 $this->setLocale($value);
     878:                 break;
     879:             case 2:
     880:                 $this->setTitle($value);
     881:                 break;
     882:             case 3:
     883:                 $this->setDescription($value);
     884:                 break;
     885:             case 4:
     886:                 $this->setChapo($value);
     887:                 break;
     888:             case 5:
     889:                 $this->setPostscriptum($value);
     890:                 break;
     891:         } // switch()
     892:     }
     893:
     894:     /**
     895:      * Populates the object using an array.
     896:      *
     897:      * This is particularly useful when populating an object from one of the
     898:      * request arrays (e.g. $_POST).  This method goes through the column
     899:      * names, checking to see whether a matching key exists in populated
     900:      * array. If so the setByName() method is called for that column.
     901:      *
     902:      * You can specify the key type of the array by additionally passing one
     903:      * of the class type constants BasePeer::TYPE_PHPNAME, BasePeer::TYPE_STUDLYPHPNAME,
     904:      * BasePeer::TYPE_COLNAME, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_NUM.
     905:      * The default key type is the column's BasePeer::TYPE_PHPNAME
     906:      *
     907:      * @param array  $arr     An array to populate the object from.
     908:      * @param string $keyType The type of keys the array uses.
     909:      * @return void
     910:      */
     911:     public function fromArray($arr, $keyType = BasePeer::TYPE_PHPNAME)
     912:     {
     913:         $keys = FeatureI18nPeer::getFieldNames($keyType);
     914:
     915:         if (array_key_exists($keys[0], $arr)) $this->setId($arr[$keys[0]]);
     916:         if (array_key_exists($keys[1], $arr)) $this->setLocale($arr[$keys[1]]);
     917:         if (array_key_exists($keys[2], $arr)) $this->setTitle($arr[$keys[2]]);
     918:         if (array_key_exists($keys[3], $arr)) $this->setDescription($arr[$keys[3]]);
     919:         if (array_key_exists($keys[4], $arr)) $this->setChapo($arr[$keys[4]]);
     920:         if (array_key_exists($keys[5], $arr)) $this->setPostscriptum($arr[$keys[5]]);
     921:     }
     922:
     923:     /**
     924:      * Build a Criteria object containing the values of all modified columns in this object.
     925:      *
     926:      * @return Criteria The Criteria object containing all modified values.
     927:      */
     928:     public function buildCriteria()
     929:     {
     930:         $criteria = new Criteria(FeatureI18nPeer::DATABASE_NAME);
     931:
     932:         if ($this->isColumnModified(FeatureI18nPeer::ID)) $criteria->add(FeatureI18nPeer::ID, $this->id);
     933:         if ($this->isColumnModified(FeatureI18nPeer::LOCALE)) $criteria->add(FeatureI18nPeer::LOCALE, $this->locale);
     934:         if ($this->isColumnModified(FeatureI18nPeer::TITLE)) $criteria->add(FeatureI18nPeer::TITLE, $this->title);
     935:         if ($this->isColumnModified(FeatureI18nPeer::DESCRIPTION)) $criteria->add(FeatureI18nPeer::DESCRIPTION, $this->description);
     936:         if ($this->isColumnModified(FeatureI18nPeer::CHAPO)) $criteria->add(FeatureI18nPeer::CHAPO, $this->chapo);
     937:         if ($this->isColumnModified(FeatureI18nPeer::POSTSCRIPTUM)) $criteria->add(FeatureI18nPeer::POSTSCRIPTUM, $this->postscriptum);
     938:
     939:         return $criteria;
     940:     }
     941:
     942:     /**
     943:      * Builds a Criteria object containing the primary key for this object.
     944:      *
     945:      * Unlike buildCriteria() this method includes the primary key values regardless
     946:      * of whether or not they have been modified.
     947:      *
     948:      * @return Criteria The Criteria object containing value(s) for primary key(s).
     949:      */
     950:     public function buildPkeyCriteria()
     951:     {
     952:         $criteria = new Criteria(FeatureI18nPeer::DATABASE_NAME);
     953:         $criteria->add(FeatureI18nPeer::ID, $this->id);
     954:         $criteria->add(FeatureI18nPeer::LOCALE, $this->locale);
     955:
     956:         return $criteria;
     957:     }
     958:
     959:     /**
     960:      * Returns the composite primary key for this object.
     961:      * The array elements will be in same order as specified in XML.
     962:      * @return array
     963:      */
     964:     public function getPrimaryKey()
     965:     {
     966:         $pks = array();
     967:         $pks[0] = $this->getId();
     968:         $pks[1] = $this->getLocale();
     969:
     970:         return $pks;
     971:     }
     972:
     973:     /**
     974:      * Set the [composite] primary key.
     975:      *
     976:      * @param array $keys The elements of the composite key (order must match the order in XML file).
     977:      * @return void
     978:      */
     979:     public function setPrimaryKey($keys)
     980:     {
     981:         $this->setId($keys[0]);
     982:         $this->setLocale($keys[1]);
     983:     }
     984:
     985:     /**
     986:      * Returns true if the primary key for this object is null.
     987:      * @return boolean
     988:      */
     989:     public function isPrimaryKeyNull()
     990:     {
     991:
     992:         return (null === $this->getId()) && (null === $this->getLocale());
     993:     }
     994:
     995:     /**
     996:      * Sets contents of passed object to values from current object.
     997:      *
     998:      * If desired, this method can also make copies of all associated (fkey referrers)
     999:      * objects.
    1000:      *
    1001:      * @param object $copyObj An object of FeatureI18n (or compatible) type.
    1002:      * @param boolean $deepCopy Whether to also copy all rows that refer (by fkey) to the current row.
    1003:      * @param boolean $makeNew Whether to reset autoincrement PKs and make the object new.
    1004:      * @throws PropelException
    1005:      */
    1006:     public function copyInto($copyObj, $deepCopy = false, $makeNew = true)
    1007:     {
    1008:         $copyObj->setId($this->getId());
    1009:         $copyObj->setLocale($this->getLocale());
    1010:         $copyObj->setTitle($this->getTitle());
    1011:         $copyObj->setDescription($this->getDescription());
    1012:         $copyObj->setChapo($this->getChapo());
    1013:         $copyObj->setPostscriptum($this->getPostscriptum());
    1014:
    1015:         if ($deepCopy && !$this->startCopy) {
    1016:             // important: temporarily setNew(false) because this affects the behavior of
    1017:             // the getter/setter methods for fkey referrer objects.
    1018:             $copyObj->setNew(false);
    1019:             // store object hash to prevent cycle
    1020:             $this->startCopy = true;
    1021:
    1022:             //unflag object copy
    1023:             $this->startCopy = false;
    1024:         } // if ($deepCopy)
    1025:
    1026:         if ($makeNew) {
    1027:             $copyObj->setNew(true);
    1028:         }
    1029:     }
    1030:
    1031:     /**
    1032:      * Makes a copy of this object that will be inserted as a new row in table when saved.
    1033:      * It creates a new object filling in the simple attributes, but skipping any primary
    1034:      * keys that are defined for the table.
    1035:      *
    1036:      * If desired, this method can also make copies of all associated (fkey referrers)
    1037:      * objects.
    1038:      *
    1039:      * @param boolean $deepCopy Whether to also copy all rows that refer (by fkey) to the current row.
    1040:      * @return FeatureI18n Clone of current object.
    1041:      * @throws PropelException
    1042:      */
    1043:     public function copy($deepCopy = false)
    1044:     {
    1045:         // we use get_class(), because this might be a subclass
    1046:         $clazz = get_class($this);
    1047:         $copyObj = new $clazz();
    1048:         $this->copyInto($copyObj, $deepCopy);
    1049:
    1050:         return $copyObj;
    1051:     }
    1052:
    1053:     /**
    1054:      * Returns a peer instance associated with this om.
    1055:      *
    1056:      * Since Peer classes are not to have any instance attributes, this method returns the
    1057:      * same instance for all member of this class. The method could therefore
    1058:      * be static, but this would prevent one from overriding the behavior.
    1059:      *
    1060:      * @return FeatureI18nPeer
    1061:      */
    1062:     public function getPeer()
    1063:     {
    1064:         if (self::$peer === null) {
    1065:             self::$peer = new FeatureI18nPeer();
    1066:         }
    1067:
    1068:         return self::$peer;
    1069:     }
    1070:
    1071:     /**
    1072:      * Declares an association between this object and a Feature object.
    1073:      *
    1074:      * @param             Feature $v
    1075:      * @return FeatureI18n The current object (for fluent API support)
    1076:      * @throws PropelException
    1077:      */
    1078:     public function setFeature(Feature $v = null)
    1079:     {
    1080:         if ($v === null) {
    1081:             $this->setId(NULL);
    1082:         } else {
    1083:             $this->setId($v->getId());
    1084:         }
    1085:
    1086:         $this->aFeature = $v;
    1087:
    1088:         // Add binding for other direction of this n:n relationship.
    1089:         // If this object has already been added to the Feature object, it will not be re-added.
    1090:         if ($v !== null) {
    1091:             $v->addFeatureI18n($this);
    1092:         }
    1093:
    1094:
    1095:         return $this;
    1096:     }
    1097:
    1098:
    1099:     /**
    1100:      * Get the associated Feature object
    1101:      *
    1102:      * @param PropelPDO $con Optional Connection object.
    1103:      * @param $doQuery Executes a query to get the object if required
    1104:      * @return Feature The associated Feature object.
    1105:      * @throws PropelException
    1106:      */
    1107:     public function getFeature(PropelPDO $con = null, $doQuery = true)
    1108:     {
    1109:         if ($this->aFeature === null && ($this->id !== null) && $doQuery) {
    1110:             $this->aFeature = FeatureQuery::create()->findPk($this->id, $con);
    1111:             /* The following can be used additionally to
    1112:                 guarantee the related object contains a reference
    1113:                 to this object.  This level of coupling may, however, be
    1114:                 undesirable since it could result in an only partially populated collection
    1115:                 in the referenced object.
    1116:                 $this->aFeature->addFeatureI18ns($this);
    1117:              */
    1118:         }
    1119:
    1120:         return $this->aFeature;
    1121:     }
    1122:
    1123:     /**
    1124:      * Clears the current object and sets all attributes to their default values
    1125:      */
    1126:     public function clear()
    1127:     {
    1128:         $this->id = null;
    1129:         $this->locale = null;
    1130:         $this->title = null;
    1131:         $this->description = null;
    1132:         $this->chapo = null;
    1133:         $this->postscriptum = null;
    1134:         $this->alreadyInSave = false;
    1135:         $this->alreadyInValidation = false;
    1136:         $this->alreadyInClearAllReferencesDeep = false;
    1137:         $this->clearAllReferences();
    1138:         $this->applyDefaultValues();
    1139:         $this->resetModified();
    1140:         $this->setNew(true);
    1141:         $this->setDeleted(false);
    1142:     }
    1143:
    1144:     /**
    1145:      * Resets all references to other model objects or collections of model objects.
    1146:      *
    1147:      * This method is a user-space workaround for PHP's inability to garbage collect
    1148:      * objects with circular references (even in PHP 5.3). This is currently necessary
    1149:      * when using Propel in certain daemon or large-volumne/high-memory operations.
    1150:      *
    1151:      * @param boolean $deep Whether to also clear the references on all referrer objects.
    1152:      */
    1153:     public function clearAllReferences($deep = false)
    1154:     {
    1155:         if ($deep && !$this->alreadyInClearAllReferencesDeep) {
    1156:             $this->alreadyInClearAllReferencesDeep = true;
    1157:             if ($this->aFeature instanceof Persistent) {
    1158:               $this->aFeature->clearAllReferences($deep);
    1159:             }
    1160:
    1161:             $this->alreadyInClearAllReferencesDeep = false;
    1162:         } // if ($deep)
    1163:
    1164:         $this->aFeature = null;
    1165:     }
    1166:
    1167:     /**
    1168:      * return the string representation of this object
    1169:      *
    1170:      * @return string
    1171:      */
    1172:     public function __toString()
    1173:     {
    1174:         return (string) $this->exportTo(FeatureI18nPeer::DEFAULT_STRING_FORMAT);
    1175:     }
    1176:
    1177:     /**
    1178:      * return true is the object is in saving state
    1179:      *
    1180:      * @return boolean
    1181:      */
    1182:     public function isAlreadyInSave()
    1183:     {
    1184:         return $this->alreadyInSave;
    1185:     }
    1186:
    1187: }
    1188: