/**
  * 判断是否存在
  * @access private
  * @param string
  * @return true|false
  */
 private function verifyCategory3($category_3_id = NULL)
 {
     $category_3_cn = get_post_value('category_3_cn');
     $category_3_th = get_post_value('category_3_th');
     $m = new Category();
     $m->clear();
     $m->setTable('vcb_product_category_3');
     $m->setWhere('status', '!=', '60000');
     $m->setWhere('category_3_cn', '=', $category_3_cn, 'AND', '(');
     $m->setWhere('category_3_th', '=', $category_3_th, 'OR', ')');
     if ($category_2_id != null) {
         $m->setWhere('category_3_id', '!=', $category_3_id);
     }
     $data = $m->getFieldValue('COUNT(*)');
     //直接返回单条记录
     return $data > 0 ? false : true;
 }
 /**
  * 返回国家最大序号
  * @access public
  */
 function get_orders()
 {
     //查询最大序号
     $category_1 = get_post_value('category_1');
     $m = new Category();
     $m->clear();
     $m->setTable('vcb_product_category_2');
     $m->setWhere('status', '!=', '60000');
     $m->setWhere('category_1_id', '=', $category_1);
     $data = $m->getFieldValue('MAX(orders) ');
     // 设置新的序号
     if (is_null($data)) {
         $data = 1;
     } else {
         $data += 1;
     }
     $this->assign('message', $data);
     $this->setReturnType('message');
     //只返回单值
 }
Example #3
0
 public function testMoveCategoryBetweenBranches()
 {
     $newCategories = array(0 => null);
     $lastCategory = $this->root;
     foreach (range(1, 3) as $i) {
         $newCategories[$i] = Category::getNewInstance($lastCategory);
         $newCategories[$i]->setValueByLang("name", 'en', "New Category " . $i);
         $newCategories[$i]->save();
         $lastCategory = $newCategories[$i];
     }
     $lastCategory = $this->root;
     foreach (range(4, 6) as $i) {
         $newCategories[$i] = Category::getNewInstance($lastCategory);
         $newCategories[$i]->setValueByLang("name", 'en', "New Category " . $i);
         $newCategories[$i]->save();
         $lastCategory = $newCategories[$i];
     }
     $lastCategory = $this->root;
     foreach (range(7, 9) as $i) {
         $newCategories[$i] = Category::getNewInstance($lastCategory);
         $newCategories[$i]->setValueByLang("name", 'en', "New Category " . $i);
         $newCategories[$i]->save();
         $lastCategory = $newCategories[$i];
     }
     $lastCategory = $this->root;
     foreach (range(10, 12) as $i) {
         $newCategories[$i] = Category::getNewInstance($lastCategory);
         $newCategories[$i]->setValueByLang("name", 'en', "New Category " . $i);
         $newCategories[$i]->save();
         $lastCategory = $newCategories[$i];
     }
     $startingPositions = array();
     foreach ($newCategories as $category) {
         if (!$category) {
             continue;
         }
         $startingPositions[$category->getID()] = array('lft' => $category->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME), 'rgt' => $category->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME), 'parent' => $category->getFieldValue(ActiveTreeNode::PARENT_NODE_FIELD_NAME)->getID());
     }
     $rootRgt = $this->root->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME);
     $rootLft = $this->root->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME);
     // reload root
     $this->root->reload();
     // Make sure everything is created and left and right values are valid
     //		$this->assertEqual($this->root->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME), $rootRgt);
     //		$this->assertEqual($this->root->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME), $rootLft);
     $parentCatRgt = $newCategories[1]->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME);
     $parentCatLft = $newCategories[1]->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME);
     $targetCatRgt = $newCategories[4]->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME);
     $targetCatLft = $newCategories[4]->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME);
     // Move one branch inside another
     $newCategories[4]->moveTo($newCategories[1]);
     $parentCatRgtAfter = $newCategories[1]->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME);
     $parentCatLftAfter = $newCategories[1]->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME);
     $targetCatRgtAfter = $newCategories[4]->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME);
     $targetCatLftAfter = $newCategories[4]->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME);
     $rootRgtAfter = $this->root->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME);
     $rootLftAfter = $this->root->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME);
     // reload target, parent and root
     $newCategories[1]->reload();
     $newCategories[4]->reload();
     // Check if all rgt and lft in database are the same as in objects
     $this->assertEqual($this->root->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME), $rootRgtAfter);
     $this->assertEqual($this->root->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME), $rootLftAfter);
     $this->assertEqual($newCategories[1]->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME), $parentCatRgtAfter);
     $this->assertEqual($newCategories[1]->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME), $parentCatLftAfter);
     $this->assertEqual($newCategories[4]->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME), $targetCatRgtAfter);
     $this->assertEqual($newCategories[4]->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME), $targetCatLftAfter);
     $this->root->reload();
     // Check if all lft and rgt are valid
     //		$this->assertEqual($this->root->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME), $rootRgt);
     //		$this->assertEqual($this->root->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME), $rootLft);
     //		$this->assertEqual($newCategories[1]->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME), $parentCatRgt + 6);
     //		$this->assertEqual($newCategories[1]->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME), $parentCatLft );
     //		$this->assertEqual($newCategories[4]->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME), $parentCatRgt + 6 - 1);
     //		$this->assertEqual($newCategories[4]->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME), $parentCatRgt);
     $parentCatRgt = $newCategories[1]->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME);
     $parentCatLft = $newCategories[1]->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME);
     $targetCatRgt = $newCategories[7]->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME);
     $targetCatLft = $newCategories[7]->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME);
     // move another branch inside
     $newCategories[7]->moveTo($newCategories[1]);
     $parentCatRgtAfter = $newCategories[1]->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME);
     $parentCatLftAfter = $newCategories[1]->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME);
     $targetCatRgtAfter = $newCategories[7]->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME);
     $targetCatLftAfter = $newCategories[7]->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME);
     $rootRgtAfter = $this->root->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME);
     $rootLftAfter = $this->root->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME);
     // reload target, parent and root
     $newCategories[1]->reload();
     $newCategories[7]->reload();
     $this->root->reload();
     // Check if all rgt and lft in database are the same as in objects
     $this->assertEqual($this->root->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME), $rootRgtAfter);
     $this->assertEqual($this->root->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME), $rootLftAfter);
     $this->assertEqual($newCategories[1]->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME), $parentCatRgtAfter);
     $this->assertEqual($newCategories[1]->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME), $parentCatLftAfter);
     $this->assertEqual($newCategories[7]->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME), $targetCatRgtAfter);
     $this->assertEqual($newCategories[7]->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME), $targetCatLftAfter);
     // Check if all lft and rgt are valid
     /*
     		$this->assertEqual($this->root->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME), $rootRgt);
     		$this->assertEqual($this->root->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME), $rootLft);
     		$this->assertEqual($newCategories[1]->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME), $parentCatRgt + 6);
     		$this->assertEqual($newCategories[1]->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME), $parentCatLft );
     		$this->assertEqual($newCategories[7]->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME), $parentCatRgt + 6 - 1);
     		$this->assertEqual($newCategories[7]->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME), $parentCatRgt);
     */
     // Move category to another branch before node
     $parentCatRgt = $newCategories[1]->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME);
     $parentCatLft = $newCategories[1]->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME);
     $targetCatRgt = $newCategories[11]->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME);
     $targetCatLft = $newCategories[11]->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME);
     $beforeCatRgt = $newCategories[7]->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME);
     $beforeCatLft = $newCategories[7]->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME);
     $newCategories[11]->moveTo($newCategories[1], $newCategories[7]);
     $parentCatRgtAfter = $newCategories[1]->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME);
     $parentCatLftAfter = $newCategories[1]->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME);
     $targetCatRgtAfter = $newCategories[11]->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME);
     $targetCatLftAfter = $newCategories[11]->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME);
     $beforeCatRgtAfter = $newCategories[7]->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME);
     $beforeCatLftAfter = $newCategories[7]->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME);
     // reload target, parent and before
     $newCategories[1]->reload();
     $newCategories[7]->reload();
     $newCategories[11]->reload();
     // Check if all rgt and lft in database are the same as in objects
     $this->assertEqual($newCategories[1]->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME), $parentCatRgtAfter);
     $this->assertEqual($newCategories[1]->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME), $parentCatLftAfter);
     $this->assertEqual($newCategories[11]->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME), $targetCatRgtAfter);
     $this->assertEqual($newCategories[11]->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME), $targetCatLftAfter);
     $this->assertEqual($newCategories[7]->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME), $beforeCatRgtAfter);
     $this->assertEqual($newCategories[7]->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME), $beforeCatLftAfter);
     // Check if all lft and rgt are valid
     /*
     		$this->assertEqual($newCategories[1]->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME), $parentCatRgt + 4);
     		$this->assertEqual($newCategories[1]->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME), $parentCatLft );
     		$this->assertEqual($newCategories[11]->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME), $beforeCatLft + 4 - 1);
     		$this->assertEqual($newCategories[11]->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME), $beforeCatLft);
     		$this->assertEqual($newCategories[7]->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME), $beforeCatRgt + 4);
     		$this->assertEqual($newCategories[7]->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME), $beforeCatLft + 4);
     */
     //  Put all categories back to their starting positions
     $newCategories[11]->moveTo($newCategories[10]);
     $newCategories[4]->moveTo($this->root);
     $newCategories[7]->moveTo($this->root);
     $newCategories[10]->moveTo($this->root);
     foreach ($newCategories as $category) {
         if (!$category) {
             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']);
         $this->assertEqual($category->getFieldValue(ActiveTreeNode::PARENT_NODE_FIELD_NAME)->getID(), $startingPositions[$category->getID()]['parent']);
     }
 }