예제 #1
0
function get_field_docfromrubcheck($field_value, $type, $field_id = '', $rubric_field_template = '', $tpl_field_empty = 0, &$maxlength = '', $document_fields = 0, $rubric_id = 0, $dropdown = '')
{
    global $AVE_DB, $AVE_Template, $AVE_Core, $AVE_Document;
    $res = 0;
    switch ($type) {
        case 'edit':
            $sql = "SELECT Id,document_title from " . PREFIX . "_documents WHERE rubric_id='" . $dropdown . "' order by document_title";
            $field_value = unserialize($field_value);
            $res = $AVE_DB->Query($sql);
            $field = "";
            while ($row = $res->FetchRow()) {
                $field .= "<input name=\"feld[" . $field_id . "][]\" value=\"" . $row->Id . "\" type=\"checkbox\" " . (in_array($row->Id, $field_value) == false ? "" : "checked=checked") . "><label>" . htmlspecialchars($row->document_title, ENT_QUOTES) . "</label></br>";
            }
            $field .= "";
            $res = $field;
            break;
        case 'doc':
            $field_value1 = unserialize($field_value);
            if (is_array($field_value1)) {
                $res = $AVE_DB->Query("SELECT Id,document_title FROM " . PREFIX . "_documents WHERE Id IN (" . implode(', ', $field_value1) . ")");
                $result = array();
                while ($mfa = $res->FetchArray()) {
                    $result[$mfa['Id']] = $mfa['document_title'];
                }
                $res = '';
                if ($tpl_field_empty) {
                    $res .= '<ul>';
                }
                foreach ($field_value1 as $k => $v) {
                    $field_value = htmlspecialchars($v, ENT_QUOTES);
                    $field_value = pretty_chars($field_value);
                    $field_value = clean_php($field_value);
                    if (!$tpl_field_empty) {
                        $field_param = explode('|', $field_value);
                        $field_value = preg_replace('/\\[tag:parametr:(\\d+)\\]/ie', '@$field_param[\\1]', $rubric_field_template);
                    } else {
                        $field_value = "<li>" . $result[$field_value] . "</li>";
                    }
                    $res .= $field_value;
                }
                if ($tpl_field_empty) {
                    $res .= '</ul>';
                }
            }
            break;
        case 'req':
            $res = get_field_default($field_value, $type, $field_id, $rubric_field_template, $tpl_field_empty, $maxlength, $document_fields, $rubric_id);
            break;
        case 'name':
            $res = 'FIELD_DOCFROMRUB_CHECK';
            break;
    }
    return $res ? $res : $field_value;
}
예제 #2
0
             exit;
         }
     }
     break;
 case 'edit':
     if (check_permission_acp('template_edit')) {
         $_REQUEST['sub'] = !isset($_REQUEST['sub']) ? '' : $_REQUEST['sub'];
         switch ($_REQUEST['sub']) {
             case '':
                 $row = $AVE_DB->Query("\r\n\t\t\t\t\t\tSELECT *\r\n\t\t\t\t\t\tFROM " . PREFIX . "_templates\r\n\t\t\t\t\t\tWHERE Id = '" . $_REQUEST['Id'] . "'\r\n\t\t\t\t\t")->FetchRow();
                 $check_code = strtolower($row->template_text);
                 if (is_php_code($check_code) && !check_permission('template_php')) {
                     $AVE_Template->assign('php_forbidden', 1);
                     $AVE_Template->assign('read_only', 'readonly');
                 }
                 $row->template_text = pretty_chars($row->template_text);
                 $row->template_text = stripslashes($row->template_text);
                 $AVE_Template->assign('row', $row);
                 break;
             case 'save':
                 $ok = true;
                 $check_code = strtolower($_REQUEST['template_text']);
                 if (is_php_code($check_code) && !check_permission('template_php')) {
                     reportLog($_SESSION['user_name'] . ' - пытался использовать PHP кода в шаблоне (' . stripslashes($_REQUEST['template_title']) . ')', 2, 2);
                     $AVE_Template->assign('php_forbidden', 1);
                     $ok = false;
                 }
                 if (!$ok) {
                     $row->template_text = stripslashes($_REQUEST['template_text']);
                     $AVE_Template->assign('row', $row);
                 } else {
예제 #3
0
파일: modul.php 프로젝트: laiello/avecms
function printQuickfinder(&$nav_items, &$quickfinder = '', $parent = '0')
{
    foreach ($nav_items[$parent] as $row) {
        if (strpos($row['navi_item_link'], 'module=') === false && start_with('index.php?', $row['navi_item_link'])) {
            $row['navi_item_link'] .= '&amp;doc=' . (empty($row['document_alias']) ? prepare_url($row['title']) : $row['document_alias']);
        }
        if (start_with('www.', $row['navi_item_link'])) {
            $row['navi_item_link'] = str_replace('www.', 'http://www.', $row['navi_item_link']);
        }
        $row['navi_item_link'] = rewrite_link($row['navi_item_link']);
        if (!start_with('javascript:', $row['navi_item_link'])) {
            if ($row['navi_item_target'] == '_blank') {
                $row['navi_item_link'] = "javascript:window.open('" . $row['navi_item_link'] . "', '', '')";
            } else {
                $row['navi_item_link'] = "window.location.href = '" . $row['navi_item_link'] . "'";
            }
        }
        $quickfinder .= '<option class="level_' . $row['navi_item_level'] . '" value="' . $row['navi_item_link'] . '"' . ($row['active'] == 1 ? ' selected="selected"' : '') . '>' . pretty_chars($row['title']) . '</option>';
        if (isset($nav_items[$row['Id']])) {
            printQuickfinder($nav_items, $quickfinder, $row['Id']);
        }
    }
}
예제 #4
0
 /**
  * Метод, предназначенный для записи в БД нового комментария.
  *
  * @param string $tpl_dir - путь к шаблонам модуля
  *
  * @todo Вывод сообщения о результате добавления комментария, а также
  * рассмотреть вопрос о добавлении еще одного параметра настройки модуля, который будет определять
  * необходимость отправки уведомления на e-mail о новом комментарии. Возможно не всем хочется получать
  * уведомления.
  *
  */
 function commentPostNew($tpl_dir)
 {
     global $AVE_DB, $AVE_Template;
     // Если запрос пришел не ajax запросом, тогда формируем ссылку для последующего редиректа
     if (!($ajax = isset($_REQUEST['ajax']) && $_REQUEST['ajax'] == 1)) {
         $link = rewrite_link(base64_decode($_REQUEST['page']));
     }
     // Если в настройках модуля включено использование защитного кода, тогда
     if ($this->_commentSettingsGet('comment_use_antispam') == 1) {
         // Если введенный пользователем защитный код неверен, тогда выполняем обновление кода
         if (!(isset($_SESSION['captcha_keystring']) && isset($_POST['securecode']) && $_SESSION['captcha_keystring'] == $_POST['securecode'])) {
             unset($_SESSION['captcha_keystring']);
             if ($ajax) {
                 echo 'wrong_securecode';
             } else {
                 $GLOBALS['tmpl']->assign("wrongSecureCode", 1);
                 header('Location:' . $link . '#end');
             }
             exit;
         }
         unset($_SESSION['captcha_keystring']);
     }
     // Определяем флаг модерации комментариев
     $comment_status = $this->_commentSettingsGet('comment_need_approve') == 1 ? 0 : 1;
     // Если комментарии разрешены, тогда получаем все данные, который пользователь указал в форме
     if ($this->_commentSettingsGet('comment_active') == 1 && !empty($_POST['comment_text']) && !empty($_POST['comment_author_name']) && in_array(UGROUP, explode(',', $this->_commentSettingsGet('comment_user_groups')))) {
         $new_comment['parent_id'] = (int) $_POST['parent_id'];
         $new_comment['document_id'] = (int) $_POST['doc_id'];
         $new_comment['comment_author_name'] = $_POST['comment_author_name'];
         $new_comment['comment_author_id'] = empty($_SESSION['user_id']) ? '' : $_SESSION['user_id'];
         $new_comment['comment_author_email'] = $_POST['comment_author_email'];
         $new_comment['comment_author_city'] = $_POST['comment_author_city'];
         $new_comment['comment_author_website'] = $_POST['comment_author_website'];
         $new_comment['comment_author_ip'] = $_SERVER['REMOTE_ADDR'];
         $new_comment['comment_published'] = time();
         $new_comment['comment_text'] = $_POST['comment_text'];
         $new_comment['comment_status'] = $comment_status;
         // Определяем максимальную длину символов для комментария
         $comment_max_chars = $this->_commentSettingsGet('comment_max_chars');
         $comment_max_chars = !empty($comment_max_chars) && $comment_max_chars > 10 ? $comment_max_chars : 200;
         // Если длина комментария превышает максимально допустимую, обрезаем текст, до максимального значения
         $new_comment['comment_text'] = mb_substr(stripslashes($new_comment['comment_text']), 0, $comment_max_chars);
         $new_comment['comment_text'] .= mb_strlen($new_comment['comment_text']) > $comment_max_chars ? '…' : '';
         //			$new_comment['comment_text'] = htmlspecialchars($new_comment['comment_text'], ENT_QUOTES);
         $new_comment['comment_text'] = pretty_chars($new_comment['comment_text']);
         // Выполняем запрос к БД на добавление комментария
         $AVE_DB->Query("\r\n\t\t\t\tINSERT INTO " . PREFIX . "_modul_comment_info\r\n\t\t\t\t\t(" . implode(',', array_keys($new_comment)) . ")\r\n\t\t\t\tVALUES\r\n\t\t\t\t\t('" . implode("','", $new_comment) . "')\r\n\t\t\t");
         $new_comment['Id'] = $AVE_DB->InsertId();
         // Получаем e-mail адрес из Общих настроек системы и формируем ссылку на комментарий в Публичной части
         $mail_from = get_settings('mail_from');
         $mail_from_name = get_settings('mail_from_name');
         $page = get_home_link() . urldecode(base64_decode($_REQUEST['page'])) . '&subaction=showonly&comment_id=' . $new_comment['Id'] . '#' . $new_comment['Id'];
         //  Формируем текст уведомления для отправки на e-mail
         $mail_text = $AVE_Template->get_config_vars('COMMENT_MESSAGE_ADMIN');
         $mail_text = str_replace('%COMMENT%', stripslashes($new_comment['comment_text']), $mail_text);
         $mail_text = str_replace('%N%', "\n", $mail_text);
         $mail_text = str_replace('%PAGE%', $page, $mail_text);
         $mail_text = str_replace('&amp;', '&', $mail_text);
         // Отправляем уведомление
         send_mail($mail_from, $mail_text, $AVE_Template->get_config_vars('COMMENT_SUBJECT_MAIL'), $mail_from, $mail_from_name, 'text');
         // Если данные были отправлены ajax-запросом, тогда выполняем автоматический показ комментария
         // на странице.
         if ($ajax) {
             $new_comment['comment_published'] = strftime($AVE_Template->get_config_vars('COMMENT_DATE_TIME_FORMAT'), $new_comment['comment_published']);
             $subcomments[] = $new_comment;
             $AVE_Template->assign('subcomments', $subcomments);
             $AVE_Template->assign('theme', defined('THEME_FOLDER') ? THEME_FOLDER : DEFAULT_THEME_FOLDER);
             $AVE_Template->display($tpl_dir . $this->_comments_tree_sub_tpl);
         }
     }
     //		$JsAfter = ($comment_status == 0) ? $AVE_Template->get_config_vars('COMMENT_AFTER_MODER') : $AVE_Template->get_config_vars('COMMENT_THANKYOU_TEXT');
     //		$AVE_Template->assign('JsAfter', $JsAfter);
     //		$AVE_Template->display($tpl_dir . $this->_comment_thankyou_tpl);
     // Если же данные пришли НЕ ajax-запросом, тогда полностью обновляем страницу.
     if (!$ajax) {
         header('Location:' . $link . '#end');
     }
     exit;
 }
예제 #5
0
 /**
  * Метод, предназанченный для сборки всей страницы в единое целое.
  *
  * @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;
 }
예제 #6
0
 function displayForm($tpl_dir, $uid, $theme_folder)
 {
     global $AVE_DB, $AVE_Template;
     $sql = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_modul_userpage WHERE id = '1'");
     $row = $sql->FetchRow();
     $gruppen = explode(',', $row->group_id);
     if ($row->can_comment == 1 && in_array(UGROUP, $gruppen)) {
         $AVE_Template->assign('cancomment', 1);
     }
     $AVE_Template->assign('MaxZeichen', $this->_commentwords);
     $im = "";
     $sql_ig = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_modul_forum_ignorelist WHERE BenutzerId = '{$uid}' AND IgnoreId = '" . $_SESSION['user_id'] . "'");
     $num_ig = $sql_ig->NumRows();
     if ($num_ig == 1) {
         $AVE_Template->assign('cancomment', 1);
     }
     // absenden
     if (isset($_POST['send']) && $_POST['send'] == 1) {
         $Text = mb_substr(htmlspecialchars($_POST['Text']), 0, $this->_commentwords);
         $Text_length = mb_strlen($Text);
         $Text .= $Text_length > $this->_commentwords ? '...' : '';
         $Text = pretty_chars($Text);
         $error = array();
         if (empty($_POST['title'])) {
             $error[] = $AVE_Template->get_config_vars('NoTitle');
         }
         if (empty($Text)) {
             $error[] = $AVE_Template->get_config_vars('NoComment');
         }
         if (function_exists("imagettftext") && function_exists("imagepng") && $this->_anti_spam == 1) {
             if (empty($_POST['cpSecurecode']) || $_POST['cpSecurecode'] != $_SESSION['cpSecurecode']) {
                 $error[] = $AVE_Template->get_config_vars('NoSecure');
             }
         }
         if (count($error) > 0) {
             $AVE_Template->assign('errors', $error);
             $AVE_Template->assign('titel', $_POST['title']);
             $AVE_Template->assign('text', $_POST['Text']);
         } else {
             if (isset($_SESSION['user_id'])) {
                 $author = $_SESSION['user_id'];
             } else {
                 $author = '0';
             }
             if (in_array(UGROUP, $gruppen) && $Text_length > 3) {
                 $sql = "INSERT INTO " . PREFIX . "_modul_userpage_guestbook (\r\n\t\t\t\t\t\tid,\r\n\t\t\t\t\t\tuid,\r\n\t\t\t\t\t\tctime,\r\n\t\t\t\t\t\tauthor,\r\n\t\t\t\t\t\ttitle,\r\n\t\t\t\t\t\tmessage\r\n\t\t\t\t\t) VALUES (\r\n\t\t\t\t\t\t'',\r\n\t\t\t\t\t\t'" . $uid . "',\r\n\t\t\t\t\t\t'" . time() . "',\r\n\t\t\t\t\t\t'" . $author . "',\r\n\t\t\t\t\t\t'" . $_POST['title'] . "',\r\n\t\t\t\t\t\t'" . $Text . "'\r\n\t\t\t\t\t)";
                 $AVE_DB->Query($sql);
             }
             echo '<script>window.opener.location.reload(); window.close();</script>';
         }
     }
     if (function_exists("imagettftext") && function_exists("imagepng") && $this->_anti_spam == 1) {
         $codeid = secureCode();
         $im = $codeid;
         $sql_sc = $AVE_DB->Query("SELECT Code FROM " . PREFIX . "_antispam WHERE Id = '{$codeid}'");
         $row_sc = $sql_sc->FetchRow();
         $AVE_Template->assign("im", $im);
         $_SESSION['cpSecurecode'] = $row_sc->Code;
         $_SESSION['cpSecurecode_id'] = $codeid;
         $AVE_Template->assign("anti_spam", 1);
     }
     $AVE_Template->assign('theme_folder', $theme_folder);
     $AVE_Template->assign('uid', $uid);
     $AVE_Template->display($tpl_dir . 'guestbook_form.tpl');
 }
예제 #7
0
 function Languages($tpl_dir)
 {
     // Aktualisieren bzw. lцschen
     if (isset($_REQUEST['sub']) && $_REQUEST['sub'] == 'save') {
         foreach ($_POST['Del'] as $id => $del) {
             $GLOBALS['AVE_DB']->Query("DELETE FROM " . PREFIX . "_modul_download_sprachen WHERE Id = '{$id}'");
         }
         foreach ($_POST['Name'] as $id => $name) {
             $GLOBALS['AVE_DB']->Query("UPDATE " . PREFIX . "_modul_download_sprachen SET Name = '" . pretty_chars($_POST['Name'][$id]) . "' WHERE Id = '{$id}'");
         }
         header("Location:index.php?do=modules&action=modedit&mod=download&moduleaction=languages&cp=" . SESSION . "&pop=1");
         exit;
     }
     // Neu
     if (isset($_REQUEST['sub']) && $_REQUEST['sub'] == 'new') {
         foreach ($_POST['Name'] as $New) {
             $GLOBALS['AVE_DB']->Query("INSERT INTO " . PREFIX . "_modul_download_sprachen(Id,Name) VALUES ('', '" . pretty_chars($New) . "')");
         }
         header("Location:index.php?do=modules&action=modedit&mod=download&moduleaction=languages&cp=" . SESSION . "&pop=1");
         exit;
     }
     $lang = array();
     $sql = $GLOBALS['AVE_DB']->Query("SELECT * FROM " . PREFIX . "_modul_download_sprachen ORDER BY Name ASC");
     while ($row = $sql->FetchRow()) {
         array_push($lang, $row);
     }
     $GLOBALS['AVE_Template']->assign('lang', $lang);
     $GLOBALS['AVE_Template']->assign('content', $GLOBALS['AVE_Template']->fetch($tpl_dir . 'download_languages.tpl'));
 }
예제 #8
0
 function getDenied($file_id)
 {
     define('MODULE_CONTENT', $GLOBALS['AVE_Template']->fetch($GLOBALS['mod']['tpl_dir'] . 'denied.tpl'));
     $pName = isset($_GET['categ']) && $_GET['categ'] != '' ? pretty_chars(strip_tags($topNav)) : $GLOBALS['mod']['config_vars']['PageName'] . $GLOBALS['mod']['config_vars']['PageSep'] . $GLOBALS['mod']['config_vars']['PageOverview'];
     define("MODULE_SITE", $pName);
 }
예제 #9
0
function get_field_docfromrubcheck($field_value, $type, $field_id = '', $rubric_field_template = '', $tpl_field_empty = 0, &$maxlength = '', $document_fields = 0, $rubric_id = 0, $dropdown = '')
{
    global $AVE_DB, $AVE_Template, $AVE_Core, $AVE_Document;
    $res = 0;
    switch ($type) {
        case 'edit':
            $array = array();
            $items = array();
            $sql = "SELECT Id, document_parent, document_title from " . PREFIX . "_documents WHERE rubric_id='" . $dropdown . "' order by document_parent, document_title";
            $field_value1 = explode(',', $field_value);
            $res = $AVE_DB->Query($sql);
            //$field = "<input id=\"feld_" . $field_id . "\" name=\"feld[" . $field_id . "]\" value=\"".$field_value."\" type=\"hidden\">";
            $field = "<input id=\"feld_" . $field_id . "\" name=\"feld[" . $field_id . "]\" value=\"" . $field_value . "\" type=\"hidden\">";
            while ($row = $res->FetchRow()) {
                $row->document_title = $array[$row->document_parent] > '' ? $array[$row->document_parent] . ' > ' . $row->document_title : $row->document_title;
                $items[$row->document_title] = "<div class=\"fix\"><input class=\"float field_docfromrubcheck\" value='" . $row->Id . "' type='checkbox' " . (in_array($row->Id, $field_value1) == false ? "" : "checked=checked") . " onchange=\"\n\t\t\t\t\t\$('#feld_" . $field_id . "').val('');\n\t\t\t\t\tvar n = \$('.field_docfromrubcheck:checked').each(\n\t\t\t\t\tfunction() {\n\t\t\t\t\t\$('#feld_" . $field_id . "').val(\$('#feld_" . $field_id . "').val() > '' ?  \$('#feld_" . $field_id . "').val()+',' + \$(this).val() : \$(this).val())\n\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t\t\"><label>" . htmlspecialchars($row->document_title, ENT_QUOTES) . "</label></div>";
                $array[$row->Id] = $row->document_title;
            }
            ksort($items);
            $field .= implode(chr(10), $items);
            $res = $field;
            break;
        case 'doc':
            $field_value1 = explode(',', $field_value);
            if (is_array($field_value1)) {
                $res = $AVE_DB->Query("SELECT Id,document_title FROM " . PREFIX . "_documents WHERE Id IN (" . implode(', ', $field_value1) . ")");
                $result = array();
                while ($mfa = $res->FetchArray()) {
                    $result[$mfa['Id']] = $mfa['document_title'];
                }
                $res = '';
                if ($tpl_field_empty) {
                    $res .= '<ul>';
                }
                foreach ($field_value1 as $k => $v) {
                    $field_value = htmlspecialchars($v, ENT_QUOTES);
                    $field_value = pretty_chars($field_value);
                    $field_value = clean_php($field_value);
                    if (!$tpl_field_empty) {
                        $field_param = explode('|', $field_value);
                        $field_value = preg_replace('/\\[tag:parametr:(\\d+)\\]/ie', '@$field_param[\\1]', $rubric_field_template);
                    } else {
                        $field_value = "<li>" . $result[$field_value] . "</li>";
                    }
                    $res .= $field_value;
                }
                if ($tpl_field_empty) {
                    $res .= '</ul>';
                }
            }
            break;
        case 'req':
            $res = get_field_default($field_value, $type, $field_id, $rubric_field_template, $tpl_field_empty, $maxlength, $document_fields, $rubric_id);
            break;
        case 'name':
            $res = 'FIELD_DOCFROMRUB_CHECK';
            break;
    }
    return $res ? $res : $field_value;
}
예제 #10
0
 /**
  * Метод, предназанченный для сборки всей страницы в единое целое.
  *
  * @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;
 }
예제 #11
0
파일: modul.php 프로젝트: laiello/avecms
/**
 * Рекурсивная функция формирования карты сайта
 *
 * @param int $nav_items
 * @param string $sitemap
 * @param int $parent
 */
function printSitemap(&$nav_items, &$sitemap = '', $parent = 0)
{
    $sitemap .= empty($sitemap) ? '<ul class="sitemap">' : '<ul>';
    foreach ($nav_items[$parent] as $row) {
        if (strpos($row['navi_item_link'], 'module=') === false && start_with('index.php?', $row['navi_item_link'])) {
            $row['navi_item_link'] .= '&amp;doc=' . (empty($row['document_alias']) ? prepare_url($row['title']) : $row['document_alias']);
        }
        if (start_with('www.', $row['navi_item_link'])) {
            $row['navi_item_link'] = str_replace('www.', 'http://www.', $row['navi_item_link']);
        }
        $row['navi_item_link'] = rewrite_link($row['navi_item_link']);
        $sitemap .= '<li><a href="' . $row['navi_item_link'] . '" target="' . $row['navi_item_target'] . '">';
        $sitemap .= pretty_chars($row['title']) . '</a>';
        if (isset($nav_items[$row['Id']])) {
            printSitemap($nav_items, $sitemap, $row['Id']);
        }
        $sitemap .= '</li>';
    }
    $sitemap .= '</ul>';
}
예제 #12
0
 /**
  * Метод, предназначенный для сохранения документа в БД
  *
  * @param int $rubric_id	идентификатор Рубрики
  * @param int $document_id	идентификатор Документа
  * @param array $data			Документ в массиве структура - хитрая
  * @param bool $update_non_exists_fields	Изменять поля на пустые значения у не переданных полей или не надо
  * вохвражает номер документа если все удачно и false если все плохо
  */
 function documentSave($rubric_id, $document_id, $data, $update_non_exists_fields = false)
 {
     global $AVE_DB;
     //Проверяем входящие данные
     $rubric_id = (int) $rubric_id;
     $document_id = (int) $document_id;
     if (!isset($data)) {
         return false;
     }
     if (!isset($data['feld'])) {
         return false;
     }
     //определяем тип опреации
     $oper = 'INSERT';
     // выполняем стартовый код рубрики
     $code = $AVE_DB->Query("SELECT rubric_code_start, rubric_code_end FROM " . PREFIX . "_rubrics WHERE Id = '" . $rubric_id . "'")->FetchRow();
     eval('?>' . $code->rubric_code_start . '<?');
     if ($document_id > 0) {
         $oper = 'UPDATE';
     }
     // Если пользователь имеет права на добавление документов в указанную рубрику, тогда
     if ($oper == 'INSERT' && !(isset($_SESSION[$rubric_id . '_newnow']) && $_SESSION[$rubric_id . '_newnow'] == 1 || isset($_SESSION[$rubric_id . '_new']) && $_SESSION[$rubric_id . '_new'] == 1 || isset($_SESSION[$rubric_id . '_alles']) && $_SESSION[$rubric_id . '_alles'] == 1 || defined('UGROUP') && UGROUP == 1)) {
         return false;
     }
     if ($oper == 'UPDATE') {
         // Выполняем запрос к БД на получение автора документа и id Рубрики
         $row = $AVE_DB->Query("\n\t\t\t\t\tSELECT\n\t\t\t\t\t\trubric_id,\n\t\t\t\t\t\tdocument_author_id\n\t\t\t\t\tFROM " . PREFIX . "_documents\n\t\t\t\t\tWHERE Id = '" . $document_id . "'\n\t\t\t\t")->FetchRow();
         $rubric_id = $row->rubric_id;
         $row->cantEdit = 0;
         // Определяем права доступа к документам в данной рубрики
         $this->documentPermissionFetch($row->rubric_id);
         // разрешаем редактирование
         // если автор имеет право изменять свои документы в рубрике
         // или пользователю разрешено изменять все документы в рубрике
         if (isset($_SESSION['user_id']) && $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;
         }
         // запрещаем редактирование главной страницы и страницы ошибки 404 если требуется одобрение Администратора
         if (($document_id == 1 || $document_id == PAGE_NOT_FOUND_ID) && @$_SESSION[$row->rubric_id . '_newnow'] != 1) {
             $row->cantEdit = 0;
         }
         // разрешаем редактирование, если пользователь принадлежит группе Администраторов или имеет все права на рубрику
         if (defined('UGROUP') && UGROUP == 1 || isset($_SESSION[$row->rubric_id . '_alles']) && $_SESSION[$row->rubric_id . '_alles'] == 1) {
             $row->cantEdit = 1;
         }
         //выходим если нельзя редактировать
         if (!$row->cantEdit == 1) {
             return false;
         }
         // Обрабатываем все данные, пришедшие в запросе
         $suche = isset($data['document_in_search']) && $data['document_in_search'] == 1 ? '1' : '0';
         $document_status = isset($_SESSION[$row->rubric_id . '_newnow']) && $_SESSION[$row->rubric_id . '_newnow'] == 1 || isset($_SESSION[$row->rubric_id . '_alles']) && $_SESSION[$row->rubric_id . '_alles'] == 1 || defined('UGROUP') && UGROUP == 1 ? isset($data['document_status']) ? $data['document_status'] : '0' : '0';
         $document_status = $document_id == 1 || $document_id == PAGE_NOT_FOUND_ID ? '1' : $docstatus;
         // Формируем/проверяем адрес на уникальность
         if ($document_id != 1) {
             $data['document_alias'] = $_url = prepare_url(empty($data['document_alias']) ? trim($_POST['prefix'] . '/' . $data['doc_title'], '/') : $data['document_alias']);
         } else {
             $data['document_alias'] = "/";
         }
         $cnt = 1;
         while ($AVE_DB->Query("\n\t\t\t\t\t\tSELECT 1\n\t\t\t\t\t\tFROM " . PREFIX . "_documents\n\t\t\t\t\t\tWHERE Id != '" . $document_id . "'\n\t\t\t\t\t\tAND document_alias = '" . $data['document_alias'] . "'\n\t\t\t\t\t\tLIMIT 1\n\t\t\t\t\t\t")->NumRows() == 1) {
             $data['document_alias'] = $_url . '-' . $cnt;
             $cnt++;
         }
     } else {
         $suche = isset($data['document_in_search']) && $data['document_in_search'] == 1 ? 1 : 0;
         $document_status = !empty($data['document_status']) ? (int) $data['document_status'] : '0';
         $document_status = $document_id == 1 || $document_id == PAGE_NOT_FOUND_ID ? '1' : $document_status;
         $data['document_alias'] = $_url = prepare_url(empty($data['document_alias']) ? trim($data['prefix'] . '/' . $data['doc_title'], '/') : $data['document_alias']);
         $cnt = 1;
         while ($AVE_DB->Query("\n\t\t\t\t\t\t\tSELECT 1\n\t\t\t\t\t\t\tFROM " . PREFIX . "_documents\n\t\t\t\t\t\t\tWHERE document_alias = '" . $data['document_alias'] . "'\n\t\t\t\t\t\t\tLIMIT 1\n\t\t\t\t\t\t")->NumRows()) {
             $data['document_alias'] = $_url . '-' . $cnt;
             $cnt++;
         }
     }
     $docstart = $document_id == 1 || $document_id == PAGE_NOT_FOUND_ID ? '0' : $this->_documentStart($data['document_published']);
     $docend = $document_id == 1 || $document_id == PAGE_NOT_FOUND_ID ? '0' : $this->_documentEnd($data['document_expire']);
     //Получаем структуру документа
     $fields = array();
     if ($oper == 'INSERT') {
         $sql = $AVE_DB->Query("\n\t\t\t\t\t\t\t\tSELECT *\n\t\t\t\t\t\t\t\tFROM " . PREFIX . "_rubric_fields\n\t\t\t\t\t\t\t\tWHERE rubric_id = '" . $rubric_id . "'\n\t\t\t\t\t\t\t\tORDER BY rubric_field_position ASC\n\t\t\t\t\t\t\t");
     } else {
         $sql = $AVE_DB->Query("\n\t\t\t\t\t\t\t\tSELECT\n\t\t\t\t\t\t\t\t\tdoc.Id AS df_id,\n\t\t\t\t\t\t\t\t\trub.*,\n\t\t\t\t\t\t\t\t\trubric_field_default,\n\t\t\t\t\t\t\t\t\tdoc.field_value\n\t\t\t\t\t\t\t\tFROM " . PREFIX . "_rubric_fields AS rub\n\t\t\t\t\t\t\t\tLEFT JOIN " . PREFIX . "_document_fields AS doc ON rubric_field_id = rub.Id\n\t\t\t\t\t\t\t\tWHERE document_id = '" . $document_id . "'\n\t\t\t\t\t\t\t\tORDER BY rubric_field_position ASC\n\t\t\t\t\t\t\t");
     }
     while ($row = $sql->FetchRow()) {
         $row->Feld = $this->_documentFieldGet($row->rubric_field_type, $oper == 'INSERT' ? $row->rubric_field_default : $row->field_value, $row->Id, $row->rubric_field_default);
         array_push($fields, $row);
     }
     $where = $oper == 'UPDATE' ? 'WHERE Id=' . $document_id : '';
     $author = $oper != 'UPDATE' ? 'document_author_id = ' . $_SESSION['user_id'] . ',' : '';
     $zag = $oper == 'UPDATE' ? "UPDATE " . PREFIX . "_documents" : "INSERT INTO " . PREFIX . "_documents";
     $sql = "\n\t\t\t\t\t\t\t{$zag}\n\t\t\t\t\t\t\tSET\n\t\t\t\t\t\t\t\trubric_id                 = '" . $rubric_id . "',\n\t\t\t\t\t\t\t\tdocument_parent           = '" . (int) $data['document_parent'] . "',\n\t\t\t\t\t\t\t\tdocument_title            = '" . addslashes(clean_no_print_char($data['doc_title'])) . "',\n\t\t\t\t\t\t\t\tdocument_breadcrum_title  = '" . addslashes(clean_no_print_char($data['doc_breadcrum_title'])) . "',\n\t\t\t\t\t\t\t\tdocument_alias            = '" . $data['document_alias'] . "',\n\t\t\t\t\t\t\t\tdocument_published        = '" . $docstart . "',\n\t\t\t\t\t\t\t\tdocument_expire           = '" . $docend . "',\n\t\t\t\t\t\t\t\tdocument_changed          = '" . time() . "',\n\t\t\t\t\t\t\t\t{$author}\n\t\t\t\t\t\t\t\tdocument_in_search        = '" . $suche . "',\n\t\t\t\t\t\t\t\tdocument_meta_keywords    = '" . addslashes(clean_no_print_char($data['document_meta_keywords'])) . "',\n\t\t\t\t\t\t\t\tdocument_meta_description = '" . addslashes(clean_no_print_char($data['document_meta_description'])) . "',\n\t\t\t\t\t\t\t\tdocument_meta_robots      = '" . $data['document_meta_robots'] . "',\n\t\t\t\t\t\t\t\tdocument_status           = '" . $data['document_status'] . "',\n\t\t\t\t\t\t\t\tdocument_linked_navi_id   = '" . (int) $data['document_linked_navi_id'] . "',\n\t\t\t\t\t\t\t\tdocument_tags   \t\t  = '" . addslashes(clean_no_print_char($data['document_tags'])) . "',\n\t\t\t\t\t\t\t\tdocument_lang\t\t\t  = '" . (empty($data['document_lang']) ? $_SESSION['user_language'] : $data['document_lang']) . "'\n\t\t\t\t\t\t\t{$where}";
     $AVE_DB->Query($sql);
     if ($oper == 'UPDATE') {
         $this->SaveRevission($document_id);
     }
     // Получаем id добавленной записи
     $iid = $AVE_DB->InsertId();
     $document_id = $oper == "INSERT" ? $iid : $document_id;
     // Сохраняем системное сообщение в журнал
     reportLog($_SESSION['user_name'] . ' - ' . ($oper == 'INSERT' ? 'добавил' : 'отредактировал') . ' документ (' . $document_id . ')', 2, 2);
     // Циклически обрабатываем поля документа
     foreach ($fields as $k => $v) {
         $fld_id = $v->Id;
         //если в данных нет поля и мы редактируем документ - изменять ли это поле на пустое значение
         if ($oper == 'UPDATE' && !isset($data['feld'][$fld_id]) && !$update_non_exists_fields) {
             continue;
         }
         $fld_val = isset($data['feld'][$fld_id]) ? $data['feld'][$fld_id] : $v->rubric_field_default;
         if (!$AVE_DB->Query("\n\t\t\t\t\t\t\t\tSELECT 1\n\t\t\t\t\t\t\t\tFROM " . PREFIX . "_rubric_fields\n\t\t\t\t\t\t\t\tWHERE Id = '" . $fld_id . "'\n\t\t\t\t\t\t\t\tAND rubric_id = '" . $rubric_id . "'\n\t\t\t\t\t\t\t\tLIMIT 1\n\t\t\t\t\t\t\t")->NumRows()) {
             continue;
         }
         if (is_array($fld_val)) {
             foreach ($fld_val as $k => $v) {
                 if (!check_permission('document_php')) {
                     if (is_php_code($v)) {
                         $v = '';
                     }
                 }
                 $v = clean_no_print_char($v);
                 $v = pretty_chars($v);
                 $fld_val[$k] = $v;
             }
         } else {
             // Если запрещено использование php кода, тогда обнуляем данные поля
             if (!check_permission('document_php')) {
                 if (is_php_code($fld_val)) {
                     $fld_val = '';
                 }
             }
             // Убираем из текста непчатбемые символы
             $fld_val = clean_no_print_char($fld_val);
             $fld_val = pretty_chars($fld_val);
         }
         // Выполняем запрос к БД на добавление нового поля с его содержимым
         $where = $oper == 'UPDATE' ? 'WHERE document_id=' . $document_id . ' AND rubric_field_id=' . $fld_id : '';
         $zag = $oper == 'UPDATE' ? "UPDATE " . PREFIX . "_document_fields" : "INSERT INTO " . PREFIX . "_document_fields";
         $sql = "\n\t\t\t\t\t\t\t{$zag}\n\t\t\t\t\t\t\tSET\n\t\t\t\t\t\t\t\trubric_field_id    = '" . $fld_id . "',\n\t\t\t\t\t\t\t\tdocument_id        = '" . $document_id . "',\n\t\t\t\t\t\t\t\tfield_value        = '" . (is_array($fld_val) ? serialize($fld_val) : $fld_val) . "',\n\t\t\t\t\t\t\t\tfield_number_value = '" . (int) (is_array($fld_val) ? serialize($fld_val) : $fld_val) . "',\n\t\t\t\t\t\t\t\tdocument_in_search = '" . $suche . "'\n\t\t\t\t\t\t\t{$where}\t\n\t\t\t\t\t\t";
         $AVE_DB->Query($sql);
     }
     // Очищаем кэш шаблона
     $AVE_DB->Query("\n\t\t\t\t\t\tDELETE\n\t\t\t\t\t\tFROM " . PREFIX . "_rubric_template_cache\n\t\t\t\t\t\tWHERE doc_id = '" . $document_id . "'\n\t\t\t\t\t");
     // выполняем финишный код рубрики
     eval('?>' . $code->rubric_code_end . '<?');
     //чистим кеш
     $AVE_DB->clearcache('rub_' . $rubric_id);
     $AVE_DB->clearcache('doc_' . $document_id);
     $this->generateKeywords($document_id);
     $this->generateTags($document_id);
     return $document_id;
 }