function DisplayMainDocuments() { global $AVE_DB, $AVE_Template; $doc_start = array(); $sql = $AVE_DB->Query("\n\t\tSELECT \n\t\t\tdoc.*,\n\t\t\trub.rubric_admin_teaser_template\n\t\tFROM " . PREFIX . "_documents doc\n\t\tLEFT JOIN " . PREFIX . "_rubrics AS rub ON rub.Id = doc.rubric_id\n\t\tORDER BY doc.document_published DESC LIMIT 0,10"); while ($row = $sql->fetchrow()) { $row->rubric_title = showrubricName($row->rubric_id); $row->document_author = get_username_by_id($row->document_author_id); // Получаем имя пользователя (Автора) $row->cantEdit = 0; $row->canDelete = 0; $row->canEndDel = 0; $row->canOpenClose = 0; $row->rubric_admin_teaser_template = @eval2var('?>' . ($row->rubric_admin_teaser_template > '' ? @showrequestelement($row, $row->rubric_admin_teaser_template) : '') . '<?'); // разрешаем редактирование и удаление // если автор имеет право изменять свои документы в рубрике // или пользователю разрешено изменять все документы в рубрике if ($row->document_author_id == @$_SESSION['user_id'] && isset($_SESSION[$row->rubric_id . '_editown']) && @$_SESSION[$row->rubric_id . '_editown'] == 1 || isset($_SESSION[$row->rubric_id . '_editall']) && $_SESSION[$row->rubric_id . '_editall'] == 1) { $row->cantEdit = 1; $row->canDelete = 1; } // запрещаем редактирование главной страницы и страницу ошибки 404 если требуется одобрение Администратора if (($row->Id == 1 || $row->Id == PAGE_NOT_FOUND_ID) && isset($_SESSION[$row->rubric_id . '_newnow']) && @$_SESSION[$row->rubric_id . '_newnow'] != 1) { $row->cantEdit = 0; } // разрешаем автору блокировать и разблокировать свои документы если не требуется одобрение Администратора if ($row->document_author_id == @$_SESSION['user_id'] && isset($_SESSION[$row->rubric_id . '_newnow']) && @$_SESSION[$row->rubric_id . '_newnow'] == 1) { $row->canOpenClose = 1; } // разрешаем всё, если пользователь принадлежит группе Администраторов или имеет все права на рубрику if (UGROUP == 1 || @$_SESSION[$row->rubric_id . '_alles'] == 1) { $row->cantEdit = 1; $row->canDelete = 1; $row->canEndDel = 1; $row->canOpenClose = 1; } // Запрещаем удаление Главной страницы и страницы с 404 ошибкой if ($row->Id == 1 || $row->Id == PAGE_NOT_FOUND_ID) { $row->canDelete = 0; $row->canEndDel = 0; } array_push($doc_start, $row); } $AVE_Template->assign('doc_start', $doc_start); }
/** * Обработка тега запроса. * Возвращает список документов удовлетворяющих параметрам запроса * оформленный с использованием шаблона * * @param int $id идентификатор запроса * @return string */ function request_parse($id, $params = array()) { global $AVE_Core, $AVE_DB, $request_documents; //Доберусь - надо сделать фишку чтобы если афтар не активен или удален то документы его в реквесте не выводятся //по идее это бы надстройкой к рекесту сделать чтобы новости не побить и т.д. $gen_time = microtime(); $return = ''; if (is_array($id)) { $id = $id[1]; } $row_ab = $AVE_DB->Query("\n\t\tSELECT *\n\t\tFROM " . PREFIX . "_request\n\t\tWHERE Id = '" . $id . "'\n\t")->FetchRow(); if (is_object($row_ab)) { $ttl = (int) $row_ab->request_cache_lifetime; $limit = isset($params['LIMIT']) && intval($params['LIMIT']) > 0 ? intval($params['LIMIT']) : ($row_ab->request_items_per_page > 0 ? $row_ab->request_items_per_page : 0); $main_template = $row_ab->request_template_main; $item_template = $row_ab->request_template_item; $request_order_by = $row_ab->request_order_by; $request_asc_desc = $row_ab->request_asc_desc; //строим списки подключаемых полей для сортировки $request_order = $request_order_by . " " . $request_asc_desc; $request_order_fields = ''; $request_order_tables = ''; $request_order1 = ''; if ($row_ab->request_order_by_nat) { $request_order_tables = "LEFT JOIN " . PREFIX . "_document_fields AS s" . $row_ab->request_order_by_nat . "\n\t\t\t ON (s" . $row_ab->request_order_by_nat . ".document_id = a.Id and s" . $row_ab->request_order_by_nat . ".rubric_field_id=" . $row_ab->request_order_by_nat . ")"; $request_order_fields = "s" . $row_ab->request_order_by_nat . ".field_value, "; $request_order = "s" . $row_ab->request_order_by_nat . ".field_value " . $row_ab->request_asc_desc; } $x = 0; if (!empty($params['SORT']) && is_array($params['SORT'])) { foreach ($params['SORT'] as $k => $v) { if (intval($k) > 0) { $x++; $request_order_tables .= "LEFT JOIN " . PREFIX . "_document_fields AS s" . $k . "\n\t\t\t\t\t\tON (s" . $k . ".document_id = a.Id and s" . $k . ".rubric_field_id=" . $k . ")"; if (strpos($v, 'INT') === false) { $request_order_fields .= "s" . $k . ".field_value, "; } else { $request_order_fields .= "s" . $k . ".field_number_value, "; $v = str_replace('INT', '', $v); } $request_order1 .= $x . ' ' . $v . ', '; } } } /* ----------- */ $request_order = addslashes($request_order1 . $request_order); $request_order2 = ''; /* ----------- */ //Этот кусок для того чтобы можно было параметрами попросить произвольный статус досумента //- например в личном кабинете попросить архивные документы $docstatus = "AND a.document_status != '0'"; $docstatus = "AND a.document_status = '1'"; if (isset($params['STATUS'])) { $docstatus = "AND a.document_status = '" . intval($params['STATUS']) . "'"; } $doctime = get_settings('use_doctime') ? "AND a.document_published <= UNIX_TIMESTAMP() AND\n \t\t \t(a.document_expire = 0 OR a.document_expire >=UNIX_TIMESTAMP())" : ''; $where_cond = empty($_POST['req_' . $id]) && empty($_SESSION['doc_' . $AVE_Core->curentdoc->Id]['req_' . $id]) ? unserialize($row_ab->request_where_cond) : unserialize(request_get_condition_sql_string($row_ab->Id)); $where_cond['from'] = str_replace('%%PREFIX%%', PREFIX, $where_cond['from']); @($where_cond['where'] = str_replace('%%PREFIX%%', PREFIX, $where_cond['where'])); $whFromUser = (isset($params['USER_ID']) && intval($params['USER_ID']) > 0 ? ' AND a.document_author_id=' . intval($params['USER_ID']) : '') . (isset($params['USER_WHERE']) && $params['USER_WHERE'] > '' ? ' AND ' . $params['USER_WHERE'] : '') . (isset($params['PARENT']) && intval($params['PARENT']) > 0 ? ' AND a.document_parent=' . intval($params['PARENT']) : ''); $other_fields = ''; $other_tables = ''; $other_fields .= $request_order_fields; $other_tables .= $request_order_tables; if (isset($params['VIEWS'])) { $other_fields .= "(SELECT sum(v1.`count`) FROM " . PREFIX . "_view_count AS v1 WHERE v1.document_id=a.Id AND v1.day_id>" . strtotime($params['VIEWS'] ? $params['VIEWS'] : '-30 years') . ") AS dayviews,\n\t\t\t\t"; if ($params['VIEWS_ORDER'] > '') { $request_order1 = count(explode(',', $other_fields)) - 1 . ' ' . $params['VIEWS_ORDER'] . ','; } } if (isset($params['VOTE'])) { $other_fields .= "(SELECT " . $params['VOTE'] . "(v2.`vote`) FROM " . PREFIX . "_module_vote AS v2 WHERE type_of_doc='document' and v2.document_id=a.Id) AS votes,\n\t\t\t\t"; if ($params['VOTE_ORDER'] > '') { $request_order2 = count(explode(',', $other_fields)) - 1 . ' ' . $params['VOTE_ORDER']; } } if (!empty($AVE_Core->install_modules['comment']->ModuleStatus)) { $other_tables .= "\n\t\t\t\t\tLEFT JOIN\n\t\t\t\t\t\t" . PREFIX . "_module_comment_info AS b\n\t\t\t\t\t\t\tON b.document_id = a.Id " . (!empty($params['COMMENT']) ? " and b.comment_published>" . strtotime($params['COMMENT']) : '') . "\n\t\t\t\t\t"; $other_fields .= "COUNT(b.document_id) AS nums,\n\t\t\t\t"; if (!empty($params['COMMENT_ORDER'])) { $request_order1 = count(explode(',', $other_fields)) - 1 . ' ' . $params['COMMENT_ORDER'] . ','; } } $request_order = addslashes($request_order1 . ($request_order2 > '' ? $request_order1 ? $request_order2 . ',' : $request_order2 : '') . $request_order); $num = $AVE_DB->Query(eval2var(" ?>\n\t\t\tSELECT COUNT(*)\n\t\t\tFROM\n\t\t\t" . ($where_cond['from'] ? $where_cond['from'] : '') . "\n\t\t\t" . PREFIX . "_documents AS a\n\t\t\tWHERE\n\t\t\t\ta.Id != '1'\n\t\t\tAND a.Id != '" . PAGE_NOT_FOUND_ID . "'\n\t\t\tAND a.rubric_id = '" . $row_ab->rubric_id . "'\n\t\t\tAND a.document_deleted != '1'\n\t\t\t" . $docstatus . "\n\t\t\t" . $whFromUser . "\n\t\t\t" . $where_cond['where'] . "\n\t\t\t" . ($row_ab->request_lang ? "AND a.document_lang='" . $_SESSION['user_language'] . "'" : "") . "\n\t\t\t" . $doctime . "\n\t\t<?php "), $ttl, 'rub_' . $row_ab->rubric_id)->GetCell(); if ($row_ab->request_show_pagination == 1) { $num_pages = $limit > 0 ? ceil($num / $limit) : 0; @($GLOBALS['page_id'][$_REQUEST['id']]['apage'] = @$GLOBALS['page_id'][$_REQUEST['id']]['apage'] > $num_pages ? $GLOBALS['page_id'][$_REQUEST['id']]['apage'] : $num_pages); if (isset($_REQUEST['apage']) && is_numeric($_REQUEST['apage']) && $_REQUEST['apage'] > $num_pages) { $redirect_link = rewrite_link('index.php?id=' . $AVE_Core->curentdoc->Id . '&doc=' . (empty($AVE_Core->curentdoc->document_alias) ? prepare_url($AVE_Core->curentdoc->document_title) : $AVE_Core->curentdoc->document_alias) . (isset($_REQUEST['artpage']) && is_numeric($_REQUEST['artpage']) ? '&artpage=' . $_REQUEST['artpage'] : '') . (isset($_REQUEST['page']) && is_numeric($_REQUEST['page']) ? '&page=' . $_REQUEST['page'] : '')); header('Location:' . $redirect_link); exit; } $start = get_current_page('apage') * $limit - $limit; } else { $start = 0; } $q = " ?>\n\t\t\tSELECT\n\t\t\t\t" . $other_fields . "\n\t\t\t\ta.Id,\n\t\t\t\ta.document_parent,\n\t\t\t\ta.document_title,\n\t\t\t\ta.document_alias,\n\t\t\t\ta.document_author_id,\n\t\t\t\ta.document_count_view,\n\t\t\t\ta.document_published,\n\t\t\t\ta.document_meta_keywords\n\t\t\tFROM\n\t\t\t\t" . ($where_cond['from'] ? $where_cond['from'] : '') . "\n\t\t\t\t" . PREFIX . "_documents AS a\n\t\t\t" . ($other_tables > '' ? $other_tables : '') . "\n\t\t\tWHERE\n\t\t\t\ta.Id != '1'\n\t\t\tAND a.Id != '" . PAGE_NOT_FOUND_ID . "'\n\t\t\tAND a.rubric_id = '" . $row_ab->rubric_id . "'\n\t\t\tAND a.document_deleted != '1'\n\t\t\t" . ($row_ab->request_lang ? "AND a.document_lang='" . $_SESSION['user_language'] . "'" : "") . "\n\t\t\t" . $whFromUser . "\n\t\t\t" . $docstatus . "\n\t\t\t" . $where_cond['where'] . "\n\t\t\t" . $doctime . "\n\t\t\tGROUP BY a.Id\n\t\t\tORDER BY " . $request_order . "\n\t\t\t" . ($limit > 0 ? "LIMIT " . $start . "," . $limit : '') . " <?php "; $q = eval2var($q); $q = $AVE_DB->Query($q, $ttl, 'rub_' . $row_ab->rubric_id); if ($q->NumRows() > 0) { $main_template = preg_replace('/\\[tag:if_empty](.*?)\\[\\/tag:if_empty]/si', '', $main_template); $main_template = str_replace(array('[tag:if_notempty]', '[/tag:if_notempty]'), '', $main_template); } else { $main_template = preg_replace('/\\[tag:if_notempty](.*?)\\[\\/tag:if_notempty]/si', '', $main_template); $main_template = str_replace(array('[tag:if_empty]', '[/tag:if_empty]'), '', $main_template); } $page_nav = ''; if ($row_ab->request_show_pagination == 1 && $num_pages > 1) { $page_nav = ' <a class="pnav" href="index.php?id=' . $AVE_Core->curentdoc->Id . '&doc=' . (empty($AVE_Core->curentdoc->document_alias) ? prepare_url($AVE_Core->curentdoc->document_title) : $AVE_Core->curentdoc->document_alias) . (isset($_REQUEST['artpage']) && is_numeric($_REQUEST['artpage']) ? '&artpage=' . $_REQUEST['artpage'] : '') . '&apage={s}' . (isset($_REQUEST['page']) && is_numeric($_REQUEST['page']) ? '&page=' . $_REQUEST['page'] : '') . '">{t}</a> '; $page_nav = get_pagination($num_pages, 'apage', $page_nav, get_settings('navi_box')); //$page_nav = rewrite_link($page_nav); // Костыль $page_nav = str_ireplace('"//"', '"/"', str_ireplace('///', '/', rewrite_link($page_nav))); } $rows = array(); $request_documents = array(); while ($row = $q->FetchRow()) { array_push($request_documents, $row->Id); array_push($rows, $row); } $items = ''; $x = 0; $items_count = count($rows); foreach ($rows as $row) { $x++; $item = showrequestelement($row, $item_template, $x, $x == $items_count ? true : false); $items .= $item; } // $items = preg_replace_callback('/\[tag:teaser:(\d+)\]/', "showteaser", $items); $main_template = preg_replace_callback('/\\[tag:sysblock:([0-9-]+)\\]/', 'parse_sysblock', $main_template); $main_template = str_replace('[tag:pages]', $page_nav, $main_template); $main_template = preg_replace('/\\[tag:date:([a-zA-Z0-9-]+)\\]/e', "RusDate(date('\$1', " . $AVE_Core->curentdoc->document_published . "))", $main_template); $main_template = str_replace('[tag:docid]', $AVE_Core->curentdoc->Id, $main_template); $main_template = str_replace('[tag:docdate]', pretty_date(strftime(DATE_FORMAT, $AVE_Core->curentdoc->document_published)), $main_template); $main_template = str_replace('[tag:doctime]', pretty_date(strftime(TIME_FORMAT, $AVE_Core->curentdoc->document_published)), $main_template); $main_template = str_replace('[tag:docauthor]', get_username_by_id($AVE_Core->curentdoc->document_author_id), $main_template); $main_template = str_replace('[tag:doctotal]', $num, $main_template); $main_template = str_replace('[tag:pagetitle]', $AVE_Core->curentdoc->document_title, $main_template); $main_template = preg_replace('/\\[tag:dropdown:([,0-9]+)\\]/e', "request_get_dropdown(\"\$1\", " . $row_ab->rubric_id . ", " . $row_ab->Id . ");", $main_template); $return = str_replace('[tag:content]', $items, $main_template); // парсим тизер документа //$return = preg_replace_callback('/\[tag:teaser:(\d+)\]/e', "showteaser", $return); $return = str_replace('[tag:path]', ABS_PATH, $return); $return = str_replace('[tag:mediapath]', ABS_PATH . 'templates/' . THEME_FOLDER . '/', $return); $return = $AVE_Core->coreModuleTagParse($return); } $gen_time = microtime() - $gen_time; $GLOBALS['block_generate'][] = array('REQUEST_' . $id => $gen_time); return $return; }
/** * Метод, предназначенный для получения списка документов в Панели управления * */ function documentListGet() { global $AVE_DB, $AVE_Rubric, $AVE_Template; $ex_titel = ''; $nav_titel = ''; $ex_zeit = ''; $nav_zeit = ''; $request = ''; $ex_rub = ''; $nav_rub = ''; $ex_docstatus = ''; $navi_docstatus = ''; // Если в запросе пришел параметр на поиск документа по названию if (!empty($_REQUEST['QueryTitel'])) { $request = $_REQUEST['QueryTitel']; $kette = explode(' ', $request); // Получаем список слов, разделяя по пробелу (если их несколько) // Циклически обрабатываем слова, формируя условия, которые будут применены в запросе к БД foreach ($kette as $suche) { $und = @explode(' +', $suche); foreach ($und as $und_wort) { if (strpos($und_wort, '+') !== false) { $ex_titel .= " AND ((UPPER(doc.document_title) LIKE '%" . mb_strtoupper(substr($und_wort, 1)) . "%')OR(UPPER(doc.document_alias) LIKE '%" . mb_strtoupper(substr($und_wort, 1)) . "%'))"; } } $und_nicht = @explode(' -', $suche); foreach ($und_nicht as $und_nicht_wort) { if (strpos($und_nicht_wort, '-') !== false) { $ex_titel .= " AND (UPPER(doc.document_title) NOT LIKE '%" . mb_strtoupper($und_nicht_wort, 1) . "%')"; } } $start = explode(' +', $request); if (strpos($start[0], ' -') !== false) { $start = explode(' -', $request); } $start = $start[0]; } $ex_titel = "AND ((UPPER(doc.document_title) LIKE '%" . mb_strtoupper($start) . "%')OR(UPPER(doc.document_alias) LIKE '%" . mb_strtoupper($start) . "%'))" . $ex_titel; $nav_titel = '&QueryTitel=' . urlencode($request); } // Если в запросе пришел id определенной рубрики if (isset($_REQUEST['rubric_id']) && $_REQUEST['rubric_id'] != 'all') { // Формируем условия, которые будут применены в запросе к БД $ex_rub = " AND doc.rubric_id = '" . $_REQUEST['rubric_id'] . "'"; // формируем условия, которые будут применены в ссылках $nav_rub = '&rubric_id=' . (int) $_REQUEST['rubric_id']; } // Поиск с учётом условий настроек рубрик if (!isset($_REQUEST['rubric_id']) && empty($_REQUEST['QueryTitel'])) { // Формируем условия, которые будут применены в запросе к БД $ex_rub = " AND rub.rubric_docs_active = '1'"; // формируем условия для бд $ex_db = "LEFT JOIN " . PREFIX . "_rubrics as rub on rub.Id = rubric_id"; } // Поиск с выводом всех результатов из всех рубрик if (@$_REQUEST['rubric_id'] == 'all') { $nav_rub = '&rubric_id=all'; } // Если в запросе пришел параметр на фильтрацию документов по определенному временному интервалу if (@$_REQUEST['document_published'] && @$_REQUEST['document_expire']) { // Формируем условия, которые будут применены в запросе к БД $ex_zeit = 'AND ((doc.document_published BETWEEN ' . $this->_documentListStart() . ' AND ' . $this->_documentListEnd() . ') OR doc.document_published = 0)'; // формируем условия, которые будут применены в ссылках $nav_zeit = '&TimeSelect=1' . '&document_published=' . $_REQUEST['document_published'] . '&document_expire=' . $_REQUEST['document_expire']; } // Если в запросе пришел параметр на фильтрацию документов по статусу if (!empty($_REQUEST['status'])) { // Определяем, какой статус запрашивается и формируем условия, которые будут применены в запросе к БД, // а также в ссылках, для дальнейшей навигации switch ($_REQUEST['status']) { // С любым статусом case '': case 'All': break; // Только опубликованные // Только опубликованные case 'Opened': $ex_docstatus = "AND doc.document_status = '1'"; $navi_docstatus = '&status=Opened'; break; // Только неопубликованные // Только неопубликованные case 'Closed': $ex_docstatus = "AND doc.document_status = '0'"; $navi_docstatus = '&status=Closed'; break; // Помеченные на удаление // Помеченные на удаление case 'Deleted': $ex_docstatus = "AND doc.document_deleted = '1'"; $navi_docstatus = '&status=Deleted'; break; } } // Определяем группу пользоваеля и id документа, если он присутствует в запросе $ex_Geloescht = UGROUP != 1 ? "AND doc.document_deleted != '1'" : ''; $w_id = !empty($_REQUEST['doc_id']) ? " AND doc.Id = '" . $_REQUEST['doc_id'] . "'" : ''; // Выполняем запрос к БД на получение количества документов соответствующих вышеопределенным условиям $num = $AVE_DB->Query("\n\t\t\tSELECT COUNT(doc.Id)\n\t\t\tFROM " . PREFIX . "_documents as doc\n\t\t\t" . @$ex_db . "\n\t\t\tWHERE 1\n\t\t\t" . $ex_Geloescht . "\n\t\t\t" . $ex_zeit . "\n\t\t\t" . $ex_titel . "\n\t\t\t" . $ex_rub . "\n\t\t\t" . $ex_docstatus . "\n\t\t\t" . $w_id . "\n\t\t")->GetCell(); // Определяем лимит документов, который будет показан на 1 странице $limit = isset($_REQUEST['Datalimit']) && is_numeric($_REQUEST['Datalimit']) && $_REQUEST['Datalimit'] > 0 ? $_REQUEST['Datalimit'] : ($limit = $this->_limit); $nav_limit = '&Datalimit=' . $limit; // Определяем количество страниц, которые будут сформированы на основании количества полученных документов $seiten = ceil($num / $limit); $start = get_current_page() * $limit - $limit; $db_sort = 'ORDER BY doc.Id DESC'; $navi_sort = '&sort=id_desc'; // Если в запросе используется параметр сортировки if (!empty($_REQUEST['sort'])) { // Определяем, по какому параметру происходит сортировка switch ($_REQUEST['sort']) { // По id документа, по возрастанию case 'id': $db_sort = 'ORDER BY doc.Id ASC'; $navi_sort = '&sort=id'; break; // По id документа, по убыванию // По id документа, по убыванию case 'id_desc': $db_sort = 'ORDER BY doc.Id DESC'; $navi_sort = '&sort=id_desc'; break; // По названию документа, в алфавитном порядке // По названию документа, в алфавитном порядке case 'title': $db_sort = 'ORDER BY doc.document_title ASC'; $navi_sort = '&sort=title'; break; // По названию документа, в обратном алфавитном порядке // По названию документа, в обратном алфавитном порядке case 'title_desc': $db_sort = 'ORDER BY doc.document_title DESC'; $navi_sort = '&sort=title_desc'; break; // По url-адресу, в алфавитном порядке // По url-адресу, в алфавитном порядке case 'alias': $db_sort = 'ORDER BY doc.document_alias ASC'; $navi_sort = '&sort=alias'; break; // По url-адресу, в обратном алфавитном порядке // По url-адресу, в обратном алфавитном порядке case 'alias_desc': $db_sort = 'ORDER BY doc.document_alias DESC'; $navi_sort = '&sort=alias_desc'; break; // По id рубрики, по возрастанию // По id рубрики, по возрастанию case 'rubric': $db_sort = 'ORDER BY doc.rubric_id ASC'; $navi_sort = '&sort=rubric'; break; // По id рубрики, по убыванию // По id рубрики, по убыванию case 'rubric_desc': $db_sort = 'ORDER BY doc.rubric_id DESC'; $navi_sort = '&sort=rubric_desc'; break; // По дате публикации, по возрастанию // По дате публикации, по возрастанию case 'published': $db_sort = 'ORDER BY doc.document_published ASC'; $navi_sort = '&sort=published'; break; // По дате публикации, по убыванию // По дате публикации, по убыванию case 'published_desc': $db_sort = 'ORDER BY doc.document_published DESC'; $navi_sort = '&sort=published_desc'; break; // По количеству просмотров, по возрастанию // По количеству просмотров, по возрастанию case 'view': $db_sort = 'ORDER BY doc.document_count_view ASC'; $navi_sort = '&sort=view'; break; // По количеству просмотров, по убыванию // По количеству просмотров, по убыванию case 'view_desc': $db_sort = 'ORDER BY doc.document_count_view DESC'; $navi_sort = '&sort=view_desc'; break; // По количеству печати документа, по возрастанию // По количеству печати документа, по возрастанию case 'print': $db_sort = 'ORDER BY doc.document_count_print ASC'; $navi_sort = '&sort=print'; break; // По количеству печати документа, по убыванию // По количеству печати документа, по убыванию case 'print_desc': $db_sort = 'ORDER BY doc.document_count_print DESC'; $navi_sort = '&sort=print_desc'; break; // По автору, по алфавитному возрастанию // По автору, по алфавитному возрастанию case 'author': $db_sort = 'ORDER BY doc.document_author_id ASC'; $navi_sort = '&sort=author'; break; // По автору, по алфавитному убыванию // По автору, по алфавитному убыванию case 'author_desc': $db_sort = 'ORDER BY doc.document_author_id DESC'; $navi_sort = '&sort=author_desc'; break; // По дате последнего редактирования, по возрастанию // По дате последнего редактирования, по возрастанию case 'changed': $db_sort = 'ORDER BY doc.document_changed ASC'; $navi_sort = '&sort=changed'; break; // По дате последнего редактирования, по убыванию // По дате последнего редактирования, по убыванию case 'changed_desc': $db_sort = 'ORDER BY doc.document_changed DESC'; $navi_sort = '&sort=changed_desc'; break; // По умолчанию, по дате последнего редактирования по убыванию. // Последний отредактированный документ, будет первым в списке. // По умолчанию, по дате последнего редактирования по убыванию. // Последний отредактированный документ, будет первым в списке. default: $db_sort = 'ORDER BY doc.document_changed DESC'; $navi_sort = '&sort=changed_desc'; break; } } $docs = array(); // Выполняем запрос к БД на получение уже не количества документов, отвечающих условиям, а уже на // получение всех данных, с учетом всех условий, а также типа сортировки и лимита для вывода на // одну страницу. $sql = "\n\t\t\tSELECT \n\t\t\t\tdoc.*,\n\t\t\t\trub.rubric_admin_teaser_template\n\t\t\tFROM " . PREFIX . "_documents as doc\n\t\t\tLEFT JOIN " . PREFIX . "_rubrics AS rub ON rub.Id = doc.rubric_id\n\n\t\t\tWHERE 1\n\t\t\t" . $ex_rub . "\n\t\t\t" . $ex_Geloescht . "\n\t\t\t" . $ex_zeit . "\n\t\t\t" . $ex_titel . "\n\t\t\t" . $ex_docstatus . "\n\t\t\t" . $w_id . "\n\t\t\t" . $db_sort . "\n\t\t\tLIMIT " . $start . "," . $limit . "\n\t\t"; $sql = $AVE_DB->Query($sql); // Циклически обрабатываем полученные данные с целью приведения некоторых из них к удобочитаемому виду while ($row = $sql->FetchRow()) { // Определяем количество комментариев, оставленных для данного документа $row->ist_remark = $AVE_DB->Query("\n\t\t\t\tSELECT COUNT(*)\n\t\t\t\tFROM " . PREFIX . "_document_remarks\n\t\t\t\tWHERE document_id = '" . $row->Id . "'\n\t\t\t")->GetCell(); $this->documentPermissionFetch($row->rubric_id); // Получаем название рубрики по ее Id $row->RubName = $AVE_Rubric->rubricNameByIdGet($row->rubric_id)->rubric_title; $row->document_author = get_username_by_id($row->document_author_id); // Получаем имя пользователя (Автора) $row->cantEdit = 0; $row->canDelete = 0; $row->canEndDel = 0; $row->canOpenClose = 0; $row->rubric_admin_teaser_template = @eval2var('?>' . ($row->rubric_admin_teaser_template > '' ? @showrequestelement($row, $row->rubric_admin_teaser_template) : '') . '<?'); // разрешаем редактирование и удаление // если автор имеет право изменять свои документы в рубрике // или пользователю разрешено изменять все документы в рубрике if ($row->document_author_id == @$_SESSION['user_id'] && isset($_SESSION[$row->rubric_id . '_editown']) && @$_SESSION[$row->rubric_id . '_editown'] == 1 || isset($_SESSION[$row->rubric_id . '_editall']) && $_SESSION[$row->rubric_id . '_editall'] == 1) { $row->cantEdit = 1; $row->canDelete = 1; } // запрещаем редактирование главной страницы и страницу ошибки 404 если требуется одобрение Администратора if (($row->Id == 1 || $row->Id == PAGE_NOT_FOUND_ID) && isset($_SESSION[$row->rubric_id . '_newnow']) && @$_SESSION[$row->rubric_id . '_newnow'] != 1) { $row->cantEdit = 0; } // разрешаем автору блокировать и разблокировать свои документы если не требуется одобрение Администратора if ($row->document_author_id == @$_SESSION['user_id'] && isset($_SESSION[$row->rubric_id . '_newnow']) && @$_SESSION[$row->rubric_id . '_newnow'] == 1) { $row->canOpenClose = 1; } // разрешаем всё, если пользователь принадлежит группе Администраторов или имеет все права на рубрику if (UGROUP == 1 || @$_SESSION[$row->rubric_id . '_alles'] == 1) { $row->cantEdit = 1; $row->canDelete = 1; $row->canEndDel = 1; $row->canOpenClose = 1; } // Запрещаем удаление Главной страницы и страницы с 404 ошибкой if ($row->Id == 1 || $row->Id == PAGE_NOT_FOUND_ID) { $row->canDelete = 0; $row->canEndDel = 0; } array_push($docs, $row); } // Передаем полученные данные в шаблон для вывода $AVE_Template->assign('docs', $docs); $link = "index.php?do=docs"; $link .= isset($_REQUEST['action']) && $_REQUEST['action'] == 'showsimple' ? '&action=showsimple' : ''; $link .= !empty($_REQUEST['target']) ? '&target=' . urlencode($_REQUEST['target']) : ''; $link .= !empty($_REQUEST['doc']) ? '&doc=' . urlencode($_REQUEST['doc']) : ''; $link .= !empty($_REQUEST['document_alias']) ? '&document_alias=' . urlencode($_REQUEST['document_alias']) : ''; $link .= !empty($_REQUEST['navi_item_target']) ? '&navi_item_target=' . urlencode($_REQUEST['navi_item_target']) : ''; $link .= $navi_docstatus; $link .= $nav_titel; $link .= $nav_rub; $link .= $nav_zeit; $link .= $nav_limit; $link .= isset($_REQUEST['selurl']) && $_REQUEST['selurl'] == 1 ? '&selurl=1' : ''; $link .= isset($_REQUEST['idonly']) && $_REQUEST['idonly'] == 1 ? '&idonly=1' : ''; $link .= isset($_REQUEST['pop']) && $_REQUEST['pop'] == 1 ? '&pop=1' : ''; $AVE_Template->assign('link', $link); // Если количество отобранных документов превышает лимит на одной странице - формируем постраничную навигацию if ($num > $limit) { $page_nav = get_pagination($seiten, 'page', ' <li><a href="' . $link . $navi_sort . '&page={s}&cp=' . SESSION . '">{t}</a></li> '); $AVE_Template->assign('page_nav', $page_nav); } $AVE_Template->assign('DEF_DOC_START_YEAR', mktime(0, 0, 0, date("m"), date("d"), date("Y") - 10)); $AVE_Template->assign('DEF_DOC_END_YEAR', mktime(0, 0, 0, date("m"), date("d"), date("Y") + 10)); }