Ejemplo n.º 1
0
 public function testDeleteCategory()
 {
     ActiveRecord::clearPool();
     $startingPositions = array();
     $nodes = $this->root->getChildNodes(false, true);
     $nodes->add($this->root);
     $this->root->reload();
     foreach ($nodes as $category) {
         $startingPositions[$category->getID()] = array('lft' => $category->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME), 'rgt' => $category->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME), 'parent' => $category == $this->root ? '0' : $category->getFieldValue(ActiveTreeNode::PARENT_NODE_FIELD_NAME)->getID());
     }
     // new node
     $newCategory = Category::getNewInstance($this->root);
     $newCategory->setValueByLang("name", 'en', 'NEWNODE');
     $newCategory->save();
     // nested nodes
     $nestedNodes = array();
     $lastNode = $newCategory;
     foreach (array() as $i) {
         $nestedNodes[$i] = Category::getNewInstance($lastNode);
         $nestedNodes[$i]->setValueByLang("name", 'en', 'TEST ' . rand(1, 1000));
         $nestedNodes[$i]->save();
         $lastNode = $nestedNodes[$i];
     }
     $newCategory->reload();
     // Delete child node
     $newCategory->delete();
     $this->assertFalse($newCategory->isExistingRecord());
     $this->assertFalse($newCategory->isLoaded());
     // Check to see if everything is back to starting values
     $activeTreeNodes = ActiveRecord::retrieveFromPool(get_class($newCategory));
     foreach ($activeTreeNodes as $category) {
         try {
             $category->reload();
         } catch (ARNotFoundException $e) {
             continue;
         }
         if (!$category->getID()) {
             continue;
         }
         $this->assertEqual($category->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME), $startingPositions[$category->getID()]['lft']);
         $this->assertEqual($category->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME), $startingPositions[$category->getID()]['rgt']);
         if (!$category->isRoot()) {
             $this->assertEqual($category->getFieldValue(ActiveTreeNode::PARENT_NODE_FIELD_NAME)->getID(), $startingPositions[$category->getID()]['parent']);
         }
     }
 }
Ejemplo n.º 2
0
 public static function retrieveFromPool($className, $recordID = null)
 {
     if (is_object($recordID)) {
         $recordID = $recordID->getID();
     }
     if (($memPool = parent::retrieveFromPool($className, $recordID)) || is_null($recordID)) {
         return $memPool;
     }
     $cache = self::getApplication()->getCache();
     if ($cache instanceof MemCachedCache) {
         if ($instance = $cache->get($className . '-' . self::getRecordHash($recordID))) {
             $instance->storeToPool();
             return $instance;
         }
     }
 }
Ejemplo n.º 3
0
 /**
  * Delete this node with subtree
  *
  * @return bool
  *
  * @throws Exception If failed to commit the transaction
  */
 public function delete()
 {
     $className = get_class($this);
     $this->load();
     $t_r = $this->getFieldValue(self::RIGHT_NODE_FIELD_NAME);
     $t_l = $this->getFieldValue(self::LEFT_NODE_FIELD_NAME);
     $width = $this->getWidth();
     ActiveRecordModel::beginTransaction();
     try {
         $updates[] = "UPDATE {$className} SET " . self::RIGHT_NODE_FIELD_NAME . " = " . self::RIGHT_NODE_FIELD_NAME . " - {$width}  WHERE " . self::RIGHT_NODE_FIELD_NAME . " >= {$t_r}";
         $updates[] = "UPDATE {$className} SET " . self::LEFT_NODE_FIELD_NAME . " = " . self::LEFT_NODE_FIELD_NAME . " - {$width} WHERE " . self::LEFT_NODE_FIELD_NAME . " >= {$t_l}";
         foreach ($updates as $update) {
             self::getLogger()->logQuery($update);
             self::getDBConnection()->executeUpdate($update);
         }
         $result = parent::delete();
         ActiveRecordModel::commit();
         foreach (ActiveRecord::retrieveFromPool(get_class($this)) as $instance) {
             if ($instance->getFieldValue(self::RIGHT_NODE_FIELD_NAME) >= $t_r) {
                 $instance->setFieldValue(self::RIGHT_NODE_FIELD_NAME, $instance->getFieldValue(self::RIGHT_NODE_FIELD_NAME) - $width);
             }
             if ($instance->getFieldValue(self::LEFT_NODE_FIELD_NAME) >= $t_l) {
                 $instance->setFieldValue(self::LEFT_NODE_FIELD_NAME, $instance->getFieldValue(self::LEFT_NODE_FIELD_NAME) - $width);
             }
         }
     } catch (Exception $e) {
         ActiveRecordModel::rollback();
         throw $e;
     }
     $this->setID(false);
     $this->markAsNotLoaded();
     return $result;
 }
Ejemplo n.º 4
0
 public static function retrieveFromPool($className, $recordID = null)
 {
     if (is_object($recordID)) {
         if (!$recordID instanceof ActiveRecord) {
             return;
         }
         if ($recordID instanceof ARSerializableDateTime) {
             debug_zval_dump($recordID);
         }
         $recordID = $recordID->getID();
     }
     if (($memPool = parent::retrieveFromPool($className, $recordID)) || is_null($recordID)) {
         return $memPool;
     }
     $cache = self::getApplication()->getCache();
     if ($cache instanceof MemCachedCache) {
         if ($instance = $cache->get($className . '-' . self::getRecordHash($recordID))) {
             $instance->storeToPool();
             return $instance;
         }
     }
 }