Ejemplo n.º 1
0
 public static function accessTree($nodeId, $privilege = null, $addNodes = false)
 {
     self::initTree();
     $nodeArr = K_tree::getParents($nodeId);
     // выбираем всех родителей ноды
     $nodeArr[] = $nodeId;
     // добовляем id самой ноды
     $allowTrigger = false;
     $access = false;
     // по умолчанию доступ запрещён
     //проверяем на доступ ноду со всеми её родителями к которой запрашиваються потомки
     // проверка идёт с верху вниз
     /**
      *@todo протестировать проверку с низу-вверх, как быстрей ?
      */
     // c низу вверх(должно работать быстрей);
     //проверка не самой ноды а сразу ноды родителя(необходимо для привелегий add addremove)
     if ($addNodes) {
         array_pop($nodeArr);
     }
     $i = count($nodeArr);
     for ($i; $i > 0; $i--) {
         $resourse = implode('/', $nodeArr);
         array_pop($nodeArr);
         $access = K_Access::aclTree()->isAllowed(K_Auth::getRoles(), $resourse, $privilege);
         if (K_Access::aclTree()->lastResource) {
             break;
         }
     }
     /*  // проверка с верху ввниз         
             foreach ($nodeArr as $v) {
                 $resourseArr[] = $v;
     
                 $resourse = implode('/', $resourseArr);
                 $access = K_Access::aclTree()->isAllowed(K_Auth::getRoles(), $resourse, null);
     
                 if (K_Access::aclTree()->lastResource == null) {
                     $access = $allowTrigger;
                 } else {
                     $lastKnowResourse = K_Access::aclTree()->lastResource;
                 }
                 
                 $allowTrigger = $access;
             }*/
     return $access;
 }
Ejemplo n.º 2
0
 public function buildArrows($node)
 {
     $prevBro = K_tree::getPrevBro($node['tree_id']);
     $nextBro = K_tree::getNextBro($node['tree_id']);
     return '<a href = "javascript:void(0)" ' . ($prevBro['tree_link'] ? '' : 'style="display:none"') . '" id = "arrow-prev" data-link = "' . $prevBro['tree_link'] . '" class="arrow-prev-next" >Предыдущий</a>' . '<a href = "javascript:void(0)" ' . ($nextBro['tree_link'] ? '' : 'style="display:none"') . '" id = "arrow-next" data-link = "' . $nextBro['tree_link'] . '" class="arrow-prev-next" >Следующий</a>';
 }
Ejemplo n.º 3
0
    public function updateElementAction()
    {
        $this->disableRender = true;
        $values = array();
        $treeTable = new K_Tree_Model();
        $elementId = $this->getParam('id');
        $node = K_tree::getNode($elementId);
        $typeModelName = 'Type_Model_' . ucfirst($node['tree_type']);
        $typeModel = new $typeModelName();
        $query = new K_Db_Query();
        $columns = $query->q('SHOW COLUMNS FROM `type_' . $node['tree_type'] . '`');
        foreach ($columns as $c_key => $column) {
            $columns[$c_key] = $column->toArray();
            foreach ($_POST as $p_key => $value) {
                if ('type_' . $node['tree_type'] . '_' . $p_key == $columns[$c_key]['Field']) {
                    $values['type_' . $node['tree_type'] . '_' . $p_key] = $value;
                } elseif ($columns[$c_key]['Field'] == 'type_' . $node['tree_type'] . '_aaccess') {
                    $values['type_' . $node['tree_type'] . '_aaccess'] = '';
                }
            }
        }
        $form = new K_Form();
        $uploadDir = WWW_PATH . '/upload';
        $typeFiles = $form->getFiles();
        $typesModel = new K_Tree_Types_Model();
        $typeData = $typesModel->select('type_fields')->where('`type_name`="' . $node['tree_type'] . '"')->fetchRow();
        $typeData = $typeData->toArray();
        $typeData = unserialize($typeData['type_fields']);
        $typeData = json_decode($typeData['form_structure']);
        if ($form->hasFiles()) {
            $typeFiles = $form->getFiles();
        }
        foreach ($typeData as $key => $value) {
            /*  если необходимо добавлять текущее время к дате 
                if($value->values->name  == 'date'){  
                    $dates =  K_date::dateParse($_POST['date']);
                    $values['type_' . $node['tree_type'] . '_date'] = date('Y-m-d',$dates['ts']) .' '.date('G:i:s',time()); 
                }           */
            // var_dump($typeFiles);
            if ($value->type == 'file' || $value->type == 'multifile') {
                if ($value->type == 'multifile') {
                    $currentTypeData = $typeModel->select()->where('`type_' . $node['tree_type'] . '_id`=' . (int) $node['tree_id'])->fetchRow();
                    $currentTypeData = $currentTypeData->toArray();
                    // массив файлов сохранённый в базе;
                    if ($filesArray = unserialize($currentTypeData['type_' . $node['tree_type'] . '_' . $value->values->name])) {
                        $i = 0;
                        $fcount = count($filesArray);
                        for ($i = 0; $i < $fcount; $i++) {
                            $isDelete = false;
                            if ($_POST[$value->values->name . '_delete_' . $i] || $typeFiles[$value->values->name . '_f_' . $i]) {
                                $currentLastLoadedFile = $uploadDir . '/' . $filesArray[$i]['f'];
                                if (is_file($currentLastLoadedFile)) {
                                    unlink($currentLastLoadedFile);
                                }
                                unset($filesArray[$i]);
                                $isDelete = true;
                            }
                            if (!$isDelete && $_POST[$value->values->name . '_t_' . $i]) {
                                $filesArray[$i]['t'] = $_POST[$value->values->name . '_t_' . $i];
                            }
                        }
                    }
                    foreach ($typeFiles as $k => $v) {
                        if (preg_match('/^' . $value->values->name . '_f_([0-9]*)$/s', $k, $m)) {
                            if (is_dir($uploadDir)) {
                                $pathData = $form->moveUploadedFile($k, $uploadDir, md5(time() . rand()), true);
                                /*
                                                            if ($value->values->filter)
                                                            {
                                                            $filters = explode('|', $value->values->filter);
                                                            
                                                            foreach ($filters as $filter)
                                                            {
                                                            $filter = explode(':', $filter);
                                                           
                                                            if ($filter[0] == 'image')
                                                            {
                                                            $pathData['path'] = '/images/'.$pathData['filename'].'&'.$filter[1];
                                                            }
                                                            }
                                                            }*/
                            } else {
                                $this->putAjax('Директории для загрузки не существует "' . $k . '"!');
                            }
                            if ($pathData) {
                                $fileOne['f'] = $pathData['filename'];
                                if (!empty($_POST[$value->values->name . '_t_' . $m[1]])) {
                                    $fileName = $_POST[$value->values->name . '_t_' . $m[1]];
                                } else {
                                    $fileName = $v['name'];
                                }
                                $fileOne['t'] = $fileName;
                                $filesArray[] = $fileOne;
                            } else {
                                $this->putAjax('Не удалось загрузить файл "' . $k . '"!');
                            }
                        }
                    }
                    //упорядочим массив
                    $filesArrayOrdered = array();
                    foreach ($filesArray as $v) {
                        if (isset($v)) {
                            $filesArrayOrdered[] = $v;
                        }
                    }
                    $values['type_' . $node['tree_type'] . '_' . $value->values->name] = count($filesArrayOrdered) ? serialize($filesArrayOrdered) : '';
                } else {
                    if ($_POST[$value->values->name . '_delete']) {
                        $currentTypeData = $typeModel->select()->where('`type_' . $node['tree_type'] . '_id`=' . (int) $node['tree_id'])->fetchRow();
                        $currentTypeData = $currentTypeData->toArray();
                        $currentLastLoadedFile = $uploadDir . '/' . $currentTypeData['type_' . $node['tree_type'] . '_' . $value->values->name];
                        if (is_file($currentLastLoadedFile)) {
                            unlink($currentLastLoadedFile);
                        }
                        $values['type_' . $node['tree_type'] . '_' . $value->values->name] = '';
                    } else {
                        if ($form->hasFiles() && isset($typeFiles[$value->values->name])) {
                            if (is_dir($uploadDir)) {
                                $currentTypeData = $typeModel->select()->where('`type_' . $node['tree_type'] . '_id`=' . (int) $node['tree_id'])->fetchRow();
                                $currentTypeData = $currentTypeData->toArray();
                                $currentLastLoadedFile = $uploadDir . '/' . $currentTypeData['type_' . $node['tree_type'] . '_' . $value->values->name];
                                if (is_file($currentLastLoadedFile)) {
                                    unlink($currentLastLoadedFile);
                                }
                                $pathData = $form->moveUploadedFile($value->values->name, $uploadDir, md5(time() . rand()), true);
                                /*
                                                            if ($value->values->filter)
                                                            {
                                                            $filters = explode('|', $value->values->filter);
                                                            
                                                            foreach ($filters as $filter)
                                                            {
                                                            $filter = explode(':', $filter);
                                                            
                                                            if ($filter[0] == 'image')
                                                            {
                                                            $pathData['path'] = '/images/'.$pathData['filename'].'&'.$filter[1];
                                                            }
                                                            }
                                                            }*/
                            } else {
                                $this->putAjax('Директории для загрузки не существует "' . $value->values->name . '"!');
                            }
                            if ($pathData) {
                                $values['type_' . $node['tree_type'] . '_' . $value->values->name] = $pathData['filename'];
                            } else {
                                $this->putAjax('Не удалось загрузить файл "' . $value->values->name . '"!');
                            }
                        } else {
                            if ($value->values->filter == 'required' && !isset($typeFiles[$value->values->name])) {
                                $this->putAjax('Файл "' . $value->values->name . '" не был загружен!');
                            } else {
                                if (!$values['type_' . $node['tree_type'] . '_' . $value->values->name]) {
                                    unset($values['type_' . $node['tree_type'] . '_' . $value->values->name]);
                                }
                            }
                        }
                    }
                }
            }
        }
        $typeModel->update($values, '`type_' . $node['tree_type'] . '_id`=' . (int) $elementId);
        echo 'Данные сохранены!
		<script type="text/javascript">
			$(document).ready(function(){
				setTimeout(function(){
				loadTabs(' . (int) $elementId . ');
				}, 2000);
			});
		</script>
		';
    }
Ejemplo n.º 4
0
 public function prevNextLoad()
 {
     $treeLink = $_POST['link'];
     $node = K_tree::getNode($treeLink);
     if (!$node) {
         $jsonReturn['error'] = true;
         $jsonReturn['msg'] = 'Ошибка: неправильная ссылка на элемент';
         $this->putJSON($jsonReturn);
     }
     $jsonReturn['error'] = false;
     $prevBro = K_tree::getPrevBro($node['tree_id']);
     $nextBro = K_tree::getNextBro($node['tree_id']);
     $jsonReturn['prev'] = !empty($prevBro['tree_link']) ? $prevBro['tree_link'] : false;
     $jsonReturn['next'] = !empty($nextBro['tree_link']) ? $nextBro['tree_link'] : false;
     $jsonReturn['html'] = K_Request::call(array('module' => 'default', 'controller' => 'index', 'action' => 'page', 'params' => array('0' => $treeLink), 'disableLayout' => false, 'layout' => 'contentlayout'));
     $this->putJSON($jsonReturn);
 }
Ejemplo n.º 5
0
    public function updateElementAction()
    {
        $this->disableRender = true;
        $values = array();
        $treeTable = new K_Tree_Model();
        $elementId = $this->getParam('id');
        $node = K_tree::getNode($elementId);
        $typeModelName = 'Type_Model_' . ucfirst($node['tree_type']);
        $typeModel = new $typeModelName();
        $query = new K_Db_Query();
        $columns = $query->q('SHOW COLUMNS FROM `type_' . $node['tree_type'] . '`');
        foreach ($columns as $c_key => $column) {
            $columns[$c_key] = $column->toArray();
            foreach ($_POST as $p_key => $value) {
                if ('type_' . $node['tree_type'] . '_' . $p_key == $columns[$c_key]['Field']) {
                    $values['type_' . $node['tree_type'] . '_' . $p_key] = $value;
                } elseif ($columns[$c_key]['Field'] == 'type_' . $node['tree_type'] . '_aaccess') {
                    $values['type_' . $node['tree_type'] . '_aaccess'] = '';
                }
            }
        }
        $form = new K_Form();
        $uploadDir = WWW_PATH . '/upload';
        $typeFiles = $form->getFiles();
        $typesModel = new K_Tree_Types_Model();
        $typeData = $typesModel->select('type_fields')->where('`type_name`="' . $node['tree_type'] . '"')->fetchRow();
        $typeData = $typeData->toArray();
        $typeData = unserialize($typeData['type_fields']);
        $typeData = json_decode($typeData['form_structure']);
        if ($form->hasFiles()) {
            $typeFiles = $form->getFiles();
        }
        foreach ($typeData as $key => $value) {
            if ($value->type == 'file') {
                if ($_POST[$value->values->name . '_delete']) {
                    $currentTypeData = $typeModel->select()->where('`type_' . $node['tree_type'] . '_id`=' . (int) $node['tree_id'])->fetchRow();
                    $currentTypeData = $currentTypeData->toArray();
                    $currentLastLoadedFile = $uploadDir . '/' . $currentTypeData['type_' . $node['tree_type'] . '_' . $value->values->name];
                    if (is_file($currentLastLoadedFile)) {
                        unlink($currentLastLoadedFile);
                    }
                    $values['type_' . $node['tree_type'] . '_' . $value->values->name] = '';
                } else {
                    if ($form->hasFiles() && isset($typeFiles[$value->values->name])) {
                        if (is_dir($uploadDir)) {
                            $currentTypeData = $typeModel->select()->where('`type_' . $node['tree_type'] . '_id`=' . (int) $node['tree_id'])->fetchRow();
                            $currentTypeData = $currentTypeData->toArray();
                            $currentLastLoadedFile = $uploadDir . '/' . $currentTypeData['type_' . $node['tree_type'] . '_' . $value->values->name];
                            if (is_file($currentLastLoadedFile)) {
                                unlink($currentLastLoadedFile);
                            }
                            $pathData = $form->moveUploadedFile($value->values->name, $uploadDir, md5(time() . rand()), true);
                            /*
                                                        if ($value->values->filter)
                                                        {
                                                        $filters = explode('|', $value->values->filter);
                                                        
                                                        foreach ($filters as $filter)
                                                        {
                                                        $filter = explode(':', $filter);
                                                        
                                                        if ($filter[0] == 'image')
                                                        {
                                                        $pathData['path'] = '/images/'.$pathData['filename'].'&'.$filter[1];
                                                        }
                                                        }
                                                        }*/
                        } else {
                            $this->putAjax('Директории для загрузки не существует "' . $value->values->name . '"!');
                        }
                        if ($pathData) {
                            $values['type_' . $node['tree_type'] . '_' . $value->values->name] = $pathData['filename'];
                        } else {
                            $this->putAjax('Не удалось загрузить файл "' . $value->values->name . '"!');
                        }
                    } elseif ($value->values->filter == 'required' && !isset($typeFiles[$value->values->name])) {
                        $this->putAjax('Файл "' . $value->values->name . '" не был загружен!');
                    } else {
                        if (!$values['type_' . $node['tree_type'] . '_' . $value->values->name]) {
                            unset($values['type_' . $node['tree_type'] . '_' . $value->values->name]);
                        }
                    }
                }
            }
        }
        $typeModel->update($values, '`type_' . $node['tree_type'] . '_id`=' . (int) $elementId);
        echo 'Данные сохранены!
		<script type="text/javascript">
				setTimeout(function(){
					$("a.jstree-clicked").click();
				}
			});
		</script>
		';
    }
Ejemplo n.º 6
0
    
    Returns data for client-side tree
    
    var data = [
    {
    label: 'Тест',
    children: [
    { label: 'child1' },
    { label: 'child2' }
    ]
    },
    {
    label: 'Тест 2',
    children: [
    { label: 'child3' }
    ]
    }
    ];
    
    */
    public function getAction()
    {
        $this->disableRender = true;
        $query = new K_Db_Query();
        $treeStructure = array();
        $treeElements = array();
        if ($this->getParam('pid')) {
            $nodeId = $this->getParam('pid');
        } else {
            $nodeId = 0;
        }
        // Прийдётся лезть в тип списка
        $pidType = K_TreeQuery::gOne((int) $nodeId);
        //var_dump($pidType);
        if ($pidType['sorted'] == "По алфавиту") {
            $order = "`t1`.`tree_title`";
        } else {
            $order = "`t1`.`tree_lkey`";
        }
        $sql = 'SELECT `t1`.*, COUNT(`t2`.`tree_id`) as subElements FROM `tree` as `t1` 
				LEFT JOIN `tree` as `t2` ON `t2`.`tree_pid` = `t1`.`tree_id`
				WHERE `t1`.`tree_pid`=' . (int) $nodeId . '
				GROUP BY `t1`.`tree_id`, `t1`.`tree_pid`, `t1`.`tree_title`
				ORDER BY ' . $order;
        $treeElements = $query->q($sql);
        foreach ($treeElements as $key => $column) {
            $treeElements[$key] = $column->toArray();
        }
        if ($nodeId != '0') {
            $nodeArr = K_tree::getParents($nodeId);
            // выбираем всех родителей ноды
            $nodeArr[] = $nodeId;
            // добовляем id самой ноды
            // проверяем на доступ ноду со всеми её родителями к которой запрашиваються потомки
            /* foreach ( $pid_node_perents as $v ) {
			if ( is_string( $v ) ) {
			$resourse_arr[] = $v;
			$resourse = 't:' . implode( '/', $resourse_arr );
			// echo $resourse;
			try {
			$access = K_Access::acl()->isAllowed( K_Auth::getRoles(), $resourse, 'view' );
			// var_dump($access);
			}
			catch ( exception $e ) {
			$access = $allow_trigger;
			}
			$allow_trigger = $access;
			}
			}*/
            //строим ресур запрашиваемой ноды если нода не равна 0
            $allowTrigger = false;
            $access = false;
            $_nodeArr = $nodeArr;
            for ($i = count($_nodeArr); $i > 0; $i--) {
                $resourse = implode('/', $_nodeArr);
                array_pop($_nodeArr);
                $access = K_Access::aclTree()->isAllowed(K_Auth::getRoles(), $resourse, true);
                if (K_Access::aclTree()->lastResource) {
                    break;
                }
            }
            $allowTrigger = $access;