Exemplo n.º 1
0
 public static function loadCastomFromStructure($formLink, $formMethodsClass = false, $formMethodsParams = array())
 {
     $treeTable = new K_Tree_Model();
     $resultData = '';
     $node = $treeTable->select()->where('`tree_link`="' . $formLink . '"')->fetchRow();
     if ($node) {
         try {
             $typeModelName = 'Type_Model_' . ucfirst($node['tree_type']);
             $formTable = new $typeModelName();
             $formData = $formTable->select()->where('`type_' . $node['tree_type'] . '_id`=' . (int) $node['tree_id'])->fetchRow();
             $unserializedFormData = unserialize($formData['type_' . $node['tree_type'] . '_content']);
             $unserializedFormData = json_decode($unserializedFormData['form_structure']);
             for ($i = 0; $i < sizeof($unserializedFormData); $i++) {
                 if ($unserializedFormData[$i]->type == 'select') {
                     if (!empty($unserializedFormData[$i]->values->method) && $formMethodsClass !== false) {
                         if (method_exists($formMethodsClass, 'f_' . $unserializedFormData[$i]->values->method)) {
                             $className = $formMethodsClass;
                             $methodName = 'f_' . $unserializedFormData[$i]->values->method;
                             $data = $className::$methodName(isset($formMethodsParams[$unserializedFormData[$i]->values->method]) ? $formMethodsParams[$unserializedFormData[$i]->values->method] : array());
                             $unserializedFormData[$i]->options = $data;
                         }
                     }
                 }
             }
             $resultData = array('form_structure' => json_encode($unserializedFormData));
             return $resultData;
         } catch (Exception $err) {
             K_Debug::get()->addError('Model Type_Model_Form not found in type/model directory');
         }
     } else {
         K_Debug::get()->addError('Form ' . $formLink . ' was not loaded. Node required');
     }
 }
Exemplo n.º 2
0
 public static function fixPids($startId)
 {
     $treeTable = new K_Tree_Model();
     $result = $treeTable->select(array('tree_lkey', 'tree_rkey', 'tree_level'))->where('`tree_id`=' . (int) $startId)->fetchArray();
     if (count($result) == 0) {
         throw new Exception('db_err_fixpid db_err_norootd ' . $startId);
     }
     list($lKey, $rKey, $level) = array($result[0]['tree_lkey'], $result[0]['tree_rkey'], $result[0]['tree_level']);
     if ($rKey - $lKey == 1) {
         return;
     }
     // Вложенных элементов нет.
     $result = $treeTable->select(array('tree_id', 'tree_lkey', 'tree_rkey', 'tree_level'))->where('`tree_lkey` BETWEEN ' . $lKey . ' AND ' . $rKey . ' AND `tree_rkey`-`tree_lkey` > 1')->order('tree_level')->fetchArray();
     $upds = array();
     while (list($k, $f) = each($result)) {
         $upds[] = $f;
     }
     // Перебираем все элементы, у которых есть дочерние элементы.
     foreach ($upds as $cUpd) {
         $treeTable->update(array('tree_pid' => $cUpd['tree_id']), '`tree_lkey`=' . $cUpd['tree_lkey'] . ' AND `tree_rkey` < ' . $cUpd['tree_rkey'] . ' AND `tree_level`=' . ($cUpd['tree_level'] + 1));
     }
     return true;
 }
Exemplo n.º 3
0
 /** 
  *  Рекурсивно копирует ноду и всех её детей вместе с итемами в новое место 
  *  проверяет на копии и изменяет имя ноды если они есть, использует _сNodeRec для рекурсивного копирования детей
  * 
  */
 public static function сNode($copyNodeId, $pasteNodeId)
 {
     $nodeArray = K_Tree::getNode($copyNodeId);
     $nameLt = $nodeArray["tree_name"];
     $title = $nodeArray["tree_title"];
     if ($pasteNodeId == $nodeArray["tree_pid"]) {
         $nameLt .= base_convert(time() + rand(1, 999), 10, 36);
         $title .= "_K";
     } else {
         $treeTable = new K_Tree_Model();
         //проверяем есть ли дети в ноде с таким именем если есть то меняем имя
         $result = $treeTable->select()->where('`tree_pid` = ' . $pasteNodeId . ' AND `tree_name`="' . $nameLt . '"')->fetchAssoc('tree_name');
         if (count($result)) {
             $nameLt .= "_" . base_convert(time() + rand(1, 999), 10, 36);
             $title .= "_K";
         }
     }
     $nodeId = K_Tree::add($pasteNodeId, $nodeArray["tree_type"], $nameLt, $title);
     //$cTree=new K_cTree($nodeArray["tree_type"]);
     //$nodeItem=$cTree->getItem($key,false);
     eval('$typeModel=new Type_Model_' . ucfirst($nodeArray["tree_type"]) . ";");
     // Выполняем запрос
     $result = $typeModel->select()->where("type_" . $nodeArray["tree_type"] . '_id=' . $copyNodeId)->fetchRow();
     if ($result) {
         $nodeItem = $result->toArray();
     }
     // дозаписываем информацию в таблицу типов
     $nodeItem["type_" . $nodeArray["tree_type"] . '_id'] = $nodeId;
     $typeModel->save($nodeItem);
     //рекурсивно копируем все дочерние ноды копируемой ноды в вновь созданную ноду но уже без проверок
     self::_сNodeRec($copyNodeId, $nodeId);
     return array("id" => $nodeId, 'title' => $title);
     // возвращяет информацию о ноде новый id и тийтл который может измениться если в ветки есть копии
 }
Exemplo n.º 4
0
         $returnJson['status'] = true;
     } else {
         $returnJson['status'] = false;
     }
     $this->putJSON($returnJson);
 }
 public function updateAction()
 {
     $this->disableRender = true;