protected function update($connection = null)
 {
     if (!isset($connection)) {
         $connection = QubitTransactionFilter::getConnection(QubitOaiHarvest::DATABASE_NAME);
     }
     $offset = 0;
     foreach ($this->tables as $table) {
         $criteria = new Criteria();
         $selectCriteria = new Criteria();
         foreach ($table->getColumns() as $column) {
             if (!array_key_exists($column->getPhpName(), $this->values)) {
                 if ('updatedAt' == $column->getPhpName()) {
                     $this->values['updatedAt'] = new DateTime();
                 }
             }
             if (array_key_exists($column->getPhpName(), $this->values)) {
                 if ('serialNumber' == $column->getPhpName()) {
                     $selectCriteria->add($column->getFullyQualifiedName(), $this->values[$column->getPhpName()]++);
                 }
                 $criteria->add($column->getFullyQualifiedName(), $this->param($column));
             }
             if ($column->isPrimaryKey()) {
                 $selectCriteria->add($column->getFullyQualifiedName(), $this->keys[$column->getPhpName()]);
             }
             $offset++;
         }
         if (0 < $criteria->size()) {
             BasePeer::doUpdate($selectCriteria, $criteria, $connection);
         }
     }
     return $this;
 }
 /**
  * This method checks another Criteria to see if they contain
  * the same attributes and hashtable entries.
  *
  * @param Criteria|null $crit
  * @return boolean
  */
 public function equals($crit)
 {
     if ($crit === null || !$crit instanceof Criteria) {
         return false;
     } elseif ($this === $crit) {
         return true;
     } elseif ($this->size() === $crit->size()) {
         // Important: nested criterion objects are checked
         $criteria = $crit;
         // alias
         if ($this->offset === $criteria->getOffset() && $this->limit === $criteria->getLimit() && $this->ignoreCase === $criteria->isIgnoreCase() && $this->singleRecord === $criteria->isSingleRecord() && $this->dbName === $criteria->getDbName() && $this->selectModifiers === $criteria->getSelectModifiers() && $this->selectColumns === $criteria->getSelectColumns() && $this->asColumns === $criteria->getAsColumns() && $this->orderByColumns === $criteria->getOrderByColumns() && $this->groupByColumns === $criteria->getGroupByColumns() && $this->aliases === $criteria->getAliases()) {
             foreach ($criteria->keys() as $key) {
                 if ($this->containsKey($key)) {
                     $a = $this->getCriterion($key);
                     $b = $criteria->getCriterion($key);
                     if (!$a->equals($b)) {
                         return false;
                     }
                 } else {
                     return false;
                 }
             }
             $joins = $criteria->getJoins();
             if (count($joins) != count($this->joins)) {
                 return false;
             }
             foreach ($joins as $key => $join) {
                 if (!$join->equals($this->joins[$key])) {
                     return false;
                 }
             }
             return true;
         } else {
             return false;
         }
     }
     return false;
 }
 /**
  * This methods inspects the columns of the object's table and if one of them if a foreign key,
  * it returns the change log of the referenced object IF it points to the specified object (parameter).
  *
  * @param mixed $object
  * @param date $from_date
  * @param transformToAdapters
  *
  * @return Array of ncChangeLogEntry
  */
 public function getNNRelatedChangeLog($object, $from_date = null, $transformToAdapters = true)
 {
     $relatedChangeLog = array();
     $relatedObjects = array();
     if (!is_null($object)) {
         // Obtain object's information
         $object_class = get_class($object);
         $peer = constant($object_class . '::PEER');
         // Get all tableMaps and make the queries to retrieve all object instances that reference the object!!!
         ncClassFinder::getInstance()->reloadClasses();
         foreach (ncClassFinder::getInstance()->getPeerClasses() as $class => $path) {
             if ($class != get_class($object) && class_exists($class) && method_exists($class, 'getTableMap')) {
                 $criteria = new Criteria();
                 $tableMap = call_user_func(array($class, 'getTableMap'));
                 foreach ($tableMap->getColumns() as $c) {
                     if ($c->isForeignKey()) {
                         $method = 'get' . $c->getPhpName();
                         $relatedTableName = $c->getRelatedTableName();
                         $relatedColName = $c->getRelatedColumnName();
                         $relatedPeerClass = ncClassFinder::getInstance()->findPeerClassName($relatedTableName);
                         $relatedClass = ncClassFinder::getInstance()->findClassName($relatedTableName, $relatedPeerClass);
                         // Traverse all collumns. If any has as its `relatedClass` the class of $object, make a
                         // Criteria object to fetch every related object.
                         if ($relatedClass == get_class($object)) {
                             $criterion = $criteria->getNewCriterion(constant($class . '::' . $c->getName()), $object->getPrimaryKey());
                             $criteria->addOr($criterion);
                         }
                     }
                 }
                 if ($criteria->size() > 0) {
                     $relatedObjects[$class] = call_user_func(array($class, 'doSelect'), $criteria);
                 }
             }
         }
         // Get every object's change log
         foreach ($relatedObjects as $tableName => $objects) {
             foreach ($objects as $o) {
                 $criteria = new Criteria();
                 if (!is_null($from_date)) {
                     $criteria->add(ncChangeLogEntryPeer::CREATED_AT, $from_date, Criteria::GREATER_THAN);
                 }
                 if (sfMixer::getCallable('Base' . get_class($o) . ':getChangeLog') && count($changes = $o->getChangeLog($criteria)) > 0) {
                     if (method_exists($o, '__toString')) {
                         $relatedChangeLog[$tableName][strval($o)] = $changes;
                     } else {
                         $relatedChangeLog[$tableName][$o->getPrimaryKey()] = $changes;
                     }
                 }
             }
         }
     }
     return $relatedChangeLog;
 }
Example #4
0
	/**
	 * This method checks another Criteria to see if they contain
	 * the same attributes and hashtable entries.
   *
   * @param Criteria $crit
   *
	 * @return     boolean
	 */
	public function equals($crit)
	{
		$isEquiv = false;
		if ($crit === null || !($crit instanceof Criteria)) {
			$isEquiv = false;
		} elseif ($this === $crit) {
			$isEquiv = true;
		} elseif ($this->size() === $crit->size()) {

			// Important: nested criterion objects are checked

			$criteria = $crit; // alias
			if ($this->offset === $criteria->getOffset()
				&& $this->limit === $criteria->getLimit()
				&& $this->ignoreCase === $criteria->isIgnoreCase()
				&& $this->singleRecord === $criteria->isSingleRecord()
				&& $this->dbName === $criteria->getDbName()
				&& $this->selectModifiers === $criteria->getSelectModifiers()
				&& $this->selectColumns === $criteria->getSelectColumns()
				&& $this->orderByColumns === $criteria->getOrderByColumns()
				&& $this->groupByColumns === $criteria->getGroupByColumns()
			   )
			{
				$isEquiv = true;
				foreach($criteria->keys() as $key) {
					if ($this->containsKey($key)) {
						$a = $this->getCriterion($key);
						$b = $criteria->getCriterion($key);
						if (!$a->equals($b)) {
							$isEquiv = false;
							break;
						}
					} else {
						$isEquiv = false;
						break;
					}
				}
			}
		}
		return $isEquiv;
	}
Example #5
0
 protected function update($connection = null)
 {
     // Update nested set keys only if parent id has changed
     if (isset($this->values['parentId'])) {
         // Get the "original" parentId before any updates
         $offset = 0;
         $originalParentId = null;
         foreach ($this->tables as $table) {
             foreach ($table->getColumns() as $column) {
                 if ('parentId' == $column->getPhpName()) {
                     $originalParentId = $this->row[$offset];
                     break;
                 }
                 $offset++;
             }
         }
         // If updated value of parentId is different then original value,
         // update the nested set
         if ($originalParentId != $this->values['parentId']) {
             $this->updateNestedSet($connection);
         }
     }
     if (!isset($connection)) {
         $connection = QubitTransactionFilter::getConnection(QubitMenu::DATABASE_NAME);
     }
     $offset = 0;
     foreach ($this->tables as $table) {
         $criteria = new Criteria();
         $selectCriteria = new Criteria();
         foreach ($table->getColumns() as $column) {
             if (!array_key_exists($column->getPhpName(), $this->values)) {
                 if ('updatedAt' == $column->getPhpName()) {
                     $this->values['updatedAt'] = new DateTime();
                 }
             }
             if (array_key_exists($column->getPhpName(), $this->values)) {
                 if ('serialNumber' == $column->getPhpName()) {
                     $selectCriteria->add($column->getFullyQualifiedName(), $this->values[$column->getPhpName()]++);
                 }
                 $criteria->add($column->getFullyQualifiedName(), $this->param($column));
             }
             if ($column->isPrimaryKey()) {
                 $selectCriteria->add($column->getFullyQualifiedName(), $this->keys[$column->getPhpName()]);
             }
             $offset++;
         }
         if (0 < $criteria->size()) {
             BasePeer::doUpdate($selectCriteria, $criteria, $connection);
         }
     }
     return $this;
 }