From 4e4a58d40ad09848243aa1eb53a57e1df284e719 Mon Sep 17 00:00:00 2001 From: "M@d D3n" Date: Mon, 12 Mar 2018 23:35:55 +0300 Subject: [PATCH] v 3.24 --- admin/admin.php | 144 +- admin/docs.php | 582 +-- admin/functions/func.admin.common.php | 985 ++--- admin/index.php | 19 +- admin/init.php | 85 +- admin/lang/bg/settings.txt | 6 +- admin/lang/ru/docs.txt | 5 +- admin/lang/ru/groups.txt | 8 +- admin/lang/ru/rubs.txt | 56 +- admin/lang/ru/settings.txt | 8 + admin/lang/ru/templates.txt | 1 + admin/modules.php | 163 +- admin/rubs.php | 108 +- admin/settings.php | 11 +- admin/start.php | 2 +- admin/templates/css/main.css | 14 + admin/templates/documents/doc_search.tpl | 15 +- admin/templates/documents/form.tpl | 6 +- admin/templates/documents/form_after.tpl | 5 +- admin/templates/groups/perms.tpl | 4 +- admin/templates/js/main.js | 8 +- admin/templates/main.tpl | 530 ++- admin/templates/rubs/_field_code.tpl | 136 + admin/templates/rubs/_field_list.tpl | 142 + admin/templates/rubs/_fields_list.tpl | 136 + admin/templates/rubs/code.tpl | 51 +- admin/templates/rubs/field_template.tpl | 2 +- admin/templates/rubs/fields.tpl | 16 +- admin/templates/rubs/fields_groups.tpl | 55 +- admin/templates/rubs/fields_list.tpl | 198 +- admin/templates/rubs/form.tpl | 170 +- admin/templates/rubs/list.tpl | 15 +- admin/templates/rubs/rules.tpl | 240 ++ admin/templates/rubs/tmpls.tpl | 34 +- admin/templates/settings/edit_file.tpl | 78 + admin/templates/settings/pagination_edit.tpl | 13 +- admin/templates/settings/settings_case.tpl | 16 +- .../templates/settings/settings_countries.tpl | 70 +- admin/templates/settings/settings_lang.tpl | 16 +- admin/templates/settings/settings_main.tpl | 13 +- .../settings/settings_pagination.tpl | 16 +- admin/templates/templates/form.tpl | 8 +- class/class.core.php | 2675 ++++++------ class/class.database.php | 95 +- class/class.docs.php | 295 +- class/class.modules.php | 767 ++-- class/class.navigation.php | 50 +- class/class.request.php | 14 +- class/class.rubs.php | 3697 +++++++++-------- class/class.settings.php | 142 + class/class.thumbnail.php | 3 +- class/class.user.php | 47 +- fields/checkbox/field.php | 26 +- fields/image_mega/tpl/field-doc.tpl | 2 +- fields/image_multi_new_3inputs/.gitkeep | 0 fields/image_multi_new_3inputs/css/.gitkeep | 0 fields/image_multi_new_3inputs/css/field.css | 96 - fields/image_multi_new_3inputs/field.php | 307 -- fields/image_multi_new_3inputs/js/.gitkeep | 0 fields/image_multi_new_3inputs/js/field.js | 235 -- fields/image_multi_new_3inputs/js/outside.js | 231 - fields/image_multi_new_3inputs/lang/.gitkeep | 0 fields/image_multi_new_3inputs/lang/bg.txt | 27 - fields/image_multi_new_3inputs/lang/cz.txt | 29 - fields/image_multi_new_3inputs/lang/en.txt | 26 - fields/image_multi_new_3inputs/lang/pl.txt | 27 - fields/image_multi_new_3inputs/lang/ru.txt | 27 - fields/image_multi_new_3inputs/lang/ua.txt | 27 - fields/image_multi_new_3inputs/tpl/.gitkeep | 0 .../image_multi_new_3inputs/tpl/field-doc.tpl | 3 - .../image_multi_new_3inputs/tpl/field-req.tpl | 3 - fields/image_multi_new_3inputs/tpl/field.tpl | 65 - fields/teasers/field.php | 288 +- fields/teasers/js/field.js | 49 +- fields/teasers/tpl/field.tpl | 4 +- fields/youtube/lang/bg.txt | 8 +- fields/youtube/lang/cz.txt | 7 + fields/youtube/lang/en.txt | 7 + fields/youtube/lang/pl.txt | 7 + fields/youtube/lang/ru.txt | 7 + fields/youtube/lang/ua.txt | 7 + fields/youtube/tpl/field.tpl | 16 +- functions/func.block.php | 11 +- functions/func.breadcrumbs.php | 21 +- functions/func.common.php | 41 +- functions/func.fields.php | 105 +- functions/func.helpers.php | 18 +- functions/func.navigation.php | 153 +- functions/func.parserequest.php | 1870 +++++---- functions/func.sysblock.php | 9 +- inc/config.php | 23 +- inc/init.php | 20 +- install/data_base.sql | 2 +- install/structure_base.sql | 79 +- 94 files changed, 8478 insertions(+), 7380 deletions(-) create mode 100755 admin/templates/rubs/_field_code.tpl create mode 100755 admin/templates/rubs/_field_list.tpl create mode 100755 admin/templates/rubs/_fields_list.tpl create mode 100644 admin/templates/rubs/rules.tpl create mode 100644 admin/templates/settings/edit_file.tpl delete mode 100755 fields/image_multi_new_3inputs/.gitkeep delete mode 100755 fields/image_multi_new_3inputs/css/.gitkeep delete mode 100755 fields/image_multi_new_3inputs/css/field.css delete mode 100755 fields/image_multi_new_3inputs/field.php delete mode 100755 fields/image_multi_new_3inputs/js/.gitkeep delete mode 100755 fields/image_multi_new_3inputs/js/field.js delete mode 100755 fields/image_multi_new_3inputs/js/outside.js delete mode 100755 fields/image_multi_new_3inputs/lang/.gitkeep delete mode 100644 fields/image_multi_new_3inputs/lang/bg.txt delete mode 100644 fields/image_multi_new_3inputs/lang/cz.txt delete mode 100755 fields/image_multi_new_3inputs/lang/en.txt delete mode 100644 fields/image_multi_new_3inputs/lang/pl.txt delete mode 100755 fields/image_multi_new_3inputs/lang/ru.txt delete mode 100644 fields/image_multi_new_3inputs/lang/ua.txt delete mode 100755 fields/image_multi_new_3inputs/tpl/.gitkeep delete mode 100755 fields/image_multi_new_3inputs/tpl/field-doc.tpl delete mode 100755 fields/image_multi_new_3inputs/tpl/field-req.tpl delete mode 100755 fields/image_multi_new_3inputs/tpl/field.tpl diff --git a/admin/admin.php b/admin/admin.php index bb000f0..7b04b1f 100644 --- a/admin/admin.php +++ b/admin/admin.php @@ -1,97 +1,99 @@ get_config_vars('EXIT_ADMIN')); - user_logout(); - header('Location:admin.php'); -} + if (isset($_REQUEST['do']) && $_REQUEST['do'] == 'logout') + { + // Завершение работы в админке + reportLog($AVE_Template->get_config_vars('EXIT_ADMIN')); + user_logout(); + header('Location:admin.php'); + } -if(auth_cookie()) -{ - header('Location:index.php'); - exit; -} + if (auth_cookie()) + { + header('Location:index.php'); + exit; + } -if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'login') -{ - // Авторизация - if (!empty($_POST['user_login']) && !empty($_POST['user_pass'])) + if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'login') { - if (ADMIN_CAPTCHA) + // Авторизация + if (! empty($_POST['user_login']) && !empty($_POST['user_pass'])) { - if (isset($_SESSION['captcha_keystring']) && isset($_POST['securecode']) && $_SESSION['captcha_keystring'] == $_POST['securecode']) $captcha_ok = 1; - else + if (ADMIN_CAPTCHA) { - unset($_SESSION['user_id'], $_SESSION['user_pass']); - unset($_SESSION['captcha_keystring']); - $error = $AVE_Template->get_config_vars('WRONG_CAPTCHA'); - $AVE_Template->assign('error', $error); + if (isset($_SESSION['captcha_keystring']) && isset($_POST['securecode']) && $_SESSION['captcha_keystring'] == $_POST['securecode']) + $captcha_ok = 1; + else + { + unset($_SESSION['user_id'], $_SESSION['user_pass']); + unset($_SESSION['captcha_keystring']); + $error = $AVE_Template->get_config_vars('WRONG_CAPTCHA'); + $AVE_Template->assign('error', $error); + } } - } - else - $captcha_ok = 1; + else + $captcha_ok = 1; - if ($captcha_ok) - { - if (true === user_login($_POST['user_login'], $_POST['user_pass'], 1,(int)(isset($_POST['SaveLogin']) && $_POST['SaveLogin'] == '1'))) + if ($captcha_ok) { - //_echo($_SESSION); - if (!empty($_SESSION['redirectlink'])) + if (true === user_login($_POST['user_login'], $_POST['user_pass'], 1,(int)(isset($_POST['SaveLogin']) && $_POST['SaveLogin'] == '1'))) { - header('Location:' . $_SESSION['redirectlink']); - unset($_SESSION['redirectlink']); + //_echo($_SESSION); + if (!empty($_SESSION['redirectlink'])) + { + header('Location:' . $_SESSION['redirectlink']); + unset($_SESSION['redirectlink']); + exit; + } + + reportLog($AVE_Template->get_config_vars('LOGIN_ADMIN')); + //Перенапрявляем пользователя + header('Location:'.get_referer_admin_link().''); exit; - } - reportLog($AVE_Template->get_config_vars('LOGIN_ADMIN')); - //Перенапрявляем пользователя - header('Location:'.get_referer_admin_link().''); - exit; + } + else + { + reportLog($AVE_Template->get_config_vars('ERROR_ADMIN') . ' - ' + . stripslashes($_POST['user_login']) . ' / ' + . stripslashes($_POST['user_pass'])); - } - else - { - reportLog($AVE_Template->get_config_vars('ERROR_ADMIN') . ' - ' - . stripslashes($_POST['user_login']) . ' / ' - . stripslashes($_POST['user_pass'])); + unset($_SESSION['user_id'], $_SESSION['user_pass']); + unset($_SESSION['captcha_keystring']); + $error = $AVE_Template->get_config_vars('WRONG_PASS'); + $AVE_Template->assign('error', $error); + } - unset($_SESSION['user_id'], $_SESSION['user_pass']); - unset($_SESSION['captcha_keystring']); - $error = $AVE_Template->get_config_vars('WRONG_PASS'); - $AVE_Template->assign('error', $error); } } - } -} -$AVE_Template->assign('captcha', ADMIN_CAPTCHA); -$AVE_Template->display('login.tpl'); + $AVE_Template->assign('captcha', ADMIN_CAPTCHA); + $AVE_Template->display('login.tpl'); ?> \ No newline at end of file diff --git a/admin/docs.php b/admin/docs.php index 7e4c4fa..a9c3dc8 100644 --- a/admin/docs.php +++ b/admin/docs.php @@ -1,298 +1,312 @@ documentTemplateTimeAssign(); - -$AVE_Rubric->rubricPermissionFetch(); - -$AVE_Template->config_load(BASE_DIR . '/admin/lang/' . $_SESSION['admin_language'] . '/docs.txt', 'docs'); - -$AVE_Template->assign("navi", $AVE_Template->fetch("navi/navi.tpl")); - -switch($_REQUEST['action']) -{ - case '' : - if (check_permission_acp('document_view')) - { - switch($_REQUEST['sub']) + /** + * AVE.cms + * + * @package AVE.cms + * @version 3.x + * @filesource + * @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru + * + * @license GPL v.2 + */ + + if (! defined('ACP')) + { + header('Location:index.php'); + exit; + } + + global $AVE_DB, $AVE_Template; + + require(BASE_DIR . '/class/class.docs.php'); + require(BASE_DIR . '/class/class.rubs.php'); + require(BASE_DIR . '/class/class.navigation.php'); + require(BASE_DIR . '/class/class.request.php'); + + $AVE_Document = new AVE_Document; + $AVE_Rubric = new AVE_Rubric; + $AVE_Navigation = new AVE_Navigation; + $AVE_Request = new AVE_Request; + + $AVE_Document->documentTemplateTimeAssign(); + + $AVE_Rubric->rubricPermissionFetch(); + + $AVE_Template->config_load(BASE_DIR . '/admin/lang/' . $_SESSION['admin_language'] . '/docs.txt', 'docs'); + + $AVE_Template->assign("navi", $AVE_Template->fetch("navi/navi.tpl")); + + switch($_REQUEST['action']) + { + case '' : + if (check_permission_acp('document_view')) { - case 'quicksave': - $_SESSION['use_editor'] = get_settings('use_editor'); - $AVE_Document->quickSave(); - break; + switch($_REQUEST['sub']) + { + case 'quicksave': + $_SESSION['use_editor'] = get_settings('use_editor'); + $AVE_Document->quickSave(); + break; + } + $AVE_Document->documentListGet(); } - $AVE_Document->documentListGet(); - } - $AVE_Template->assign('content', $AVE_Template->fetch('documents/docs.tpl')); - break; - - case 'add_new': - if (check_permission_acp('document_view')) - { - $AVE_Request->requestListFetch(); - $AVE_Template->assign('content', $AVE_Template->fetch('documents/docs_add_new.tpl')); - } - break; - - case 'showsimple': - if (check_permission_acp('document_view')) - { - $AVE_Document->documentListGet(); - $AVE_Template->assign('content', $AVE_Template->fetch('documents/docs_simple.tpl')); - } - break; - - case 'edit': - if (check_permission_acp('document_view')) - { - $_SESSION['use_editor'] = get_settings('use_editor'); - $AVE_Navigation->navigationAllItemList(); - $AVE_Request->requestListFetch(); - $AVE_Document->documentEdit((int)$_REQUEST['Id']); - } - break; - - case 'copy': - if (check_permission_acp('document_view')) - { - $_SESSION['use_editor'] = get_settings('use_editor'); - $AVE_Navigation->navigationAllItemList(); - $AVE_Request->requestListFetch(); - $AVE_Document->documentCopy((int)$_REQUEST['Id']); - } - break; - - case 'new': - if (check_permission_acp('document_view')) - { - $_SESSION['use_editor'] = get_settings('use_editor'); - $AVE_Navigation->navigationAllItemList(); - $AVE_Request->requestListFetch(); - $AVE_Document->documentNew((int)$_REQUEST['rubric_id']); - } - break; - - case 'innavi': - if (check_permission_acp('document_view') && check_permission_acp('navigation_new')) - { - $AVE_Document->documentInNavi(); - } - break; - - case 'after': - if (check_permission_acp('document_view')) - { - $AVE_Navigation->navigationAllItemList(); - $AVE_Document->documentFormAfter(); - } - break; - - case 'open': - if (check_permission_acp('document_view')) - { - $AVE_Navigation->navigationItemStatusOn((int)$_REQUEST['Id']); - $AVE_Document->documentStatusSet((int)$_REQUEST['Id'], 1); - } - break; - - case 'close': - if (check_permission_acp('document_view')) - { - $AVE_Navigation->navigationItemStatusOff((int)$_REQUEST['Id']); - $AVE_Document->documentStatusSet((int)$_REQUEST['Id'], 0); - } - break; - - case 'delete': - if (check_permission_acp('document_view')) - { - $AVE_Navigation->navigationItemStatusOff((int)$_REQUEST['Id']); - $AVE_Document->documentMarkDelete((int)$_REQUEST['Id']); - } - break; - - case 'redelete': - if (check_permission_acp('document_view')) - { - $AVE_Navigation->navigationItemStatusOn((int)$_REQUEST['Id']); - $AVE_Document->documentUnmarkDelete((int)$_REQUEST['Id']); - } - break; - - case 'enddelete': - if (check_permission_acp('alles')) - { - $AVE_Navigation->navigationItemDeleteFromDoc((int)$_REQUEST['Id']); - $AVE_Document->documentDelete((int)$_REQUEST['Id']); - // Выполняем обновление страницы - header('Location:index.php?do=docs&cp=' . SESSION); - } - break; - - case 'revision_recover': - if (check_permission_acp('document_view')) - { - $AVE_Document->documentRevissionRestore((int)$_REQUEST['doc_id'], (int)$_REQUEST['revission'], (int)$_REQUEST['rubric_id']); - } - break; - - case 'revision_delete': - if (check_permission_acp('document_view')) - { - $AVE_Document->documentRevissionDelete((int)$_REQUEST['doc_id'], (int)$_REQUEST['revission'], (int)$_REQUEST['rubric_id']); - } - break; - - case 'remark': - if (check_permission_acp('remark_view')) - { - $AVE_Document->documentRemarkNew((int)$_REQUEST['Id'], 0); - } - break; - - case 'remark_reply': - if (check_permission_acp('remark_view')) - { - $AVE_Document->documentRemarkNew((int)$_REQUEST['Id'], 1); - } - break; - - case 'remark_status': - if (check_permission_acp('remark_edit')) - { - $AVE_Document->documentRemarkStatus((int)$_REQUEST['Id'], (int)$_REQUEST['remark_status']); - } - break; - - case 'remark_del': - if (check_permission_acp('remark_edit')) - { - $AVE_Document->documentRemarkDelete((int)$_REQUEST['Id'], (int)$_REQUEST['remark_first']); - } - break; - - case 'change': - if (check_permission_acp('document_view')) - { - $AVE_Document->documentRubricChange(); - } - break; - - case 'change_user': - if (check_permission_acp('document_view')) - { - switch($_REQUEST['sub']) + $AVE_Template->assign('content', $AVE_Template->fetch('documents/docs.tpl')); + break; + + case 'add_new': + if (check_permission_acp('document_view')) { - case 'save': - $AVE_Document->changeAutorSave(); - break; + $AVE_Request->requestListFetch(); + $AVE_Template->assign('content', $AVE_Template->fetch('documents/docs_add_new.tpl')); } - $AVE_Template->assign('content', $AVE_Template->fetch('documents/user.tpl')); - } - break; - - case 'find_user': - if (check_permission_acp('document_view')) - { - findautor($_REQUEST['q'], 10); - } - exit; + break; - case 'keywords': - if (check_permission_acp('document_view')) - { - searchKeywords($_REQUEST['q']); - } - exit; + case 'showsimple': + if (check_permission_acp('document_view')) + { + $AVE_Document->documentListGet(); + $AVE_Template->assign('content', $AVE_Template->fetch('documents/docs_simple.tpl')); + } + break; - case 'editstatus': - if (check_permission_acp('document_view')) - { - $AVE_Document->documentEditStatus(); - } - break; + case 'edit': + if (check_permission_acp('document_view')) + { + $_SESSION['use_editor'] = get_settings('use_editor'); + if (isset($_REQUEST['sub']) && $_REQUEST['sub'] != 'save') + { + $AVE_Navigation->navigationAllItemList(); + $AVE_Request->requestListFetch(); + } + $AVE_Document->documentEdit((int)$_REQUEST['Id']); + } + break; - case 'image_import': - echo json_encode(array("respons"=>image_multi_import($_REQUEST['path']), "status"=>"error", "action"=>"return")); - exit; + case 'copy': + if (check_permission_acp('document_view')) + { + $_SESSION['use_editor'] = get_settings('use_editor'); + $AVE_Navigation->navigationAllItemList(); + $AVE_Request->requestListFetch(); + $AVE_Document->documentCopy((int)$_REQUEST['Id']); + } + break; - case 'translit': - echo($AVE_Document->documentAliasCreate()); - exit; + case 'new': + if (check_permission_acp('document_view')) + { + $_SESSION['use_editor'] = get_settings('use_editor'); - case 'checkurl': - echo($AVE_Document->documentAliasCheck()); - exit; + if (isset($_REQUEST['sub']) && $_REQUEST['sub'] != 'save') + { + $AVE_Navigation->navigationAllItemList(); + $AVE_Request->requestListFetch(); + } + + $AVE_Document->documentNew((int)$_REQUEST['rubric_id']); + } + break; + + case 'innavi': + if (check_permission_acp('document_view') && check_permission_acp('navigation_new')) + { + $AVE_Document->documentInNavi(); + } + break; + + case 'after': + if (check_permission_acp('document_view')) + { + $AVE_Navigation->navigationAllItemList(); + $AVE_Document->documentFormAfter(); + } + break; + + case 'open': + if (check_permission_acp('document_view')) + { + $AVE_Navigation->navigationItemStatusOn((int)$_REQUEST['Id']); + $AVE_Document->documentStatusSet((int)$_REQUEST['Id'], 1); + } + break; + + case 'close': + if (check_permission_acp('document_view')) + { + $AVE_Navigation->navigationItemStatusOff((int)$_REQUEST['Id']); + $AVE_Document->documentStatusSet((int)$_REQUEST['Id'], 0); + } + break; + + case 'delete': + if (check_permission_acp('document_view')) + { + $AVE_Navigation->navigationItemStatusOff((int)$_REQUEST['Id']); + $AVE_Document->documentMarkDelete((int)$_REQUEST['Id']); + } + break; + + case 'redelete': + if (check_permission_acp('document_view')) + { + $AVE_Navigation->navigationItemStatusOn((int)$_REQUEST['Id']); + $AVE_Document->documentUnmarkDelete((int)$_REQUEST['Id']); + } + break; + + case 'enddelete': + if (check_permission_acp('alles')) + { + $AVE_Navigation->navigationItemDeleteFromDoc((int)$_REQUEST['Id']); + $AVE_Document->documentDelete((int)$_REQUEST['Id']); + // Выполняем обновление страницы + header('Location:index.php?do=docs&cp=' . SESSION); + } + break; + + case 'revision_recover': + if (check_permission_acp('document_view')) + { + $AVE_Document->documentRevissionRestore((int)$_REQUEST['doc_id'], (int)$_REQUEST['revission'], (int)$_REQUEST['rubric_id']); + } + break; + + case 'revision_delete': + if (check_permission_acp('document_view')) + { + $AVE_Document->documentRevissionDelete((int)$_REQUEST['doc_id'], (int)$_REQUEST['revission'], (int)$_REQUEST['rubric_id']); + } + break; + + case 'remark': + if (check_permission_acp('remark_view')) + { + $AVE_Document->documentRemarkNew((int)$_REQUEST['Id'], 0); + } + break; + + case 'remark_reply': + if (check_permission_acp('remark_view')) + { + $AVE_Document->documentRemarkNew((int)$_REQUEST['Id'], 1); + } + break; + + case 'remark_status': + if (check_permission_acp('remark_edit')) + { + $AVE_Document->documentRemarkStatus((int)$_REQUEST['Id'], (int)$_REQUEST['remark_status']); + } + break; + + case 'remark_del': + if (check_permission_acp('remark_edit')) + { + $AVE_Document->documentRemarkDelete((int)$_REQUEST['Id'], (int)$_REQUEST['remark_first']); + } + break; + + case 'change': + if (check_permission_acp('document_view')) + { + $AVE_Document->documentRubricChange(); + } + break; + + case 'change_user': + if (check_permission_acp('document_view')) + { + switch($_REQUEST['sub']) + { + case 'save': + $AVE_Document->changeAutorSave(); + break; + } + $AVE_Template->assign('content', $AVE_Template->fetch('documents/user.tpl')); + } + break; + + case 'find_user': + if (check_permission_acp('document_view')) + { + findautor($_REQUEST['q'], 10); + } + exit; + + case 'keywords': + if (check_permission_acp('document_view')) + { + searchKeywords($_REQUEST['q']); + } + exit; - case 'aliases': - if (check_permission_acp('document_view')) - { - $AVE_Document->documentAliasHistoryList(); - } - break; - - case 'aliases_doc': - if (check_permission_acp('document_view')) - { - $AVE_Document->documentAliasListDoc((int)$_REQUEST['doc_id']); - } - break; - - case 'aliases_new': - if (check_permission_acp('document_view')) - { - $AVE_Document->documentAliasNew(); - } - break; - - case 'aliases_edit': - if (check_permission_acp('document_view')) - { - $AVE_Document->documentAliasEdit(); - } - break; - - case 'aliases_save': - if (check_permission_acp('document_view')) - { - $AVE_Document->documentAliasSave(); - } - break; - - case 'aliases_del': - if (check_permission_acp('document_view')) - { - $AVE_Document->documentAliasDel(); - } - break; -} + case 'editstatus': + if (check_permission_acp('document_view')) + { + $AVE_Document->documentEditStatus(); + } + break; + + case 'image_import': + echo json_encode(array("respons"=>image_multi_import($_REQUEST['path']), "status"=>"error", "action"=>"return")); + exit; + + case 'translit': + echo($AVE_Document->documentAliasCreate()); + exit; + case 'checkurl': + echo($AVE_Document->documentAliasCheck()); + exit; + + case 'aliases': + if (check_permission_acp('document_view')) + { + $AVE_Document->documentAliasHistoryList(); + } + break; + + case 'aliases_doc': + if (check_permission_acp('document_view')) + { + $AVE_Document->documentAliasListDoc((int)$_REQUEST['doc_id']); + } + break; + + case 'aliases_new': + if (check_permission_acp('document_view')) + { + $AVE_Document->documentAliasNew(); + } + break; + + case 'aliases_edit': + if (check_permission_acp('document_view')) + { + $AVE_Document->documentAliasEdit(); + } + break; + + case 'aliases_save': + if (check_permission_acp('document_view')) + { + $AVE_Document->documentAliasSave(); + } + break; + + case 'aliases_del': + if (check_permission_acp('document_view')) + { + $AVE_Document->documentAliasDel(); + } + break; + + case 'redirect': + if (check_permission_acp('document_view')) + { + $AVE_Document->documentSaveRedirect(); + } + break; + } ?> \ No newline at end of file diff --git a/admin/functions/func.admin.common.php b/admin/functions/func.admin.common.php index 44e2b2a..931494f 100644 --- a/admin/functions/func.admin.common.php +++ b/admin/functions/func.admin.common.php @@ -1,585 +1,600 @@ ' . file_get_contents($_logdir) . '' . file_get_contents($_logdir) . '' . file_get_contents($_404dir) . '' . file_get_contents($_404dir) . '' . file_get_contents($_sqldir) . '' . file_get_contents($_sqldir) . 'assign('logs', $logs); -} + unset($logdata); + unset($log404); + unset($logsql); -/** - * Список пользователей за последние $onlinetime секунд - * - * @param int $onlinetime количество секунд - * @return Array массив из пользователей отсортированный по последней активности - */ -function get_online_users($onlinetime=USERS_TIME_SHOW){ - global $AVE_DB, $AVE_Template; - $time=(time()-intval($onlinetime)); - $sql=@$AVE_DB->Query("SELECT * FROM ".PREFIX."_users WHERE last_visit>".$time." ORDER BY last_visit DESC"); - $online_users=Array(); - while ($row = $sql->FetchRow()) - { - $row->user_name = get_username_by_id($row->Id); - $row->user_group_name = get_usergroup_by_id($row->user_group); - array_push($online_users,$row); - } - $AVE_Template->assign('online_users', $online_users); -} - -/** - * Форматированный вывод размера - * - * @param int $file_size размер - * @return string нормированный размер с единицой измерения - */ -function format_size($file_size) -{ - if ($file_size >= 1073741824) - { - $file_size = round($file_size / 1073741824 * 100) / 100 . ' Gb'; - } - elseif ($file_size >= 1048576) - { - $file_size = round($file_size / 1048576 * 100) / 100 . ' Mb'; - } - elseif ($file_size >= 1024) - { - $file_size = round($file_size / 1024 * 100) / 100 . ' Kb'; + // Передаем данные в шаблон для вывода + $AVE_Template->assign('logs', $logs); } - else - { - $file_size = $file_size . ' b'; + + /** + * Список пользователей за последние $onlinetime секунд + * + * @param int $onlinetime количество секунд + * @return Array массив из пользователей отсортированный по последней активности + */ + function get_online_users($onlinetime=USERS_TIME_SHOW){ + global $AVE_DB, $AVE_Template; + $time=(time()-intval($onlinetime)); + $sql=@$AVE_DB->Query("SELECT * FROM ".PREFIX."_users WHERE last_visit>".$time." ORDER BY last_visit DESC"); + $online_users=Array(); + while ($row = $sql->FetchRow()) + { + $row->user_name = get_username_by_id($row->Id); + $row->user_group_name = get_usergroup_by_id($row->user_group); + array_push($online_users,$row); + } + $AVE_Template->assign('online_users', $online_users); } - return $file_size; -} - -/** - * Извлечение из БД статистики по основным компонентам системы - * - */ -function get_ave_info() -{ - global $AVE_DB, $AVE_Template; - - $cnts = array(); - - $cnts['templates'] = $AVE_DB->Query("SELECT COUNT(*) FROM " . PREFIX . "_templates")->GetCell(); - $cnts['documents'] = $AVE_DB->Query("SELECT COUNT(*) FROM " . PREFIX . "_documents")->GetCell(); - $cnts['request'] = $AVE_DB->Query("SELECT COUNT(*) FROM " . PREFIX . "_request") ->GetCell(); - $cnts['rubrics'] = $AVE_DB->Query("SELECT COUNT(*) FROM " . PREFIX . "_rubrics") ->GetCell(); - - $sql = $AVE_DB->Query(" - SELECT - `ModuleStatus`, - COUNT(`ModuleStatus`) AS cntStatus - FROM " . PREFIX . "_module - GROUP BY `ModuleStatus` - "); - while ($row = $sql->FetchRow()) + /** + * Форматированный вывод размера + * + * @param int $file_size размер + * @return string нормированный размер с единицой измерения + */ + function format_size($file_size) { - $cnts['modules_' . $row->ModuleStatus] = $row->cntStatus; + if ($file_size >= 1073741824) + { + $file_size = round($file_size / 1073741824 * 100) / 100 . ' Gb'; + } + elseif ($file_size >= 1048576) + { + $file_size = round($file_size / 1048576 * 100) / 100 . ' Mb'; + } + elseif ($file_size >= 1024) + { + $file_size = round($file_size / 1024 * 100) / 100 . ' Kb'; + } + else + { + $file_size = $file_size . ' b'; + } + + return $file_size; } - $sql = $AVE_DB->Query(" - SELECT - status, - COUNT(status) AS cntStatus - FROM " . PREFIX . "_users - GROUP BY status - "); - while ($row = $sql->FetchRow()) + /** + * Извлечение из БД статистики по основным компонентам системы + * + */ + function get_ave_info() { - $cnts['users_' . $row->status] = $row->cntStatus; + global $AVE_DB, $AVE_Template; + + $cnts = array(); + + $cnts['templates'] = $AVE_DB->Query("SELECT COUNT(*) FROM " . PREFIX . "_templates")->GetCell(); + $cnts['documents'] = $AVE_DB->Query("SELECT COUNT(*) FROM " . PREFIX . "_documents")->GetCell(); + $cnts['request'] = $AVE_DB->Query("SELECT COUNT(*) FROM " . PREFIX . "_request") ->GetCell(); + $cnts['rubrics'] = $AVE_DB->Query("SELECT COUNT(*) FROM " . PREFIX . "_rubrics") ->GetCell(); + + $sql = $AVE_DB->Query(" + SELECT + `ModuleStatus`, + COUNT(`ModuleStatus`) AS cntStatus + FROM " . PREFIX . "_module + GROUP BY `ModuleStatus` + "); + while ($row = $sql->FetchRow()) + { + $cnts['modules_' . $row->ModuleStatus] = $row->cntStatus; + } + + $sql = $AVE_DB->Query(" + SELECT + status, + COUNT(status) AS cntStatus + FROM " . PREFIX . "_users + GROUP BY status + "); + while ($row = $sql->FetchRow()) + { + $cnts['users_' . $row->status] = $row->cntStatus; + } + + $AVE_Template->assign('cnts', $cnts); } - $AVE_Template->assign('cnts', $cnts); -} - -/** - * Размер дириктории - * - * @param string $directory наименование директории - * @return int - */ -function get_dir_size($directory) -{ - if (!is_dir($directory)) return -1; - $size = 0; - if ($DIR = opendir($directory)) + /** + * Размер дириктории + * + * @param string $directory наименование директории + * @return int + */ + function get_dir_size($directory) { - while (($dirfile = readdir($DIR)) !== false) + if (!is_dir($directory)) return -1; + $size = 0; + if ($DIR = opendir($directory)) { - if (@is_link($directory . '/' . $dirfile) || $dirfile == '.' || $dirfile == '..') continue; - if (@is_file($directory . '/' . $dirfile)) + while (($dirfile = readdir($DIR)) !== false) { - $size += filesize($directory . '/' . $dirfile); - } - elseif (@is_dir($directory . '/' . $dirfile)) - { - $dirSize = get_dir_size($directory . '/' . $dirfile); - if ($dirSize >= 0) + if (@is_link($directory . '/' . $dirfile) || $dirfile == '.' || $dirfile == '..') continue; + if (@is_file($directory . '/' . $dirfile)) { - $size += $dirSize; + $size += filesize($directory . '/' . $dirfile); } - else + elseif (@is_dir($directory . '/' . $dirfile)) { - return -1; + $dirSize = get_dir_size($directory . '/' . $dirfile); + if ($dirSize >= 0) + { + $size += $dirSize; + } + else + { + return -1; + } } } + closedir($DIR); } - closedir($DIR); + + return $size; } - return $size; -} - -/** - * Размер базы данных - * - * @return int - */ -function get_mysql_size() -{ - global $AVE_DB; - - $mysql_size = 0; - $sql = $AVE_DB->Query("SHOW TABLE STATUS LIKE '" . PREFIX . "_%'"); - while ($row = $sql->FetchAssocArray()) + /** + * Размер базы данных + * + * @return int + */ + function get_mysql_size() { - $mysql_size += $row['Data_length'] + $row['Index_length']; + global $AVE_DB; + + $mysql_size = 0; + $sql = $AVE_DB->Query("SHOW TABLE STATUS LIKE '" . PREFIX . "_%'"); + while ($row = $sql->FetchAssocArray()) + { + $mysql_size += $row['Data_length'] + $row['Index_length']; + } + + return format_size($mysql_size); } - return format_size($mysql_size); -} -function get_ave_tags($srcfile) -{ - if (@include_once($srcfile)) + function get_ave_tags($srcfile) { - reset ($vorlage); - $vl = array(); - - while (list($key, $value) = each($vorlage)) + if (@include_once($srcfile)) { - $tag = new stdClass; - $tag->cp_tag = $key; - $tag->cp_desc = $value; - array_push($vl, $tag); - unset($tag); + reset ($vorlage); + $vl = array(); + + while (list($key, $value) = each($vorlage)) + { + $tag = new stdClass; + $tag->cp_tag = $key; + $tag->cp_desc = $value; + array_push($vl, $tag); + unset($tag); + } + + return $vl; } - return $vl; + return null; } - return null; -} + function get_all_templates() + { + global $AVE_DB; + + static $templates = null; + + if ($templates == null) + { + $templates = array(); + + $sql = $AVE_DB->Query(" + SELECT + Id, + template_title + FROM " . PREFIX . "_templates + "); + + while ($row = $sql->FetchRow()) + { + array_push($templates, $row); + } + } -function get_all_templates() -{ - global $AVE_DB; + return $templates; + } - static $templates = null; - if ($templates == null) + function getInstaledModules() { - $templates = array(); + global $AVE_DB, $AVE_Template, $AVE_Module; - $sql = $AVE_DB->Query(" - SELECT - Id, - template_title - FROM " . PREFIX . "_templates - "); + $modules = $AVE_Module->_modules; - while ($row = $sql->FetchRow()) + $modules_instaled = array(); + + foreach ($modules AS $module) { - array_push($templates, $row); + if ($module['ModuleAdminEdit'] == 1 && $module['status']) + $modules_instaled[] = array( + 'ModuleName' => $module['ModuleName'], + 'ModuleSysName' => $module['ModuleSysName'] + ); } + + unset ($modules); + + $AVE_Template->assign('modules', $modules_instaled); } - return $templates; -} - -function get_editable_module() -{ - global $AVE_DB, $AVE_Template; - - $modules = array(); - $sql = $AVE_DB->Query(" - SELECT - ModuleName, - ModuleSysName - FROM " . PREFIX . "_module - WHERE `ModuleStatus` = '1' - AND `ModuleAdminEdit` = '1' - ORDER BY ModuleName ASC - "); - while ($row = $sql->FetchRow()) + + function get_mime_type($file) { - if (check_permission('mod_' . $row->ModuleSysName)) + $file_extension = strtolower(mb_substr(strrchr($file, '.'), 1)); + + switch ($file_extension) { - array_push($modules, $row); + case 'psd': $ctype = 'image/x-photoshop'; break; + case 'rar': $ctype = 'application/x-rar-compressed'; break; + case 'zip': $ctype = 'application/x-zip-compressed'; break; + case 'pdf': $ctype = 'application/pdf'; break; + case 'bz2': $ctype = 'application/bzip2'; break; + case 'doc': + case 'dot': + case 'wiz': + case 'wzs': $ctype = 'application/msword'; break; + case 'eps': $ctype = 'application/postscript'; break; + case 'pot': + case 'ppa': + case 'pps': + case 'ppt': + case 'pwz': $ctype = 'application/vnd.ms-powerpoint'; break; + case 'rtf': $ctype = 'application/rtf'; break; + case 'rnx': $ctype = 'application/vnd.rn-realmedia'; break; + case 'hlp': $ctype = 'hlp'; break; + case 'gtar': $ctype = 'application/x-gtar'; break; + case 'gzip': + case 'tgz': $ctype = 'application/x-gzip'; break; + case 'lnx': $ctype = 'application/x-latex'; break; + case 'exe': $ctype = 'application/x-msdownload'; break; + case 'swf': $ctype = 'application/x-shockwafe-flash'; break; + case 'xml': $ctype = 'application/xml'; break; + case 'midi': $ctype = 'audio/midi'; break; + case 'mp3': + case 'mp2': + case 'mpga': $ctype = 'audio/mpeg'; break; + case 'wav': $ctype = 'audio/wav'; break; + case 'bmp': $ctype = 'audio/wav'; break; + case 'gif': $ctype = 'image/gif'; break; + case 'jpeg': + case 'jpg': + case 'jpe': $ctype = 'image/jpeg'; break; + case 'png': $ctype = 'image/png'; break; + case 'tif': + case 'tiff': $ctype = 'image/tiff'; break; + case 'ico': $ctype = 'image/x-icon'; break; + case 'csv': $ctype = 'text/comma-separated-values'; break; + case 'css': $ctype = 'text/css'; break; + case 'htm': + case 'html': + case 'shtml': $ctype = 'text/html'; break; + case 'txt': + case 'klp': + case 'tex': + case 'php': + case 'asp': + case 'aspx': + case 'php3': + case 'php4': + case 'php5': + case 'sql': $ctype = 'text/plain'; break; + case 'xml': $ctype = 'text/xml'; break; + case 'xhtm': $ctype = 'text/xhtml'; break; + case 'wml': $ctype = 'text/wml'; break; + case 'mpeg': + case 'mpg': + case 'mpe': + case 'mlv': + case 'mpa': + case 'wma': + case 'wmv': $ctype = 'video/mpeg'; break; + case 'avi': $ctype = 'video/x-msvideo'; break; + case 'mov': $ctype = 'video/quicktime'; break; + case 'xls': $ctype = 'application/vnd.ms-excel'; break; + case 'ai': $ctype = 'application/postscript'; break; + case 'rm': $ctype = 'application/vnd.rn-realmedia'; break; + case 'gz': $ctype = 'application/x-gzip'; break; + case 'js': $ctype = 'application/x-javascript'; break; + case 'pl': + case 'cc': $ctype = 'text/plain'; break; + case 'qt': $ctype = 'video/quicktime'; break; + default : $ctype='application/force-download'; } - } - $AVE_Template->assign('modules', $modules); -} + return $ctype; + } -function get_mime_type($file) -{ - $file_extension = strtolower(mb_substr(strrchr($file, '.'), 1)); - switch ($file_extension) + function file_download($filename, $retbytes = true) { - case 'psd': $ctype = 'image/x-photoshop'; break; - case 'rar': $ctype = 'application/x-rar-compressed'; break; - case 'zip': $ctype = 'application/x-zip-compressed'; break; - case 'pdf': $ctype = 'application/pdf'; break; - case 'bz2': $ctype = 'application/bzip2'; break; - case 'doc': - case 'dot': - case 'wiz': - case 'wzs': $ctype = 'application/msword'; break; - case 'eps': $ctype = 'application/postscript'; break; - case 'pot': - case 'ppa': - case 'pps': - case 'ppt': - case 'pwz': $ctype = 'application/vnd.ms-powerpoint'; break; - case 'rtf': $ctype = 'application/rtf'; break; - case 'rnx': $ctype = 'application/vnd.rn-realmedia'; break; - case 'hlp': $ctype = 'hlp'; break; - case 'gtar': $ctype = 'application/x-gtar'; break; - case 'gzip': - case 'tgz': $ctype = 'application/x-gzip'; break; - case 'lnx': $ctype = 'application/x-latex'; break; - case 'exe': $ctype = 'application/x-msdownload'; break; - case 'swf': $ctype = 'application/x-shockwafe-flash'; break; - case 'xml': $ctype = 'application/xml'; break; - case 'midi': $ctype = 'audio/midi'; break; - case 'mp3': - case 'mp2': - case 'mpga': $ctype = 'audio/mpeg'; break; - case 'wav': $ctype = 'audio/wav'; break; - case 'bmp': $ctype = 'audio/wav'; break; - case 'gif': $ctype = 'image/gif'; break; - case 'jpeg': - case 'jpg': - case 'jpe': $ctype = 'image/jpeg'; break; - case 'png': $ctype = 'image/png'; break; - case 'tif': - case 'tiff': $ctype = 'image/tiff'; break; - case 'ico': $ctype = 'image/x-icon'; break; - case 'csv': $ctype = 'text/comma-separated-values'; break; - case 'css': $ctype = 'text/css'; break; - case 'htm': - case 'html': - case 'shtml': $ctype = 'text/html'; break; - case 'txt': - case 'klp': - case 'tex': - case 'php': - case 'asp': - case 'aspx': - case 'php3': - case 'php4': - case 'php5': - case 'sql': $ctype = 'text/plain'; break; - case 'xml': $ctype = 'text/xml'; break; - case 'xhtm': $ctype = 'text/xhtml'; break; - case 'wml': $ctype = 'text/wml'; break; - case 'mpeg': - case 'mpg': - case 'mpe': - case 'mlv': - case 'mpa': - case 'wma': - case 'wmv': $ctype = 'video/mpeg'; break; - case 'avi': $ctype = 'video/x-msvideo'; break; - case 'mov': $ctype = 'video/quicktime'; break; - case 'xls': $ctype = 'application/vnd.ms-excel'; break; - case 'ai': $ctype = 'application/postscript'; break; - case 'rm': $ctype = 'application/vnd.rn-realmedia'; break; - case 'gz': $ctype = 'application/x-gzip'; break; - case 'js': $ctype = 'application/x-javascript'; break; - case 'pl': - case 'cc': $ctype = 'text/plain'; break; - case 'qt': $ctype = 'video/quicktime'; break; - default : $ctype='application/force-download'; - } + $chunksize = 1*(1024*1024); + $buffer = ''; + $cnt = 0; - return $ctype; -} + $handle = fopen($filename, 'rb'); -function file_download($filename, $retbytes = true) -{ - $chunksize = 1*(1024*1024); - $buffer = ''; - $cnt = 0; + if ($handle === false) return false; + + while (!feof($handle)) + { + $buffer = fread($handle, $chunksize); + echo $buffer; + flush(); + if ($retbytes) $cnt += strlen($buffer); + } - $handle = fopen($filename, 'rb'); + $status = fclose($handle); - if ($handle === false) return false; + if ($retbytes && $status) return $cnt; - while (!feof($handle)) - { - $buffer = fread($handle, $chunksize); - echo $buffer; - flush(); - if ($retbytes) $cnt += strlen($buffer); + return $status; } - $status = fclose($handle); - if ($retbytes && $status) return $cnt; + function is_php_code($check_code) + { + $check_code = stripslashes($check_code); + $check_code = str_replace(' ', '', $check_code); + $check_code = strtolower($check_code); + + if (strpos($check_code, '') !== false || + strpos($check_code, 'language="php"') !== false || + strpos($check_code, "language='php'") !== false || + strpos($check_code, 'language=php') !== false) + { + return true; + } - return $status; -} + return false; + } -function is_php_code($check_code) -{ - $check_code = stripslashes($check_code); - $check_code = str_replace(' ', '', $check_code); - $check_code = strtolower($check_code); - if (strpos($check_code, '') !== false || - strpos($check_code, 'language="php"') !== false || - strpos($check_code, "language='php'") !== false || - strpos($check_code, 'language=php') !== false) + function check_permission_acp($perm) { + if (! check_permission($perm)) + { + if (! defined('NOPERM')) + define('NOPERM', 1); + + return false; + } + return true; } - return false; -} -function check_permission_acp($perm) -{ - if (!check_permission($perm)) - { - if (!defined('NOPERM')) define('NOPERM', 1); - return false; - } + //Проверка на наличие модуля Контакты и новых писем + function ContactsModuleCheck() { + global $AVE_DB, $AVE_Template; - return true; -} - -//Проверка на наличие модуля Контакты и новых писем -function ContactsModuleCheck() { - global $AVE_DB, $AVE_Template; - - $sql = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_module WHERE ModuleFunction = 'contact' and ModuleStatus = '1'"); - $enable = $sql->numrows(); - if ($enable != "0" || $enable != ""){ - $contacts = "1"; - $sql_num = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_modul_contact_info WHERE Aw_Zeit = '0'"); - $num_posts = $sql_num->numrows(); - } else { - $contacts = "0"; - } - $AVE_Template->assign('num_posts', $num_posts); - $AVE_Template->assign('contacts', $contacts); -} - -//Проверка на наличие модуля Логин -function LoginModuleCheck() { - global $AVE_DB, $AVE_Template; - - $sql = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_module WHERE ModuleFunction = 'mod_login' and ModuleStatus = '1'"); - $enable = $sql->numrows(); - if ($enable != "0" || $enable != ""){ - $login_menu = "1"; - } else { - $login_menu = "0"; + $sql = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_module WHERE ModuleFunction = 'contact' and ModuleStatus = '1'"); + $enable = $sql->numrows(); + if ($enable != "0" || $enable != ""){ + $contacts = "1"; + $sql_num = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_modul_contact_info WHERE Aw_Zeit = '0'"); + $num_posts = $sql_num->numrows(); + } else { + $contacts = "0"; + } + $AVE_Template->assign('num_posts', $num_posts); + $AVE_Template->assign('contacts', $contacts); } - $AVE_Template->assign('login_menu', $login_menu); -} - -//Выводим на главную список последних 15 документов -function DisplayMainDocuments() { - global $AVE_DB, $AVE_Template; - - $doc_start = array(); - $sql = $AVE_DB->Query(" - SELECT - doc.*, - rub.rubric_admin_teaser_template - FROM " . PREFIX . "_documents doc - LEFT JOIN " . PREFIX . "_rubrics AS rub ON rub.Id = doc.rubric_id - WHERE 1 = 1 - AND rub.rubric_docs_active = '1' - ORDER BY doc.document_published DESC LIMIT 0,10"); - while($row = $sql->fetchrow()) { - $row->rubric_title = showrubricName($row->rubric_id); - $row->document_title = stripslashes(htmlspecialchars_decode(pretty_chars($row->document_title))); - $row->document_breadcrum_title = stripslashes(htmlspecialchars_decode(pretty_chars($row->document_breadcrum_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) : '').'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); + + + //Проверка на наличие модуля Логин + function LoginModuleCheck() { + global $AVE_DB, $AVE_Template; + + $sql = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_module WHERE ModuleFunction = 'mod_login' and ModuleStatus = '1'"); + $enable = $sql->numrows(); + if ($enable != "0" || $enable != ""){ + $login_menu = "1"; + } else { + $login_menu = "0"; } - $AVE_Template->assign('doc_start', $doc_start); -} + $AVE_Template->assign('login_menu', $login_menu); + } -function showrubricName($id) { - global $AVE_DB, $AVE_Template; - $sql = $AVE_DB->Query("SELECT rubric_title FROM " . PREFIX . "_rubrics WHERE Id='$id'"); - $row = $sql->fetchrow(); - return $row->rubric_title; -} + //Выводим на главную список последних 15 документов + function DisplayMainDocuments() + { + global $AVE_DB, $AVE_Template; -function showuserName($id) { - global $AVE_DB, $AVE_Template; + $doc_start = array(); - $sql = $AVE_DB->Query("SELECT user_name FROM " . PREFIX . "_users WHERE Id='$id'"); - $row = $sql->fetchrow(); - return $row->user_name; -} + $sql = $AVE_DB->Query(" + SELECT + doc.*, + rub.rubric_admin_teaser_template + FROM " . PREFIX . "_documents doc + LEFT JOIN " . PREFIX . "_rubrics AS rub ON rub.Id = doc.rubric_id + WHERE 1 = 1 + AND rub.rubric_docs_active = '1' + ORDER BY doc.document_published DESC LIMIT 0,10"); + while($row = $sql->fetchrow()) { + $row->rubric_title = showrubricName($row->rubric_id); + $row->document_title = stripslashes(htmlspecialchars_decode(pretty_chars($row->document_title))); + $row->document_breadcrum_title = stripslashes(htmlspecialchars_decode(pretty_chars($row->document_breadcrum_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) : '').'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); + } -function cacheShow() { - global $AVE_Template; + function showrubricName($id) + { + global $AVE_DB, $AVE_Template; - $showCache = format_size(get_dir_size($AVE_Template->compile_dir)+get_dir_size($AVE_Template->cache_dir_root)); - echo json_encode(array($showCache, 'accept')); -} + $sql = $AVE_DB->Query("SELECT rubric_title FROM " . PREFIX . "_rubrics WHERE Id='$id'"); + $row = $sql->fetchrow(); + return $row->rubric_title; + } -function templateName($id) { - global $AVE_DB, $AVE_Template; + function showuserName($id) + { + global $AVE_DB, $AVE_Template; - $sql = $AVE_DB->Query(" - SELECT * FROM " . PREFIX . "_templates - WHERE Id = '$id' - "); - $row = $sql->fetchrow(); + $sql = $AVE_DB->Query("SELECT user_name FROM " . PREFIX . "_users WHERE Id='$id'"); + $row = $sql->fetchrow(); + return $row->user_name; + } - return $row->template_title; -} + function cacheShow() + { + global $AVE_Template; -function groupName($id) { - global $AVE_DB, $AVE_Template; + $showCache = format_size(get_dir_size($AVE_Template->compile_dir)+get_dir_size($AVE_Template->cache_dir_root)); + echo json_encode(array($showCache, 'accept')); + } - $sql = $AVE_DB->Query(" - SELECT * FROM " . PREFIX . "_user_groups - WHERE user_group = '$id' - "); - $row = $sql->fetchrow(); + function templateName($id) + { + global $AVE_DB, $AVE_Template; - return $row->user_group_name; -} + $sql = $AVE_DB->Query(" + SELECT * FROM " . PREFIX . "_templates + WHERE Id = '$id' + "); + $row = $sql->fetchrow(); + + return $row->template_title; + } + + function groupName($id) + { + global $AVE_DB, $AVE_Template; + + $sql = $AVE_DB->Query(" + SELECT * FROM " . PREFIX . "_user_groups + WHERE user_group = '$id' + "); + $row = $sql->fetchrow(); + return $row->user_group_name; + } ?> \ No newline at end of file diff --git a/admin/index.php b/admin/index.php index de36df9..3612aed 100644 --- a/admin/index.php +++ b/admin/index.php @@ -25,13 +25,16 @@ exit; } - require(BASE_DIR . '/admin/init.php'); + require (BASE_DIR . '/admin/init.php'); if (! isset($_SESSION['user_id'])) { @session_destroy(); - if (isset($_REQUEST['ajax']) && $_REQUEST['ajax'] == 'run' || ( !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' )) + if ( + isset($_REQUEST['ajax']) && $_REQUEST['ajax'] == 'run' + || (! empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' ) + ) { header($_SERVER['SERVER_PROTOCOL'] . ' 401 Unauthorised access', true); exit; @@ -69,16 +72,16 @@ } /* Вывод модулей на всех страницах */ - get_editable_module(); + getInstaledModules(); LoginModuleCheck(); $AVE_Template->assign('use_editor', get_settings('use_editor')); $AVE_Template->assign('user_avatar', getAvatar($_SESSION['user_id'],25)); - if (!isset($_REQUEST['do'])) $_REQUEST['do'] = ''; - if (!isset($_REQUEST['action'])) $_REQUEST['action'] = ''; - if (!isset($_REQUEST['sub'])) $_REQUEST['sub'] = ''; - if (!isset($_REQUEST['submit'])) $_REQUEST['submit'] = ''; + if (! isset($_REQUEST['do'])) $_REQUEST['do'] = ''; + if (! isset($_REQUEST['action'])) $_REQUEST['action'] = ''; + if (! isset($_REQUEST['sub'])) $_REQUEST['sub'] = ''; + if (! isset($_REQUEST['submit'])) $_REQUEST['submit'] = ''; //Шаблоны навигации $AVE_Template->assign('navi', $AVE_Template->fetch('navi/navi.tpl')); @@ -113,7 +116,7 @@ header("Cache-Control: no-store, no-cache, must-revalidate"); header("Expires: " . date("r")); - include(BASE_DIR . '/admin/' . $do . '.php'); + include (BASE_DIR . '/admin/' . $do . '.php'); if (defined('NOPERM')) $AVE_Template->assign('content', $config_vars['MAIN_NO_PERMISSION']); diff --git a/admin/init.php b/admin/init.php index 8ee0dd9..8b98bd9 100644 --- a/admin/init.php +++ b/admin/init.php @@ -1,43 +1,48 @@ Query(" - SELECT lang_alias_pref FROM " . PREFIX . "_settings_lang - WHERE lang_default = '1' -")->GetCell(); - -$_SESSION['admin_language'] = $lang_system; - -$AVE_Template = new AVE_Template(BASE_DIR . '/admin/templates'); -$AVE_Template->assign('tpl_dir', ABS_PATH . 'admin/templates'); - -// Файлы шаблонов для CodeMirror -$AVE_Template->assign('codemirror_connect', BASE_DIR . '/lib/redactor/codemirror/codemirror_connect.tpl'); -$AVE_Template->assign('codemirror_editor', BASE_DIR . '/lib/redactor/codemirror/codemirror_editor.tpl'); - -// Подключаем основные ланги -$AVE_Template->config_load(BASE_DIR . '/admin/lang/' . $_SESSION['admin_language'] . '/main.txt'); - -define('SESSION', session_id()); -$AVE_Template->assign('sess', SESSION); + /** + * AVE.cms + * + * @package AVE.cms + * @version 3.x + * @filesource + * @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru + * + * @license GPL v.2 + */ + + if (! defined('ACP')) + { + header('Location:index.php'); + exit; + } + + require (BASE_DIR . '/inc/init.php'); + + $AVE_Template = new AVE_Template(BASE_DIR . '/admin/templates'); + $AVE_Template->assign('tpl_dir', ABS_PATH . 'admin/templates'); + + require (BASE_DIR . '/admin/functions/func.admin.common.php'); + require (BASE_DIR . '/lib/redactor/ckeditor/adapters/ckeditor.php'); + + $lang_system = $AVE_DB->Query(" + SELECT + lang_alias_pref + FROM + " . PREFIX . "_settings_lang + WHERE + lang_default = '1' + ")->GetCell(); + + $_SESSION['admin_language'] = $lang_system; + + // Файлы шаблонов для CodeMirror + $AVE_Template->assign('codemirror_connect', BASE_DIR . '/lib/redactor/codemirror/codemirror_connect.tpl'); + $AVE_Template->assign('codemirror_editor', BASE_DIR . '/lib/redactor/codemirror/codemirror_editor.tpl'); + + // Подключаем основные ланги + $AVE_Template->config_load(BASE_DIR . '/admin/lang/' . $_SESSION['admin_language'] . '/main.txt'); + + define('SESSION', session_id()); + $AVE_Template->assign('sess', SESSION); ?> \ No newline at end of file diff --git a/admin/lang/bg/settings.txt b/admin/lang/bg/settings.txt index 0470c0d..4e09883 100644 --- a/admin/lang/bg/settings.txt +++ b/admin/lang/bg/settings.txt @@ -59,12 +59,12 @@ SETTINGS_PAGE_PREV = "Текст на линка "Предходна&q SETTINGS_MAIN_BREADCRUMBS = "Настройки за извеждането на «Breadcrumb»" SETTINGS_BREAD_BOX = "Контейнер «Breadcrumb»:
Пример: <ul class="breadcrumb">%s</ul>" -SETTINGS_BREAD_MAIN = "Показывать первый элемент: Главная страница:
Да/Нет" -SETTINGS_BREAD_HOST = "Добавлять адрес хоста в url:
Да/Нет" +SETTINGS_BREAD_MAIN = "Показвай първия елемент: Главна страница:
Да/Не" +SETTINGS_BREAD_HOST = "Добавяй адреса на хоста в url:
Да/Не" SETTINGS_BREAD_SEPPARATOR = "Разделител между линковете:
Пример: <li> → </li>" SETTINGS_BREAD_SEPP_USE = "Покажи:
Да/Не" SETTINGS_BREAD_BOX_LINK = "Контейнер за линка:
Пример: <li>%s</li>" -SETTINGS_BREAD_LINK_TPL = "Шаблон ссылки
Используются теги: [name], [link], [count]" +SETTINGS_BREAD_LINK_TPL = "Шаблон за линка
Използват се таговете: [name], [link], [count]" SETTINGS_BREAD_BOX_LASTLINK = "Показване на последния елемент:" SETTINGS_BREAD_SELF_BOX = "Контейнер за последния елемент:
Пример: <li class="active">%s</li>" diff --git a/admin/lang/ru/docs.txt b/admin/lang/ru/docs.txt index 7275e85..6d36551 100755 --- a/admin/lang/ru/docs.txt +++ b/admin/lang/ru/docs.txt @@ -297,4 +297,7 @@ DOC_SAVE_LOG_DOC = " документ" DOC_LANG = "Язык" DOC_LANG_ID = "Язык документа:" -DOC_LANG_SELECT = "Выберите язык" \ No newline at end of file +DOC_LANG_SELECT = "Выберите язык" + +// 3.25 +DOC_CLOSE_SEARCH_RUBRIC = "Вернуться в раздел, учитывая параметры поиска" \ No newline at end of file diff --git a/admin/lang/ru/groups.txt b/admin/lang/ru/groups.txt index c877a6b..93b14bf 100644 --- a/admin/lang/ru/groups.txt +++ b/admin/lang/ru/groups.txt @@ -2,14 +2,14 @@ UGROUP_TITLE = "Управление группами пользователей" UGROUP_TITLE2 = "Управление группой пользователей" UGROUP_TITLE_MENU = "Группы пользователей" -UGROUP_INFO = "В данном разделе приведен cписок всех групп пользователей в системе. Для каждой группы Вы можете назначить персональные права, которые разрешат или ограничат действия пользователей как в Панели управления, так и в Публичной части сайта." +UGROUP_INFO = "В данном разделе приведен список всех групп пользователей в системе. Для каждой группы Вы можете назначить персональные права, которые разрешат или ограничат действия пользователей как в Панели управления, так и в Публичной части сайта." UGROUP_ID = "ID" UGROUP_NAME = "Название группы" UGROUP_COUNT = "Пользователей в группе" UGROUP_ACTIONS = "Действия" UGROUP_IN_GROUP = "Просмотр списка пользователей, относящихся к данной группе" UGROUP_EDIT = "Редактировать наименование и права группы" -UGROUP_NO_PERMISSION = "Извините, но у Вас недостаточно прав для редакирования" +UGROUP_NO_PERMISSION = "Извините, но у Вас недостаточно прав для редактирования" UGROUP_DELETE = "Удалить данную группу" UGROUP_USERS_IN_GROUP = "В настоящий момент Вы не можете удалить данную группу, т.к. есть пользователи состоящие в этой группе." UGROUP_DELETE_CONFIRM = "Вы уверены, что хотите удалить данную группу?" @@ -49,11 +49,13 @@ gen_settings = "Доступ к управлению общими на gen_settings_more = "Доступ к управлению дополнительными настройками системы" gen_settings_countries = "Доступ к управлению списку стран" gen_settings_languages = "Доступ к управлению языками" +gen_settings_robots = "Доступ к редактированию файла robots.txt" +gen_settings_fcustom = "Доступ к редактированию файла func.custom.php" logs_view = "Доступ к просмотру системных сообщ" logs_clear = "Доступ к удалению системных сообщений" -db_actions = "Доступ к управлению базой данных (Резервное копирование, Востановление, Оптимизация)" +db_actions = "Доступ к управлению базой данных (Резервное копирование, Восстановление, Оптимизация)" modules_view = "Доступ к списку модулей" modules_admin = "Доступ к модулями (Настройка, Управление, Использование)" diff --git a/admin/lang/ru/rubs.txt b/admin/lang/ru/rubs.txt index e988636..31c66da 100755 --- a/admin/lang/ru/rubs.txt +++ b/admin/lang/ru/rubs.txt @@ -42,7 +42,7 @@ RUBRIK_LEGEND = "Значения пиктограмм" RUBRIK_NEW = "Создание новой рубрики" RUBRIK_NEW_TIP = "В данном разделе вы можете создать новую рубрику. Пожалуйста, укажите название новой рубрики и выберите шаблон для вывода." RUBRIK_BUTTON_NEW = "Создать рубрику" -RUBRIK_EDIT_FIELDS = "Управление полями и правами доступа к рубрике" + RUBRIK_DESCRIPTION = "Описание рубрики" RUBRIK_NO_FIELDS = "Внимание! Вы не создали ни одного поля. Пожалуйста, добавьте хотя бы одно поле." RUBRIK_FIELDS_INFO = "В данном разделе вы можете создать группу полей, которые будут использованы для документов в данной рубрике." @@ -84,6 +84,7 @@ RUBRIK_FIELD_DEFAULT = "Значение по умолчанию" RUBRIK_TEMPLATE_TIP = "В данном разделе, используя язык разметки HTML, вы должны создать шаблон оформления для документов при полном просмотре," RUBRIK_HTML = "Шаблон оформления рубрики" RUBRIK_HTML_2 = "Шаблон оформления HEADER" +RUBRIK_HTML_2_1 = "Шаблон оформления FOOTER" RUBRIK_HTML_3 = "Шаблон оформления TEASER" RUBRIK_HTML_4 = "Шаблон оформления ADMIN TEASER" RUBRIK_PHP_DENIDED = "Ошибка!
Вы не имеете прав на редактирование шаблона рубрики, так как он используется PHP код, а вы не имеете прав на использование PHP кода." @@ -136,9 +137,9 @@ RUBRIK_MOVE = "Переместить" RUBRIK_REQUEST_TPL = "Шаблон вывода поля в запросе" RUBRIK_BREADCRUMB = "Систменый тег Хлебных крошек" RUBRIK_CODE = "Исполняемый код для рубрик" -RUBRIK_START_CODE = "Код, выполняемый перед загрузкой документа" -RUBRIK_CODE_START = "Код, выполняемый перед сохранением документа" -RUBRIK_CODE_END = "Код, выполняемый после сохранения документа" +RUBRIK_START_CODE = "Код, выполняемый перед показом документа в публичной части" +RUBRIK_CODE_START = "Код, выполняемый ПЕРЕД сохранением документа" +RUBRIK_CODE_END = "Код, выполняемый ПОСЛЕ сохранения документа" RUBRIK_TAGS = "Тег" RUBRIK_TAGS_ID = "Тег ID" RUBRIK_TAGS_ALIAS = "Тег Алиас" @@ -277,4 +278,49 @@ RUBRIC_TMPLS_NO_ITEMS = "Сообщение:
В на RUBRIC_TMPLS_FROM = "Создать копию основного шаблона" RUBRIC_TMPLS_INNAME = "Введите наименование шаблона" RUBRIC_TEMPL_REPORT = "Отредактировал дополнительный шаблон рубрики" -RUBRIC_TMPLS_LOG_DEL = "Удалил дополнительный шаблон рубрики" \ No newline at end of file +RUBRIC_TMPLS_LOG_DEL = "Удалил дополнительный шаблон рубрики" + +// 3.24 +RUBRIC_WARNING_TIP = "Внимание! Пожалуйста, будьте предельно внимательны и помните, что неверные параметры могут сделать систему неработоспособной." + +RUBRIK_EDIT_FIELDS = "Управление полями" +RUBRIK_EDIT_RULES = "Управление правами доступа к рубрике" + +RUBRIC_TABLE_BTN_FIELDS = "Поля рубрики" +RUBRIC_TABLE_BTN_FTEMPLATES = "Шаблоны полей" +RUBRIC_TABLE_BTN_FGROUPS = "Группы полей" +RUBRIC_TABLE_BTN_TEMPLATES = "Шаблон рубрики" +RUBRIC_TABLE_BTN_CODE = "Исполняемый код" +RUBRIC_TABLE_BTN_RULES = "Права доступа" + +RUBRIK_EDIT_CODE_TIP = "Внимание! Пожалуйста, будьте предельно внимательны и помните, что неверные параметры могут сделать систему неработоспособной." +RUBRIK_EDIT_CODE_LOAD_TIP = "Доступ к данным:
$this->curentdoc - Данные документа, перед подстановкой их в шаблон вывода" +RUBRIK_EDIT_CODE_BEF_TIP = "Доступ к данным:
$data - Все данные документа
$data['feld'] - Данные полей документа
$rubric_id - ID рубрики" +RUBRIK_EDIT_CODE_AFT_TIP = "Доступ к данным:
$data - Все данные документа
$rubric_id - ID рубрики
$document_id - ID документа - Число или False" + +RUBRIK_FIELDS_TEMPLATES_H1 = "Управление шаблонами полей" +RUBRIK_FIELDS_TEMPLATES_H2 = "Шаблоны полей" +RUBRIK_FIELDS_TEMPLATES_T1 = "Создавать/Редактировать/Удалять шаблоны полей (tpl)" +RUBRIK_FIELDS_TEMPLATES_T2 = "Редактировать шаблоны вывода полей" +RUBRIK_FIELDS_TEMPLATES_LIST = "Список типов полей используемых в рубрике" +RUBRIK_FIELDS_TEMPLATES_FNAME = "Наименование поля" +RUBRIK_FIELDS_TEMPLATES_FFUNC = "Функция" +RUBRIK_FIELDS_TEMPLATES_FTEMP = "Шаблон .tpl (по умолчанию)" +RUBRIK_FIELDS_TEMPLATES_FTEMPL = "Шаблон .tpl по ID поля" +RUBRIK_FIELDS_TEMPLATES_PANEL = "Панель" +RUBRIK_FIELDS_TEMPLATES_DOC = "Документ" +RUBRIK_FIELDS_TEMPLATES_REQ = "Запрос" +RUBRIK_FIELDS_TEMPLATES_DB = "База данных" +RUBRIK_FIELDS_TEMPLATES_BACK = "К списку типов полей" +RUBRIK_FIELDS_NO_TEMPLATES = "Нет шаблона" +RUBRIK_FIELDS_EDIT_RUBRIC = "Рубрика" +RUBRIK_FIELDS_EDIT_FIELD = "Поле:" +RUBRIK_FIELDS_EDIT_TYPE = "Тип:" +RUBRIK_FIELDS_EDIT_TPL_ADM = "Шаблон для панели" +RUBRIK_FIELDS_EDIT_TPL_DOC = "Шаблона вывода в документе" +RUBRIK_FIELDS_EDIT_TPL_REQ = "Шаблона вывода в запросе" +RUBRIK_FIELDS_EDIT_TPL_CREAT = "Создание шаблона из основного файла" +RUBRIK_FIELDS_EDIT_TPL_EDIT = "Редактирование шаблона" +RUBRIK_FIELDS_EDIT_NO_TPL = "Отсутсвует основной файл шаблона" +RUBRIC_TMPLS_CREAT = "Создать" +RUBRIC_TMPLS_DELETE = "Удалить" \ No newline at end of file diff --git a/admin/lang/ru/settings.txt b/admin/lang/ru/settings.txt index d62493d..24ab94a 100644 --- a/admin/lang/ru/settings.txt +++ b/admin/lang/ru/settings.txt @@ -137,3 +137,11 @@ pagination_start_label = "Текст ссылки "Первая"" pagination_end_label = "Текст ссылки "Последняя"" pagination_next_label = "Текст ссылки "Следующая"" pagination_prev_label = "Текст ссылки "Предыдущая"" + +// v3.24 +SETTINGS_SAVED_ERR_FILE = "Ошибка при сохранении файла. Попробуйте снова." +SETTINGS_SAVED_FILE = "Файл успешно сохранен." +SETTINGS_FILE_EDIT_H = "Редактирование файла" +SETTINGS_FILE_CONTENT = "Содержимое файла:" +SETTINGS_FILE_ROBOTS = "Файл robots.txt" +SETTINGS_FILE_CUSTOM = "Файл func.custom.php" diff --git a/admin/lang/ru/templates.txt b/admin/lang/ru/templates.txt index b811b50..aa091c8 100644 --- a/admin/lang/ru/templates.txt +++ b/admin/lang/ru/templates.txt @@ -80,6 +80,7 @@ TEMPLATES_NAVIGATION = "Меню навигации (ххх - номер ме TEMPLATES_IF_PRINT = "Содержимое будет показано при печати." TEMPLATES_DONOT_PRINT = "Содержание не будет показано при печати" TEMPLATES_RUBHEADER = "Настраивается в шаблоне рубрики
(Шаблон оформления HEADER)" +TEMPLATES_RUBFOOTER = "Настраивается в шаблоне рубрики
(Шаблон оформления FOOTER)" TEMPLATES_NO_ITEMS = "В настоящий момент нет файлов" TEMPLATES_DOMAIN = "Системный тег вывода доменного имени" TEMPLATES_DOCDB = "Системный тег вывода поля документа из БД" diff --git a/admin/modules.php b/admin/modules.php index df79a1b..0ab7fcb 100644 --- a/admin/modules.php +++ b/admin/modules.php @@ -1,99 +1,102 @@ config_load(BASE_DIR . '/admin/lang/' . $_SESSION['admin_language'] . '/modules.txt', 'modules'); - -if (!empty($_REQUEST['moduleaction'])) -{ - if (!check_permission('mod_' . $_REQUEST['mod'])) + if (! defined('ACP')) { - echo $AVE_Template->get_config_vars('MAIN_NO_PERM_MODULES'); + header('Location:index.php'); exit; } -} -if (!empty($_REQUEST['module'])) -{ - $module_path = preg_replace('/[^\w]/', '', $_REQUEST['module']); - if (!empty($module_path)) define('MODULE_PATH', $module_path); -} + $AVE_Template->config_load(BASE_DIR . '/admin/lang/' . $_SESSION['admin_language'] . '/modules.txt', 'modules'); -switch($_REQUEST['action']) -{ - case '': - if (check_permission_acp('modules_view')) + if (! empty($_REQUEST['moduleaction'])) + { + if (! check_permission('mod_' . $_REQUEST['mod'])) { - $AVE_Module->moduleList(); + echo $AVE_Template->get_config_vars('MAIN_NO_PERM_MODULES'); + exit; } - break; + } - case 'quicksave': - if (check_permission_acp('modules_system')) - { - $AVE_Module->moduleOptionsSave(); - } - break; + if (! empty($_REQUEST['module'])) + { + $module_path = preg_replace('/[^\w]/', '', $_REQUEST['module']); - case 'install': - case 'reinstall': - if (check_permission_acp('modules_system')) - { - $AVE_Module->moduleInstall(); - } - break; + if (! empty($module_path)) + define('MODULE_PATH', $module_path); + } - case 'update': - if (check_permission_acp('modules_system')) - { - $AVE_Module->moduleUpdate(); - } - break; + switch($_REQUEST['action']) + { + case '': + if (check_permission_acp('modules_view')) + { + $AVE_Module->moduleList(); + } + break; - case 'delete': - if (check_permission_acp('modules_system')) - { - $AVE_Module->moduleDelete(); - } - break; + case 'quicksave': + if (check_permission_acp('modules_system')) + { + $AVE_Module->moduleOptionsSave(); + } + break; - case 'onoff': - if (check_permission_acp('modules_system')) - { - $AVE_Module->moduleStatusChange(); - } - break; + case 'install': + case 'reinstall': + if (check_permission_acp('modules_system')) + { + $AVE_Module->moduleInstall(); + } + break; - case 'modedit': - if (check_permission_acp('modules_admin')) - { - $mod_path = preg_replace('/[^\w]/', '', $_REQUEST['mod']); - $mod_path = BASE_DIR . '/modules/' . $mod_path . '/module.php'; - if (is_file($mod_path)) include($mod_path); - } - break; + case 'update': + if (check_permission_acp('modules_system')) + { + $AVE_Module->moduleUpdate(); + } + break; - case 'remove': - if (check_permission_acp('modules_system')) - { - $AVE_Module->moduleRemove($_REQUEST['module']); - } - break; -} + case 'delete': + if (check_permission_acp('modules_system')) + { + $AVE_Module->moduleDelete(); + } + break; + + case 'onoff': + if (check_permission_acp('modules_system')) + { + $AVE_Module->moduleStatusChange(); + } + break; + case 'modedit': + if (check_permission_acp('modules_admin')) + { + $mod_path = preg_replace('/[^\w]/', '', $_REQUEST['mod']); + $mod_path = BASE_DIR . '/modules/' . $mod_path . '/module.php'; + + if (is_file($mod_path)) + include($mod_path); + } + break; + + case 'remove': + if (check_permission_acp('modules_system')) + { + $AVE_Module->moduleRemove($_REQUEST['module']); + } + break; + } ?> \ No newline at end of file diff --git a/admin/rubs.php b/admin/rubs.php index b81f68a..80ca6a8 100755 --- a/admin/rubs.php +++ b/admin/rubs.php @@ -73,21 +73,22 @@ switch($_REQUEST['action']) $Rtemplate = $_POST['rubric_template']; $Htemplate = $_POST['rubric_header_template']; + $Ftemplate = $_POST['rubric_footer_template']; $Ttemplate = $_POST['rubric_teaser_template']; $Atemplate = $_POST['rubric_admin_teaser_template']; - $check_code = strtolower($Rtemplate.$Htemplate.$Ttemplate.$Atemplate); + $check_code = strtolower($Rtemplate.$Htemplate.$Ttemplate.$Atemplate.$Ftemplate); $ok = true; - if((is_php_code($check_code)) && !check_permission('rubric_php') ) + if ((is_php_code($check_code)) && !check_permission('rubric_php') ) { $AVE_Template->assign('php_forbidden', 1); $ok = false; } - if(! $ok) + if (! $ok) { $message = $AVE_Template->get_config_vars('RUBRIC_SAVED_PHP_ERR'); $header = $AVE_Template->get_config_vars('RUBRIC_ERROR'); @@ -102,11 +103,10 @@ switch($_REQUEST['action']) { $AVE_Rubric->rubricTemplateShow(1); } - } else { - $AVE_Rubric->rubricTemplateSave($Rtemplate, $Htemplate, $Ttemplate, $Atemplate); + $AVE_Rubric->rubricTemplateSave($Rtemplate, $Htemplate, $Ttemplate, $Atemplate, $Ftemplate); } break; } @@ -556,6 +556,104 @@ switch($_REQUEST['action']) $AVE_Template->assign('content', $AVE_Template->fetch('error.tpl')); } break; + + case 'rules': + if (check_permission('rubric_edit')) + { + switch($_REQUEST['sub']) + { + case '': + switch($_REQUEST['submit']) + { + case 'saveperms': + if (check_permission('rubric_perms')) + $AVE_Rubric->rubricPermissionSave((int)$_REQUEST['Id']); + break; + } + } + $AVE_Rubric->rubricRulesShow((int)$_REQUEST['Id'], null); + break; + } + else + { + $AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_CHANGE1')); + $AVE_Template->assign('content', $AVE_Template->fetch('error.tpl')); + } + break; + + case 'ftlist': + if (check_permission('rubric_edit')) + { + $AVE_Rubric->ShowFields(); + } + else + { + $AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_PERMISSION')); + $AVE_Template->assign('content', $AVE_Template->fetch('error.tpl')); + } + break; + + case 'ftshowfield': + if (check_permission('rubric_edit')) + { + $AVE_Rubric->ShowFieldsByType($_REQUEST['type']); + } + else + { + $AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_PERMISSION')); + $AVE_Template->assign('content', $AVE_Template->fetch('error.tpl')); + } + break; + + + case 'ftcreate': + if (check_permission('rubric_edit')) + { + $AVE_Rubric->EditFieldTpl((int)$_REQUEST['id'], $_REQUEST['fld'], $_REQUEST['type']); + } + else + { + $AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_PERMISSION')); + $AVE_Template->assign('content', $AVE_Template->fetch('error.tpl')); + } + break; + + case 'ftedit': + if (check_permission('rubric_edit')) + { + $AVE_Rubric->EditFieldTpl((int)$_REQUEST['id'], $_REQUEST['fld'], $_REQUEST['type']); + } + else + { + $AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_PERMISSION')); + $AVE_Template->assign('content', $AVE_Template->fetch('error.tpl')); + } + break; + + case 'ftsave': + if (check_permission('rubric_edit')) + { + $AVE_Rubric->SaveFieldTpl((int)$_REQUEST['field_id'], $_REQUEST['field_name'], $_REQUEST['field_type'], $_REQUEST['func']); + } + else + { + $AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_PERMISSION')); + $AVE_Template->assign('content', $AVE_Template->fetch('error.tpl')); + } + break; + + + case 'ftdelete': + if (check_permission('rubric_edit')) + { + $AVE_Rubric->DeleteFieldTpl((int)$_REQUEST['id'], $_REQUEST['fld'], $_REQUEST['type'], $_REQUEST['func']); + } + else + { + $AVE_Template->assign('erorr', $AVE_Template->get_config_vars('RUBRIK_NO_PERMISSION')); + $AVE_Template->assign('content', $AVE_Template->fetch('error.tpl')); + } + break; } ?> diff --git a/admin/settings.php b/admin/settings.php index cb734ff..21c108a 100644 --- a/admin/settings.php +++ b/admin/settings.php @@ -172,6 +172,15 @@ switch($_REQUEST['action']) $AVE_Settings->settingsPaginationsDel(); break; //-- v3.2 -} + //-- v3.24 + case 'robots': + $AVE_Settings->editRobots(); + break; + + case 'custom': + $AVE_Settings->editCustom(); + break; + //-- v3.24 +} ?> \ No newline at end of file diff --git a/admin/start.php b/admin/start.php index 0388513..040683b 100644 --- a/admin/start.php +++ b/admin/start.php @@ -18,7 +18,7 @@ if (!defined('ACP')) } get_ave_info(); -get_editable_module(); +getInstaledModules(); DisplayMainDocuments(); get_online_users(); getLogRecords(); diff --git a/admin/templates/css/main.css b/admin/templates/css/main.css index cfde4d6..ed0de45 100644 --- a/admin/templates/css/main.css +++ b/admin/templates/css/main.css @@ -413,6 +413,20 @@ input, textarea { box-sizing:border-box; } a.btn{font-size: 10px;font-weight: bold;text-transform: uppercase;padding: 4px 12px;cursor: pointer;font-family: Arial, Helvetica, sans-serif;line-height: 12px;} a.button, span.button { padding: 4px 10px; } +.topBtn { + width: 100%; + display: block; + padding: 4px 0 !important; + text-align: center; + height: 22px; + line-height: 22px; + border: none !important; +} + +.tableButtons td { + padding: 0 10px; +} + /* ========== Pagination ========== */ .pagination { margin: auto; width: auto; text-align: center; margin-top: 40px; } diff --git a/admin/templates/documents/doc_search.tpl b/admin/templates/documents/doc_search.tpl index da559e4..20c63ba 100644 --- a/admin/templates/documents/doc_search.tpl +++ b/admin/templates/documents/doc_search.tpl @@ -34,20 +34,19 @@ }, speed: 5, loadOpen: function(elem, opts) { - $(".mainForm select").not("[multiple*=multiple]").styler({ - selectVisibleOptions: 5, - selectSearch: false - }); elem.next().show(); }, loadClose: function(elem, opts) { - $(".mainForm select").not("[multiple*=multiple]").styler({ - selectVisibleOptions: 5, - selectSearch: false - }); elem.next().hide(); } }); + + $('.collapsible').on('click', function() { + setTimeout(function() { + AveAdmin.sticky_panel_refresh(); + AveAdmin.select_form(); + }, 10); + }); {/literal} $('#document_expire').datepicker({ldelim} diff --git a/admin/templates/documents/form.tpl b/admin/templates/documents/form.tpl index 696a71f..fbe6436 100755 --- a/admin/templates/documents/form.tpl +++ b/admin/templates/documents/form.tpl @@ -625,6 +625,7 @@ $(document).ready(function(){ldelim}
{#DOC_MAIN_CONTENT#}
+ @@ -633,12 +634,15 @@ $(document).ready(function(){ldelim} {if $document->count_groups > 1} - + {/if} {foreach from=$document_field_group.fields item=field} + diff --git a/admin/templates/js/main.js b/admin/templates/js/main.js index 72adcfa..7917cda 100644 --- a/admin/templates/js/main.js +++ b/admin/templates/js/main.js @@ -506,10 +506,10 @@ var AveAdmin = { } }); - setTimeout(function() { - AveAdmin.sticky_panel_refresh(); - }, 1); - + setTimeout(function() { + AveAdmin.sticky_panel_refresh(); + AveAdmin.select_form(); + }, 10); }, //Окно очистки кэша + Сессий diff --git a/admin/templates/main.tpl b/admin/templates/main.tpl index f1e92ef..5caa569 100644 --- a/admin/templates/main.tpl +++ b/admin/templates/main.tpl @@ -1,300 +1,294 @@ - - - - - {#MAIN_PAGE_TITLE#} - {*#SUB_TITLE#*} ({$smarty.session.user_name|escape}) - - - - - - - - - - - - - - - - - - - - - {include file='scripts.tpl'} - - - - - + + + {rdelim}); + - + - + -
- -
+
+ +
- -
-
-
-
- {if $user_avatar} - {$smarty.session.user_name|escape} - {else} - - {/if} - {#MAIN_USER_ONLINE#} {$smarty.session.user_name|escape} -
-
- +
+
-
- - - + + - -
+ +
- -
- {**} + +
+ +
- -
+ +
+ {$content} +
- -
- {$content} +
-
-
- - - -
{if $document_field_group.group_title}{$document_field_group.group_title}{else}{#DOC_FIELD_G_UNKNOW#}{/if}
{if $document_field_group.group_title}{$document_field_group.group_title}{else}{#DOC_FIELD_G_UNKNOW#}{/if}
+ {$field.Id} + {$field.rubric_field_title|escape} {if $field.rubric_field_description} diff --git a/admin/templates/documents/form_after.tpl b/admin/templates/documents/form_after.tpl index f496a76..5fc3d70 100644 --- a/admin/templates/documents/form_after.tpl +++ b/admin/templates/documents/form_after.tpl @@ -8,12 +8,15 @@ diff --git a/admin/templates/groups/perms.tpl b/admin/templates/groups/perms.tpl index ad4b609..728589c 100644 --- a/admin/templates/groups/perms.tpl +++ b/admin/templates/groups/perms.tpl @@ -62,8 +62,10 @@ {foreach from=$modules item=module} - ModuleFunction, $g_group_permissions) || in_array('alles', $g_group_permissions)} checked="checked"{/if}{if $smarty.request.Id == 1 || $smarty.request.Id == $PAGE_NOT_FOUND_ID || in_array('alles', $g_group_permissions)} disabled="disabled"{/if}> + {if $module.status == 1 && $module.ModuleIsFunction == 1} +
+ {/if} {/foreach}
+ + + + + + + + + + + + +
+ {#RUBRIC_TABLE_BTN_FIELDS#} + + {#RUBRIC_TABLE_BTN_FGROUPS#} + + {#RUBRIC_TABLE_BTN_TEMPLATES#} + + {if check_permission('rubric_code')} + {#RUBRIC_TABLE_BTN_CODE#} + {/if} + + {#RUBRIC_TABLE_BTN_RULES#} +
+ + + + {foreach from=$rubrics item=rubric} +
+
+
{$main.name} ({$main.id})
+ +
+ + + + + + + + + + + + + + + + + + + + + + {foreach from=$rubric.fields item=field} + + + + + + + + + {/foreach} + +
Id{#RUBRIK_FIELDS_TEMPLATES_FNAME#}{#RUBRIK_FIELDS_TEMPLATES_FTEMPL#}{#RUBRIK_FIELDS_TEMPLATES_DB#}
{#RUBRIK_FIELDS_TEMPLATES_PANEL#}{#RUBRIK_FIELDS_TEMPLATES_DOC#}{#RUBRIK_FIELDS_TEMPLATES_REQ#}
{$field.id}{$field.title} + {if $field.adm_main} + {if $field.adm_tpl} + {#RUBRIC_TMPLS_EDIT#} +
+ {#RUBRIC_TMPLS_DELETE#} + {else} + {#RUBRIC_TMPLS_CREAT#} + {/if} + {else} + {#RUBRIK_FIELDS_NO_TEMPLATES#} + {/if} +
+ {if $field.doc_main} + {if $field.doc_tpl} + {#RUBRIC_TMPLS_EDIT#} +
+ {#RUBRIC_TMPLS_DELETE#} + {else} + {#RUBRIC_TMPLS_CREAT#} + {/if} + {else} + {#RUBRIK_FIELDS_NO_TEMPLATES#} + {/if} +
+ {if $field.req_main} + {if $field.req_tpl} + {#RUBRIC_TMPLS_EDIT#} +
+ {#RUBRIC_TMPLS_DELETE#} + {else} + {#RUBRIC_TMPLS_CREAT#} + {/if} + {else} + {#RUBRIK_FIELDS_NO_TEMPLATES#} + {/if} +
+ +
+
+ {/foreach} + +{include file="$codemirror_connect"} \ No newline at end of file diff --git a/admin/templates/rubs/_fields_list.tpl b/admin/templates/rubs/_fields_list.tpl new file mode 100755 index 0000000..a7f8199 --- /dev/null +++ b/admin/templates/rubs/_fields_list.tpl @@ -0,0 +1,136 @@ + + +
+
{#RUBRIK_FIELDS_TEMPLATES_H2#}
+
+ +
+
+
    +
  • {#RUBRIK_FIELDS_TEMPLATES_T1#}
  • +
  • {#RUBRIK_FIELDS_TEMPLATES_T2#}
  • +
+
+
+ + + + + + + + + + + + + + +
+ {#RUBRIC_TABLE_BTN_FIELDS#} + + {#RUBRIC_TABLE_BTN_FGROUPS#} + + {#RUBRIC_TABLE_BTN_TEMPLATES#} + + {if check_permission('rubric_code')} + {#RUBRIC_TABLE_BTN_CODE#} + {/if} + + {#RUBRIC_TABLE_BTN_RULES#} +
+ + + +
+
+
{#RUBRIK_FIELDS_TEMPLATES_LIST#}
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + {foreach from=$fields item=field key=number} + {if in_array($field.id, $enable)} + + + + + + + + + + {/if} + {/foreach} + +
{#RUBRIK_FIELDS_TEMPLATES_FNAME#}{#RUBRIK_FIELDS_TEMPLATES_FFUNC#}{#RUBRIK_FIELDS_TEMPLATES_FTEMP#}
{#RUBRIK_FIELDS_TEMPLATES_PANEL#}{#RUBRIK_FIELDS_TEMPLATES_DOC#}{#RUBRIK_FIELDS_TEMPLATES_REQ#}
+ {$field.name} + + {$field.id} + + {foreach from=$exists item=exist key=key} + {if $field.id == $key} + {if $exist.adm} + {#RUBRIC_TMPLS_EDIT#} + {/if} + {/if} + {/foreach} + + {foreach from=$exists item=exist key=key} + {if $field.id == $key} + {if $exist.doc} + {#RUBRIC_TMPLS_EDIT#} + {/if} + {/if} + {/foreach} + + {foreach from=$exists item=exist key=key} + {if $field.id == $key} + {if $exist.req} + {#RUBRIC_TMPLS_EDIT#} + {/if} + {/if} + {/foreach} +
+
+ +{include file="$codemirror_connect"} \ No newline at end of file diff --git a/admin/templates/rubs/code.tpl b/admin/templates/rubs/code.tpl index 494a604..0988502 100644 --- a/admin/templates/rubs/code.tpl +++ b/admin/templates/rubs/code.tpl @@ -1,11 +1,42 @@
{#RUBRIK_EDIT_CODE_T#}
+
+
+ {#RUBRIK_EDIT_CODE_TIP#} +
+
+ + + + + + + + + + + + + + +
+ {#RUBRIC_TABLE_BTN_FIELDS#} + + {#RUBRIC_TABLE_BTN_FTEMPLATES#} + + {#RUBRIC_TABLE_BTN_FGROUPS#} + + {#RUBRIC_TABLE_BTN_TEMPLATES#} + + {#RUBRIC_TABLE_BTN_RULES#} +
+ @@ -50,11 +86,6 @@ var sess = '{$sess}';
{#RUBRIK_CODE#}
-
@@ -79,6 +110,14 @@ var sess = '{$sess}'; + + + +
+ {#RUBRIK_EDIT_CODE_BEF_TIP#} + + {#RUBRIK_EDIT_CODE_AFT_TIP#} +
diff --git a/admin/templates/rubs/field_template.tpl b/admin/templates/rubs/field_template.tpl index 9f6a230..8782b9c 100644 --- a/admin/templates/rubs/field_template.tpl +++ b/admin/templates/rubs/field_template.tpl @@ -24,7 +24,7 @@
- +
diff --git a/admin/templates/rubs/fields.tpl b/admin/templates/rubs/fields.tpl index 50ed23c..bc58128 100644 --- a/admin/templates/rubs/fields.tpl +++ b/admin/templates/rubs/fields.tpl @@ -124,14 +124,14 @@ diff --git a/admin/templates/rubs/fields_groups.tpl b/admin/templates/rubs/fields_groups.tpl index 806a68b..f6b5dd7 100644 --- a/admin/templates/rubs/fields_groups.tpl +++ b/admin/templates/rubs/fields_groups.tpl @@ -1,13 +1,44 @@
{#RUBRIK_FIELDS_GROUPS#}
+
+
+ {#RUBRIK_FIELDS_GROUPS_TIP#} +
+
+ + + + + + + + + + + + + + +
+ {#RUBRIC_TABLE_BTN_FIELDS#} + + {#RUBRIC_TABLE_BTN_FTEMPLATES#} + + {#RUBRIC_TABLE_BTN_TEMPLATES#} + + {if check_permission('rubric_code')} + {#RUBRIC_TABLE_BTN_CODE#} + {/if} + + {#RUBRIC_TABLE_BTN_RULES#} +
+ diff --git a/fields/image_multi_new_3inputs/.gitkeep b/fields/image_multi_new_3inputs/.gitkeep deleted file mode 100755 index e69de29..0000000 diff --git a/fields/image_multi_new_3inputs/css/.gitkeep b/fields/image_multi_new_3inputs/css/.gitkeep deleted file mode 100755 index e69de29..0000000 diff --git a/fields/image_multi_new_3inputs/css/field.css b/fields/image_multi_new_3inputs/css/field.css deleted file mode 100755 index 5a56003..0000000 --- a/fields/image_multi_new_3inputs/css/field.css +++ /dev/null @@ -1,96 +0,0 @@ -.cascad3 { - position: relative; -} - -.cascad3_item { - display: inline-block; - margin: 3px; - width: 120px; - height: 226px; - background-color: rgba(255, 255, 255, 0.5); - border: solid 1px #eaeaea; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - position: relative; - text-align: center; -} - -.cascad3_item:hover { - background-color: rgba(255, 255, 255, 1.0); - border: solid 1px rgba(234, 234, 234, 0.5); - -webkit-box-shadow: 0 0 5px 2px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 0 5px 2px rgba(0, 0, 0, 0.1); - box-shadow: 0 0 5px 2px rgba(0, 0, 0, 0.1); -} - -.cascad3_item:hover > .header { - background-color: rgba(210, 210, 210, 0.3); -} - -.cascad3_item .header { - background-color: rgba(210, 210, 210, 0.5); - height: 26px; - margin-bottom: 10px; - cursor: move; - border-radius: 5px 5px 0 0; -} - -.cascad3_item .image { - background-color: #fcfcfc; - border: solid 1px #eaeaea; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; -} - -.cascad3_item input { - display: inline-block; - width: 100px; - margin-top: 5px; - border-radius: 0 0 2px 2px; - border: 1px solid #eaeaea !important; - resize: none !important; - box-shadow: none !important; - -webkit-box-shadow: none !important; - -moz-box-shadow: none !important; - padding: 3px !important; - box-sizing: border-box !important; - -webkit-box-sizing: border-box !important; - -moz-box-sizing: border-box !important; -} - -.cascad3_item .view { - position: absolute; - top: 3px; - left: 3px; - cursor: pointer !important; -} - -.cascad3_item .delete { - position: absolute; - top: 3px; - right: 3px; - cursor: pointer !important; -} - -.cascad3_item .info { - position: absolute; - top: 30px; - right: 3px; - cursor: pointer !important; -} - -.cascad3_sortable > .ui-state-highlight { - display: inline-block; - margin: 5px; - width: 120px; - height: 200px; - background-color: rgba(255,255,255,0.5); !important; - border: solid 1px #eaeaea; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - position: relative; - text-align: center; -} \ No newline at end of file diff --git a/fields/image_multi_new_3inputs/field.php b/fields/image_multi_new_3inputs/field.php deleted file mode 100755 index 62c41f7..0000000 --- a/fields/image_multi_new_3inputs/field.php +++ /dev/null @@ -1,307 +0,0 @@ -config_load($lang_file, 'lang'); - $AVE_Template->assign('config_vars', $AVE_Template->get_config_vars()); - $AVE_Template->config_load($lang_file, 'admin'); - - $res = 0; - - $iniset_count = ini_get('max_file_uploads'); - - switch ($action) - { - case 'edit': - - $items = array(); - $items = unserialize($field_value); - $image_items = array(); - - if($items != false){ - - foreach($items as $k => $v){ - $image_item = explode('|', $v); - - $image[$k]['url'] = $image_item[0]; - $image[$k]['thumb'] = ($image_item[0] != '') ? make_thumbnail(array('size' => 'f100x100', 'link' => $image_item[0])) : $img_pixel; - $image[$k]['desc'] = (isset($image_item[1])) ? htmlspecialchars($image_item[1], ENT_QUOTES) : ''; - $image[$k]['desc2'] = (isset($image_item[2])) ? htmlspecialchars($image_item[2], ENT_QUOTES) : ''; - $image[$k]['desc3'] = (isset($image_item[3])) ? htmlspecialchars($image_item[3], ENT_QUOTES) : ''; - } - - if (!empty($image)) { - $image_items = $image; - } - } - - $show_upload = true; - - if(preg_match("/%id/i", $default)) - { - if ($_REQUEST['action'] != 'new') { - $path_upload = trim(@str_replace('%id', $_REQUEST['Id'], $default), '/'); - $show_upload = true; - } else { - $path_upload = (!empty($default)) ? trim($default, '/') : ''; - $show_upload = false; - } - } - else - { - $path_upload = (!empty($default)) ? $default : ''; - $show_upload = true; - } - - $dir_upload = '/' . UPLOAD_DIR . '/' . ((!empty($path_upload)) ? $path_upload . '/' : ''); - - $tpl_file = get_field_tpl($tpl_dir, $field_id, 'admin'); - - $AVE_Template->assign('max_files', $AVE_Template->get_config_vars('max_f_f') . $iniset_count); - $AVE_Template->assign('dir_upload', $AVE_Template->get_config_vars('upl_dir') . $dir_upload); - $AVE_Template->assign('show_upload', $show_upload); - - $AVE_Template->assign('field_dir', $fld_name); - $AVE_Template->assign('images', $image_items); - $AVE_Template->assign('field_id', $field_id); - $AVE_Template->assign('doc_id', (int)$_REQUEST['Id']); - return $AVE_Template->fetch($tpl_file); - break; - - case 'doc': - - $items = (isset($field_value)) ? unserialize($field_value) : array(); - - $res = array(); - - if($items != false){ - foreach($items as $image_item) - { - $image_item = clean_php($image_item); - $field_param = explode('|', $image_item); - if($image_item){ - if ($tpl_empty) - { - $image_item = $field_param; - } - else - { - $image_item = preg_replace_callback( - '/\[tag:parametr:(\d+)\]/i', - function($data) use($field_param) - { - return $field_param[(int)$data[1]]; - }, - $tpl - ); - - $image_item = preg_replace_callback( - '/\[tag:watermark:(.+?):([a-zA-Z]+):([0-9]+)\]/', - create_function( - '$m', - 'return watermarks(\'$m[1]\', \'$m[2]\', $m[3]);' - ), - $image_item - ); - - $image_item = preg_replace_callback('/\[tag:([r|c|f|t|s]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $image_item); - } - } - $res[] = $image_item; - } - } - - $tpl_file = get_field_tpl($tpl_dir, $field_id, 'doc'); - - if($tpl_empty && $tpl_file){ - - $AVE_Template->assign('field_id', $field_id); - $AVE_Template->assign('field_value', $res); - $AVE_Template->assign('field_count', count($res)); - $AVE_Template->assign('rubric_id', $rubric_id); - $AVE_Template->assign('default', $default); - - return $AVE_Template->fetch($tpl_file); - } - return (!empty($res)) ? implode(PHP_EOL, $res) : $tpl; - break; - - case 'req': - $items = unserialize($field_value); - - $res = ''; - - if($items != false) { - foreach($items as $image_item) - { - $image_item = clean_php($image_item); - $field_param = explode('|', $image_item); - if($image_item){ - if ($tpl_empty) - { - $image_item = $field_param; - } - else - { - $image_item = preg_replace_callback( - '/\[tag:parametr:(\d+)\]/i', - function($data) use($field_param) - { - return $field_param[(int)$data[1]]; - }, - $tpl - ); - - $image_item = preg_replace_callback( - '/\[tag:watermark:(.+?):([a-zA-Z]+):([0-9]+)\]/', - create_function( - '$m', - 'return watermarks(\'$m[1]\', \'$m[2]\', $m[3]);' - ), - $image_item - ); - - $image_item = preg_replace_callback('/\[tag:([r|c|f]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $image_item); - } - } - $res[] = $image_item; - } - } - - $tpl_file = get_field_tpl($tpl_dir, $field_id, 'req'); - - if($tpl_empty && $tpl_file){ - - $AVE_Template->assign('field_id', $field_id); - $AVE_Template->assign('field_value', $res); - $AVE_Template->assign('field_count', count($res)); - $AVE_Template->assign('rubric_id', $rubric_id); - $AVE_Template->assign('default', $default); - - return $AVE_Template->fetch($tpl_file); - } - - return (!empty($res)) ? implode(PHP_EOL, $res) : $tpl; - break; - - case 'save': - foreach ($field_value as $v) - { - if(!empty($v['url'])){ - $field_value_new[] = $v['url'] . '|' . $v['descr'] . '|' . $v['descr2'] . '|' . $v['descr3']; - } - } - if (isset($field_value_new)) { - return @serialize($field_value_new); - } else { - return $field_value_new = ''; - } - - break; - - case 'name' : - return $AVE_Template->get_config_vars('name'); - break; - - case 'upload': - $error = false; - - $files_unput = 'cascad3_files'.'_'.$_REQUEST['field_id'].'_'.$_REQUEST['doc_id']; - - if(preg_match("/%id/i", $default)) - { - $path = trim(@str_replace('%id', $_REQUEST['doc_id'], $default), '/'); - } - else - { - $path = (!empty($default)) ? $default : ''; - } - - function getExtension($file) - { - $file = pathinfo($file); - return $file['extension']; - } - - $valid_formats = array("jpg", "png", "gif", "bmp","jpeg"); - - $dir = '/' . UPLOAD_DIR . '/' . ((!empty($path)) ? $path . '/' : ''); - $dir_abs = BASE_DIR . $dir; - - if (!is_dir($dir_abs)) @mkdir($dir_abs, 0777, true); - - foreach ($_FILES[$files_unput]['name'] as $name => $value) { - - $filename = strtolower(stripslashes(prepare_url($_FILES[$files_unput]['name'][$name]))); - //$size = filesize($_FILES[$files_unput]['tmp_name'][$name]); - - $ext = getExtension($filename); - $ext = strtolower($ext); - - if(in_array($ext, $valid_formats)) - { - if (file_exists($dir_abs . $filename)) - { - $filename = rand(1000, 9999) . '_' . $filename; - } - - if (@move_uploaded_file($_FILES[$files_unput]['tmp_name'][$name], $dir_abs . $filename)) { - $new_files[] = $filename; - $error = false; - } else { - $error = true; - } - } - else - { - $error = true; - @unlink($_FILES[$files_unput]['tmp_name'][$name]); - } - } - if ($error !== true) { - echo json_encode(array( - 'files' => $new_files, - 'dir' => $dir, - 'respons' => 'succes', - 'message' => $AVE_Template->get_config_vars('resp_s_m'), - 'header' => $AVE_Template->get_config_vars('resp_s_h'), - 'theme' => 'accept' - ) - ); - } - else - { - echo json_encode(array( - 'respons' => 'error', - 'message' => $AVE_Template->get_config_vars('resp_e_m'), - 'header' => $AVE_Template->get_config_vars('resp_e_h'), - 'theme' => 'error' - ) - ); - } - exit; - } - - return ($res ? $res : $field_value); -} \ No newline at end of file diff --git a/fields/image_multi_new_3inputs/js/.gitkeep b/fields/image_multi_new_3inputs/js/.gitkeep deleted file mode 100755 index e69de29..0000000 diff --git a/fields/image_multi_new_3inputs/js/field.js b/fields/image_multi_new_3inputs/js/field.js deleted file mode 100755 index 7e9bc6a..0000000 --- a/fields/image_multi_new_3inputs/js/field.js +++ /dev/null @@ -1,235 +0,0 @@ -var Cascad3 = { - - init: false, - - init: function() { - if (this.initialized) return; - this.initialized = true; - - this.cascad3(); - }, - - cascad3: function() { - this.cascad3_sortable(); - this.cascad3_del_item(); - this.cascad3_del_all_item(); - this.cascad3_add_single(); - this.cascad3_add_folder(); - this.cascad3_upload_files(); - this.cascad3_click_upload(); - }, - - cascad3_update: function() { - this.cascad3_maxid(); - this.cascad3_del_item(); - AveAdmin.fancy_box(); - AveAdmin.tooltip(); - }, - - cascad3_maxid: function(id, doc) { - var maxid = 1; - $('#cascad3_' + doc + '_' + id).children('.cascad3_sortable').children('.cascad3_item').each(function() { - maxid = Math.max(maxid, parseInt($(this).attr("data-id")) + 1); - }); - return maxid; - }, - - cascad3_del_item: function() { - $('.cascad3_item .delete').on('click', function(event) { - event.preventDefault(); - var id = $(this).attr('data-id'); - jConfirm( - del_conf, - del_head, - function(b) { - if (b) { - $('#cascad3_image_' + id).remove(); - } - } - ); - }); - }, - - cascad3_del_all_item: function() { - $('.cascad3_del_all').on('click', function(event) { - event.preventDefault(); - var c_id = $(this).parent().parent().parent('.cascad3').attr("data-id"); - var d_id = $(this).parent().parent().parent('.cascad3').attr("data-doc"); - jConfirm( - del_all_c, - del_all_h, - function(b) { - if (b) { - $('#cascad3_' + d_id + '_' + c_id).children('.cascad3_sortable').children('.cascad3_item').each(function() { - $(this).remove(); - }); - } - } - ); - }); - }, - - cascad3_upload_files: function() { - $('.cascad3_upload').on('change', function(event) { - - var cascad3_input = $(this); - - event.preventDefault(); - - if (cascad3_input.val() == '') { - return false; - } - - var files_input = this.files.length; - var max_files = cascad3_input.attr("data-max-files"); - - if (files_input > max_files) { - $.jGrowl(max_f_t, { - header: max_f_h, - theme: 'error' - }); - - cascad3_input.replaceWith(cascad3_input.val('').clone(true)); - - return false; - } - - var cid = $(this).parent('.cascad3').attr("data-id"); - var did = $(this).parent('.cascad3').attr("data-doc"); - var rid = $(this).parent('.cascad3').attr("data-rubric"); - - $('#formDoc').ajaxSubmit({ - url: 'index.php?do=fields', - data: { - "field_id": cid, - "rubric_id": rid, - "doc_id": did, - "field": 'image_multi_new_3inputs', - "type": 'upload' - }, - beforeSend: function() { - $.alerts._overlay('show'); - }, - dataType: "json", - success: function(data) { - if (data['respons'] == 'succes') { - for (var p = 0, max = data.files.length; p < max; p++) { - iid = Cascad3.cascad3_maxid(cid, did); - var field_value = data['dir'] + data.files[p]; - var img_path = '../index.php?thumb=' + field_value + '&mode=f&width=128&height=128'; - $('#cascad3_' + did + '_' + cid + ' > .cascad3_sortable:last').prepend( - '
' + - '
' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '
' - ); - $.alerts._overlay('hide'); - Cascad3.cascad3_update(); - } - } - $.jGrowl(data['message'], { - header: data['header'], - theme: data['theme'] - }); - cascad3_input.replaceWith(cascad3_input = cascad3_input.clone(true)); - cascad3_input.val(); - } - }); - return false; - }); - }, - - cascad3_click_upload: function() { - $('.cascad3_upload_local').on('click', function(event) { - event.preventDefault(); - var c_id = $(this).parent().parent().parent('.cascad3').attr("data-id"); - var d_id = $(this).parent().parent().parent('.cascad3').attr("data-doc"); - $('.cascad3_upload_field_' + c_id + '_' + d_id).trigger('click'); - }); - }, - - cascad3_add_single: function() { - $('.cascad3_add_single').on('click', function(event) { - event.preventDefault(); - var c_id = $(this).parent().parent().parent('.cascad3').attr("data-id"); - var d_id = $(this).parent().parent().parent('.cascad3').attr("data-doc"); - var iid = Cascad3.cascad3_maxid(c_id, d_id); - $('#cascad3_' + d_id + '_' + c_id + ' > .cascad3_sortable:last').prepend( - '
' + - '
' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '
' - ); - browse_uploads('image__' + c_id + '_' + d_id + '_' + iid + ''); - Cascad3.cascad3_update(); - }); - }, - - cascad3_sortable: function() { - $('.cascad3_sortable').sortable({ - handle: ".header", - placeholder: "ui-state-highlight grey_bg" - }); - //$(".cascad3").disableSelection(); - }, - - cascad3_add_folder: function() { - $('.cascad3_add_folder').on('click', function(event) { - event.preventDefault(); - var c_id = $(this).parent().parent().parent('.cascad3').attr("data-id"); - var d_id = $(this).parent().parent().parent('.cascad3').attr("data-doc"); - browse_dirs("cascad3__" + c_id + '_' + d_id); - }); - } -}; - -$(document).ready(function() { - Cascad3.init(); - - $.fn.myPlugin = function cascad3_add_items(dir, cid, did) { - - $.ajax({ - url: ave_path + 'admin/index.php?do=docs&action=image_import&ajax=run', - data: { - "path": dir - }, - dataType: "json", - success: function(data) { - $.alerts._overlay('hide'); - for (var p = 0, max = data.respons.length; p < max; p++) { - var iid = Cascad3.cascad3_maxid(cid, did); - var field_value = dir + data.respons[p]; - var img_path = '../index.php?thumb=' + field_value + '&mode=f&width=128&height=128'; - $('#cascad3_' + did + '_' + cid + ' > .cascad3_sortable:last').prepend( - '
' + - '
' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '
' - ); - Cascad3.cascad3_update(); - } - } - }); - } - -}); \ No newline at end of file diff --git a/fields/image_multi_new_3inputs/js/outside.js b/fields/image_multi_new_3inputs/js/outside.js deleted file mode 100755 index 701c263..0000000 --- a/fields/image_multi_new_3inputs/js/outside.js +++ /dev/null @@ -1,231 +0,0 @@ -var Cascad3 = { - - init: false, - - init: function() { - if (this.initialized) return; - this.initialized = true; - - this.cascad3(); - }, - - cascad3: function() { - this.cascad3_sortable(); - this.cascad3_del_item(); - this.cascad3_del_all_item(); - this.cascad3_add_single(); - this.cascad3_add_folder(); - this.cascad3_upload_files(); - this.cascad3_click_upload(); - }, - - cascad3_update: function() { - this.cascad3_maxid(); - this.cascad3_del_item(); - AveAdmin.fancy_box(); - AveAdmin.tooltip(); - }, - - cascad3_maxid: function(id, doc) { - var maxid = 1; - $('#cascad3_' + doc + '_' + id).children('.cascad3_sortable').children('.cascad3_item').each(function() { - maxid = Math.max(maxid, parseInt($(this).attr("data-id")) + 1); - }); - return maxid; - }, - - cascad3_del_item: function() { - $('.cascad3_item .delete').on('click', function(event) { - event.preventDefault(); - var id = $(this).attr('data-id'); - jConfirm( - del_conf, - del_head, - function(b) { - if (b) { - $('#cascad3_image_' + id).remove(); - } - } - ); - }); - }, - - cascad3_del_all_item: function() { - $('.cascad3_del_all').on('click', function(event) { - event.preventDefault(); - var c_id = $(this).parent().parent().parent('.cascad3').attr("data-id"); - var d_id = $(this).parent().parent().parent('.cascad3').attr("data-doc"); - jConfirm( - del_all_c, - del_all_h, - function(b) { - if (b) { - $('#cascad3_' + d_id + '_' + c_id).children('.cascad3_sortable').children('.cascad3_item').each(function() { - $(this).remove(); - }); - } - } - ); - }); - }, - - cascad3_upload_files: function() { - $('.cascad3_upload').on('change', function(event) { - - event.preventDefault(); - - var cascad3_input = $(this); - - event.preventDefault(); - - if (cascad3_input.val() == '') { - return false; - } - - var files_input = this.files.length; - var max_files = cascad3_input.attr("data-max-files"); - - if (files_input > max_files) { - $.jGrowl(max_f_t, { - header: max_f_h, - theme: 'error' - }); - - cascad3_input.replaceWith(cascad3_input.val('').clone(true)); - - return false; - } - - var cid = $(this).parent('.cascad3').attr("data-id"); - var did = $(this).parent('.cascad3').attr("data-doc"); - var rid = $(this).parent('.cascad3').attr("data-rubric"); - - $('#docmanager_edit').ajaxSubmit({ - url: 'index.php?do=fields', - data: { - "field_id": cid, - "rubric_id": rid, - "doc_id": did, - "field": 'image_multi_new_3inputs', - "type": 'upload' - }, - beforeSend: function() { - $.alerts._overlay('show'); - }, - dataType: "json", - success: function(data) { - if (data['respons'] == 'succes') { - for (var p = 0, max = data.files.length; p < max; p++) { - iid = Cascad3.cascad3_maxid(cid, did); - var field_value = data['dir'] + data.files[p]; - var img_path = '../index.php?thumb=' + field_value + '&mode=f&width=128&height=128'; - $('#cascad3_' + did + '_' + cid + ' > .cascad3_sortable:last').prepend( - '
' + - '
' + - '' + - '' + - '' + - '' + - '' + - '' + - '
' - ); - $.alerts._overlay('hide'); - Cascad3.cascad3_update(); - } - } - $.jGrowl(data['message'], { - header: data['header'], - theme: data['theme'] - }); - cascad3_input.replaceWith(cascad3_input = cascad3_input.clone(true)); - cascad3_input.val(); - } - }); - return false; - }); - }, - - cascad3_click_upload: function() { - $('.cascad3_upload_local').on('click', function(event) { - event.preventDefault(); - var c_id = $(this).parent().parent().parent('.cascad3').attr("data-id"); - var d_id = $(this).parent().parent().parent('.cascad3').attr("data-doc"); - $('.cascad3_upload_field_' + c_id + '_' + d_id).trigger('click'); - }); - }, - - cascad3_add_single: function() { - $('.cascad3_add_single').on('click', function(event) { - event.preventDefault(); - var c_id = $(this).parent().parent().parent('.cascad3').attr("data-id"); - var d_id = $(this).parent().parent().parent('.cascad3').attr("data-doc"); - var iid = Cascad3.cascad3_maxid(c_id, d_id); - $('#cascad3_' + d_id + '_' + c_id + ' > .cascad3_sortable:last').prepend( - '
' + - '
' + - '' + - '' + - '' + - '' + - '' + - '
' - ); - browse_uploads('image__' + c_id + '_' + d_id + '_' + iid + ''); - Cascad3.cascad3_update(); - }); - }, - - cascad3_sortable: function() { - $('.cascad3_sortable').sortable({ - handle: ".header", - placeholder: "ui-state-highlight grey_bg" - }); - //$(".cascad3").disableSelection(); - }, - - cascad3_add_folder: function() { - $('.cascad3_add_folder').on('click', function(event) { - event.preventDefault(); - var c_id = $(this).parent().parent().parent('.cascad3').attr("data-id"); - var d_id = $(this).parent().parent().parent('.cascad3').attr("data-doc"); - browse_dirs("cascad3__" + c_id + '_' + d_id); - }); - } -} - -$(document).ready(function() { - Cascad3.init(); - - $.fn.myPlugin = function cascad3_add_items(dir, cid, did) { - - $.ajax({ - url: ave_path + 'admin/index.php?do=docs&action=image_import&ajax=run', - data: { - "path": dir - }, - dataType: "json", - success: function(data) { - $.alerts._overlay('hide'); - for (var p = 0, max = data.respons.length; p < max; p++) { - var iid = Cascad3.cascad3_maxid(cid, did); - var field_value = dir + data.respons[p]; - var img_path = '../index.php?thumb=' + field_value + '&mode=f&width=128&height=128'; - $('#cascad3_' + did + '_' + cid + ' > .cascad3_sortable:last').prepend( - '
' + - '
' + - '' + - '' + - '' + - '' + - '' + - '' + - '
' - ); - Cascad3.cascad3_update(); - } - } - }); - } - -}); \ No newline at end of file diff --git a/fields/image_multi_new_3inputs/lang/.gitkeep b/fields/image_multi_new_3inputs/lang/.gitkeep deleted file mode 100755 index e69de29..0000000 diff --git a/fields/image_multi_new_3inputs/lang/bg.txt b/fields/image_multi_new_3inputs/lang/bg.txt deleted file mode 100644 index e771d4d..0000000 --- a/fields/image_multi_new_3inputs/lang/bg.txt +++ /dev/null @@ -1,27 +0,0 @@ -[admin] -name = "Изображение (Каскада, 3 полета)" -look = "Преглед" -link = "Промени пътя" -select = "Избери изображение" -delete = "Изтриване на елелемт от элемент каскадата" -place = "Описание" -del_conf = "Сигурни ли сте, че желаете да изтриете този елемент?
(Изображението няма да бъде изтрито от сървъра)" -del_head = "Изтриване на елемент от каскадата..." -add_n_e = "Добави нов елемент:" -add_f = "Избор на изображение" -add_d = "Избор на папка" -add_l = "Качи от компютъра" -add_upl_e = "Вие може за заредите изображения от локален компютър след създаването на документа. За това натиснете бутона по долу «Добави и продължи редактирането»" -upl_dir = "Папка: " -del_all = "Изтриване на всички елементи" -del_all_c = "Сигурни ли сте, че желаете да изтриете всички елементи?
(Изображенията няма да бъдат изтрити от сървъра)" -del_all_h = "Изтриване на всички елементи на каскадата..." -resp_s_h = "Изпълнено" -resp_s_m = "Файловете са успешно заредени" -resp_e_m = "Възникна грешка при зареждането на файловете. Моля, опитайте отново." -resp_e_h = "Грешка" -resp_m_m = "Броя на файловете за зареждане са повече от максималния, зададен в настройките на PHP." -resp_m_h = "Грешка" -max_f_f = "Максимален брой файлове за зареждане: " -max_f_h = "Грешка" -max_f_t = "Превишен е максималния брой файлове,
разрешен за едновременно зареждане" \ No newline at end of file diff --git a/fields/image_multi_new_3inputs/lang/cz.txt b/fields/image_multi_new_3inputs/lang/cz.txt deleted file mode 100644 index 53f8b41..0000000 --- a/fields/image_multi_new_3inputs/lang/cz.txt +++ /dev/null @@ -1,29 +0,0 @@ -[admin] -name = "Zobrazení (Kaskáda, 3 inputy)" -look = "Zobrazit" -link = "Změnit cestu" -select = "Vybrat zobrazení" -delete = "Smazat prvek kaskády" -place = "Popis" -del_conf = "Opravdu chcete odstranit tento prvek?
(Zobrazení nebude smazáno ze serveru)" -del_head = "Smazání prvku kaskády..." -add_n_e = "Přidat nový element:" -add_f = "Vybrat zobrazení" -add_d = "Vybrat složku" -add_l = "Nahrát z počítače" -add_upl_e = "Můžete nahrávat obrázky z místního počítače po vytvoření dokumentu. Kliknutím níže na "Přidat a pokračovat v úpravách" -upl_dir = "Složka: " -del_all = "Odstranit všechny prvky" -del_all_c = "Opravdu chcete odstranit všechny prvky?
(Zobrazení nebude smazáno ze serveru)" -del_all_h = "Odstranit všechny prvky kaskádu..." -resp_s_h = "Hotovo" -resp_s_m = "Soubory úspěšně nahrány" -resp_s_h = "Hotovo" -resp_s_m = "Soubory úspěšně nahrány" -resp_e_m = "Při stahování souborů došlo k chybě. Zkuste znovu." -resp_e_h = "Chyba" -resp_m_m = "Počet souborů, které se mají nahrát překračují hodnotu zadanou v konfiguračním PHP." -resp_m_h = "Chyba" -max_f_f = "Maximální počet souborů ke stažení: " -max_f_h = "Chba" -max_f_t = Překročen maximální počet souborů,
během jednoho nahrávání" \ No newline at end of file diff --git a/fields/image_multi_new_3inputs/lang/en.txt b/fields/image_multi_new_3inputs/lang/en.txt deleted file mode 100755 index 5de64c1..0000000 --- a/fields/image_multi_new_3inputs/lang/en.txt +++ /dev/null @@ -1,26 +0,0 @@ -[en] -name = "Cascad NEW, 3 inputs" -look = "Lool" -link = "Change path" -select = "Select image" -delete = "Delete item cascade" -place = "Description" -del_conf = "are you sure You want to delete this item?
(the Image will not be deleted from the server)" -del_head = "Delete item cascade..." -add_n_e = "Add new item:" -add_f = "Select image" -add_d = "Select folder" -add_l = "Download to computer" -add_upl_e = "You can upload pictures from your computer after you create the document. To do this, press the bottom button "Add and continue editing"" -del_all = "Delete any items" -del_all_c = "are you sure You want to delete all items?
(Image will not be deleted from the server)" -del_all_h = "Delete all items of the cascade..." -resp_s_h = "Done" -resp_s_m = "File successfully loaded" -resp_e_m = "an error Occurred when uploading files. Try again." -resp_e_h = "Error" -resp_m_m = "number of uploaded file exceeds the value set in your PHP settings." -resp_m_h = "Error" -max_f_f = "Maximum number zagrozenia files:" -max_f_h = "Error" -max_f_t = "you have Exceeded the maximum number of files
to download" \ No newline at end of file diff --git a/fields/image_multi_new_3inputs/lang/pl.txt b/fields/image_multi_new_3inputs/lang/pl.txt deleted file mode 100644 index 81337e7..0000000 --- a/fields/image_multi_new_3inputs/lang/pl.txt +++ /dev/null @@ -1,27 +0,0 @@ -[admin] -name = "Obrazek (Kaskada, 3 input’y)" -look = "Popatrz" -link = "Zmień sposób" -select = "Wybierz obrazek" -delete = "Usuń kaskadę" -place = "Opis" -del_conf = "Czy na pewno chcesz usunąć ten element?
(Obrazek nie będzie usunięty z serwera)" -del_head = "Usuń element kaskady ..." -add_n_e = "Dodaj nowy element" -add_f = "Wybierz obrazek" -add_d = "Wybierz folder" -add_l = "Pobierz z komputera" -add_upl_e = "Możesz pobrać obrazki z komputera lokalnego po utworzeniu dokumentu. Aby to zrobić, kliknij poniżej na “Dodaj i kontynuować edycję”" -upl_dir = "Folder:" -del_all = "Usuń wszystkie elementy" -del_all_c = "Czy na pewno chcesz usunąć wszystkie elementy?
(Obrazek nie będzie usunięty z serwera)" -del_all_h = "Usuń wszystkie pozycje kaskady..." -resp_s_h = "Gotowe" -resp_s_m = "Pliki pomyślnie pobrane" -resp_e_m = "Wystąpił błąd podczas pobierania plików. Spróbuj ponownie." -resp_e_h = "Błąd" -resp_m_m = "Liczba plików do przesłania przekracza wartości, określone w PHP konfiguracji." -resp_m_h = "Błąd" -max_f_f = "Maksymalna liczba plików do pobrania:" -max_f_h = "Błąd" -max_f_t = "Przekroczono maksymalną liczbę plików,
na jednoczesne ładowanie" \ No newline at end of file diff --git a/fields/image_multi_new_3inputs/lang/ru.txt b/fields/image_multi_new_3inputs/lang/ru.txt deleted file mode 100755 index 555dc98..0000000 --- a/fields/image_multi_new_3inputs/lang/ru.txt +++ /dev/null @@ -1,27 +0,0 @@ -[admin] -name = "Изображение (Каскад, 3 инпута)" -look = "Посмотреть" -link = "Изменить путь" -select = "Выбрать изображение" -delete = "Удалить элемент каскада" -place = "параметр" -del_conf = "Вы уверены, что хотите удалить данный элемент?
(Изображение не будет удалено с сервера)" -del_head = "Удаление элемента каскада..." -add_n_e = "Добавить новый элемент:" -add_f = "Выбрать изображение" -add_d = "Выбрать папку" -add_l = "Загрузить с компьютера" -add_upl_e = "Вы сможете загрузить фотографии с локального компьютера после создания документа. Для этого нажмите внизу кнопку «Добавить и продолжить редактирование»" -upl_dir = "Папка: " -del_all = "Удалить все элементы" -del_all_c = "Вы уверены, что хотите удалить все элементы?
(Изображения не будет удалены с сервера)" -del_all_h = "Удаление всех элемента каскада..." -resp_s_h = "Выполнено" -resp_s_m = "Файлы успешно загрузились" -resp_e_m = "Возникла ошибка при загрузке файлов. Попробуйте еще раз." -resp_e_h = "Ошибка" -resp_m_m = "Кол-во загружаемых файлов превышает значение, заданное в настройках PHP." -resp_m_h = "Ошибка" -max_f_f = "Макимальное кол-во загружаемых файлов: " -max_f_h = "Ошибка" -max_f_t = "Превышено максимальное число файлов,
для одновременной загрузки" \ No newline at end of file diff --git a/fields/image_multi_new_3inputs/lang/ua.txt b/fields/image_multi_new_3inputs/lang/ua.txt deleted file mode 100644 index f2afc1f..0000000 --- a/fields/image_multi_new_3inputs/lang/ua.txt +++ /dev/null @@ -1,27 +0,0 @@ -[admin] -name = "Зображення (Каскад, 3 інпута)" -look = "Подивитися" -link = "Змінити шлях" -select = "Обрати зображення" -delete = "Видалити елемент каскаду" -place = "Опис" -del_conf = "Ви впевнені, що бажаєте видалити цей елемент?
(Зображення не буде видалено зі сервера)" -del_head = "Видалення елемента каскаду..." -add_n_e = "Додати новий елемент:" -add_f = "Обрати зображення" -add_d = "Обрати папку" -add_l = "Завантажити з компьютера" -add_upl_e = "Ви зможете завантажити зображення з локального компьютера післе створення документа. Для цього натисніть внизу кнопку “Додати та продовжити редагування”" -upl_dir = "Папка: " -del_all = "Видалити всі елементи" -del_all_c = "Ви впевнені, що бажаєте видалити всі елементи?
(Зображення не буде видалено зі сервера)" -del_all_h = "Видалення всіх елементів каскаду..." -resp_s_h = "Виконано" -resp_s_m = "Файли успішно завантажилися" -resp_e_m = "Сталася помилка при завантаженні файлів. Спробуйте ще раз." -resp_e_h = "Помилка" -resp_m_m = "Кількість файлів для завантаження перевищує значення, яке вказане у налаштуваннях PHP." -resp_m_h = "Помилка" -max_f_f = "Максимальна кількість файлів для завантаження: " -max_f_h = "Помилка" -max_f_t = "Перевищено максимальне число файлів,
для одночасного завантаження" \ No newline at end of file diff --git a/fields/image_multi_new_3inputs/tpl/.gitkeep b/fields/image_multi_new_3inputs/tpl/.gitkeep deleted file mode 100755 index e69de29..0000000 diff --git a/fields/image_multi_new_3inputs/tpl/field-doc.tpl b/fields/image_multi_new_3inputs/tpl/field-doc.tpl deleted file mode 100755 index c52ebed..0000000 --- a/fields/image_multi_new_3inputs/tpl/field-doc.tpl +++ /dev/null @@ -1,3 +0,0 @@ -{foreach from=$field_value item=image} - {if isset($image[1])}{$image[1]}{/if} -{/foreach} \ No newline at end of file diff --git a/fields/image_multi_new_3inputs/tpl/field-req.tpl b/fields/image_multi_new_3inputs/tpl/field-req.tpl deleted file mode 100755 index c52ebed..0000000 --- a/fields/image_multi_new_3inputs/tpl/field-req.tpl +++ /dev/null @@ -1,3 +0,0 @@ -{foreach from=$field_value item=image} - {if isset($image[1])}{$image[1]}{/if} -{/foreach} \ No newline at end of file diff --git a/fields/image_multi_new_3inputs/tpl/field.tpl b/fields/image_multi_new_3inputs/tpl/field.tpl deleted file mode 100755 index 6836d03..0000000 --- a/fields/image_multi_new_3inputs/tpl/field.tpl +++ /dev/null @@ -1,65 +0,0 @@ -{if $cascad3_new_3inputs != load} - {assign var=cascad3_new_3inputs value='' scope="global"} - {if $smarty.request.outside} - - {else} - - {/if} - - - {assign var=cascad3_new_3inputs value="load" scope="global"} -{/if} - -
- - {if $show_upload} - - {/if} - - -
- {foreach from=$images key=key item=image} - -
-
- - - - - - - - -
- - {/foreach} -
- -
\ No newline at end of file diff --git a/fields/teasers/field.php b/fields/teasers/field.php index dcb9276..cddd81a 100644 --- a/fields/teasers/field.php +++ b/fields/teasers/field.php @@ -1,165 +1,167 @@ config_load($lang_file, 'lang'); - $AVE_Template->assign('config_vars', $AVE_Template->get_config_vars()); - $AVE_Template->config_load($lang_file, 'admin'); + $AVE_Template->config_load($lang_file, 'lang'); + $AVE_Template->assign('config_vars', $AVE_Template->get_config_vars()); + $AVE_Template->config_load($lang_file, 'admin'); - switch ($action) - { - case 'edit': + switch ($action) + { + case 'edit': - $items = array(); + $items = array(); - $items = unserialize($field_value); + $items = unserialize($field_value); - if($items != false){ + if($items != false){ - foreach($items as $k => $v){ - $list_item = explode('|', $v); + foreach($items as $k => $v){ + $list_item = explode('|', $v); - $list[$k]['param'] = (isset($list_item[0])) ? htmlspecialchars($list_item[0], ENT_QUOTES) : ''; - $list[$k]['value'] = (isset($list_item[1])) ? htmlspecialchars($list_item[1], ENT_QUOTES) : ''; - } + $list[$k]['param'] = (isset($list_item[0])) ? htmlspecialchars($list_item[0], ENT_QUOTES) : ''; + $list[$k]['value'] = (isset($list_item[1])) ? htmlspecialchars($list_item[1], ENT_QUOTES) : ''; + } - $items = $list; - } + $items = $list; + } - $tpl_file = get_field_tpl($tpl_dir, $field_id, 'admin'); + $tpl_file = get_field_tpl($tpl_dir, $field_id, 'admin'); - $AVE_Template->assign('doc_id', $_REQUEST['Id']); - $AVE_Template->assign('items', $items); - $AVE_Template->assign('field_dir', $fld_name); - $AVE_Template->assign('field_id', $field_id); + $AVE_Template->assign('doc_id', $_REQUEST['Id']); + $AVE_Template->assign('items', $items); + $AVE_Template->assign('field_dir', $fld_name); + $AVE_Template->assign('field_id', $field_id); - return $AVE_Template->fetch($tpl_file); + return $AVE_Template->fetch($tpl_file); - case 'save': - foreach ($field_value as $v) - { - if(! empty($v['value']) && ! empty($v['param'])) + case 'save': + foreach ($field_value as $v) { - $field_value_new[] = $v['param'] . ($v['value'] ? '|' . $v['value'] : ''); + if(! empty($v['value']) && ! empty($v['param'])) + { + $field_value_new[] = $v['param'] . ($v['value'] ? '|' . $v['value'] : ''); + } } - } - if (isset($field_value_new)) - { - return @serialize($field_value_new); - } - else - { - return $field_value_new = ''; - } - break; - - case 'doc': - $items = (isset($field_value)) ? unserialize($field_value) : array(); - - $res = array(); - - if ($items != false) - { - foreach($items as $item) + if (isset($field_value_new)) + { + return @serialize($field_value_new); + } + else + { + return $field_value_new = ''; + } + break; + + case 'doc': + $items = (isset($field_value)) + ? unserialize($field_value) + : array(); + + $res = array(); + + if ($items != false) { - $item = explode('|', $item); + foreach($items as $item) + { + $item = explode('|', $item); - if ($item[1]) - $res[] = eval2var('?>' . showteaser($item[1]) . 'get_config_vars('name'); - break; - - case 'search': - - $field_default = explode(',', $default); - - $zap_1 = ($field_default[0]) ? ',' : ''; - $zap_2 = ($field_default[0] && $field_default[1]) ? ',' : ''; - - $sel_1 = ($field_default[0]) ? 'b.field_value as b1' : ''; - $sel_2 = ($field_default[1]) ? 'c.field_value as c1' : ''; - - $from_1 = ($field_default[0]) ? PREFIX . '_document_fields b' : ''; - $from_2 = ($field_default[1]) ? PREFIX . '_document_fields c' : ''; - - $search_1 = ($field_default[0]) ? "AND (b.document_id=a.Id AND b.rubric_field_id = " . $field_default[0] . ")" : ""; - $search_2 = ($field_default[1]) ? "AND (c.document_id=a.Id AND c.rubric_field_id = " . $field_default[1] . ")" : ""; - - $or_1 = ($field_default[0]) ? "OR (UPPER(b.field_value) LIKE UPPER('%" . $_REQUEST['q'] . "%'))" : ""; - $or_2 = ($field_default[1]) ? "OR (UPPER(c.field_value) LIKE UPPER('%" . $_REQUEST['q'] . "%'))" : ""; - - $sql = $AVE_DB->Query(" - SELECT - a.Id, - a.document_title - $zap_1 - $sel_1 - $zap_2 - $sel_2 - FROM - " . PREFIX . "_documents a - $zap_1 - " . $from_1 . " - $zap_2 - " . $from_2 . " - WHERE - a.rubric_id = '" . $_REQUEST['rubric_id'] . "' - AND - a.document_status = 1 - " . $search_1 . " - " . $search_2 . " - AND - ( - (UPPER(document_title) LIKE UPPER('%" . $_REQUEST['q'] . "%')) - $or_1 - $or_2 - ) - GROUP BY a.Id - LIMIT 0,5 - "); - - $doc_finded = array(); - - while ($row = $sql->FetchRow()) - { - $doc_finded[] = array( - 'doc_id' => $row->Id, - 'doc_title' => $row->document_title, - 'doc_name' => (($field_default[0]) ? $row->b1 : $row->document_title), - 'doc_article' => (($field_default[1]) ? $row->c1 : '') - ); - } - - echo json_encode($doc_finded); - exit; - - default: - return $field_value; - } - return ($res ? $res : $field_value); -} + return (! empty($res)) + ? implode(PHP_EOL, $res) + : $tpl; + + break; + + case 'req': + return get_field_default($field_value, $action, $field_id, $tpl, $tpl_empty); + + case 'name' : + return $AVE_Template->get_config_vars('name'); + break; + + case 'search': + + $field_default = explode(',', $default); + + $zap_1 = ($field_default[0]) ? ',' : ''; + $zap_2 = ($field_default[0] && $field_default[1]) ? ',' : ''; + + $sel_1 = ($field_default[0]) ? 'b.field_value as b1' : ''; + $sel_2 = ($field_default[1]) ? 'c.field_value as c1' : ''; + + $from_1 = ($field_default[0]) ? PREFIX . '_document_fields b' : ''; + $from_2 = ($field_default[1]) ? PREFIX . '_document_fields c' : ''; + + $search_1 = ($field_default[0]) ? "AND (b.document_id=a.Id AND b.rubric_field_id = " . $field_default[0] . ")" : ''; + $search_2 = ($field_default[1]) ? "AND (c.document_id=a.Id AND c.rubric_field_id = " . $field_default[1] . ")" : ''; + + $or_1 = ($field_default[0]) ? "OR (UPPER(b.field_value) LIKE UPPER('%" . $_REQUEST['q'] . "%'))" : ''; + $or_2 = ($field_default[1]) ? "OR (UPPER(c.field_value) LIKE UPPER('%" . $_REQUEST['q'] . "%'))" : ''; + + $sql = $AVE_DB->Query(" + SELECT + a.Id, + a.document_title + $zap_1 + $sel_1 + $zap_2 + $sel_2 + FROM + " . PREFIX . "_documents a + $zap_1 + " . $from_1 . " + $zap_2 + " . $from_2 . " + WHERE + a.rubric_id = '" . $_REQUEST['rubric_id'] . "' + AND + a.document_status = 1 + " . $search_1 . " + " . $search_2 . " + AND + ( + (UPPER(document_title) LIKE UPPER('%" . $_REQUEST['q'] . "%')) + $or_1 + $or_2 + ) + GROUP BY a.Id + LIMIT 0,5 + "); + + $doc_finded = array(); + + while ($row = $sql->FetchRow()) + { + $doc_finded[] = array( + 'doc_id' => $row->Id, + 'doc_title' => $row->document_title, + 'doc_name' => (($field_default[0]) ? $row->b1 : $row->document_title), + 'doc_article' => (($field_default[1]) ? $row->c1 : '') + ); + } + + echo json_encode($doc_finded); + exit; + + default: + return $field_value; + } + + return ($res ? $res : $field_value); + } ?> \ No newline at end of file diff --git a/fields/teasers/js/field.js b/fields/teasers/js/field.js index ddc8e4f..bede30f 100644 --- a/fields/teasers/js/field.js +++ b/fields/teasers/js/field.js @@ -1,4 +1,4 @@ -var Analoque = { +var Teasers = { init: false, @@ -57,7 +57,7 @@ var Analoque = { $('.AddButton').on('click', function() { c_id = $(this).parent().parent('.analoque_lists').attr("data-id"); d_id = $(this).parent().parent('.analoque_lists').attr("data-docid"); - i_id = Analoque.Analoque_maxid(d_id + '_' + c_id); + i_id = Teasers.Analoque_maxid(d_id + '_' + c_id); $('#analoque_lists_' + d_id + '_' + c_id + ':last').append( '
' + '  Id:   ×' + @@ -65,7 +65,7 @@ var Analoque = { '
' ); - Analoque.Analoque_update(); + Teasers.Analoque_update(); }); }, @@ -81,6 +81,8 @@ var Analoque = { */ Analoque_search: function() { + var res_search = false; + $('.search_analoque').on('input', function(event) { event.preventDefault(); @@ -92,28 +94,40 @@ var Analoque = { var kid = query.attr('data-id'); var field_id_input = $('.field_' + did + '_' + fid + '_' + kid); - query.autocomplete("index.php?do=fields&field=analoque&type=search&doc_id=" + did + "&field_id=" + fid, { + if (res_search) + return false; + + res_search = true; + + query.autocomplete("index.php?do=fields&field=teasers&type=search&doc_id=" + did + "&field_id=" + fid, { width: query.outerWidth(), - max: 10, + max: 5, dataType: "json", matchContains: "word", scroll: true, scrollHeight: 200, parse: function(data) { - return $.map(data, function(row) { - return { - data: row, - value: row.doc_title, - result: query.val() - } - }); + res_search = false; + + if (typeof data === 'object') + { + return $.map(data, function(row) { + return { + data: row, + value: row.doc_title, + result: query.val() + } + }); + } + + return false; }, formatItem: function(item) { - return '
' + item.doc_article + ' ' + item.doc_name + '
'; + return '
' + item.doc_article + ' ' + item.doc_name + '
'; } }).result(function(e, item) { - query.val(item.doc_name); - field_id_input.val(item.doc_id); + query.val(item.doc_name); + field_id_input.val(item.doc_id); }); return false; @@ -123,7 +137,6 @@ var Analoque = { } } -$(document).ready(function() -{ - Analoque.init(); +$(document).ready(function() { + Teasers.init(); }); diff --git a/fields/teasers/tpl/field.tpl b/fields/teasers/tpl/field.tpl index 36d0c54..0978bfa 100644 --- a/fields/teasers/tpl/field.tpl +++ b/fields/teasers/tpl/field.tpl @@ -1,5 +1,5 @@ {if $analoque != load} - {assign var=analoque value='' scope="global"} + {assign var=teasers value='' scope="global"} {if $smarty.request.outside} {else} @@ -14,7 +14,7 @@ var analoque_del_conf = '{#del_conf#}'; var analoque_del_head = '{#del_head#}'; - {assign var=analoque value="load" scope="global"} + {assign var=teasers value="load" scope="global"} {/if}
diff --git a/fields/youtube/lang/bg.txt b/fields/youtube/lang/bg.txt index 4e0085c..d6f8fcb 100644 --- a/fields/youtube/lang/bg.txt +++ b/fields/youtube/lang/bg.txt @@ -1,3 +1,9 @@ [admin] - name = "YouTube" +f_url = "Линк" +f_width = "Ширина" +f_height = "Височина" +f_fullscreen = "На цял екран" +f_allow = "Разреши" +f_forbidden = "Забрани" +f_metod = "Метод на вмъкване" diff --git a/fields/youtube/lang/cz.txt b/fields/youtube/lang/cz.txt index e087e9b..8bc8292 100644 --- a/fields/youtube/lang/cz.txt +++ b/fields/youtube/lang/cz.txt @@ -1,2 +1,9 @@ [admin] name = "YouTube" +f_url = "Ссылка" +f_width = "Ширина" +f_height = "Высота" +f_fullscreen = "Полноэкранный режим" +f_allow = "Разрешить" +f_forbidden = "Запретить" +f_metod = "Метод вставки" \ No newline at end of file diff --git a/fields/youtube/lang/en.txt b/fields/youtube/lang/en.txt index e087e9b..2b76c11 100644 --- a/fields/youtube/lang/en.txt +++ b/fields/youtube/lang/en.txt @@ -1,2 +1,9 @@ [admin] name = "YouTube" +f_url = "Url" +f_width = "Width" +f_height = "Height" +f_fullscreen = "Fullscreen" +f_allow = "Allow" +f_forbidden = "Forbidden" +f_metod = "Metod" \ No newline at end of file diff --git a/fields/youtube/lang/pl.txt b/fields/youtube/lang/pl.txt index e087e9b..2b76c11 100644 --- a/fields/youtube/lang/pl.txt +++ b/fields/youtube/lang/pl.txt @@ -1,2 +1,9 @@ [admin] name = "YouTube" +f_url = "Url" +f_width = "Width" +f_height = "Height" +f_fullscreen = "Fullscreen" +f_allow = "Allow" +f_forbidden = "Forbidden" +f_metod = "Metod" \ No newline at end of file diff --git a/fields/youtube/lang/ru.txt b/fields/youtube/lang/ru.txt index e087e9b..8bc8292 100644 --- a/fields/youtube/lang/ru.txt +++ b/fields/youtube/lang/ru.txt @@ -1,2 +1,9 @@ [admin] name = "YouTube" +f_url = "Ссылка" +f_width = "Ширина" +f_height = "Высота" +f_fullscreen = "Полноэкранный режим" +f_allow = "Разрешить" +f_forbidden = "Запретить" +f_metod = "Метод вставки" \ No newline at end of file diff --git a/fields/youtube/lang/ua.txt b/fields/youtube/lang/ua.txt index e087e9b..2b76c11 100644 --- a/fields/youtube/lang/ua.txt +++ b/fields/youtube/lang/ua.txt @@ -1,2 +1,9 @@ [admin] name = "YouTube" +f_url = "Url" +f_width = "Width" +f_height = "Height" +f_fullscreen = "Fullscreen" +f_allow = "Allow" +f_forbidden = "Forbidden" +f_metod = "Metod" \ No newline at end of file diff --git a/fields/youtube/tpl/field.tpl b/fields/youtube/tpl/field.tpl index 7366b60..55f3d3b 100644 --- a/fields/youtube/tpl/field.tpl +++ b/fields/youtube/tpl/field.tpl @@ -1,24 +1,24 @@
- Ссылка: + {#f_url#}:
- Ширина: px + {#f_width#}: px          - Высота: px + {#f_height#}: px
- Полноэкранный режим: + {#f_fullscreen#}:          - Метод вставки: + {#f_metod#}: -
+
\ No newline at end of file diff --git a/functions/func.block.php b/functions/func.block.php index a7fb44a..44091da 100644 --- a/functions/func.block.php +++ b/functions/func.block.php @@ -29,6 +29,10 @@ function parse_block($id) { $cache_file = BASE_DIR . '/cache/sql/block/' . $id . '.cache'; + // Если включен DEV MODE, то отключаем кеширование запросов + if (defined('DEV_MODE') AND DEV_MODE) + $cache_file = null; + if (! file_exists(dirname($cache_file))) mkdir(dirname($cache_file), 0766, true); @@ -48,7 +52,8 @@ function parse_block($id) LIMIT 1 ")->GetCell(); - file_put_contents($cache_file,$return); + if ($cache_file) + file_put_contents($cache_file, $return); } //-- парсим теги @@ -84,9 +89,9 @@ function parse_block($id) $gen_time = Debug::endTime('BLOCK_' . $id); - $GLOBALS['block_generate'][] = array('BLOCK_'. $id => $gen_time); + $GLOBALS['block_generate']['BLOCKS'][$id] = $gen_time; return $return; } } -?> +?> \ No newline at end of file diff --git a/functions/func.breadcrumbs.php b/functions/func.breadcrumbs.php index 16b6931..103fedd 100644 --- a/functions/func.breadcrumbs.php +++ b/functions/func.breadcrumbs.php @@ -62,8 +62,17 @@ $lang_home_alias = $AVE_DB->Query($sql)->FetchRow(); - $search = array('[name]', '[link]', '[count]'); - $replace = array($lang_home_alias->document_breadcrum_title, $bread_show_host ? HOST . '/' . ltrim($lang_home_alias->document_alias, '/') : $lang_home_alias->document_alias, 1); + $search = array( + '[name]', + '[link]', + '[count]' + ); + + $replace = array( + $lang_home_alias->document_breadcrum_title, + $bread_show_host ? HOST . '/' . ltrim($lang_home_alias->document_alias, '/') : $lang_home_alias->document_alias, + 1 + ); $link = str_replace($search, $replace, $bread_link_template); @@ -74,7 +83,7 @@ if ($bread_sepparator_use) $bread_crumb .= $bread_sepparator; - unset($search, $replace, $link, $sql, $lang_home_alias); + unset ($search, $replace, $link, $sql, $lang_home_alias); } if ($curent_document == 1 || $curent_document == PAGE_NOT_FOUND_ID) @@ -195,7 +204,9 @@ } // Последний элемент - if (get_settings('bread_link_box_last') == 1 || (isset($AVE_Core->curentdoc->bread_link_box_last) && $AVE_Core->curentdoc->bread_link_box_last == 1)) + if ((isset($AVE_Core->curentdoc->bread_link_box_last) && $AVE_Core->curentdoc->bread_link_box_last == 0)) + $bread_crumb .= ''; + else if (get_settings('bread_link_box_last') == 1 || (isset($AVE_Core->curentdoc->bread_link_box_last) && $AVE_Core->curentdoc->bread_link_box_last == 1)) $bread_crumb .= sprintf($bread_self_box, $current->document_breadcrum_title); if (! $noprint) @@ -211,4 +222,4 @@ return $crumbs[$curent_document]; } -?> +?> \ No newline at end of file diff --git a/functions/func.common.php b/functions/func.common.php index 1afa549..4f7b2b5 100755 --- a/functions/func.common.php +++ b/functions/func.common.php @@ -15,8 +15,8 @@ /** * Вставляем файл с пользовательскими функциями */ - if (file_exists(BASE_DIR."/functions/func.custom.php")) - include (BASE_DIR."/functions/func.custom.php"); + if (file_exists(BASE_DIR . '/functions/func.custom.php')) + include (BASE_DIR . '/functions/func.custom.php'); /** @@ -255,9 +255,7 @@ static $settings = null; if ($settings === null) - { - $settings = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_settings", SYSTEM_CACHE_LIFETIME)->FetchAssocArray(); - } + $settings = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_settings", SYSTEM_CACHE_LIFETIME, 'settings')->FetchAssocArray(); if ($field == '') return $settings; @@ -928,6 +926,37 @@ } + /** + * Функция поиска ключевых слов + * + * @param string $string - запрос + * @return string + */ + function searchTags() + { + global $AVE_DB; + + $sql = $AVE_DB->Query(" + SELECT DISTINCT + tag + FROM + " . PREFIX . "_document_tags + "); + + $tags = array(); + + $ii = 0; + + while ($row = $sql->GetCell()) + { + $tags[]['value'] = $row; + } + + echo json_encode($tags); + exit; + } + + /** * Формирование строки из случайных символов * @@ -1084,4 +1113,4 @@ -?> +?> \ No newline at end of file diff --git a/functions/func.fields.php b/functions/func.fields.php index 378b966..fec137a 100644 --- a/functions/func.fields.php +++ b/functions/func.fields.php @@ -76,7 +76,7 @@ return ''; case 'doc': case 'req': - if (!$tpl_empty) + if (! $tpl_empty) { $field_param = explode('|', $field_value); $field_value = preg_replace_callback( @@ -90,7 +90,8 @@ } return $field_value; - default: return $field_value; + default: + return $field_value; } } @@ -171,14 +172,29 @@ * * @return string */ - function get_field_num($rubric_id, $alias){ + function get_field_num($rubric_id, $alias) + { global $AVE_DB; - static $alias_field_id=array(); - if(isset($alias_field_id[$rubric_id][$alias])) return $alias_field_id[$rubric_id][$alias]; - $alias_field_id[$rubric_id][$alias] = $AVE_DB->Query("SELECT Id FROM " . PREFIX . "_rubric_fields WHERE (rubric_field_alias='".addslashes($alias)."' OR Id='".intval($alias)."') AND rubric_id=".intval($rubric_id))->GetCell(); + + static $alias_field_id = array(); + + if (isset($alias_field_id[$rubric_id][$alias])) + return $alias_field_id[$rubric_id][$alias]; + + $sql = " + SELECT Id + FROM " . PREFIX . "_rubric_fields + WHERE (rubric_field_alias = '".addslashes($alias)."' + OR Id = '".intval($alias)."') + AND rubric_id = ".intval($rubric_id) + ; + + $alias_field_id[$rubric_id][$alias] = $AVE_DB->Query($sql)->GetCell(); + return $alias_field_id[$rubric_id][$alias]; } + /** * Возвращаем * @@ -196,11 +212,18 @@ if(isset($alias_field_id[$id])) return $alias_field_id[$id]; - $alias_field_id[$id] = $AVE_DB->Query("SELECT rubric_field_default FROM " . PREFIX . "_rubric_fields WHERE Id = ".intval($id))->GetCell(); + $sql = " + SELECT rubric_field_default + FROM " . PREFIX . "_rubric_fields + WHERE Id = ".intval($id) + ; + + $alias_field_id[$id] = $AVE_DB->Query($sql)->GetCell(); return $alias_field_id[$id]; } + /** * Возвращаем шаблон tpl или пусто * @@ -210,25 +233,41 @@ * * @return string */ - function get_field_tpl($dir='', $field_id=0, $type='admin'){ - + function get_field_tpl($dir='', $field_id=0, $type='admin') + { $alias_field_id = get_field_alias($field_id); - switch ($type) { + switch ($type) + { case '': case 'admin': default: - $tpl = (file_exists($dir.'field-'.$field_id.'.tpl')) ? $dir.'field-'.$field_id.'.tpl' : ((file_exists($dir.'field-'.$alias_field_id.'.tpl')) ? $dir.'field-'.$alias_field_id.'.tpl' : $dir.'field.tpl'); + $tpl = (file_exists($dir.'field-'.$field_id.'.tpl')) + ? $dir.'field-'.$field_id.'.tpl' + : ((file_exists($dir.'field-'.$alias_field_id.'.tpl')) + ? $dir.'field-'.$alias_field_id.'.tpl' + : $dir.'field.tpl'); + $tpl = (@filesize($tpl)) ? $tpl : ''; break; case 'doc': - $tpl = (file_exists($dir.'field-doc-'.$field_id.'.tpl')) ? $dir.'field-doc-'.$field_id.'.tpl' : ((file_exists($dir.'field-doc-'.$alias_field_id.'.tpl')) ? $dir.'field-doc-'.$alias_field_id.'.tpl' : $dir.'field-doc.tpl'); + $tpl = (file_exists($dir.'field-doc-'.$field_id.'.tpl')) + ? $dir.'field-doc-'.$field_id.'.tpl' + : ((file_exists($dir.'field-doc-'.$alias_field_id.'.tpl')) + ? $dir.'field-doc-'.$alias_field_id.'.tpl' + : $dir.'field-doc.tpl'); + $tpl = (@filesize($tpl)) ? $tpl : ''; break; case 'req': - $tpl = (file_exists($dir.'field-req-'.$field_id.'.tpl')) ? $dir.'field-req-'.$field_id.'.tpl' : ((file_exists($dir.'field-req-'.$alias_field_id.'.tpl')) ? $dir.'field-req-'.$alias_field_id.'.tpl' : $dir.'field-req.tpl'); + $tpl = (file_exists($dir.'field-req-'.$field_id.'.tpl')) + ? $dir.'field-req-'.$field_id.'.tpl' + : ((file_exists($dir.'field-req-'.$alias_field_id.'.tpl')) + ? $dir.'field-req-'.$alias_field_id.'.tpl' + : $dir.'field-req.tpl'); + $tpl = (@filesize($tpl)) ? $tpl : ''; break; } @@ -245,7 +284,7 @@ * * @return string */ - function document_get_field($field_id, $document_id=null) + function document_get_field($field_id, $document_id = null) { global $AVE_Core; @@ -370,7 +409,7 @@ if (! is_numeric($document_id)) return false; - if (!isset ($document_fields[$document_id])) + if (! isset($document_fields[$document_id])) { $document_fields[$document_id] = false; @@ -446,6 +485,7 @@ $document_fields[$row['document_id']][$row['rubric_field_alias']] = $row['rubric_field_id']; } } + return $document_fields[$document_id]; } @@ -650,4 +690,37 @@ return $return; } -?> + + /** + * Возвращает наименование поля документа по номеру + * + * @param int $field_id ([tag:fld:X]) - номер поля + * @param int $doc_id + * @param int $parametr ([tag:parametr:X]) - часть поля + * + * @return string + */ + function get_field_name($field_id, $doc_id = null) + { + global $req_item_id; + + //-- Если не передан $doc_id, то проверяем реквест + if (! $doc_id && $req_item_id) + $doc_id = $req_item_id; + //-- Или берём для текущего дока + elseif (! $doc_id && $_REQUEST['id'] > 0) + $doc_id = $_REQUEST['id']; + //-- Возвращаем FALSE, если не число + elseif (! is_numeric($doc_id)) + return false; + + $document_fields = get_document_fields($doc_id); + + if (empty($document_fields[$field_id])) + return false; + + $field_name = $document_fields[$field_id]['rubric_field_title']; + + return $field_name; + } +?> \ No newline at end of file diff --git a/functions/func.helpers.php b/functions/func.helpers.php index 9b76983..7ae8068 100644 --- a/functions/func.helpers.php +++ b/functions/func.helpers.php @@ -341,29 +341,29 @@ if (!function_exists('cleanSanitize')){ * @param bool $middle Вырезает середину, оставляет начало + разделитель + конец * @return mixed|string */ -if (!function_exists('trancate')) +if (! function_exists('trancate')) { function truncate($string, $length = 80, $etc = '...', $break_words = false, $middle = false) { if ($length == 0) return ''; - if (strlen($string) > $length) + if (mb_strlen($string) > $length) { - $length -= min($length, strlen($etc)); + $length -= min($length, mb_strlen($etc)); if (! $break_words && ! $middle) { - $string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length + 1)); + $string = preg_replace('/\s+?(\S+)?$/', '', mb_substr($string, 0, $length + 1)); } - if (!$middle) + if (! $middle) { - return substr($string, 0, $length) . $etc; + return mb_substr($string, 0, $length) . $etc; } else { - return substr($string, 0, $length/2) . $etc . substr($string, -$length/2); + return mb_substr($string, 0, $length / 2) . $etc . mb_substr($string, - $length / 2); } } else @@ -409,7 +409,9 @@ if (!function_exists('truncate_text')) if (strlen($out) >= $n) { $out = trim($out); - return (strlen($out) == strlen($str)) ? $out : $out . $end_char; + return (strlen($out) == strlen($str)) + ? $out + : $out . $end_char; } } return $str; diff --git a/functions/func.navigation.php b/functions/func.navigation.php index 7d89228..7b2b9fa 100644 --- a/functions/func.navigation.php +++ b/functions/func.navigation.php @@ -21,25 +21,45 @@ { global $AVE_DB, $AVE_Core; - $gen_time = microtime(true); - - // извлекаем id из аргумента + // Извлекаем id из аргумента $navi_id = $navi_tag[1]; + Debug::startTime('NAVIAGTION_' . $navi_id); + + // Достаем для проверки тип меню + $sql = " + SELECT + expand_ext + FROM + ".PREFIX."_navigation + WHERE + navigation_id = '" . $navi_id . "' + OR + alias = '" . $navi_id . "' + "; + + $expnad_ext = $AVE_DB->Query($sql, SYSTEM_CACHE_LIFETIME, 'nav_' . $navi_id)->GetCell(); + // извлекаем level из аргумента - $navi_print_level = $navi_tag[2]; + $navi_print_level = (! empty($navi_tag[2])) + ? $navi_tag[2] + : ''; $navi = ''; $cache_file = BASE_DIR . '/cache/sql/nav/template-' . $navi_id . '.cache'; - if(! file_exists(dirname($cache_file))) + // Если включен DEV MODE, то отключаем кеширование запросов + if (defined('DEV_MODE') AND DEV_MODE || $expnad_ext != 1) + $cache_file = null; + + if (! file_exists(dirname($cache_file))) mkdir(dirname($cache_file), 0766, true); // получаем меню навигации по id, // и если такой не существует, выводим сообщение - if(file_exists($cache_file)) + if (file_exists($cache_file)) { $navi_menu = unserialize(file_get_contents($cache_file)); } @@ -47,7 +67,8 @@ { $navi_menu = get_navigations($navi_id); - file_put_contents($cache_file, serialize($navi_menu)); + if ($cache_file) + file_put_contents($cache_file, serialize($navi_menu)); } if (! $navi_menu) @@ -75,10 +96,14 @@ // после ; id текущего пункта // id текущего документа. Если не задан, то главная страница - $doc_active_id = (int)(($_REQUEST['id']) ? $_REQUEST['id'] : 1); + $doc_active_id = (int)(($_REQUEST['id']) + ? $_REQUEST['id'] + : 1); // алиас текущего документа - $alias = ltrim(isset($AVE_Core->curentdoc->document_alias) ? $AVE_Core->curentdoc->document_alias : ''); + $alias = ltrim(isset($AVE_Core->curentdoc->document_alias) + ? $AVE_Core->curentdoc->document_alias + : ''); // запрос для выборки по текущему алиасу $sql_doc_active_alias = ''; @@ -146,10 +171,10 @@ $sql_navi_level = ''; $sql_navi_active = ''; - if($navi_print_level) + if ($navi_print_level) { $sql_navi_level = ' AND level IN (' . $navi_print_level . ') '; - $sql_navi_active = ' AND parent_id IN(' . $navi_active_way_str . ') '; + $sql_navi_active = ' AND parent_id IN (' . $navi_active_way_str . ') '; } // обычное использование навигации @@ -157,14 +182,14 @@ { switch ($navi_menu->expand_ext) { - // все уровни - case 1: + // текущий и родительский уровни + case 0: + $sql_navi_active = ' AND parent_id IN (' . $navi_active_way_str . ') '; $navi_parent = 0; break; - // текущий и родительский уровни - case 0: - $sql_navi_active = ' AND parent_id IN(' . $navi_active_way_str . ') '; + // все уровни + case 1: $navi_parent = 0; break; @@ -176,50 +201,75 @@ } } - $cache_items = BASE_DIR . '/cache/sql/nav/items-' . $navi_id . '.cache'; $navi_items = array(); - //-- Проверяем есть файл кеша, если есть пропускам запрос к БД - if(! file_exists($cache_items)) - { - //-- Запрос пунктов меню - $sql = " - SELECT * - FROM - " . PREFIX . "_navigation_items - WHERE - status = '1' - AND - navigation_id = '" . $navi_menu->navigation_id . "'" . - $sql_navi_level . - $sql_navi_active . " - ORDER BY - position ASC - "; - - $sql_navi_items = $AVE_DB->Query($sql); + // Если включен DEV MODE, то отключаем кеширование запросов + if (defined('DEV_MODE') AND DEV_MODE || $expnad_ext != 1) + $cache_items = null; - while ($row_navi_items = $sql_navi_items->FetchAssocArray()) + if (empty($navi_print_level)) + { + //-- Проверяем есть файл кеша, если есть пропускам запрос к БД + if (! file_exists($cache_items)) { - $navi_items[$row_navi_items['parent_id']][] = $row_navi_items; + //-- Запрос пунктов меню + $sql = " + SELECT * + FROM + " . PREFIX . "_navigation_items + WHERE + status = '1' + AND + navigation_id = '" . $navi_menu->navigation_id . "'" . + $sql_navi_level . + $sql_navi_active . " + ORDER BY + position ASC + "; + + $sql_navi_items = $AVE_DB->Query($sql); + + while ($row_navi_items = $sql_navi_items->FetchAssocArray()) + $navi_items[$row_navi_items['parent_id']][] = $row_navi_items; + + if ($cache_items) + file_put_contents($cache_items, serialize($navi_items)); } - - file_put_contents($cache_items, serialize($navi_items)); + else + { + $navi_items = unserialize(file_get_contents($cache_items)); + } } else { - $navi_items = unserialize(file_get_contents($cache_items)); - } + //-- Запрос пунктов меню + $sql = " + SELECT * + FROM + " . PREFIX . "_navigation_items + WHERE + status = '1' + AND + navigation_id = '" . $navi_menu->navigation_id . "'" . + $sql_navi_level . " + ORDER BY + position ASC + "; - if($navi_print_level) - { - $keys = array_keys($navi_items); - $navi_parent = ! empty($keys) - ? $keys[0] - : 0; - } + $sql_navi_items = $AVE_DB->Query($sql); + + while ($row_navi_items = $sql_navi_items->FetchAssocArray()) + { + $navi_items[$row_navi_items['parent_id']][] = $row_navi_items; + } + + $keys = array_keys($navi_items); + $navi_parent = ! empty($keys) + ? $keys[0] + : 0; + } // Парсим теги в шаблонах пунктов $navi_item_tpl = array( @@ -248,8 +298,9 @@ $navi = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $navi); $navi = str_replace(array("\n","\r"),'',$navi); - $gen_time = microtime(true) - $gen_time; - $GLOBALS['block_generate'][] = array('NAVIGATION_' . $navi_id => $gen_time); + $gen_time = Debug::endTime('NAVIAGTION_' . $navi_id); + + $GLOBALS['block_generate']['NAVIAGTIONS'][$navi_id] = $gen_time; return $navi; } diff --git a/functions/func.parserequest.php b/functions/func.parserequest.php index 03ee099..3712c4d 100755 --- a/functions/func.parserequest.php +++ b/functions/func.parserequest.php @@ -1,1094 +1,1134 @@ Query(" - SELECT * - FROM - " . PREFIX . "_request_conditions - WHERE - request_id = '" . $id . "' - AND - condition_status = '1' - ORDER BY - condition_position ASC - "); - - // Обрабатываем выпадающие списки - - if (! defined('ACP')) + /** + * AVE.cms + * + * @package AVE.cms + * @version 3.x + * @filesource + * @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru + * + * @license GPL v.2 + */ + + function request_get_settings($id) { - $doc = 'doc_' . $AVE_Core->curentdoc->Id; + global $AVE_DB; - if (isset($_POST['req_' . $id])) - $_SESSION[$doc]['req_' . $id] = $_POST['req_' . $id]; - elseif (isset($_SESSION[$doc]['req_' . $id])) - $_POST['req_' . $id] = $_SESSION[$doc]['req_' . $id]; + // Получаем информацию о запросе + $reqest_settings = $AVE_DB->Query(" + SELECT + * + FROM + " . PREFIX . "_request + WHERE + " . (is_numeric($id) ? 'Id' : 'request_alias') . " = '" . $id . "' + ", -1, 'request/settings/' . $id)->FetchRow(); + + // Выходим, если нет запроса + if (! is_object($reqest_settings)) + return ''; + else + return $reqest_settings; } - if (! empty($_POST['req_' . $id]) && is_array($_POST['req_' . $id])) + + /** + * Обработка условий запроса. + * Возвращает строку условий в SQL-формате + * + * @param int $id идентификатор запроса + * @return string + */ + function request_get_condition_sql_string($id, $update_db = false) { - $i = 1; + global $AVE_DB, $AVE_Core; - foreach ($_POST['req_' . $id] as $fid => $val) - { - if (! ($val != '' && isset($_SESSION['val_' . $fid]) && in_array($val, $_SESSION['val_' . $fid]))) - continue; + $id = (int)$id; + $from = array(); + $where = array(); + + $sql_ak = $AVE_DB->Query(" + SELECT * + FROM + " . PREFIX . "_request_conditions + WHERE + request_id = '" . $id . "' + AND + condition_status = '1' + ORDER BY + condition_position ASC + "); - $from_dd[] = "%%PREFIX%%_document_fields AS t0$i, "; + // Обрабатываем выпадающие списки - $where_dd[] = "((t0$i.document_id = a.Id) AND (t0$i.rubric_field_id = $fid AND t0$i.field_value = '$val'))"; + if (! defined('ACP')) + { + $doc = 'doc_' . $AVE_Core->curentdoc->Id; - ++$i; + if (isset($_POST['req_' . $id])) + $_SESSION[$doc]['req_' . $id] = $_POST['req_' . $id]; + elseif (isset($_SESSION[$doc]['req_' . $id])) + $_POST['req_' . $id] = $_SESSION[$doc]['req_' . $id]; } - } - - $i = 0; - while ($row_ak = $sql_ak->FetchRow()) - { - // id поля рубрики - $fid = $row_ak->condition_field_id; - // значение для условия - $val = trim($row_ak->condition_value); - // если это поле используется для выпадающего списка или пустое значение для условия, пропускаем - if (isset($_POST['req_' . $id]) && isset($_POST['req_' . $id][$fid]) || $val==='') - continue; - // И / ИЛИ - if (! isset($join) && $row_ak->condition_join) - $join = $row_ak->condition_join; - // тип сравнения - $type = $row_ak->condition_compare; - - // выясняем, числовое поле или нет - if (! isset($numeric[$fid])) + if (! empty($_POST['req_' . $id]) && is_array($_POST['req_' . $id])) { - $numeric[$fid] = (bool)$AVE_DB->Query(" - SELECT - rubric_field_numeric - FROM - " . PREFIX . "_rubric_fields - WHERE - Id = '" . $fid . "' - ")->GetCell(); - } + $i = 1; - $fv = $numeric[$fid] ? "t$fid.field_number_value" : "UPPER(t$fid.field_value)"; + foreach ($_POST['req_' . $id] as $fid => $val) + { + if (! ($val != '' && isset($_SESSION['val_' . $fid]) && in_array($val, $_SESSION['val_' . $fid]))) + continue; - // подставляем название таблицы в свободные условия - $val = addcslashes(str_ireplace(array('[field]','[numeric_field]'),$fv,$val),"'"); + $from_dd[] = "%%PREFIX%%_document_fields AS t0$i, "; - // формируем выбор таблицы - // первый раз евалом проходим значение и запоминаем это в переменной $v[$i] - // как только таблица выбрана, фиксируем это в $t[$fid], чтобы не выбирать по несколько раз одни и те же таблицы - $from[] = "$val'' && !isset(\$t[$fid])) {echo \"%%PREFIX%%_document_fields AS t$fid,\"; \$t[$fid]=1;}?>"; + $where_dd[] = "((t0$i.document_id = a.Id) AND (t0$i.rubric_field_id = $fid AND t0$i.field_value = '$val'))"; - // обрабатываем условия - switch ($type) - { - case 'N<':case '<': $where[] = "'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv < UPPER('\$v[$i]'))) $join\" : ''?>"; break; - case 'N>':case '>': $where[] = "'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv > UPPER('\$v[$i]'))) $join\" : ''?>"; break; - case 'N<=':case '<=': $where[] = "'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv <= UPPER('\$v[$i]'))) $join\" : ''?>"; break; - case 'N>=':case '>=': $where[] = "'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv >= UPPER('\$v[$i]'))) $join\" : ''?>"; break; - - case '==': $where[] = "'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv = UPPER('\$v[$i]'))) $join\" : ''?>"; break; - case '!=': $where[] = "'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv != UPPER('\$v[$i]'))) $join\" : ''?>"; break; - case '%%': $where[] = "'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv LIKE UPPER('%\$v[$i]%'))) $join\" : ''?>"; break; - case '%': $where[] = "'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv LIKE UPPER('\$v[$i]%'))) $join\" : ''?>"; break; - case '--': $where[] = "'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv NOT LIKE UPPER('%\$v[$i]%'))) $join\" : ''?>"; break; - case '!-': $where[] = "'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv NOT LIKE UPPER('\$v[$i]%'))) $join\" : ''?>"; break; - - case 'SEGMENT': $where[] = "'' && \$v[$i]{0}!=',' && \$v[$i]['seg'][0] <= \$v[$i]['seg'][1]) ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv >= '\" . \$v[$i]['seg'][0] . \"' AND $fv <= '\" . \$v[$i]['seg'][1] . \"')) $join\" : '');?>"; break; - case 'INTERVAL': $where[] = "'' && \$v[$i]{0}!=',' && \$v[$i]['seg'][0] < \$v[$i]['seg'][1]) ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv > '\" . \$v[$i]['seg'][0] . \"' AND $fv < '\" . \$v[$i]['seg'][1] . \"')) $join\" : '');?>"; break; - - case 'IN=': $where[] = "'' && \$v[$i]{0}!=',') ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv IN (\$v[$i]))) $join\" : ''?>"; break; - case 'NOTIN=': $where[] = "'' && \$v[$i]{0}!=',') ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv NOT IN (\$v[$i]))) $join\" : ''?>"; break; - - case 'ANY': $where[] = "'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv=ANY(\$v[$i]))) $join\" : ''?>"; break; - case 'FRE': $where[] = "'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND (\$v[$i]))) $join\" : ''?>"; break; + ++$i; + } } - $i++; - } - - $retval = array(); + $i = 0; - if (! empty($where) || ! empty($where_dd)) - { - if (! empty($where_dd)) + while ($row_ak = $sql_ak->FetchRow()) { - $from = (isset($from_dd) ? array_merge($from, $from_dd) : $from); - $from = implode(' ', $from); - $where_dd = (isset($where_dd) ? ' AND ' : '') . implode(' AND ', $where_dd); - $where = implode(' ', $where) . " "; - $retval = array('from'=>$from,'where'=> $where.$where_dd); - } - else + // id поля рубрики + $fid = $row_ak->condition_field_id; + // значение для условия + $val = trim($row_ak->condition_value); + // если это поле используется для выпадающего списка или пустое значение для условия, пропускаем + if (isset($_POST['req_' . $id]) && isset($_POST['req_' . $id][$fid]) || $val==='') + continue; + // И / ИЛИ + if (! isset($join) && $row_ak->condition_join) + $join = $row_ak->condition_join; + // тип сравнения + $type = $row_ak->condition_compare; + + // выясняем, числовое поле или нет + if (! isset($numeric[$fid])) { - $from = implode(' ', $from); - $where = implode(' ', $where) . " "; - $retval = array('from'=>$from,'where'=> $where); + $numeric[$fid] = (bool)$AVE_DB->Query(" + SELECT + rubric_field_numeric + FROM + " . PREFIX . "_rubric_fields + WHERE + Id = '" . $fid . "' + ")->GetCell(); } - } - - // если вызвано из админки или просили обновить, обновляем запрос в бд - if (defined('ACP') || $update_db) - { - $AVE_DB->Query(" - UPDATE - " . PREFIX . "_request - SET - request_where_cond = '" . ($retval ? addslashes(serialize($retval)) : '') . "' - WHERE - Id = '" . $id . "' - "); - } - - return @$retval; -} + $fv = $numeric[$fid] ? "t$fid.field_number_value" : "UPPER(t$fid.field_value)"; -/* -* Функция принимает строку, и возвращает -* адрес первого изображения, которую найдет -*/ + // подставляем название таблицы в свободные условия + $val = addcslashes(str_ireplace(array('[field]','[numeric_field]'),$fv,$val),"'"); -function getImgSrc($data) -{ - preg_match_all("/()/u", $data, $images); + // формируем выбор таблицы + // первый раз евалом проходим значение и запоминаем это в переменной $v[$i] + // как только таблица выбрана, фиксируем это в $t[$fid], чтобы не выбирать по несколько раз одни и те же таблицы + $from[] = "$val'' && !isset(\$t[$fid])) {echo \"%%PREFIX%%_document_fields AS t$fid,\"; \$t[$fid]=1;}?>"; - $host = $images[2][0]; + // обрабатываем условия + switch ($type) + { + case 'N<':case '<': $where[] = "'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv < UPPER('\$v[$i]'))) $join\" : ''?>"; break; + case 'N>':case '>': $where[] = "'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv > UPPER('\$v[$i]'))) $join\" : ''?>"; break; + case 'N<=':case '<=': $where[] = "'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv <= UPPER('\$v[$i]'))) $join\" : ''?>"; break; + case 'N>=':case '>=': $where[] = "'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv >= UPPER('\$v[$i]'))) $join\" : ''?>"; break; + + case '==': $where[] = "'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv = UPPER('\$v[$i]'))) $join\" : ''?>"; break; + case '!=': $where[] = "'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv != UPPER('\$v[$i]'))) $join\" : ''?>"; break; + case '%%': $where[] = "'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv LIKE UPPER('%\$v[$i]%'))) $join\" : ''?>"; break; + case '%': $where[] = "'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv LIKE UPPER('\$v[$i]%'))) $join\" : ''?>"; break; + case '--': $where[] = "'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv NOT LIKE UPPER('%\$v[$i]%'))) $join\" : ''?>"; break; + case '!-': $where[] = "'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv NOT LIKE UPPER('\$v[$i]%'))) $join\" : ''?>"; break; + + case 'SEGMENT': $where[] = "'' && \$v[$i]{0}!=',' && \$v[$i]['seg'][0] <= \$v[$i]['seg'][1]) ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv >= '\" . \$v[$i]['seg'][0] . \"' AND $fv <= '\" . \$v[$i]['seg'][1] . \"')) $join\" : '');?>"; break; + case 'INTERVAL': $where[] = "'' && \$v[$i]{0}!=',' && \$v[$i]['seg'][0] < \$v[$i]['seg'][1]) ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv > '\" . \$v[$i]['seg'][0] . \"' AND $fv < '\" . \$v[$i]['seg'][1] . \"')) $join\" : '');?>"; break; + + case 'IN=': $where[] = "'' && \$v[$i]{0}!=',') ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv IN (\$v[$i]))) $join\" : ''?>"; break; + case 'NOTIN=': $where[] = "'' && \$v[$i]{0}!=',') ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv NOT IN (\$v[$i]))) $join\" : ''?>"; break; + + case 'ANY': $where[] = "'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv=ANY(\$v[$i]))) $join\" : ''?>"; break; + case 'FRE': $where[] = "'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND (\$v[$i]))) $join\" : ''?>"; break; + } - if (preg_match("/(src=)('|\")(.+?)('|\")/u", $host, $matches) == 1) - $host = $matches[3]; + $i++; + } - preg_match('@/index\.php\?.*thumb=(.*?)\&@i', $host, $matches); + $retval = array(); - if (isset($matches[1])) - { - return $matches[1]; - } - else + if (! empty($where) || ! empty($where_dd)) { - preg_match('/(.+)'.THUMBNAIL_DIR.'\/(.+)-.\d+x\d+(\..+)/u', $host, $matches); - - if (isset($matches[1])) + if (! empty($where_dd)) { - return $matches[1] . $matches[2] . $matches[3]; + $from = (isset($from_dd) ? array_merge($from, $from_dd) : $from); + $from = implode(' ', $from); + $where_dd = (isset($where_dd) ? ' AND ' : '') . implode(' AND ', $where_dd); + $where = implode(' ', $where) . " "; + $retval = array('from'=>$from,'where'=> $where.$where_dd); } else { - return $host; + $from = implode(' ', $from); + $where = implode(' ', $where) . " "; + $retval = array('from'=>$from,'where'=> $where); } } -} -/** - * Функция обработки тэгов полей с использованием шаблонов - * в соответствии с типом поля - * - * @param int $rubric_id идентификатор рубрики - * @param int $document_id идентификатор документа - * @param int $maxlength максимальное количество символов обрабатываемого поля - * @return string - */ -function request_get_document_field($field_id, $document_id, $maxlength = '', $rubric_id=0) -{ - if (! is_numeric($document_id) || $document_id < 1) - return ''; + // если вызвано из админки или просили обновить, обновляем запрос в бд + if (defined('ACP') || $update_db) + { + $AVE_DB->Query(" + UPDATE + " . PREFIX . "_request + SET + request_where_cond = '" . ($retval ? addslashes(serialize($retval)) : '') . "' + WHERE + Id = '" . $id . "' + "); - $document_fields = get_document_fields($document_id); + $AVE_DB->clear_request($id); + } - if (! is_array($document_fields[$field_id])) - $field_id = intval($document_fields[$field_id]); + return @$retval; + } - if (empty($document_fields[$field_id])) - return ''; - $field_value = trim($document_fields[$field_id]['field_value']); + /* + * Функция принимает строку, и возвращает + * адрес первого изображения, которую найдет + */ - if ($field_value == '' && $document_fields[$field_id]['tpl_req_empty']) - return ''; + function getImgSrc($data) + { + preg_match_all("/()/u", $data, $images); - $func = 'get_field_' . $document_fields[$field_id]['rubric_field_type']; + $host = $images[2][0]; - if(! is_callable($func)) - $func = 'get_field_default'; + if (preg_match("/(src=)('|\")(.+?)('|\")/u", $host, $matches) == 1) + $host = $matches[3]; - $field_value = $func($field_value, 'req', $field_id, $document_fields[$field_id]['rubric_field_template_request'], $document_fields[$field_id]['tpl_req_empty'], $maxlength, $document_fields, $rubric_id, $document_fields[$field_id]['rubric_field_default']); + preg_match('@/index\.php\?.*thumb=(.*?)\&@i', $host, $matches); - if ($maxlength != '') - { - if ($maxlength == 'more' || $maxlength == 'esc'|| $maxlength == 'img') + if (isset($matches[1])) { - if($maxlength == 'more') + return $matches[1]; + } + else { - // ToDo - Вывести в настройки или в настройки самого запроса - $teaser = explode('', $field_value); - $field_value = $teaser[0]; - } - elseif($maxlength == 'esc') + preg_match('/(.+)' . THUMBNAIL_DIR . '\/(.+)-.\d+x\d+(\..+)/u', $host, $matches); + + if (isset($matches[1])) { - $field_value = addslashes($field_value); + return $matches[1] . $matches[2] . $matches[3]; } - elseif($maxlength == 'img') + else { - $field_value = getImgSrc($field_value); + return $host; } - } - elseif (is_numeric($maxlength)) + } + } + + /** + * Функция обработки тэгов полей с использованием шаблонов + * в соответствии с типом поля + * + * @param int $rubric_id идентификатор рубрики + * @param int $document_id идентификатор документа + * @param int $maxlength максимальное количество символов обрабатываемого поля + * @return string + */ + function request_get_document_field($field_id, $document_id, $maxlength = '', $rubric_id = 0) + { + if (! is_numeric($document_id) || $document_id < 1) + return ''; + + $document_fields = get_document_fields($document_id); + + if (! is_array($document_fields[$field_id])) + $field_id = intval($document_fields[$field_id]); + + if (empty($document_fields[$field_id])) + return ''; + + $field_value = trim($document_fields[$field_id]['field_value']); + + if ($field_value == '' && $document_fields[$field_id]['tpl_req_empty']) + return ''; + + $func = 'get_field_' . $document_fields[$field_id]['rubric_field_type']; + + if (! is_callable($func)) + $func = 'get_field_default'; + + $field_value = $func($field_value, 'req', $field_id, $document_fields[$field_id]['rubric_field_template_request'], $document_fields[$field_id]['tpl_req_empty'], $maxlength, $document_fields, $rubric_id, $document_fields[$field_id]['rubric_field_default']); + + if ($maxlength != '') + { + if ($maxlength == 'more' || $maxlength == 'esc'|| $maxlength == 'img') { - if ($maxlength < 0) + if ($maxlength == 'more') { - $field_value = str_replace(array("\r\n","\n","\r"), " ", $field_value); - $field_value = strip_tags($field_value, ""); - $field_value = preg_replace('/ +/', ' ', $field_value); - $field_value = trim($field_value); - $maxlength = abs($maxlength); + // ToDo - Вывести в настройки или в настройки самого запроса + $teaser = explode('', $field_value); + $field_value = $teaser[0]; } - // ToDo - сделать настройки окончаний - if ($maxlength != 0) + elseif ($maxlength == 'esc') + { + $field_value = addslashes($field_value); + } + elseif ($maxlength == 'img') + { + $field_value = getImgSrc($field_value); + } + } + elseif (is_numeric($maxlength)) { - $field_value = mb_substr($field_value, 0, $maxlength) . ((strlen($field_value) > $maxlength) ? '... ' : ''); + if ($maxlength < 0) + { + $field_value = str_replace(array("\r\n","\n","\r"), " ", $field_value); + $field_value = strip_tags($field_value, REQUEST_STRIP_TAGS); + $field_value = preg_replace('/ +/', ' ', $field_value); + $field_value = trim($field_value); + + $maxlength = abs($maxlength); + } + // ToDo - сделать настройки окончаний + if ($maxlength != 0) + { + $field_value = truncate($field_value, $maxlength, REQUEST_ETC, REQUEST_BREAK_WORDS); + } + } - } - else - return false; + else + return false; + } + + return $field_value; } - return $field_value; -} - -function showteaser($id, $tparams = '') -{ - $item = showrequestelement($id, '', $tparams); - $item = str_replace('[tag:path]', ABS_PATH, $item); - $item = str_replace('[tag:mediapath]', ABS_PATH . 'templates/' . ((defined('THEME_FOLDER') === false) ? DEFAULT_THEME_FOLDER : THEME_FOLDER) . '/', $item); - - return $item; -} - -// Функция получения уникальных параметров для каждого тизера -function f_params_of_teaser($id_param_array,$num) -{ - global $params_of_teaser; - return $params_of_teaser[$id_param_array][$num]; -} - -// Функция получения элемента запроса -function showrequestelement($mixed, $template = '', $tparams = '') -{ - global $AVE_DB, $req_item_num, $params_of_teaser, $use_cache; - - if (is_array($mixed)) - $mixed = $mixed[1]; - - $row = (is_object($mixed) ? $mixed : $AVE_DB->Query(" - SELECT - a.* - FROM - " . PREFIX . "_documents AS a - WHERE - a.Id = '" . intval($mixed) . "' - GROUP BY - a.Id - LIMIT 1 - ")->FetchRow()); - - if(! $row) - return ''; - - $tparams_id = ''; - - if ($tparams != '') + function showteaser($id, $tparams = '') { - $tparams_id = $row->Id.md5($tparams); // Создаем уникальный id для каждого набора параметров - $params_of_teaser[$tparams_id] = array(); // Для отмены лишних ворнингов - $tparams = trim($tparams,'[]:'); // Удаляем: слева ':[', справа ']' - $params_of_teaser[$tparams_id] = explode('|',$tparams); // Заносим параметры в массив уникального id - } + $item = showrequestelement($id, '', $tparams); + $item = str_replace('[tag:path]', ABS_PATH, $item); + $item = str_replace('[tag:mediapath]', ABS_PATH . 'templates/' . ((defined('THEME_FOLDER') === false) ? DEFAULT_THEME_FOLDER : THEME_FOLDER) . '/', $item); - $template = ($template > '' ? $template : $AVE_DB->Query( - "SELECT rubric_teaser_template FROM " . PREFIX . "_rubrics WHERE Id='" . intval($row->rubric_id) . "'" - )->GetCell()); + return $item; + } - $cachefile_docid = BASE_DIR . '/cache/sql/request/' . $row->Id . '/request-' . md5($template) . '.cache'; + // Функция получения уникальных параметров для каждого тизера + function f_params_of_teaser($id_param_array,$num) + { + global $params_of_teaser; + return $params_of_teaser[$id_param_array][$num]; + } - if(! file_exists($cachefile_docid)) + // Функция получения элемента запроса + function showrequestelement($mixed, $template = '', $tparams = '') { - $template = preg_replace("/\[tag:if_notempty:rfld:([a-zA-Z0-9-_]+)]\[(more|esc|img|[0-9-]+)]/u", '<'.'?php if((htmlspecialchars(request_get_document_field(\'$1\', '.$row->Id.', \'$2\', '.(int)$row->rubric_id.'), ENT_QUOTES)) != \'\') { '.'?'.'>', $template); - $template = preg_replace("/\[tag:if_empty:rfld:([a-zA-Z0-9-_]+)]\[(more|esc|img|[0-9-]+)]/u", '<'.'?php if((htmlspecialchars(request_get_document_field(\'$1\', '.$row->Id.', \'$2\', '.(int)$row->rubric_id.'), ENT_QUOTES)) == \'\') { '.'?'.'>', $template); - $template = str_replace('[tag:if:else]', '', $template); - $template = str_replace('[tag:/if]', '', $template); - - // Парсим теги визуальных блоков - $item = preg_replace_callback('/\[tag:block:([A-Za-z0-9-_]{1,20}+)\]/', 'parse_block', $template); - - // Парсим теги системных блоков - $item = preg_replace_callback('/\[tag:sysblock:([A-Za-z0-9-_]{1,20}+)\]/', 'parse_sysblock', $item); - - $item = preg_replace_callback( - '/\[tag:rfld:([a-zA-Z0-9-_]+)]\[(more|esc|img|[0-9-]+)]/', - create_function( - '$m', - 'return request_get_document_field($m[1], ' . $row->Id . ', $m[2], ' . (int)$row->rubric_id . ');' - ), - $item - ); + global $AVE_DB, $req_item_num, $params_of_teaser, $use_cache; - // Возвращаем поле из БД документа - $item = preg_replace_callback('/\[tag:doc:([a-zA-Z0-9-_]+)\]/u', - function ($match) use ($row) - { - return isset($row->{$match[1]}) - ? $row->{$match[1]} - : null; - }, - $item - ); + if (is_array($mixed)) + $mixed = $mixed[1]; - // Если пришел вызов на активацию языковых файлов - $item = preg_replace_callback( - '/\[tag:langfile:([a-zA-Z0-9-_]+)\]/u', - function ($match) - { - global $AVE_Template; + $row = (is_object($mixed) ? $mixed : $AVE_DB->Query(" + SELECT + a.* + FROM + " . PREFIX . "_documents AS a + WHERE + a.Id = '" . intval($mixed) . "' + GROUP BY + a.Id + LIMIT 1 + ")->FetchRow()); - return $AVE_Template->get_config_vars($match[1]); - }, - $item - ); + if (! $row) + return ''; - $item = str_replace('[tag:path]', ABS_PATH, $item); - $item = str_replace('[tag:mediapath]', ABS_PATH . 'templates/' . ((defined('THEME_FOLDER') === false) - ? DEFAULT_THEME_FOLDER - : THEME_FOLDER) - . '/', $item); - - // Watermarks - $item = preg_replace_callback( - '/\[tag:watermark:(.+?):([a-zA-Z]+):([0-9]+)\]/', - create_function( - '$m', - 'watermarks($m[1], $m[2], $m[3]);' - ), - $item - ); + $tparams_id = ''; + + if ($tparams != '') + { + $tparams_id = $row->Id.md5($tparams); // Создаем уникальный id для каждого набора параметров + $params_of_teaser[$tparams_id] = array(); // Для отмены лишних ворнингов + $tparams = trim($tparams,'[]:'); // Удаляем: слева ':[', справа ']' + $params_of_teaser[$tparams_id] = explode('|',$tparams); // Заносим параметры в массив уникального id + } - // Удаляем ошибочные теги полей документа в шаблоне рубрики - $item = preg_replace('/\[tag:doc:\d*\]/', '', $item); - $item = preg_replace('/\[tag:langfile:\d*\]/', '', $item); + $template = ($template > '' ? $template : $AVE_DB->Query( + "SELECT rubric_teaser_template FROM " . PREFIX . "_rubrics WHERE Id='" . intval($row->rubric_id) . "'" + )->GetCell()); - $item = preg_replace_callback('/\[tag:([r|c|f|t|s]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $item); + $cachefile_docid = BASE_DIR . '/cache/sql/request/' . $row->Id . '/request-' . md5($template) . '.cache'; - if ($tparams != '') + // Если включен DEV MODE, то отключаем кеширование запросов + if (defined('DEV_MODE') AND DEV_MODE) + $cachefile_docid = null; + + if (! file_exists($cachefile_docid)) { - // Заменяем tparam в тизере - // $item = preg_replace('/\[tparam:([0-9]+)\]/', '<'.'?php echo $params_of_teaser["'.$tparams_id.'"][$1]'.'?'.'>', $item); // косячная версия, пока оставил + $template = preg_replace("/\[tag:if_notempty:rfld:([a-zA-Z0-9-_]+)]\[(more|esc|img|[0-9-]+)]/u", '<'.'?php if((htmlspecialchars(request_get_document_field(\'$1\', '.$row->Id.', \'$2\', '.(int)$row->rubric_id.'), ENT_QUOTES)) != \'\') { '.'?'.'>', $template); + $template = preg_replace("/\[tag:if_empty:rfld:([a-zA-Z0-9-_]+)]\[(more|esc|img|[0-9-]+)]/u", '<'.'?php if((htmlspecialchars(request_get_document_field(\'$1\', '.$row->Id.', \'$2\', '.(int)$row->rubric_id.'), ENT_QUOTES)) == \'\') { '.'?'.'>', $template); + $template = str_replace('[tag:if:else]', '', $template); + $template = str_replace('[tag:/if]', '', $template); + + // Парсим теги визуальных блоков + $item = preg_replace_callback('/\[tag:block:([A-Za-z0-9-_]{1,20}+)\]/', 'parse_block', $template); + + // Парсим теги системных блоков + $item = preg_replace_callback('/\[tag:sysblock:([A-Za-z0-9-_]{1,20}+)\]/', 'parse_sysblock', $item); + $item = preg_replace_callback( - '/\[tparam:([0-9]+)\]/', + '/\[tag:rfld:([a-zA-Z0-9-_]+)]\[(more|esc|img|[0-9-]+)]/', create_function( '$m', - 'return f_params_of_teaser('.$tparams_id.', $m[1]);' + 'return request_get_document_field($m[1], ' . $row->Id . ', $m[2], ' . (int)$row->rubric_id . ');' ), $item ); - } - else + + // Возвращаем поле из БД документа + $item = preg_replace_callback('/\[tag:doc:([a-zA-Z0-9-_]+)\]/u', + function ($match) use ($row) + { + return isset($row->{$match[1]}) + ? $row->{$match[1]} + : null; + }, + $item + ); + + // Если пришел вызов на активацию языковых файлов + $item = preg_replace_callback( + '/\[tag:langfile:([a-zA-Z0-9-_]+)\]/u', + function ($match) + { + global $AVE_Template; + + return $AVE_Template->get_config_vars($match[1]); + }, + $item + ); + + $item = str_replace('[tag:path]', ABS_PATH, $item); + $item = str_replace('[tag:mediapath]', ABS_PATH . 'templates/' . ((defined('THEME_FOLDER') === false) + ? DEFAULT_THEME_FOLDER + : THEME_FOLDER) + . '/', $item); + + // Watermarks + $item = preg_replace_callback( + '/\[tag:watermark:(.+?):([a-zA-Z]+):([0-9]+)\]/', + create_function( + '$m', + 'watermarks($m[1], $m[2], $m[3]);' + ), + $item + ); + + // Удаляем ошибочные теги полей документа в шаблоне рубрики + $item = preg_replace('/\[tag:doc:\d*\]/', '', $item); + $item = preg_replace('/\[tag:langfile:\d*\]/', '', $item); + + $item = preg_replace_callback('/\[tag:([r|c|f|t|s]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $item); + + if ($tparams != '') { - // Если чистый запрос тизера, просто вытираем tparam - $item = preg_replace('/\[tparam:([0-9]+)\]/', '', $item); + // Заменяем tparam в тизере + // $item = preg_replace('/\[tparam:([0-9]+)\]/', '<'.'?php echo $params_of_teaser["'.$tparams_id.'"][$1]'.'?'.'>', $item); // косячная версия, пока оставил + $item = preg_replace_callback( + '/\[tparam:([0-9]+)\]/', + create_function( + '$m', + 'return f_params_of_teaser('.$tparams_id.', $m[1]);' + ), + $item + ); } + else + { + // Если чистый запрос тизера, просто вытираем tparam + $item = preg_replace('/\[tparam:([0-9]+)\]/', '', $item); + } + + // Блок для проверки передачи параметров тизеру + /* + if (count($params_of_teaser[$tparams_id])) + { + Debug::_echo($params_of_teaser); + Debug::_echo($row_Id_mas); + Debug::_echo($item, true); + } + */ + + $item = str_replace('[tag:domain]', getSiteUrl(), $item); + + $link = rewrite_link('index.php?id=' . $row->Id . '&doc=' . (empty($row->document_alias) ? prepare_url($row->document_title) : $row->document_alias)); + $item = str_replace('[tag:link]', $link, $item); + $item = str_replace('[tag:docid]', $row->Id, $item); + $item = str_replace('[tag:docitemnum]', $req_item_num, $item); + $item = str_replace('[tag:adminlink]', 'index.php?do=docs&action=edit&rubric_id=' . $row->rubric_id . '&Id=' . $row->Id . '&cp=' . session_id() . '', $item); + $item = str_replace('[tag:doctitle]', stripslashes(htmlspecialchars_decode($row->document_title)), $item); + $item = str_replace('[tag:docparent]', $row->document_parent, $item); + $item = str_replace('[tag:doclang]', $row->document_lang, $item); + $item = str_replace('[tag:docdate]', pretty_date(strftime(DATE_FORMAT, $row->document_published)), $item); + $item = str_replace('[tag:doctime]', pretty_date(strftime(TIME_FORMAT, $row->document_published)), $item); + $item = str_replace('[tag:humandate]', human_date($row->document_published), $item); + $item = preg_replace_callback( + '/\[tag:date:([a-zA-Z0-9-. \/]+)\]/', + create_function('$m','return translate_date(date($m[1], '.$row->document_published.')); + '), + $item + ); - // Блок для проверки передачи параметров тизеру - /* - if (count($params_of_teaser[$tparams_id])) + if (preg_match('/\[tag:docauthor]/u', $item)) { - Debug::echo($params_of_teaser); - Debug::echo($row_Id_mas); - Debug::echo($item, true); + $item = str_replace('[tag:docauthor]', get_username_by_id($row->document_author_id), $item); } - */ - - $item = str_replace('[tag:domain]', getSiteUrl(), $item); - - $link = rewrite_link('index.php?id=' . $row->Id . '&doc=' . (empty($row->document_alias) ? prepare_url($row->document_title) : $row->document_alias)); - $item = str_replace('[tag:link]', $link, $item); - $item = str_replace('[tag:docid]', $row->Id, $item); - $item = str_replace('[tag:docitemnum]', $req_item_num, $item); - $item = str_replace('[tag:adminlink]', 'index.php?do=docs&action=edit&rubric_id=' . $row->rubric_id . '&Id=' . $row->Id . '&cp=' . session_id() . '', $item); - $item = str_replace('[tag:doctitle]', stripslashes(htmlspecialchars_decode($row->document_title)), $item); - $item = str_replace('[tag:docparent]', $row->document_parent, $item); - $item = str_replace('[tag:doclang]', $row->document_lang, $item); - $item = str_replace('[tag:docdate]', pretty_date(strftime(DATE_FORMAT, $row->document_published)), $item); - $item = str_replace('[tag:doctime]', pretty_date(strftime(TIME_FORMAT, $row->document_published)), $item); - $item = str_replace('[tag:humandate]', human_date($row->document_published), $item); - $item = preg_replace_callback( - '/\[tag:date:([a-zA-Z0-9-. \/]+)\]/', - create_function('$m','return translate_date(date($m[1], '.$row->document_published.')); - '), - $item - ); - - if (preg_match('/\[tag:docauthor]/u', $item)) - { - $item = str_replace('[tag:docauthor]', get_username_by_id($row->document_author_id), $item); - } - $item = str_replace('[tag:docauthorid]', $row->document_author_id, $item); + $item = str_replace('[tag:docauthorid]', $row->document_author_id, $item); - $item = preg_replace_callback( - '/\[tag:docauthoravatar:(\d+)\]/', - create_function( - '$m', - 'return getAvatar('.intval($row->document_author_id).', $m[1]);' - ), - $item - ); + $item = preg_replace_callback( + '/\[tag:docauthoravatar:(\d+)\]/', + create_function( + '$m', + 'return getAvatar('.intval($row->document_author_id).', $m[1]);' + ), + $item + ); - if (isset($use_cache) && $use_cache == 1) - { - // Кеширование элементов запроса - if(! file_exists(dirname($cachefile_docid))) - @mkdir(dirname($cachefile_docid), 0777, true); + if (isset($use_cache) && $use_cache == 1) + { + // Кеширование элементов запроса + if(! file_exists(dirname($cachefile_docid))) + @mkdir(dirname($cachefile_docid), 0777, true); - file_put_contents($cachefile_docid, $item); - } - } - else - { - $item = file_get_contents($cachefile_docid); + file_put_contents($cachefile_docid, $item); + } } + else + { + $item = file_get_contents($cachefile_docid); + } - $item = str_replace('[tag:docviews]', $row->document_count_view, $item); - $item = str_replace('[tag:doccomments]', isset($row->nums) ? $row->nums : '', $item); - - unset($row); - - return $item; -} - -/** - * Обработка тега запроса. - * Возвращает список документов удовлетворяющих параметрам запроса - * оформленный с использованием шаблона - * - * @param int $id идентификатор запроса - * @return string - */ -function request_parse($id, $params = array()) -{ - global $AVE_Core, $AVE_DB, $request_documents; - - // Если id пришёл из тега, берём нужную часть массива - if (is_array($id)) - $id = $id[1]; - - $t = array(); - $a = array(); - $v = array(); - - // Получаем информацию о запросе - $request = $AVE_DB->Query(" - SELECT - * - FROM - " . PREFIX . "_request - WHERE - " . (is_numeric($id) ? 'Id' : 'request_alias') . " = '" . $id . "' - ")->FetchRow(); - - // Выходим, если нет запроса - if (! is_object($request)) - return ''; - - // Фиксируем время начала генерации запроса - Debug::startTime('request_' . $id); - - // Массив для полей SELECT - $request_select = array(); - // Массив для присоединения таблиц JOIN - $request_join = array(); - // Массив для добавления условий WHERE - $request_where = array(); - // Массив для сортировки результатов ORDER BY - $request_order = array(); - // Массив для сортировки результатов ORDER BY - $request_order_fields = array(); - - $request_order_str = ''; - $request_select_str = ''; - - // Сортировка по полям из переданных параметров - if (empty($params['SORT']) && ! empty($_REQUEST['requestsort_' . $id]) && ! is_array($_REQUEST['requestsort_' . $id])) - { - // Разрешаем перебор полей для сортировки через ";" - $sort = explode(';', $_REQUEST['requestsort_'.$id]); + $item = str_replace('[tag:docviews]', $row->document_count_view, $item); + $item = str_replace('[tag:doccomments]', isset($row->nums) ? $row->nums : '', $item); - foreach($sort as $v) - { - $v1 = explode('=', $v); - // Если хотим сортировку DESC то пишем alias = 0 - $params['SORT'][$v1[0]] = (isset($v1[1]) && $v1[1] == 0 - ? 'DESC' - : 'ASC'); - } + unset($row); + + return $item; } - // Сортировка по полям - if (! empty($params['SORT']) && is_array($params['SORT'])) + /** + * Обработка тега запроса. + * Возвращает список документов удовлетворяющих параметрам запроса + * оформленный с использованием шаблона + * + * @param int $id идентификатор запроса + * @return string + */ + function request_parse($id, $params = array()) { - foreach($params['SORT'] as $fid => $sort) + global $AVE_Core, $AVE_DB, $request_documents; + + // Если id пришёл из тега, берём нужную часть массива + if (is_array($id)) + $id = $id[1]; + + $t = array(); + $a = array(); + $v = array(); + + // Получаем информацию о запросе + $request = request_get_settings($id); + + // Фиксируем время начала генерации запроса + Debug::startTime('request_' . $id); + + // Массив для полей SELECT + $request_select = array(); + // Массив для присоединения таблиц JOIN + $request_join = array(); + // Массив для добавления условий WHERE + $request_where = array(); + // Массив для сортировки результатов ORDER BY + $request_order = array(); + // Массив для сортировки результатов ORDER BY + $request_order_fields = array(); + + $request_order_str = ''; + $request_select_str = ''; + + // Сортировка по полям из переданных параметров + if (empty($params['SORT']) && ! empty($_REQUEST['requestsort_' . $id]) && ! is_array($_REQUEST['requestsort_' . $id])) { - if (is_numeric($fid)) - $fid = (int)get_field_num($request->rubric_id, $fid); + // Разрешаем перебор полей для сортировки через ";" + $sort = explode(';', $_REQUEST['requestsort_' . $id]); - if ((int)$fid > 0) + foreach($sort as $v) { - $sort = strtolower($sort); + $v1 = explode('=', $v); - $request_join[$fid] = ""; - - $asc_desc = strpos(strtolower($sort),'asc') !== false ? 'ASC' : 'DESC'; + // Если хотим сортировку DESC то пишем alias = 0 + $params['SORT'][$v1[0]] = (isset($v1[1]) && $v1[1] == 0 + ? 'DESC' + : 'ASC'); + } + } - $request_order['field-'.$fid] = "t$fid.field_value " . $asc_desc; + // Сортировка по полям + // Если пришел параметр SORT + if (! empty($params['SORT']) && is_array($params['SORT'])) + { + foreach($params['SORT'] as $fid => $sort) + { + if (is_numeric($fid)) + $fid = (int)get_field_num($request->rubric_id, $fid); - $request_order_fields[] = $fid; - } - else + // Если значение больше 0 + if ((int)$fid > 0) { - $asc_desc = strpos(strtolower($sort),'asc') !== false ? 'ASC' : 'DESC'; - $request_order[$param] = "$fid " . $asc_desc; + $sort = strtolower($sort); + + // Добавляем условие в SQL + $request_join[$fid] = ""; + + // Если в сортировке указано ASC иначе DESC + $asc_desc = strpos(strtolower($sort),'asc') !== false + ? 'ASC' + : 'DESC'; + + $request_order['field-'.$fid] = "t$fid.field_value " . $asc_desc; + + $request_order_fields[] = $fid; } + else + { + // Если в сортировке указано ASC иначе DESC + $asc_desc = strpos(strtolower($sort),'asc') !== false + ? 'ASC' + : 'DESC'; + + $request_order[$param] = "$fid " . $asc_desc; + } + } } - } - // Сортировка по полю из настроек (только если не передана другая в параметрах) - elseif ($request->request_order_by_nat) + // Сортировка по полю из настроек (только если не передана другая в параметрах) + elseif ($request->request_order_by_nat) + { + $fid = (int)$request->request_order_by_nat; + + // Добавляем с учётом переменной $t из условий, чтобы не выбирать те же таблиы заново - это оптимизирует время + $request_join[$fid] = ""; + + $request_order['field-' . $fid] = "t$fid.field_value " . $request->request_asc_desc; + $request_order_fields[] = $fid; + } + + // Вторичная сортировка по параметру документа - добавляем в конец сортировок + if (! empty($params['RANDOM'])) { - $fid = (int)$request->request_order_by_nat; + $request_order['sort'] = ($params['RANDOM'] == 1) + ? 'RAND()' + : ''; + } + elseif ($request->request_order_by) + { + $request_order['sort'] = ($request->request_order_by == 'RAND()') + ? 'RAND()' + : 'a.' . $request->request_order_by . ' ' . $request->request_asc_desc; + } - // Добавляем с учётом переменной $t из условий, чтобы не выбирать те же таблиы заново - это оптимизирует время - $request_join[$fid] = ""; + // Заменяем field_value на field_number_value во всех полях для сортировки, если поле числовое + if (! empty($request_order_fields)) + { + $sql_numeric = $AVE_DB->Query(" + SELECT + Id + FROM + " . PREFIX . "_rubric_fields + WHERE + Id IN (" . implode(',', $request_order_fields) . ") + AND + rubric_field_numeric = '1' + "); - $request_order['field-' . $fid] = "t$fid.field_value " . $request->request_asc_desc; - $request_order_fields[] = $fid; + if ($sql_numeric->_result->num_rows > 0) + { + while ($fid = (int)$sql_numeric->FetchRow()->Id) + $request_order['field-' . $fid] = str_replace('field_value','field_number_value', $request_order['field-' . $fid]); + } } - // Вторичная сортировка по параметру документа - добавляем в конец сортировок - if (! empty($params['RANDOM'])) - { - $request_order['sort'] = ($params['RANDOM'] == 1) - ? 'RAND()' + // Статус: если в параметрах, то его ставим. Иначе выводим только активные доки + $request_where[] = "a.document_status = '" . ((isset($params['STATUS'])) + ? (int)$params['STATUS'] + : '1') . "'"; + + // Не выводить текущий документ + if ($request->request_hide_current) + $request_where[] = "a.Id != '" . get_current_document_id() . "'"; + + // Язык + if ($request->request_lang) + $request_where[] = "a.document_lang = '" . $_SESSION['user_language'] . "'"; + + // Дата публикации документов + if (get_settings('use_doctime')) + $request_where[] = "a.document_published <= UNIX_TIMESTAMP() AND (a.document_expire = 0 OR a.document_expire >= UNIX_TIMESTAMP())"; + + // Условия запроса + // если используется выпадающий список, получаем строку без сохранения + if (! empty($_POST['req_' . $id]) || ! empty($_SESSION['doc_' . $AVE_Core->curentdoc->Id]['req_' . $id])) + $where_cond = request_get_condition_sql_string($request->Id, false); + // если условия пустые, получаем строку с сохранением её в бд + elseif (! $request->request_where_cond) + $where_cond = request_get_condition_sql_string($request->Id, true); + // иначе, берём из запроса + else + $where_cond = unserialize($request->request_where_cond); + + $where_cond['from'] = (isset($where_cond['from'])) + ? str_replace('%%PREFIX%%', PREFIX, $where_cond['from']) : ''; - } - elseif ($request->request_order_by) + + if (isset($where_cond['where'])) + $request_where[] = $where_cond['where']; + + // Родительский документ + if (isset($params['PARENT']) && (int)$params['PARENT'] > 0) + $request_where[] = "a.document_parent = '" . (int)$params['PARENT'] . "'"; + + // Автор + // Если задано в параметрах + if (isset($params['USER_ID'])) + $user_id = (int)$params['USER_ID']; + // Если стоит галка, показывать только СВОИ документы в настройках + // Аноним не увидит ничего, так как 0 юзера нет + elseif ($request->request_only_owner == '1') + $user_id = (int)$_SESSION['user_id']; + + // Если что-то добавили, пишем + if (isset($user_id)) + $request_where[] = "a.document_author_id = '" . $user_id . "'"; + + // Произвольные условия WHERE + if (isset($params['USER_WHERE']) && $params['USER_WHERE'] > '') { - $request_order['sort'] = ($request->request_order_by == 'RAND()') - ? 'RAND()' - : 'a.' . $request->request_order_by . ' ' . $request->request_asc_desc; + if (is_array($params['USER_WHERE'])) + $request_where = array_merge($request_where,$params['USER_WHERE']); + else + $request_where[] = $params['USER_WHERE']; } - // Заменяем field_value на field_number_value во всех полях для сортировки, если поле числовое - if (! empty($request_order_fields)) - { - $sql_numeric = $AVE_DB->Query(" - SELECT - Id + // Готовим строку с условиями + array_unshift($request_where," + a.Id != '1' AND a.Id != '" . PAGE_NOT_FOUND_ID . "' AND + a.rubric_id = '" . $request->rubric_id . "' AND + a.document_deleted != '1'"); + + $request_where_str = '(' . implode(') AND (',$request_where) . ')'; + + // Количество выводимых доков + $params['LIMIT'] = (! empty($params['LIMIT']) + ? $params['LIMIT'] + : (! empty($_REQUEST['requestlimiter_'.$id]) + ? $_REQUEST['requestlimiter_'.$id] + : (int)$request->request_items_per_page)); + + $limit = (isset($params['LIMIT']) && is_numeric($params['LIMIT']) && $params['LIMIT'] > '') + ? (int)$params['LIMIT'] + : (int)$request->request_items_per_page; + + $start = (isset($params['START'])) + ? (int)$params['START'] + : (($request->request_show_pagination == 1) + ? get_current_page('apage') * $limit - $limit + : 0); + + $limit_str = ($limit > 0) + ? "LIMIT " . $start . "," . $limit + : ''; + + // Готовим строку с сортировкой + if ($request_order) + $request_order_str = "ORDER BY " . implode(', ',$request_order); + + // Готовим строку с полями + if ($request_select) + $request_select_str = ',' . implode(",\r\n",$request_select); + + unset($a, $t, $v); + + // Составляем запрос к БД + $sql = " ?> + SELECT STRAIGHT_JOIN SQL_CALC_FOUND_ROWS + a.* + " . $request_select_str . " FROM - " . PREFIX . "_rubric_fields + " . $where_cond['from'] . " + " . (isset($params['USER_FROM']) ? $params['USER_FROM'] : '') . " + " . PREFIX . "_documents AS a + " . implode(' ', $request_join) . " + " . (isset($params['USER_JOIN']) ? $params['USER_FROM'] : '') . " WHERE - Id IN (" . implode(',', $request_order_fields) . ") - AND - rubric_field_numeric = '1' - "); + " . $request_where_str . " + GROUP BY a.Id + " . $request_order_str . " + " . $limit_str . " + _result->num_rows > 0) - { - while ($fid = (int)$sql_numeric->FetchRow()->Id) - $request_order['field-' . $fid] = str_replace('field_value','field_number_value', $request_order['field-' . $fid]); - } - } + $sql_request = eval2var($sql); - // Статус: если в параметрах, то его ставим. иначе выводим только активные доки - $request_where[] = "a.document_status = '" . ((isset($params['STATUS'])) - ? (int)$params['STATUS'] - : '1') . "'"; - - // Не выводить текущий документ - if ($request->request_hide_current) - $request_where[] = "a.Id != '" . get_current_document_id() . "'"; - - // Язык - if ($request->request_lang) - $request_where[] = "a.document_lang = '" . $_SESSION['user_language'] . "'"; - - // Дата публикации документов - if (get_settings('use_doctime')) - $request_where[] = "a.document_published <= UNIX_TIMESTAMP() AND (a.document_expire = 0 OR a.document_expire >= UNIX_TIMESTAMP())"; - - // Условия запроса - // если используется выпадающий список, получаем строку без сохранения - if (! empty($_POST['req_' . $id]) || !empty($_SESSION['doc_' . $AVE_Core->curentdoc->Id]['req_' . $id])) - $where_cond = request_get_condition_sql_string($request->Id, false); - // если условия пустые, получаем строку с сохранением её в бд - elseif (! $request->request_where_cond) - $where_cond = request_get_condition_sql_string($request->Id, true); - // иначе, берём из запроса - else $where_cond = unserialize($request->request_where_cond); - - $where_cond['from'] = (isset($where_cond['from'])) - ? str_replace('%%PREFIX%%', PREFIX, $where_cond['from']) - : ''; - - if (isset($where_cond['where'])) $request_where[] = $where_cond['where']; - - // Родительский документ - if (isset($params['PARENT']) && (int)$params['PARENT'] > 0) - $request_where[] = "a.document_parent = '" . (int)$params['PARENT'] . "'"; - - // Автор - // Если задано в параметрах - if (isset($params['USER_ID'])) - $user_id = (int)$params['USER_ID']; - // Если стоит галка, показывать только СВОИ документы в настройках - // Аноним не увидит ничего, так как 0 юзера нет - elseif ($request->request_only_owner == '1') - $user_id = (int)$_SESSION['user_id']; - - // Если что-то добавили, пишем - if (isset($user_id)) - $request_where[] = "a.document_author_id = '" . $user_id . "'"; - - // Произвольные условия WHERE - if (isset($params['USER_WHERE']) && $params['USER_WHERE'] > '') - { - if (is_array($params['USER_WHERE'])) - $request_where = array_merge($request_where,$params['USER_WHERE']); - else - $request_where[] = $params['USER_WHERE']; - } + unset($sql); - // Готовим строку с условиями - array_unshift($request_where," - a.Id != '1' AND a.Id != '" . PAGE_NOT_FOUND_ID . "' AND - a.rubric_id = '" . $request->rubric_id . "' AND - a.document_deleted != '1'"); - - $request_where_str = '(' . implode(') AND (',$request_where) . ')'; - - // Количество выводимых доков - $params['LIMIT']=(! empty($params['LIMIT']) - ? $params['LIMIT'] - : (!empty($_REQUEST['requestlimiter_'.$id]) - ? $_REQUEST['requestlimiter_'.$id] - : (int)$request->request_items_per_page)); - - $limit = (isset($params['LIMIT']) && is_numeric($params['LIMIT']) && $params['LIMIT'] > '') - ? (int)$params['LIMIT'] - : (int)$request->request_items_per_page; - - $start = (isset($params['START'])) - ? (int)$params['START'] - : (($request->request_show_pagination == 1) - ? get_current_page('apage') * $limit - $limit - : 0); - - $limit_str = ($limit > 0) - ? "LIMIT " . $start . "," . $limit - : ''; - - // Готовим строку с сортировкой - if ($request_order) - $request_order_str = "ORDER BY " . implode(', ',$request_order); - - // Готовим строку с полями - if ($request_select) - $request_select_str = ',' . implode(",\r\n",$request_select); - - unset($a, $t, $v); - - // Составляем запрос к БД - $sql = " ?> - SELECT STRAIGHT_JOIN SQL_CALC_FOUND_ROWS - a.Id, - a.rubric_id, - a.document_title, - a.document_parent, - a.document_alias, - a.document_published, - a.document_expire, - a.document_changed, - a.document_author_id, - a.document_in_search, - a.document_status, - a.document_count_print, - a.document_count_view, - a.document_linked_navi_id, - a.document_lang - " . $request_select_str . " - FROM - " . $where_cond['from'] . " - " . (isset($params['USER_FROM']) ? $params['USER_FROM'] : '') . " - " . PREFIX . "_documents AS a - " . implode(' ', $request_join) . " - " . (isset($params['USER_JOIN']) ? $params['USER_FROM'] : '') . " - WHERE - " . $request_where_str . " - GROUP BY a.Id - " . $request_order_str . " - " . $limit_str . " - 0) + if (preg_match('/' . $search . '/', $sql_request) > 0) + { + $sql_request = str_replace($search, '', $sql_request); + } + } + + // Если просили просто показать сформированный запрос + if ((isset($params['DEBUG']) && $params['DEBUG'] == 1) || $request->request_show_sql == 1) { - $sql_request = str_replace($search, '', $sql_request); + $return = Debug::_print($sql_request); + + return $return; } - } - // Если просили просто показать сформированный запрос - if ((isset($params['DEBUG']) && $params['DEBUG'] == 1) || $request->request_show_sql == 1) - { - $return = Debug::_print($sql_request); + // Выполняем запрос к бд + $sql = $AVE_DB->Query($sql_request, (int)$request->request_cache_lifetime, 'rub_' . $request->rubric_id); - return $return; - } + // Если просили просто вернуть запрос, возвращаем результат + if (isset($params['RETURN_SQL']) && $params['RETURN_SQL'] == 1) + return $AVE_DB->GetFoundRows(); - // Выполняем запрос к бд - $sql = $AVE_DB->Query($sql_request, (int)$request->request_cache_lifetime, 'rub_' . $request->rubric_id); + // Если есть вывод пагинации, то выполняем запрос на получение кол-ва элементов + if ($request->request_show_pagination == 1 || (isset($params['SHOW']) && $params['SHOW'] == 1)) + $num_items = $AVE_DB->NumAllRows($sql_request, (int)$request->request_cache_lifetime, 'rub_' . $request->rubric_id); + else + $num_items = $AVE_DB->GetFoundRows(); - // Если просили просто вернуть запрос, возвращаем результат - if (isset($params['RETURN_SQL']) && $params['RETURN_SQL'] == 1) - return $sql; + // Если просили просто вернуть кол-во, возвращаем результат + if (isset($params['RETURN_COUNT']) && $params['RETURN_COUNT'] == 1) + return $num_items; - // Если есть вывод пагинации, то выполняем запрос на получение кол-ва элементов - if ($request->request_show_pagination == 1 || (isset($params['SHOW']) && $params['SHOW'] == 1)) - { - $num_items = $AVE_DB->NumAllRows($sql_request, (int)$request->request_cache_lifetime, 'rub_' . $request->rubric_id); - } - else + unset($sql_request); + + // Приступаем к обработке шаблона + $main_template = $request->request_template_main; + + //-- Если кол-во элементов больше 0 + if ($num_items > 0) { - $num_items = $AVE_DB->GetFoundRows(); + $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); + } - unset($sql_request); + $pagination = ''; - // Приступаем к обработке шаблона - $main_template = $request->request_template_main; + // Кол-во страниц + $num_pages = ($limit > 0) + ? ceil($num_items / $limit) + : 0; - //-- Если кол-во элементов больше 0 - if ($num_items > 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 + // Собираем пагинацию, еслиесть указание ее выводить + if ($request->request_show_pagination == 1 || (isset($params['SHOW']) && $params['SHOW'] == 1)) { - $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); + // Если в запросе пришел номер страницы и он больше, чем кол-во страниц + // Делаем перенаправление + 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; + } + + // Запоминаем глобально + @$GLOBALS['page_id'][$_REQUEST['id']]['apage'] = (@$GLOBALS['page_id'][$_REQUEST['id']]['apage'] > $num_pages + ? @$GLOBALS['page_id'][$_REQUEST['id']]['apage'] + : $num_pages); + + $pagination = ''; + + if ($num_pages > 1) + { + $queries = ''; + + // Добавляем GET-запрос в пагинацию если пришло ADD_GET + // или указанов настройках запроса + if ($request->request_use_query == 1 || (isset($params['ADD_GET']) && $params['ADD_GET'] == 1)) + $queries = ($_SERVER['QUERY_STRING']) + ? '?' . $_SERVER['QUERY_STRING'] + : ''; + + $pagination = '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) + + . '&apage={s}' + + . ((isset($_REQUEST['artpage']) && is_numeric($_REQUEST['artpage'])) + ? '&artpage=' . $_REQUEST['artpage'] + : '') + + . ((isset($_REQUEST['page']) && is_numeric($_REQUEST['page'])) + ? '&page=' . $_REQUEST['page'] + : '') + + // Добавляем GET-запрос в пагинацию + . clean_php($queries) + ; + + // ID пагинации + $pagination_id = (isset($params['PAGINATION']) && $params['PAGINATION'] > 0) + ? $params['PAGINATION'] + : $request->request_pagination; + + // Собираем пагинацию + $pagination = AVE_Paginations::getPagination($num_pages, 'apage', $pagination, $pagination_id); + + // Костыли для Главной страницы + $pagination = str_ireplace('"//"', '"/"', str_ireplace('///', '/', rewrite_link($pagination))); + $pagination = str_ireplace('"//' . URL_SUFF . '"', '"/"', $pagination); + } } - $pagination = ''; + // Элементы запроса + $rows = array(); - // Кол-во страниц - $num_pages = ($limit > 0) - ? ceil($num_items / $limit) - : 0; + // id найденных документов + $request_documents = array(); - // Собираем пагинацию, еслиесть указание ее выводить - if ($request->request_show_pagination == 1 || (isset($params['SHOW']) && $params['SHOW'] == 1)) - { - // Если в запросе пришел номер страницы и он больше, чем кол-во страниц - // Делаем перенаправление - if (isset($_REQUEST['apage']) && is_numeric($_REQUEST['apage']) && $_REQUEST['apage'] > $num_pages) + while ($row = $sql->FetchRow()) { - $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; + // Собираем Id документов + array_push($request_documents, $row->Id); + // Собираем оставшуюся информацию + array_push($rows, $row); } - // Запоминаем глобально - @$GLOBALS['page_id'][$_REQUEST['id']]['apage'] = (@$GLOBALS['page_id'][$_REQUEST['id']]['apage'] > $num_pages - ? @$GLOBALS['page_id'][$_REQUEST['id']]['apage'] - : $num_pages); + //-- Обрабатываем шаблоны элементов + $items = ''; + //-- Счетчик + $x = 0; + //-- Общее число элементов + $items_count = count($rows); - $pagination = ''; + global $req_item_num, $use_cache; + + $use_cache = $request->request_cache_elements; + + $item = ''; - if ($num_pages > 1) + foreach ($rows as $row) { - $queries = ''; + $x++; + $last_item = ($x == $items_count ? true : false); + $item_num = $x; + $req_item_num = $item_num; + $item = showrequestelement($row, $request->request_template_item); + $item = '<'.'?php $item_num='.var_export($item_num,1).'; $last_item='.var_export($last_item,1).'?'.'>'.$item; + $item = 'Id . ';?>' . $item; + $item = str_replace('[tag:if_first]', '<'.'?php if(isset($item_num) && $item_num===1) { ?'.'>', $item); + $item = str_replace('[tag:if_not_first]', '<'.'?php if(isset($item_num) && $item_num!==1) { ?'.'>', $item); + $item = str_replace('[tag:if_last]', '<'.'?php if(isset($last_item) && $last_item) { ?'.'>', $item); + $item = str_replace('[tag:if_not_last]', '<'.'?php if(isset($item_num) && !$last_item) { ?'.'>', $item); + $item = preg_replace('/\[tag:if_every:([0-9-]+)\]/u', '<'.'?php if(isset($item_num) && !($item_num % $1)){ '.'?'.'>', $item); + $item = preg_replace('/\[tag:if_not_every:([0-9-]+)\]/u', '<'.'?php if(isset($item_num) && ($item_num % $1)){ '.'?'.'>', $item); + $item = str_replace('[tag:/if]', '<'.'?php } ?>', $item); + $item = str_replace('[tag:if_else]', '<'.'?php }else{ ?>', $item); + $items .= $item; + } - // Добавляем GET-запрос в пагинацию если пришло ADD_GET - // или указанов настройках запроса - if ($request->request_use_query == 1 || (isset($params['ADD_GET']) && $params['ADD_GET'] == 1)) - $queries = ($_SERVER['QUERY_STRING']) - ? '?' . $_SERVER['QUERY_STRING'] - : ''; + //== Обрабатываем теги запроса - $pagination = 'index.php?id=' - . $AVE_Core->curentdoc->Id + //-- Парсим теги визуальных блоков + $main_template = preg_replace_callback('/\[tag:block:([A-Za-z0-9-_]{1,20}+)\]/', 'parse_block', $main_template); - . '&doc=' . (empty($AVE_Core->curentdoc->document_alias) - ? prepare_url($AVE_Core->curentdoc->document_title) - : $AVE_Core->curentdoc->document_alias) + //-- Парсим теги системных блоков + $main_template = preg_replace_callback('/\[tag:sysblock:([A-Za-z0-9-_]{1,20}+)\]/', 'parse_sysblock', $main_template); - . '&apage={s}' + //-- Заменяем тег пагинации на пагинацию + $main_template = str_replace('[tag:pages]', $pagination, $main_template); - . ((isset($_REQUEST['artpage']) && is_numeric($_REQUEST['artpage'])) - ? '&artpage=' . $_REQUEST['artpage'] - : '') + //-- Дата + $main_template = preg_replace_callback( + '/\[tag:date:([a-zA-Z0-9-. \/]+)\]/', + create_function('$m','return translate_date(date($m[1], '.$AVE_Core->curentdoc->document_published.')); + '), + $main_template + ); - . ((isset($_REQUEST['page']) && is_numeric($_REQUEST['page'])) - ? '&page=' . $_REQUEST['page'] - : '') + //-- ID Документа + $main_template = str_replace('[tag:docid]', $AVE_Core->curentdoc->Id, $main_template); + //-- ID Автора + $main_template = str_replace('[tag:docauthorid]', $AVE_Core->curentdoc->document_author_id, $main_template); - // Добавляем GET-запрос в пагинацию - . clean_php($queries) - ; + //-- Имя автора + if (preg_match('[tag:docauthor]', $main_content)) + $main_content = str_replace('[tag:docauthor]', get_username_by_id($AVE_Core->curentdoc->document_author_id), $main_content); - // ID пагинации - $pagination_id = (isset($params['PAGINATION']) && $params['PAGINATION'] > 0) - ? $params['PAGINATION'] - : $request->request_pagination; + //-- Время - 1 день назад + $main_template = str_replace('[tag:humandate]', human_date($AVE_Core->curentdoc->document_published), $main_template); - // Собираем пагинацию - $pagination = AVE_Paginations::getPagination($num_pages, 'apage', $pagination, $pagination_id); + //-- Дата создания + $main_template = str_replace('[tag:docdate]', pretty_date(strftime(DATE_FORMAT, $AVE_Core->curentdoc->document_published)), $main_template); - // Костыли для Главной страницы - $pagination = str_ireplace('"//"', '"/"', str_ireplace('///', '/', rewrite_link($pagination))); - $pagination = str_ireplace('"//' . URL_SUFF . '"', '"/"', $pagination); - } - } + //-- Время создания + $main_template = str_replace('[tag:doctime]', pretty_date(strftime(TIME_FORMAT, $AVE_Core->curentdoc->document_published)), $main_template); - // Элементы запроса - $rows = array(); + //-- Домен + $main_template = str_replace('[tag:domain]', getSiteUrl(), $main_template); - // id найденных документов - $request_documents = array(); + //-- Общее число элементов запроса + $main_template = str_replace('[tag:doctotal]', $num_items, $main_template); + //-- Показано элементов запроса на странице + $main_template = str_replace('[tag:doconpage]', $x, $main_template); - while ($row = $sql->FetchRow()) - { - // Собираем Id документов - array_push($request_documents, $row->Id); - // Собираем оставшуюся информацию - array_push($rows, $row); - } + //-- Номер страницы пагинации + $main_template = str_replace('[tag:pages:curent]', get_current_page('apage'), $main_template); - // Обрабатываем шаблоны элементов - $items = ''; - $x = 0; - $items_count = count($rows); + //-- Общее кол-во страниц пагинации + $main_template = str_replace('[tag:pages:total]', $num_pages, $main_template); - global $req_item_num, $use_cache; + //-- Title + $main_template = str_replace('[tag:pagetitle]', stripslashes(htmlspecialchars_decode($AVE_Core->curentdoc->document_title)), $main_template); - $use_cache = $request->request_cache_elements; + //-- Alias + $main_template = str_replace('[tag:alias]', (isset($AVE_Core->curentdoc->document_alias) ? $AVE_Core->curentdoc->document_alias : ''), $main_template); - $item = ''; + //-- Возвращаем параметр документа из БД + $main_template = preg_replace_callback('/\[tag:doc:([a-zA-Z0-9-_]+)\]/u', + function ($match) + { + return isset($row->{$match[1]}) + ? $row->{$match[1]} + : null; + }, + $main_template + ); - foreach ($rows as $row) - { - $x++; - $last_item = ($x == $items_count ? true : false); - $item_num = $x; - $req_item_num = $item_num; - $item = showrequestelement($row, $request->request_template_item); - $item = '<'.'?php $item_num='.var_export($item_num,1).'; $last_item='.var_export($last_item,1).'?'.'>'.$item; - $item = 'Id . ';?>' . $item; - $item = str_replace('[tag:if_first]', '<'.'?php if(isset($item_num) && $item_num===1) { ?'.'>', $item); - $item = str_replace('[tag:if_not_first]', '<'.'?php if(isset($item_num) && $item_num!==1) { ?'.'>', $item); - $item = str_replace('[tag:if_last]', '<'.'?php if(isset($last_item) && $last_item) { ?'.'>', $item); - $item = str_replace('[tag:if_not_last]', '<'.'?php if(isset($item_num) && !$last_item) { ?'.'>', $item); - $item = preg_replace('/\[tag:if_every:([0-9-]+)\]/u', '<'.'?php if(isset($item_num) && !($item_num % $1)){ '.'?'.'>', $item); - $item = preg_replace('/\[tag:if_not_every:([0-9-]+)\]/u', '<'.'?php if(isset($item_num) && ($item_num % $1)){ '.'?'.'>', $item); - $item = str_replace('[tag:/if]', '<'.'?php } ?>', $item); - $item = str_replace('[tag:if_else]', '<'.'?php }else{ ?>', $item); - $items .= $item; - } + //-- Если пришел вызов на активацию языковых файлов + $main_template = preg_replace_callback( + '/\[tag:langfile:([a-zA-Z0-9-_]+)\]/u', + function ($match) + { + global $AVE_Template; - // Обрабатываем теги запроса + return $AVE_Template->get_config_vars($match[1]); + }, + $main_template + ); - // Парсим теги визуальных блоков - $main_template = preg_replace_callback('/\[tag:block:([A-Za-z0-9-_]{1,20}+)\]/', 'parse_block', $main_template); + //-- Вставляем элементы запроса + $return = str_replace('[tag:content]', $items, $main_template); - // Парсим теги системных блоков - $main_template = preg_replace_callback('/\[tag:sysblock:([A-Za-z0-9-_]{1,20}+)\]/', 'parse_sysblock', $main_template); + //-- Парсим тег [hide] + $return = parse_hide($return); - //-- Заменяем тег пагинации на пагинацию - $main_template = str_replace('[tag:pages]', $pagination, $main_template); + //-- Абсолютный путь + $return = str_replace('[tag:path]', ABS_PATH, $return); - $main_template = preg_replace_callback( - '/\[tag:date:([a-zA-Z0-9-. \/]+)\]/', - create_function('$m','return translate_date(date($m[1], '.$AVE_Core->curentdoc->document_published.')); - '), - $main_template - ); + //-- Путь до папки шаблона + $return = str_replace('[tag:mediapath]', ABS_PATH . 'templates/' . ((defined('THEME_FOLDER') === false) ? DEFAULT_THEME_FOLDER : THEME_FOLDER) . '/', $return); - $main_template = str_replace('[tag:humandate]', human_date($AVE_Core->curentdoc->document_published), $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); + //-- Парсим модули + $return = $AVE_Core->coreModuleTagParse($return); - $main_template = str_replace('[tag:domain]', getSiteUrl(), $main_template); + //-- Фиксируем время генерации запроса + $GLOBALS['block_generate']['REQUESTS'][$id][] = Debug::endTime('request_' . $id); - if (preg_match('/\[tag:docauthor]/u', $item)) - { - $main_template = str_replace('[tag:docauthor]', get_username_by_id($AVE_Core->curentdoc->document_author_id), $main_template); + // Статистика + if ($request->request_show_statistic) + $return .= "

Найдено: $num_items
Показано: $items_count
Время генерации: " . Debug::endTime('request_' . $id) . " сек
Пиковое значение: ".number_format(memory_get_peak_usage()/1024, 0, ',', ' ') . ' Kb
'; + + return $return; } - //-- Общее число элементов запроса - $main_template = str_replace('[tag:doctotal]', $num_items, $main_template); - //-- Показано элементов запроса на странице - $main_template = str_replace('[tag:doconpage]', $x, $main_template); + /** + * Функция получения содержимого поля для обработки в шаблоне запроса + *
+	 * Пример использования в шаблоне:
+	 *	
  • + * + *
  • + *
    + * + * @param int $rubric_id идентификатор поля, для [tag:rfld:12][150] $rubric_id = 12 + * @param int $document_id идентификатор документа к которому принадлежит поле. + * @param int $maxlength необязательный параметр, количество возвращаемых символов. + * Если данный параметр указать со знаком минус + * содержимое поля будет очищено от HTML-тегов. + * @return string + */ + function request_get_document_field_value($rubric_id, $document_id, $maxlength = 0) + { - //-- Номер страницы пагинации - $main_template = str_replace('[tag:pages:curent]', get_current_page('apage'), $main_template); - //-- Общее кол-во страниц пагинации - $main_template = str_replace('[tag:pages:total]', $num_pages, $main_template); + if (! is_numeric($rubric_id) || $rubric_id < 1 || ! is_numeric($document_id) || $document_id < 1) return ''; - $main_template = str_replace('[tag:pagetitle]', stripslashes(htmlspecialchars_decode($AVE_Core->curentdoc->document_title)), $main_template); - $main_template = str_replace('[tag:alias]', (isset($AVE_Core->curentdoc->document_alias) ? $AVE_Core->curentdoc->document_alias : ''), $main_template); + $document_fields = get_document_fields($document_id); - // Возвращаем параметр документа из БД - $main_template = preg_replace_callback('/\[tag:doc:([a-zA-Z0-9-_]+)\]/u', - function ($match) - { - return isset($row->{$match[1]}) - ? $row->{$match[1]} - : null; - }, - $main_template - ); - - // Если пришел вызов на активацию языковых файлов - $main_template = preg_replace_callback( - '/\[tag:langfile:([a-zA-Z0-9-_]+)\]/u', - function ($match) + $field_value = isset($document_fields[$rubric_id]) + ? $document_fields[$rubric_id]['field_value'] + : ''; + + if (! empty($field_value)) { - global $AVE_Template; - - return $AVE_Template->get_config_vars($match[1]); - }, - $main_template - ); - - // Вставляем элементы запроса - $return = str_replace('[tag:content]', $items, $main_template); - - // Парсим тег [hide] - $return = parse_hide($return); - - $return = str_replace('[tag:path]', ABS_PATH, $return); - $return = str_replace('[tag:mediapath]', ABS_PATH . 'templates/' . ((defined('THEME_FOLDER') === false) ? DEFAULT_THEME_FOLDER : THEME_FOLDER) . '/', $return); - - // Парсим модули - $return = $AVE_Core->coreModuleTagParse($return); - - // Фиксируем время генерации запроса - $GLOBALS['block_generate'][] = array('REQUEST_' . $id => Debug::endTime('request_' . $id)); - - // Статистика - if ($request->request_show_statistic) - $return .= "

    Найдено: $num_items
    Показано: $items_count
    Время генерации: " . Debug::endTime('request_' . $id) . " сек
    Пиковое значение: ".number_format(memory_get_peak_usage()/1024, 0, ',', ' ') . ' Kb
    '; - - return $return; -} - -/** - * Функция получения содержимого поля для обработки в шаблоне запроса - *
    - * Пример использования в шаблоне:
    - *	
  • - * - *
  • - *
    - * - * @param int $rubric_id идентификатор поля, для [tag:rfld:12][150] $rubric_id = 12 - * @param int $document_id идентификатор документа к которому принадлежит поле. - * @param int $maxlength необязательный параметр, количество возвращаемых символов. - * Если данный параметр указать со знаком минус - * содержимое поля будет очищено от HTML-тегов. - * @return string - */ -function request_get_document_field_value($rubric_id, $document_id, $maxlength = 0) -{ - - if (!is_numeric($rubric_id) || $rubric_id < 1 || !is_numeric($document_id) || $document_id < 1) return ''; - - $document_fields = get_document_fields($document_id); - - $field_value = isset($document_fields[$rubric_id]) ? $document_fields[$rubric_id]['field_value'] : ''; - - if (!empty($field_value)) - { - $field_value = strip_tags($field_value, '

    '); - $field_value = str_replace('[tag:mediapath]', ABS_PATH . 'templates/' . ((defined('THEME_FOLDER') === false) ? DEFAULT_THEME_FOLDER : THEME_FOLDER) . '/', $field_value); - } + $field_value = strip_tags($field_value, '

    '); + $field_value = str_replace('[tag:mediapath]', ABS_PATH . 'templates/' . ((defined('THEME_FOLDER') === false) ? DEFAULT_THEME_FOLDER : THEME_FOLDER) . '/', $field_value); + } - if (is_numeric($maxlength) && $maxlength != 0) - { - if ($maxlength < 0) + if (is_numeric($maxlength) && $maxlength != 0) { - $field_value = str_replace(array("\r\n", "\n", "\r"), ' ', $field_value); - $field_value = strip_tags($field_value, ""); - $field_value = preg_replace('/ +/', ' ', $field_value); - $maxlength = abs($maxlength); + if ($maxlength < 0) + { + $field_value = str_replace(array("\r\n", "\n", "\r"), ' ', $field_value); + $field_value = strip_tags($field_value, ""); + $field_value = preg_replace('/ +/', ' ', $field_value); + $maxlength = abs($maxlength); + } + + $field_value = mb_substr($field_value, 0, $maxlength) . (strlen($field_value) > $maxlength ? '... ' : ''); } - $field_value = mb_substr($field_value, 0, $maxlength) . (strlen($field_value) > $maxlength ? '... ' : ''); + return $field_value; } - - return $field_value; -} -?> +?> \ No newline at end of file diff --git a/functions/func.sysblock.php b/functions/func.sysblock.php index 4ac3495..511d579 100644 --- a/functions/func.sysblock.php +++ b/functions/func.sysblock.php @@ -33,6 +33,10 @@ function parse_sysblock($id) $cache_file = BASE_DIR . '/cache/sql/sysblock/' . $id . '.cache'; + // Если включен DEV MODE, то отключаем кеширование запросов + if (defined('DEV_MODE') AND DEV_MODE) + $cache_file = null; + if (! file_exists(dirname($cache_file))) mkdir(dirname($cache_file), 0766, true); @@ -52,7 +56,8 @@ function parse_sysblock($id) LIMIT 1 ")->GetCell(); - file_put_contents($cache_file,$return); + if ($cache_file) + file_put_contents($cache_file, $return); } //-- парсим теги @@ -88,7 +93,7 @@ function parse_sysblock($id) $gen_time = Debug::endTime('SYSBLOCK_' . $id); - $GLOBALS['block_generate'][] = array('SYSBLOCK_'. $id => $gen_time); + $GLOBALS['block_generate']['SYSBLOCK'][$id] = $gen_time; return $return; } diff --git a/inc/config.php b/inc/config.php index 1f17502..92e301c 100755 --- a/inc/config.php +++ b/inc/config.php @@ -11,9 +11,9 @@ * @license GPL v.2 */ - @define('APP_NAME', 'AVE.CMS'); - @define('APP_VERSION', '3.22'); - @define('APP_INFO', 'Ave-Cms.Ru '.'© 2007-' . date('Y')); + @define('APP_NAME', 'AVE.cms'); + @define('APP_VERSION', '3.24'); + @define('APP_INFO', 'Ave-Cms.Ru '.'© 2007-' . date('Y')); $GLOBALS['CMS_CONFIG']['USER_IP'] = array('DESCR' =>'Использовать IP для автологина на сайте','default'=>false,'TYPE'=>'bool','VARIANT'=>''); $GLOBALS['CMS_CONFIG']['REWRITE_MODE'] = array('DESCR' =>'Использовать ЧПУ Адреса вида index.php будут преобразованы в /home/','default'=>true,'TYPE'=>'bool','VARIANT'=>''); @@ -24,10 +24,8 @@ $themes = array(); foreach (glob(dirname(dirname(__FILE__)) . '/templates/*') as $filename) - { if (is_dir($filename)) - $themes[]=basename($filename); - } + $themes[] = basename($filename); $GLOBALS['CMS_CONFIG']['DEFAULT_THEME_FOLDER'] = array('DESCR' =>'Тема публичной части','default'=>$themes[0],'TYPE'=>'dropdown','VARIANT'=>$themes); @@ -35,7 +33,7 @@ $GLOBALS['CMS_CONFIG']['CODEMIRROR_THEME'] = array( 'DESCR' => 'Цветовая схема Codemirror', - 'default' => 'default', + 'default' => 'dracula', 'TYPE' => 'dropdown', 'VARIANT' => array( 'default', @@ -90,6 +88,7 @@ ); $GLOBALS['CMS_CONFIG']['ADMIN_MENU'] = array('DESCR' => 'Использовать плавующее боковое меню','default'=>true,'TYPE'=>'bool','VARIANT'=>''); + $GLOBALS['CMS_CONFIG']['ADMIN_MENU_QUICK_ADD'] = array('DESCR' => 'Показывать меню в шапке с действиями','default'=>false,'TYPE'=>'bool','VARIANT'=>''); $GLOBALS['CMS_CONFIG']['ADMIN_CAPTCHA'] = array('DESCR' => 'Использовать капчу при входе в админку','default'=>false,'TYPE'=>'bool','VARIANT'=>''); $GLOBALS['CMS_CONFIG']['ADMIN_EDITMENU'] = array('DESCR' => 'Использовать всплывающие "Действия" в системе','default'=>true,'TYPE'=>'bool','VARIANT'=>''); @@ -145,12 +144,16 @@ $GLOBALS['CMS_CONFIG']['OUTPUT_EXPIRE_OFFSET'] = array('DESCR' => 'Время жизни кеширования страницы (60*60 - 1 час)','default'=>60*60, 'TYPE'=>'integer', 'VARIANT'=>''); $GLOBALS['CMS_CONFIG']['CHECK_VERSION'] = array('DESCR' => 'Проверка наличия новых версий','default'=>true,'TYPE'=>'bool','VARIANT'=>''); + // 3.23 + $GLOBALS['CMS_CONFIG']['REQUEST_ETC'] = array('DESCR' => 'Окончание в полях запроса', 'default'=>'...', 'TYPE'=>'string', 'VARIANT'=>''); + $GLOBALS['CMS_CONFIG']['REQUEST_BREAK_WORDS'] = array('DESCR' => 'Разбивать слова при выводе полей в запросе', 'default'=>false, 'TYPE'=>'bool', 'VARIANT'=>''); + $GLOBALS['CMS_CONFIG']['REQUEST_STRIP_TAGS'] = array('DESCR' => 'При - у поля, оставляем теги в результате', 'default'=>'', 'TYPE'=>'string', 'VARIANT'=>''); + + $GLOBALS['CMS_CONFIG']['DEV_MODE'] = array('DESCR' => 'Режим разработчика (Отключено кеширование SQL)', 'default'=>false, 'TYPE'=>'bool', 'VARIANT'=>''); include_once(dirname(dirname(__FILE__)) . '/inc/config.inc.php'); foreach($GLOBALS['CMS_CONFIG'] as $k => $v) - { if(! defined($k)) define($k, $v['default']); - } -?> +?> \ No newline at end of file diff --git a/inc/init.php b/inc/init.php index 888e028..a21121d 100644 --- a/inc/init.php +++ b/inc/init.php @@ -359,7 +359,7 @@ lang_status = '1' ORDER BY lang_default ASC - ", SYSTEM_CACHE_LIFETIME); + ", SYSTEM_CACHE_LIFETIME, 'langs'); while ($row = $sql->FetchRow()) { @@ -394,6 +394,14 @@ // Язык системы set_locale(); + // Debug + require (BASE_DIR . '/class/class.debug.php'); + $Debug = new Debug; + + // Hooks + require (BASE_DIR . '/class/class.hooks.php'); + $Hooks = new Hooks; + // Класс Шаблонов SMARTY require (BASE_DIR . '/class/class.template.php'); @@ -403,12 +411,4 @@ // Класс Модулей require (BASE_DIR . '/class/class.modules.php'); $AVE_Module = new AVE_Module; - - // Debug - require (BASE_DIR . '/class/class.debug.php'); - $Debug = new Debug; - - // Hooks - require (BASE_DIR . '/class/class.hooks.php'); - $Hooks = new Hooks; -?> +?> \ No newline at end of file diff --git a/install/data_base.sql b/install/data_base.sql index be84a0c..a17a672 100755 --- a/install/data_base.sql +++ b/install/data_base.sql @@ -262,7 +262,7 @@ INSERT INTO `%%PRFX%%_rubric_permissions` VALUES (5, 1, 5, 'docread');#inst# INSERT INTO `%%PRFX%%_rubrics` VALUES - (1, 'Основные страницы', '', '0', '

    [tag:fld:header]

    [tag:fld:text]', 1, 1, 0, 1, '', '', '', '', '', '', '0', '', '0', '');#inst# + (1, 'Основные страницы', '', '0', '

    [tag:fld:header]

    [tag:fld:text]', 1, 1, 0, 1, '', '', '', '', '', '', '', '0', '', '0', '');#inst# INSERT INTO `%%PRFX%%_settings` VALUES ( diff --git a/install/structure_base.sql b/install/structure_base.sql index fad24c5..5403617 100755 --- a/install/structure_base.sql +++ b/install/structure_base.sql @@ -1,13 +1,14 @@ CREATE TABLE `%%PRFX%%_blocks` ( - `id` mediumint(5) unsigned NOT NULL AUTO_INCREMENT, - `block_name` varchar(255) NOT NULL, - `block_description` tinytext NOT NULL, - `block_alias` varchar(20) NOT NULL, - `block_text` longtext NOT NULL, - `block_active` enum('0','1') NOT NULL DEFAULT '1', - `block_author_id` int(10) unsigned NOT NULL DEFAULT '1', - `block_created` int(10) unsigned NOT NULL DEFAULT '0', - PRIMARY KEY (`id`) + `id` mediumint(5) unsigned NOT NULL AUTO_INCREMENT, + `block_name` varchar(255) NOT NULL, + `block_description` tinytext NOT NULL, + `block_alias` varchar(20) NOT NULL, + `block_text` longtext NOT NULL, + `block_active` enum('0','1') NOT NULL DEFAULT '1', + `block_author_id` int(10) unsigned NOT NULL DEFAULT '1', + `block_created` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `block_alias` (`block_alias`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;#inst# CREATE TABLE `%%PRFX%%_countries` ( @@ -20,22 +21,22 @@ CREATE TABLE `%%PRFX%%_countries` ( ) ENGINE=MyISAM DEFAULT CHARSET=utf8;#inst# CREATE TABLE `%%PRFX%%_document_fields` ( - `Id` int(10) unsigned NOT NULL auto_increment, - `rubric_field_id` mediumint(5) unsigned NOT NULL default '0', - `document_id` int(10) unsigned NOT NULL default '0', - `field_number_value` decimal(18,4) NOT NULL default '0.0000', + `Id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `rubric_field_id` mediumint(5) unsigned NOT NULL DEFAULT '0', + `document_id` int(10) unsigned NOT NULL DEFAULT '0', + `field_number_value` decimal(18,4) NOT NULL DEFAULT '0.0000', `field_value` varchar(500) NOT NULL, - `document_in_search` enum('1','0') NOT NULL default '1', - PRIMARY KEY (`Id`), + `document_in_search` enum('1','0') NOT NULL DEFAULT '1', + PRIMARY KEY (`Id`), KEY `document_id` (`document_id`), - KEY `rubric_field_id` (`rubric_field_id`,`document_in_search`), - KEY `field_value` (`field_value`(333)) + KEY `field_value` (`field_value`), + KEY `rubric_field_id` (`rubric_field_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# CREATE TABLE `%%PRFX%%_document_fields_text` ( - `Id` int(10) unsigned NOT NULL auto_increment, + `Id` int(10) unsigned NOT NULL AUTO_INCREMENT, `rubric_field_id` mediumint(5) unsigned NOT NULL DEFAULT '0', - `document_id` int(10) unsigned NOT NULL default '0', + `document_id` int(10) unsigned NOT NULL DEFAULT '0', `field_value` longtext NOT NULL, PRIMARY KEY (`Id`), KEY `document_id` (`document_id`), @@ -61,7 +62,8 @@ CREATE TABLE `%%PRFX%%_document_remarks` ( `remark_published` int(10) unsigned NOT NULL default '0', `remark_status` enum('1','0') NOT NULL default '1', `remark_author_email` varchar(255) NOT NULL, - PRIMARY KEY (`Id`) + PRIMARY KEY (`Id`), + KEY `document_id` (`document_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# CREATE TABLE `%%PRFX%%_document_rev` ( @@ -70,7 +72,8 @@ CREATE TABLE `%%PRFX%%_document_rev` ( `doc_revision` int(10) unsigned NOT NULL DEFAULT '0', `doc_data` longtext NOT NULL, `user_id` int(11) NOT NULL DEFAULT '0', - PRIMARY KEY (`Id`) + PRIMARY KEY (`Id`), + KEY `doc_id` (`doc_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# CREATE TABLE `%%PRFX%%_documents` ( @@ -101,7 +104,7 @@ CREATE TABLE `%%PRFX%%_documents` ( `document_tags` text NOT NULL, `document_lang` varchar(5) NOT NULL, `document_lang_group` int(10) NOT NULL DEFAULT '0', - `document_property` text NOT NULL, + `document_property` text, PRIMARY KEY (`Id`), UNIQUE KEY `document_alias` (`document_alias`), KEY `rubric_id` (`rubric_id`), @@ -117,7 +120,8 @@ CREATE TABLE `%%PRFX%%_document_alias_history` ( `document_alias_author` mediumint(5) unsigned NOT NULL DEFAULT '1', `document_alias_changed` int(10) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`Id`), - UNIQUE KEY `document_alias` (`document_alias`) + UNIQUE KEY `document_alias` (`document_alias`), + KEY `document_id` (`document_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# CREATE TABLE `%%PRFX%%_document_tags` ( @@ -179,7 +183,8 @@ CREATE TABLE `%%PRFX%%_navigation` ( `end` text NOT NULL, `user_group` text NOT NULL, `expand_ext` enum('0','1','2') DEFAULT '1', - PRIMARY KEY (`navigation_id`) + PRIMARY KEY (`navigation_id`), + KEY `alias` (`alias`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# CREATE TABLE `%%PRFX%%_navigation_items` ( @@ -249,6 +254,7 @@ CREATE TABLE `%%PRFX%%_request` ( `request_ajax` enum('0','1') NOT NULL DEFAULT '0', `request_show_sql` enum('0','1') NOT NULL DEFAULT '0', PRIMARY KEY (`Id`), + KEY `rubric_id` (`rubric_id`), KEY `request_alias` (`request_alias`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# @@ -261,7 +267,8 @@ CREATE TABLE `%%PRFX%%_request_conditions` ( `condition_join` enum('OR','AND') NOT NULL DEFAULT 'AND', `condition_position` smallint(3) unsigned NOT NULL DEFAULT '1', `condition_status` enum('0','1') NOT NULL DEFAULT '1', - PRIMARY KEY (`Id`) + PRIMARY KEY (`Id`), + KEY `request_id` (`request_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# CREATE TABLE `%%PRFX%%_rubric_fields` ( @@ -271,16 +278,17 @@ CREATE TABLE `%%PRFX%%_rubric_fields` ( `rubric_field_alias` varchar(20) NOT NULL, `rubric_field_title` varchar(255) NOT NULL, `rubric_field_type` varchar(75) NOT NULL, - `rubric_field_numeric` enum('0','1') default '0' NOT NULL, + `rubric_field_numeric` enum('0','1') NOT NULL DEFAULT '0', `rubric_field_position` smallint(3) unsigned NOT NULL DEFAULT '1', `rubric_field_default` text NOT NULL, - `rubric_field_search` enum('0','1') default '1' NOT NULL, + `rubric_field_search` enum('0','1') NOT NULL DEFAULT '1', `rubric_field_template` text NOT NULL, `rubric_field_template_request` text NOT NULL, `rubric_field_description` text NOT NULL, PRIMARY KEY (`Id`), KEY `rubric_id` (`rubric_id`), - KEY `rubric_field_type` (`rubric_field_type`) + KEY `rubric_field_type` (`rubric_field_type`), + KEY `rubric_field_alias` (`rubric_field_alias`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# CREATE TABLE `%%PRFX%%_rubric_fields_group` ( @@ -332,6 +340,7 @@ CREATE TABLE `%%PRFX%%_rubrics` ( `rubric_teaser_template` text NOT NULL, `rubric_admin_teaser_template` text NOT NULL, `rubric_header_template` text NOT NULL, + `rubric_footer_template` text NOT NULL, `rubric_linked_rubric` varchar(255) NOT NULL DEFAULT '0', `rubric_description` text NOT NULL, `rubric_meta_gen` enum('0','1') default '0' NOT NULL, @@ -420,6 +429,15 @@ CREATE TABLE `%%PRFX%%_settings_lang` ( UNIQUE KEY `lang_key` (`lang_key`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;#inst# +CREATE TABLE `%%PRFX%%_settings_menu` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) DEFAULT NULL, + `link` varchar(255) DEFAULT NULL, + `position` int(3) DEFAULT NULL, + `status` enum('0','1') DEFAULT '1', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8;#inst# + CREATE TABLE `%%PRFX%%_sysblocks` ( `id` mediumint(5) unsigned NOT NULL AUTO_INCREMENT, `sysblock_name` varchar(255) NOT NULL, @@ -499,7 +517,8 @@ CREATE TABLE `%%PRFX%%_users_session` ( `ip` int(32) unsigned NOT NULL, `agent` varchar(255) NOT NULL, `last_activ` int(11) NOT NULL DEFAULT '0', - PRIMARY KEY (`id`) + PRIMARY KEY (`id`), + KEY `user_id` (`user_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# CREATE TABLE `%%PRFX%%_view_count` ( @@ -508,4 +527,4 @@ CREATE TABLE `%%PRFX%%_view_count` ( `day_id` int(11) NOT NULL, `count` int(11) NOT NULL, PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# +) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# \ No newline at end of file