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'); } }
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; }
/** * Рекурсивно копирует ноду и всех её детей вместе с итемами в новое место * проверяет на копии и изменяет имя ноды если они есть, использует _с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 и тийтл который может измениться если в ветки есть копии }
$returnJson['status'] = true; } else { $returnJson['status'] = false; } $this->putJSON($returnJson); } public function updateAction() { $this->disableRender = true;