示例#1
0
 public function getParents()
 {
     $nodeParents = array();
     $treeid = intval($_POST['treeid']);
     if ($treeid) {
         $nodeParents = K_Tree::getParents($treeid);
     }
     $this->putJSON($nodeParents);
 }
示例#2
0
 private static function aclTreeLoadRules($allRules)
 {
     foreach ($allRules as $v) {
         $nodeIds = K_Tree::getParents($v['tree_rule_resource_id']);
         $nodeIdsArr = $nodeIds;
         $nodeIdsArr[] = $v['tree_rule_resource_id'];
         $fullNodeResourse = implode('/', $nodeIdsArr);
         //полный ресурс ноды
         if (!self::$aclTree->has($fullNodeResourse)) {
             // грузим ресурсы только если нода не загруженна.
             // проверяем есть ли у ноды предки
             if (count($nodeIds) > 0) {
                 $nodeIds[] = $v['tree_rule_resource_id'];
                 $tmpIds = $nodeIds;
                 //проверяем на сколько загруженна ветка ресурса
                 $i = count($nodeIds) - 1;
                 foreach ($nodeIds as $k => $n) {
                     $i--;
                     array_pop($tmpIds);
                     $rosourceParent = implode('/', $tmpIds);
                     // ресурс предка ноды
                     if (self::$aclTree->has($rosourceParent)) {
                         break;
                     }
                 }
                 // echo "*******\n";
                 $resourseArr = $tmpIds;
                 // стартовая позиция с которой загружены ресурсы
                 // догружаем ресурсы ветки ноды вместе с нодой
                 for ($m = $i + 1; $m < count($nodeIds); $m++) {
                     $resourseArr[] = $nodeIds[$m];
                     $resourse = strtolower(implode('/', $resourseArr));
                     //  echo $rosourceParent."-parent\n";
                     //  echo $resourse."-node\n";
                     self::$aclTree->add(new K_Acl_Resource($resourse), $rosourceParent == '' ? null : $rosourceParent, null);
                     $rosourceParent = $resourse;
                 }
             } else {
                 //нет предков сразу грузим ресурс без предка, если он не загружен
                 if (!self::$aclTree->has($v['tree_rule_resource_id'])) {
                     self::$aclTree->add(new K_Acl_Resource($v['tree_rule_resource_id']), null, null);
                 }
             }
         }
         //  echo $v['role']."    ".$fullNodeResourse.'  '.$v['privilege']." ". $v['tree_ruleType'] ;
         //устанавливамем правило
         switch ($v['tree_ruleType']) {
             case 'allow':
                 self::$aclTree->allow($v['role'], $fullNodeResourse, $v['privilege']);
                 break;
             case 'deny':
                 self::$aclTree->deny($v['role'], $fullNodeResourse, $v['privilege']);
                 break;
         }
     }
     //K_Cache_Manager::get('unlim')->save('ATR', self::$aclTree);
     self::saveAclArrays('ATR', self::$aclTree);
 }
示例#3
0
         $allowTrigger = true;
         $nodeArr = array();
     }
     for ($i = 0; $i < sizeof($treeElements); $i++) {
         $typeController = 'Type_Controller_' . ucfirst($treeElements[$i]['tree_type']);
         $resArr = $nodeArr;
         $resArr[] = $treeElements[$i]['tree_id'];
         $resourse = implode('/', $resArr);
         //  echo $resourse."\n";
         $access = K_Access::aclTree()->isAllowed(K_Auth::getRoles(), $resourse, true);
         // var_dump(K_Access::aclTree()->lastResource);
         if (K_Access::aclTree()->lastResource == null) {
             $access = $allowTrigger;
         }
         if ($access || $treeElements[$i]['tree_id'] == '1') {
             if ($treeElements[$i]['subElements']) {
                 $nodeState = 'closed';
             } else {
                 $nodeState = '';
             }
             if ($treeElements[$i]['tree_type'] == 'list') {
                 $list = K_CupItems::getItems($treeElements[$i]['tree_id'], $treeElements[$i]['tree_type']);
                 $allowTypes = array_map('trim', explode(',', $list[0]['types']));
             } else {
                 $allowTypes = $typeController::$allowedChildren;
             }
             if (!in_array("all", $allowTypes)) {
                 $allows = array("types" => array("valid_children" => $allowTypes));
             }
             $treeStructure = array('attr' => array('id' => 'node_' . $treeElements[$i]['tree_id'], 'rel' => $access ? $treeElements[$i]['tree_type'] : "disable_n"), 'data' => array("title" => $treeElements[$i]['tree_title'], 'icon' => "/adm/img/tree/" . $treeElements[$i]['tree_type'] . ".png", "attr" => array("href" => "#", "class" => $access ? "" : "ui-state-disabled")), "metadata" => array('id' => $treeElements[$i]['tree_id']), 'state' => $nodeState);
             $treeStructure['metadata']["jstree"] = $allows;
             $treeStructureArr[] = $treeStructure;
             // $treeStructure['metadata']['jstree']=$allows;
         }
     }
     $this->putJSON($treeStructureArr);
 }
 /*
 Перемещяет нод в дереве
 $key, $base_key, $position = 'bottom'
 */
 public function moveAction()
 {
     $this->disableRender = true;
     $key = (int) $_POST['key'];
     $baseKey = (int) $_POST['base_key'];
     $position = $_POST['position'];
     $copy = (int) $_POST['copy'];
     $pasteKey = (int) $_POST['parent_key'];
     $node = K_Tree::getNode($key);
     if ($node['tree_bloked'] == '1') {
         $this->putAjax('{ "status" : false}');
     }
     if ($copy) {