Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace Artsofte\MainBundle\Model\om;
- use \BaseObject;
- use \BasePeer;
- use \Criteria;
- use \Exception;
- use \NestedSetRecursiveIterator;
- use \PDO;
- use \Persistent;
- use \Propel;
- use \PropelCollection;
- use \PropelException;
- use \PropelObjectCollection;
- use \PropelPDO;
- use Artsofte\MainBundle\Model\Article;
- use Artsofte\MainBundle\Model\ArticleI18n;
- use Artsofte\MainBundle\Model\ArticleI18nQuery;
- use Artsofte\MainBundle\Model\ArticlePeer;
- use Artsofte\MainBundle\Model\ArticleQuery;
- use Artsofte\MainBundle\Model\SiteModule;
- use Artsofte\MainBundle\Model\SiteModuleQuery;
- abstract class BaseArticle extends BaseObject implements Persistent
- {
- /**
- * Peer class name
- */
- const PEER = 'Artsofte\\MainBundle\\Model\\ArticlePeer';
- /**
- * The Peer class.
- * Instance provides a convenient way of calling static methods on a class
- * that calling code may not be able to identify.
- * @var ArticlePeer
- */
- protected static $peer;
- /**
- * The flag var to prevent infinite loop in deep copy
- * @var boolean
- */
- protected $startCopy = false;
- /**
- * The value for the id field.
- * @var string
- */
- protected $id;
- /**
- * The value for the active field.
- * @var boolean
- */
- protected $active;
- /**
- * The value for the alias field.
- * @var string
- */
- protected $alias;
- /**
- * The value for the site_module_id field.
- * @var int
- */
- protected $site_module_id;
- /**
- * The value for the tree_left field.
- * @var int
- */
- protected $tree_left;
- /**
- * The value for the tree_right field.
- * @var int
- */
- protected $tree_right;
- /**
- * The value for the tree_level field.
- * @var int
- */
- protected $tree_level;
- /**
- * @var SiteModule
- */
- protected $aSiteModule;
- /**
- * @var PropelObjectCollection|ArticleI18n[] Collection to store aggregation of ArticleI18n objects.
- */
- protected $collArticleI18ns;
- protected $collArticleI18nsPartial;
- /**
- * Flag to prevent endless save loop, if this object is referenced
- * by another object which falls in this transaction.
- * @var boolean
- */
- protected $alreadyInSave = false;
- /**
- * Flag to prevent endless validation loop, if this object is referenced
- * by another object which falls in this transaction.
- * @var boolean
- */
- protected $alreadyInValidation = false;
- /**
- * Flag to prevent endless clearAllReferences($deep=true) loop, if this object is referenced
- * @var boolean
- */
- protected $alreadyInClearAllReferencesDeep = false;
- // nested_set behavior
- /**
- * Queries to be executed in the save transaction
- * @var array
- */
- protected $nestedSetQueries = array();
- /**
- * Internal cache for children nodes
- * @var null|PropelObjectCollection
- */
- protected $collNestedSetChildren = null;
- /**
- * Internal cache for parent node
- * @var null|Article
- */
- protected $aNestedSetParent = null;
- // i18n behavior
- /**
- * Current locale
- * @var string
- */
- protected $currentLocale = 'en_US';
- /**
- * Current translation objects
- * @var array[ArticleI18n]
- */
- protected $currentTranslations;
- /**
- * An array of objects scheduled for deletion.
- * @var PropelObjectCollection
- */
- protected $articleI18nsScheduledForDeletion = null;
- /**
- * Get the [id] column value.
- *
- * @return string
- */
- public function getId()
- {
- return $this->id;
- }
- /**
- * Get the [active] column value.
- *
- * @return boolean
- */
- public function getActive()
- {
- return $this->active;
- }
- /**
- * Get the [alias] column value.
- *
- * @return string
- */
- public function getAlias()
- {
- return $this->alias;
- }
- /**
- * Get the [site_module_id] column value.
- *
- * @return int
- */
- public function getSiteModuleId()
- {
- return $this->site_module_id;
- }
- /**
- * Get the [tree_left] column value.
- *
- * @return int
- */
- public function getTreeLeft()
- {
- return $this->tree_left;
- }
- /**
- * Get the [tree_right] column value.
- *
- * @return int
- */
- public function getTreeRight()
- {
- return $this->tree_right;
- }
- /**
- * Get the [tree_level] column value.
- *
- * @return int
- */
- public function getTreeLevel()
- {
- return $this->tree_level;
- }
- /**
- * Set the value of [id] column.
- *
- * @param string $v new value
- * @return Article The current object (for fluent API support)
- */
- public function setId($v)
- {
- if ($v !== null && is_numeric($v)) {
- $v = (string) $v;
- }
- if ($this->id !== $v) {
- $this->id = $v;
- $this->modifiedColumns[] = ArticlePeer::ID;
- }
- return $this;
- } // setId()
- /**
- * Sets the value of the [active] column.
- * Non-boolean arguments are converted using the following rules:
- * * 1, '1', 'true', 'on', and 'yes' are converted to boolean true
- * * 0, '0', 'false', 'off', and 'no' are converted to boolean false
- * Check on string values is case insensitive (so 'FaLsE' is seen as 'false').
- *
- * @param boolean|integer|string $v The new value
- * @return Article The current object (for fluent API support)
- */
- public function setActive($v)
- {
- if ($v !== null) {
- if (is_string($v)) {
- $v = in_array(strtolower($v), array('false', 'off', '-', 'no', 'n', '0', '')) ? false : true;
- } else {
- $v = (boolean) $v;
- }
- }
- if ($this->active !== $v) {
- $this->active = $v;
- $this->modifiedColumns[] = ArticlePeer::ACTIVE;
- }
- return $this;
- } // setActive()
- /**
- * Set the value of [alias] column.
- *
- * @param string $v new value
- * @return Article The current object (for fluent API support)
- */
- public function setAlias($v)
- {
- if ($v !== null) {
- $v = (string) $v;
- }
- if ($this->alias !== $v) {
- $this->alias = $v;
- $this->modifiedColumns[] = ArticlePeer::ALIAS;
- }
- return $this;
- } // setAlias()
- /**
- * Set the value of [site_module_id] column.
- *
- * @param int $v new value
- * @return Article The current object (for fluent API support)
- */
- public function setSiteModuleId($v)
- {
- if ($v !== null && is_numeric($v)) {
- $v = (int) $v;
- }
- if ($this->site_module_id !== $v) {
- $this->site_module_id = $v;
- $this->modifiedColumns[] = ArticlePeer::SITE_MODULE_ID;
- }
- if ($this->aSiteModule !== null && $this->aSiteModule->getId() !== $v) {
- $this->aSiteModule = null;
- }
- return $this;
- } // setSiteModuleId()
- /**
- * Set the value of [tree_left] column.
- *
- * @param int $v new value
- * @return Article The current object (for fluent API support)
- */
- public function setTreeLeft($v)
- {
- if ($v !== null && is_numeric($v)) {
- $v = (int) $v;
- }
- if ($this->tree_left !== $v) {
- $this->tree_left = $v;
- $this->modifiedColumns[] = ArticlePeer::TREE_LEFT;
- }
- return $this;
- } // setTreeLeft()
- /**
- * Set the value of [tree_right] column.
- *
- * @param int $v new value
- * @return Article The current object (for fluent API support)
- */
- public function setTreeRight($v)
- {
- if ($v !== null && is_numeric($v)) {
- $v = (int) $v;
- }
- if ($this->tree_right !== $v) {
- $this->tree_right = $v;
- $this->modifiedColumns[] = ArticlePeer::TREE_RIGHT;
- }
- return $this;
- } // setTreeRight()
- /**
- * Set the value of [tree_level] column.
- *
- * @param int $v new value
- * @return Article The current object (for fluent API support)
- */
- public function setTreeLevel($v)
- {
- if ($v !== null && is_numeric($v)) {
- $v = (int) $v;
- }
- if ($this->tree_level !== $v) {
- $this->tree_level = $v;
- $this->modifiedColumns[] = ArticlePeer::TREE_LEVEL;
- }
- return $this;
- } // setTreeLevel()
- /**
- * Indicates whether the columns in this object are only set to default values.
- *
- * This method can be used in conjunction with isModified() to indicate whether an object is both
- * modified _and_ has some values set which are non-default.
- *
- * @return boolean Whether the columns in this object are only been set with default values.
- */
- public function hasOnlyDefaultValues()
- {
- // otherwise, everything was equal, so return true
- return true;
- } // hasOnlyDefaultValues()
- /**
- * Hydrates (populates) the object variables with values from the database resultset.
- *
- * An offset (0-based "start column") is specified so that objects can be hydrated
- * with a subset of the columns in the resultset rows. This is needed, for example,
- * for results of JOIN queries where the resultset row includes columns from two or
- * more tables.
- *
- * @param array $row The row returned by PDOStatement->fetch(PDO::FETCH_NUM)
- * @param int $startcol 0-based offset column which indicates which resultset column to start with.
- * @param boolean $rehydrate Whether this object is being re-hydrated from the database.
- * @return int next starting column
- * @throws PropelException - Any caught Exception will be rewrapped as a PropelException.
- */
- public function hydrate($row, $startcol = 0, $rehydrate = false)
- {
- try {
- $this->id = ($row[$startcol + 0] !== null) ? (string) $row[$startcol + 0] : null;
- $this->active = ($row[$startcol + 1] !== null) ? (boolean) $row[$startcol + 1] : null;
- $this->alias = ($row[$startcol + 2] !== null) ? (string) $row[$startcol + 2] : null;
- $this->site_module_id = ($row[$startcol + 3] !== null) ? (int) $row[$startcol + 3] : null;
- $this->tree_left = ($row[$startcol + 4] !== null) ? (int) $row[$startcol + 4] : null;
- $this->tree_right = ($row[$startcol + 5] !== null) ? (int) $row[$startcol + 5] : null;
- $this->tree_level = ($row[$startcol + 6] !== null) ? (int) $row[$startcol + 6] : null;
- $this->resetModified();
- $this->setNew(false);
- if ($rehydrate) {
- $this->ensureConsistency();
- }
- $this->postHydrate($row, $startcol, $rehydrate);
- return $startcol + 7; // 7 = ArticlePeer::NUM_HYDRATE_COLUMNS.
- } catch (Exception $e) {
- throw new PropelException("Error populating Article object", $e);
- }
- }
- /**
- * Checks and repairs the internal consistency of the object.
- *
- * This method is executed after an already-instantiated object is re-hydrated
- * from the database. It exists to check any foreign keys to make sure that
- * the objects related to the current object are correct based on foreign key.
- *
- * You can override this method in the stub class, but you should always invoke
- * the base method from the overridden method (i.e. parent::ensureConsistency()),
- * in case your model changes.
- *
- * @throws PropelException
- */
- public function ensureConsistency()
- {
- if ($this->aSiteModule !== null && $this->site_module_id !== $this->aSiteModule->getId()) {
- $this->aSiteModule = null;
- }
- } // ensureConsistency
- /**
- * Reloads this object from datastore based on primary key and (optionally) resets all associated objects.
- *
- * This will only work if the object has been saved and has a valid primary key set.
- *
- * @param boolean $deep (optional) Whether to also de-associated any related objects.
- * @param PropelPDO $con (optional) The PropelPDO connection to use.
- * @return void
- * @throws PropelException - if this object is deleted, unsaved or doesn't have pk match in db
- */
- public function reload($deep = false, PropelPDO $con = null)
- {
- if ($this->isDeleted()) {
- throw new PropelException("Cannot reload a deleted object.");
- }
- if ($this->isNew()) {
- throw new PropelException("Cannot reload an unsaved object.");
- }
- if ($con === null) {
- $con = Propel::getConnection(ArticlePeer::DATABASE_NAME, Propel::CONNECTION_READ);
- }
- // We don't need to alter the object instance pool; we're just modifying this instance
- // already in the pool.
- $stmt = ArticlePeer::doSelectStmt($this->buildPkeyCriteria(), $con);
- $row = $stmt->fetch(PDO::FETCH_NUM);
- $stmt->closeCursor();
- if (!$row) {
- throw new PropelException('Cannot find matching row in the database to reload object values.');
- }
- $this->hydrate($row, 0, true); // rehydrate
- if ($deep) { // also de-associate any related objects?
- $this->aSiteModule = null;
- $this->collArticleI18ns = null;
- } // if (deep)
- }
- /**
- * Removes this object from datastore and sets delete attribute.
- *
- * @param PropelPDO $con
- * @return void
- * @throws PropelException
- * @throws Exception
- * @see BaseObject::setDeleted()
- * @see BaseObject::isDeleted()
- */
- public function delete(PropelPDO $con = null)
- {
- if ($this->isDeleted()) {
- throw new PropelException("This object has already been deleted.");
- }
- if ($con === null) {
- $con = Propel::getConnection(ArticlePeer::DATABASE_NAME, Propel::CONNECTION_WRITE);
- }
- $con->beginTransaction();
- try {
- $deleteQuery = ArticleQuery::create()
- ->filterByPrimaryKey($this->getPrimaryKey());
- $ret = $this->preDelete($con);
- // nested_set behavior
- if ($this->isRoot()) {
- throw new PropelException('Deletion of a root node is disabled for nested sets. Use ArticlePeer::deleteTree() instead to delete an entire tree');
- }
- if ($this->isInTree()) {
- $this->deleteDescendants($con);
- }
- if ($ret) {
- $deleteQuery->delete($con);
- $this->postDelete($con);
- // nested_set behavior
- if ($this->isInTree()) {
- // fill up the room that was used by the node
- ArticlePeer::shiftRLValues(-2, $this->getRightValue() + 1, null, $con);
- }
- $con->commit();
- $this->setDeleted(true);
- } else {
- $con->commit();
- }
- } catch (Exception $e) {
- $con->rollBack();
- throw $e;
- }
- }
- /**
- * Persists this object to the database.
- *
- * If the object is new, it inserts it; otherwise an update is performed.
- * All modified related objects will also be persisted in the doSave()
- * method. This method wraps all precipitate database operations in a
- * single transaction.
- *
- * @param PropelPDO $con
- * @return int The number of rows affected by this insert/update and any referring fk objects' save() operations.
- * @throws PropelException
- * @throws Exception
- * @see doSave()
- */
- public function save(PropelPDO $con = null)
- {
- if ($this->isDeleted()) {
- throw new PropelException("You cannot save an object that has been deleted.");
- }
- if ($con === null) {
- $con = Propel::getConnection(ArticlePeer::DATABASE_NAME, Propel::CONNECTION_WRITE);
- }
- $con->beginTransaction();
- $isInsert = $this->isNew();
- try {
- $ret = $this->preSave($con);
- // nested_set behavior
- if ($this->isNew() && $this->isRoot()) {
- // check if no other root exist in, the tree
- $nbRoots = ArticleQuery::create()
- ->addUsingAlias(ArticlePeer::LEFT_COL, 1, Criteria::EQUAL)
- ->count($con);
- if ($nbRoots > 0) {
- throw new PropelException('A root node already exists in this tree. To allow multiple root nodes, add the `use_scope` parameter in the nested_set behavior tag.');
- }
- }
- $this->processNestedSetQueries($con);
- if ($isInsert) {
- $ret = $ret && $this->preInsert($con);
- } else {
- $ret = $ret && $this->preUpdate($con);
- }
- if ($ret) {
- $affectedRows = $this->doSave($con);
- if ($isInsert) {
- $this->postInsert($con);
- } else {
- $this->postUpdate($con);
- }
- $this->postSave($con);
- ArticlePeer::addInstanceToPool($this);
- } else {
- $affectedRows = 0;
- }
- $con->commit();
- return $affectedRows;
- } catch (Exception $e) {
- $con->rollBack();
- throw $e;
- }
- }
- /**
- * Performs the work of inserting or updating the row in the database.
- *
- * If the object is new, it inserts it; otherwise an update is performed.
- * All related objects are also updated in this method.
- *
- * @param PropelPDO $con
- * @return int The number of rows affected by this insert/update and any referring fk objects' save() operations.
- * @throws PropelException
- * @see save()
- */
- protected function doSave(PropelPDO $con)
- {
- $affectedRows = 0; // initialize var to track total num of affected rows
- if (!$this->alreadyInSave) {
- $this->alreadyInSave = true;
- // We call the save method on the following object(s) if they
- // were passed to this object by their corresponding set
- // method. This object relates to these object(s) by a
- // foreign key reference.
- if ($this->aSiteModule !== null) {
- if ($this->aSiteModule->isModified() || $this->aSiteModule->isNew()) {
- $affectedRows += $this->aSiteModule->save($con);
- }
- $this->setSiteModule($this->aSiteModule);
- }
- if ($this->isNew() || $this->isModified()) {
- // persist changes
- if ($this->isNew()) {
- $this->doInsert($con);
- } else {
- $this->doUpdate($con);
- }
- $affectedRows += 1;
- $this->resetModified();
- }
- if ($this->articleI18nsScheduledForDeletion !== null) {
- if (!$this->articleI18nsScheduledForDeletion->isEmpty()) {
- ArticleI18nQuery::create()
- ->filterByPrimaryKeys($this->articleI18nsScheduledForDeletion->getPrimaryKeys(false))
- ->delete($con);
- $this->articleI18nsScheduledForDeletion = null;
- }
- }
- if ($this->collArticleI18ns !== null) {
- foreach ($this->collArticleI18ns as $referrerFK) {
- if (!$referrerFK->isDeleted() && ($referrerFK->isNew() || $referrerFK->isModified())) {
- $affectedRows += $referrerFK->save($con);
- }
- }
- }
- $this->alreadyInSave = false;
- }
- return $affectedRows;
- } // doSave()
- /**
- * Insert the row in the database.
- *
- * @param PropelPDO $con
- *
- * @throws PropelException
- * @see doSave()
- */
- protected function doInsert(PropelPDO $con)
- {
- $modifiedColumns = array();
- $index = 0;
- $this->modifiedColumns[] = ArticlePeer::ID;
- if (null !== $this->id) {
- throw new PropelException('Cannot insert a value for auto-increment primary key (' . ArticlePeer::ID . ')');
- }
- // check the columns in natural order for more readable SQL queries
- if ($this->isColumnModified(ArticlePeer::ID)) {
- $modifiedColumns[':p' . $index++] = '`id`';
- }
- if ($this->isColumnModified(ArticlePeer::ACTIVE)) {
- $modifiedColumns[':p' . $index++] = '`active`';
- }
- if ($this->isColumnModified(ArticlePeer::ALIAS)) {
- $modifiedColumns[':p' . $index++] = '`alias`';
- }
- if ($this->isColumnModified(ArticlePeer::SITE_MODULE_ID)) {
- $modifiedColumns[':p' . $index++] = '`site_module_id`';
- }
- if ($this->isColumnModified(ArticlePeer::TREE_LEFT)) {
- $modifiedColumns[':p' . $index++] = '`tree_left`';
- }
- if ($this->isColumnModified(ArticlePeer::TREE_RIGHT)) {
- $modifiedColumns[':p' . $index++] = '`tree_right`';
- }
- if ($this->isColumnModified(ArticlePeer::TREE_LEVEL)) {
- $modifiedColumns[':p' . $index++] = '`tree_level`';
- }
- $sql = sprintf(
- 'INSERT INTO `article` (%s) VALUES (%s)',
- implode(', ', $modifiedColumns),
- implode(', ', array_keys($modifiedColumns))
- );
- try {
- $stmt = $con->prepare($sql);
- foreach ($modifiedColumns as $identifier => $columnName) {
- switch ($columnName) {
- case '`id`':
- $stmt->bindValue($identifier, $this->id, PDO::PARAM_STR);
- break;
- case '`active`':
- $stmt->bindValue($identifier, (int) $this->active, PDO::PARAM_INT);
- break;
- case '`alias`':
- $stmt->bindValue($identifier, $this->alias, PDO::PARAM_STR);
- break;
- case '`site_module_id`':
- $stmt->bindValue($identifier, $this->site_module_id, PDO::PARAM_INT);
- break;
- case '`tree_left`':
- $stmt->bindValue($identifier, $this->tree_left, PDO::PARAM_INT);
- break;
- case '`tree_right`':
- $stmt->bindValue($identifier, $this->tree_right, PDO::PARAM_INT);
- break;
- case '`tree_level`':
- $stmt->bindValue($identifier, $this->tree_level, PDO::PARAM_INT);
- break;
- }
- }
- $stmt->execute();
- } catch (Exception $e) {
- Propel::log($e->getMessage(), Propel::LOG_ERR);
- throw new PropelException(sprintf('Unable to execute INSERT statement [%s]', $sql), $e);
- }
- try {
- $pk = $con->lastInsertId();
- } catch (Exception $e) {
- throw new PropelException('Unable to get autoincrement id.', $e);
- }
- $this->setId($pk);
- $this->setNew(false);
- }
- /**
- * Update the row in the database.
- *
- * @param PropelPDO $con
- *
- * @see doSave()
- */
- protected function doUpdate(PropelPDO $con)
- {
- $selectCriteria = $this->buildPkeyCriteria();
- $valuesCriteria = $this->buildCriteria();
- BasePeer::doUpdate($selectCriteria, $valuesCriteria, $con);
- }
- /**
- * Array of ValidationFailed objects.
- * @var array ValidationFailed[]
- */
- protected $validationFailures = array();
- /**
- * Gets any ValidationFailed objects that resulted from last call to validate().
- *
- *
- * @return array ValidationFailed[]
- * @see validate()
- */
- public function getValidationFailures()
- {
- return $this->validationFailures;
- }
- /**
- * Validates the objects modified field values and all objects related to this table.
- *
- * If $columns is either a column name or an array of column names
- * only those columns are validated.
- *
- * @param mixed $columns Column name or an array of column names.
- * @return boolean Whether all columns pass validation.
- * @see doValidate()
- * @see getValidationFailures()
- */
- public function validate($columns = null)
- {
- $res = $this->doValidate($columns);
- if ($res === true) {
- $this->validationFailures = array();
- return true;
- }
- $this->validationFailures = $res;
- return false;
- }
- /**
- * This function performs the validation work for complex object models.
- *
- * In addition to checking the current object, all related objects will
- * also be validated. If all pass then <code>true</code> is returned; otherwise
- * an aggregated array of ValidationFailed objects will be returned.
- *
- * @param array $columns Array of column names to validate.
- * @return mixed <code>true</code> if all validations pass; array of <code>ValidationFailed</code> objects otherwise.
- */
- protected function doValidate($columns = null)
- {
- if (!$this->alreadyInValidation) {
- $this->alreadyInValidation = true;
- $retval = null;
- $failureMap = array();
- // We call the validate method on the following object(s) if they
- // were passed to this object by their corresponding set
- // method. This object relates to these object(s) by a
- // foreign key reference.
- if ($this->aSiteModule !== null) {
- if (!$this->aSiteModule->validate($columns)) {
- $failureMap = array_merge($failureMap, $this->aSiteModule->getValidationFailures());
- }
- }
- if (($retval = ArticlePeer::doValidate($this, $columns)) !== true) {
- $failureMap = array_merge($failureMap, $retval);
- }
- if ($this->collArticleI18ns !== null) {
- foreach ($this->collArticleI18ns as $referrerFK) {
- if (!$referrerFK->validate($columns)) {
- $failureMap = array_merge($failureMap, $referrerFK->getValidationFailures());
- }
- }
- }
- $this->alreadyInValidation = false;
- }
- return (!empty($failureMap) ? $failureMap : true);
- }
- /**
- * Retrieves a field from the object by name passed in as a string.
- *
- * @param string $name name
- * @param string $type The type of fieldname the $name is of:
- * one of the class type constants BasePeer::TYPE_PHPNAME, BasePeer::TYPE_STUDLYPHPNAME
- * BasePeer::TYPE_COLNAME, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_NUM.
- * Defaults to BasePeer::TYPE_PHPNAME
- * @return mixed Value of field.
- */
- public function getByName($name, $type = BasePeer::TYPE_PHPNAME)
- {
- $pos = ArticlePeer::translateFieldName($name, $type, BasePeer::TYPE_NUM);
- $field = $this->getByPosition($pos);
- return $field;
- }
- /**
- * Retrieves a field from the object by Position as specified in the xml schema.
- * Zero-based.
- *
- * @param int $pos position in xml schema
- * @return mixed Value of field at $pos
- */
- public function getByPosition($pos)
- {
- switch ($pos) {
- case 0:
- return $this->getId();
- break;
- case 1:
- return $this->getActive();
- break;
- case 2:
- return $this->getAlias();
- break;
- case 3:
- return $this->getSiteModuleId();
- break;
- case 4:
- return $this->getTreeLeft();
- break;
- case 5:
- return $this->getTreeRight();
- break;
- case 6:
- return $this->getTreeLevel();
- break;
- default:
- return null;
- break;
- } // switch()
- }
- /**
- * Exports the object as an array.
- *
- * You can specify the key type of the array by passing one of the class
- * type constants.
- *
- * @param string $keyType (optional) One of the class type constants BasePeer::TYPE_PHPNAME, BasePeer::TYPE_STUDLYPHPNAME,
- * BasePeer::TYPE_COLNAME, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_NUM.
- * Defaults to BasePeer::TYPE_PHPNAME.
- * @param boolean $includeLazyLoadColumns (optional) Whether to include lazy loaded columns. Defaults to true.
- * @param array $alreadyDumpedObjects List of objects to skip to avoid recursion
- * @param boolean $includeForeignObjects (optional) Whether to include hydrated related objects. Default to FALSE.
- *
- * @return array an associative array containing the field names (as keys) and field values
- */
- public function toArray($keyType = BasePeer::TYPE_PHPNAME, $includeLazyLoadColumns = true, $alreadyDumpedObjects = array(), $includeForeignObjects = false)
- {
- if (isset($alreadyDumpedObjects['Article'][$this->getPrimaryKey()])) {
- return '*RECURSION*';
- }
- $alreadyDumpedObjects['Article'][$this->getPrimaryKey()] = true;
- $keys = ArticlePeer::getFieldNames($keyType);
- $result = array(
- $keys[0] => $this->getId(),
- $keys[1] => $this->getActive(),
- $keys[2] => $this->getAlias(),
- $keys[3] => $this->getSiteModuleId(),
- $keys[4] => $this->getTreeLeft(),
- $keys[5] => $this->getTreeRight(),
- $keys[6] => $this->getTreeLevel(),
- );
- $virtualColumns = $this->virtualColumns;
- foreach ($virtualColumns as $key => $virtualColumn) {
- $result[$key] = $virtualColumn;
- }
- if ($includeForeignObjects) {
- if (null !== $this->aSiteModule) {
- $result['SiteModule'] = $this->aSiteModule->toArray($keyType, $includeLazyLoadColumns, $alreadyDumpedObjects, true);
- }
- if (null !== $this->collArticleI18ns) {
- $result['ArticleI18ns'] = $this->collArticleI18ns->toArray(null, true, $keyType, $includeLazyLoadColumns, $alreadyDumpedObjects);
- }
- }
- return $result;
- }
- /**
- * Sets a field from the object by name passed in as a string.
- *
- * @param string $name peer name
- * @param mixed $value field value
- * @param string $type The type of fieldname the $name is of:
- * one of the class type constants BasePeer::TYPE_PHPNAME, BasePeer::TYPE_STUDLYPHPNAME
- * BasePeer::TYPE_COLNAME, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_NUM.
- * Defaults to BasePeer::TYPE_PHPNAME
- * @return void
- */
- public function setByName($name, $value, $type = BasePeer::TYPE_PHPNAME)
- {
- $pos = ArticlePeer::translateFieldName($name, $type, BasePeer::TYPE_NUM);
- $this->setByPosition($pos, $value);
- }
- /**
- * Sets a field from the object by Position as specified in the xml schema.
- * Zero-based.
- *
- * @param int $pos position in xml schema
- * @param mixed $value field value
- * @return void
- */
- public function setByPosition($pos, $value)
- {
- switch ($pos) {
- case 0:
- $this->setId($value);
- break;
- case 1:
- $this->setActive($value);
- break;
- case 2:
- $this->setAlias($value);
- break;
- case 3:
- $this->setSiteModuleId($value);
- break;
- case 4:
- $this->setTreeLeft($value);
- break;
- case 5:
- $this->setTreeRight($value);
- break;
- case 6:
- $this->setTreeLevel($value);
- break;
- } // switch()
- }
- /**
- * Populates the object using an array.
- *
- * This is particularly useful when populating an object from one of the
- * request arrays (e.g. $_POST). This method goes through the column
- * names, checking to see whether a matching key exists in populated
- * array. If so the setByName() method is called for that column.
- *
- * You can specify the key type of the array by additionally passing one
- * of the class type constants BasePeer::TYPE_PHPNAME, BasePeer::TYPE_STUDLYPHPNAME,
- * BasePeer::TYPE_COLNAME, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_NUM.
- * The default key type is the column's BasePeer::TYPE_PHPNAME
- *
- * @param array $arr An array to populate the object from.
- * @param string $keyType The type of keys the array uses.
- * @return void
- */
- public function fromArray($arr, $keyType = BasePeer::TYPE_PHPNAME)
- {
- $keys = ArticlePeer::getFieldNames($keyType);
- if (array_key_exists($keys[0], $arr)) $this->setId($arr[$keys[0]]);
- if (array_key_exists($keys[1], $arr)) $this->setActive($arr[$keys[1]]);
- if (array_key_exists($keys[2], $arr)) $this->setAlias($arr[$keys[2]]);
- if (array_key_exists($keys[3], $arr)) $this->setSiteModuleId($arr[$keys[3]]);
- if (array_key_exists($keys[4], $arr)) $this->setTreeLeft($arr[$keys[4]]);
- if (array_key_exists($keys[5], $arr)) $this->setTreeRight($arr[$keys[5]]);
- if (array_key_exists($keys[6], $arr)) $this->setTreeLevel($arr[$keys[6]]);
- }
- /**
- * Build a Criteria object containing the values of all modified columns in this object.
- *
- * @return Criteria The Criteria object containing all modified values.
- */
- public function buildCriteria()
- {
- $criteria = new Criteria(ArticlePeer::DATABASE_NAME);
- if ($this->isColumnModified(ArticlePeer::ID)) $criteria->add(ArticlePeer::ID, $this->id);
- if ($this->isColumnModified(ArticlePeer::ACTIVE)) $criteria->add(ArticlePeer::ACTIVE, $this->active);
- if ($this->isColumnModified(ArticlePeer::ALIAS)) $criteria->add(ArticlePeer::ALIAS, $this->alias);
- if ($this->isColumnModified(ArticlePeer::SITE_MODULE_ID)) $criteria->add(ArticlePeer::SITE_MODULE_ID, $this->site_module_id);
- if ($this->isColumnModified(ArticlePeer::TREE_LEFT)) $criteria->add(ArticlePeer::TREE_LEFT, $this->tree_left);
- if ($this->isColumnModified(ArticlePeer::TREE_RIGHT)) $criteria->add(ArticlePeer::TREE_RIGHT, $this->tree_right);
- if ($this->isColumnModified(ArticlePeer::TREE_LEVEL)) $criteria->add(ArticlePeer::TREE_LEVEL, $this->tree_level);
- return $criteria;
- }
- /**
- * Builds a Criteria object containing the primary key for this object.
- *
- * Unlike buildCriteria() this method includes the primary key values regardless
- * of whether or not they have been modified.
- *
- * @return Criteria The Criteria object containing value(s) for primary key(s).
- */
- public function buildPkeyCriteria()
- {
- $criteria = new Criteria(ArticlePeer::DATABASE_NAME);
- $criteria->add(ArticlePeer::ID, $this->id);
- return $criteria;
- }
- /**
- * Returns the primary key for this object (row).
- * @return string
- */
- public function getPrimaryKey()
- {
- return $this->getId();
- }
- /**
- * Generic method to set the primary key (id column).
- *
- * @param string $key Primary key.
- * @return void
- */
- public function setPrimaryKey($key)
- {
- $this->setId($key);
- }
- /**
- * Returns true if the primary key for this object is null.
- * @return boolean
- */
- public function isPrimaryKeyNull()
- {
- return null === $this->getId();
- }
- /**
- * Sets contents of passed object to values from current object.
- *
- * If desired, this method can also make copies of all associated (fkey referrers)
- * objects.
- *
- * @param object $copyObj An object of Article (or compatible) type.
- * @param boolean $deepCopy Whether to also copy all rows that refer (by fkey) to the current row.
- * @param boolean $makeNew Whether to reset autoincrement PKs and make the object new.
- * @throws PropelException
- */
- public function copyInto($copyObj, $deepCopy = false, $makeNew = true)
- {
- $copyObj->setActive($this->getActive());
- $copyObj->setAlias($this->getAlias());
- $copyObj->setSiteModuleId($this->getSiteModuleId());
- $copyObj->setTreeLeft($this->getTreeLeft());
- $copyObj->setTreeRight($this->getTreeRight());
- $copyObj->setTreeLevel($this->getTreeLevel());
- if ($deepCopy && !$this->startCopy) {
- // important: temporarily setNew(false) because this affects the behavior of
- // the getter/setter methods for fkey referrer objects.
- $copyObj->setNew(false);
- // store object hash to prevent cycle
- $this->startCopy = true;
- foreach ($this->getArticleI18ns() as $relObj) {
- if ($relObj !== $this) { // ensure that we don't try to copy a reference to ourselves
- $copyObj->addArticleI18n($relObj->copy($deepCopy));
- }
- }
- //unflag object copy
- $this->startCopy = false;
- } // if ($deepCopy)
- if ($makeNew) {
- $copyObj->setNew(true);
- $copyObj->setId(NULL); // this is a auto-increment column, so set to default value
- }
- }
- /**
- * Makes a copy of this object that will be inserted as a new row in table when saved.
- * It creates a new object filling in the simple attributes, but skipping any primary
- * keys that are defined for the table.
- *
- * If desired, this method can also make copies of all associated (fkey referrers)
- * objects.
- *
- * @param boolean $deepCopy Whether to also copy all rows that refer (by fkey) to the current row.
- * @return Article Clone of current object.
- * @throws PropelException
- */
- public function copy($deepCopy = false)
- {
- // we use get_class(), because this might be a subclass
- $clazz = get_class($this);
- $copyObj = new $clazz();
- $this->copyInto($copyObj, $deepCopy);
- return $copyObj;
- }
- /**
- * Returns a peer instance associated with this om.
- *
- * Since Peer classes are not to have any instance attributes, this method returns the
- * same instance for all member of this class. The method could therefore
- * be static, but this would prevent one from overriding the behavior.
- *
- * @return ArticlePeer
- */
- public function getPeer()
- {
- if (self::$peer === null) {
- self::$peer = new ArticlePeer();
- }
- return self::$peer;
- }
- /**
- * Declares an association between this object and a SiteModule object.
- *
- * @param SiteModule $v
- * @return Article The current object (for fluent API support)
- * @throws PropelException
- */
- public function setSiteModule(SiteModule $v = null)
- {
- if ($v === null) {
- $this->setSiteModuleId(NULL);
- } else {
- $this->setSiteModuleId($v->getId());
- }
- $this->aSiteModule = $v;
- // Add binding for other direction of this n:n relationship.
- // If this object has already been added to the SiteModule object, it will not be re-added.
- if ($v !== null) {
- $v->addArticle($this);
- }
- return $this;
- }
- /**
- * Get the associated SiteModule object
- *
- * @param PropelPDO $con Optional Connection object.
- * @param $doQuery Executes a query to get the object if required
- * @return SiteModule The associated SiteModule object.
- * @throws PropelException
- */
- public function getSiteModule(PropelPDO $con = null, $doQuery = true)
- {
- if ($this->aSiteModule === null && ($this->site_module_id !== null) && $doQuery) {
- $this->aSiteModule = SiteModuleQuery::create()->findPk($this->site_module_id, $con);
- /* The following can be used additionally to
- guarantee the related object contains a reference
- to this object. This level of coupling may, however, be
- undesirable since it could result in an only partially populated collection
- in the referenced object.
- $this->aSiteModule->addArticles($this);
- */
- }
- return $this->aSiteModule;
- }
- /**
- * Initializes a collection based on the name of a relation.
- * Avoids crafting an 'init[$relationName]s' method name
- * that wouldn't work when StandardEnglishPluralizer is used.
- *
- * @param string $relationName The name of the relation to initialize
- * @return void
- */
- public function initRelation($relationName)
- {
- if ('ArticleI18n' == $relationName) {
- $this->initArticleI18ns();
- }
- }
- /**
- * Clears out the collArticleI18ns collection
- *
- * This does not modify the database; however, it will remove any associated objects, causing
- * them to be refetched by subsequent calls to accessor method.
- *
- * @return Article The current object (for fluent API support)
- * @see addArticleI18ns()
- */
- public function clearArticleI18ns()
- {
- $this->collArticleI18ns = null; // important to set this to null since that means it is uninitialized
- $this->collArticleI18nsPartial = null;
- return $this;
- }
- /**
- * reset is the collArticleI18ns collection loaded partially
- *
- * @return void
- */
- public function resetPartialArticleI18ns($v = true)
- {
- $this->collArticleI18nsPartial = $v;
- }
- /**
- * Initializes the collArticleI18ns collection.
- *
- * By default this just sets the collArticleI18ns collection to an empty array (like clearcollArticleI18ns());
- * however, you may wish to override this method in your stub class to provide setting appropriate
- * to your application -- for example, setting the initial array to the values stored in database.
- *
- * @param boolean $overrideExisting If set to true, the method call initializes
- * the collection even if it is not empty
- *
- * @return void
- */
- public function initArticleI18ns($overrideExisting = true)
- {
- if (null !== $this->collArticleI18ns && !$overrideExisting) {
- return;
- }
- $this->collArticleI18ns = new PropelObjectCollection();
- $this->collArticleI18ns->setModel('ArticleI18n');
- }
- /**
- * Gets an array of ArticleI18n objects which contain a foreign key that references this object.
- *
- * If the $criteria is not null, it is used to always fetch the results from the database.
- * Otherwise the results are fetched from the database the first time, then cached.
- * Next time the same method is called without $criteria, the cached collection is returned.
- * If this Article is new, it will return
- * an empty collection or the current collection; the criteria is ignored on a new object.
- *
- * @param Criteria $criteria optional Criteria object to narrow the query
- * @param PropelPDO $con optional connection object
- * @return PropelObjectCollection|ArticleI18n[] List of ArticleI18n objects
- * @throws PropelException
- */
- public function getArticleI18ns($criteria = null, PropelPDO $con = null)
- {
- $partial = $this->collArticleI18nsPartial && !$this->isNew();
- if (null === $this->collArticleI18ns || null !== $criteria || $partial) {
- if ($this->isNew() && null === $this->collArticleI18ns) {
- // return empty collection
- $this->initArticleI18ns();
- } else {
- $collArticleI18ns = ArticleI18nQuery::create(null, $criteria)
- ->filterByArticle($this)
- ->find($con);
- if (null !== $criteria) {
- if (false !== $this->collArticleI18nsPartial && count($collArticleI18ns)) {
- $this->initArticleI18ns(false);
- foreach ($collArticleI18ns as $obj) {
- if (false == $this->collArticleI18ns->contains($obj)) {
- $this->collArticleI18ns->append($obj);
- }
- }
- $this->collArticleI18nsPartial = true;
- }
- $collArticleI18ns->getInternalIterator()->rewind();
- return $collArticleI18ns;
- }
- if ($partial && $this->collArticleI18ns) {
- foreach ($this->collArticleI18ns as $obj) {
- if ($obj->isNew()) {
- $collArticleI18ns[] = $obj;
- }
- }
- }
- $this->collArticleI18ns = $collArticleI18ns;
- $this->collArticleI18nsPartial = false;
- }
- }
- return $this->collArticleI18ns;
- }
- /**
- * Sets a collection of ArticleI18n objects related by a one-to-many relationship
- * to the current object.
- * It will also schedule objects for deletion based on a diff between old objects (aka persisted)
- * and new objects from the given Propel collection.
- *
- * @param PropelCollection $articleI18ns A Propel collection.
- * @param PropelPDO $con Optional connection object
- * @return Article The current object (for fluent API support)
- */
- public function setArticleI18ns(PropelCollection $articleI18ns, PropelPDO $con = null)
- {
- $articleI18nsToDelete = $this->getArticleI18ns(new Criteria(), $con)->diff($articleI18ns);
- //since at least one column in the foreign key is at the same time a PK
- //we can not just set a PK to NULL in the lines below. We have to store
- //a backup of all values, so we are able to manipulate these items based on the onDelete value later.
- $this->articleI18nsScheduledForDeletion = clone $articleI18nsToDelete;
- foreach ($articleI18nsToDelete as $articleI18nRemoved) {
- $articleI18nRemoved->setArticle(null);
- }
- $this->collArticleI18ns = null;
- foreach ($articleI18ns as $articleI18n) {
- $this->addArticleI18n($articleI18n);
- }
- $this->collArticleI18ns = $articleI18ns;
- $this->collArticleI18nsPartial = false;
- return $this;
- }
- /**
- * Returns the number of related ArticleI18n objects.
- *
- * @param Criteria $criteria
- * @param boolean $distinct
- * @param PropelPDO $con
- * @return int Count of related ArticleI18n objects.
- * @throws PropelException
- */
- public function countArticleI18ns(Criteria $criteria = null, $distinct = false, PropelPDO $con = null)
- {
- $partial = $this->collArticleI18nsPartial && !$this->isNew();
- if (null === $this->collArticleI18ns || null !== $criteria || $partial) {
- if ($this->isNew() && null === $this->collArticleI18ns) {
- return 0;
- }
- if ($partial && !$criteria) {
- return count($this->getArticleI18ns());
- }
- $query = ArticleI18nQuery::create(null, $criteria);
- if ($distinct) {
- $query->distinct();
- }
- return $query
- ->filterByArticle($this)
- ->count($con);
- }
- return count($this->collArticleI18ns);
- }
- /**
- * Method called to associate a ArticleI18n object to this object
- * through the ArticleI18n foreign key attribute.
- *
- * @param ArticleI18n $l ArticleI18n
- * @return Article The current object (for fluent API support)
- */
- public function addArticleI18n(ArticleI18n $l)
- {
- if ($l && $locale = $l->getLocale()) {
- $this->setLocale($locale);
- $this->currentTranslations[$locale] = $l;
- }
- if ($this->collArticleI18ns === null) {
- $this->initArticleI18ns();
- $this->collArticleI18nsPartial = true;
- }
- if (!in_array($l, $this->collArticleI18ns->getArrayCopy(), true)) { // only add it if the **same** object is not already associated
- $this->doAddArticleI18n($l);
- if ($this->articleI18nsScheduledForDeletion and $this->articleI18nsScheduledForDeletion->contains($l)) {
- $this->articleI18nsScheduledForDeletion->remove($this->articleI18nsScheduledForDeletion->search($l));
- }
- }
- return $this;
- }
- /**
- * @param ArticleI18n $articleI18n The articleI18n object to add.
- */
- protected function doAddArticleI18n($articleI18n)
- {
- $this->collArticleI18ns[]= $articleI18n;
- $articleI18n->setArticle($this);
- }
- /**
- * @param ArticleI18n $articleI18n The articleI18n object to remove.
- * @return Article The current object (for fluent API support)
- */
- public function removeArticleI18n($articleI18n)
- {
- if ($this->getArticleI18ns()->contains($articleI18n)) {
- $this->collArticleI18ns->remove($this->collArticleI18ns->search($articleI18n));
- if (null === $this->articleI18nsScheduledForDeletion) {
- $this->articleI18nsScheduledForDeletion = clone $this->collArticleI18ns;
- $this->articleI18nsScheduledForDeletion->clear();
- }
- $this->articleI18nsScheduledForDeletion[]= clone $articleI18n;
- $articleI18n->setArticle(null);
- }
- return $this;
- }
- /**
- * Clears the current object and sets all attributes to their default values
- */
- public function clear()
- {
- $this->id = null;
- $this->active = null;
- $this->alias = null;
- $this->site_module_id = null;
- $this->tree_left = null;
- $this->tree_right = null;
- $this->tree_level = null;
- $this->alreadyInSave = false;
- $this->alreadyInValidation = false;
- $this->alreadyInClearAllReferencesDeep = false;
- $this->clearAllReferences();
- $this->resetModified();
- $this->setNew(true);
- $this->setDeleted(false);
- }
- /**
- * Resets all references to other model objects or collections of model objects.
- *
- * This method is a user-space workaround for PHP's inability to garbage collect
- * objects with circular references (even in PHP 5.3). This is currently necessary
- * when using Propel in certain daemon or large-volume/high-memory operations.
- *
- * @param boolean $deep Whether to also clear the references on all referrer objects.
- */
- public function clearAllReferences($deep = false)
- {
- if ($deep && !$this->alreadyInClearAllReferencesDeep) {
- $this->alreadyInClearAllReferencesDeep = true;
- if ($this->collArticleI18ns) {
- foreach ($this->collArticleI18ns as $o) {
- $o->clearAllReferences($deep);
- }
- }
- if ($this->aSiteModule instanceof Persistent) {
- $this->aSiteModule->clearAllReferences($deep);
- }
- $this->alreadyInClearAllReferencesDeep = false;
- } // if ($deep)
- // nested_set behavior
- $this->collNestedSetChildren = null;
- $this->aNestedSetParent = null;
- // i18n behavior
- $this->currentLocale = 'en_US';
- $this->currentTranslations = null;
- if ($this->collArticleI18ns instanceof PropelCollection) {
- $this->collArticleI18ns->clearIterator();
- }
- $this->collArticleI18ns = null;
- $this->aSiteModule = null;
- }
- /**
- * return the string representation of this object
- *
- * @return string
- */
- public function __toString()
- {
- return (string) $this->exportTo(ArticlePeer::DEFAULT_STRING_FORMAT);
- }
- /**
- * return true is the object is in saving state
- *
- * @return boolean
- */
- public function isAlreadyInSave()
- {
- return $this->alreadyInSave;
- }
- // nested_set behavior
- /**
- * Execute queries that were saved to be run inside the save transaction
- */
- protected function processNestedSetQueries($con)
- {
- foreach ($this->nestedSetQueries as $query) {
- $query['arguments'][]= $con;
- call_user_func_array($query['callable'], $query['arguments']);
- }
- $this->nestedSetQueries = array();
- }
- /**
- * Proxy getter method for the left value of the nested set model.
- * It provides a generic way to get the value, whatever the actual column name is.
- *
- * @return int The nested set left value
- */
- public function getLeftValue()
- {
- return $this->tree_left;
- }
- /**
- * Proxy getter method for the right value of the nested set model.
- * It provides a generic way to get the value, whatever the actual column name is.
- *
- * @return int The nested set right value
- */
- public function getRightValue()
- {
- return $this->tree_right;
- }
- /**
- * Proxy getter method for the level value of the nested set model.
- * It provides a generic way to get the value, whatever the actual column name is.
- *
- * @return int The nested set level value
- */
- public function getLevel()
- {
- return $this->tree_level;
- }
- /**
- * Proxy setter method for the left value of the nested set model.
- * It provides a generic way to set the value, whatever the actual column name is.
- *
- * @param int $v The nested set left value
- * @return Article The current object (for fluent API support)
- */
- public function setLeftValue($v)
- {
- return $this->setTreeLeft($v);
- }
- /**
- * Proxy setter method for the right value of the nested set model.
- * It provides a generic way to set the value, whatever the actual column name is.
- *
- * @param int $v The nested set right value
- * @return Article The current object (for fluent API support)
- */
- public function setRightValue($v)
- {
- return $this->setTreeRight($v);
- }
- /**
- * Proxy setter method for the level value of the nested set model.
- * It provides a generic way to set the value, whatever the actual column name is.
- *
- * @param int $v The nested set level value
- * @return Article The current object (for fluent API support)
- */
- public function setLevel($v)
- {
- return $this->setTreeLevel($v);
- }
- /**
- * Creates the supplied node as the root node.
- *
- * @return Article The current object (for fluent API support)
- * @throws PropelException
- */
- public function makeRoot()
- {
- if ($this->getLeftValue() || $this->getRightValue()) {
- throw new PropelException('Cannot turn an existing node into a root node.');
- }
- $this->setLeftValue(1);
- $this->setRightValue(2);
- $this->setLevel(0);
- return $this;
- }
- /**
- * Tests if onbject is a node, i.e. if it is inserted in the tree
- *
- * @return bool
- */
- public function isInTree()
- {
- return $this->getLeftValue() > 0 && $this->getRightValue() > $this->getLeftValue();
- }
- /**
- * Tests if node is a root
- *
- * @return bool
- */
- public function isRoot()
- {
- return $this->isInTree() && $this->getLeftValue() == 1;
- }
- /**
- * Tests if node is a leaf
- *
- * @return bool
- */
- public function isLeaf()
- {
- return $this->isInTree() && ($this->getRightValue() - $this->getLeftValue()) == 1;
- }
- /**
- * Tests if node is a descendant of another node
- *
- * @param Article $node Propel node object
- * @return bool
- */
- public function isDescendantOf($parent)
- {
- return $this->isInTree() && $this->getLeftValue() > $parent->getLeftValue() && $this->getRightValue() < $parent->getRightValue();
- }
- /**
- * Tests if node is a ancestor of another node
- *
- * @param Article $node Propel node object
- * @return bool
- */
- public function isAncestorOf($child)
- {
- return $child->isDescendantOf($this);
- }
- /**
- * Tests if object has an ancestor
- *
- * @param PropelPDO $con Connection to use.
- * @return bool
- */
- public function hasParent(PropelPDO $con = null)
- {
- return $this->getLevel() > 0;
- }
- /**
- * Sets the cache for parent node of the current object.
- * Warning: this does not move the current object in the tree.
- * Use moveTofirstChildOf() or moveToLastChildOf() for that purpose
- *
- * @param Article $parent
- * @return Article The current object, for fluid interface
- */
- public function setParent($parent = null)
- {
- $this->aNestedSetParent = $parent;
- return $this;
- }
- /**
- * Gets parent node for the current object if it exists
- * The result is cached so further calls to the same method don't issue any queries
- *
- * @param PropelPDO $con Connection to use.
- * @return mixed Propel object if exists else false
- */
- public function getParent(PropelPDO $con = null)
- {
- if ($this->aNestedSetParent === null && $this->hasParent()) {
- $this->aNestedSetParent = ArticleQuery::create()
- ->ancestorsOf($this)
- ->orderByLevel(true)
- ->findOne($con);
- }
- return $this->aNestedSetParent;
- }
- /**
- * Determines if the node has previous sibling
- *
- * @param PropelPDO $con Connection to use.
- * @return bool
- */
- public function hasPrevSibling(PropelPDO $con = null)
- {
- if (!ArticlePeer::isValid($this)) {
- return false;
- }
- return ArticleQuery::create()
- ->filterByTreeRight($this->getLeftValue() - 1)
- ->count($con) > 0;
- }
- /**
- * Gets previous sibling for the given node if it exists
- *
- * @param PropelPDO $con Connection to use.
- * @return mixed Propel object if exists else false
- */
- public function getPrevSibling(PropelPDO $con = null)
- {
- return ArticleQuery::create()
- ->filterByTreeRight($this->getLeftValue() - 1)
- ->findOne($con);
- }
- /**
- * Determines if the node has next sibling
- *
- * @param PropelPDO $con Connection to use.
- * @return bool
- */
- public function hasNextSibling(PropelPDO $con = null)
- {
- if (!ArticlePeer::isValid($this)) {
- return false;
- }
- return ArticleQuery::create()
- ->filterByTreeLeft($this->getRightValue() + 1)
- ->count($con) > 0;
- }
- /**
- * Gets next sibling for the given node if it exists
- *
- * @param PropelPDO $con Connection to use.
- * @return mixed Propel object if exists else false
- */
- public function getNextSibling(PropelPDO $con = null)
- {
- return ArticleQuery::create()
- ->filterByTreeLeft($this->getRightValue() + 1)
- ->findOne($con);
- }
- /**
- * Clears out the $collNestedSetChildren collection
- *
- * This does not modify the database; however, it will remove any associated objects, causing
- * them to be refetched by subsequent calls to accessor method.
- *
- * @return void
- */
- public function clearNestedSetChildren()
- {
- $this->collNestedSetChildren = null;
- }
- /**
- * Initializes the $collNestedSetChildren collection.
- *
- * @return void
- */
- public function initNestedSetChildren()
- {
- $this->collNestedSetChildren = new PropelObjectCollection();
- $this->collNestedSetChildren->setModel('Article');
- }
- /**
- * Adds an element to the internal $collNestedSetChildren collection.
- * Beware that this doesn't insert a node in the tree.
- * This method is only used to facilitate children hydration.
- *
- * @param Article $article
- *
- * @return void
- */
- public function addNestedSetChild($article)
- {
- if ($this->collNestedSetChildren === null) {
- $this->initNestedSetChildren();
- }
- if (!in_array($article, $this->collNestedSetChildren->getArrayCopy(), true)) { // only add it if the **same** object is not already associated
- $this->collNestedSetChildren[]= $article;
- $article->setParent($this);
- }
- }
- /**
- * Tests if node has children
- *
- * @return bool
- */
- public function hasChildren()
- {
- return ($this->getRightValue() - $this->getLeftValue()) > 1;
- }
- /**
- * Gets the children of the given node
- *
- * @param Criteria $criteria Criteria to filter results.
- * @param PropelPDO $con Connection to use.
- * @return array List of Article objects
- */
- public function getChildren($criteria = null, PropelPDO $con = null)
- {
- if (null === $this->collNestedSetChildren || null !== $criteria) {
- if ($this->isLeaf() || ($this->isNew() && null === $this->collNestedSetChildren)) {
- // return empty collection
- $this->initNestedSetChildren();
- } else {
- $collNestedSetChildren = ArticleQuery::create(null, $criteria)
- ->childrenOf($this)
- ->orderByBranch()
- ->find($con);
- if (null !== $criteria) {
- return $collNestedSetChildren;
- }
- $this->collNestedSetChildren = $collNestedSetChildren;
- }
- }
- return $this->collNestedSetChildren;
- }
- /**
- * Gets number of children for the given node
- *
- * @param Criteria $criteria Criteria to filter results.
- * @param PropelPDO $con Connection to use.
- * @return int Number of children
- */
- public function countChildren($criteria = null, PropelPDO $con = null)
- {
- if (null === $this->collNestedSetChildren || null !== $criteria) {
- if ($this->isLeaf() || ($this->isNew() && null === $this->collNestedSetChildren)) {
- return 0;
- } else {
- return ArticleQuery::create(null, $criteria)
- ->childrenOf($this)
- ->count($con);
- }
- } else {
- return count($this->collNestedSetChildren);
- }
- }
- /**
- * Gets the first child of the given node
- *
- * @param Criteria $query Criteria to filter results.
- * @param PropelPDO $con Connection to use.
- * @return array List of Article objects
- */
- public function getFirstChild($query = null, PropelPDO $con = null)
- {
- if ($this->isLeaf()) {
- return array();
- } else {
- return ArticleQuery::create(null, $query)
- ->childrenOf($this)
- ->orderByBranch()
- ->findOne($con);
- }
- }
- /**
- * Gets the last child of the given node
- *
- * @param Criteria $query Criteria to filter results.
- * @param PropelPDO $con Connection to use.
- * @return array List of Article objects
- */
- public function getLastChild($query = null, PropelPDO $con = null)
- {
- if ($this->isLeaf()) {
- return array();
- } else {
- return ArticleQuery::create(null, $query)
- ->childrenOf($this)
- ->orderByBranch(true)
- ->findOne($con);
- }
- }
- /**
- * Gets the siblings of the given node
- *
- * @param bool $includeNode Whether to include the current node or not
- * @param Criteria $query Criteria to filter results.
- * @param PropelPDO $con Connection to use.
- *
- * @return array List of Article objects
- */
- public function getSiblings($includeNode = false, $query = null, PropelPDO $con = null)
- {
- if ($this->isRoot()) {
- return array();
- } else {
- $query = ArticleQuery::create(null, $query)
- ->childrenOf($this->getParent($con))
- ->orderByBranch();
- if (!$includeNode) {
- $query->prune($this);
- }
- return $query->find($con);
- }
- }
- /**
- * Gets descendants for the given node
- *
- * @param Criteria $query Criteria to filter results.
- * @param PropelPDO $con Connection to use.
- * @return array List of Article objects
- */
- public function getDescendants($query = null, PropelPDO $con = null)
- {
- if ($this->isLeaf()) {
- return array();
- } else {
- return ArticleQuery::create(null, $query)
- ->descendantsOf($this)
- ->orderByBranch()
- ->find($con);
- }
- }
- /**
- * Gets number of descendants for the given node
- *
- * @param Criteria $query Criteria to filter results.
- * @param PropelPDO $con Connection to use.
- * @return int Number of descendants
- */
- public function countDescendants($query = null, PropelPDO $con = null)
- {
- if ($this->isLeaf()) {
- // save one query
- return 0;
- } else {
- return ArticleQuery::create(null, $query)
- ->descendantsOf($this)
- ->count($con);
- }
- }
- /**
- * Gets descendants for the given node, plus the current node
- *
- * @param Criteria $query Criteria to filter results.
- * @param PropelPDO $con Connection to use.
- * @return array List of Article objects
- */
- public function getBranch($query = null, PropelPDO $con = null)
- {
- return ArticleQuery::create(null, $query)
- ->branchOf($this)
- ->orderByBranch()
- ->find($con);
- }
- /**
- * Gets ancestors for the given node, starting with the root node
- * Use it for breadcrumb paths for instance
- *
- * @param Criteria $query Criteria to filter results.
- * @param PropelPDO $con Connection to use.
- * @return array List of Article objects
- */
- public function getAncestors($query = null, PropelPDO $con = null)
- {
- if ($this->isRoot()) {
- // save one query
- return array();
- } else {
- return ArticleQuery::create(null, $query)
- ->ancestorsOf($this)
- ->orderByBranch()
- ->find($con);
- }
- }
- /**
- * Inserts the given $child node as first child of current
- * The modifications in the current object and the tree
- * are not persisted until the child object is saved.
- *
- * @param Article $child Propel object for child node
- *
- * @return Article The current Propel object
- */
- public function addChild(Article $child)
- {
- if ($this->isNew()) {
- throw new PropelException('A Article object must not be new to accept children.');
- }
- $child->insertAsFirstChildOf($this);
- return $this;
- }
- /**
- * Inserts the current node as first child of given $parent node
- * The modifications in the current object and the tree
- * are not persisted until the current object is saved.
- *
- * @param Article $parent Propel object for parent node
- *
- * @return Article The current Propel object
- */
- public function insertAsFirstChildOf($parent)
- {
- if ($this->isInTree()) {
- throw new PropelException('A Article object must not already be in the tree to be inserted. Use the moveToFirstChildOf() instead.');
- }
- $left = $parent->getLeftValue() + 1;
- // Update node properties
- $this->setLeftValue($left);
- $this->setRightValue($left + 1);
- $this->setLevel($parent->getLevel() + 1);
- // update the children collection of the parent
- $parent->addNestedSetChild($this);
- // Keep the tree modification query for the save() transaction
- $this->nestedSetQueries []= array(
- 'callable' => array('\\Artsofte\MainBundle\Model\\ArticlePeer', 'makeRoomForLeaf'),
- 'arguments' => array($left, $this->isNew() ? null : $this)
- );
- return $this;
- }
- /**
- * Inserts the current node as last child of given $parent node
- * The modifications in the current object and the tree
- * are not persisted until the current object is saved.
- *
- * @param Article $parent Propel object for parent node
- *
- * @return Article The current Propel object
- */
- public function insertAsLastChildOf($parent)
- {
- if ($this->isInTree()) {
- throw new PropelException('A Article object must not already be in the tree to be inserted. Use the moveToLastChildOf() instead.');
- }
- $left = $parent->getRightValue();
- // Update node properties
- $this->setLeftValue($left);
- $this->setRightValue($left + 1);
- $this->setLevel($parent->getLevel() + 1);
- // update the children collection of the parent
- $parent->addNestedSetChild($this);
- // Keep the tree modification query for the save() transaction
- $this->nestedSetQueries []= array(
- 'callable' => array('\\Artsofte\MainBundle\Model\\ArticlePeer', 'makeRoomForLeaf'),
- 'arguments' => array($left, $this->isNew() ? null : $this)
- );
- return $this;
- }
- /**
- * Inserts the current node as prev sibling given $sibling node
- * The modifications in the current object and the tree
- * are not persisted until the current object is saved.
- *
- * @param Article $sibling Propel object for parent node
- *
- * @return Article The current Propel object
- */
- public function insertAsPrevSiblingOf($sibling)
- {
- if ($this->isInTree()) {
- throw new PropelException('A Article object must not already be in the tree to be inserted. Use the moveToPrevSiblingOf() instead.');
- }
- $left = $sibling->getLeftValue();
- // Update node properties
- $this->setLeftValue($left);
- $this->setRightValue($left + 1);
- $this->setLevel($sibling->getLevel());
- // Keep the tree modification query for the save() transaction
- $this->nestedSetQueries []= array(
- 'callable' => array('\\Artsofte\MainBundle\Model\\ArticlePeer', 'makeRoomForLeaf'),
- 'arguments' => array($left, $this->isNew() ? null : $this)
- );
- return $this;
- }
- /**
- * Inserts the current node as next sibling given $sibling node
- * The modifications in the current object and the tree
- * are not persisted until the current object is saved.
- *
- * @param Article $sibling Propel object for parent node
- *
- * @return Article The current Propel object
- */
- public function insertAsNextSiblingOf($sibling)
- {
- if ($this->isInTree()) {
- throw new PropelException('A Article object must not already be in the tree to be inserted. Use the moveToNextSiblingOf() instead.');
- }
- $left = $sibling->getRightValue() + 1;
- // Update node properties
- $this->setLeftValue($left);
- $this->setRightValue($left + 1);
- $this->setLevel($sibling->getLevel());
- // Keep the tree modification query for the save() transaction
- $this->nestedSetQueries []= array(
- 'callable' => array('\\Artsofte\MainBundle\Model\\ArticlePeer', 'makeRoomForLeaf'),
- 'arguments' => array($left, $this->isNew() ? null : $this)
- );
- return $this;
- }
- /**
- * Moves current node and its subtree to be the first child of $parent
- * The modifications in the current object and the tree are immediate
- *
- * @param Article $parent Propel object for parent node
- * @param PropelPDO $con Connection to use.
- *
- * @return Article The current Propel object
- */
- public function moveToFirstChildOf($parent, PropelPDO $con = null)
- {
- if (!$this->isInTree()) {
- throw new PropelException('A Article object must be already in the tree to be moved. Use the insertAsFirstChildOf() instead.');
- }
- if ($parent->isDescendantOf($this)) {
- throw new PropelException('Cannot move a node as child of one of its subtree nodes.');
- }
- $this->moveSubtreeTo($parent->getLeftValue() + 1, $parent->getLevel() - $this->getLevel() + 1, $con);
- return $this;
- }
- /**
- * Moves current node and its subtree to be the last child of $parent
- * The modifications in the current object and the tree are immediate
- *
- * @param Article $parent Propel object for parent node
- * @param PropelPDO $con Connection to use.
- *
- * @return Article The current Propel object
- */
- public function moveToLastChildOf($parent, PropelPDO $con = null)
- {
- if (!$this->isInTree()) {
- throw new PropelException('A Article object must be already in the tree to be moved. Use the insertAsLastChildOf() instead.');
- }
- if ($parent->isDescendantOf($this)) {
- throw new PropelException('Cannot move a node as child of one of its subtree nodes.');
- }
- $this->moveSubtreeTo($parent->getRightValue(), $parent->getLevel() - $this->getLevel() + 1, $con);
- return $this;
- }
- /**
- * Moves current node and its subtree to be the previous sibling of $sibling
- * The modifications in the current object and the tree are immediate
- *
- * @param Article $sibling Propel object for sibling node
- * @param PropelPDO $con Connection to use.
- *
- * @return Article The current Propel object
- */
- public function moveToPrevSiblingOf($sibling, PropelPDO $con = null)
- {
- if (!$this->isInTree()) {
- throw new PropelException('A Article object must be already in the tree to be moved. Use the insertAsPrevSiblingOf() instead.');
- }
- if ($sibling->isRoot()) {
- throw new PropelException('Cannot move to previous sibling of a root node.');
- }
- if ($sibling->isDescendantOf($this)) {
- throw new PropelException('Cannot move a node as sibling of one of its subtree nodes.');
- }
- $this->moveSubtreeTo($sibling->getLeftValue(), $sibling->getLevel() - $this->getLevel(), $con);
- return $this;
- }
- /**
- * Moves current node and its subtree to be the next sibling of $sibling
- * The modifications in the current object and the tree are immediate
- *
- * @param Article $sibling Propel object for sibling node
- * @param PropelPDO $con Connection to use.
- *
- * @return Article The current Propel object
- */
- public function moveToNextSiblingOf($sibling, PropelPDO $con = null)
- {
- if (!$this->isInTree()) {
- throw new PropelException('A Article object must be already in the tree to be moved. Use the insertAsNextSiblingOf() instead.');
- }
- if ($sibling->isRoot()) {
- throw new PropelException('Cannot move to next sibling of a root node.');
- }
- if ($sibling->isDescendantOf($this)) {
- throw new PropelException('Cannot move a node as sibling of one of its subtree nodes.');
- }
- $this->moveSubtreeTo($sibling->getRightValue() + 1, $sibling->getLevel() - $this->getLevel(), $con);
- return $this;
- }
- /**
- * Move current node and its children to location $destLeft and updates rest of tree
- *
- * @param int $destLeft Destination left value
- * @param int $levelDelta Delta to add to the levels
- * @param PropelPDO $con Connection to use.
- */
- protected function moveSubtreeTo($destLeft, $levelDelta, PropelPDO $con = null)
- {
- $preventDefault = false;
- $left = $this->getLeftValue();
- $right = $this->getRightValue();
- $treeSize = $right - $left +1;
- if ($con === null) {
- $con = Propel::getConnection(ArticlePeer::DATABASE_NAME, Propel::CONNECTION_WRITE);
- }
- $con->beginTransaction();
- try {
- // make room next to the target for the subtree
- ArticlePeer::shiftRLValues($treeSize, $destLeft, null, $con);
- if (!$preventDefault) {
- if ($left >= $destLeft) { // src was shifted too?
- $left += $treeSize;
- $right += $treeSize;
- }
- if ($levelDelta) {
- // update the levels of the subtree
- ArticlePeer::shiftLevel($levelDelta, $left, $right, $con);
- }
- // move the subtree to the target
- ArticlePeer::shiftRLValues($destLeft - $left, $left, $right, $con);
- }
- // remove the empty room at the previous location of the subtree
- ArticlePeer::shiftRLValues(-$treeSize, $right + 1, null, $con);
- // update all loaded nodes
- ArticlePeer::updateLoadedNodes(null, $con);
- $con->commit();
- } catch (Exception $e) {
- $con->rollback();
- throw $e;
- }
- }
- /**
- * Deletes all descendants for the given node
- * Instance pooling is wiped out by this command,
- * so existing Article instances are probably invalid (except for the current one)
- *
- * @param PropelPDO $con Connection to use.
- *
- * @return int number of deleted nodes
- */
- public function deleteDescendants(PropelPDO $con = null)
- {
- if ($this->isLeaf()) {
- // save one query
- return;
- }
- if ($con === null) {
- $con = Propel::getConnection(ArticlePeer::DATABASE_NAME, Propel::CONNECTION_READ);
- }
- $left = $this->getLeftValue();
- $right = $this->getRightValue();
- $con->beginTransaction();
- try {
- // delete descendant nodes (will empty the instance pool)
- $ret = ArticleQuery::create()
- ->descendantsOf($this)
- ->delete($con);
- // fill up the room that was used by descendants
- ArticlePeer::shiftRLValues($left - $right + 1, $right, null, $con);
- // fix the right value for the current node, which is now a leaf
- $this->setRightValue($left + 1);
- $con->commit();
- } catch (Exception $e) {
- $con->rollback();
- throw $e;
- }
- return $ret;
- }
- /**
- * Returns a pre-order iterator for this node and its children.
- *
- * @return RecursiveIterator
- */
- public function getIterator()
- {
- return new NestedSetRecursiveIterator($this);
- }
- // i18n behavior
- /**
- * Sets the locale for translations
- *
- * @param string $locale Locale to use for the translation, e.g. 'fr_FR'
- *
- * @return Article The current object (for fluent API support)
- */
- public function setLocale($locale = 'en_US')
- {
- $this->currentLocale = $locale;
- return $this;
- }
- /**
- * Gets the locale for translations
- *
- * @return string $locale Locale to use for the translation, e.g. 'fr_FR'
- */
- public function getLocale()
- {
- return $this->currentLocale;
- }
- /**
- * Returns the current translation for a given locale
- *
- * @param string $locale Locale to use for the translation, e.g. 'fr_FR'
- * @param PropelPDO $con an optional connection object
- *
- * @return ArticleI18n */
- public function getTranslation($locale = 'en_US', PropelPDO $con = null)
- {
- if (!isset($this->currentTranslations[$locale])) {
- if (null !== $this->collArticleI18ns) {
- foreach ($this->collArticleI18ns as $translation) {
- if ($translation->getLocale() == $locale) {
- $this->currentTranslations[$locale] = $translation;
- return $translation;
- }
- }
- }
- if ($this->isNew()) {
- $translation = new ArticleI18n();
- $translation->setLocale($locale);
- } else {
- $translation = ArticleI18nQuery::create()
- ->filterByPrimaryKey(array($this->getPrimaryKey(), $locale))
- ->findOneOrCreate($con);
- $this->currentTranslations[$locale] = $translation;
- }
- $this->addArticleI18n($translation);
- }
- return $this->currentTranslations[$locale];
- }
- /**
- * Remove the translation for a given locale
- *
- * @param string $locale Locale to use for the translation, e.g. 'fr_FR'
- * @param PropelPDO $con an optional connection object
- *
- * @return Article The current object (for fluent API support)
- */
- public function removeTranslation($locale = 'en_US', PropelPDO $con = null)
- {
- if (!$this->isNew()) {
- ArticleI18nQuery::create()
- ->filterByPrimaryKey(array($this->getPrimaryKey(), $locale))
- ->delete($con);
- }
- if (isset($this->currentTranslations[$locale])) {
- unset($this->currentTranslations[$locale]);
- }
- foreach ($this->collArticleI18ns as $key => $translation) {
- if ($translation->getLocale() == $locale) {
- unset($this->collArticleI18ns[$key]);
- break;
- }
- }
- return $this;
- }
- /**
- * Returns the current translation
- *
- * @param PropelPDO $con an optional connection object
- *
- * @return ArticleI18n */
- public function getCurrentTranslation(PropelPDO $con = null)
- {
- return $this->getTranslation($this->getLocale(), $con);
- }
- /**
- * Get the [title] column value.
- *
- * @return string
- */
- public function getTitle()
- {
- return $this->getCurrentTranslation()->getTitle();
- }
- /**
- * Set the value of [title] column.
- *
- * @param string $v new value
- * @return ArticleI18n The current object (for fluent API support)
- */
- public function setTitle($v)
- { $this->getCurrentTranslation()->setTitle($v);
- return $this;
- }
- /**
- * Get the [body] column value.
- *
- * @return string
- */
- public function getBody()
- {
- return $this->getCurrentTranslation()->getBody();
- }
- /**
- * Set the value of [body] column.
- *
- * @param string $v new value
- * @return ArticleI18n The current object (for fluent API support)
- */
- public function setBody($v)
- { $this->getCurrentTranslation()->setBody($v);
- return $this;
- }
- // artsofte_cms behavior
- /**
- * Опубликовать/распубликовать объект
- *
- */
- public function rePublic(PropelPDO $con = null)
- {
- $this->setActive(!$this->getActive());
- return $this->save($con);
- }
- /**
- * Имя класса Peer
- *
- */
- public function getClassPeer(PropelPDO $con = null)
- {
- return get_class($this->getPeer());
- }
- /**
- * Изменение порядка сортировки. Поднять вверх
- */
- public function treeUp(PropelPDO $con = null)
- {
- if($this->getParent()){
- $prev = $this->getPrevSibling();
- $this->moveToPrevSiblingOf($prev);
- $this->save();
- return true;
- }
- return false;
- }
- /**
- * Изменение порядка сортировки. Опустить вниз
- */
- public function treeDown(PropelPDO $con = null)
- {
- if($this->getParent()){
- $next = $this->getNextSibling();
- $this->moveToNextSiblingOf($next);
- $this->save();
- return true;
- }
- return false;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement