/** * Метод, предназанченный для сборки всей страницы в единое целое. * * @param int $id идентификатор документа * @param int $rub_id идентификатор рубрики */ function coreSiteFetch($id, $rub_id = '') { global $AVE_DB; // Если происходит вызов модуля, получаем соответствующие мета-теги и получаем шаблон модуля if (!empty($_REQUEST['module'])) { $out = $this->_coreModuleMetatagsFetch(); $out = $this->_coreDocumentTemplateGet('', '', $this->_coreModuleTemplateGet()); } else { if (!isset($this->curentdoc->Id) && !$this->_coreCurrentDocumentFetch($id, UGROUP)) { // Определяем документ с 404 ошиюкой, в случае, если документ не найден if ($this->_corePageNotFoundFetch(PAGE_NOT_FOUND_ID, UGROUP)) { $_REQUEST['id'] = $_GET['id'] = $id = PAGE_NOT_FOUND_ID; } } // проверяем параметры публикации документа if (!$this->_coreDocumentIsPublished()) { $this->_coreErrorPage404(); } // Определяем права доступа к документам рубрики define('RUB_ID', !empty($rub_id) ? $rub_id : $this->curentdoc->rubric_id); $this->_coreRubricPermissionFetch(RUB_ID); if (!(isset($_SESSION[RUB_ID . '_docread']) && $_SESSION[RUB_ID . '_docread'] == 1 || isset($_SESSION[RUB_ID . '_alles']) && $_SESSION[RUB_ID . '_alles'] == 1)) { // читать запрещено - извлекаем ругательство и отдаём вместо контента $main_content = get_settings('message_forbidden'); } else { if (isset($_REQUEST['print']) && $_REQUEST['print'] == 1) { // увеличиваем счетчик версий для печати $AVE_DB->Query("\n\t\t\t\t\t\tUPDATE " . PREFIX . "_documents\n\t\t\t\t\t\tSET document_count_print = document_count_print+1\n\t\t\t\t\t\tWHERE Id = '" . $id . "'\n\t\t\t\t\t"); } else { if (!isset($_SESSION['doc_view'][$id])) { // увеличиваем счетчик просмотров (1 раз в пределах сессии) $AVE_DB->Query("\n\t\t\t\t\t\t\tUPDATE " . PREFIX . "_documents\n\t\t\t\t\t\t\tSET document_count_view = document_count_view+1\n\t\t\t\t\t\t\tWHERE Id = '" . $id . "'\n\t\t\t\t\t\t"); $_SESSION['doc_view'][$id] = time(); } $curdate = mktime(0, 0, 0, date("m"), date("d"), date("Y")); if (!isset($_SESSION['doc_view_dayly[' . $curdate . '][' . $id . ']'])) { // и подневный счетчик просмотров тоже увеличиваем $curdate = mktime(0, 0, 0, date("m"), date("d"), date("Y")); $AVE_DB->Query("\n UPDATE\n " . PREFIX . "_view_count\n SET\n count = count + 1\n WHERE\n document_id = '" . $id . "' AND\n day_id = '" . $curdate . "'\n "); if (!$AVE_DB->_handle->affected_rows) { $AVE_DB->Query("\n INSERT INTO " . PREFIX . "_view_count (\n document_id,\n day_id,\n count\n )\n VALUES (\n '" . $id . "', '" . $curdate . "', '1'\n )\n "); } $_SESSION['doc_view_dayly[' . $curdate . '][' . $id . ']'] = time(); } } if (CACHE_DOC_TPL && empty($_POST) && !(isset($_SESSION['user_adminmode']) && $_SESSION['user_adminmode'] == 1)) { // кэширование разрешено // извлекаем скомпилированный шаблон документа из кэша $main_content = $AVE_DB->Query("\n\t\t\t\t\t\tSELECT compiled\n\t\t\t\t\t\tFROM " . PREFIX . "_rubric_template_cache\n\t\t\t\t\t\tWHERE hash = '" . $this->_get_cache_hash() . "'\n\t\t\t\t\t\tLIMIT 1\n\t\t\t\t\t")->GetCell(); } else { // кэширование запрещено $main_content = false; } if (empty($main_content)) { // кэш пустой или отключен, извлекаем и компилируем шаблон if (!empty($this->curentdoc->rubric_template)) { $rubTmpl = $this->curentdoc->rubric_template; } else { $rubTmpl = $AVE_DB->Query("\n\t\t\t\t\t\t\tSELECT rubric_template\n\t\t\t\t\t\t\tFROM " . PREFIX . "_rubrics\n\t\t\t\t\t\t\tWHERE Id = '" . RUB_ID . "'\n\t\t\t\t\t\t\tLIMIT 1\n\t\t\t\t\t\t")->GetCell(); } $rubTmpl = trim($rubTmpl); if (empty($rubTmpl)) { // не задан шаблон рубрики $main_content = $this->_rubric_template_empty; } else { // парсим теги полей в шаблоне документа $main_content = preg_replace_callback('/\\[tag:fld:([a-zA-Z0-9-_]+)\\]/', 'document_get_field', $rubTmpl); $main_content = preg_replace_callback('/\\[tag:([r|c|f|t]\\d+x\\d+r*):(.+?)]/', 'callback_make_thumbnail', $main_content); // удаляем ошибочные теги полей $main_content = preg_replace('/\\[tag:fld:\\d*\\]/', '', $main_content); if (CACHE_DOC_TPL && empty($_POST) && !(isset($_SESSION['user_adminmode']) && $_SESSION['user_adminmode'] == 1)) { // кэширование разрешено // сохраняем скомпилированный шаблон в кэш $AVE_DB->Query("\n\t\t\t\t\t\t\t\tINSERT " . PREFIX . "_rubric_template_cache\n\t\t\t\t\t\t\t\tSET\n\t\t\t\t\t\t\t\t\thash = '" . $this->_get_cache_hash() . "',\n\t\t\t\t\t\t\t\t\trub_id = '" . RUB_ID . "',\n\t\t\t\t\t\t\t\t\tgrp_id = '" . UGROUP . "',\n\t\t\t\t\t\t\t\t\tdoc_id = '" . $id . "',\n\t\t\t\t\t\t\t\t\tcompiled = '" . addslashes($main_content) . "'\n\t\t\t\t\t\t\t"); } } } $main_content = preg_replace('/\\[tag:date:([a-zA-Z0-9-]+)\\]/e', "RusDate(date('\$1', " . $this->curentdoc->document_published . "))", $main_content); $main_content = str_replace('[tag:docdate]', pretty_date(strftime(DATE_FORMAT, $this->curentdoc->document_published)), $main_content); $main_content = str_replace('[tag:doctime]', pretty_date(strftime(TIME_FORMAT, $this->curentdoc->document_published)), $main_content); $main_content = str_replace('[tag:docauthorid]', $this->curentdoc->document_author_id, $main_content); $main_content = str_replace('[tag:docauthor]', get_username_by_id($this->curentdoc->document_author_id), $main_content); } $out = str_replace('[tag:maincontent]', $main_content, $this->_coreDocumentTemplateGet(RUB_ID)); } // /вывод документа //Работа с условиями /* $out = preg_replace('/\[tag:if_exp:?(.*)\]/u', '<?php $my_exp000=true; $my_exp0001=\'$my_exp000=\'. str_replace(\'#var#\',\'$\',<<<BLOCK $1; BLOCK ); @eval($my_exp0001); if($my_exp000==true) { ?>', $out); $out = str_replace('[tag:if_exp_else]', '<?php }else{ ?>', $out); $out = str_replace('[tag:/if_exp]', '<?php } ?>', $out); */ // Тут мы вводим в хеадер иньекцию скриптов. if (defined('RUB_ID')) { $rubheader = $AVE_DB->Query("\n\t\t\t\t\t\t\tSELECT rubric_header_template\n\t\t\t\t\t\t\tFROM " . PREFIX . "_rubrics\n\t\t\t\t\t\t\tWHERE Id = '" . RUB_ID . "'\n\t\t\t\t\t\t\tLIMIT 1\n\t\t\t\t\t\t", CACHE_LIFETIME)->GetCell(); $out = str_replace('[tag:rubheader]', $rubheader . '[tag:rubheader]', $out); } $out = preg_replace('/\\[tag:rfld:([a-zA-Z0-9-_]+)]\\[(more|esc|img|[0-9-]+)]/e', "request_get_document_field(\"\$1\", {$id}, \"\$2\")", $out); // Если в запросе пришел параметр print, т.е. страница для печати, парсим контент, который обрамлен // тегами только для печати if (isset($_REQUEST['print']) && $_REQUEST['print'] == 1) { $out = str_replace(array('[tag:if_print]', '[/tag:if_print]'), '', $out); $out = preg_replace('/\\[tag:if_notprint\\](.*?)\\[\\/tag:if_notprint\\]/si', '', $out); } else { // В противном случае наоборот, парсим только тот контент, который предназначен НЕ для печати $out = preg_replace('/\\[tag:if_print\\](.*?)\\[\\/tag:if_print\\]/si', '', $out); $out = str_replace(array('[tag:if_notprint]', '[/tag:if_notprint]'), '', $out); } // получаем из шаблона системный тег, определяющий название темы дизайна $match = ''; preg_match('/\\[tag:theme:(\\w+)]/', $out, $match); define('THEME_FOLDER', empty($match[1]) ? DEFAULT_THEME_FOLDER : $match[1]); $out = preg_replace('/\\[tag:theme:(.*?)]/', '', $out); // парсим теги модулей $out = $this->coreModuleTagParse($out); if (isset($_REQUEST['module']) && !(isset($this->install_modules[$_REQUEST['module']]) && '1' == $this->install_modules[$_REQUEST['module']]->ModuleStatus)) { display_notice($this->_module_error); } // парсим теги системных блоков $out = preg_replace_callback('/\\[tag:sysblock:([0-9-]+)\\]/', 'parse_sysblock', $out); // парсим теги системы внутренних запросов $out = preg_replace_callback('/\\[tag:request:(\\d+)\\]/', 'request_parse', $out); // парсим теги навигации $out = preg_replace_callback('/\\[tag:navigation:(\\d+):?([0-9,]*)\\]/', 'parse_navigation', $out); // парсим теги скрытого текста $out = parse_hide($out); // парсим остальные теги основного шаблона $search = array('[tag:mediapath]', '[tag:path]', '[tag:sitename]', '[tag:document]', '[tag:alias]', '[tag:home]', '[tag:robots]', '[tag:canonical]', '[tag:docid]', '[tag:breadcrumb]'); $replace = array(ABS_PATH . 'templates/' . THEME_FOLDER . '/', ABS_PATH, htmlspecialchars(get_settings('site_name'), ENT_QUOTES), get_redirect_link('print'), @$this->curentdoc->document_alias, get_home_link(), isset($this->curentdoc->document_meta_robots) ? $this->curentdoc->document_meta_robots : '', canonical($_SERVER['REQUEST_URI']), isset($this->curentdoc->Id) ? $this->curentdoc->Id : '', get_breadcrumb()); if (defined('MODULE_CONTENT')) { // парсинг тегов при выводе из модуля $search[] = '[tag:maincontent]'; $replace[] = MODULE_CONTENT; $search[] = '[tag:title]'; $replace[] = htmlspecialchars(defined('MODULE_SITE') ? MODULE_SITE : '', ENT_QUOTES); $search[] = '[tag:description]'; $replace[] = htmlspecialchars(defined('MODULE_DESCRIPTION') ? MODULE_DESCRIPTION : '', ENT_QUOTES); $search[] = '[tag:keywords]'; $replace[] = htmlspecialchars(defined('MODULE_KEYWORDS') ? MODULE_KEYWORDS : '', ENT_QUOTES); } else { $search[] = '[tag:keywords]'; $replace[] = isset($this->curentdoc->document_meta_keywords) ? htmlspecialchars($this->curentdoc->document_meta_keywords, ENT_QUOTES) : ''; $search[] = '[tag:description]'; $replace[] = isset($this->curentdoc->document_meta_description) ? htmlspecialchars($this->curentdoc->document_meta_description, ENT_QUOTES) : ''; $search[] = '[tag:title]'; $replace[] = htmlspecialchars(pretty_chars($this->curentdoc->document_title), ENT_QUOTES); } $search[] = '[tag:maincontent]'; $replace[] = ''; $search[] = '[tag:printlink]'; $replace[] = get_print_link(); $search[] = '[tag:version]'; $replace[] = APP_INFO; $search[] = '[tag:docviews]'; $replace[] = isset($this->curentdoc->document_count_view) ? $this->curentdoc->document_count_view : ''; // парсим тизер документа $out = preg_replace('/\\[tag:teaser:(\\d+)\\]/e', "showteaser(\$1)", $out); if (defined('RUB_ID')) { $out = preg_replace('/\\[tag:docauthoravatar:(\\d+)\\]/e', "getAvatar(" . intval($this->curentdoc->document_author_id) . ",\"\$1\")", $out); } if (defined('RUB_ID')) { $out = preg_replace('/\\[tag:lang:([a-zA-Z0-9-_]+)\\]/', '<?php if($AVE_Core->curentdoc->document_lang=="$1") { ?>', $out); } else { $out = preg_replace('/\\[tag:lang:([a-zA-Z0-9-_]+)\\]/', '<?php if($_SESSION["user_language"]=="$1") { ?>', $out); } $out = str_replace('[tag:/lang]', '<?php } ?>', $out); // парсим остальные теги основного шаблона $out = str_replace($search, $replace, $out); unset($search, $replace); // парсим теги для combine.php $out = preg_replace_callback('/\\[tag:(css|js):([^ :\\/]+):?(\\S+)*\\]/', array($this, '_parse_combine'), $out); // ЧПУ $out = rewrite_link($out); echo $out; }
/** * Метод, предназанченный для сборки всей страницы в единое целое. * * @param int $id идентификатор документа * @param int $rub_id идентификатор рубрики */ function coreSiteFetch($id, $rub_id = '') { global $AVE_DB; // Если происходит вызов модуля, получаем соответствующие мета-теги и получаем шаблон модуля if (!empty($_REQUEST['module'])) { $out = $this->_coreModuleMetatagsFetch(); $out = $this->_coreDocumentTemplateGet('', '', $this->_coreModuleTemplateGet()); } else { if (!isset($this->curentdoc->Id) && !$this->_coreCurrentDocumentFetch($id, UGROUP)) { // Определяем документ с 404 ошиюкой, в случае, если документ не найден if ($this->_corePageNotFoundFetch(PAGE_NOT_FOUND_ID, UGROUP)) { $_REQUEST['id'] = $_GET['id'] = $id = PAGE_NOT_FOUND_ID; } } // проверяем параметры публикации документа if (!$this->_coreDocumentIsPublished()) { $this->_coreErrorPage404(); } // Определяем права доступа к документам рубрики define('RUB_ID', !empty($rub_id) ? $rub_id : $this->curentdoc->rubric_id); $this->_coreRubricPermissionFetch(RUB_ID); if (!(isset($_SESSION[RUB_ID . '_docread']) && $_SESSION[RUB_ID . '_docread'] == 1 || isset($_SESSION[RUB_ID . '_alles']) && $_SESSION[RUB_ID . '_alles'] == 1)) { // читать запрещено - извлекаем ругательство и отдаём вместо контента $main_content = get_settings('message_forbidden'); } else { if (isset($_REQUEST['print']) && $_REQUEST['print'] == 1) { // увеличиваем счетчик версий для печати $AVE_DB->Query("\r\n\t\t\t\t\t\tUPDATE " . PREFIX . "_documents\r\n\t\t\t\t\t\tSET document_count_print = document_count_print+1\r\n\t\t\t\t\t\tWHERE Id = '" . $id . "'\r\n\t\t\t\t\t"); } else { if (!isset($_SESSION['doc_view[' . $id . ']'])) { // увеличиваем счетчик просмотров (1 раз в пределах сессии) $AVE_DB->Query("\r\n\t\t\t\t\t\t\tUPDATE " . PREFIX . "_documents\r\n\t\t\t\t\t\t\tSET document_count_view = document_count_view+1\r\n\t\t\t\t\t\t\tWHERE Id = '" . $id . "'\r\n\t\t\t\t\t\t"); $_SESSION['doc_view[' . $id . ']'] = 1; } } if (CACHE_DOC_TPL && empty($_POST) && !(isset($_SESSION['user_adminmode']) && $_SESSION['user_adminmode'] == 1)) { // кэширование разрешено // извлекаем скомпилированный шаблон документа из кэша $main_content = $AVE_DB->Query("\r\n\t\t\t\t\t\tSELECT compiled\r\n\t\t\t\t\t\tFROM " . PREFIX . "_rubric_template_cache\r\n\t\t\t\t\t\tWHERE hash = '" . $this->_get_cache_hash() . "'\r\n\t\t\t\t\t\tLIMIT 1\r\n\t\t\t\t\t")->GetCell(); } else { // кэширование запрещено $main_content = false; } if (empty($main_content)) { // кэш пустой или отключен, извлекаем и компилируем шаблон if (!empty($this->curentdoc->rubric_template)) { $rubTmpl = $this->curentdoc->rubric_template; } else { $rubTmpl = $AVE_DB->Query("\r\n\t\t\t\t\t\t\tSELECT rubric_template\r\n\t\t\t\t\t\t\tFROM " . PREFIX . "_rubrics\r\n\t\t\t\t\t\t\tWHERE Id = '" . RUB_ID . "'\r\n\t\t\t\t\t\t\tLIMIT 1\r\n\t\t\t\t\t\t")->GetCell(); } $rubTmpl = trim($rubTmpl); if (empty($rubTmpl)) { // не задан шаблон рубрики $main_content = $this->_rubric_template_empty; } else { // парсим теги полей в шаблоне документа $main_content = preg_replace_callback('/\\[tag:fld:(\\d+)\\]/', 'document_get_field', $rubTmpl); // удаляем ошибочные теги полей $main_content = preg_replace('/\\[tag:fld:\\d*\\]/', '', $main_content); if (CACHE_DOC_TPL && empty($_POST) && !(isset($_SESSION['user_adminmode']) && $_SESSION['user_adminmode'] == 1)) { // кэширование разрешено // сохраняем скомпилированный шаблон в кэш $AVE_DB->Query("\r\n\t\t\t\t\t\t\t\tINSERT " . PREFIX . "_rubric_template_cache\r\n\t\t\t\t\t\t\t\tSET\r\n\t\t\t\t\t\t\t\t\thash = '" . $this->_get_cache_hash() . "',\r\n\t\t\t\t\t\t\t\t\trub_id = '" . RUB_ID . "',\r\n\t\t\t\t\t\t\t\t\tgrp_id = '" . UGROUP . "',\r\n\t\t\t\t\t\t\t\t\tdoc_id = '" . $id . "',\r\n\t\t\t\t\t\t\t\t\tcompiled = '" . addslashes($main_content) . "'\r\n\t\t\t\t\t\t\t"); } } } $main_content = str_replace('[tag:docdate]', pretty_date(strftime(DATE_FORMAT, $this->curentdoc->document_published)), $main_content); $main_content = str_replace('[tag:doctime]', pretty_date(strftime(TIME_FORMAT, $this->curentdoc->document_published)), $main_content); $main_content = str_replace('[tag:docauthor]', get_username_by_id($this->curentdoc->document_author_id), $main_content); } $out = str_replace('[tag:maincontent]', $main_content, $this->_coreDocumentTemplateGet(RUB_ID)); } // /вывод документа // Если в запросе пришел параметр print, т.е. страница для печати, парсим контент, который обрамлен // тегами только для печати if (isset($_REQUEST['print']) && $_REQUEST['print'] == 1) { $out = str_replace(array('[tag:if_print]', '[/tag:if_print]'), '', $out); $out = preg_replace('/\\[tag:if_notprint\\](.*?)\\[\\/tag:if_notprint\\]/si', '', $out); } else { // В противном случае наоборот, парсим только тот контент, который предназначен НЕ для печати $out = preg_replace('/\\[tag:if_print\\](.*?)\\[\\/tag:if_print\\]/si', '', $out); $out = str_replace(array('[tag:if_notprint]', '[/tag:if_notprint]'), '', $out); } // получаем из шаблона системный тег, определяющий название темы дизайна $match = ''; preg_match('/\\[tag:theme:(\\w+)]/', $out, $match); define('THEME_FOLDER', empty($match[1]) ? DEFAULT_THEME_FOLDER : $match[1]); $out = preg_replace('/\\[tag:theme:(.*?)]/', '', $out); // парсим теги модулей $out = $this->coreModuleTagParse($out); if (isset($_REQUEST['module']) && !(isset($this->install_modules[$_REQUEST['module']]) && '1' == $this->install_modules[$_REQUEST['module']]->Status)) { display_notice($this->_module_error); } // парсим теги системы внутренних запросов $out = preg_replace_callback('/\\[tag:request:(\\d+)\\]/', 'request_parse', $out); // парсим теги скрытого текста $out = parse_hide($out); // парсим остальные теги основного шаблона $search = array('[tag:mediapath]', '[tag:path]', '[tag:sitename]', '[tag:document]', '[tag:home]', '[tag:robots]', '[tag:docid]', '[tag:breadcrumb]'); $replace = array(ABS_PATH . 'templates/' . THEME_FOLDER . '/', ABS_PATH, htmlspecialchars(get_settings('site_name'), ENT_QUOTES), get_redirect_link('print'), get_home_link(), isset($this->curentdoc->document_meta_robots) ? $this->curentdoc->document_meta_robots : '', isset($this->curentdoc->Id) ? $this->curentdoc->Id : '', get_breadcrumb()); if (defined('MODULE_CONTENT')) { // парсинг тегов при выводе из модуля $search[] = '[tag:maincontent]'; $replace[] = MODULE_CONTENT; $search[] = '[tag:title]'; $replace[] = htmlspecialchars(defined('MODULE_SITE') ? MODULE_SITE : '', ENT_QUOTES); $search[] = '[tag:description]'; $replace[] = htmlspecialchars(defined('MODULE_DESCRIPTION') ? MODULE_DESCRIPTION : '', ENT_QUOTES); $search[] = '[tag:keywords]'; $replace[] = htmlspecialchars(defined('MODULE_KEYWORDS') ? MODULE_KEYWORDS : '', ENT_QUOTES); } else { $search[] = '[tag:keywords]'; $replace[] = isset($this->curentdoc->document_meta_keywords) ? htmlspecialchars($this->curentdoc->document_meta_keywords, ENT_QUOTES) : ''; $search[] = '[tag:description]'; $replace[] = isset($this->curentdoc->document_meta_description) ? htmlspecialchars($this->curentdoc->document_meta_description, ENT_QUOTES) : ''; $search[] = '[tag:title]'; $replace[] = htmlspecialchars(pretty_chars($this->curentdoc->document_title), ENT_QUOTES); } $search[] = '[tag:maincontent]'; $replace[] = ''; $search[] = '[tag:printlink]'; $replace[] = get_print_link(); $search[] = '[tag:version]'; $replace[] = APP_INFO; $search[] = '[tag:docviews]'; $replace[] = isset($this->curentdoc->document_count_view) ? $this->curentdoc->document_count_view : ''; $out = str_replace($search, $replace, $out); unset($search, $replace); // /парсим остальные теги основного шаблона // ЧПУ $out = rewrite_link($out); echo $out; }