예제 #1
0
파일: modul.php 프로젝트: laiello/avecms
/**
 * Функция обработки тега модуля
 *
 * @param int $navigation_id - идентификатор меню навигации
 */
function mod_navigation($navigation_id)
{
    global $AVE_DB, $AVE_Core;
    static $navigations = array();
    $navigation_id = preg_replace('/\\D/', '', $navigation_id);
    if (isset($navigations[$navigation_id])) {
        echo $navigations[$navigation_id];
        return;
    }
    $nav = get_navigations($navigation_id);
    if (!$nav) {
        echo 'Menu ', $navigation_id, ' not found';
        return;
    }
    if (!defined('UGROUP')) {
        define('UGROUP', 2);
    }
    if (!in_array(UGROUP, $nav->navi_user_group)) {
        return;
    }
    if (empty($_REQUEST['module'])) {
        $curent_doc_id = isset($_GET['id']) && is_numeric($_GET['id']) ? $_GET['id'] : 1;
        $row_navi = $AVE_DB->Query("\r\n\t\t\tSELECT CONCAT_WS(',', nav.Id, nav.parent_id, nav2.parent_id)\r\n\t\t\tFROM\r\n\t\t\t\t" . PREFIX . "_navigation_items AS nav\r\n\t\t\tJOIN\r\n\t\t\t\t" . PREFIX . "_documents AS doc\r\n\t\t\tLEFT JOIN\r\n\t\t\t\t" . PREFIX . "_navigation_items AS nav2 ON nav2.Id = nav.parent_id\r\n\t\t\tWHERE nav.navi_item_status = 1\r\n\t\t\tAND nav.navi_id = '" . $navigation_id . "'\r\n\t\t\tAND doc.Id = '" . $curent_doc_id . "'\r\n\t\t\tAND (nav.navi_item_link = 'index.php?id=" . $curent_doc_id . "'" . (!empty($AVE_Core->curentdoc->document_alias) && $AVE_Core->curentdoc->Id == $curent_doc_id ? " OR nav.document_alias = '" . $AVE_Core->curentdoc->document_alias . "'" : '') . " OR nav.Id = doc.document_linked_navi_id)\r\n\t\t")->GetCell();
    } else {
        $row_navi = $AVE_DB->Query("\r\n\t\t\tSELECT CONCAT_WS(',', nav.Id, nav.parent_id, nav2.parent_id)\r\n\t\t\tFROM\r\n\t\t\t\t" . PREFIX . "_navigation_items AS nav\r\n\t\t\tLEFT JOIN\r\n\t\t\t\t" . PREFIX . "_navigation_items AS nav2 ON nav2.Id = nav.parent_id\r\n\t\t\tWHERE nav.navi_item_status = '1'\r\n\t\t\tAND nav.navi_id = '" . $navigation_id . "'\r\n\t\t\tAND nav.navi_item_link LIKE 'index.php?module=" . $_REQUEST['module'] . "%%'\r\n\t\t")->GetCell();
    }
    $where_elter = '';
    if ($row_navi !== false) {
        $way = explode(',', $row_navi);
        if ($nav->navi_expand != 1) {
            $where_elter = "AND parent_id IN(0," . $row_navi . ")";
        }
    } else {
        $way = array('');
        if ($nav->navi_expand != 1) {
            $where_elter = "AND parent_id = 0";
        }
    }
    $nav_items = array();
    $sql = $AVE_DB->Query("\r\n\t\tSELECT *\r\n\t\tFROM " . PREFIX . "_navigation_items\r\n\t\tWHERE navi_item_status = '1'\r\n\t\tAND navi_id = '" . $navigation_id . "'\r\n\t\t" . $where_elter . "\r\n\t\tORDER BY navi_item_position ASC\r\n\t");
    while ($row_nav_item = $sql->FetchAssocArray()) {
        $nav_items[$row_nav_item['parent_id']][] = $row_nav_item;
    }
    $ebenen = array(1 => array('aktiv' => str_replace('[tag:mediapath]', ABS_PATH . 'templates/' . THEME_FOLDER . '/', $nav->navi_level1active), 'inaktiv' => str_replace('[tag:mediapath]', ABS_PATH . 'templates/' . THEME_FOLDER . '/', $nav->navi_level1)), 2 => array('aktiv' => str_replace('[tag:mediapath]', ABS_PATH . 'templates/' . THEME_FOLDER . '/', $nav->navi_level2active), 'inaktiv' => str_replace('[tag:mediapath]', ABS_PATH . 'templates/' . THEME_FOLDER . '/', $nav->navi_level2)), 3 => array('aktiv' => str_replace('[tag:mediapath]', ABS_PATH . 'templates/' . THEME_FOLDER . '/', $nav->navi_level3active), 'inaktiv' => str_replace('[tag:mediapath]', ABS_PATH . 'templates/' . THEME_FOLDER . '/', $nav->navi_level3)));
    $END = str_replace('[tag:mediapath]', ABS_PATH . 'templates/' . THEME_FOLDER . '/', $nav->navi_begin);
    printNavi($END, $ebenen, $way, $navigation_id, $nav_items, $nav);
    $END .= str_replace('[tag:mediapath]', ABS_PATH . 'templates/' . THEME_FOLDER . '/', $nav->navi_end);
    $END = rewrite_link($END);
    $END = preg_replace("/(^[\r\n]*|[\r\n]+)[\\s\t]*[\r\n]+/", "\n", $END);
    //	$END = str_replace(array("\r\n","\n","\r"),'',$END);
    $END = str_replace(array("\n", "\r"), '', $END);
    $search = array($nav->navi_level1begin . $nav->navi_level1end, $nav->navi_level2begin . $nav->navi_level2end, $nav->navi_level3begin . $nav->navi_level3end, '</li>' . $nav->navi_level2begin . '<li', '</li>' . $nav->navi_level3begin . '<li', '</li>' . $nav->navi_level1end . '<li', '</li>' . $nav->navi_level2end . '<li', '</li>' . $nav->navi_level1end . $nav->navi_level2end . '<li', '</li>' . $nav->navi_level1end . $nav->navi_level2end . $nav->navi_level3end, '</li>' . $nav->navi_level1end . $nav->navi_level2end, '</li>' . $nav->navi_level2end . $nav->navi_level3end);
    $replace = array('', '', '', $nav->navi_level2begin . '<li', $nav->navi_level3begin . '<li', '</li>' . $nav->navi_level1end . '</li><li', '</li>' . $nav->navi_level2end . '</li><li', '</li>' . $nav->navi_level1end . '</li>' . $nav->navi_level2end . '</li><li', '</li>' . $nav->navi_level1end . '</li>' . $nav->navi_level2end . '</li>' . $nav->navi_level3end, '</li>' . $nav->navi_level1end . '</li>' . $nav->navi_level2end, '</li>' . $nav->navi_level2end . '</li>' . $nav->navi_level3end);
    $END = str_replace($search, $replace, $END);
    $navigations[$navigation_id] = $END;
    echo $END;
}
예제 #2
0
파일: modul.php 프로젝트: laiello/avecms
function mod_quickfinder($navi_ids = '')
{
    global $AVE_DB, $AVE_Core, $navigations;
    if (!empty($navi_ids)) {
        $sql = array();
        $navi_ids = explode(',', $navi_ids);
        foreach ($navi_ids as $navi_id) {
            if (is_numeric($navi_id) && check_navi_permission($navi_id)) {
                $sql[] = "(\r\n\t\t\t\t\t\t\tSELECT\r\n\t\t\t\t\t\t\t\tId,\r\n\t\t\t\t\t\t\t\tparent_id,\r\n\t\t\t\t\t\t\t\ttitle,\r\n\t\t\t\t\t\t\t\tnavi_item_link,\r\n\t\t\t\t\t\t\t\tnavi_item_target,\r\n\t\t\t\t\t\t\t\tnavi_item_level,\r\n\t\t\t\t\t\t\t\tdocument_alias,\r\n\t\t\t\t\t\t\t\t0 AS active\r\n\t\t\t\t\t\t\tFROM " . PREFIX . "_navigation_items\r\n\t\t\t\t\t\t\tWHERE navi_item_status = '1'\r\n\t\t\t\t\t\t\tAND navi_id = " . $navi_id . "\r\n\t\t\t\t\t\t\tORDER BY navi_item_position ASC\r\n\t\t\t\t\t\t)";
            }
        }
        $sql = implode(' UNION ', $sql);
        if (empty($sql)) {
            return;
        }
    } else {
        $navigations = get_navigations();
        if (empty($navigations)) {
            return;
        }
        $navi_in = array();
        foreach ($navigations as $navigation) {
            if (in_array(UGROUP, $navigation->navi_user_group)) {
                array_push($navi_in, $navigation->id);
            }
        }
        if (sizeof($navi_in)) {
            $sql = "\r\n\t\t\t\tSELECT\r\n\t\t\t\t\tId,\r\n\t\t\t\t\tparent_id,\r\n\t\t\t\t\ttitle,\r\n\t\t\t\t\tnavi_item_link,\r\n\t\t\t\t\tnavi_item_target,\r\n\t\t\t\t\tnavi_item_level,\r\n\t\t\t\t\tdocument_alias,\r\n\t\t\t\t\t0 AS active\r\n\t\t\t\tFROM " . PREFIX . "_navigation_items\r\n\t\t\t\tWHERE navi_item_status = '1'\r\n\t\t\t\tAND navi_id IN(" . implode(',', $navi_in) . ")\r\n\t\t\t\tORDER BY navi_id ASC, navi_item_position ASC\r\n\t\t\t";
        } else {
            return;
        }
    }
    $nav_items = array();
    $sql = $AVE_DB->Query($sql);
    while ($row_nav_item = $sql->FetchAssocArray()) {
        if (empty($_REQUEST['module'])) {
            $curent_doc_id = isset($_GET['id']) && is_numeric($_GET['id']) ? $_GET['id'] : 1;
            if ($row_nav_item['document_alias'] == $AVE_Core->curentdoc->document_alias || $row_nav_item['navi_item_link'] == 'index.php?id=' . $curent_doc_id) {
                $row_nav_item['active'] = 1;
            }
        } else {
            if ($row_nav_item['navi_item_link'] == 'index.php?module=' . $_REQUEST['module']) {
                $row_nav_item['active'] = 1;
            }
        }
        $nav_items[$row_nav_item['parent_id']][] = $row_nav_item;
    }
    if (sizeof($nav_items)) {
        $quickfinder = '<select class="mod_quickfinder" name="quickfinder" onchange="eval(this.options[this.selectedIndex].value);">';
        $quickfinder .= '<option></option>';
        printQuickfinder($nav_items, $quickfinder);
        echo $quickfinder . '</select>';
    }
}
예제 #3
0
파일: modul.php 프로젝트: laiello/avecms
/**
 * Функция вывода карты сайта
 *
 * @param int $navi_ids - идентификатор меню навигации
 * или нескольких меню указанных через запятую
 * для формирования карты сайта.
 * Если идентификатор не указан используются все меню
 */
function mod_sitemap($navi_ids = '')
{
    global $AVE_DB;
    if (!empty($navi_ids)) {
        $sql = array();
        $navi_ids = explode(',', $navi_ids);
        foreach ($navi_ids as $navi_id) {
            if (is_numeric($navi_id) && check_navi_permission($navi_id)) {
                array_push($sql, "(\r\n\t\t\t\t\t\tSELECT *\r\n\t\t\t\t\t\tFROM " . PREFIX . "_navigation_items\r\n\t\t\t\t\t\tWHERE navi_item_status = '1'\r\n\t\t\t\t\t\tAND navi_id = " . $navi_id . "\r\n\t\t\t\t\t\tORDER BY navi_item_position ASC\r\n\t\t\t\t\t)");
            }
        }
        $sql = implode(' UNION ', $sql);
        if (empty($sql)) {
            return;
        }
    } else {
        $navigations = get_navigations();
        if (empty($navigations)) {
            return;
        }
        $navi_in = array();
        foreach ($navigations as $navigation) {
            if (in_array(UGROUP, $navigation->navi_user_group)) {
                array_push($navi_in, $navigation->id);
            }
        }
        if (sizeof($navi_in)) {
            $sql = "\r\n\t\t\t\tSELECT *\r\n\t\t\t\tFROM " . PREFIX . "_navigation_items\r\n\t\t\t\tWHERE navi_item_status = '1'\r\n\t\t\t\tAND navi_id IN(" . implode(',', $navi_in) . ")\r\n\t\t\t\tORDER BY navi_id ASC, navi_item_position ASC\r\n\t\t\t";
        } else {
            return;
        }
    }
    $nav_items = array();
    $sql = $AVE_DB->Query($sql);
    while ($row_nav_item = $sql->FetchAssocArray()) {
        $nav_items[$row_nav_item['parent_id']][] = $row_nav_item;
    }
    $sitemap = '';
    if (sizeof($nav_items)) {
        printSitemap($nav_items, $sitemap);
    }
    echo $sitemap;
}
예제 #4
0
/**
 * Функция обработки навигации
 *
 * @param int $navi_id - идентификатор меню навигации
 */
function parse_navigation($navi_tag)
{
    global $AVE_DB, $AVE_Core;
    $gen_time = microtime();
    // извлекаем id из аргумента
    $navi_id = (int) $navi_tag[1];
    // извлекаем level из аргумента
    $navi_print_level = $navi_tag[2];
    // получаем меню навигации по id,
    // и если такой не существует, выводим сообщение
    $navi_menu = get_navigations($navi_id);
    if (!$navi_menu) {
        echo 'Menu ', $navi_id, ' not found!';
        return;
    }
    // выставляем гостевую группу по дефолту
    if (!defined('UGROUP')) {
        define('UGROUP', 2);
    }
    // выходим, если навиг. не предназначена для текущей группы
    if (!in_array(UGROUP, $navi_menu->navi_user_group)) {
        return;
    }
    // Находим активный пункт (связь текущего открытого документа и навигации). Нас интересуют:
    //		1) документы, которые сами связаны с пунктом меню
    //		2) пункты навигации, у которых ссылка совпадает с алиасом дока
    //		3) текущий level, текущий id
    // возвращаем в $navi_active через запятую id пунктов:
    //		1) активный пункт
    //		2) родители активного пункта
    // после ; через запятую все level-ы текущего пути, чтобы потом взять max
    // после ; id текущего пункта
    // если текущая страница не модуль, а документ
    //	if (!$_REQUEST['module'])
    //	{
    // id текущего документа. Если не задан, то главная страница
    $doc_active_id = (int) ($_GET['id'] ? $_GET['id'] : 1);
    // запрос для выборки по текущему алиасу
    $sql_doc_active_alias = $AVE_Core->curentdoc->document_alias && $AVE_Core->curentdoc->Id == $doc_active_id ? " OR nav.document_alias = '" . $AVE_Core->curentdoc->document_alias . "'" : '';
    $navi_active = $AVE_DB->Query("\r\n\t\t\tSELECT CONCAT_WS(\r\n\t\t\t\t\t';',\r\n\t\t\t\t\tCONCAT_WS(',', nav.Id, nav.parent_id, nav2.parent_id),\r\n\t\t\t\t\tCONCAT_WS(',', nav.navi_item_level),\r\n\t\t\t\t\tnav.Id\r\n\t\t\t\t)\r\n\t\t\tFROM\r\n\t\t\t\t" . PREFIX . "_navigation_items AS nav\r\n\t\t\tJOIN\r\n\t\t\t\t" . PREFIX . "_documents AS doc\r\n\t\t\tLEFT JOIN\r\n\t\t\t\t" . PREFIX . "_navigation_items AS nav2 ON nav2.Id = nav.parent_id\r\n\t\t\tWHERE nav.navi_item_status = 1\r\n\t\t\t\tAND nav.navi_id = " . $navi_id . "\r\n\t\t\t\tAND doc.Id = " . $doc_active_id . "\r\n\t\t\t\tAND (\r\n\t\t\t\t\tnav.navi_item_link = 'index.php?id=" . $doc_active_id . "'" . $sql_doc_active_alias . "\r\n\t\t\t\t\tOR nav.Id = doc.document_linked_navi_id\r\n\t\t\t\t)\r\n\t\t")->GetCell();
    $navi_active = explode(';', $navi_active);
    // готовим 2 переменные с путём
    if ($navi_active[0]) {
        $navi_active_way = explode(',', $navi_active[0]);
    }
    $navi_active_way[] = '0';
    $navi_active_way_str = implode(',', $navi_active_way);
    // текущий уровень
    $navi_active_level = (int) max(explode(',', $navi_active[1])) + 1;
    // текущий id
    $navi_active_id = (int) $navi_active[2];
    //	}
    /*	// если текущая страница - модуль (логин, магазин и т.д.)
    	else
    	{
    		@$extended_by_module = "(nav.navi_item_link LIKE '%%" . $refurl2 . "%%')";
    		@$extended_by_module2 = "(nav.document_alias LIKE '%%" . $refurl2 . "%%')";
    
    		$navi_active_way = $AVE_DB->Query("
    			SELECT CONCAT_WS(',',nav.Id, nav.parent_id, nav2.parent_id)
    			FROM
    				" . PREFIX . "_navigation_items AS nav
    			LEFT JOIN
    				" . PREFIX . "_navigation_items AS nav2 ON nav2.Id = nav.parent_id
    			WHERE nav.navi_item_status = '1'
    			AND nav.navi_id = '" . $navi_id . "'
    		")->GetCell();
    
    		if(empty($navi_active_way))
    		{
    			$navi_active_way = $AVE_DB->Query("
    				SELECT CONCAT_WS(',',nav.parent_id, nav2.parent_id)
    				FROM
    					" . PREFIX . "_navigation_items AS nav
    				LEFT JOIN
    					" . PREFIX . "_navigation_items AS nav2 ON nav2.Id = nav.parent_id
    				WHERE nav.navi_item_status = '1'
    				AND nav.navi_id = '" . $navi_id . "'
    				AND $extended_by_module2
    			")->GetCell();
    		}
    	}*/
    // если просят вывести какие-то конкретные уровни:
    $sql_navi_level = '';
    $sql_navi_active = '';
    if ($navi_print_level) {
        $sql_navi_level = ' AND navi_item_level IN (' . $navi_print_level . ') ';
        $sql_navi_active = ' AND parent_id IN(' . $navi_active_way_str . ') ';
    } else {
        switch ($navi_menu->navi_expand_ext) {
            // все уровни
            case 1:
                $navi_parent = 0;
                break;
                // текущий и родительский уровни
            // текущий и родительский уровни
            case 0:
                $sql_navi_active = ' AND parent_id IN(' . $navi_active_way_str . ') ';
                $navi_parent = 0;
                break;
                // только текущий уровень
            // только текущий уровень
            case 2:
                $sql_navi_level = ' AND navi_item_level = ' . $navi_active_level . ' ';
                $navi_parent = $navi_active_id;
                break;
        }
    }
    // запрос пунктов меню
    $sql_navi_items = $AVE_DB->Query("\r\n\t\tSELECT *\r\n\t\tFROM " . PREFIX . "_navigation_items\r\n\t\tWHERE navi_item_status = '1'\r\n\t\tAND navi_id = '" . $navi_id . "'" . $sql_navi_level . $sql_navi_active . "\r\n\t\tORDER BY navi_item_position ASC\r\n\t");
    $navi_items = array();
    while ($row_navi_items = $sql_navi_items->FetchAssocArray()) {
        $navi_items[$row_navi_items['parent_id']][] = $row_navi_items;
    }
    if ($navi_print_level) {
        $keys = array_keys($navi_items);
        $navi_parent = $keys[0];
    }
    // Парсим теги в шаблонах пунктов
    $navi_item_tpl = array(1 => array('inactive' => $navi_menu->navi_level1, 'active' => $navi_menu->navi_level1active), 2 => array('inactive' => $navi_menu->navi_level2, 'active' => $navi_menu->navi_level2active), 3 => array('inactive' => $navi_menu->navi_level3, 'active' => $navi_menu->navi_level3active));
    // запускаем рекурсивную сборку навигации
    if ($navi_items) {
        $navi = printNavi($navi_menu, $navi_items, $navi_active_way, $navi_item_tpl, $navi_parent);
    }
    // преобразуем все ссылке в коде
    $navi = rewrite_link($navi);
    // удаляем переводы строк и табуляции
    $navi = preg_replace("/(^[\r\n]*|[\r\n]+)[\\s\t]*[\r\n]+/", "\n", $navi);
    $navi = str_replace(array("\n", "\r"), '', $navi);
    $gen_time = microtime() - $gen_time;
    $GLOBALS['block_generate'][] = array('NAVIGATION_' . $navi_id => $gen_time);
    return $navi;
}
예제 #5
0
/**
 * Проверка прав доступа к навигации по группе пользователя
 *
 * @param int $id идентификатор меню навигации
 * @return boolean
 */
function check_navi_permission($id)
{
    $navigation = get_navigations($id);
    if (empty($navigation->navi_user_group)) {
        return false;
    }
    if (!defined('UGROUP')) {
        define('UGROUP', 2);
    }
    if (!in_array(UGROUP, $navigation->navi_user_group)) {
        return false;
    }
    return true;
}