Browse Source

v 3.24

master
M@d D3n 6 years ago
parent
commit
4e4a58d40a
  1. 44
      admin/admin.php
  2. 54
      admin/docs.php
  3. 185
      admin/functions/func.admin.common.php
  4. 19
      admin/index.php
  5. 47
      admin/init.php
  6. 6
      admin/lang/bg/settings.txt
  7. 3
      admin/lang/ru/docs.txt
  8. 8
      admin/lang/ru/groups.txt
  9. 54
      admin/lang/ru/rubs.txt
  10. 8
      admin/lang/ru/settings.txt
  11. 1
      admin/lang/ru/templates.txt
  12. 39
      admin/modules.php
  13. 108
      admin/rubs.php
  14. 11
      admin/settings.php
  15. 2
      admin/start.php
  16. 14
      admin/templates/css/main.css
  17. 15
      admin/templates/documents/doc_search.tpl
  18. 6
      admin/templates/documents/form.tpl
  19. 5
      admin/templates/documents/form_after.tpl
  20. 4
      admin/templates/groups/perms.tpl
  21. 4
      admin/templates/js/main.js
  22. 60
      admin/templates/main.tpl
  23. 136
      admin/templates/rubs/_field_code.tpl
  24. 142
      admin/templates/rubs/_field_list.tpl
  25. 136
      admin/templates/rubs/_fields_list.tpl
  26. 51
      admin/templates/rubs/code.tpl
  27. 2
      admin/templates/rubs/field_template.tpl
  28. 55
      admin/templates/rubs/fields_groups.tpl
  29. 198
      admin/templates/rubs/fields_list.tpl
  30. 170
      admin/templates/rubs/form.tpl
  31. 15
      admin/templates/rubs/list.tpl
  32. 240
      admin/templates/rubs/rules.tpl
  33. 34
      admin/templates/rubs/tmpls.tpl
  34. 78
      admin/templates/settings/edit_file.tpl
  35. 13
      admin/templates/settings/pagination_edit.tpl
  36. 14
      admin/templates/settings/settings_case.tpl
  37. 14
      admin/templates/settings/settings_countries.tpl
  38. 14
      admin/templates/settings/settings_lang.tpl
  39. 13
      admin/templates/settings/settings_main.tpl
  40. 14
      admin/templates/settings/settings_pagination.tpl
  41. 8
      admin/templates/templates/form.tpl
  42. 135
      class/class.core.php
  43. 95
      class/class.database.php
  44. 293
      class/class.docs.php
  45. 289
      class/class.modules.php
  46. 50
      class/class.navigation.php
  47. 14
      class/class.request.php
  48. 465
      class/class.rubs.php
  49. 142
      class/class.settings.php
  50. 3
      class/class.thumbnail.php
  51. 11
      class/class.user.php
  52. 26
      fields/checkbox/field.php
  53. 2
      fields/image_mega/tpl/field-doc.tpl
  54. 0
      fields/image_multi_new_3inputs/.gitkeep
  55. 0
      fields/image_multi_new_3inputs/css/.gitkeep
  56. 96
      fields/image_multi_new_3inputs/css/field.css
  57. 307
      fields/image_multi_new_3inputs/field.php
  58. 0
      fields/image_multi_new_3inputs/js/.gitkeep
  59. 235
      fields/image_multi_new_3inputs/js/field.js
  60. 231
      fields/image_multi_new_3inputs/js/outside.js
  61. 0
      fields/image_multi_new_3inputs/lang/.gitkeep
  62. 27
      fields/image_multi_new_3inputs/lang/bg.txt
  63. 29
      fields/image_multi_new_3inputs/lang/cz.txt
  64. 26
      fields/image_multi_new_3inputs/lang/en.txt
  65. 27
      fields/image_multi_new_3inputs/lang/pl.txt
  66. 27
      fields/image_multi_new_3inputs/lang/ru.txt
  67. 27
      fields/image_multi_new_3inputs/lang/ua.txt
  68. 0
      fields/image_multi_new_3inputs/tpl/.gitkeep
  69. 3
      fields/image_multi_new_3inputs/tpl/field-doc.tpl
  70. 3
      fields/image_multi_new_3inputs/tpl/field-req.tpl
  71. 65
      fields/image_multi_new_3inputs/tpl/field.tpl
  72. 24
      fields/teasers/field.php
  73. 29
      fields/teasers/js/field.js
  74. 4
      fields/teasers/tpl/field.tpl
  75. 8
      fields/youtube/lang/bg.txt
  76. 7
      fields/youtube/lang/cz.txt
  77. 7
      fields/youtube/lang/en.txt
  78. 7
      fields/youtube/lang/pl.txt
  79. 7
      fields/youtube/lang/ru.txt
  80. 7
      fields/youtube/lang/ua.txt
  81. 14
      fields/youtube/tpl/field.tpl
  82. 9
      functions/func.block.php
  83. 19
      functions/func.breadcrumbs.php
  84. 39
      functions/func.common.php
  85. 103
      functions/func.fields.php
  86. 18
      functions/func.helpers.php
  87. 95
      functions/func.navigation.php
  88. 254
      functions/func.parserequest.php
  89. 9
      functions/func.sysblock.php
  90. 21
      inc/config.php
  91. 18
      inc/init.php
  92. 2
      install/data_base.sql
  93. 59
      install/structure_base.sql

44
admin/admin.php

@ -1,6 +1,6 @@
<?php
/**
/**
* AVE.cms
*
* @package AVE.cms
@ -11,41 +11,43 @@
* @license GPL v.2
*/
define('ACP', 1);
define('ACPL', 1);
define('BASE_DIR', str_replace("\\", "/", dirname(dirname(__FILE__))));
define('ACP', 1);
define('ACPL', 1);
define('BASE_DIR', str_replace("\\", "/", dirname(dirname(__FILE__))));
if (! @filesize(BASE_DIR . '/inc/db.config.php')) {
if (! @filesize(BASE_DIR . '/inc/db.config.php'))
{
header('Location:/install/index.php');
exit;
}
}
require(BASE_DIR . '/admin/init.php');
require(BASE_DIR . '/admin/init.php');
unset ($captcha_ok);
unset ($captcha_ok);
if (isset($_REQUEST['do']) && $_REQUEST['do'] == 'logout')
{
if (isset($_REQUEST['do']) && $_REQUEST['do'] == 'logout')
{
// Завершение работы в админке
reportLog($AVE_Template->get_config_vars('EXIT_ADMIN'));
user_logout();
header('Location:admin.php');
}
}
if(auth_cookie())
{
if (auth_cookie())
{
header('Location:index.php');
exit;
}
}
if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'login')
{
if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'login')
{
// Авторизация
if (!empty($_POST['user_login']) && !empty($_POST['user_pass']))
if (! empty($_POST['user_login']) && !empty($_POST['user_pass']))
{
if (ADMIN_CAPTCHA)
{
if (isset($_SESSION['captcha_keystring']) && isset($_POST['securecode']) && $_SESSION['captcha_keystring'] == $_POST['securecode']) $captcha_ok = 1;
if (isset($_SESSION['captcha_keystring']) && isset($_POST['securecode']) && $_SESSION['captcha_keystring'] == $_POST['securecode'])
$captcha_ok = 1;
else
{
unset($_SESSION['user_id'], $_SESSION['user_pass']);
@ -90,8 +92,8 @@ if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'login')
}
}
}
}
$AVE_Template->assign('captcha', ADMIN_CAPTCHA);
$AVE_Template->display('login.tpl');
$AVE_Template->assign('captcha', ADMIN_CAPTCHA);
$AVE_Template->display('login.tpl');
?>

54
admin/docs.php

@ -1,6 +1,6 @@
<?php
/**
/**
* AVE.cms
*
* @package AVE.cms
@ -11,34 +11,34 @@
* @license GPL v.2
*/
if (!defined('ACP'))
{
if (! defined('ACP'))
{
header('Location:index.php');
exit;
}
}
global $AVE_DB, $AVE_Template;
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');
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 = new AVE_Document;
$AVE_Rubric = new AVE_Rubric;
$AVE_Navigation = new AVE_Navigation;
$AVE_Request = new AVE_Request;
$AVE_Document->documentTemplateTimeAssign();
$AVE_Document->documentTemplateTimeAssign();
$AVE_Rubric->rubricPermissionFetch();
$AVE_Rubric->rubricPermissionFetch();
$AVE_Template->config_load(BASE_DIR . '/admin/lang/' . $_SESSION['admin_language'] . '/docs.txt', 'docs');
$AVE_Template->config_load(BASE_DIR . '/admin/lang/' . $_SESSION['admin_language'] . '/docs.txt', 'docs');
$AVE_Template->assign("navi", $AVE_Template->fetch("navi/navi.tpl"));
$AVE_Template->assign("navi", $AVE_Template->fetch("navi/navi.tpl"));
switch($_REQUEST['action'])
{
switch($_REQUEST['action'])
{
case '' :
if (check_permission_acp('document_view'))
{
@ -74,8 +74,11 @@ switch($_REQUEST['action'])
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;
@ -94,8 +97,13 @@ switch($_REQUEST['action'])
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->documentNew((int)$_REQUEST['rubric_id']);
}
break;
@ -293,6 +301,12 @@ switch($_REQUEST['action'])
$AVE_Document->documentAliasDel();
}
break;
}
case 'redirect':
if (check_permission_acp('document_view'))
{
$AVE_Document->documentSaveRedirect();
}
break;
}
?>

185
admin/functions/func.admin.common.php

@ -1,6 +1,6 @@
<?php
/**
/**
* AVE.cms
*
* @package AVE.cms
@ -8,14 +8,14 @@
* @filesource
*/
/**
/**
* Если был referer, то перенапрявляем на него
*
* @param
* @return $link
*/
function get_referer_admin_link()
{
function get_referer_admin_link()
{
static $link = null;
if ($link === null)
@ -31,15 +31,16 @@ function get_referer_admin_link()
}
return $link;
}
}
/**
/**
* Получаем кол-во записей в журналах событий
*
* @return Array массив из кол-ва записей
*/
function getLogRecords(){
function getLogRecords()
{
global $AVE_DB, $AVE_Template;
$logs = array();
@ -72,15 +73,15 @@ function getLogRecords(){
// Передаем данные в шаблон для вывода
$AVE_Template->assign('logs', $logs);
}
}
/**
/**
* Список пользователей за последние $onlinetime секунд
*
* @param int $onlinetime количество секунд
* @return Array массив из пользователей отсортированный по последней активности
*/
function get_online_users($onlinetime=USERS_TIME_SHOW){
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");
@ -92,16 +93,16 @@ function get_online_users($onlinetime=USERS_TIME_SHOW){
array_push($online_users,$row);
}
$AVE_Template->assign('online_users', $online_users);
}
}
/**
/**
* Форматированный вывод размера
*
* @param int $file_size размер
* @return string нормированный размер с единицой измерения
*/
function format_size($file_size)
{
function format_size($file_size)
{
if ($file_size >= 1073741824)
{
$file_size = round($file_size / 1073741824 * 100) / 100 . ' Gb';
@ -120,14 +121,14 @@ function format_size($file_size)
}
return $file_size;
}
}
/**
/**
* Извлечение из БД статистики по основным компонентам системы
*
*/
function get_ave_info()
{
function get_ave_info()
{
global $AVE_DB, $AVE_Template;
$cnts = array();
@ -162,16 +163,16 @@ function get_ave_info()
}
$AVE_Template->assign('cnts', $cnts);
}
}
/**
/**
* Размер дириктории
*
* @param string $directory наименование директории
* @return int
*/
function get_dir_size($directory)
{
function get_dir_size($directory)
{
if (!is_dir($directory)) return -1;
$size = 0;
if ($DIR = opendir($directory))
@ -200,15 +201,15 @@ function get_dir_size($directory)
}
return $size;
}
}
/**
/**
* Размер базы данных
*
* @return int
*/
function get_mysql_size()
{
function get_mysql_size()
{
global $AVE_DB;
$mysql_size = 0;
@ -219,10 +220,11 @@ function get_mysql_size()
}
return format_size($mysql_size);
}
}
function get_ave_tags($srcfile)
{
function get_ave_tags($srcfile)
{
if (@include_once($srcfile))
{
reset ($vorlage);
@ -241,11 +243,11 @@ function get_ave_tags($srcfile)
}
return null;
}
}
function get_all_templates()
{
function get_all_templates()
{
global $AVE_DB;
static $templates = null;
@ -268,35 +270,34 @@ function get_all_templates()
}
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 getInstaledModules()
{
if (check_permission('mod_' . $row->ModuleSysName))
global $AVE_DB, $AVE_Template, $AVE_Module;
$modules = $AVE_Module->_modules;
$modules_instaled = array();
foreach ($modules AS $module)
{
array_push($modules, $row);
if ($module['ModuleAdminEdit'] == 1 && $module['status'])
$modules_instaled[] = array(
'ModuleName' => $module['ModuleName'],
'ModuleSysName' => $module['ModuleSysName']
);
}
unset ($modules);
$AVE_Template->assign('modules', $modules_instaled);
}
$AVE_Template->assign('modules', $modules);
}
function get_mime_type($file)
{
function get_mime_type($file)
{
$file_extension = strtolower(mb_substr(strrchr($file, '.'), 1));
switch ($file_extension)
@ -379,10 +380,11 @@ function get_mime_type($file)
}
return $ctype;
}
}
function file_download($filename, $retbytes = true)
{
function file_download($filename, $retbytes = true)
{
$chunksize = 1*(1024*1024);
$buffer = '';
$cnt = 0;
@ -404,10 +406,11 @@ function file_download($filename, $retbytes = true)
if ($retbytes && $status) return $cnt;
return $status;
}
}
function is_php_code($check_code)
{
function is_php_code($check_code)
{
$check_code = stripslashes($check_code);
$check_code = str_replace(' ', '', $check_code);
$check_code = strtolower($check_code);
@ -425,21 +428,25 @@ function is_php_code($check_code)
}
return false;
}
}
function check_permission_acp($perm)
{
if (!check_permission($perm))
function check_permission_acp($perm)
{
if (!defined('NOPERM')) define('NOPERM', 1);
if (! check_permission($perm))
{
if (! defined('NOPERM'))
define('NOPERM', 1);
return false;
}
return true;
}
}
//Проверка на наличие модуля Контакты и новых писем
function ContactsModuleCheck() {
//Проверка на наличие модуля Контакты и новых писем
function ContactsModuleCheck() {
global $AVE_DB, $AVE_Template;
$sql = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_module WHERE ModuleFunction = 'contact' and ModuleStatus = '1'");
@ -453,10 +460,11 @@ function ContactsModuleCheck() {
}
$AVE_Template->assign('num_posts', $num_posts);
$AVE_Template->assign('contacts', $contacts);
}
}
//Проверка на наличие модуля Логин
function LoginModuleCheck() {
//Проверка на наличие модуля Логин
function LoginModuleCheck() {
global $AVE_DB, $AVE_Template;
$sql = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_module WHERE ModuleFunction = 'mod_login' and ModuleStatus = '1'");
@ -467,13 +475,16 @@ function LoginModuleCheck() {
$login_menu = "0";
}
$AVE_Template->assign('login_menu', $login_menu);
}
}
//Выводим на главную список последних 15 документов
function DisplayMainDocuments() {
//Выводим на главную список последних 15 документов
function DisplayMainDocuments()
{
global $AVE_DB, $AVE_Template;
$doc_start = array();
$sql = $AVE_DB->Query("
SELECT
doc.*,
@ -533,32 +544,36 @@ function DisplayMainDocuments() {
array_push($doc_start, $row);
}
$AVE_Template->assign('doc_start', $doc_start);
}
}
function showrubricName($id) {
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;
}
}
function showuserName($id) {
function showuserName($id)
{
global $AVE_DB, $AVE_Template;
$sql = $AVE_DB->Query("SELECT user_name FROM " . PREFIX . "_users WHERE Id='$id'");
$row = $sql->fetchrow();
return $row->user_name;
}
}
function cacheShow() {
function cacheShow()
{
global $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'));
}
}
function templateName($id) {
function templateName($id)
{
global $AVE_DB, $AVE_Template;
$sql = $AVE_DB->Query("
@ -568,9 +583,10 @@ function templateName($id) {
$row = $sql->fetchrow();
return $row->template_title;
}
}
function groupName($id) {
function groupName($id)
{
global $AVE_DB, $AVE_Template;
$sql = $AVE_DB->Query("
@ -580,6 +596,5 @@ function groupName($id) {
$row = $sql->fetchrow();
return $row->user_group_name;
}
}
?>

19
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']);

47
admin/init.php

@ -1,6 +1,6 @@
<?php
/**
/**
* AVE.cms
*
* @package AVE.cms
@ -11,33 +11,38 @@
* @license GPL v.2
*/
if (!defined('ACP'))
{
if (! defined('ACP'))
{
header('Location:index.php');
exit;
}
}
require(BASE_DIR . '/inc/init.php');
require(BASE_DIR . '/admin/functions/func.admin.common.php');
require(BASE_DIR . '/lib/redactor/ckeditor/adapters/ckeditor.php');
require (BASE_DIR . '/inc/init.php');
$lang_system = $AVE_DB->Query("
SELECT lang_alias_pref FROM " . PREFIX . "_settings_lang
WHERE lang_default = '1'
")->GetCell();
$AVE_Template = new AVE_Template(BASE_DIR . '/admin/templates');
$AVE_Template->assign('tpl_dir', ABS_PATH . 'admin/templates');
$_SESSION['admin_language'] = $lang_system;
require (BASE_DIR . '/admin/functions/func.admin.common.php');
require (BASE_DIR . '/lib/redactor/ckeditor/adapters/ckeditor.php');
$AVE_Template = new AVE_Template(BASE_DIR . '/admin/templates');
$AVE_Template->assign('tpl_dir', ABS_PATH . 'admin/templates');
$lang_system = $AVE_DB->Query("
SELECT
lang_alias_pref
FROM
" . PREFIX . "_settings_lang
WHERE
lang_default = '1'
")->GetCell();
// Файлы шаблонов для 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');
$_SESSION['admin_language'] = $lang_system;
// Подключаем основные ланги
$AVE_Template->config_load(BASE_DIR . '/admin/lang/' . $_SESSION['admin_language'] . '/main.txt');
// Файлы шаблонов для 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');
define('SESSION', session_id());
$AVE_Template->assign('sess', SESSION);
// Подключаем основные ланги
$AVE_Template->config_load(BASE_DIR . '/admin/lang/' . $_SESSION['admin_language'] . '/main.txt');
define('SESSION', session_id());
$AVE_Template->assign('sess', SESSION);
?>

6
admin/lang/bg/settings.txt

@ -59,12 +59,12 @@ SETTINGS_PAGE_PREV = "Текст на линка &quot;Предходна&q
SETTINGS_MAIN_BREADCRUMBS = "Настройки за извеждането на «Breadcrumb»"
SETTINGS_BREAD_BOX = "Контейнер «Breadcrumb»:<br><small>Пример: &lt;ul class="breadcrumb"&gt;%s&lt;/ul&gt;</small>"
SETTINGS_BREAD_MAIN = "Показывать первый элемент: Главная страница:<br><small>Да/Нет</small>"
SETTINGS_BREAD_HOST = "Добавлять адрес хоста в url:<br><small>Да/Нет</small>"
SETTINGS_BREAD_MAIN = "Показвай първия елемент: Главна страница:<br><small>Да/Не</small>"
SETTINGS_BREAD_HOST = "Добавяй адреса на хоста в url:<br><small>Да/Не</small>"
SETTINGS_BREAD_SEPPARATOR = "Разделител между линковете:<br><small>Пример: &lt;li&gt;&nbsp;&rarr;&nbsp;&lt;/li&gt;</small>"
SETTINGS_BREAD_SEPP_USE = "Покажи:<br><small>Да/Не</small>"
SETTINGS_BREAD_BOX_LINK = "Контейнер за линка:<br><small>Пример: &lt;li&gt;%s&lt;/li&gt;</small>"
SETTINGS_BREAD_LINK_TPL = "Шаблон ссылки<br /><small>Используются теги: [name], [link], [count]</small>"
SETTINGS_BREAD_LINK_TPL = "Шаблон за линка<br /><small>Използват се таговете: [name], [link], [count]</small>"
SETTINGS_BREAD_BOX_LASTLINK = "Показване на последния елемент:"
SETTINGS_BREAD_SELF_BOX = "Контейнер за последния елемент:<br><small>Пример: &lt;li class="active"&gt;%s&lt;/li&gt;</small>"

3
admin/lang/ru/docs.txt

@ -298,3 +298,6 @@ DOC_SAVE_LOG_DOC = " документ"
DOC_LANG = "Язык"
DOC_LANG_ID = "Язык документа:"
DOC_LANG_SELECT = "Выберите язык"
// 3.25
DOC_CLOSE_SEARCH_RUBRIC = "Вернуться в раздел, учитывая параметры поиска"

8
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 = "Доступ к управлению базой данных (<strong>Резервное копирование, Востановление, Оптимизация</strong>)"
db_actions = "Доступ к управлению базой данных (<strong>Резервное копирование, Восстановление, Оптимизация</strong>)"
modules_view = "Доступ к списку модулей"
modules_admin = "Доступ к модулями <strong>(Настройка, Управление, Использование)</strong>"

54
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 = "<strong>Внимание!</strong> Вы не создали ни одного поля. Пожалуйста, добавьте хотя бы одно поле."
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 = "<strong>Ошибка!</strong><br />Вы не имеете прав на редактирование шаблона рубрики, так как он используется 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 = "Тег Алиас"
@ -278,3 +279,48 @@ RUBRIC_TMPLS_FROM = "Создать копию основного ша
RUBRIC_TMPLS_INNAME = "Введите наименование шаблона"
RUBRIC_TEMPL_REPORT = "Отредактировал дополнительный шаблон рубрики"
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 = "Доступ к данным:<br /><strong>$this->curentdoc</strong> - Данные документа, перед подстановкой их в шаблон вывода"
RUBRIK_EDIT_CODE_BEF_TIP = "Доступ к данным:<br /><strong>$data</strong> - Все данные документа<br /><strong>$data['feld']</strong> - Данные полей документа<br /><strong>$rubric_id</strong> - ID рубрики"
RUBRIK_EDIT_CODE_AFT_TIP = "Доступ к данным:<br /><strong>$data</strong> - Все данные документа<br /><strong>$rubric_id</strong> - ID рубрики<br /><strong>$document_id</strong> - 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 = "Удалить"

8
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"

1
admin/lang/ru/templates.txt

@ -80,6 +80,7 @@ TEMPLATES_NAVIGATION = "Меню навигации (ххх - номер ме
TEMPLATES_IF_PRINT = "Содержимое будет показано при печати."
TEMPLATES_DONOT_PRINT = "Содержание не будет показано при печати"
TEMPLATES_RUBHEADER = "Настраивается в шаблоне рубрики<br/>(Шаблон оформления HEADER)"
TEMPLATES_RUBFOOTER = "Настраивается в шаблоне рубрики<br/>(Шаблон оформления FOOTER)"
TEMPLATES_NO_ITEMS = "В настоящий момент нет файлов"
TEMPLATES_DOMAIN = "Системный тег вывода доменного имени"
TEMPLATES_DOCDB = "Системный тег вывода поля документа из БД"

39
admin/modules.php

@ -1,6 +1,6 @@
<?php
/**
/**
* AVE.cms
*
* @package AVE.cms
@ -11,31 +11,33 @@
* @license GPL v.2
*/
if (!defined('ACP'))
{
if (! defined('ACP'))
{
header('Location:index.php');
exit;
}
}
$AVE_Template->config_load(BASE_DIR . '/admin/lang/' . $_SESSION['admin_language'] . '/modules.txt', 'modules');
$AVE_Template->config_load(BASE_DIR . '/admin/lang/' . $_SESSION['admin_language'] . '/modules.txt', 'modules');
if (!empty($_REQUEST['moduleaction']))
{
if (!check_permission('mod_' . $_REQUEST['mod']))
if (! empty($_REQUEST['moduleaction']))
{
if (! check_permission('mod_' . $_REQUEST['mod']))
{
echo $AVE_Template->get_config_vars('MAIN_NO_PERM_MODULES');
exit;
}
}
}
if (!empty($_REQUEST['module']))
{
if (! empty($_REQUEST['module']))
{
$module_path = preg_replace('/[^\w]/', '', $_REQUEST['module']);
if (!empty($module_path)) define('MODULE_PATH', $module_path);
}
switch($_REQUEST['action'])
{
if (! empty($module_path))
define('MODULE_PATH', $module_path);
}
switch($_REQUEST['action'])
{
case '':
if (check_permission_acp('modules_view'))
{
@ -84,7 +86,9 @@ switch($_REQUEST['action'])
{
$mod_path = preg_replace('/[^\w]/', '', $_REQUEST['mod']);
$mod_path = BASE_DIR . '/modules/' . $mod_path . '/module.php';
if (is_file($mod_path)) include($mod_path);
if (is_file($mod_path))
include($mod_path);
}
break;
@ -94,6 +98,5 @@ switch($_REQUEST['action'])
$AVE_Module->moduleRemove($_REQUEST['module']);
}
break;
}
}
?>

108
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;
}
?>

11
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
}
?>

2
admin/start.php

@ -18,7 +18,7 @@ if (!defined('ACP'))
}
get_ave_info();
get_editable_module();
getInstaledModules();
DisplayMainDocuments();
get_online_users();
getLogRecords();

14
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; }

15
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}

6
admin/templates/documents/form.tpl

@ -625,6 +625,7 @@ $(document).ready(function(){ldelim}
<h5>{#DOC_MAIN_CONTENT#}</h5>
</div>
<table cellpadding="0" cellspacing="0" width="100%" class="tableStatic">
<col width="10">
<col width="250">
<col>
<tbody>
@ -633,12 +634,15 @@ $(document).ready(function(){ldelim}
{if $document->count_groups > 1}
<tr class="group_row_{$document_field_group.group_id|default:0} group_row grey" id="group_row_{$document_field_group.group_id|default:0}">
<td colspan="3" class="aligncenter"><h5>{if $document_field_group.group_title}{$document_field_group.group_title}{else}{#DOC_FIELD_G_UNKNOW#}{/if}</h5></td>
<td colspan="4" class="aligncenter"><h5>{if $document_field_group.group_title}{$document_field_group.group_title}{else}{#DOC_FIELD_G_UNKNOW#}{/if}</h5></td>
</tr>
{/if}
{foreach from=$document_field_group.fields item=field}
<tr class="field_row_{$field.Id} field_row" id="field_row_{$field.Id}">
<td align="center">
<span class="code topDir"{if $field.rubric_field_alias}title="{$field.rubric_field_alias}"{/if}>{$field.Id}</span>
</td>
<td>
<strong>{$field.rubric_field_title|escape}</strong>
{if $field.rubric_field_description}

5
admin/templates/documents/form_after.tpl

@ -8,12 +8,15 @@
<ul id="doclinks" style="padding-left:70px">
<li><span class="icon_sprite ico_edit floatleft"></span>&nbsp;<a href="index.php?do=docs&action=edit&Id={$document_id}&cp={$sess}">{#DOC_EDIT_THIS_DOCUMENT#}</a></li>
<li><span class="icon_sprite ico_look floatleft"></span>&nbsp;<a href="../{if $document_id!=1}index.php?id={$document_id}&cp={$sess}{/if}" target="_blank">{#DOC_DISPLAY_NEW_WINDOW#}</a><br /><br /></li>
<li><span class="icon_sprite ico_look floatleft"></span>&nbsp;<a href="../{if $document_id != 1}index.php?id={$document_id}&cp={$sess}{/if}" target="_blank">{#DOC_DISPLAY_NEW_WINDOW#}</a><br /><br /></li>
{if $innavi}
<li class="navig"><span class="icon_sprite ico_navigation floatleft"></span><a href="javascript:void(0);">{#DOC_INCLUDE_NAVIGATION#}</a><br /><br /></li>
{/if}
<li><span class="icon_sprite ico_add floatleft"></span>&nbsp;<a href="index.php?do=docs&action=copy&rubric_id={$rubric_id}&Id={$document_id}&cp={$sess}">{#DOC_ADD_COPY_DOCUMENT#}</a><br /></li>
<li><span class="icon_sprite ico_add floatleft"></span>&nbsp;<a href="index.php?do=docs&action=new&rubric_id={$rubric_id}&cp={$sess}">{#DOC_ADD_NEW_DOCUMENT#}</a><br /><br /></li>
{if $search_query}
<li><span class="icon_sprite ico_copy floatleft"></span>&nbsp;<a href="index.php?do=docs&action=redirect&document_id={$document_id}&cp={$sess}">{#DOC_CLOSE_SEARCH_RUBRIC#}</a></li>
{/if}
<li><span class="icon_sprite ico_copy floatleft"></span>&nbsp;<a href="index.php?do=docs&rubric_id={$rubric_id}&cp={$sess}">{#DOC_CLOSE_WINDOW_RUBRIC#}</a></li>
<li><span class="icon_sprite ico_copy floatleft"></span>&nbsp;<a href="index.php?do=docs&cp={$sess}">{#DOC_CLOSE_WINDOW#}</a></li>
</ul>

4
admin/templates/groups/perms.tpl

@ -62,8 +62,10 @@
<td></td>
<td>
{foreach from=$modules item=module}
<input type="checkbox" name="perms[]" class="float" value="mod_{$module->ModuleSysName}"{if in_array($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}><label>{$module->ModuleName}</label>
{if $module.status == 1 && $module.ModuleIsFunction == 1}
<input type="checkbox" name="perms[]" class="float" value="mod_{$module.ModuleSysName}"{if in_array($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}><label>{$module.ModuleName}</label>
<div class="clear"></div>
{/if}
{/foreach}
</td>
</tr>

4
admin/templates/js/main.js

@ -508,8 +508,8 @@ var AveAdmin = {
setTimeout(function() {
AveAdmin.sticky_panel_refresh();
}, 1);
AveAdmin.select_form();
}, 10);
},
//Окно очистки кэша + Сессий

60
admin/templates/main.tpl

@ -1,7 +1,7 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
@ -171,16 +171,16 @@
{rdelim});
</script>
</head>
</head>
<body>
<body>
<div id="leftNav_show">
<div id="leftNav_show">
<a href="javascript:void(0);" id="toggle-LeftMenu"><span class="rightDir {if $smarty.cookies.LeftMenu != "hidden"}close{/if}" title="{#MAIN_SHOWHIDE#}"></span></a>
</div>
</div>
<!-- Top Menu -->
<div id="topNav">
<!-- Top Menu -->
<div id="topNav">
<div class="fixed">
<div class="wrapper">
<div class="welcome">
@ -193,7 +193,7 @@
</div>
<div class="userNav">
<ul>
{if check_permission('documents_edit') || check_permission('rubric_edit') || check_permission('request_edit') || check_permission('sysblocks_edit') || check_permission('template_edit') || check_permission('navigation_edit') || check_permission('user_edit') || check_permission('group_edit')}
{if $smarty.const.ADMIN_MENU_QUICK_ADD}
<li class="dropdown"><a title=""><img src="{$tpl_dir}/images/icons/add.png" alt="" /><span>{#MAIN_BUTTON_ADD#}</span></a>
<ul>
{if check_permission('documents_edit')}<li><a onclick="windowOpen('index.php?do=docs&action=add_new&pop=1&cp={$sess}','750','500','1')" href="javascript:void(0);">{#MAIN_ADD_DOC#}</a></li>{/if}
@ -208,22 +208,20 @@
</li>
{/if}
<li class="dropdown dd_page" {if $smarty.cookies.LeftMenu == "visible"}style="display: none;"{/if}><a title=""><img src="{$tpl_dir}/images/icons/tasks.png" alt="" /><span>{#MAIN_BRANCHES#}</span></a>
<li class="dropdown dd_page" {if $smarty.cookies.LeftMenu == "visible"}style="display: none;"{/if}>
<a title=""><img src="{$tpl_dir}/images/icons/tasks.png" alt="" /><span>{#MAIN_BRANCHES#}</span></a>
<ul class="menu_page">
{$navi_top}
</ul>
</li>
{*
<li><img src="{$tpl_dir}/images/icons/messages.png" alt="" /><span>Messages</span><span class="numberTop">8</span></li>
*}
{if check_permission('modules_view')}
{if $modules}
<li class="dropdown"><a title=""><img src="{$tpl_dir}/images/icons/subInbox.png" alt="" /><span>{#MAIN_LINK_MODULES_H#}</span></a>
{if $modules && check_permission('modules_view')}
<ul>
{foreach from=$modules item=modul}
<li><a href="index.php?do=modules&action=modedit&mod={$modul->ModuleSysName}&moduleaction=1&cp={$sess}">{$modul->ModuleName}</a></li>
{foreach from=$modules item=module}
<li><a href="index.php?do=modules&action=modedit&mod={$module.ModuleSysName}&moduleaction=1&cp={$sess}">{$module.ModuleName}</a></li>
{/foreach}
</ul>
{/if}
@ -242,9 +240,9 @@
</li>
{/if}
{if check_permission('cache_clear')}<li><a href="javascript:void(0);" class="clearCache" title="{#MAIN_STAT_CLEAR_CACHE#}"><img src="{$tpl_dir}/images/icons/subTrash.png" alt="" /><span>{#MAIN_STAT_CLEAR_CACHE#}</span></a></li>{/if}
{*
{*
<li><a href="#" title="{#MAIN_LOGIN_HELP#}"><img src="{$tpl_dir}/images/icons/help.png" alt="" /><span>{#MAIN_LOGIN_HELP#}</span></a></li>
*}
*}
<li>
<a href="../" title="{#MAIN_LINK_SITE#}" target="_blank"><img src="{$tpl_dir}/images/icons/preview.png" alt="" /><span>{#MAIN_LINK_SITE#}</span></a>
</li>
@ -254,21 +252,18 @@
<div class="fix"></div>
</div>
</div>
</div>
</div>
<!-- Header -->
<div id="header" class="wrapper">
<!-- <div class="logo"><a href="index.php" class="box"></a></div> -->
<!-- Header -->
<div id="header" class="wrapper">
<div class="fix"></div>
</div>
</div>
<!-- Wrapper -->
<div class="wrapper">
<!-- Wrapper -->
<div class="wrapper">
<!-- Left navigation -->
<div class="leftNav {if $smarty.cookies.LeftMenu == "hidden"}hidden{/if}">
{*<div class="logo"><a href="index.php" class="box"></a></div>*}
<ul id="menu">
<li><a href="index.php" {if $smarty.request.do == ''}class="active collapse-close"{/if}><span>{#MAIN_LINK_HOME#}</span></a></li>
{$navi}
@ -281,20 +276,19 @@
</div>
<div class="fix"></div>
</div>
</div>
<!-- Footer -->
<div id="footer">
<!-- Footer -->
<div id="footer">
<div class="wrapper">
<span class="floatleft">{#oficial_site#}: {$smarty.const.APP_INFO}</span>
<span class="floatleft ml20">{#support#}: <a href="mailto:support@ave-cms.ru">support@ave-cms.ru</a></span>
<span class="floatright">{$smarty.const.APP_NAME} v{$smarty.const.APP_VERSION}</span>
</div>
</div>
</div>
<script type="text/javascript" src="{$ABS_PATH}admin/lang/{$smarty.session.admin_language}/scripts.js"></script>
<script src="{$tpl_dir}/js/main.js" type="text/javascript"></script>
<script type="text/javascript" src="{$ABS_PATH}admin/lang/{$smarty.session.admin_language}/scripts.js"></script>
<script src="{$tpl_dir}/js/main.js" type="text/javascript"></script>
</body>
</body>
</html>

136
admin/templates/rubs/_field_code.tpl

@ -0,0 +1,136 @@
<div class="title">
<h5>{#RUBRIK_FIELDS_TEMPLATES_H2#}</h5>
</div>
<div class="breadCrumbHolder module">
<div class="breadCrumb module">
<ul>
<li class="firstB"><a href="index.php" title="{#MAIN_PAGE#}">{#MAIN_PAGE#}</a></li>
<li><a href="index.php?do=modules&amp;cp={$sess}">{#MODULES_SUB_TITLE#}</a></li>
<li><a href="index.php?do=modules&action=modedit&mod=fieldsmanager&moduleaction=1&amp;cp={$sess}">Управление полями</a></li>
{if $params.id}
<li><strong>{#RUBRIK_FIELDS_EDIT_RUBRIC#}</strong> > {$params.field.rubric_title}</li>
<li><strong>{#RUBRIK_FIELDS_EDIT_FIELD#}</strong> > {$params.field.rubric_field_title}</li>
{/if}
<li><strong>{#RUBRIK_FIELDS_EDIT_TYPE#}</strong> > {$main.name} {if $params.id}(id: {$params.id}){/if}</li>
<li>
<strong class="code">
{if $params.type == 'adm'}
{#RUBRIK_FIELDS_EDIT_TPL_ADM#}
{elseif $params.type == 'doc'}
{#RUBRIK_FIELDS_EDIT_TPL_DOC#}{
elseif $params.type == 'req'}
{#RUBRIK_FIELDS_EDIT_TPL_REQ#}
{/if}
</strong>
</li>
</ul>
</div>
</div>
{if $code_text}
<form id="code_templ" method="post" action="index.php?do=rubs&action=ftsave&cp={$sess}" class="mainForm">
<div class="widget first">
<div class="head">
<h5 class="iFrames">{if $params.func == 'new'}{#RUBRIK_FIELDS_EDIT_TPL_CREAT#}{else}{#RUBRIK_FIELDS_EDIT_TPL_EDIT#}{/if}</h5>
</div>
<div class="rowElem" style="padding: 0">
<textarea id="code_text" name="code_text">{$code_text|escape}</textarea>
<div class="fix"></div>
</div>
<div class="rowElem">
<button class="basicBtn SaveButton">{#RUBRIK_ALIAS_BUTT#}</button>
&nbsp;
<a href="javascript:void(0);" class="button redBtn Close">{#RUBRIK_BUTTON_TPL_CLOSE#}</a>
<div class="fix"></div>
</div>
</div>
<input type="hidden" name="func" value="{$params.func}" />
{if $params.id}
<input type="hidden" name="field_id" value="{$params.id}" />
{/if}
<input type="hidden" name="field_name" value="{$params.fld}" />
<input type="hidden" name="field_type" value="{$params.type}" />
</form>
{include file="$codemirror_editor" conn_id="ftpl" textarea_id='code_text' ctrls='$("#code_templ").ajaxSubmit(sett_options);' height=400}
<script language="javascript">
$(document).ready(function(){ldelim}
$(".SaveButton").on('click', function(event){ldelim}
event.preventDefault();
$("#code_templ").ajaxSubmit({ldelim}
url: 'index.php?do=rubs&action=ftsave&cp={$sess}',
dataType: 'json',
beforeSubmit: function(){ldelim}
$.alerts._overlay('show');
{rdelim},
success: function(data){ldelim}
$.jGrowl(data['message'], {ldelim}
header: data['header'],
theme: data['theme']
{rdelim});
$.alerts._overlay('hide');
{if $params.func == 'new'}
var html =
'<a data-dialog="rft-{$params.id}" href="index.php?do=rubs&action=ftedit&rubric_id={$smarty.request.rubric_id}&id={$params.id}&fld={$params.fld}&type={$params.type}&cp={$sess}&pop=1&onlycontent=1" data-height="650" data-modal="true" class="openDialog">{#RUBRIC_TMPLS_EDIT#}</a>'
+ '<br />'
+ '<a href="index.php?do=rubs&action=ftdelete&rubric_id={$smarty.request.rubric_id}&id={$params.id}&fld={$params.fld}&type={$params.type}&cp={$sess}" class="link">{#RUBRIC_TMPLS_DELETE#}</a>'
;
$('#{$params.type}_{$params.fld}_{$params.id}').html(html);
$('a.openDialog').off();
AveAdmin.modalDialog();
{/if}
$('#ajax-dialog-rft-{if $params.id}{$params.id}{else}{$params.fld}{/if}').dialog('destroy').remove();
{rdelim}
{rdelim});
return false;
{rdelim});
$(".Close").on('click', function(event){ldelim}
event.preventDefault();
$('#ajax-dialog-rft-{if $params.id}{$params.id}{else}{$params.fld}{/if}').dialog('destroy').remove();
return false;
{rdelim});
{literal}
setTimeout(function(){editorftpl.refresh();}, 20);
{/literal}
{rdelim});
</script>
{else}
<div class="widget first">
<div class="head">
<h5 class="iFrames">
{$main.name}&nbsp;-&nbsp;
{if $params.type == 'adm'}
{#RUBRIK_FIELDS_EDIT_TPL_ADM#}
{elseif $params.type == 'doc'}
{#RUBRIK_FIELDS_EDIT_TPL_DOC#}{
elseif $params.type == 'req'}
{#RUBRIK_FIELDS_EDIT_TPL_REQ#}
{/if}
</h5>
</div>
</div>
<ul class="messages first">
<li class="highlight red">
<strong>{#RUBRIK_FIELDS_EDIT_NO_TPL#}</strong>
</li>
</ul>
{/if}

142
admin/templates/rubs/_field_list.tpl

@ -0,0 +1,142 @@
<script language="Javascript" type="text/javascript">
var sess = '{$sess}';
</script>
<div class="title">
<h5>{#RUBRIK_FIELDS_TEMPLATES_H2#}</h5>
</div>
<div class="widget" style="margin-top: 0px;">
<div class="body">
<ul style="list-style: square; margin-left:15px;">
<li>{#RUBRIK_FIELDS_TEMPLATES_T1#}</li>
<li>{#RUBRIK_FIELDS_TEMPLATES_T2#}</li>
</ul>
</div>
</div>
<table class="first tableButtons" cellpadding="0" cellspacing="0" width="100%" id="rubricButtons">
<col width="20%">
<col width="20%">
<col width="20%">
<col width="20%">
<col width="20%">
<tr>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=edit&Id={$smarty.request.rubric_id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_FIELDS#}</a>
</td>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=fieldsgroups&Id={$smarty.request.rubric_id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_FGROUPS#}</a>
</td>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=template&Id={$smarty.request.rubric_id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_TEMPLATES#}</a>
</td>
<td>
{if check_permission('rubric_code')}
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=code&Id={$smarty.request.rubric_id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_CODE#}</a>
{/if}
</td>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=rules&Id={$smarty.request.rubric_id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_RULES#}</a>
</td>
</tr>
</table>
<div class="breadCrumbHolder module">
<div class="breadCrumb module">
<ul>
<li class="firstB">
<a href="index.php" title="{#MAIN_PAGE#}">{#MAIN_PAGE#}</a>
</li>
<li>
<a href="index.php?do=rubs&cp={$sess}">{#RUBRIK_SUB_TITLE#}</a>
</li>
<li>{#RUBRIK_FIELDS_TEMPLATES_H1#}</li>
<li><strong class="code">{$rubric->rubric_title}</strong></li>
</ul>
</div>
</div>
{foreach from=$rubrics item=rubric}
<div class="widget">
<div class="head">
<h5>{$main.name} ({$main.id})</h5>
<div class="num">
<a class="basicNum" href="index.php?do=rubs&action=ftlist&Id={$smarty.request.rubric_id}&cp={$sess}">{#RUBRIK_FIELDS_TEMPLATES_BACK#}</a>
</div>
</div>
<table cellpadding="0" cellspacing="0" width="100%" class="tableStatic mainForm">
<col width="10" />
<col />
<col width="100" />
<col width="100" />
<col width="100" />
<col width="80" />
<thead>
<tr>
<td colspan="1" rowspan="2">Id</td>
<td colspan="1" rowspan="2">{#RUBRIK_FIELDS_TEMPLATES_FNAME#}</td>
<td colspan="3" rowspan="1">{#RUBRIK_FIELDS_TEMPLATES_FTEMPL#}</td>
<td colspan="1" rowspan="2">{#RUBRIK_FIELDS_TEMPLATES_DB#}</td>
</tr>
<tr>
<td style="border-left: solid 1px #C7D6E6 !important;">{#RUBRIK_FIELDS_TEMPLATES_PANEL#}</td>
<td>{#RUBRIK_FIELDS_TEMPLATES_DOC#}</td>
<td>{#RUBRIK_FIELDS_TEMPLATES_REQ#}</td>
</tr>
</thead>
<tbody>
{foreach from=$rubric.fields item=field}
<tr class="center">
<td align="center">{$field.id}</td>
<td><strong>{$field.title}</strong></td>
<td align="center" id="adm_{$main.id}_{$field.id}">
{if $field.adm_main}
{if $field.adm_tpl}
<a data-dialog="rft-{$field.id}" href="index.php?do=rubs&action=ftedit&rubric_id={$smarty.request.rubric_id}&id={$field.id}&fld={$main.id}&type=adm&cp={$sess}&pop=1&onlycontent=1" data-height="650" data-modal="true" class="openDialog">{#RUBRIC_TMPLS_EDIT#}</a>
<br />
<a href="index.php?do=rubs&action=ftdelete&rubric_id={$smarty.request.rubric_id}&id={$field.id}&fld={$main.id}&type=adm&cp={$sess}" class="link">{#RUBRIC_TMPLS_DELETE#}</a>
{else}
<a data-dialog="rft-{$field.id}" href="index.php?do=rubs&action=ftcreate&rubric_id={$smarty.request.rubric_id}&id={$field.id}&fld={$main.id}&amp;type=adm&cp={$sess}&pop=1&onlycontent=1" data-height="650" data-modal="true" class="openDialog">{#RUBRIC_TMPLS_CREAT#}</a>
{/if}
{else}
<small>{#RUBRIK_FIELDS_NO_TEMPLATES#}</small>
{/if}
</td>
<td align="center" id="doc_{$main.id}_{$field.id}">
{if $field.doc_main}
{if $field.doc_tpl}
<a data-dialog="rft-{$field.id}" href="index.php?do=rubs&action=ftedit&rubric_id={$smarty.request.rubric_id}&id={$field.id}&fld={$main.id}&type=doc&cp={$sess}&pop=1&onlycontent=1" data-height="650" data-modal="true" class="openDialog">{#RUBRIC_TMPLS_EDIT#}</a>
<br />
<a href="index.php?do=rubs&action=ftdelete&rubric_id={$smarty.request.rubric_id}&id={$field.id}&fld={$main.id}&type=doc&cp={$sess}" class="link">{#RUBRIC_TMPLS_DELETE#}</a>
{else}
<a data-dialog="rft-{$field.id}" href="index.php?do=rubs&action=ftcreate&rubric_id={$smarty.request.rubric_id}&id={$field.id}&fld={$main.id}&amp;type=doc&cp={$sess}&pop=1&onlycontent=1" data-height="650" data-modal="true" class="openDialog">{#RUBRIC_TMPLS_CREAT#}</a>
{/if}
{else}
<small>{#RUBRIK_FIELDS_NO_TEMPLATES#}</small>
{/if}
</td>
<td align="center" id="req_{$main.id}_{$field.id}">
{if $field.req_main}
{if $field.req_tpl}
<a data-dialog="rft-{$field.id}" href="index.php?do=rubs&action=ftedit&rubric_id={$smarty.request.rubric_id}&id={$field.id}&fld={$main.id}&type=req&cp={$sess}&pop=1&onlycontent=1" data-height="650" data-modal="true" class="openDialog">{#RUBRIC_TMPLS_EDIT#}</a>
<br />
<a href="index.php?do=rubs&action=ftdelete&rubric_id={$smarty.request.rubric_id}&id={$field.id}&fld={$main.id}&type=req&cp={$sess}" class="link">{#RUBRIC_TMPLS_DELETE#}</a>
{else}
<a data-dialog="rft-{$field.id}" href="index.php?do=rubs&action=ftcreate&rubric_id={$smarty.request.rubric_id}&id={$field.id}&fld={$main.id}&amp;type=req&cp={$sess}&pop=1&onlycontent=1" data-height="650" data-modal="true" class="openDialog">{#RUBRIC_TMPLS_CREAT#}</a>
{/if}
{else}
<small>{#RUBRIK_FIELDS_NO_TEMPLATES#}</small>
{/if}
</td>
<td align="center">
<a data-dialog="rft-{$field.id}" title="{#RUBRIK_FILED_TEMPLATE_H#}" href="index.php?do=rubs&action=field_template&field_id={$field.id}&rubric_id={$rubric.rubric_id}&cp={$sess}&pop=1&onlycontent=1" data-height="700" data-modal="true" data-title="{#RUBRIK_FILED_TEMPLATE_H#}" class="openDialog icon_sprite ico_template topleftDir"></a>
</td>
</tr>
{/foreach}
</tbody>
</table>
</div>
{/foreach}
{include file="$codemirror_connect"}

136
admin/templates/rubs/_fields_list.tpl

@ -0,0 +1,136 @@
<script language="Javascript" type="text/javascript">
var sess = '{$sess}';
</script>
<div class="title">
<h5>{#RUBRIK_FIELDS_TEMPLATES_H2#}</h5>
</div>
<div class="widget" style="margin-top: 0px;">
<div class="body">
<ul style="list-style: square; margin-left:15px;">
<li>{#RUBRIK_FIELDS_TEMPLATES_T1#}</li>
<li>{#RUBRIK_FIELDS_TEMPLATES_T2#}</li>
</ul>
</div>
</div>
<table class="first tableButtons" cellpadding="0" cellspacing="0" width="100%" id="rubricButtons">
<col width="20%">
<col width="20%">
<col width="20%">
<col width="20%">
<col width="20%">
<tr>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=edit&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_FIELDS#}</a>
</td>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=fieldsgroups&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_FGROUPS#}</a>
</td>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=template&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_TEMPLATES#}</a>
</td>
<td>
{if check_permission('rubric_code')}
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=code&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_CODE#}</a>
{/if}
</td>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=rules&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_RULES#}</a>
</td>
</tr>
</table>
<div class="breadCrumbHolder module">
<div class="breadCrumb module">
<ul>
<li class="firstB">
<a href="index.php" title="{#MAIN_PAGE#}">{#MAIN_PAGE#}</a>
</li>
<li>
<a href="index.php?do=rubs&cp={$sess}">{#RUBRIK_SUB_TITLE#}</a>
</li>
<li>{#RUBRIK_FIELDS_TEMPLATES_H1#}</li>
<li><strong class="code">{$rubric->rubric_title}</strong></li>
</ul>
</div>
</div>
<div class="widget">
<div class="head">
<h5>{#RUBRIK_FIELDS_TEMPLATES_LIST#}</h5>
</div>
<table cellpadding="0" cellspacing="0" width="100%" class="tableStatic mainForm">
<col />
<col width="100" />
<col width="100" />
<col width="100" />
<col width="80" />
<col width="100" />
<col width="80" />
<thead>
<tr>
</tr>
<tr>
<td colspan="1" rowspan="2">{#RUBRIK_FIELDS_TEMPLATES_FNAME#}</td>
<td colspan="1" rowspan="2">{#RUBRIK_FIELDS_TEMPLATES_FFUNC#}</td>
<td colspan="3" rowspan="1">{#RUBRIK_FIELDS_TEMPLATES_FTEMP#}</td>
</tr>
<tr>
<td style="border-left: solid 1px #C7D6E6 !important;">{#RUBRIK_FIELDS_TEMPLATES_PANEL#}</td>
<td>{#RUBRIK_FIELDS_TEMPLATES_DOC#}</td>
<td>{#RUBRIK_FIELDS_TEMPLATES_REQ#}</td>
</tr>
</thead>
<tbody>
{foreach from=$fields item=field key=number}
{if in_array($field.id, $enable)}
<tr>
<td>
<strong><a class="link" href="index.php?do=rubs&action=ftshowfield&rubric_id={$smarty.request.Id}&type={$field.id}&cp={$sess}">{$field.name}</a></strong>
</td>
<td class="date_text dgrey" align="center">
{$field.id}
</td>
<td align="center">
{foreach from=$exists item=exist key=key}
{if $field.id == $key}
{if $exist.adm}
<a data-dialog="rft-{$field.id}" href="index.php?do=rubs&action=ftempledit&rubric_id={$smarty.request.Id}&fld={$field.id}&type=adm&cp={$sess}&pop=1&onlycontent=1" data-height="650" data-modal="true" class="openDialog">{#RUBRIC_TMPLS_EDIT#}</a>
{/if}
{/if}
{/foreach}
</td>
<td align="center">
{foreach from=$exists item=exist key=key}
{if $field.id == $key}
{if $exist.doc}
<a data-dialog="rft-{$field.id}" href="index.php?do=rubs&action=ftempledit&rubric_id={$smarty.request.Id}&fld={$field.id}&type=doc&cp={$sess}&pop=1&onlycontent=1" data-height="650" data-modal="true" class="openDialog">{#RUBRIC_TMPLS_EDIT#}</a>
{/if}
{/if}
{/foreach}
</td>
<td align="center">
{foreach from=$exists item=exist key=key}
{if $field.id == $key}
{if $exist.req}
<a data-dialog="rft-{$field.id}" href="index.php?do=rubs&action=ftempledit&rubric_id={$smarty.request.Id}&fld={$field.id}&type=req&cp={$sess}&pop=1&onlycontent=1" data-height="650" data-modal="true" class="openDialog">{#RUBRIC_TMPLS_EDIT#}</a>
{/if}
{/if}
{/foreach}
</td>
</tr>
{/if}
{/foreach}
</tbody>
</table>
</div>
{include file="$codemirror_connect"}

51
admin/templates/rubs/code.tpl

@ -1,11 +1,42 @@
<script language="Javascript" type="text/javascript">
var sess = '{$sess}';
var sess = '{$sess}';
</script>
<div class="title">
<h5>{#RUBRIK_EDIT_CODE_T#}</h5>
</div>
<div class="widget" style="margin-top: 0px;">
<div class="body">
{#RUBRIK_EDIT_CODE_TIP#}
</div>
</div>
<table class="first tableButtons" cellpadding="0" cellspacing="0" width="100%" id="rubricButtons">
<col width="20%">
<col width="20%">
<col width="20%">
<col width="20%">
<col width="20%">
<tr>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=edit&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_FIELDS#}</a>
</td>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=ftlist&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_FTEMPLATES#}</a>
</td>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=fieldsgroups&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_FGROUPS#}</a>
</td>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=template&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_TEMPLATES#}</a>
</td>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=rules&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_RULES#}</a>
</td>
</tr>
</table>
<div class="breadCrumbHolder module">
<div class="breadCrumb module">
<ul>
@ -43,6 +74,11 @@ var sess = '{$sess}';
</div>
</td>
</tr>
<tr>
<td>
{#RUBRIK_EDIT_CODE_LOAD_TIP#}
</td>
</tr>
</tbody>
</table>
</div>
@ -50,11 +86,6 @@ var sess = '{$sess}';
<div class="widget first">
<div class="head">
<h5>{#RUBRIK_CODE#}</h5>
<div class="num">
<a class="basicNum" href="index.php?do=rubs&action=edit&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIK_EDIT#}</a>
&nbsp;
<a class="basicNum" href="index.php?do=rubs&action=template&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIK_EDIT_TEMPLATE#}</a>
</div>
</div>
<table cellpadding="0" cellspacing="0" width="100%" class="tableStatic">
@ -79,6 +110,14 @@ var sess = '{$sess}';
</div>
</td>
</tr>
<tr>
<td>
{#RUBRIK_EDIT_CODE_BEF_TIP#}
</td>
<td>
{#RUBRIK_EDIT_CODE_AFT_TIP#}
</td>
</tr>
</tbody>
</table>
<div class="rowElem" id="saveBtn">

2
admin/templates/rubs/field_template.tpl

@ -24,7 +24,7 @@
<tr>
<td>
<div class="pr12">
<input name="rubric_field_default" type="text" id="rubric_field_default" value="{$rubric_field_default|escape}" style="width:100%;" />
<input class="mousetrap" name="rubric_field_default" type="text" id="rubric_field_default" value="{$rubric_field_default|escape}" style="width:100%;" />
</div>
</td>
</tr>

55
admin/templates/rubs/fields_groups.tpl

@ -1,13 +1,44 @@
<script language="Javascript" type="text/javascript">
var sess = '{$sess}';
</script>
<div class="title">
<h5>{#RUBRIK_FIELDS_GROUPS#}</h5>
</div>
<div class="widget" style="margin-top: 0px;">
<div class="body">
{#RUBRIK_FIELDS_GROUPS_TIP#}
</div>
</div>
<table class="first tableButtons" cellpadding="0" cellspacing="0" width="100%" id="rubricButtons">
<col width="20%">
<col width="20%">
<col width="20%">
<col width="20%">
<col width="20%">
<tr>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=edit&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_FIELDS#}</a>
</td>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=ftlist&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_FTEMPLATES#}</a>
</td>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=template&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_TEMPLATES#}</a>
</td>
<td>
{if check_permission('rubric_code')}
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=code&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_CODE#}</a>
{/if}
</td>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=rules&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_RULES#}</a>
</td>
</tr>
</table>
<div class="breadCrumbHolder module">
<div class="breadCrumb module">
<ul>
@ -31,15 +62,6 @@ var sess = '{$sess}';
<div class="head">
<h5 class="iFrames">{#RUBRIK_FIELDS_GROUPS#}</h5>
<div class="num">
<a class="basicNum" href="index.php?do=rubs&action=template&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIK_EDIT_TEMPLATE#}</a>
&nbsp;
<a class="basicNum" href="index.php?do=rubs&action=edit&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIK_EDIT#}</a>
&nbsp;
{if check_permission('rubric_code')}
<a class="basicNum" href="index.php?do=rubs&action=code&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIK_EDIT_CODE#}</a>
{/if}
</div>
</div>
<div id="groups_list">
@ -91,16 +113,7 @@ var sess = '{$sess}';
<div class="widget first">
<div class="head">
<h5 class="iFrames">{#RUBRIK_FIELDS_TITLE#}</h5>
<div class="num">
<a class="basicNum" href="index.php?do=rubs&action=template&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIK_EDIT_TEMPLATE#}</a>
&nbsp;
<a class="basicNum" href="index.php?do=rubs&action=edit&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIK_EDIT#}</a>
&nbsp;
{if check_permission('rubric_code')}
<a class="basicNum" href="index.php?do=rubs&action=code&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIK_EDIT_CODE#}</a>
{/if}
</div>
<h5 class="iFrames">{#RUBRIK_FIELDS_GROUPS#}</h5>
</div>
<div id="groups_list">

198
admin/templates/rubs/fields_list.tpl

@ -1,5 +1,4 @@
<script language="Javascript" type="text/javascript">
var sess = '{$sess}';
function openAliasWindow(fieldId, rubId, width, height, target) {ldelim}
@ -10,12 +9,13 @@ function openAliasWindow(fieldId, rubId, width, height, target) {ldelim}
var top = ( screen.height - height ) / 2;
window.open('index.php?field_id='+fieldId+'&rubric_id='+rubId+'&target='+target+'&do=rubs&action=alias_add&cp={$sess}&pop=1','pop','left='+left+',top='+top+',width='+width+',height='+height+',scrollbars='+scrollbar+',resizable=1').focus();
{rdelim}
</script>
<div class="title">
<h5>{#RUBRIK_EDIT_FIELDS#}</h5>
</div>
{if !$rub_fields}
{if !$fields_list}
<div class="widget" style="margin-top: 0px;">
<div class="body">{#RUBRIK_NO_FIELDS#}</div>
</div>
@ -24,6 +24,34 @@ function openAliasWindow(fieldId, rubId, width, height, target) {ldelim}
<div class="body">{#RUBRIK_FIELDS_INFO#}</div>
</div>
{/if}
<table class="first tableButtons" cellpadding="0" cellspacing="0" width="100%" id="rubricButtons">
<col width="20%">
<col width="20%">
<col width="20%">
<col width="20%">
<col width="20%">
<tr>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=template&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_TEMPLATES#}</a>
</td>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=ftlist&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_FTEMPLATES#}</a>
</td>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=fieldsgroups&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_FGROUPS#}</a>
</td>
<td>
{if check_permission('rubric_code')}
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=code&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_CODE#}</a>
{/if}
</td>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=rules&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_RULES#}</a>
</td>
</tr>
</table>
<div class="breadCrumbHolder module">
<div class="breadCrumb module">
<ul>
@ -67,16 +95,6 @@ function openAliasWindow(fieldId, rubId, width, height, target) {ldelim}
<div class="head">
<h5 class="iFrames">{#RUBRIK_FIELDS_TITLE#}</h5>
<div class="num">
<a class="basicNum" href="index.php?do=rubs&action=template&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIK_EDIT_TEMPLATE#}</a>
&nbsp;
<a class="basicNum" href="index.php?do=rubs&action=fieldsgroups&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIK_EDIT_FIELDS_GROUPS#}</a>
&nbsp;
{if check_permission('rubric_code')}
<a class="basicNum" href="index.php?do=rubs&action=code&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIK_EDIT_CODE#}</a>
{/if}
</div>
</div>
<div id="fields_list">
@ -364,124 +382,6 @@ function openAliasWindow(fieldId, rubId, width, height, target) {ldelim}
</div>
</div>
{if check_permission('rubric_edit') && check_permission('rubric_perms')}
<div class="widget first">
<div class="head closed active">
<h5>{#RUBRIK_SET_PERMISSION#}</h5>
</div>
<div style="display: block;">
<form id="rubperm" action="index.php?do=rubs&action=edit&Id={$smarty.request.Id|escape}&submit=saveperms&cp={$sess}" method="post" class="mainForm">
<table cellpadding="0" cellspacing="0" width="100%" class="tableStatic">
<col width="16%">
<col width="12%">
<col width="12%">
<col width="12%">
<col width="12%">
<col width="12%">
<col width="12%">
<col width="12%">
<thead>
<tr>
<td>{#RUBRIK_USER_GROUP#}</td>
<td align="center">
{#RUBRIK_DOC_READ#}&nbsp;<a href="javascript:void(0);" class="topDir link" style="cursor: help;" title="{#RUBRIK_VIEW_TIP#}">[?]</a>
</td>
<td align="center">
{#RUBRIK_ALL_PERMISSION#}&nbsp;<a href="javascript:void(0);" class="topDir link" style="cursor: help;" title="{#RUBRIK_ALL_TIP#}">[?]</a>
</td>
<td align="center">
{#RUBRIK_CREATE_DOC#}&nbsp;<a href="javascript:void(0);" class="topDir link" style="cursor: help;" title="{#RUBRIK_DOC_TIP#}">[?]</a>
</td>
<td align="center">
{#RUBRIK_CREATE_DOC_NOW#}&nbsp;<a href="javascript:void(0);" class="topDir link" style="cursor: help;" title="{#RUBRIK_DOC_NOW_TIP#}">[?]</a>
</td>
<td align="center">
{#RUBRIK_EDIT_OWN#}&nbsp;<a href="javascript:void(0);" class="topDir link" style="cursor: help;" title="{#RUBRIK_OWN_TIP#}">[?]</a>
</td>
<td align="center">
{#RUBRIK_EDIT_OTHER#}&nbsp;<a href="javascript:void(0);" class="topleftDir link" style="cursor: help;" title="{#RUBRIK_OTHER_TIP#}">[?]</a>
</td>
<td align="center">
{#RUBRIK_EDIT_DELREV#}&nbsp;<a href="javascript:void(0);" class="topleftDir link" style="cursor: help;" title="{#RUBRIK_DELREV_TIP#}">[?]</a>
</td>
</tr>
</thead>
<tbody>
{foreach from=$groups item=group}
{assign var=doall value=$group->doall}
<tr>
<td>{$group->user_group_name|escape:html} </td>
<td align="center" {if in_array('docread', $group->permissions) || in_array('alles', $group->permissions)} class="yellow"{/if}>
{if $group->doall_h==1}
<input type="hidden" name="perm[{$group->user_group}][]" value="docread" />
<input class="check_perm" name="perm[{$group->user_group}][]" type="checkbox" value="docread" checked="checked" disabled="disabled" />
{else}
<input class="check_perm" name="perm[{$group->user_group}][]" type="checkbox" value="docread"{if in_array('docread', $group->permissions) || in_array('alles', $group->permissions)} checked="checked"{/if} />
{/if}
</td>
<td align="center" {if in_array('alles', $group->permissions)} class="yellow"{/if}>
{if $group->doall_h==1}
<input type="hidden" name="perm[{$group->user_group}][]" value="alles" />
<input class="check_perm" name="perm[{$group->user_group}][]" type="checkbox" value="alles" checked="checked" disabled="disabled" />
{else}
<input class="check_perm" name="perm[{$group->user_group}][]" type="checkbox" value="alles"{if in_array('alles', $group->permissions)} checked="checked"{/if}{if $group->user_group==2} disabled="disabled"{/if} />
{/if}
</td>
<td align="center" {if in_array('new', $group->permissions) || in_array('alles', $group->permissions)} class="yellow"{/if}>
<input type="hidden" name="user_group[{$group->user_group}]" value="{$group->user_group}" />
{if $group->doall_h==1}
<input class="check_perm" name="{$group->user_group}" type="checkbox" value="1"{$doall} />
<input type="hidden" name="perm[{$group->user_group}][]" value="new" />
{else}
<input class="check_perm new" id="new_{$group->user_group}" name="perm[{$group->user_group}][]" type="checkbox" value="new"{if in_array('new', $group->permissions) || in_array('alles', $group->permissions)} checked="checked"{/if}{if $group->user_group==2} disabled="disabled"{/if} />
{/if}
</td>
<td align="center" {if in_array('newnow', $group->permissions) || in_array('alles', $group->permissions)} class="yellow"{/if}>
<input type="hidden" name="user_group[{$group->user_group}]" value="{$group->user_group}" />
{if $group->doall_h==1}
<input class="check_perm" name="{$group->user_group}" type="checkbox" value="1"{$doall} />
<input type="hidden" name="perm[{$group->user_group}][]" value="newnow" />
{else}
<input class="check_perm newnow" id="newnow_{$group->user_group}" name="perm[{$group->user_group}][]" type="checkbox" value="newnow"{if in_array('newnow', $group->permissions) || in_array('alles', $group->permissions)} checked="checked"{/if}{if $group->user_group==2} disabled="disabled"{/if} />
{/if}
</td>
<td align="center" {if in_array('editown', $group->permissions) || in_array('alles', $group->permissions)} class="yellow"{/if}>
{if $group->doall_h==1}
<input class="check_perm" name="{$group->user_group}" type="checkbox" value="1"{$doall} />
<input type="hidden" name="perm[{$group->user_group}][]" value="editown" />
{else}
<input class="check_perm editown" id="editown_{$group->user_group}" data-id="{$group->user_group}" name="perm[{$group->user_group}][]" type="checkbox" value="editown"{if in_array('editown', $group->permissions) || in_array('alles', $group->permissions)} checked="checked"{/if}{if $group->user_group==2} disabled="disabled"{/if} />
{/if}
</td>
<td align="center" {if in_array('editall', $group->permissions) || in_array('alles', $group->permissions)} class="yellow"{/if}>
{if $group->doall_h==1}
<input class="check_perm" name="{$group->user_group}" type="checkbox" value="1"{$doall} />
{else}
<input class="check_perm editall" id="editall_{$group->user_group}" name="perm[{$group->user_group}][]" data-id="{$group->user_group}" type="checkbox" value="editall"{if in_array('editall', $group->permissions) || in_array('alles', $group->permissions)} checked="checked"{/if}{if $group->user_group==2} disabled="disabled"{/if} />
{/if}
</td>
<td align="center" {if in_array('delrev', $group->permissions) || in_array('alles', $group->permissions)} class="yellow"{/if}>
{if $group->doall_h==1}
<input class="check_perm" name="{$group->user_group}" type="checkbox" value="1"{$doall} />
<input type="hidden" name="perm[{$group->user_group}][]" value="delrev" />
{else}
<input class="check_perm" name="perm[{$group->user_group}][]" type="checkbox" value="delrev"{if in_array('delrev', $group->permissions) || in_array('alles', $group->permissions)} checked="checked"{/if}{if $group->user_group==2} disabled="disabled"{/if} />
{/if}
</td>
</tr>
{/foreach}
</tbody>
</table>
<div class="rowElem">
<input type="submit" class="basicBtn" value="{#RUBRIK_BUTTON_PERM#}" />
&nbsp;
<input type="submit" class="blackBtn SaveEditPerms" value="{#RUBRIK_BUTTON_TPL_NEXT#}" />
</div>
</form>
</div>
</div>
{/if}
{include file="$codemirror_connect"}
<script language="javascript">
@ -623,15 +523,6 @@ $(document).ready(function(){ldelim}
}
});
$('.check_perm').on('change', function(event) {
event.preventDefault();
if ($(this).is(':checked')) {
$(this).parent().parent('td').addClass('yellow');
} else {
$(this).parent().parent('td').removeClass('yellow');
}
});
$('.collapsible').collapsible({
defaultOpen: 'opened',
cssOpen: 'inactive',
@ -643,6 +534,14 @@ $(document).ready(function(){ldelim}
},
speed: 200
});
$('.collapsible').on('click', function() {
setTimeout(function() {
AveAdmin.sticky_panel_refresh();
AveAdmin.select_form();
}, 10);
});
{/literal}
Mousetrap.bind(['ctrl+s', 'command+s'], function(event) {ldelim}
@ -714,25 +613,6 @@ $(document).ready(function(){ldelim}
return false;
{rdelim});
$(".SaveEditPerms").click(function(event){ldelim}
event.preventDefault();
$("#rubperm").ajaxSubmit({ldelim}
url: 'index.php?do=rubs&action=edit&Id={$smarty.request.Id|escape}&submit=saveperms&cp={$sess}&ajax=1',
dataType: 'json',
beforeSubmit: function(){ldelim}
$.alerts._overlay('show');
{rdelim},
success: function(data){ldelim}
$.jGrowl(data['message'], {ldelim}
header: data['header'],
theme: data['theme']
{rdelim});
$.alerts._overlay('hide');
{rdelim}
{rdelim});
return false;
{rdelim});
function ajaxFields(){ldelim}
$.ajax({ldelim}
url: 'index.php?do=rubs&action=fields&Id={$smarty.request.Id|escape}&cp={$sess}&ajax=1&onlycontent=1',

170
admin/templates/rubs/form.tpl

@ -6,11 +6,7 @@
<div class="title">
<h5>{#RUBRIK_TEMPLATE_EDIT#}</h5>
<div class="num">
<a class="basicNum" href="index.php?do=rubs&action=edit&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIK_EDIT#}</a>
&nbsp;
{if check_permission('rubric_code')}
<a class="basicNum" href="index.php?do=rubs&action=code&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIK_EDIT_CODE#}</a>
{/if}
<a class="basicNum" href="index.php?do=rubs&action=tmpls&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TMPLS_BUTTON#}</a>
</div>
</div>
{/if}
@ -19,6 +15,33 @@
<div class="body">{#RUBRIK_TEMPLATE_TIP#}</div>
</div>
<table class="first tableButtons" cellpadding="0" cellspacing="0" width="100%" id="rubricButtons">
<col width="20%">
<col width="20%">
<col width="20%">
<col width="20%">
<col width="20%">
<tr>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=edit&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_FIELDS#}</a>
</td>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=ftlist&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_FTEMPLATES#}</a>
</td>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=fieldsgroups&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_FGROUPS#}</a>
</td>
<td>
{if check_permission('rubric_code')}
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=code&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_CODE#}</a>
{/if}
</td>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=rules&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_RULES#}</a>
</td>
</tr>
</table>
<div class="breadCrumbHolder module">
<div class="breadCrumb module">
<ul>
@ -61,6 +84,9 @@
<li>
<a href="#tab2">{#RUBRIK_HTML_2#}</a>
</li>
<li>
<a href="#tab2_1">{#RUBRIK_HTML_2_1#}</a>
</li>
<li>
<a href="#tab3">{#RUBRIK_HTML_3#}</a>
</li>
@ -468,6 +494,139 @@
</div>
<div id="tab2_1" class="tab_content" style="display: none;">
<table cellpadding="0" cellspacing="0" width="100%" class="tableStatic">
<col width="18%" />
<col width="82%" />
<thead>
<tr class="noborder">
<td>{#RUBRIK_TAGS#}</td>
<td>{#RUBRIK_HTML_T#}</td>
</tr>
</thead>
<tbody>
<tr>
<td>
<strong><a class="rightDir" title="{#RUBRIK_TEMPLATES_TITLE#}" href="javascript:void(0);" onclick="textSelection2_1('[tag:title]','');">[tag:title]</a></strong>
</td>
<td rowspan="5" colspan="2"><textarea {$read_only} class="{if $php_forbidden==1}tpl_code_readonly{else}{/if}" style="width:100%; height:200px" name="rubric_footer_template" id="rubric_footer_template">{$rubric->rubric_footer_template|default:$prefab|escape:html}</textarea></td>
</tr>
<tr>
<td>
<strong><a class="rightDir" title="{#RUBRIK_TEMPLATES_CSS#}" href="javascript:void(0);" onclick="textSelection2('[tag:css:]','');">[tag:css:FFF:P]</a></strong>,&nbsp;&nbsp;
<strong><a class="rightDir" title="{#RUBRIK_TEMPLATES_JS#}" href="javascript:void(0);" onclick="textSelection2_1('[tag:js:]','');">[tag:js:FFF:P]</a></strong>
</td>
</tr>
<tr>
<td>
<strong><a class="rightDir" title="{#RUBRIK_TEMPLATES_PATH#}" href="javascript:void(0);" onclick="textSelection2_1('[tag:path]','');">[tag:path]</a></strong>
</td>
</tr>
<tr>
<td>
<strong><a class="rightDir" title="{#RUBRIK_TEMPLATES_MEDIAPATH#}" href="javascript:void(0);" onclick="textSelection2_1('[tag:mediapath]','');">[tag:mediapath]</a></strong>
</td>
</tr>
<tr>
<td>
</td>
</tr>
<tr>
<td><strong>HTML Tags</strong></td>
<td>
|&nbsp;
<a href="javascript:void(0);" onclick="textSelection2_1('<ol>', '</ol>');"><strong>OL</strong></a>&nbsp;|&nbsp;
<a href="javascript:void(0);" onclick="textSelection2_1('<ul>', '</ul>');"><strong>UL</strong></a>&nbsp;|&nbsp;
<a href="javascript:void(0);" onclick="textSelection2_1('<li>', '</li>');"><strong>LI</strong></a>&nbsp;|&nbsp;
<a href="javascript:void(0);" onclick="textSelection2('<p class=&quot;&quot;>', '</p>');"><strong>P</strong></a>&nbsp;|&nbsp;
<a href="javascript:void(0);" onclick="textSelection2_1('<strong>', '</strong>');"><strong>B</strong></a>&nbsp;|&nbsp;
<a href="javascript:void(0);" onclick="textSelection2_1('<em>', '</em>');"><strong>I</strong></a>&nbsp;|&nbsp;
<a href="javascript:void(0);" onclick="textSelection2_1('<h1>', '</h1>');"><strong>H1</strong></a>&nbsp;|&nbsp;
<a href="javascript:void(0);" onclick="textSelection2_1('<h2>', '</h2>');"><strong>H2</strong></a>&nbsp;|&nbsp;
<a href="javascript:void(0);" onclick="textSelection2_1('<h3>', '</h3>');"><strong>H3</strong></a>&nbsp;|&nbsp;
<a href="javascript:void(0);" onclick="textSelection2_1('<h4>', '</h4>');"><strong>H4</strong></a>&nbsp;|&nbsp;
<a href="javascript:void(0);" onclick="textSelection2_1('<h5>', '</h5>');"><strong>H5</strong></a>&nbsp;|&nbsp;
<a href="javascript:void(0);" onclick="textSelection2_1('<div class=&quot;&quot; id=&quot;&quot;>', '</div>');"><strong>DIV</strong></a>&nbsp;|&nbsp;
<a href="javascript:void(0);" onclick="textSelection2_1('<a href=&quot;&quot; title=&quot;&quot;>', '</a>');"><strong>A</strong></a>&nbsp;|&nbsp;
<a href="javascript:void(0);" onclick="textSelection2_1('<img src=&quot;&quot; alt=&quot;&quot; &#047;>', '');"><strong>IMG</strong></a>&nbsp;|&nbsp;
<a href="javascript:void(0);" onclick="textSelection2_1('<span>', '</span>');"><strong>SPAN</strong></a>&nbsp;|&nbsp;
<a href="javascript:void(0);" onclick="textSelection2_1('<pre>', '</pre>');"><strong>PRE</strong></a>&nbsp;|&nbsp;
<a href="javascript:void(0);" onclick="textSelection2_1('<br &#047;>', '');"><strong>BR</strong></a>&nbsp;|&nbsp;
<a href="javascript:void(0);" onclick="textSelection2_1('\t', '');"><strong>TAB</strong></a>&nbsp;|
</td>
</tr>
</tbody>
</table>
<table cellpadding="0" cellspacing="0" width="100%" class="tableStatic">
<col width="3%" />
<col width="25%" />
<col width="15%" />
<col width="15%" />
<col width="15%" />
<col width="38%" />
<thead>
<tr>
<td align="center"><strong>{#RUBRIK_ID#}</strong></td>
<td align="center"><strong>{#RUBRIK_FIELD_NAME#}</strong></td>
<td align="center"><strong>{#RUBRIK_TAGS_ID#}</strong></td>
<td align="center"><strong>{#RUBRIK_TAGS_ALIAS#}</strong></td>
<td align="center"><strong>{#RUBRIK_FIELD_ALIAS#}</strong></td>
<td align="center"><strong>{#RUBRIK_FIELD_TYPE#}</strong></td>
</tr>
</thead>
<tbody>
{foreach from=$fields_list item=field_group}
{if $groups_count > 1}
<tr class="grey">
<td colspan="6"><h5>{if $field_group.group_title}{$field_group.group_title}{else}{#RUBRIK_FIELD_G_UNKNOW#}{/if}</h5></td>
</tr>
{/if}
{foreach from=$field_group.fields item=field}
<tr>
<td align="center">
<strong class="code">{$field.Id}</strong>
</td>
<td>
<strong>{$field.rubric_field_title}</strong>
</td>
<td>
<a class="rightDir" title="{#RUBRIK_INSERT_HELP#}" href="javascript:void(0);" onclick="textSelection2('[tag:rfld:{$field.Id}][0]', '');"><strong>[tag:rfld:{$field.Id}][150]</strong></a>
</td>
<td>
{if $field.rubric_field_alias}
<a class="rightDir" title="{#RUBRIK_INSERT_HELP#}" href="javascript:void(0);" onclick="textSelection2('[tag:rfld:{$field.rubric_field_alias}][0]', '');"><strong>[tag:rfld:{$field.rubric_field_alias}][0]</strong></a>
{/if}
</td>
<td align="center">
{if $field.rubric_field_alias}<strong class="code">{$field.rubric_field_alias}</strong>{/if}
</td>
<td>
{section name=field_name loop=$field_array}
{if $field.rubric_field_type == $field_array[field_name].id}{$field_array[field_name].name}{/if}
{/section}
</td>
</tr>
{/foreach}
{/foreach}
</tbody>
</table>
<div class="fix"></div>
</div>
<div id="tab3" class="tab_content" style="display: none;">
<table cellpadding="0" cellspacing="0" width="100%" class="tableStatic">
@ -785,6 +944,7 @@
{include file="$codemirror_connect"}
{include file="$codemirror_editor" conn_id="" textarea_id='rubric_template' ctrls='$("#RubricTpl").ajaxSubmit(sett_options);' height=500}
{include file="$codemirror_editor" conn_id="2" textarea_id='rubric_header_template' ctrls='$("#RubricTpl").ajaxSubmit(sett_options);' height=420}
{include file="$codemirror_editor" conn_id="2_1" textarea_id='rubric_footer_template' ctrls='$("#RubricTpl").ajaxSubmit(sett_options);' height=420}
{include file="$codemirror_editor" conn_id="3" textarea_id='rubric_teaser_template' ctrls='$("#RubricTpl").ajaxSubmit(sett_options);' height=420}
{include file="$codemirror_editor" conn_id="4" textarea_id='rubric_admin_teaser_template' ctrls='$("#RubricTpl").ajaxSubmit(sett_options);' height=420}

15
admin/templates/rubs/list.tpl

@ -88,7 +88,7 @@ $(function() {ldelim}
<col width="40">
<col width="30">
<col width="40">
<col width="40">
<col width="20">
<col width="20">
<col width="20">
<col width="20">
@ -110,8 +110,7 @@ $(function() {ldelim}
</div>
</td>
<td align="center"><a href="javascript:void(0);" class="topDir icon_sprite ico_lines float" style="cursor: help; display: inline-block" title="{#RUBRIK_COUNT_FIELDS#}"></a></td>
<td align="center"><a href="javascript:void(0);" class="topDir icon_sprite ico_template float" style="cursor: help; display: inline-block" title="{#RUBRIK_EDIT_TMPLS#}"></a></td>
<td align="center" colspan="5">{#RUBRIK_ACTION#}</td>
<td align="center" colspan="6">{#RUBRIK_ACTION#}</td>
</tr>
</thead>
<tbody id="rubsTbody">
@ -191,21 +190,21 @@ $(function() {ldelim}
<td align="center"><strong class="code">{$rubric->fld_count}</strong></td>
<td align="center">
{if check_permission('rubric_edit')}
<strong class="code"><a class="topDir" title="{#RUBRIK_EDIT_TMPLS#}" href="index.php?do=rubs&action=tmpls&Id={$rubric->Id}&cp={$sess}">{$rubric->tmpls_count}</a></strong>
<a class="topleftDir icon_sprite ico_edit" title="{#RUBRIK_EDIT#}" href="index.php?do=rubs&action=edit&Id={$rubric->Id}&cp={$sess}"></a>
{else}
<strong class="code">{$rubric->tmpls_count}</strong>
<span title="{#RUBRIK_NO_CHANGE1#}" class="topleftDir icon_sprite ico_edit_no"></span>
{/if}
</td>
<td align="center">
{if check_permission('rubric_edit')}
<a class="topleftDir icon_sprite ico_edit" title="{#RUBRIK_EDIT#}" href="index.php?do=rubs&action=edit&Id={$rubric->Id}&cp={$sess}"></a>
<a class="topleftDir icon_sprite ico_template" title="{#RUBRIK_EDIT_TEMPLATE#}" href="index.php?do=rubs&action=template&Id={$rubric->Id}&cp={$sess}"></a>
{else}
<span title="{#RUBRIK_NO_CHANGE1#}" class="topleftDir icon_sprite ico_edit_no"></span>
<span title="{#RUBRIK_NO_CHANGE2#}" class="topleftDir icon_sprite ico_template_no"></span>
{/if}
</td>
<td align="center">
{if check_permission('rubric_edit')}
<a class="topleftDir icon_sprite ico_template" title="{#RUBRIK_EDIT_TEMPLATE#}" href="index.php?do=rubs&action=template&Id={$rubric->Id}&cp={$sess}"></a>
<a class="topleftDir icon_sprite ico_template" title="{#RUBRIK_EDIT_TMPLS#}" href="index.php?do=rubs&action=tmpls&Id={$rubric->Id}&cp={$sess}"></a>
{else}
<span title="{#RUBRIK_NO_CHANGE2#}" class="topleftDir icon_sprite ico_template_no"></span>
{/if}

240
admin/templates/rubs/rules.tpl

@ -0,0 +1,240 @@
<script language="Javascript" type="text/javascript">
var sess = '{$sess}';
</script>
<div class="title">
<h5>{#RUBRIK_EDIT_RULES#}</h5>
</div>
<div class="widget" style="margin-top: 0px;">
<div class="body">{#RUBRIC_WARNING_TIP#}</div>
</div>
<table class="first tableButtons" cellpadding="0" cellspacing="0" width="100%" id="rubricButtons">
<col width="20%">
<col width="20%">
<col width="20%">
<col width="20%">
<col width="20%">
<tr>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=edit&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_FIELDS#}</a>
</td>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=ftlist&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_FTEMPLATES#}</a>
</td>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=fieldsgroups&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_FGROUPS#}</a>
</td>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=template&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_TEMPLATES#}</a>
</td>
<td>
{if check_permission('rubric_code')}
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=code&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_CODE#}</a>
{/if}
</td>
</tr>
</table>
<div class="breadCrumbHolder module">
<div class="breadCrumb module">
<ul>
<li class="firstB">
<a href="index.php" title="{#MAIN_PAGE#}">{#MAIN_PAGE#}</a>
</li>
<li>
<a href="index.php?do=rubs&cp={$sess}">{#RUBRIK_SUB_TITLE#}</a>
</li>
<li>{#RUBRIK_EDIT_FIELDS#}</li>
<li><strong class="code">{$rubric->rubric_title}</strong></li>
</ul>
</div>
</div>
{if check_permission('rubric_edit') && check_permission('rubric_perms')}
<div class="widget first">
<div class="head">
<h5>{#RUBRIK_SET_PERMISSION#}</h5>
</div>
<div style="display: block;">
<form id="rubperm" action="index.php?do=rubs&action=rules&Id={$smarty.request.Id|escape}&submit=saveperms&cp={$sess}" method="post" class="mainForm">
<table cellpadding="0" cellspacing="0" width="100%" class="tableStatic">
<col width="16%">
<col width="12%">
<col width="12%">
<col width="12%">
<col width="12%">
<col width="12%">
<col width="12%">
<col width="12%">
<thead>
<tr>
<td>{#RUBRIK_USER_GROUP#}</td>
<td align="center">
{#RUBRIK_DOC_READ#}&nbsp;<a href="javascript:void(0);" class="topDir link" style="cursor: help;" title="{#RUBRIK_VIEW_TIP#}">[?]</a>
</td>
<td align="center">
{#RUBRIK_ALL_PERMISSION#}&nbsp;<a href="javascript:void(0);" class="topDir link" style="cursor: help;" title="{#RUBRIK_ALL_TIP#}">[?]</a>
</td>
<td align="center">
{#RUBRIK_CREATE_DOC#}&nbsp;<a href="javascript:void(0);" class="topDir link" style="cursor: help;" title="{#RUBRIK_DOC_TIP#}">[?]</a>
</td>
<td align="center">
{#RUBRIK_CREATE_DOC_NOW#}&nbsp;<a href="javascript:void(0);" class="topDir link" style="cursor: help;" title="{#RUBRIK_DOC_NOW_TIP#}">[?]</a>
</td>
<td align="center">
{#RUBRIK_EDIT_OWN#}&nbsp;<a href="javascript:void(0);" class="topDir link" style="cursor: help;" title="{#RUBRIK_OWN_TIP#}">[?]</a>
</td>
<td align="center">
{#RUBRIK_EDIT_OTHER#}&nbsp;<a href="javascript:void(0);" class="topleftDir link" style="cursor: help;" title="{#RUBRIK_OTHER_TIP#}">[?]</a>
</td>
<td align="center">
{#RUBRIK_EDIT_DELREV#}&nbsp;<a href="javascript:void(0);" class="topleftDir link" style="cursor: help;" title="{#RUBRIK_DELREV_TIP#}">[?]</a>
</td>
</tr>
</thead>
<tbody>
{foreach from=$groups item=group}
{assign var=doall value=$group->doall}
<tr>
<td>{$group->user_group_name|escape:html} </td>
<td align="center" {if in_array('docread', $group->permissions) || in_array('alles', $group->permissions)} class="yellow"{/if}>
{if $group->doall_h==1}
<input type="hidden" name="perm[{$group->user_group}][]" value="docread" />
<input class="check_perm" name="perm[{$group->user_group}][]" type="checkbox" value="docread" checked="checked" disabled="disabled" />
{else}
<input class="check_perm" name="perm[{$group->user_group}][]" type="checkbox" value="docread"{if in_array('docread', $group->permissions) || in_array('alles', $group->permissions)} checked="checked"{/if} />
{/if}
</td>
<td align="center" {if in_array('alles', $group->permissions)} class="yellow"{/if}>
{if $group->doall_h==1}
<input type="hidden" name="perm[{$group->user_group}][]" value="alles" />
<input class="check_perm" name="perm[{$group->user_group}][]" type="checkbox" value="alles" checked="checked" disabled="disabled" />
{else}
<input class="check_perm" name="perm[{$group->user_group}][]" type="checkbox" value="alles"{if in_array('alles', $group->permissions)} checked="checked"{/if}{if $group->user_group==2} disabled="disabled"{/if} />
{/if}
</td>
<td align="center" {if in_array('new', $group->permissions) || in_array('alles', $group->permissions)} class="yellow"{/if}>
<input type="hidden" name="user_group[{$group->user_group}]" value="{$group->user_group}" />
{if $group->doall_h==1}
<input class="check_perm" name="{$group->user_group}" type="checkbox" value="1"{$doall} />
<input type="hidden" name="perm[{$group->user_group}][]" value="new" />
{else}
<input class="check_perm new" id="new_{$group->user_group}" name="perm[{$group->user_group}][]" type="checkbox" value="new"{if in_array('new', $group->permissions) || in_array('alles', $group->permissions)} checked="checked"{/if}{if $group->user_group==2} disabled="disabled"{/if} />
{/if}
</td>
<td align="center" {if in_array('newnow', $group->permissions) || in_array('alles', $group->permissions)} class="yellow"{/if}>
<input type="hidden" name="user_group[{$group->user_group}]" value="{$group->user_group}" />
{if $group->doall_h==1}
<input class="check_perm" name="{$group->user_group}" type="checkbox" value="1"{$doall} />
<input type="hidden" name="perm[{$group->user_group}][]" value="newnow" />
{else}
<input class="check_perm newnow" id="newnow_{$group->user_group}" name="perm[{$group->user_group}][]" type="checkbox" value="newnow"{if in_array('newnow', $group->permissions) || in_array('alles', $group->permissions)} checked="checked"{/if}{if $group->user_group==2} disabled="disabled"{/if} />
{/if}
</td>
<td align="center" {if in_array('editown', $group->permissions) || in_array('alles', $group->permissions)} class="yellow"{/if}>
{if $group->doall_h==1}
<input class="check_perm" name="{$group->user_group}" type="checkbox" value="1"{$doall} />
<input type="hidden" name="perm[{$group->user_group}][]" value="editown" />
{else}
<input class="check_perm editown" id="editown_{$group->user_group}" data-id="{$group->user_group}" name="perm[{$group->user_group}][]" type="checkbox" value="editown"{if in_array('editown', $group->permissions) || in_array('alles', $group->permissions)} checked="checked"{/if}{if $group->user_group==2} disabled="disabled"{/if} />
{/if}
</td>
<td align="center" {if in_array('editall', $group->permissions) || in_array('alles', $group->permissions)} class="yellow"{/if}>
{if $group->doall_h==1}
<input class="check_perm" name="{$group->user_group}" type="checkbox" value="1"{$doall} />
{else}
<input class="check_perm editall" id="editall_{$group->user_group}" name="perm[{$group->user_group}][]" data-id="{$group->user_group}" type="checkbox" value="editall"{if in_array('editall', $group->permissions) || in_array('alles', $group->permissions)} checked="checked"{/if}{if $group->user_group==2} disabled="disabled"{/if} />
{/if}
</td>
<td align="center" {if in_array('delrev', $group->permissions) || in_array('alles', $group->permissions)} class="yellow"{/if}>
{if $group->doall_h==1}
<input class="check_perm" name="{$group->user_group}" type="checkbox" value="1"{$doall} />
<input type="hidden" name="perm[{$group->user_group}][]" value="delrev" />
{else}
<input class="check_perm" name="perm[{$group->user_group}][]" type="checkbox" value="delrev"{if in_array('delrev', $group->permissions) || in_array('alles', $group->permissions)} checked="checked"{/if}{if $group->user_group==2} disabled="disabled"{/if} />
{/if}
</td>
</tr>
{/foreach}
</tbody>
</table>
<div class="rowElem">
<input type="submit" class="basicBtn" value="{#RUBRIK_BUTTON_PERM#}" />
&nbsp;
<input type="submit" class="blackBtn SaveEditPerms" value="{#RUBRIK_BUTTON_TPL_NEXT#}" />
</div>
</form>
</div>
</div>
{/if}
<script language="javascript">
$(document).ready(function(){ldelim}
{literal}
$(document).on('change', '#selall', function(event) {
event.preventDefault();
if ($('#selall').is(':checked')) {
$('#FieldsList .checkbox').attr('checked','checked');
$('#FieldsList .checkbox').addClass('jqTransformChecked');
} else {
$('#FieldsList .checkbox').removeClass('jqTransformChecked');
$('#FieldsList .checkbox').removeAttr('checked');
}
});
$('.check_perm').on('change', function(event) {
event.preventDefault();
if ($(this).is(':checked')) {
$(this).parent().parent('td').addClass('yellow');
} else {
$(this).parent().parent('td').removeClass('yellow');
}
});
{/literal}
Mousetrap.bind(['ctrl+s', 'command+s'], function(event) {ldelim}
event.preventDefault();
$("#rubperm").ajaxSubmit({ldelim}
url: 'index.php?do=rubs&action=rules&Id={$smarty.request.Id|escape}&submit=saveperms&cp={$sess}&ajax=1',
dataType: 'json',
beforeSubmit: function(){ldelim}
$.alerts._overlay('show');
{rdelim},
success: function(data){ldelim}
$.jGrowl(data['message'], {ldelim}
header: data['header'],
theme: data['theme']
{rdelim});
$.alerts._overlay('hide');
{rdelim}
{rdelim});
return false;
{rdelim});
$(".SaveEditPerms").click(function(event){ldelim}
event.preventDefault();
$("#rubperm").ajaxSubmit({ldelim}
url: 'index.php?do=rubs&action=rules&Id={$smarty.request.Id|escape}&submit=saveperms&cp={$sess}&ajax=1',
dataType: 'json',
beforeSubmit: function(){ldelim}
$.alerts._overlay('show');
{rdelim},
success: function(data){ldelim}
$.jGrowl(data['message'], {ldelim}
header: data['header'],
theme: data['theme']
{rdelim});
$.alerts._overlay('hide');
{rdelim}
{rdelim});
return false;
{rdelim});
{rdelim});
</script>

34
admin/templates/rubs/tmpls.tpl

@ -37,12 +37,6 @@ $(document).ready(function(){ldelim}
<h5>{#RUBRIC_TMPLS_HEAD#}</h5>
<div class="num">
<a class="basicNum" href="index.php?do=rubs&action=template&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIK_EDIT_TEMPLATE#}</a>
&nbsp;
<a class="basicNum" href="index.php?do=rubs&action=edit&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIK_EDIT#}</a>
&nbsp;
{if check_permission('rubric_code')}
<a class="basicNum" href="index.php?do=rubs&action=code&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIK_EDIT_CODE#}</a>
{/if}
</div>
</div>
@ -52,6 +46,34 @@ $(document).ready(function(){ldelim}
</div>
</div>
<table class="first tableButtons" cellpadding="0" cellspacing="0" width="100%" id="rubricButtons">
<col width="20%">
<col width="20%">
<col width="20%">
<col width="20%">
<col width="20%">
<tr>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=edit&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_FIELDS#}</a>
</td>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=ftlist&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_FTEMPLATES#}</a>
</td>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=fieldsgroups&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_FGROUPS#}</a>
</td>
<td>
{if check_permission('rubric_code')}
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=code&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_CODE#}</a>
{/if}
</td>
<td>
<a class="button basicBtn topBtn" href="index.php?do=rubs&action=rules&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TABLE_BTN_RULES#}</a>
</td>
</tr>
</table>
<div class="breadCrumbHolder module">
<div class="breadCrumb module">
<ul>

78
admin/templates/settings/edit_file.tpl

@ -0,0 +1,78 @@
<div class="title">
<h5>{#SETTINGS_FILE_EDIT_H#} {$file_name}</h5>
</div>
<div class="widget">
<div class="title">
<h5>{#SETTINGS_FILE_CONTENT#} {$file_name}</h5>
</div>
<form id="code_form" method="post" action="{$formaction}" class="mainForm">
<div class="rowElem" style="padding: 0">
<textarea id="code_text" name="code_text">{$template|escape}</textarea>
<div class="fix"></div>
</div>
<div class="rowElem">
<button type="submit" class="basicBtn">{#SETTINGS_BUTTON_SAVE#}</button>
&nbsp;{#SETTINGS_OR#}&nbsp;
<button class="blackBtn SaveEditFile">{#SETTINGS_BUTTON_SAVE_AJAX#}</button>
<div class="fix"></div>
</div>
</form>
</div>
<script language="Javascript" type="text/javascript">
var sett_options = {ldelim}
url: '{$formaction}',
dataType: 'json',
data: {ldelim} ajax: '1' {rdelim},
beforeSubmit: Request,
success: Response
{rdelim}
function Request(){ldelim}
$.alerts._overlay('show');
{rdelim}
function Response(data){ldelim}
$.alerts._overlay('hide');
$.jGrowl(data['message'], {ldelim}
header: data['header'],
theme: data['theme']
{rdelim});
{rdelim}
$(document).ready(function(){ldelim}
Mousetrap.bind(['ctrl+s', 'command+s'], function(e) {ldelim}
if (e.preventDefault) {ldelim}
e.preventDefault();
{rdelim} else {ldelim}
// internet explorer
e.returnValue = false;
{rdelim}
$("#code_form").ajaxSubmit(sett_options);
return false;
{rdelim});
$(".SaveEditFile").click(function(e){ldelim}
if (e.preventDefault) {ldelim}
e.preventDefault();
{rdelim} else {ldelim}
// internet explorer
e.returnValue = false;
{rdelim}
$("#code_form").ajaxSubmit(sett_options);
return false;
{rdelim});
{literal}
setTimeout(function(){editorfile.refresh();}, 20);
{/literal}
{rdelim});
</script>
{include file="$codemirror_editor" conn_id="file" textarea_id='code_text' ctrls='$("#code_form").ajaxSubmit(sett_options);' height=450}

13
admin/templates/settings/pagination_edit.tpl

@ -24,13 +24,12 @@
<div class="widget first">
<div class="body">
{if check_permission('cache_clear')}<a class="button basicBtn clearCacheSess" href="javascript:void(0);">{#MAIN_STAT_CLEAR_CACHE_FULL#}</a>{/if}
&nbsp;
{if check_permission('cache_thumb')}<a class="button basicBtn clearThumb" href="javascript:void(0);">{#MAIN_STAT_CLEAR_THUMB#}</a>{/if}
&nbsp;
{if check_permission('document_revisions')}<a class="button basicBtn clearRev" href="javascript:void(0);">{#MAIN_STAT_CLEAR_REV#}</a>{/if}
&nbsp;
{if check_permission('gen_settings')}<a class="button basicBtn clearCount" href="javascript:void(0);">{#MAIN_STAT_CLEAR_COUNT#}</a>{/if}
{if check_permission('cache_clear')}<a class="button redBtn clearCacheSess" href="javascript:void(0);">{#MAIN_STAT_CLEAR_CACHE_FULL#}</a>&nbsp;{/if}
{if check_permission('cache_thumb')}<a class="button redBtn clearThumb" href="javascript:void(0);">{#MAIN_STAT_CLEAR_THUMB#}</a>&nbsp;{/if}
{if check_permission('document_revisions')}<a class="button redBtn clearRev" href="javascript:void(0);">{#MAIN_STAT_CLEAR_REV#}</a>&nbsp;{/if}
{if check_permission('gen_settings')}<a class="button redBtn clearCount" href="javascript:void(0);">{#MAIN_STAT_CLEAR_COUNT#}</a>&nbsp;{/if}
{if check_permission('gen_settings_robots')}<a data-dialog="robots" data-height="650" data-modal="true" class="button greenBtn openDialog" href="index.php?do=settings&action=robots&cp={$sess}">{#SETTINGS_FILE_ROBOTS#}</a>&nbsp;{/if}
{if check_permission('gen_settings_fcustom')}<a data-dialog="custom" data-height="650" data-modal="true" class="button greenBtn openDialog" href="index.php?do=settings&action=custom&cp={$sess}">{#SETTINGS_FILE_CUSTOM#}</a>{/if}
</div>
</div>

14
admin/templates/settings/settings_case.tpl

@ -18,13 +18,12 @@
<div class="widget first">
<div class="body">
{if check_permission('cache_clear')}<a class="button basicBtn clearCacheSess" href="javascript:void(0);">{#MAIN_STAT_CLEAR_CACHE_FULL#}</a>{/if}
&nbsp;
{if check_permission('cache_thumb')}<a class="button basicBtn clearThumb" href="javascript:void(0);">{#MAIN_STAT_CLEAR_THUMB#}</a>{/if}
&nbsp;
{if check_permission('document_revisions')}<a class="button basicBtn clearRev" href="javascript:void(0);">{#MAIN_STAT_CLEAR_REV#}</a>{/if}
&nbsp;
{if check_permission('gen_settings')}<a class="button basicBtn clearCount" href="javascript:void(0);">{#MAIN_STAT_CLEAR_COUNT#}</a>{/if}
{if check_permission('cache_clear')}<a class="button redBtn clearCacheSess" href="javascript:void(0);">{#MAIN_STAT_CLEAR_CACHE_FULL#}</a>&nbsp;{/if}
{if check_permission('cache_thumb')}<a class="button redBtn clearThumb" href="javascript:void(0);">{#MAIN_STAT_CLEAR_THUMB#}</a>&nbsp;{/if}
{if check_permission('document_revisions')}<a class="button redBtn clearRev" href="javascript:void(0);">{#MAIN_STAT_CLEAR_REV#}</a>&nbsp;{/if}
{if check_permission('gen_settings')}<a class="button redBtn clearCount" href="javascript:void(0);">{#MAIN_STAT_CLEAR_COUNT#}</a>&nbsp;{/if}
{if check_permission('gen_settings_robots')}<a data-dialog="robots" data-height="650" data-modal="true" class="button greenBtn openDialog" href="index.php?do=settings&action=robots&cp={$sess}">{#SETTINGS_FILE_ROBOTS#}</a>&nbsp;{/if}
{if check_permission('gen_settings_fcustom')}<a data-dialog="custom" data-height="650" data-modal="true" class="button greenBtn openDialog" href="index.php?do=settings&action=custom&cp={$sess}">{#SETTINGS_FILE_CUSTOM#}</a>{/if}
</div>
</div>
@ -146,3 +145,4 @@ function Response(data){ldelim}
{rdelim}
</script>
{include file="$codemirror_connect"}

14
admin/templates/settings/settings_countries.tpl

@ -19,13 +19,12 @@
<div class="widget first">
<div class="body">
{if check_permission('cache_clear')}<a class="button basicBtn clearCacheSess" href="javascript:void(0);">{#MAIN_STAT_CLEAR_CACHE_FULL#}</a>{/if}
&nbsp;
{if check_permission('cache_thumb')}<a class="button basicBtn clearThumb" href="javascript:void(0);">{#MAIN_STAT_CLEAR_THUMB#}</a>{/if}
&nbsp;
{if check_permission('document_revisions')}<a class="button basicBtn clearRev" href="javascript:void(0);">{#MAIN_STAT_CLEAR_REV#}</a>{/if}
&nbsp;
{if check_permission('gen_settings')}<a class="button basicBtn clearCount" href="javascript:void(0);">{#MAIN_STAT_CLEAR_COUNT#}</a>{/if}
{if check_permission('cache_clear')}<a class="button redBtn clearCacheSess" href="javascript:void(0);">{#MAIN_STAT_CLEAR_CACHE_FULL#}</a>&nbsp;{/if}
{if check_permission('cache_thumb')}<a class="button redBtn clearThumb" href="javascript:void(0);">{#MAIN_STAT_CLEAR_THUMB#}</a>&nbsp;{/if}
{if check_permission('document_revisions')}<a class="button redBtn clearRev" href="javascript:void(0);">{#MAIN_STAT_CLEAR_REV#}</a>&nbsp;{/if}
{if check_permission('gen_settings')}<a class="button redBtn clearCount" href="javascript:void(0);">{#MAIN_STAT_CLEAR_COUNT#}</a>&nbsp;{/if}
{if check_permission('gen_settings_robots')}<a data-dialog="robots" data-height="650" data-modal="true" class="button greenBtn openDialog" href="index.php?do=settings&action=robots&cp={$sess}">{#SETTINGS_FILE_ROBOTS#}</a>&nbsp;{/if}
{if check_permission('gen_settings_fcustom')}<a data-dialog="custom" data-height="650" data-modal="true" class="button greenBtn openDialog" href="index.php?do=settings&action=custom&cp={$sess}">{#SETTINGS_FILE_CUSTOM#}</a>{/if}
</div>
</div>
@ -137,3 +136,4 @@ function Response(){ldelim}
{rdelim}
</script>
{include file="$codemirror_connect"}

14
admin/templates/settings/settings_lang.tpl

@ -18,13 +18,12 @@
<div class="widget first">
<div class="body">
{if check_permission('cache_clear')}<a class="button basicBtn clearCacheSess" href="javascript:void(0);">{#MAIN_STAT_CLEAR_CACHE_FULL#}</a>{/if}
&nbsp;
{if check_permission('cache_thumb')}<a class="button basicBtn clearThumb" href="javascript:void(0);">{#MAIN_STAT_CLEAR_THUMB#}</a>{/if}
&nbsp;
{if check_permission('document_revisions')}<a class="button basicBtn clearRev" href="javascript:void(0);">{#MAIN_STAT_CLEAR_REV#}</a>{/if}
&nbsp;
{if check_permission('gen_settings')}<a class="button basicBtn clearCount" href="javascript:void(0);">{#MAIN_STAT_CLEAR_COUNT#}</a>{/if}
{if check_permission('cache_clear')}<a class="button redBtn clearCacheSess" href="javascript:void(0);">{#MAIN_STAT_CLEAR_CACHE_FULL#}</a>&nbsp;{/if}
{if check_permission('cache_thumb')}<a class="button redBtn clearThumb" href="javascript:void(0);">{#MAIN_STAT_CLEAR_THUMB#}</a>&nbsp;{/if}
{if check_permission('document_revisions')}<a class="button redBtn clearRev" href="javascript:void(0);">{#MAIN_STAT_CLEAR_REV#}</a>&nbsp;{/if}
{if check_permission('gen_settings')}<a class="button redBtn clearCount" href="javascript:void(0);">{#MAIN_STAT_CLEAR_COUNT#}</a>&nbsp;{/if}
{if check_permission('gen_settings_robots')}<a data-dialog="robots" data-height="650" data-modal="true" class="button greenBtn openDialog" href="index.php?do=settings&action=robots&cp={$sess}">{#SETTINGS_FILE_ROBOTS#}</a>&nbsp;{/if}
{if check_permission('gen_settings_fcustom')}<a data-dialog="custom" data-height="650" data-modal="true" class="button greenBtn openDialog" href="index.php?do=settings&action=custom&cp={$sess}">{#SETTINGS_FILE_CUSTOM#}</a>{/if}
</div>
</div>
@ -102,3 +101,4 @@
</div>
</div>
{include file="$codemirror_connect"}

13
admin/templates/settings/settings_main.tpl

@ -19,13 +19,12 @@
<div class="widget first">
<div class="body">
{if check_permission('cache_clear')}<a class="button basicBtn clearCacheSess" href="javascript:void(0);">{#MAIN_STAT_CLEAR_CACHE_FULL#}</a>{/if}
&nbsp;
{if check_permission('cache_thumb')}<a class="button basicBtn clearThumb" href="javascript:void(0);">{#MAIN_STAT_CLEAR_THUMB#}</a>{/if}
&nbsp;
{if check_permission('document_revisions')}<a class="button basicBtn clearRev" href="javascript:void(0);">{#MAIN_STAT_CLEAR_REV#}</a>{/if}
&nbsp;
{if check_permission('gen_settings')}<a class="button basicBtn clearCount" href="javascript:void(0);">{#MAIN_STAT_CLEAR_COUNT#}</a>{/if}
{if check_permission('cache_clear')}<a class="button redBtn clearCacheSess" href="javascript:void(0);">{#MAIN_STAT_CLEAR_CACHE_FULL#}</a>&nbsp;{/if}
{if check_permission('cache_thumb')}<a class="button redBtn clearThumb" href="javascript:void(0);">{#MAIN_STAT_CLEAR_THUMB#}</a>&nbsp;{/if}
{if check_permission('document_revisions')}<a class="button redBtn clearRev" href="javascript:void(0);">{#MAIN_STAT_CLEAR_REV#}</a>&nbsp;{/if}
{if check_permission('gen_settings')}<a class="button redBtn clearCount" href="javascript:void(0);">{#MAIN_STAT_CLEAR_COUNT#}</a>&nbsp;{/if}
{if check_permission('gen_settings_robots')}<a data-dialog="robots" data-height="650" data-modal="true" class="button greenBtn openDialog" href="index.php?do=settings&action=robots&cp={$sess}">{#SETTINGS_FILE_ROBOTS#}</a>&nbsp;{/if}
{if check_permission('gen_settings_fcustom')}<a data-dialog="custom" data-height="650" data-modal="true" class="button greenBtn openDialog" href="index.php?do=settings&action=custom&cp={$sess}">{#SETTINGS_FILE_CUSTOM#}</a>{/if}
</div>
</div>

14
admin/templates/settings/settings_pagination.tpl

@ -19,13 +19,12 @@
<div class="widget first">
<div class="body">
{if check_permission('cache_clear')}<a class="button basicBtn clearCacheSess" href="javascript:void(0);">{#MAIN_STAT_CLEAR_CACHE_FULL#}</a>{/if}
&nbsp;
{if check_permission('cache_thumb')}<a class="button basicBtn clearThumb" href="javascript:void(0);">{#MAIN_STAT_CLEAR_THUMB#}</a>{/if}
&nbsp;
{if check_permission('document_revisions')}<a class="button basicBtn clearRev" href="javascript:void(0);">{#MAIN_STAT_CLEAR_REV#}</a>{/if}
&nbsp;
{if check_permission('gen_settings')}<a class="button basicBtn clearCount" href="javascript:void(0);">{#MAIN_STAT_CLEAR_COUNT#}</a>{/if}
{if check_permission('cache_clear')}<a class="button redBtn clearCacheSess" href="javascript:void(0);">{#MAIN_STAT_CLEAR_CACHE_FULL#}</a>&nbsp;{/if}
{if check_permission('cache_thumb')}<a class="button redBtn clearThumb" href="javascript:void(0);">{#MAIN_STAT_CLEAR_THUMB#}</a>&nbsp;{/if}
{if check_permission('document_revisions')}<a class="button redBtn clearRev" href="javascript:void(0);">{#MAIN_STAT_CLEAR_REV#}</a>&nbsp;{/if}
{if check_permission('gen_settings')}<a class="button redBtn clearCount" href="javascript:void(0);">{#MAIN_STAT_CLEAR_COUNT#}</a>&nbsp;{/if}
{if check_permission('gen_settings_robots')}<a data-dialog="robots" data-height="650" data-modal="true" class="button greenBtn openDialog" href="index.php?do=settings&action=robots&cp={$sess}">{#SETTINGS_FILE_ROBOTS#}</a>&nbsp;{/if}
{if check_permission('gen_settings_fcustom')}<a data-dialog="custom" data-height="650" data-modal="true" class="button greenBtn openDialog" href="index.php?do=settings&action=custom&cp={$sess}">{#SETTINGS_FILE_CUSTOM#}</a>{/if}
</div>
</div>
@ -85,3 +84,4 @@
</tbody>
</table>
</div>
{include file="$codemirror_connect"}

8
admin/templates/templates/form.tpl

@ -82,7 +82,7 @@
<td>
<strong><a class="rightDir" title="{#TEMPLATES_THEME_FOLDER#}" href="javascript:void(0);" onclick="textSelection('[tag:theme:',']');">[tag:theme:folder]</a></strong>
</td>
<td rowspan="27">
<td rowspan="28">
<textarea {$read_only} class="{if $php_forbidden==1}tpl_code_readonly{else}{/if}" wrap="off" style="width:100%; height:100%;" name="template_text" id="template_text">{$row->template_text|default:$prefab|escape}</textarea>
<ul class="messages" style="margin-top: 10px;">
<li class="highlight grey">
@ -110,6 +110,12 @@
</td>
</tr>
<tr>
<td>
<strong><a class="rightDir" title="{#TEMPLATES_RUBFOOTER#}" href="javascript:void(0);" onclick="textSelection('[tag:rubfooter]','');">[tag:rubfooter]</a></strong>
</td>
</tr>
<tr>
<td>
<strong><a class="rightDir" title="{#TEMPLATES_TITLE#}" href="javascript:void(0);" onclick="textSelection('[tag:title]','');">[tag:title]</a></strong>

135
class/class.core.php

@ -1,6 +1,6 @@
<?php
/**
/**
* AVE.cms
*
* Класс, предназначенный для сбора и формирования общей страницы перед показом в Публичной части.
@ -14,10 +14,10 @@
*
*/
class AVE_Core
{
class AVE_Core
{
/**
/**
* Свойства класса
*/
@ -70,7 +70,7 @@ class AVE_Core
*/
public $_module_not_found = 'Запрашиваемый модуль не найден.';
/**
/**
* Внутренние методы класса
*/
@ -436,6 +436,7 @@ class AVE_Core
rubric_permission,
rubric_template,
rubric_header_template,
rubric_footer_template,
rubric_meta_gen,
template_text,
other.template
@ -462,7 +463,9 @@ class AVE_Core
if ($this->curentdoc->rubric_tmpl_id != 0)
{
$this->curentdoc->rubric_template = (($this->curentdoc->template != '') ? $this->curentdoc->template : $this->curentdoc->rubric_template);
$this->curentdoc->rubric_template = (($this->curentdoc->template != '')
? $this->curentdoc->template
: $this->curentdoc->rubric_template);
unset($this->curentdoc->template);
}
@ -491,6 +494,7 @@ class AVE_Core
rubric_permission,
rubric_template,
rubric_header_template,
rubric_footer_template,
rubric_meta_gen,
template_text
FROM
@ -645,7 +649,7 @@ class AVE_Core
return $combine;
}
/**
/**
* Внешние методы класса
*/
@ -733,7 +737,7 @@ class AVE_Core
// Если в запросе пришел параметр module и для данного названия модуля существует
// директория или данный модуль имеет функцию и его системный тег указан в каком-либо шаблоне, тогда
if ((isset($_REQUEST['module']) && $_REQUEST['module'] == $row->ModuleSysName) ||
(1 == $row->ModuleIsFunction && !empty($row->ModuleAveTag) && 1 == preg_match($row->ModuleAveTag, $template)))
(1 == $row->ModuleIsFunction && ! empty($row->ModuleAveTag) && 1 == preg_match($row->ModuleAveTag, $template)))
{
// Проверяем, существует ли для данного модуля файл module.php в его персональной директории
$mod_file = BASE_DIR . '/modules/' . $row->ModuleSysName . '/module.php';
@ -787,6 +791,7 @@ class AVE_Core
$out = $this->_coreModuleMetatagsFetch();
$out = $this->_coreDocumentTemplateGet('', '', $this->_coreModuleTemplateGet());
}
// Если происходит вызов системного блока
elseif (isset($_REQUEST['sysblock']) && ! empty($_REQUEST['sysblock']))
{
if (! is_numeric($_REQUEST['sysblock']) && preg_match('/^[A-Za-z0-9-_]{1,20}$/i', $_REQUEST['sysblock']) !== 1)
@ -806,49 +811,38 @@ class AVE_Core
if ($this->_sysBlock($_REQUEST['sysblock'], 'sysblock_ajax'))
{
if (isAjax())
{
$out = parse_sysblock($_REQUEST['sysblock']);
}
else
{
$this->_coreErrorPage404();
}
}
else
{
$out = parse_sysblock($_REQUEST['sysblock']);
}
}
// Если происходит вызов запроса
elseif (isset($_REQUEST['request']) && ! empty($_REQUEST['request']))
{
if (! is_numeric($_REQUEST['request']) && preg_match('/^[A-Za-z0-9-_]{1,20}$/i', $_REQUEST['request']) !== 1)
{
$this->_coreErrorPage404();
}
// Определяем рубрику
define('RUB_ID', ! empty ($rub_id)
? $rub_id
: $this->curentdoc->rubric_id);
// проверяем разрешение на внешнее обращение
// Проверяем разрешение на внешнее обращение
if (! $this->_requestGet($_REQUEST['request'], 'request_external'))
{
$this->_coreErrorPage404();
}
// проверяем разрешение на обращение только по Ajax
// Проверяем разрешение на обращение только по Ajax
if ($this->_requestGet($_REQUEST['request'], 'request_ajax'))
{
if (isAjax())
{
$out = request_parse($_REQUEST['request']);
}
else
{
$this->_coreErrorPage404();
}
}
else
{
$out = request_parse($_REQUEST['request']);
@ -861,16 +855,12 @@ class AVE_Core
{
// Определяем документ с 404 ошибкой в случае, если документ не найден
if ($this->_corePageNotFoundFetch(PAGE_NOT_FOUND_ID, UGROUP))
{
$_REQUEST['id'] = $_GET['id'] = $id = PAGE_NOT_FOUND_ID;
}
}
// проверяем параметры публикации документа
if (! $this->_coreDocumentIsPublished())
{
$this->_coreErrorPage404();
}
// Определяем права доступа к документам рубрики
define('RUB_ID', ! empty ($rub_id)
@ -879,14 +869,14 @@ class AVE_Core
$this->_coreRubricPermissionFetch(RUB_ID);
// получаем шаблон
$out = $this->_coreDocumentTemplateGet(RUB_ID);
// Выполняем Код рубрики
// Выполняем Код рубрики До загрузки документа
ob_start();
eval('?>' . $this->curentdoc->rubric_start_code . '<?');
ob_end_clean();
// Получаем шаблон
$out = $this->_coreDocumentTemplateGet(RUB_ID);
if (! ((isset ($_SESSION[RUB_ID . '_docread']) && $_SESSION[RUB_ID . '_docread'] == 1)
|| (isset ($_SESSION[RUB_ID . '_alles']) && $_SESSION[RUB_ID . '_alles'] == 1)) )
{ // читать запрещено - извлекаем ругательство и отдаём вместо контента
@ -895,7 +885,7 @@ class AVE_Core
else
{
if (isset ($_REQUEST['print']) && $_REQUEST['print'] == 1)
{ // увеличиваем счетчик версий для печати
{ // Увеличиваем счетчик версий для печати
$AVE_DB->Query("
UPDATE
" . PREFIX . "_documents
@ -908,7 +898,7 @@ class AVE_Core
else
{
if (! isset ($_SESSION['doc_view'][$id]))
{ // увеличиваем счетчик просмотров (1 раз в пределах сессии)
{ // Увеличиваем счетчик просмотров (1 раз в пределах сессии)
$AVE_DB->Query("
UPDATE
" . PREFIX . "_documents
@ -923,7 +913,7 @@ class AVE_Core
$curdate = mktime(0, 0, 0, date('m'), date('d'), date('Y'));
if (!isset ($_SESSION['doc_view_dayly['.$curdate.'][' . $id . ']']))
if (! isset($_SESSION['doc_view_dayly['.$curdate.'][' . $id . ']']))
{
// и подневный счетчик просмотров тоже увеличиваем
$curdate = mktime(0, 0, 0, date('m'), date('d'), date('Y'));
@ -958,9 +948,9 @@ class AVE_Core
if (CACHE_DOC_TPL && empty ($_POST) && !(isset ($_SESSION['user_adminmode']) && $_SESSION['user_adminmode'] == 1))
{
// кэширование разрешено
// извлекаем скомпилированный шаблон документа из кэша
// если там пусто, пробуем достать из бд
// Кэширование разрешено
// Извлекаем скомпилированный шаблон документа из кэша
// Если там пусто, пробуем достать из бд
$cache_id = (int)$this->curentdoc->Id;
$cache_id = 'compiled/' . (floor($cache_id / 1000)) . '/' . $cache_id;
@ -991,22 +981,22 @@ class AVE_Core
unset($cache_dir, $cache_file, $cache_id);
}
else
{ // кэширование запрещено
{ // Кэширование запрещено
$main_content = false;
}
// Собираем контент
// если в кеше нет контента, то
// Если в кеше нет контента, то
if (empty($main_content))
{
// кэш пустой или отключен, извлекаем и компилируем шаблон
// Кэш пустой или отключен, извлекаем и компилируем шаблон
if (! empty ($this->curentdoc->rubric_template))
{
$rubTmpl = $this->curentdoc->rubric_template;
}
else
{
// если документу задан другой шаблон из данной рубрики, то берем его
// Если документу задан другой шаблон из данной рубрики, то берем его
if ($this->curentdoc->rubric_tmpl_id != 0)
{
$rubTmpl = $AVE_DB->Query("
@ -1021,7 +1011,8 @@ class AVE_Core
LIMIT 1
")->GetCell();
}
else // иначе берем стандартный шаблон рубрики
// Иначе берем стандартный шаблон рубрики
else
{
$rubTmpl = $AVE_DB->Query("
SELECT
@ -1138,12 +1129,10 @@ class AVE_Core
$main_content = str_replace('[tag:doctime]', pretty_date(strftime(TIME_FORMAT, $this->curentdoc->document_published)), $main_content);
$main_content = str_replace('[tag:humandate]', human_date($this->curentdoc->document_published), $main_content);
$main_content = str_replace('[tag:docauthorid]', $this->curentdoc->document_author_id, $main_content);
if (preg_match('[tag:docauthor]', $main_content)){
if (preg_match('[tag:docauthor]', $main_content))
$main_content = str_replace('[tag:docauthor]', get_username_by_id($this->curentdoc->document_author_id), $main_content);
}
}
$out = str_replace('[tag:maincontent]', $main_content, $out);
@ -1168,13 +1157,17 @@ class AVE_Core
*/
// Тут мы вводим в хеадер иньекцию скриптов.
// Тут мы вводим в хеадер и футер иньекцию скриптов.
if (defined('RUB_ID'))
{
$rubheader = $this->curentdoc->rubric_header_template;
$out = str_replace('[tag:rubheader]', $rubheader.'[tag:rubheader]', $out);
$replace = array(
'[tag:rubheader]' => $this->curentdoc->rubric_header_template . '[tag:rubheader]',
'[tag:rubfooter]' => $this->curentdoc->rubric_footer_template . '[tag:rubfooter]'
);
$out = str_replace(array_keys($replace), array_values($replace), $out);
unset($rubheader);
unset($replace);
}
// Парсим поля запроса
@ -1190,7 +1183,7 @@ class AVE_Core
// Удаляем ошибочные теги полей документа в шаблоне рубрики
$out = preg_replace('/\[tag:rfld:\d*\]/', '', $out);
// Если в запросе пришел параметр print, т.е. страница для печати,
// Если в GET запросе пришел параметр print, т.е. страница для печати,
// парсим контент, который обрамлен тегами только для печати
if (isset ($_REQUEST['print']) && $_REQUEST['print'] == 1)
{
@ -1215,7 +1208,7 @@ class AVE_Core
// Если в запросе пришел параметр module, т.е. вызов модуля,
// проверяем установлен и активен ли модуль
if ( isset($_REQUEST['module'])
if (isset($_REQUEST['module'])
&& ! (isset($this->install_modules[$_REQUEST['module']])
&& '1' == $this->install_modules[$_REQUEST['module']]->ModuleStatus) )
{
@ -1297,16 +1290,17 @@ class AVE_Core
ABS_PATH . 'templates/' . ((defined('THEME_FOLDER') === false) ? DEFAULT_THEME_FOLDER : THEME_FOLDER) . '/',
ABS_PATH,
htmlspecialchars(get_settings('site_name'), ENT_QUOTES),
(isset($_REQUEST['id'])) ? $this->curentdoc->document_alias : '',
(isset($_REQUEST['id'])) ? isset ($this->curentdoc->document_alias) ? $this->curentdoc->document_alias : '' : '',
getSiteUrl(),
get_home_link(),
(isset($this->curentdoc->document_meta_robots) ? $this->curentdoc->document_meta_robots : ''),
canonical(ABS_PATH . $this->curentdoc->document_alias),
canonical(isset ($this->curentdoc->document_alias) ? ABS_PATH . $this->curentdoc->document_alias : ''),
(isset($this->curentdoc->Id) ? $this->curentdoc->Id : ''),
(isset($this->curentdoc->document_parent) ? $this->curentdoc->document_parent : '')
);
}
// Если пришел контент из модуля
if (defined('MODULE_CONTENT'))
{
// парсинг тегов при выводе из модуля
@ -1319,20 +1313,24 @@ class AVE_Core
$search[] = '[tag:keywords]';
$replace[] = htmlspecialchars(defined('MODULE_KEYWORDS') ? MODULE_KEYWORDS : '', ENT_QUOTES);
}
// Или из системного блока
elseif (isset($_REQUEST['sysblock']))
{
// Убираем пустые теги в сис блоке
$main_content = preg_replace('/\[tag:(.+?)\]/', '', $main_content);
$main_content = preg_replace('/\[mod_(.+?)\]/', '', $main_content);
}
// Или из запроса
elseif (isset($_REQUEST['request']))
{
// Убираем пустые теги в сис блоке
$main_content = preg_replace('/\[tag:(.+?)\]/', '', $main_content);
$main_content = preg_replace('/\[mod_(.+?)\]/', '', $main_content);
}
// Иначе
else
{
// Если стоит вкл на генерацию keywords, description
if ($this->curentdoc->rubric_meta_gen)
{
// Генерируем keywords, description на основе
@ -1422,11 +1420,11 @@ class AVE_Core
// Парсим теги языковых условий
if (defined('RUB_ID'))
{
$out = preg_replace('/\[tag:lang:([a-zA-Z0-9-_]+)\]/', '<?php if($AVE_Core->curentdoc->document_lang=="$1") { ?>', $out);
$out = preg_replace('/\[tag:lang:([a-zA-Z0-9-_]+)\]/', '<?php if ($AVE_Core->curentdoc->document_lang == "$1") { ?>', $out);
}
else
{
$out = preg_replace('/\[tag:lang:([a-zA-Z0-9-_]+)\]/', '<?php if($_SESSION["user_language"]=="$1") { ?>', $out);
$out = preg_replace('/\[tag:lang:([a-zA-Z0-9-_]+)\]/', '<?php if ($_SESSION["user_language"] == "$1") { ?>', $out);
}
$out = str_replace('[tag:/lang]', '<?php } ?>', $out);
@ -1439,6 +1437,7 @@ class AVE_Core
// Парсим остальные теги основного шаблона
$out = str_replace($search, $replace, $out);
unset ($search, $replace); //Убираем данные
// Парсим теги для combine.php
@ -1469,8 +1468,8 @@ class AVE_Core
? ''
: $get_url);
if (substr($get_url, 0, strlen(ABS_PATH.'index.php')) != ABS_PATH . 'index.php' && strpos($get_url, '?') !== false)
$get_url = substr($get_url, 0, strpos($get_url,'?'));
if (substr($get_url, 0, strlen(ABS_PATH . 'index.php')) != ABS_PATH . 'index.php' AND strpos($get_url, '?') !== false)
$get_url = substr($get_url, 0, strpos($get_url, '?'));
$get_url = rawurldecode($get_url);
$get_url = mb_substr($get_url, strlen(ABS_PATH));
@ -1544,7 +1543,7 @@ class AVE_Core
}
// проверка на наличие id в запросе
if(! empty($_REQUEST['id']))
if (! empty($_REQUEST['id']))
{
$get_url = $AVE_DB->Query("
SELECT
@ -1561,6 +1560,9 @@ class AVE_Core
// Экранируем поступающий URL
$get_url = $AVE_DB->EscStr($get_url);
if (mb_strlen($get_url) > 255)
$get_url = '';
// Забираем нужные данные
$sql = $AVE_DB->Query("
SELECT
@ -1569,6 +1571,7 @@ class AVE_Core
rubric_template,
rubric_meta_gen,
rub.rubric_header_template,
rub.rubric_footer_template,
rub.rubric_start_code,
template_text,
other.template
@ -1593,7 +1596,7 @@ class AVE_Core
? "document_alias = '" . str_ireplace("'", "\'", $get_url) . "'"
: (! empty($_REQUEST['id'])
? "doc.Id =" . intval($_REQUEST['id'])
:"doc.Id = 1")) . "
: "doc.Id = 1")) . "
LIMIT 1
");
@ -1627,6 +1630,7 @@ class AVE_Core
)
{
header('HTTP/1.1 301 Moved Permanently');
if ($this->curentdoc->Id == 1)
{
header('Location:' . ABS_PATH);
@ -1641,7 +1645,7 @@ class AVE_Core
}
else
{
$redirect_alias = $AVE_DB->Query("
$sql = "
SELECT
a.document_alias
FROM
@ -1651,19 +1655,20 @@ class AVE_Core
h.document_id = a.Id
AND
h.document_alias = '" . $get_url . "'
")->GetCell();
";
if(! empty($redirect_alias))
$redirect_alias = $AVE_DB->Query($sql)->GetCell();
if (! empty($redirect_alias))
{
header('HTTP/1.1 301 Moved Permanently');
header('Location:' . ABS_PATH . $redirect_alias . URL_SUFF);
exit();
}
if(! (! empty($_REQUEST['sysblock']) || ! empty($_REQUEST['module']) || ! empty($_REQUEST['request'])))
if (! (! empty($_REQUEST['sysblock']) || ! empty($_REQUEST['module']) || ! empty($_REQUEST['request'])))
$_GET['id'] = $_REQUEST['id'] = PAGE_NOT_FOUND_ID;
}
}
}
}
?>

95
class/class.database.php

@ -591,7 +591,8 @@ class AVE_DB
foreach ((array)$stack as $call)
{
if (@$call['class'] == __CLASS__) continue;
if (@$call['class'] == __CLASS__)
continue;
$function = $call['function'];
@ -611,7 +612,8 @@ class AVE_DB
}
/************************* Внешние методы класса *************************/
/************************* Внешние методы класса *************************/
/**
* Метод, предназначенный для выполнения запроса к MySQL
@ -657,31 +659,39 @@ class AVE_DB
*/
public function Query($query, $TTL = null, $cache_id = '', $log = true)
{
// Если это документ, то меняем расположение
if (substr($cache_id, 0, 3) == 'doc')
{
$cache_id = (int)str_replace('doc_', '', $cache_id);
$cache_id = 'doc/' . (floor($cache_id / 1000)) . '/' . $cache_id;
}
// Принудительная фильтрация запроса
//$query = filter_var($query, FILTER_SANITIZE_STRING);
$result = array();
$TTL = strtoupper(substr(trim($query), 0, 6)) == 'SELECT' ? $TTL : null;
/*
// Не знаю кто поставил эту заглушку, но я выкл ее
if (defined('ACP')) $TTL = null;
*/
if ($TTL && $TTL != "nocache")
// Если это SELECT - то отслеживаем кеширование
$TTL = strtoupper(substr(trim($query), 0, 6)) == 'SELECT'
? $TTL
: null;
// Если включен DEV MODE, то отключаем кеширование запросов
if (defined('DEV_MODE') AND DEV_MODE)
$TTL = null;
if ($TTL && ($TTL != 'nocache' AND $TTL != null))
{
$cache_file = md5($query);
$cache_dir = BASE_DIR . '/cache/sql/' . (trim($cache_id) > '' ? trim($cache_id) . '/' : substr($cache_file, 0, 2) . '/' . substr($cache_file, 2, 2) . '/' . substr($cache_file, 4, 2) . '/');
$cache_dir = BASE_DIR . '/cache/sql/' . (trim($cache_id) > ''
? trim($cache_id) . '/'
: substr($cache_file, 0, 2) . '/' . substr($cache_file, 2, 2) . '/' . substr($cache_file, 4, 2) . '/');
if(! file_exists($cache_dir))
if (! file_exists($cache_dir))
mkdir($cache_dir, 0777, true);
if(! (file_exists($cache_dir . $cache_file) && ($TTL == -1 ? true : @time() - @filemtime($cache_dir . $cache_file) < $TTL)))
if (! (file_exists($cache_dir . $cache_file) && ($TTL == -1 ? true : time() - filemtime($cache_dir . $cache_file) < $TTL)))
{
$res = $this->Real_Query($query, $log);
@ -702,6 +712,7 @@ class AVE_DB
return $this->Real_Query($query, $log);
}
/**
* This method is needed for prepared statements. They require
* the data type of the field to be bound with "i" s", etc.
@ -737,6 +748,7 @@ class AVE_DB
return '';
}
/**
* Метод, предназначенный для экранирования специальных символов в строках для использования в выражениях SQL
*
@ -753,6 +765,7 @@ class AVE_DB
return $value;
}
/**
* Метод, предназначенный для экранирования специальных символов в строках для использования в выражениях SQL
*
@ -763,13 +776,26 @@ class AVE_DB
{
$value = htmlspecialchars($value);
$value = strtr($value, array(
$search = array(
'<' => '&lt;',
';' => '&#58;',
'|' => '&#124;',
'&' => '&#38;',
'>' => '&gt;',
"'" => '&apos;',
'"' => '&#x22;',
')' => '&#x29;',
'(' => '&#x28;',
'{' => '&#123;',
'}' => '&#125;',
'$' => '&#36;',
'&amp;gt;' => '&gt;',
"'" => "&#39;"
));
'&amp;gt;' => '&gt;'
);
$value = str_replace(array_keys($search), array_values($search), $value);
$value = str_ireplace('%3Cscript', '', $value);
$value = filter_var($value, FILTER_SANITIZE_STRING);
if (! is_array($value))
{
@ -808,18 +834,23 @@ class AVE_DB
*/
public function NumAllRows($query, $TTL = null, $cache_id = '')
{
if ($TTL)
// Если включен DEV MODE, то отключаем кеширование запросов
if (defined('DEV_MODE') AND DEV_MODE)
$TTL = null;
if ($TTL AND ($TTL != "nocache" AND $TTL != null))
{
$cache_file = md5($query).'.count';
// Кол-во
$cache_file = md5($query) . '.count';
$cache_dir = BASE_DIR.'/cache/sql/'.(trim($cache_id) > ''
? trim($cache_id).'/'
: substr($cache_file, 0, 2).'/'.substr($cache_file, 2, 2).'/'.substr($cache_file, 4, 2).'/');
$cache_dir = BASE_DIR . '/cache/sql/' . (trim($cache_id) > ''
? trim($cache_id) . '/'
: substr($cache_file, 0, 2) . '/'. substr($cache_file, 2, 2) . '/' . substr($cache_file, 4, 2) . '/');
if (! file_exists($cache_dir))
mkdir($cache_dir, 0777, true);
if (! (file_exists($cache_dir.$cache_file) && ($TTL==-1 ? true : @time()-@filemtime($cache_dir.$cache_file) < $TTL)))
if (! (file_exists($cache_dir . $cache_file) && ($TTL == -1 ? true : time() - filemtime($cache_dir . $cache_file) < $TTL)))
{
if ($query <> $this->_last_query)
{
@ -1147,5 +1178,27 @@ class AVE_DB
return rrmdir($cache_dir);
}
/**
* Метод, предназначенный для очищения кеша запросов
*
* @param $cache_id
* @return bool
*/
public function clear_request($cache_id)
{
$request = request_get_settings($cache_id);
$cache_from_id = BASE_DIR . '/cache/sql/request/settings/' . (trim($request->Id) > ''
? trim($request->Id) . '/'
: '');
$cache_from_alias = BASE_DIR . '/cache/sql/request/settings/' . (trim($request->request_alias) > ''
? trim($request->request_alias) . '/'
: '');
return (rrmdir($cache_from_id) AND rrmdir($cache_from_alias));
}
} // End AVE_DB class
?>

293
class/class.docs.php

@ -182,13 +182,82 @@ class AVE_Document
return $field;
}
/**
* Внутренние методы
*/
/**
* Управление Документами
*/
function _get_rubric_fields ($id)
{
global $AVE_DB;
$sql = "
SELECT
Id,
rubric_field_type,
rubric_field_numeric
FROM
".PREFIX."_rubric_fields
WHERE
rubric_id = '" . $id . "'
";
$query = $AVE_DB->Query($sql);
$ids = array();
while ($row = $query->FetchAssocArray())
{
$ids[$row['Id']]['rubric_field_type'] = $row['rubric_field_type'];
$ids[$row['Id']]['rubric_field_numeric'] = (int)$row['rubric_field_numeric'];
}
return $ids;
}
function _get_document_text_fields ($id)
{
global $AVE_DB;
$sql = "
SELECT
rubric_field_id
FROM
".PREFIX."_document_fields_text
WHERE
document_id = '" . $id . "'
";
$query = $AVE_DB->Query($sql);
$ids = array();
while ($row = $query->GetCell())
array_push($ids, $row);
return $ids;
}
function _get_rubric ($id)
{
global $AVE_DB;
if (! $id)
return false;
$sql = "
SELECT
rubric_alias,
rubric_alias_history,
rubric_code_start,
rubric_code_end
FROM
" . PREFIX . "_rubrics
WHERE
Id = '" . $id . "'
";
return $AVE_DB->Query($sql)->FetchRow();
}
/**
* Метод, предназначенный для получения списка документов в Панели управления
@ -209,6 +278,9 @@ class AVE_Document
$ex_docstatus = '';
$navi_docstatus = '';
// При смене страницы убираем из сессии параметры выборки документов
unset ($_SESSION['search_query']);
// Если в запросе пришел параметр на поиск документа по названию
if (!empty($_REQUEST['QueryTitel']))
{
@ -428,6 +500,9 @@ class AVE_Document
$db_sort = 'ORDER BY doc.Id DESC';
$navi_sort = '&sort=id_desc';
// Параметры вывборки документов
$search_query = base64_encode($_SERVER['QUERY_STRING']);
// Если в запросе используется параметр сортировки
if (!empty($_REQUEST['sort']))
{
@ -597,6 +672,9 @@ class AVE_Document
// Циклически обрабатываем полученные данные с целью приведения некоторых из них к удобочитаемому виду
while ($row = $sql->FetchRow())
{
// Запомниаем в сесии, параметры выборки для документа
$_SESSION['search_query'][$row->Id] = $search_query;
// Определяем количество комментариев, оставленных для данного документа
$row->ist_remark = $AVE_DB->Query("
SELECT
@ -1085,23 +1163,27 @@ class AVE_Document
/**
* Метод, предназначенный для сохранения документа в БД
*
* @param int $rubric_id идентификатор Рубрики
* @param int $document_id идентификатор Документа
* @param int $rubric_id Идентификатор Рубрики
* @param int $document_id Идентификатор Документа или null, если документ новый
* @param array $data Документ в массиве структура - хитрая
* @param bool $update_non_exists_fields Изменять поля на пустые
* значения у не переданных полей или не надо
* @param bool $rubric_cod Использовать код рубрики или не надо
* возвращает номер документа если все удачно и false если все плохо
* @param bool $update_non_exists_fields Изменять поля на пустые значения у не переданных полей или не надо
* @param bool $rubric_code Использовать код рубрики или не надо
* @param bool $revisions Использовать ревизии документов
* @param bool $logs Писать системные сообщения в журнал
* @param bool $generate Генерировать Meta
*
* return int/bool Возвращает номер документа если все удачно или false если все плохо
*/
function documentSave($rubric_id, $document_id, $data, $update_non_exists_fields = false, $rubric_code = true, $revisions = true, $logs = true, $generate = true)
function documentSave ($rubric_id, $document_id, $data, $update_non_exists_fields = false, $rubric_code = true, $revisions = true, $logs = true, $generate = true)
{
global $AVE_DB, $AVE_Template;
//-- Проверяем входящие данные -- //
$rubric_id = (int)$rubric_id;
$document_id = (int)$document_id;
// Если отсутсвует рубрика, ничего не делаем
if(! $rubric_id)
return false;
// Если отсутсвуют данные, ничего не делаем
if(! isset($data))
@ -1111,30 +1193,21 @@ class AVE_Document
if(! isset($data['feld']))
return false;
$rubric_id = (int)$rubric_id;
$document_id = (int)$document_id;
// Определяем тип опреации
$oper = 'INSERT';
// Забираем параметры рубрики
$_rubric = $AVE_DB->Query("
SELECT
rubric_alias,
rubric_alias_history,
rubric_code_start,
rubric_code_end
FROM
" . PREFIX . "_rubrics
WHERE
Id = '" . $rubric_id . "'
")->FetchRow();
$_rubric = $this->_get_rubric($rubric_id);
// Запускаем триггер перед сохранением
Hooks::trigger('DocumentBeforeSave', array('rubric_id' => $rubric_id, 'document_id' => $document_id, 'data' => $data));
Hooks::trigger('DocumentBeforeSave', array('rubric_id' => $rubric_id, 'document_id' => $document_id, 'data' => $data, 'requests' => $_REQUEST));
// Выполняем стартовый код рубрики
if ($rubric_code)
{
eval ('?>' . $_rubric->rubric_code_start . '<?');
}
eval ('?'.'>' . $_rubric->rubric_code_start . '<'.'?');
// Если нет данных для сохранения, перкращаем сохранение и переходим на страницу документов
if (empty($data))
@ -1154,6 +1227,7 @@ class AVE_Document
|| (defined('UGROUP') && UGROUP == 1) ))
return false;
// Title документа
$data['document_title'] = $_url = empty($data['document_title'])
? $AVE_Template->get_config_vars('DOC_WITHOUT_TITLE')
: $data['document_title'];
@ -1332,7 +1406,7 @@ class AVE_Document
else
{
// Если оператор INSERT
// Если новый алиас документа, сопадает с алиасом в истории, просто стираем историю
// Если новый алиас документа, совпадает с алиасом в истории, просто стираем историю
$AVE_DB->Query("
DELETE FROM
". PREFIX . "_document_alias_history
@ -1378,9 +1452,9 @@ class AVE_Document
$fields = array();
// Получаем структуру документа
if($oper == 'INSERT')
if ($oper == 'INSERT')
{
$sql = $AVE_DB->Query("
$sql = "
SELECT
*
FROM
@ -1389,28 +1463,29 @@ class AVE_Document
rubric_id = '" . $rubric_id . "'
ORDER BY
rubric_field_position ASC
");
";
}
else
{
$sql = $AVE_DB->Query("
$sql = "
SELECT
doc.Id AS df_id,
rub.*,
rubric_field_default,
doc.field_value
df.field_value
FROM
" . PREFIX . "_rubric_fields AS rub
LEFT JOIN
" . PREFIX . "_document_fields AS doc
" . PREFIX . "_document_fields AS df
ON rubric_field_id = rub.Id
WHERE
document_id = '" . $document_id . "'
ORDER BY
rubric_field_position ASC
");
";
}
$query = $AVE_DB->Query($sql);
// Если пришел вызов поля, который связан с модулем
if (isset($data['field_module']))
{
@ -1420,18 +1495,18 @@ class AVE_Document
$mod_function = (string)$mod_val . '_document_save';
$fields = $mod_function($mod_key, $mod_val, $sql, $data['feld'][$mod_key], $mod_key, $rubric_id);
$fields = $mod_function($mod_key, $mod_val, $query, $data['feld'][$mod_key], $mod_key, $rubric_id);
}
}
else
{
while ($row = $sql->FetchRow())
while ($row = $query->FetchRow())
{
array_push($fields, $row);
$fields[$row->Id] = $row;
}
}
unset($sql);
unset($sql, $query);
$where = ($oper == 'UPDATE' ? 'WHERE Id = ' . $document_id : '');
$author = ($oper != 'UPDATE' ? 'document_author_id = ' . $_SESSION['user_id'] . ',' : '');
@ -1518,8 +1593,13 @@ class AVE_Document
if ($logs)
reportLog(($oper=='INSERT'
? $AVE_Template->get_config_vars('DOC_SAVE_ADD')
: $AVE_Template->get_config_vars('DOC_SAVE_EDIT'))
. $AVE_Template->get_config_vars('DOC_SAVE_LOG_DOC') .' (' . $data['document_title'] . ' Id: ' . $document_id . ')');
: $AVE_Template->get_config_vars('DOC_SAVE_EDIT')) . $AVE_Template->get_config_vars('DOC_SAVE_LOG_DOC') .' (' . $data['document_title'] . ' Id: ' . $document_id . ')');
// Получаем ID полей в данной рубрике
$rubric_fields = $this->_get_rubric_fields($rubric_id);
// Получаем ID текстовых полей в данном документе
$document_text_fields = $this->_get_document_text_fields($document_id);
// Циклически обрабатываем поля документа
foreach ($fields as $k => $v)
@ -1535,23 +1615,10 @@ class AVE_Document
? $data['feld'][$fld_id]
: $v->rubric_field_default);
if (! $AVE_DB->Query("
SELECT 1
FROM
" . PREFIX . "_rubric_fields
WHERE
Id = '" . $fld_id . "'
AND
rubric_id = '" . $rubric_id . "'
LIMIT 1
")->NumRows())
{
continue;
}
/* ------------------------------------------------------------------- */
if(! is_array($fld_val))
// Если значение поля не является массивом
if (! is_array ($fld_val))
{
// Если запрещено использование php кода, тогда обнуляем данные поля
if (! check_permission('document_php'))
@ -1565,23 +1632,13 @@ class AVE_Document
$fld_val = pretty_chars($fld_val);
}
$field_rubric = $AVE_DB->Query("
SELECT
*
FROM
" . PREFIX . "_rubric_fields
WHERE
Id = '" . $fld_id . "'
")->FetchRow();
// Отправляем полученные данные в функцию поля, в раздел "Save"
// для преобразования перед сохранением
$func = 'get_field_' . $field_rubric->rubric_field_type;
$func = 'get_field_' . $rubric_fields[$fld_id]['rubric_field_type'];
if (is_callable($func))
{
// Если вызывается функция
if (is_callable ($func))
$fld_val = $func($fld_val, 'save', $fld_id, '', 0, $x, 0, 0, 0);
}
//-- Собираем запрос к БД на добавление нового поля с его содержимым --//
@ -1597,9 +1654,9 @@ class AVE_Document
? ''
: "rubric_field_id = '" . $fld_id . "', document_id = '" . $document_id . "',");
$fval = (is_array($fld_val)
? serialize($fld_val)
: ($fld_val));
$fval = is_array ($fld_val)
? serialize ($fld_val)
: $fld_val;
$substr = 500;
@ -1607,22 +1664,22 @@ class AVE_Document
$substr = 499;
// Сохраняем первые 500 символов
$f_val_500 = mb_substr($fval, 0, $substr);
$f_val_500 = mb_substr ($fval, 0, $substr);
// Проверяем чтобы не было в конце слеша - \
if (mb_substr($f_val_500, 498, 1) == '\\')
$slash = true;
if ($slash)
$f_val_500 = rtrim($f_val_500, '\\');
$f_val_500 = rtrim ($f_val_500, '\\');
$sql = "
$operator
SET
$insert
field_value = '" . $f_val_500 . "',
field_number_value = '" . (($field_rubric->rubric_field_numeric)
? preg_replace('/[^\d.]/', '', $fld_val)
field_number_value = '" . (($rubric_fields[$fld_id]['rubric_field_numeric'])
? preg_replace ('/[^\d.]/', '', $fld_val)
: 0) . "',
document_in_search = '" . $search . "'
$where
@ -1636,27 +1693,21 @@ class AVE_Document
if (mb_strlen($fval) > $substr)
{
// Проверяем есть ли запись о поле в БД
$check_field = $AVE_DB->Query("
SELECT
Id
FROM
" .PREFIX . "_document_fields_text
WHERE
document_id = '" . $document_id . "'
AND
rubric_field_id='" . $fld_id . "'
")->GetCell();
$check_field = false;
if (in_array ($fld_id, $document_text_fields))
$check_field = true;
$operator = ($check_field > 0
$operator = ($check_field
? "UPDATE " . PREFIX . "_document_fields_text"
: "INSERT INTO " . PREFIX . "_document_fields_text"
);
$where = ($check_field > 0
$where = ($check_field
? "WHERE document_id = '" . $document_id . "' AND rubric_field_id = '" . $fld_id . "'"
: '');
$insert = ($check_field > 0
$insert = ($check_field
? ''
: "rubric_field_id = '" . $fld_id . "', document_id = '" . $document_id . "',");
@ -1701,14 +1752,12 @@ class AVE_Document
doc_id = '" . $document_id . "'
");
// Запускаем триггер после сохранения
Hooks::trigger('DocumentAfterSave', array('rubric_id' => $rubric_id, 'document_id' => $document_id, 'data' => $data, 'field_module' => $data['field_module']));
// Выполняем код рубрики, после сохранения
if ($rubric_code)
{
eval ('?>' . $_rubric->rubric_code_end . '<?');
}
// Запускаем триггер после сохранения
Hooks::trigger('DocumentAfterSave', array('rubric_id' => $rubric_id, 'document_id' => $document_id, 'data' => $data, 'field_module' => $data['field_module']));
// Чистим кеш
$AVE_DB->clearcache('rub_' . $rubric_id);
@ -1716,7 +1765,7 @@ class AVE_Document
$AVE_DB->clearcompile('doc_' . $document_id);
$AVE_DB->clearcacherequest('doc_' . $document_id);
unset($_rubric);
unset ($_rubric, $fields);
// Дополнительные обработки
if ($generate)
@ -1819,7 +1868,9 @@ class AVE_Document
$innavi = check_permission_acp('navigation_new') ? '&innavi=1' : '';
// Определяем статус документа
$document_status = !empty($_REQUEST['document_status']) ? (int)$_REQUEST['document_status'] : '0';
$document_status = ! empty($_REQUEST['document_status'])
? (int)$_REQUEST['document_status']
: '0';
// Если статус документа не определен
if (empty($document_status) && $_SESSION['user_group'] != 1)
@ -1832,7 +1883,7 @@ class AVE_Document
// которые пользователь ввел в поля документа
foreach ($_POST['feld'] as $val)
{
if (!empty($val))
if (! empty($val))
{
$newtext .= $val;
$newtext .= "\n---------------------\n";
@ -1850,6 +1901,7 @@ class AVE_Document
$body_to_admin = str_replace('%N%', "\n", $body_to_admin);
$body_to_admin = str_replace('%TITLE%', stripslashes($_POST['document_title']), $body_to_admin);
$body_to_admin = str_replace('%USER%', "'" . $_SESSION['user_name'] . "'", $body_to_admin);
send_mail(
$system_mail,
$body_to_admin . $text,
@ -2201,6 +2253,7 @@ class AVE_Document
groups.Id AS group_id,
rub.*,
rubric_field_default,
rubric_field_alias,
doc.field_value,
field_more.field_value as field_value_more
FROM
@ -2263,6 +2316,7 @@ class AVE_Document
$fields_list[$group_id]['fields'][$field->Id]['Id'] = $field->Id;
$fields_list[$group_id]['fields'][$field->Id]['rubric_id'] = $row->rubric_id;
$fields_list[$group_id]['fields'][$field->Id]['rubric_field_title'] = $field->rubric_field_title;
$fields_list[$group_id]['fields'][$field->Id]['rubric_field_alias'] = $field->rubric_field_alias;
$fields_list[$group_id]['fields'][$field->Id]['rubric_field_description'] = $field->rubric_field_description;
$fields_list[$group_id]['fields'][$field->Id]['result'] = $field->field;
}
@ -3693,10 +3747,47 @@ class AVE_Document
exit;
}
$search_query = $_SESSION['search_query'][$document_id] ? true : false;
$AVE_Template->assign('search_query', $search_query);
$AVE_Template->assign($document);
$AVE_Template->assign('content', $AVE_Template->fetch('documents/form_after.tpl'));
}
/**
* Редирект сохраненного документа на раздел, учитывая фильтр
*
*/
function documentSaveRedirect()
{
$document_id = isset($_REQUEST['document_id'])
? (int)$_REQUEST['document_id']
: 0;
// Если не пришел $documet_id
if (! $document_id)
{
header('Location:index.php?do=docs&cp=' . SESSION);
exit;
}
// Параметры поиска
$search_query = base64_decode($_SESSION['search_query'][$document_id]);
$search_query = $search_query
? $search_query
: 'do=docs&cp=' . SESSION;
// Убираем из сессии данный документ
unset ($_SESSION['search_query'][$document_id]);
// Переходим на страницу
header('Location: index.php?' . $search_query);
exit;
}
/**
* Метод, предназначенный для смены автора документа
*

289
class/class.modules.php

@ -1,6 +1,6 @@
<?php
/**
/**
* AVE.cms
*
* @package AVE.cms
@ -10,19 +10,20 @@
*
*/
class AVE_Module
{
/**
* Внутренние методы
*/
class AVE_Module
{
public $_modules = array();
function __construct()
{
$this->_modules = $this->getModules();
}
/**
* Метод, который обрабатывает все module.php и записывает как свойство класса списки модулей
*/
function getModules()
{
global $AVE_DB;
$modules = array();
// Получаем из БД информацию о всех установленных модулях
@ -34,50 +35,84 @@ class AVE_Module
// Циклически обрабатываем директории
while (false !== ($entry = $d->read()))
{
if (substr($entry, 0, 1) == '.') continue;
if (substr($entry, 0, 1) == '.')
continue;
if (! is_dir(BASE_DIR . '/modules/' . $entry))
continue;
$AVE_Template = new AVE_Template(BASE_DIR . '/admin/templates');
$_no_lang_file = false;
// Языковой файл
$lang_file = BASE_DIR . '/modules/'.$entry.'/lang/' . $_SESSION['user_language'] . '.txt';
// Отдаем смарти переменные
if (file_exists($lang_file))
$AVE_Template->config_load($lang_file, 'name');
else
$_no_lang_file = true;
$module_dir = $d->path . '/' . $entry;
if (!is_dir($module_dir)) continue;
$modul = array();
if (!(is_file($module_dir . '/module.php') && @include($module_dir . '/module.php')))
if (! is_dir($module_dir))
continue;
$module = array();
if (! (is_file($module_dir . '/info.php') && @include($module_dir . '/info.php')))
{
// Если не удалось подключить основной файл модуля module.php - Фиксируем ошибку
$modules['errors'][] = $entry;
continue;
}
$module['ModuleName'] = !$_no_lang_file
? $AVE_Template->get_config_vars('MODULE_NAME')
: 'No name';
$module['ModuleDescription'] = !$_no_lang_file
? $AVE_Template->get_config_vars('MODULE_DESCRIPTION')
: 'No description';
// Дополняем массив с данными модуля
$modul['permission'] = check_permission('mod_'. $modul['ModuleSysName']);
$row = isset($modules_db[$modul['ModuleName']]) ? $modules_db[$modul['ModuleName']] : false;
$module['permission'] = check_permission('mod_'. $module['ModuleSysName']);
// Установлен/Не установлен по системному имени
$row = isset($modules_db[$module['ModuleSysName']])
? $modules_db[$module['ModuleSysName']]
: false;
// установленные модули
if ($row)
{
$modul['status'] = $row->ModuleStatus;
$modul['id'] = $row->Id;
$modul['need_update'] = ($row->ModuleVersion != $modul['ModuleVersion']);
$modul['ModuleVersion'] = $row->ModuleVersion;
$modul['template'] = ($row->ModuleTemplate ? $row->ModuleTemplate : 0);
$module['status'] = $row->ModuleStatus;
$module['id'] = $row->Id;
$module['need_update'] = ($row->ModuleVersion != $module['ModuleVersion']);
$module['template'] = ($row->ModuleTemplate ? $row->ModuleTemplate : 0);
$module['ModuleVersion'] = $row->ModuleVersion;
}
// неустановленные модули
else
{
$modul['status'] = false;
$modul['id'] = $modul['ModuleSysName'];
$modul['template'] = (!empty($modul['ModuleTemplate']) ? $modul['ModuleTemplate'] : '');
$module['status'] = false;
$module['id'] = $module['ModuleSysName'];
$module['template'] = (! empty($module['ModuleTemplate']) ? $module['ModuleTemplate'] : '');
}
// записываем в массив
$modules[$modul['ModuleSysName']] = $modul;
$modules[$module['ModuleSysName']] = $module;
unset ($module);
}
// Закрываем папку
$d->Close();
return $modules;
}
/**
* Внешние методы
*/
/**
* Метод, преданзначеный для выода модулей
*
@ -91,48 +126,101 @@ class AVE_Module
// Получаем список всех шаблонов
$sql = $AVE_DB->Query("
SELECT Id, template_title
FROM " . PREFIX . "_templates
SELECT
Id,
template_title
FROM
" . PREFIX . "_templates
");
while ($row = $sql->FetchRow())
{
$assign['all_templates'][$row->Id] = htmlspecialchars($row->template_title, ENT_QUOTES);
}
// Заголовок: Автор модуля
$author_title = $AVE_Template->get_config_vars('MODULES_AUTHOR');
$modules = $this->getModules();
// Получаем список всех модулей
$modules = $this->_modules;
foreach ($modules as $module)
{
$module['info'] = $module['ModuleDescription'] . (!$module['ModuleAutor'] ? '<br /><br />' : "<br /><br /><strong>$author_title</strong><br />" . $module['ModuleAutor'] . "<br />") . '<br /><em>' . $module['ModuleCopyright'] . '</em>';
$module['info'] = $module['ModuleDescription'] . (! $module['ModuleAutor']
? '<br /><br />'
: "<br /><br /><strong>$author_title</strong><br />" . $module['ModuleAutor'] . "<br />") . '<br /><em>' . $module['ModuleCopyright'] . '</em>';
// установленные модули
if ($module['status'] !== false)
{
$installed_modules[$module['ModuleName']] = $module;
}
$installed_modules[$module['ModuleSysName']] = $module;
// неустановленные модули
else
{
$not_installed_modules[$module['ModuleName']] = $module;
$not_installed_modules[$module['ModuleSysName']] = $module;
}
}
!empty($installed_modules) ? ksort($installed_modules) : $installed_modules = '';
!empty($not_installed_modules) ? ksort($not_installed_modules) : $not_installed_modules = '';
! empty($installed_modules)
? ksort($installed_modules)
: $installed_modules = '';
! empty($not_installed_modules)
? ksort($not_installed_modules)
: $not_installed_modules = '';
$assign['installed_modules'] = $installed_modules;
$assign['not_installed_modules'] = $not_installed_modules;
// Массив с ошибками
if(!empty($modules['errors'])){
if (! empty($modules['errors']))
{
foreach ($modules['errors'] as $error)
{
$assign['errors'][] = $AVE_Template->get_config_vars('MODULES_ERROR') . $error;
}
}
// Передаем данные в шаблон и отображаем страницу со списком модулей
$AVE_Template->assign($assign);
$AVE_Template->assign('content', $AVE_Template->fetch('modules/modules.tpl'));
}
/**
* Метод получения списка модулей
*
* @param int $status статус возвращаемых модулей
* 1 - активные модули
* 0 - неактивные модули
* если не указано возвращает модули без учета статуса
* @return array
*/
function moduleListGet($status = null)
{
global $AVE_DB;
$modules = array();
// Условие, определяющее статус документа для запроса к БД
$where_status = ($status !== null)
? "WHERE ModuleStatus = '" . (int)$status . "'"
: '';
// Выполняем запрос к БД и получаем список документов,
// согласно статусу, либо все модули, если статус не указан
$sql = $AVE_DB->Query("
SELECT
*
FROM
" . PREFIX . "_module
" . $where_status . "
ORDER BY
ModuleName ASC
");
while ($row = $sql->FetchRow())
$modules[$row->ModuleSysName] = $row;
// Возвращаем список модулей
return $modules;
}
/**
* Метод, предназначенный для обновления в БД информации о шаблонах модулей
*
@ -146,9 +234,12 @@ class AVE_Module
{
// Обновление информации о шаблоне модуля
$AVE_DB->Query("
UPDATE " . PREFIX . "_module
SET ModuleTemplate = '" . (int)$template_id . "'
WHERE Id = '" . (int)$id . "'
UPDATE
" . PREFIX . "_module
SET
ModuleTemplate = '" . (int)$template_id . "'
WHERE
Id = '" . (int)$id . "'
");
}
@ -166,25 +257,33 @@ class AVE_Module
global $AVE_DB, $AVE_Template;
// Получаем данные модуля
$modules = $this->getModules();
$modules = $this->_modules;
$modul = $modules[MODULE_PATH];
// Удаляем информацию о модуле в таблице module
$AVE_DB->Query("
DELETE
FROM " . PREFIX . "_module
WHERE ModuleSysName = '" . MODULE_PATH . "'
FROM
" . PREFIX . "_module
WHERE
ModuleSysName = '" . MODULE_PATH . "'
");
// Определяем, имеет ли модуль возможность настройки в Панели управления
$modul['ModuleAdminEdit'] = (!empty($modul['ModuleAdminEdit'])) ? $modul['ModuleAdminEdit'] : 0;
$modul['ModuleAdminEdit'] = (!empty($modul['ModuleAdminEdit']))
? $modul['ModuleAdminEdit']
: 0;
// Определяем, имеет ли модуль возможность смены шаблона
$modul['ModuleTemplate'] = ($modul['ModuleTemplate']) ? $modul['ModuleTemplate'] : 0;
$modul['ModuleTemplate'] = ($modul['ModuleTemplate'])
? $modul['ModuleTemplate']
: 0;
// Добавляем информацию о модуле в таблицу module
$AVE_DB->Query("
INSERT " . PREFIX . "_module
INSERT INTO
" . PREFIX . "_module
SET
ModuleName = '" . $modul['ModuleName'] . "',
ModuleStatus = '1',
@ -202,6 +301,7 @@ class AVE_Module
$module_sql_deinstall = array();
$module_sql_install = array();
$sql_file = BASE_DIR . '/modules/' . MODULE_PATH . '/sql.php';
if (is_file($sql_file) && @include($sql_file))
{
// Выполняем запросы удаления таблиц модуля
@ -219,7 +319,9 @@ class AVE_Module
}
}
// Сохраняем системное сообщение в журнал
($_REQUEST['action'] == "reinstall") ? reportLog($AVE_Template->get_config_vars('MODULES_ACTION_REINSTALL') . ' (' . $modul['ModuleName'] . ')') : reportLog($AVE_Template->get_config_vars('MODULES_ACTION_INSTALL') . ' (' . $modul['ModuleName'] . ')');
($_REQUEST['action'] == "reinstall")
? reportLog($AVE_Template->get_config_vars('MODULES_ACTION_REINSTALL') . ' (' . $modul['ModuleName'] . ')')
: reportLog($AVE_Template->get_config_vars('MODULES_ACTION_INSTALL') . ' (' . $modul['ModuleName'] . ')');
// Выполняем обновление страницы со списком модулей
header('Location:index.php?do=modules&cp=' . SESSION);
@ -236,8 +338,11 @@ class AVE_Module
// Подключаем файл с запросами к БД для данного модуля
$module_sql_update = array();
$sql_file = BASE_DIR . '/modules/' . MODULE_PATH . '/sql.php';
$mod_file = BASE_DIR . '/modules/' . MODULE_PATH . '/module.php';
if (file_exists($mod_file) && file_exists($sql_file))
{
include($mod_file);
@ -253,8 +358,10 @@ class AVE_Module
elseif (file_exists($mod_file) && file_exists($sql_file) === false)
{
include($mod_file);
$AVE_DB->Query("
UPDATE " . PREFIX . "_module
UPDATE
" . PREFIX . "_module
SET
ModuleName = '" . $modul['ModuleName'] . "',
ModuleStatus = '1',
@ -271,7 +378,7 @@ class AVE_Module
");
}
// Сохраняем системное сообщение в журнал
reportLog($AVE_Template->get_config_vars('MODULES_ACTION_UPDATE') . ' (' . MODULE_PATH . ')');
reportLog ($AVE_Template->get_config_vars('MODULES_ACTION_UPDATE') . ' (' . MODULE_PATH . ')');
// Выполянем обновление страницы со списком модулей
header('Location:index.php?do=modules&cp=' . SESSION);
@ -288,7 +395,9 @@ class AVE_Module
// Подключаем файл с запросами к БД для данного модуля
$module_sql_deinstall = array();
$sql_file = BASE_DIR . '/modules/' . MODULE_PATH . '/sql.php';
if (is_file($sql_file) && @include($sql_file))
{
// Выполняем запросы удаления таблиц модуля
@ -302,12 +411,14 @@ class AVE_Module
// Удаляем информацию о модуле в таблице module
$AVE_DB->Query("
DELETE
FROM " . PREFIX . "_module
WHERE ModuleSysName = '" . MODULE_PATH . "'
FROM
" . PREFIX . "_module
WHERE
ModuleSysName = '" . MODULE_PATH . "'
");
// Сохраняем системное сообщение в журнал
reportLog($AVE_Template->get_config_vars('MODULES_ACTION_DELETE') .' (' . MODULE_PATH . ')');
reportLog ($AVE_Template->get_config_vars('MODULES_ACTION_DELETE') .' (' . MODULE_PATH . ')');
// Выполянем обновление страницы со списком модулей
header('Location:index.php?do=modules&cp=' . SESSION);
@ -323,15 +434,23 @@ class AVE_Module
global $AVE_DB, $AVE_Template;
$status = $AVE_DB->Query("
SELECT ModuleName, ModuleStatus FROM " . PREFIX . "_module
WHERE ModuleSysName = '" . MODULE_PATH . "'
SELECT
ModuleName,
ModuleStatus
FROM
" . PREFIX . "_module
WHERE
ModuleSysName = '" . MODULE_PATH . "'
")->FetchRow();
$ModuleStatus = ($status->ModuleStatus == "0" || $status->ModuleStatus == NULL) ? "1" : "0";
$ModuleStatus = ($status->ModuleStatus == "0" || $status->ModuleStatus == NULL)
? "1"
: "0";
// Выполняем запрос к БД на смену статуса модуля
$AVE_DB->Query("
UPDATE " . PREFIX . "_module
UPDATE
" . PREFIX . "_module
SET
ModuleStatus = '".$ModuleStatus."'
WHERE
@ -339,45 +458,15 @@ class AVE_Module
");
// Сохраняем системное сообщение в журнал
reportLog((($ModuleStatus == "0") ? $AVE_Template->get_config_vars('MODULES_ACTION_OFFLINE') : $AVE_Template->get_config_vars('MODULES_ACTION_ONLINE')) . ' (' . $status->ModuleName . ')');
reportLog ((($ModuleStatus == "0")
? $AVE_Template->get_config_vars('MODULES_ACTION_OFFLINE')
: $AVE_Template->get_config_vars('MODULES_ACTION_ONLINE')) . ' (' . $status->ModuleName . ')');
// Выполняем обновление страницы со списком модулей
header('Location:index.php?do=modules&cp=' . SESSION);
exit;
}
/**
* Метод получения списка модулей
*
* @param int $status статус возвращаемых модулей
* 1 - активные модули
* 0 - неактивные модули
* если не указано возвращает модули без учета статуса
* @return array
*/
function moduleListGet($status = null)
{
global $AVE_DB;
$modules = array();
// Условие, определяющее статус документа для запроса к БД
$where_status = ($status !== null) ? "WHERE ModuleStatus = '" . (int)$status . "'" : '';
// Выполняем запрос к БД и получаем список документов,
// согласно статусу, либо все модули, если статус не указан
$sql = $AVE_DB->Query("
SELECT * FROM " . PREFIX . "_module
" . $where_status . "
ORDER BY ModuleName ASC
");
while ($row = $sql->FetchRow())
{
$modules[$row->ModuleName] = $row;
}
// Возвращаем список модулей
return $modules;
}
function moduleRemove($dir)
{
@ -386,21 +475,23 @@ class AVE_Module
$directory = BASE_DIR . '/modules/' . $dir;
$files = glob($directory . '*', GLOB_MARK);
foreach($files as $file){
foreach ($files as $file)
{
if(substr($file, -1) == '/')
moduleRemove($file);
else
unlink($file);
}
rrmdir($directory);
rrmdir ($directory);
// Сохраняем системное сообщение в журнал
reportLog($AVE_Template->get_config_vars('MODULES_ACTION_REMOVE') . ' (' . $dir . ')');
reportLog ($AVE_Template->get_config_vars('MODULES_ACTION_REMOVE') . ' (' . $dir . ')');
// Выполянем обновление страницы со списком модулей
header('Location:index.php?do=modules&cp=' . SESSION);
exit;
}
}
}
?>

50
class/class.navigation.php

@ -193,7 +193,8 @@
// Выполняем запрос к БД и получаем всю информацию о данном меню
$row = $AVE_DB->Query("
SELECT *
SELECT
*
FROM
" . PREFIX . "_navigation
WHERE
@ -241,7 +242,8 @@
");
//-- Стираем кеш навигации
$this->clearCahe($navigation_id, $_REQUEST['alias']);
$this->clearCache($navigation_id, $_REQUEST['alias']);
$this->clearCacheId($navigation_id, $_REQUEST['alias']);
if ($sql === false)
{
@ -362,7 +364,7 @@
")->FetchRow();
//-- Стираем кеш навигации
$this->clearCahe($navigation_id, $sql->alias);
$this->clearCache($navigation_id, $sql->alias);
//-- Выполняем запрос к БД на удаление общей информации и шаблона оформления меню
$AVE_DB->Query("DELETE FROM " . PREFIX . "_navigation WHERE navigation_id = '" . $navigation_id . "'");
@ -630,7 +632,7 @@
")->GetCell();
//-- Стираем кеш навигации
$this->clearCahe($_REQUEST['navigation_id'], $alias);
$this->clearCache($_REQUEST['navigation_id'], $alias);
$AVE_Template->assign('select_tpl', 'navigation/select.tpl');
$AVE_Template->assign('items', $items);
@ -714,7 +716,7 @@
")->GetCell();
//-- Стираем кеш навигации
$this->clearCahe($_REQUEST['navigation_id'], $alias);
$this->clearCache($_REQUEST['navigation_id'], $alias);
}
else
{
@ -756,7 +758,7 @@
")->GetCell();
//-- Стираем кеш навигации
$this->clearCahe($_REQUEST['navigation_id'], $alias);
$this->clearCache($_REQUEST['navigation_id'], $alias);
}
$message = 'Пункт меню успешно сохранен';
@ -939,7 +941,7 @@
")->FetchRow();
//-- Стираем кеш навигации
$this->clearCahe($nav->navigation_id, $nav->alias);
$this->clearCache($nav->navigation_id, $nav->alias);
// Выполняем обновление страницы
header('Location:' . get_referer_admin_link());
@ -995,7 +997,7 @@
")->FetchRow();
//-- Стираем кеш навигации
$this->clearCahe($nav->navigation_id, $nav->alias);
$this->clearCache($nav->navigation_id, $nav->alias);
// Сохраняем системное сообщение в журнал
reportLog($AVE_Template->get_config_vars('NAVI_REPORT_ACT') . " (id: $row->navigation_item_id)");
@ -1054,7 +1056,7 @@
")->FetchRow();
//-- Стираем кеш навигации
$this->clearCahe($nav->navigation_id, $nav->alias);
$this->clearCache($nav->navigation_id, $nav->alias);
// Сохраняем системное сообщение в журнал
reportLog($AVE_Template->get_config_vars('NAVI_REPORT_DEACT') . " (id: $row->navigation_item_id)");
@ -1103,7 +1105,7 @@
")->FetchRow();
//-- Стираем кеш навигации
$this->clearCahe($nav->navigation_id, $nav->alias);
$this->clearCache($nav->navigation_id, $nav->alias);
$AVE_Template->assign('item', $item);
$AVE_Template->assign('content', $AVE_Template->fetch('navigation/item.tpl'));
@ -1152,7 +1154,7 @@
")->FetchRow();
//-- Стираем кеш навигации
$this->clearCahe($nav->navigation_id, $nav->alias);
$this->clearCache($nav->navigation_id, $nav->alias);
if (isAjax())
{
@ -1248,7 +1250,7 @@
")->FetchRow();
//-- Стираем кеш навигации
$this->clearCahe($nav->navigation_id, $nav->alias);
$this->clearCache($nav->navigation_id, $nav->alias);
echo json_encode(
array(
@ -1260,7 +1262,7 @@
}
function clearCahe($id, $alias = '')
function clearCache($id, $alias = '')
{
if (file_exists(BASE_DIR . '/cache/sql/nav/template-' . $id . '.cache'))
unlink(BASE_DIR . '/cache/sql/nav/template-' . $id . '.cache');
@ -1275,5 +1277,27 @@
unlink(BASE_DIR . '/cache/sql/nav/items-' . $alias . '.cache');
}
function clearCacheId($id, $alias = '')
{
$dir_id = BASE_DIR . '/cache/sql/nav_' . $id;
$dir_alias = BASE_DIR . '/cache/sql/nav_' . $alias;
if (file_exists($dir_id))
{
foreach (glob($dir_id . '/*') as $file)
{
unlink($file);
}
}
if (file_exists($dir_alias))
{
foreach (glob($dir_alias . '/*') as $file)
{
unlink($file);
}
}
}
}
?>

14
class/class.request.php

@ -476,9 +476,11 @@ class AVE_Request
$sql = $AVE_DB->Query("SELECT Id FROM " . PREFIX . "_documents WHERE rubric_id = ".$_REQUEST['rubric_id']);
$AVE_DB->clear_request($request_id);
while ($row = $sql->FetchRow())
{
$AVE_DB->clearcacherequest('doc_'.$row->Id);
$AVE_DB->clearcacherequest('doc_' . $row->Id);
}
// Сохраняем системное сообщение в журнал
@ -813,11 +815,15 @@ class AVE_Request
// require(BASE_DIR . '/functions/func.parserequest.php');
request_get_condition_sql_string($request_id, true);
if (! isAjax()){
if (! isAjax())
{
header('Location:index.php?do=request&action=conditions&rubric_id=' . $_REQUEST['rubric_id'] . '&Id=' . $request_id . '&cp=' . SESSION);
exit;
}else{
if (!$message){
}
else
{
if (! $message)
{
$message = $AVE_Template->get_config_vars('REQUEST_COND_NEW_SUC');
$header = $AVE_Template->get_config_vars('REQUEST_SUCCESS');
$theme = 'accept';

465
class/class.rubs.php

@ -1,6 +1,6 @@
<?php
/**
/**
* AVE.cms
*
* @package AVE.cms
@ -10,13 +10,13 @@
*
*/
/**
/**
* Класс работы с рубриками
*/
class AVE_Rubric
{
class AVE_Rubric
{
/**
/**
* СВОЙСТВА
*/
@ -27,7 +27,7 @@ class AVE_Rubric
*/
public $_limit = 30;
/**
/**
* ВНУТРЕННИЕ МЕТОДЫ
*/
@ -58,7 +58,7 @@ class AVE_Rubric
}
/**
/**
* ВНЕШНИЕ МЕТОДЫ
*/
@ -380,6 +380,7 @@ class AVE_Rubric
rubric_created = '" . time() . "',
rubric_teaser_template = '" . addslashes($row->rubric_teaser_template) . "',
rubric_header_template = '" . addslashes($row->rubric_header_template) . "',
rubric_footer_template = '" . addslashes($row->rubric_footer_template) . "',
rubric_admin_teaser_template = '" . addslashes($row->rubric_admin_teaser_template) . "'
");
$iid = $AVE_DB->InsertId();
@ -617,6 +618,70 @@ class AVE_Rubric
}
}
/**
* Вывод списка полей рубрики
*
* @param int $rubric_id идентификатор рубрики
*/
function rubricRulesShow($rubric_id = 0)
{
global $AVE_DB, $AVE_Template;
if (check_permission_acp('rubric_edit'))
{
// Права
$groups = array();
$sql = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_user_groups");
while ($row = $sql->FetchRow())
{
$row->doall = ($row->user_group == 1) ? ' disabled="disabled" checked="checked"' : '';
$row->doall_h = ($row->user_group == 1) ? 1 : '';
$rubric_permission = $AVE_DB->Query("
SELECT rubric_permission
FROM " . PREFIX . "_rubric_permissions
WHERE user_group_id = '" . $row->user_group . "'
AND rubric_id = '" . $rubric_id . "'
")->GetCell();
$row->permissions = @explode('|', $rubric_permission);
array_push($groups,$row);
}
$sql = $AVE_DB->Query("
SELECT rubric_title, rubric_linked_rubric, rubric_description
FROM " . PREFIX . "_rubrics
WHERE id = '" . $rubric_id . "'
LIMIT 1
");
$rubric = $sql->FetchRow();
$AVE_Template->assign('rubric', $rubric);
$AVE_Template->assign('groups', $groups);
if (isAjax())
{
}
else
{
$AVE_Template->assign('content', $AVE_Template->fetch('rubs/rules.tpl'));
}
}
else
{
header('Location:index.php?do=rubs&cp=' . SESSION);
exit;
}
}
/**
* Вывод списка рубрик
*
@ -760,8 +825,12 @@ class AVE_Rubric
case '':
$code = $AVE_DB->Query("
SELECT rubric_code_start, rubric_code_end, rubric_start_code
FROM " . PREFIX . "_rubrics
SELECT
rubric_code_start,
rubric_code_end,
rubric_start_code
FROM
" . PREFIX . "_rubrics
WHERE
Id = '" . $rubric_id . "'
")->FetchRow();
@ -774,7 +843,8 @@ class AVE_Rubric
case 'save':
$sql = $AVE_DB->Query("
UPDATE " . PREFIX . "_rubrics
UPDATE
" . PREFIX . "_rubrics
SET
rubric_start_code = '" . $_POST['rubric_start_code'] . "',
rubric_code_start = '" . $_POST['rubric_code_start'] . "',
@ -783,20 +853,43 @@ class AVE_Rubric
Id = '" . $rubric_id . "'
");
if ($sql->_result === false) {
$AVE_DB->clearcache('rub_' . $rubric_id);
$sql = $AVE_DB->Query("
SELECT
Id
FROM
" . PREFIX . "_documents
WHERE
rubric_id = " . $rubric_id . "
");
while ($row = $sql->GetCell())
{
$AVE_DB->clearcache('doc_' . $row);
$AVE_DB->clearcompile('doc_' . $row);
}
if ($sql->_result === false)
{
$message = $AVE_Template->get_config_vars('RUBRIK_CODE_SAVED_ERR');
$header = $AVE_Template->get_config_vars('RUBRIK_CODE_ERROR');
$theme = 'error';
}else{
}
else
{
$message = $AVE_Template->get_config_vars('RUBRIK_CODE_SAVED');
$header = $AVE_Template->get_config_vars('RUBRIK_CODE_SUCCESS');
$theme = 'accept';
reportLog($AVE_Template->get_config_vars('RUBRIK_CODE_UPDATE') . " (" . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title, ENT_QUOTES)) . ") (id: $rubric_id)");
}
if (isAjax()) {
if (isAjax())
{
echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
} else {
}
else
{
header('Location:index.php?do=rubs&action=code&Id=' . $rubric_id . '&cp=' . SESSION);
}
exit;
@ -813,28 +906,36 @@ class AVE_Rubric
global $AVE_DB, $AVE_Template;
$sql = $AVE_DB->Query("
UPDATE " . PREFIX . "_rubrics
UPDATE
" . PREFIX . "_rubrics
SET
rubric_start_code = '" . $_POST['rubric_start_code'] . "',
rubric_code_start = '" . $_POST['rubric_code_start'] . "',
rubric_code_end = '" . $_POST['rubric_code_end'] . "'
WHERE
Id = '" . $rubric_id . "'
");
if ($sql->_result === false) {
if ($sql->_result === false)
{
$message = $AVE_Template->get_config_vars('RUBRIK_CODE_SAVED_ERR');
$header = $AVE_Template->get_config_vars('RUBRIK_CODE_ERROR');
$theme = 'error';
}else{
}
else
{
$message = $AVE_Template->get_config_vars('RUBRIK_CODE_SAVED');
$header = $AVE_Template->get_config_vars('RUBRIK_CODE_SUCCESS');
$theme = 'accept';
reportLog($AVE_Template->get_config_vars('RUBRIK_CODE_UPDATE') . " (" . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title, ENT_QUOTES)) . ") (id: $rubric_id)");
}
if (isset($_REQUEST['ajax']) && $_REQUEST['ajax'] = '1') {
if (isAjax())
{
echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
} else {
}
else
{
header('Location:index.php?do=rubs&action=edit&Id=' . $rubric_id . '&cp=' . SESSION);
}
exit;
@ -1042,6 +1143,7 @@ class AVE_Rubric
rubric_title,
rubric_template,
rubric_header_template,
rubric_footer_template,
rubric_teaser_template,
rubric_admin_teaser_template,
rubric_description
@ -1116,34 +1218,42 @@ class AVE_Rubric
*
* @param string $data
*/
function rubricTemplateSave($Rtemplate, $Htemplate = '', $Ttemplate = '', $Atemplate = '')
function rubricTemplateSave($Rtemplate, $Htemplate = '', $Ttemplate = '', $Atemplate = '', $Ftemplate = '')
{
global $AVE_DB, $AVE_Template;
$rubric_id = (int)$_REQUEST['Id'];
$sql = $AVE_DB->Query("
UPDATE " . PREFIX . "_rubrics
UPDATE
" . PREFIX . "_rubrics
SET
rubric_template = '" . ($Rtemplate) . "',
rubric_header_template = '" . $Htemplate . "',
rubric_footer_template = '" . $Ftemplate . "',
rubric_teaser_template = '" . $Ttemplate . "',
rubric_admin_teaser_template = '" . $Atemplate . "'
WHERE Id = '" . $rubric_id . "'
WHERE
Id = '" . $rubric_id . "'
");
// Очищаем кэш шаблона документов рубрики
$AVE_DB->Query("
DELETE
FROM " . PREFIX . "_rubric_template_cache
WHERE rub_id = '" . $rubric_id . "'
FROM
" . PREFIX . "_rubric_template_cache
WHERE
rub_id = '" . $rubric_id . "'
");
if ($sql === false) {
if ($sql === false)
{
$message = $AVE_Template->get_config_vars('RUBRIC_SAVED_TPL_ERR');
$header = $AVE_Template->get_config_vars('RUBRIK_ERROR');
$theme = 'error';
} else {
}
else
{
$message = $AVE_Template->get_config_vars('RUBRIC_SAVED_TPL');
$header = $AVE_Template->get_config_vars('RUBRIC_SUCCESS');
$theme = 'accept';
@ -1158,10 +1268,13 @@ class AVE_Rubric
$AVE_DB->clearcompile('doc_'.$row->Id);
}
if (isAjax()) {
if (isAjax())
{
echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
exit;
} else {
}
else
{
$AVE_Template->assign('message', $message);
header('Location:index.php?do=rubs&cp=' . SESSION);
exit;
@ -1975,6 +2088,7 @@ class AVE_Rubric
}
}
function tmplsDelete()
{
global $AVE_DB, $AVE_Template;
@ -2022,5 +2136,298 @@ class AVE_Rubric
header('Location:index.php?do=rubs&action=tmpls&Id='.$rubric_id.'&cp=' . SESSION);
exit;
}
}
function _get_fields_type($type = null)
{
static $fields;
if (is_array($fields))
return $fields;
$arr = get_defined_functions();
$fields = array();
$field = array();
foreach ($arr['user'] as $v)
{
if (trim(substr($v, 0, strlen('get_field_'))) == 'get_field_')
{
$d = '';
$name = @$v('', 'name', '', '', 0, $d);
$id = substr($v, strlen('get_field_'));
if ($name != false && is_string($name))
$fields[] = array('id' => $id,'name' => (isset($fields_vars[$name])
? $fields_vars[$name]
: $name));
if (! empty($type) && $id == $type)
$field = array('id' => $id,'name' => (isset($fields_vars[$name])
? $fields_vars[$name]
: $name));
}
}
$fields = msort($fields, array('name'));
return (! empty($type)) ? $field : $fields;
}
function ShowFields()
{
global $AVE_DB, $AVE_Template;
$rubric_id = (int)$_REQUEST['Id'];
$sql = $AVE_DB->Query("
SELECT
rubric_field_type
FROM
" . PREFIX . "_rubric_fields
WHERE
rubric_id = '".$rubric_id."'
GROUP BY
rubric_field_type
");
$enable = array();
while ($row = $sql->FetchArray())
$enable[] = $row['rubric_field_type'];
$fields = $this->_get_fields_type();
foreach ($fields as $field)
{
$exists[$field['id']]['adm'] = file_exists(BASE_DIR . '/fields/' . $field['id'] . '/tpl/field.tpl');
$exists[$field['id']]['doc'] = file_exists(BASE_DIR . '/fields/' . $field['id'] . '/tpl/field-doc.tpl');
$exists[$field['id']]['req'] = file_exists(BASE_DIR . '/fields/' . $field['id'] . '/tpl/field-req.tpl');
}
$sql = $AVE_DB->Query("
SELECT
rubric_title,
rubric_linked_rubric,
rubric_description
FROM
" . PREFIX . "_rubrics
WHERE
id = '" . $rubric_id . "'
LIMIT 1
");
$rubric = $sql->FetchRow();
$AVE_Template->assign('rubric', $rubric);
$AVE_Template->assign("enable", $enable);
$AVE_Template->assign("exists", $exists);
$AVE_Template->assign("fields", $fields);
$AVE_Template->assign("content", $AVE_Template->fetch('rubs/_fields_list.tpl'));
}
function ShowFieldsByType($fld)
{
global $AVE_DB, $AVE_Template;
$rubric_id = (int)$_REQUEST['rubric_id'];
$sql = $AVE_DB->Query("
SELECT
a.Id,
a.rubric_id,
a.rubric_field_type,
a.rubric_field_title,
b.rubric_title
FROM
" . PREFIX . "_rubric_fields AS a
LEFT JOIN
" . PREFIX . "_rubrics AS b
ON a.rubric_id = b.Id
WHERE
a.rubric_field_type = '" . $fld ."'
AND
a.rubric_id = '".$rubric_id."'
ORDER BY
a.rubric_id
");
$rubrics = array();
while ($row = $sql->FetchRow())
{
$rubrics[$row->rubric_id]['rubric_id'] = $row->rubric_id;
$rubrics[$row->rubric_id]['rubric_title'] = $row->rubric_title;
$rubrics[$row->rubric_id]['rubric_field_type'] = $row->rubric_field_type;
$rubrics[$row->rubric_id]['fields'][$row->Id]['id'] = $row->Id;
$rubrics[$row->rubric_id]['fields'][$row->Id]['title'] = $row->rubric_field_title;
$rubrics[$row->rubric_id]['fields'][$row->Id]['adm_tpl'] = file_exists(BASE_DIR . '/fields/' . $fld . '/tpl/field-' . $row->Id . '.tpl');
$rubrics[$row->rubric_id]['fields'][$row->Id]['doc_tpl'] = file_exists(BASE_DIR . '/fields/' . $fld . '/tpl/field-doc-' . $row->Id . '.tpl');
$rubrics[$row->rubric_id]['fields'][$row->Id]['req_tpl'] = file_exists(BASE_DIR . '/fields/' . $fld . '/tpl/field-req-' . $row->Id . '.tpl');
$rubrics[$row->rubric_id]['fields'][$row->Id]['adm_main'] = file_exists(BASE_DIR . '/fields/' . $fld . '/tpl/field.tpl');
$rubrics[$row->rubric_id]['fields'][$row->Id]['doc_main'] = file_exists(BASE_DIR . '/fields/' . $fld . '/tpl/field-doc.tpl');
$rubrics[$row->rubric_id]['fields'][$row->Id]['req_main'] = file_exists(BASE_DIR . '/fields/' . $fld . '/tpl/field-req.tpl');
}
$sql = $AVE_DB->Query("
SELECT
rubric_title,
rubric_linked_rubric,
rubric_description
FROM
" . PREFIX . "_rubrics
WHERE
id = '" . $rubric_id . "'
LIMIT 1
");
$rubric = $sql->FetchRow();
$AVE_Template->assign('rubric', $rubric);
$AVE_Template->assign('main', $this->_get_fields_type($fld));
$AVE_Template->assign("rubrics", $rubrics);
$AVE_Template->assign("content", $AVE_Template->fetch('rubs/_field_list.tpl'));
}
function EditFieldTpl($id = '', $fld, $type)
{
global $AVE_DB, $AVE_Template, $_fm_dir;
switch ($type)
{
case 'adm':
$file = BASE_DIR . '/fields/' . $fld . '/tpl/field-' . $id . '.tpl';
$source = BASE_DIR . '/fields/' . $fld . '/tpl/field.tpl';
break;
case 'doc':
$file = BASE_DIR . '/fields/' . $fld . '/tpl/field-doc-' . $id . '.tpl';
$source = BASE_DIR . '/fields/' . $fld . '/tpl/field-doc.tpl';
break;
case 'req':
$file = BASE_DIR . '/fields/' . $fld . '/tpl/field-req-' . $id . '.tpl';
$source = BASE_DIR . '/fields/' . $fld . '/tpl/field-req.tpl';
break;
}
if (empty($id))
$file = $source;
if (file_exists($file))
$code_text = file_get_contents($file);
else
$code_text = file_get_contents($source);
$sql = $AVE_DB->Query("
SELECT
a.rubric_field_title,
b.rubric_title
FROM
" . PREFIX . "_rubric_fields AS a
LEFT JOIN
" . PREFIX . "_rubrics AS b
ON a.rubric_id = b.Id
WHERE
a.rubric_field_type = '" . $fld ."'
AND
a.Id = '" . $id ."'
")->FetchAssocArray();
$params =
array(
'id' => $id,
'fld' => $fld,
'type' => $type,
'func' => (file_exists($file) ? 'edit' : 'new'),
'field' => $sql,
);
$AVE_Template->assign('main', $this->_get_fields_type($fld));
$AVE_Template->assign('params', $params);
$AVE_Template->assign('code_text', $code_text);
$AVE_Template->assign("content", $AVE_Template->fetch('rubs/_field_code.tpl'));
}
/**
* Сохранение шаблона
*
*/
function SaveFieldTpl($id = '', $fld, $type, $func)
{
switch ($type)
{
case 'adm':
$file = (! empty($id))
? BASE_DIR . '/fields/' . $fld . '/tpl/field-' . $id . '.tpl'
: BASE_DIR . '/fields/' . $fld . '/tpl/field.tpl';
break;
case 'doc':
$file = (! empty($id))
? BASE_DIR . '/fields/' . $fld . '/tpl/field-doc-' . $id . '.tpl'
: BASE_DIR . '/fields/' . $fld . '/tpl/field-doc.tpl';
break;
case 'req':
$file = (! empty($id))
? BASE_DIR . '/fields/' . $fld . '/tpl/field-req-' . $id . '.tpl'
: BASE_DIR . '/fields/' . $fld . '/tpl/field-req.tpl';
break;
}
$data = stripcslashes($_REQUEST['code_text']);
@file_put_contents($file, $data);
chmod($file, 0644);
$message = 'Шаблон успешнно сохранен';
$header = 'Выполнено';
$theme = 'accept';
echo json_encode(
array(
'message' => $message,
'header' => $header,
'theme' => $theme)
);
exit;
}
/**
* Удаление шаблона поля
*
*/
function DeleteFieldTpl($id, $fld, $type, $func)
{
switch ($type)
{
case 'adm':
$file = BASE_DIR . '/fields/' . $fld . '/tpl/field-' . $id . '.tpl';
break;
case 'doc':
$file = BASE_DIR . '/fields/' . $fld . '/tpl/field-doc-' . $id . '.tpl';
break;
case 'req':
$file = BASE_DIR . '/fields/' . $fld . '/tpl/field-req-' . $id . '.tpl';
break;
}
@unlink($file);
header('Location:' . get_referer_link());
exit;
}
}
?>

142
class/class.settings.php

@ -218,6 +218,8 @@ class AVE_Settings
}
else
{
$this->clearSettingsCache();
$_SESSION['use_editor'] = intval($_REQUEST['use_editor']);
$message = $AVE_Template->get_config_vars('SETTINGS_SAVED');
$header = $AVE_Template->get_config_vars('SETTINGS_SUCCESS');
@ -317,6 +319,7 @@ class AVE_Settings
$AVE_Template->assign('content', $AVE_Template->fetch('settings/settings_lang.tpl'));
}
/**
* Метод Редактирования параметров языков
*
@ -340,6 +343,7 @@ class AVE_Settings
$AVE_Template->assign('content', $AVE_Template->fetch('settings/settings_lang_edit.tpl'));
}
function settingsLanguageEditSave()
{
global $AVE_DB, $AVE_Template;
@ -589,5 +593,143 @@ class AVE_Settings
return true;
}
/**
* Функция очищает кеш системных настроек
*
*/
function clearSettingsCache()
{
$cache_dir = BASE_DIR . '/cache/sql/settings/';
return rrmdir($cache_dir);
}
/**
* Функция редактирования robots.txt
*
*/
function editRobots()
{
global $AVE_DB, $AVE_Template;
$file_name = 'robots.txt';
$_REQUEST['sub'] = (! isset($_REQUEST['sub']))
? ''
: $_REQUEST['sub'];
switch ($_REQUEST['sub'])
{
case 'save':
$file = BASE_DIR . '/' . $file_name;
$template = stripcslashes($_REQUEST['code_text']);
$result = file_put_contents($file, trim($template));
if ($result === false)
{
$message = $AVE_Template->get_config_vars('SETTINGS_SAVED_ERR_FILE');
$header = $AVE_Template->get_config_vars('SETTINGS_ERROR');
$theme = 'error';
}
else
{
$message = $AVE_Template->get_config_vars('SETTINGS_SAVED_FILE');
$header = $AVE_Template->get_config_vars('SETTINGS_SUCCESS');
$theme = 'accept';
}
if (isAjax())
{
echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
}
else
{
$AVE_Template->assign('message', $message);
header('Location:index.php?do=settings&cp=' . SESSION);
}
exit;
default:
$file = BASE_DIR . '/' . $file_name;
$template = file_get_contents($file);
$formaction = "index.php?do=settings&action=robots&sub=save&cp=" . SESSION;
$AVE_Template->assign('file_name', $file_name);
$AVE_Template->assign('formaction', $formaction);
$AVE_Template->assign('template', $template);
break;
}
$AVE_Template->assign('content', $AVE_Template->fetch('settings/edit_file.tpl'));
}
/**
* Функция редактирования func.custom.php
*
*/
function editCustom()
{
global $AVE_DB, $AVE_Template;
$file_name = 'func.custom.php';
$_REQUEST['sub'] = (! isset($_REQUEST['sub']))
? ''
: $_REQUEST['sub'];
switch ($_REQUEST['sub'])
{
case 'save':
$file = BASE_DIR . '/functions/' . $file_name;
$template = stripcslashes($_REQUEST['code_text']);
$result = file_put_contents($file, trim($template));
if ($result === false)
{
$message = $AVE_Template->get_config_vars('SETTINGS_SAVED_ERR_FILE');
$header = $AVE_Template->get_config_vars('SETTINGS_ERROR');
$theme = 'error';
}
else
{
$message = $AVE_Template->get_config_vars('SETTINGS_SAVED_FILE');
$header = $AVE_Template->get_config_vars('SETTINGS_SUCCESS');
$theme = 'accept';
}
if (isAjax())
{
echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
}
else
{
$AVE_Template->assign('message', $message);
header('Location:index.php?do=settings&cp=' . SESSION);
}
exit;
default:
$file = BASE_DIR . '/functions/' . $file_name;
$template = file_get_contents($file);
$formaction = "index.php?do=settings&action=robots&sub=save&cp=" . SESSION;
$AVE_Template->assign('file_name', $file_name);
$AVE_Template->assign('formaction', $formaction);
$AVE_Template->assign('template', $template);
break;
}
$AVE_Template->assign('content', $AVE_Template->fetch('settings/edit_file.tpl'));
}
}
?>

3
class/class.thumbnail.php

@ -161,7 +161,8 @@ class Image_Toolbox {
* <i>integer</i> <b>$height</b> imageheight of new image to be created<br>
* <i>string</i> <b>$fillcolor</b> optional fill the new image with this color (hexformat, e.g. '#FF0000')<br>
*/
function Image_Toolbox() {
function __construct()
{
$args = func_get_args();
$argc = func_num_args();

11
class/class.user.php

@ -47,6 +47,7 @@ class AVE_User
'modules_view', 'modules_admin', 'modules_system', // модули
'mediapool_int', 'mediapool_add', 'mediapool_del', 'mediapool_finder', // файловый менеджер
'gen_settings', 'gen_settings_more', 'gen_settings_countries', 'gen_settings_languages', // общие настройки
'gen_settings_robots', 'gen_settings_fcustom',
'db_actions', // база данных
'logs_view', 'logs_clear', // логи
'cache_clear', 'cache_thumb' // сессии и кеш
@ -309,8 +310,10 @@ class AVE_User
SELECT
user_group_name,
user_group_permission
FROM " . PREFIX . "_user_groups
WHERE user_group = '" . $user_group_id . "'
FROM
" . PREFIX . "_user_groups
WHERE
user_group = '" . $user_group_id . "'
")->FetchRow();
}
@ -321,9 +324,9 @@ class AVE_User
else
{
$AVE_Template->assign('g_all_permissions', $this->_allowed_admin_permission);
$AVE_Template->assign('g_group_permissions', explode('|', $row->user_group_permission));
$AVE_Template->assign('g_group_permissions', array_diff(explode('|', $row->user_group_permission), array('')));
$AVE_Template->assign('g_name', $row->user_group_name);
$AVE_Template->assign('modules', $AVE_Module->moduleListGet(1));
$AVE_Template->assign('modules', $AVE_Module->_modules);
}
}

26
fields/checkbox/field.php

@ -12,7 +12,7 @@
*/
// Чекбокс (Checkbox)
function get_field_checkbox($field_value, $action, $field_id=0, $tpl='', $tpl_empty=0, &$maxlength=null, $document_fields=array(), $rubric_id=0, $default=null)
function get_field_checkbox($field_value, $action, $field_id = 0, $tpl = '', $tpl_empty = 0, &$maxlength = null, $document_fields = array(), $rubric_id = 0, $default = null)
{
global $AVE_Template;
@ -20,7 +20,9 @@ function get_field_checkbox($field_value, $action, $field_id=0, $tpl='', $tpl_em
$fld_dir = dirname(__FILE__) . '/';
$tpl_dir = $fld_dir . 'tpl/';
$lang_file = $fld_dir . 'lang/' . (defined('ACP') ? $_SESSION['admin_language'] : $_SESSION['user_language']) . '.txt';
$lang_file = $fld_dir . 'lang/' . (defined('ACP')
? $_SESSION['admin_language']
: $_SESSION['user_language']) . '.txt';
$AVE_Template->config_load($lang_file, 'lang');
$AVE_Template->assign('config_vars', $AVE_Template->get_config_vars());
@ -36,19 +38,22 @@ function get_field_checkbox($field_value, $action, $field_id=0, $tpl='', $tpl_em
$AVE_Template->assign('doc_id', (isset($_REQUEST['Id']) ? (int)$_REQUEST['Id'] : 0));
$tpl_file = get_field_tpl($tpl_dir, $field_id, 'admin');
return $AVE_Template->fetch($tpl_file);
return $AVE_Template->fetch($tpl_file);
break;
case 'doc':
$field_value = clean_php($field_value);
$res = ((int)$field_value === 1) ? (int)$field_value : 0;
$res = ((int)$field_value === 1)
? (int)$field_value
: 0;
$tpl_file = get_field_tpl($tpl_dir, $field_id, 'doc');
if($tpl_empty && $tpl_file)
if ($tpl_empty && $tpl_file)
{
$AVE_Template->assign('field_id', $field_id);
$AVE_Template->assign('field_value', $field_value);
return $AVE_Template->fetch($tpl_file);
}
@ -59,12 +64,15 @@ function get_field_checkbox($field_value, $action, $field_id=0, $tpl='', $tpl_em
case 'req':
$field_value = clean_php($field_value);
$res = ((int)$field_value === 1) ? (int)$field_value : 0;
$res = ((int)$field_value === 1)
? (int)$field_value
: 0;
$tpl_file = get_field_tpl($tpl_dir, $field_id, 'req');
if($tpl_empty && $tpl_file)
if ($tpl_empty && $tpl_file)
{
$AVE_Template->assign('field_id', $field_id);
$AVE_Template->assign('field_value', $field_value);
return $AVE_Template->fetch($tpl_file);
}
@ -74,7 +82,9 @@ function get_field_checkbox($field_value, $action, $field_id=0, $tpl='', $tpl_em
case 'save':
$field_value = clean_php($field_value);
$res = ((int)$field_value === 1) ? $field_value : '0';
$res = ((int)$field_value === 1)
? $field_value
: '0';
break;
case 'name':

2
fields/image_mega/tpl/field-doc.tpl

@ -39,7 +39,7 @@ $image.http Есть ли в ссылке http или https (true/false)
{/if}
{if isset($image.description) && $image.description != ''}
<p>
{$image.description}
{$image.description|html_entity_decode}
</p>
{/if}
</div>

0
fields/image_multi_new_3inputs/.gitkeep

0
fields/image_multi_new_3inputs/css/.gitkeep

96
fields/image_multi_new_3inputs/css/field.css

@ -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;
}

307
fields/image_multi_new_3inputs/field.php

@ -1,307 +0,0 @@
<?php
/**
* AVE.cms
*
* @package AVE.cms
* @version 3.x
* @filesource
* @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru
*
* @license GPL v.2
*/
// Изображение (Каскад)
function get_field_image_multi_new_3inputs($field_value, $action, $field_id=0, $tpl='', $tpl_empty=0, &$maxlength=null, $document_fields=array(), $rubric_id=0, $default=null)
{
global $AVE_Template, $img_pixel;
$fld_dir = dirname(__FILE__) . '/';
$tpl_dir = $fld_dir . 'tpl/';
$fld_name = basename($fld_dir);
$lang_file = $fld_dir . 'lang/' . (defined('ACP') ? $_SESSION['admin_language'] : $_SESSION['user_language']) . '.txt';
$AVE_Template->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);
}

0
fields/image_multi_new_3inputs/js/.gitkeep

235
fields/image_multi_new_3inputs/js/field.js

@ -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(
'<div class="cascad3_item ui-state-default" id="cascad3_image_' + cid + '_' + did + '_' + iid + '" data-id="' + iid + '" doc=id="' + did + '">' +
'<div class="header grey_bg"></div>' +
'<a class="topDir icon_sprite ico_photo view fancy preview__' + cid + '_' + did + '_' + iid + '" href="' + field_value + '" title="' + look + '"></a>' +
'<a class="topDir icon_sprite ico_delete delete" href="javascript:void(0);" title="' + del + '" data-id="' + cid + '_' + did + '_' + iid + '"></a>' +
'<span class="topDir icon_sprite ico_info info" title="' + field_value + '"></span>' +
'<input type="hidden" value="' + field_value + '" name="feld[' + cid + '][' + iid + '][url]" id="image__' + cid + '_' + did + '_' + iid + '">' +
'<img id="preview__' + cid + '_' + did + '_' + iid + '" src="' + img_path + '" onclick="browse_uploads(\'image__' + cid + '_' + did + '_' + iid + '\');" class="image" alt="" width="100" height="100" />' +
'<input class="mousetrap" name="feld[' + cid + '][' + iid + '][descr]" placeholder="' + place + ' 1" value = ""/>' +
'<input class="mousetrap" name="feld[' + cid + '][' + iid + '][descr2]" placeholder="' + place + ' 2" value = ""/>' +
'<input class="mousetrap" name="feld[' + cid + '][' + iid + '][descr3]" placeholder="' + place + ' 3" value = ""/>' +
'</div>'
);
$.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(
'<div class="cascad3_item ui-state-default" id="cascad3_image_' + c_id + '_' + d_id + '_' + iid + '" data-id="' + iid + '" data-doc="' + d_id + '">' +
'<div class="header grey_bg"></div>' +
'<a class="topDir icon_sprite ico_photo view fancy preview__' + c_id + '_' + d_id + '_' + iid + '" href="" title="' + look + '"></a>' +
'<a class="topDir icon_sprite ico_delete delete" href="javascript:void(0);" title="' + del + '" data-id="' + c_id + '_' + d_id + '_' + iid + '"></a>' +
'<input type="hidden" value="" name="feld[' + c_id + '][' + iid + '][url]" id="image__' + c_id + '_' + d_id + '_' + iid + '">' +
'<img id="preview__' + c_id + '_' + d_id + '_' + iid + '" src="' + blank + '" onclick="browse_uploads(\'image__' + c_id + '_' + d_id + '_' + iid + '\');" class="image" alt="" width="100" height="100" />' +
'<input class="mousetrap" name="feld[' + c_id + '][' + iid + '][descr]" placeholder="' + place + ' 1" value = ""/>' +
'<input class="mousetrap" name="feld[' + c_id + '][' + iid + '][descr2]" placeholder="' + place + ' 2" value = ""/>' +
'<input class="mousetrap" name="feld[' + c_id + '][' + iid + '][descr3]" placeholder="' + place + ' 3" value = ""/>' +
'</div>'
);
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(
'<div class="cascad3_item ui-state-default" id="cascad3_image_' + cid + '_' + did + '_' + iid + '" data-id="' + iid + '" doc=id="' + did + '">' +
'<div class="header grey_bg"></div>' +
'<a class="topDir icon_sprite ico_photo view fancy preview__' + cid + '_' + did + '_' + iid + '" href="' + field_value + '" title="' + look + '"></a>' +
'<a class="topDir icon_sprite ico_delete delete" href="javascript:void(0);" title="' + del + '" data-id="' + cid + '_' + did + '_' + iid + '"></a>' +
'<span class="topDir icon_sprite ico_info info" title="' + field_value + '"></span>' +
'<input type="hidden" value="' + field_value + '" name="feld[' + cid + '][' + iid + '][url]" id="image__' + cid + '_' + did + '_' + iid + '">' +
'<img id="preview__' + cid + '_' + did + '_' + iid + '" src="' + img_path + '" onclick="browse_uploads(\'image__' + cid + '_' + did + '_' + iid + '\');" class="image" alt="" width="100" height="100" />' +
'<input class="mousetrap" name="feld[' + cid + '][' + iid + '][descr]" placeholder="' + place + ' 1" value = ""/>' +
'<input class="mousetrap" name="feld[' + cid + '][' + iid + '][descr2]" placeholder="' + place + ' 2" value = ""/>' +
'<input class="mousetrap" name="feld[' + cid + '][' + iid + '][descr3]" placeholder="' + place + ' 3" value = ""/>' +
'</div>'
);
Cascad3.cascad3_update();
}
}
});
}
});

231
fields/image_multi_new_3inputs/js/outside.js

@ -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(
'<div class="cascad3_item ui-state-default" id="cascad3_image_' + cid + '_' + did + '_' + iid + '" data-id="' + iid + '" doc=id="' + did + '">' +
'<div class="header grey_bg"></div>' +
'<a class="topDir icon_sprite ico_photo view fancy preview__' + cid + '_' + did + '_' + iid + '" href="' + field_value + '" title="' + look + '"></a>' +
'<a class="topDir icon_sprite ico_delete delete" href="javascript:void(0);" title="' + del + '" data-id="' + cid + '_' + did + '_' + iid + '"></a>' +
'<span class="topDir icon_sprite ico_info info" title="' + field_value + '"></span>' +
'<input type="hidden" value="' + field_value + '" name="data[' + did + '][feld][' + cid + '][' + iid + '][url]" id="image__' + cid + '_' + did + '_' + iid + '">' +
'<img id="preview__' + cid + '_' + did + '_' + iid + '" src="' + img_path + '" onclick="browse_uploads(\'image__' + cid + '_' + did + '_' + iid + '\');" class="image" alt="" width="100" height="100" />' +
'<textarea class="mousetrap" name="data[' + did + '][feld][' + cid + '][' + iid + '][descr]" placeholder="' + place + '"></textarea>' +
'</div>'
);
$.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(
'<div class="cascad3_item ui-state-default" id="cascad3_image_' + c_id + '_' + d_id + '_' + iid + '" data-id="' + iid + '" data-doc="' + d_id + '">' +
'<div class="header grey_bg"></div>' +
'<a class="topDir icon_sprite ico_photo view fancy preview__' + c_id + '_' + d_id + '_' + iid + '" href="" title="' + look + '"></a>' +
'<a class="topDir icon_sprite ico_delete delete" href="javascript:void(0);" title="' + del + '" data-id="' + c_id + '_' + d_id + '_' + iid + '"></a>' +
'<input type="hidden" value="" name="data[' + d_id + '][feld][' + c_id + '][' + iid + '][url]" id="image__' + c_id + '_' + d_id + '_' + iid + '">' +
'<img id="preview__' + c_id + '_' + d_id + '_' + iid + '" src="' + blank + '" onclick="browse_uploads(\'image__' + c_id + '_' + d_id + '_' + iid + '\');" class="image" alt="" width="100" height="100" />' +
'<textarea class="mousetrap" name="data[' + d_id + '][feld][' + c_id + '][' + iid + '][descr]" placeholder="' + place + '"></textarea>' +
'</div>'
);
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(
'<div class="cascad3_item ui-state-default" id="cascad3_image_' + cid + '_' + did + '_' + iid + '" data-id="' + iid + '" doc=id="' + did + '">' +
'<div class="header grey_bg"></div>' +
'<a class="topDir icon_sprite ico_photo view fancy preview__' + cid + '_' + did + '_' + iid + '" href="' + field_value + '" title="' + look + '"></a>' +
'<a class="topDir icon_sprite ico_delete delete" href="javascript:void(0);" title="' + del + '" data-id="' + cid + '_' + did + '_' + iid + '"></a>' +
'<span class="topDir icon_sprite ico_info info" title="' + field_value + '"></span>' +
'<input type="hidden" value="' + field_value + '" name="data[' + did + '][feld][' + cid + '][' + iid + '][url]" id="image__' + cid + '_' + did + '_' + iid + '">' +
'<img id="preview__' + cid + '_' + did + '_' + iid + '" src="' + img_path + '" onclick="browse_uploads(\'image__' + cid + '_' + did + '_' + iid + '\');" class="image" alt="" width="100" height="100" />' +
'<textarea class="mousetrap" name="data[' + did + '][feld][' + cid + '][' + iid + '][descr]" placeholder="' + place + '"></textarea>' +
'</div>'
);
Cascad3.cascad3_update();
}
}
});
}
});

0
fields/image_multi_new_3inputs/lang/.gitkeep

27
fields/image_multi_new_3inputs/lang/bg.txt

@ -1,27 +0,0 @@
[admin]
name = "Изображение (Каскада, 3 полета)"
look = "Преглед"
link = "Промени пътя"
select = "Избери изображение"
delete = "Изтриване на елелемт от элемент каскадата"
place = "Описание"
del_conf = "Сигурни ли сте, че желаете да изтриете този елемент?<br>(Изображението няма да бъде изтрито от сървъра)"
del_head = "Изтриване на елемент от каскадата..."
add_n_e = "Добави нов елемент:"
add_f = "Избор на изображение"
add_d = "Избор на папка"
add_l = "Качи от компютъра"
add_upl_e = "Вие може за заредите изображения от локален компютър след създаването на документа. За това натиснете бутона по долу «Добави и продължи редактирането»"
upl_dir = "Папка: "
del_all = "Изтриване на всички елементи"
del_all_c = "Сигурни ли сте, че желаете да изтриете всички елементи?<br>(Изображенията няма да бъдат изтрити от сървъра)"
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 = "Превишен е максималния брой файлове,<br>разрешен за едновременно зареждане"

29
fields/image_multi_new_3inputs/lang/cz.txt

@ -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?<br>(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?<br>(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ů,<br>během jednoho nahrávání"

26
fields/image_multi_new_3inputs/lang/en.txt

@ -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?<br>(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?<br>(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<br>to download"

27
fields/image_multi_new_3inputs/lang/pl.txt

@ -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? <br> (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? <br /> (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, <br /> na jednoczesne ładowanie"

27
fields/image_multi_new_3inputs/lang/ru.txt

@ -1,27 +0,0 @@
[admin]
name = "Изображение (Каскад, 3 инпута)"
look = "Посмотреть"
link = "Изменить путь"
select = "Выбрать изображение"
delete = "Удалить элемент каскада"
place = "параметр"
del_conf = "Вы уверены, что хотите удалить данный элемент?<br>(Изображение не будет удалено с сервера)"
del_head = "Удаление элемента каскада..."
add_n_e = "Добавить новый элемент:"
add_f = "Выбрать изображение"
add_d = "Выбрать папку"
add_l = "Загрузить с компьютера"
add_upl_e = "Вы сможете загрузить фотографии с локального компьютера после создания документа. Для этого нажмите внизу кнопку «Добавить и продолжить редактирование»"
upl_dir = "Папка: "
del_all = "Удалить все элементы"
del_all_c = "Вы уверены, что хотите удалить все элементы?<br>(Изображения не будет удалены с сервера)"
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 = "Превышено максимальное число файлов,<br>для одновременной загрузки"

27
fields/image_multi_new_3inputs/lang/ua.txt

@ -1,27 +0,0 @@
[admin]
name = "Зображення (Каскад, 3 інпута)"
look = "Подивитися"
link = "Змінити шлях"
select = "Обрати зображення"
delete = "Видалити елемент каскаду"
place = "Опис"
del_conf = "Ви впевнені, що бажаєте видалити цей елемент?<br>(Зображення не буде видалено зі сервера)"
del_head = "Видалення елемента каскаду..."
add_n_e = "Додати новий елемент:"
add_f = "Обрати зображення"
add_d = "Обрати папку"
add_l = "Завантажити з компьютера"
add_upl_e = "Ви зможете завантажити зображення з локального компьютера післе створення документа. Для цього натисніть внизу кнопку “Додати та продовжити редагування”"
upl_dir = "Папка: "
del_all = "Видалити всі елементи"
del_all_c = "Ви впевнені, що бажаєте видалити всі елементи?<br>(Зображення не буде видалено зі сервера)"
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 = "Перевищено максимальне число файлів,<br>для одночасного завантаження"

0
fields/image_multi_new_3inputs/tpl/.gitkeep

3
fields/image_multi_new_3inputs/tpl/field-doc.tpl

@ -1,3 +0,0 @@
{foreach from=$field_value item=image}
<img src="{$image[0]}" alt="{if isset($image[1])}{$image[1]}{/if}" title="{if isset($image[1])}{$image[1]}{/if}">
{/foreach}

3
fields/image_multi_new_3inputs/tpl/field-req.tpl

@ -1,3 +0,0 @@
{foreach from=$field_value item=image}
<img src="{$image[0]}" alt="{if isset($image[1])}{$image[1]}{/if}" title="{if isset($image[1])}{$image[1]}{/if}">
{/foreach}

65
fields/image_multi_new_3inputs/tpl/field.tpl

@ -1,65 +0,0 @@
{if $cascad3_new_3inputs != load}
{assign var=cascad3_new_3inputs value='' scope="global"}
{if $smarty.request.outside}
<script src="{$ABS_PATH}fields/{$field_dir}/js/outside.js" type="text/javascript"></script>
{else}
<script src="{$ABS_PATH}fields/{$field_dir}/js/field.js" type="text/javascript"></script>
{/if}
<link href="{$ABS_PATH}fields/{$field_dir}/css/field.css" rel="stylesheet" type="text/css" media="screen" />
<script type="text/javascript">
var blank = '{$tpl_dir}/images/blanc.gif';
var place = '{#place#}';
var look = '{#look#}';
var del = '{#delete#}';
var del_conf = '{#del_conf#}';
var del_head = '{#del_head#}';
var del_all_c = '{#del_all_c#}';
var del_all_h = '{#del_all_h#}';
var max_f_t = '{#max_f_t#}';
var max_f_h = '{#max_f_h#}';
</script>
{assign var=cascad3_new_3inputs value="load" scope="global"}
{/if}
<div class="cascad3" id="cascad3_{$doc_id}_{$field_id}" data-id="{$field_id}" data-doc="{$doc_id}" data-rubric="{$smarty.request.rubric_id}">
<input type="hidden" value="" id="cascad3__{$field_id}_{$doc_id}">
{if $show_upload}
<input type="file" class="cascad3_upload cascad3_upload_field_{$field_id}_{$doc_id}" multiple name="cascad3_files_{$field_id}_{$doc_id}[]" style="visibility: hidden; display: none;" data-max-files="{$max_files}" />
{/if}
<ul class="messages">
<li class="highlight grey">
{#add_n_e#}
<a href="javascript:void(0);" class="cascad3_add_single link">{#add_f#}</a>
&nbsp;|&nbsp;
<a href="javascript:void(0);" class="cascad3_add_folder link">{#add_d#}</a>
&nbsp;|&nbsp;
<a href="javascript:void(0);" class="cascad3_del_all link">{#del_all#}</a>
{if $show_upload}
&nbsp;|&nbsp;
<a href="javascript:void(0);" class="cascad3_upload_local link">{#add_l#}</a>&nbsp;<a href="javascript:void(0);" class="topDir" title="{$max_files}<br>{$dir_upload}">[?]</a>
{else}
&nbsp;|&nbsp;
<a href="javascript:void(0);" class="topDir" title="{#add_upl_e#}<br><br>{$max_files}<br>{$dir_upload}">[?]</a>
{/if}
</li>
</ul>
<div class="cascad3_sortable">
{foreach from=$images key=key item=image}
<div class="cascad3_item ui-state-default" id="cascad3_image_{$field_id}_{$doc_id}_{$key}" data-id="{$key}" data-doc="{$doc_id}">
<div class="header grey_bg"></div>
<a class="topDir icon_sprite ico_photo view fancy preview__{$field_id}_{$doc_id}_{$key}" href="{$image.url}" title="{#look#}"></a>
<a class="topDir icon_sprite ico_delete delete" href="javascript:void(0);" title="{#delete#}" data-id="{$field_id}_{$doc_id}_{$key}"></a>
<span class="topDir icon_sprite ico_info info" title="{$image.url}"></span>
<input type="hidden" value="{$image.url}" name="feld[{$field_id}][{$key}][url]" id="image__{$field_id}_{$doc_id}_{$key}">
<img id="preview__{$field_id}_{$doc_id}_{$key}" src="{$image.thumb}" onclick="browse_uploads('image__{$field_id}_{$doc_id}_{$key}');" class="image" alt="" width="100" height="100" />
<input class="mousetrap" name="feld[{$field_id}][{$key}][descr]" placeholder="{#place#} 1" value="{$image.desc}"/>
<input class="mousetrap" name="feld[{$field_id}][{$key}][descr2]" placeholder="{#place#} 2" value="{$image.desc2}"/>
<input class="mousetrap" name="feld[{$field_id}][{$key}][descr3]" placeholder="{#place#} 3" value="{$image.desc3}"/>
</div>
{/foreach}
</div>
</div>

24
fields/teasers/field.php

@ -1,9 +1,9 @@
<?php
/**
* Поле Цена
/**
* Teasers
*/
function get_field_teasers($field_value, $action, $field_id=0, $tpl='', $tpl_empty=0, &$maxlength = '', $doc_fields=array(), $rubric_id=0, $default='')
{
function get_field_teasers($field_value, $action, $field_id=0, $tpl='', $tpl_empty=0, &$maxlength = '', $doc_fields=array(), $rubric_id=0, $default='')
{
global $AVE_DB, $AVE_Template;
$fld_dir = dirname(__FILE__) . '/';
@ -64,7 +64,9 @@ function get_field_teasers($field_value, $action, $field_id=0, $tpl='', $tpl_emp
break;
case 'doc':
$items = (isset($field_value)) ? unserialize($field_value) : array();
$items = (isset($field_value))
? unserialize($field_value)
: array();
$res = array();
@ -75,7 +77,7 @@ function get_field_teasers($field_value, $action, $field_id=0, $tpl='', $tpl_emp
$item = explode('|', $item);
if ($item[1])
$res[] = eval2var('?>' . showteaser($item[1]) . '<?');
$res[] = showteaser($item[1]);
}
}
@ -105,11 +107,11 @@ function get_field_teasers($field_value, $action, $field_id=0, $tpl='', $tpl_emp
$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] . ")" : "";
$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'] . "%'))" : "";
$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
@ -161,5 +163,5 @@ function get_field_teasers($field_value, $action, $field_id=0, $tpl='', $tpl_emp
}
return ($res ? $res : $field_value);
}
}
?>

29
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(
'<div class="analoque_list fix mb10" id="analoque_list_' + d_id + '_' + c_id + '_' + i_id + '" data-id="' + i_id + '">' +
'<input class="mousetrap search_analoque" name="feld[' + c_id + '][' + i_id + '][param]" type="text" value="" placeholder="' + analoque_param + '" data-docid="' + d_id + '" data-fieldid="' + c_id + '" data-id="' + i_id + '" style="width: 450px;"/>&nbsp;&nbsp;Id:&nbsp;<input type="text" class="mousetrap field_' + d_id + '_' + c_id + '_' + i_id + '" value="" name="feld[' + c_id + '][' + i_id + '][value]" placeholder="' + analoque_value + '" style="width: 50px;" readonly />&nbsp;&nbsp;<a href="javascript:void(0);" data-id="' + d_id + '_' + c_id + '_' + i_id + '" class="button redBtn topDir DelButton" title="' + analoque_del + '">&times;</a>' +
@ -65,7 +65,7 @@ var Analoque = {
'</div>'
);
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,14 +94,23 @@ 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) {
res_search = false;
if (typeof data === 'object')
{
return $.map(data, function(row) {
return {
data: row,
@ -107,6 +118,9 @@ var Analoque = {
result: query.val()
}
});
}
return false;
},
formatItem: function(item) {
return '<div style="padding: 3px 0;"><span style="font-weight: 700;">' + item.doc_article + '</span> ' + item.doc_name + '</div>';
@ -123,7 +137,6 @@ var Analoque = {
}
}
$(document).ready(function()
{
Analoque.init();
$(document).ready(function() {
Teasers.init();
});

4
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}
<script src="{$ABS_PATH}fields/{$field_dir}/js/outside.js" type="text/javascript"></script>
{else}
@ -14,7 +14,7 @@
var analoque_del_conf = '{#del_conf#}';
var analoque_del_head = '{#del_head#}';
</script>
{assign var=analoque value="load" scope="global"}
{assign var=teasers value="load" scope="global"}
{/if}
<div class="analoque_lists mt10" id="analoque_lists_{$doc_id}_{$field_id}" data-docid="{$doc_id}" data-id="{$field_id}">

8
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 = "Метод на вмъкване"

7
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 = "Метод вставки"

7
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"

7
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"

7
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 = "Метод вставки"

7
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"

14
fields/youtube/tpl/field.tpl

@ -1,22 +1,22 @@
<div class="mb10">
Ссылка:
{#f_url#}:
<input type="text" style="width: 100%;" name="feld[{$field_id}][url]" value="{$video.0}" class="mousetrap" />
</div>
<div class="mb10">
Ширина: <input type="text" style="width: 50px;" name="feld[{$field_id}][width]" value="{$video.1}" class="mousetrap" /> px
{#f_width#}: <input type="text" style="width: 50px;" name="feld[{$field_id}][width]" value="{$video.1}" class="mousetrap" /> px
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Высота: <input type="text" style="width: 50px;" name="feld[{$field_id}][height]" value="{$video.2}" class="mousetrap" /> px
{#f_height#}: <input type="text" style="width: 50px;" name="feld[{$field_id}][height]" value="{$video.2}" class="mousetrap" /> px
</div>
<div class="mb10">
Полноэкранный режим:
{#f_fullscreen#}:
<select name="feld[{$field_id}][fullscreen]">
<option value="true" {if $video.3 == 'true'}selected{/if}>Разрешить</option>
<option value="false" {if $video.3 == 'false'}selected{/if}>Запретить</option>
<option value="true" {if $video.3 == 'true'}selected{/if}>{#f_allow#}</option>
<option value="false" {if $video.3 == 'false'}selected{/if}>{#f_forbidden#}</option>
</select>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Метод вставки:
{#f_metod#}:
<select name="feld[{$field_id}][source]">
<option value="embed" {if $video.4 == 'embed'}selected{/if}>Embed</option>
<option value="iframe" {if $video.4 == 'iframe'}selected{/if}>Iframe</option>

9
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,7 +89,7 @@ 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;
}

19
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)

39
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;
}
/**
* Формирование строки из случайных символов
*

103
functions/func.fields.php

@ -76,7 +76,7 @@
return '<input type="text" style="width: 400px" name="feld[' . $field_id . ']" value="' . $field_value . '">';
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;
}
?>

18
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;

95
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,6 +67,7 @@
{
$navi_menu = get_navigations($navi_id);
if ($cache_file)
file_put_contents($cache_file, serialize($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,13 +201,18 @@
}
}
$cache_items = BASE_DIR . '/cache/sql/nav/items-' . $navi_id . '.cache';
$navi_items = array();
// Если включен DEV MODE, то отключаем кеширование запросов
if (defined('DEV_MODE') AND DEV_MODE || $expnad_ext != 1)
$cache_items = null;
if (empty($navi_print_level))
{
//-- Проверяем есть файл кеша, если есть пропускам запрос к БД
if(! file_exists($cache_items))
if (! file_exists($cache_items))
{
//-- Запрос пунктов меню
$sql = "
@ -202,19 +232,39 @@
$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));
}
else
{
$navi_items = unserialize(file_get_contents($cache_items));
}
}
else
{
//-- Запрос пунктов меню
$sql = "
SELECT *
FROM
" . PREFIX . "_navigation_items
WHERE
status = '1'
AND
navigation_id = '" . $navi_menu->navigation_id . "'" .
$sql_navi_level . "
ORDER BY
position ASC
";
$sql_navi_items = $AVE_DB->Query($sql);
if($navi_print_level)
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]
@ -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;
}

254
functions/func.parserequest.php

@ -1,6 +1,6 @@
<?php
/**
/**
* AVE.cms
*
* @package AVE.cms
@ -11,15 +11,37 @@
* @license GPL v.2
*/
/**
function request_get_settings($id)
{
global $AVE_DB;
// Получаем информацию о запросе
$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;
}
/**
* Обработка условий запроса.
* Возвращает строку условий в SQL-формате
*
* @param int $id идентификатор запроса
* @return string
*/
function request_get_condition_sql_string($id, $update_db = false)
{
function request_get_condition_sql_string($id, $update_db = false)
{
global $AVE_DB, $AVE_Core;
$id = (int)$id;
@ -174,19 +196,21 @@ function request_get_condition_sql_string($id, $update_db = false)
WHERE
Id = '" . $id . "'
");
$AVE_DB->clear_request($id);
}
return @$retval;
}
}
/*
* Функция принимает строку, и возвращает
* адрес первого изображения, которую найдет
*/
/*
* Функция принимает строку, и возвращает
* адрес первого изображения, которую найдет
*/
function getImgSrc($data)
{
function getImgSrc($data)
{
preg_match_all("/(<img )(.+?)( \/)?(>)/u", $data, $images);
$host = $images[2][0];
@ -202,7 +226,7 @@ function getImgSrc($data)
}
else
{
preg_match('/(.+)'.THUMBNAIL_DIR.'\/(.+)-.\d+x\d+(\..+)/u', $host, $matches);
preg_match('/(.+)' . THUMBNAIL_DIR . '\/(.+)-.\d+x\d+(\..+)/u', $host, $matches);
if (isset($matches[1]))
{
@ -213,9 +237,9 @@ function getImgSrc($data)
return $host;
}
}
}
}
/**
/**
* Функция обработки тэгов полей с использованием шаблонов
* в соответствии с типом поля
*
@ -224,8 +248,8 @@ function getImgSrc($data)
* @param int $maxlength максимальное количество символов обрабатываемого поля
* @return string
*/
function request_get_document_field($field_id, $document_id, $maxlength = '', $rubric_id=0)
{
function request_get_document_field($field_id, $document_id, $maxlength = '', $rubric_id = 0)
{
if (! is_numeric($document_id) || $document_id < 1)
return '';
@ -244,7 +268,7 @@ function request_get_document_field($field_id, $document_id, $maxlength = '', $r
$func = 'get_field_' . $document_fields[$field_id]['rubric_field_type'];
if(! is_callable($func))
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']);
@ -253,17 +277,17 @@ function request_get_document_field($field_id, $document_id, $maxlength = '', $r
{
if ($maxlength == 'more' || $maxlength == 'esc'|| $maxlength == 'img')
{
if($maxlength == 'more')
if ($maxlength == 'more')
{
// ToDo - Вывести в настройки или в настройки самого запроса
$teaser = explode('<a name="more"></a>', $field_value);
$field_value = $teaser[0];
}
elseif($maxlength == 'esc')
elseif ($maxlength == 'esc')
{
$field_value = addslashes($field_value);
}
elseif($maxlength == 'img')
elseif ($maxlength == 'img')
{
$field_value = getImgSrc($field_value);
}
@ -273,43 +297,45 @@ function request_get_document_field($field_id, $document_id, $maxlength = '', $r
if ($maxlength < 0)
{
$field_value = str_replace(array("\r\n","\n","\r"), " ", $field_value);
$field_value = strip_tags($field_value, "<a>");
$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 = mb_substr($field_value, 0, $maxlength) . ((strlen($field_value) > $maxlength) ? '... ' : '');
$field_value = truncate($field_value, $maxlength, REQUEST_ETC, REQUEST_BREAK_WORDS);
}
}
else
return false;
}
return $field_value;
}
}
function showteaser($id, $tparams = '')
{
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)
{
// Функция получения уникальных параметров для каждого тизера
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 = '')
{
// Функция получения элемента запроса
function showrequestelement($mixed, $template = '', $tparams = '')
{
global $AVE_DB, $req_item_num, $params_of_teaser, $use_cache;
if (is_array($mixed))
@ -327,7 +353,7 @@ function showrequestelement($mixed, $template = '', $tparams = '')
LIMIT 1
")->FetchRow());
if(! $row)
if (! $row)
return '';
$tparams_id = '';
@ -346,7 +372,11 @@ function showrequestelement($mixed, $template = '', $tparams = '')
$cachefile_docid = BASE_DIR . '/cache/sql/request/' . $row->Id . '/request-' . md5($template) . '.cache';
if(! file_exists($cachefile_docid))
// Если включен DEV MODE, то отключаем кеширование запросов
if (defined('DEV_MODE') AND DEV_MODE)
$cachefile_docid = null;
if (! file_exists($cachefile_docid))
{
$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);
@ -436,9 +466,9 @@ function showrequestelement($mixed, $template = '', $tparams = '')
/*
if (count($params_of_teaser[$tparams_id]))
{
Debug::echo($params_of_teaser);
Debug::echo($row_Id_mas);
Debug::echo($item, true);
Debug::_echo($params_of_teaser);
Debug::_echo($row_Id_mas);
Debug::_echo($item, true);
}
*/
@ -498,9 +528,9 @@ function showrequestelement($mixed, $template = '', $tparams = '')
unset($row);
return $item;
}
}
/**
/**
* Обработка тега запроса.
* Возвращает список документов удовлетворяющих параметрам запроса
* оформленный с использованием шаблона
@ -508,8 +538,8 @@ function showrequestelement($mixed, $template = '', $tparams = '')
* @param int $id идентификатор запроса
* @return string
*/
function request_parse($id, $params = array())
{
function request_parse($id, $params = array())
{
global $AVE_Core, $AVE_DB, $request_documents;
// Если id пришёл из тега, берём нужную часть массива
@ -521,18 +551,7 @@ function request_parse($id, $params = 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 '';
$request = request_get_settings($id);
// Фиксируем время начала генерации запроса
Debug::startTime('request_' . $id);
@ -555,11 +574,12 @@ function request_parse($id, $params = array())
if (empty($params['SORT']) && ! empty($_REQUEST['requestsort_' . $id]) && ! is_array($_REQUEST['requestsort_' . $id]))
{
// Разрешаем перебор полей для сортировки через ";"
$sort = explode(';', $_REQUEST['requestsort_'.$id]);
$sort = explode(';', $_REQUEST['requestsort_' . $id]);
foreach($sort as $v)
{
$v1 = explode('=', $v);
// Если хотим сортировку DESC то пишем alias = 0
$params['SORT'][$v1[0]] = (isset($v1[1]) && $v1[1] == 0
? 'DESC'
@ -568,6 +588,7 @@ function request_parse($id, $params = array())
}
// Сортировка по полям
// Если пришел параметр SORT
if (! empty($params['SORT']) && is_array($params['SORT']))
{
foreach($params['SORT'] as $fid => $sort)
@ -575,13 +596,18 @@ function request_parse($id, $params = array())
if (is_numeric($fid))
$fid = (int)get_field_num($request->rubric_id, $fid);
// Если значение больше 0
if ((int)$fid > 0)
{
$sort = strtolower($sort);
// Добавляем условие в SQL
$request_join[$fid] = "<? if (preg_match('t[]'))?><?=(! isset(\$t[$fid])) ? \"LEFT JOIN " . PREFIX . "_document_fields AS t$fid ON (t$fid.document_id = a.Id AND t$fid.rubric_field_id='$fid')\" : ''?>";
$asc_desc = strpos(strtolower($sort),'asc') !== false ? 'ASC' : 'DESC';
// Если в сортировке указано ASC иначе DESC
$asc_desc = strpos(strtolower($sort),'asc') !== false
? 'ASC'
: 'DESC';
$request_order['field-'.$fid] = "t$fid.field_value " . $asc_desc;
@ -589,7 +615,11 @@ function request_parse($id, $params = array())
}
else
{
$asc_desc = strpos(strtolower($sort),'asc') !== false ? 'ASC' : 'DESC';
// Если в сортировке указано ASC иначе DESC
$asc_desc = strpos(strtolower($sort),'asc') !== false
? 'ASC'
: 'DESC';
$request_order[$param] = "$fid " . $asc_desc;
}
}
@ -641,7 +671,7 @@ function request_parse($id, $params = array())
}
}
// Статус: если в параметрах, то его ставим. иначе выводим только активные доки
// Статус: если в параметрах, то его ставим. Иначе выводим только активные доки
$request_where[] = "a.document_status = '" . ((isset($params['STATUS']))
? (int)$params['STATUS']
: '1') . "'";
@ -660,19 +690,21 @@ function request_parse($id, $params = array())
// Условия запроса
// если используется выпадающий список, получаем строку без сохранения
if (! empty($_POST['req_' . $id]) || !empty($_SESSION['doc_' . $AVE_Core->curentdoc->Id]['req_' . $id]))
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);
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($where_cond['where']))
$request_where[] = $where_cond['where'];
// Родительский документ
if (isset($params['PARENT']) && (int)$params['PARENT'] > 0)
@ -709,9 +741,9 @@ function request_parse($id, $params = array())
$request_where_str = '(' . implode(') AND (',$request_where) . ')';
// Количество выводимых доков
$params['LIMIT']=(! empty($params['LIMIT'])
$params['LIMIT'] = (! empty($params['LIMIT'])
? $params['LIMIT']
: (!empty($_REQUEST['requestlimiter_'.$id])
: (! empty($_REQUEST['requestlimiter_'.$id])
? $_REQUEST['requestlimiter_'.$id]
: (int)$request->request_items_per_page));
@ -742,21 +774,7 @@ function request_parse($id, $params = array())
// Составляем запрос к БД
$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
a.*
" . $request_select_str . "
FROM
" . $where_cond['from'] . "
@ -799,17 +817,17 @@ function request_parse($id, $params = array())
// Если просили просто вернуть запрос, возвращаем результат
if (isset($params['RETURN_SQL']) && $params['RETURN_SQL'] == 1)
return $sql;
return $AVE_DB->GetFoundRows();
// Если есть вывод пагинации, то выполняем запрос на получение кол-ва элементов
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_COUNT']) && $params['RETURN_COUNT'] == 1)
return $num_items;
unset($sql_request);
@ -924,9 +942,11 @@ function request_parse($id, $params = array())
array_push($rows, $row);
}
// Обрабатываем шаблоны элементов
//-- Обрабатываем шаблоны элементов
$items = '';
//-- Счетчик
$x = 0;
//-- Общее число элементов
$items_count = count($rows);
global $req_item_num, $use_cache;
@ -955,17 +975,18 @@ function request_parse($id, $params = array())
$items .= $item;
}
// Обрабатываем теги запроса
//== Обрабатываем теги запроса
// Парсим теги визуальных блоков
//-- Парсим теги визуальных блоков
$main_template = preg_replace_callback('/\[tag:block:([A-Za-z0-9-_]{1,20}+)\]/', 'parse_block', $main_template);
// Парсим теги системных блоков
//-- Парсим теги системных блоков
$main_template = preg_replace_callback('/\[tag:sysblock:([A-Za-z0-9-_]{1,20}+)\]/', 'parse_sysblock', $main_template);
//-- Заменяем тег пагинации на пагинацию
$main_template = str_replace('[tag:pages]', $pagination, $main_template);
//-- Дата
$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.'));
@ -973,17 +994,27 @@ function request_parse($id, $params = array())
$main_template
);
//-- 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);
//-- Имя автора
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);
//-- Время - 1 день назад
$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);
//-- Домен
$main_template = str_replace('[tag:domain]', getSiteUrl(), $main_template);
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);
}
//-- Общее число элементов запроса
$main_template = str_replace('[tag:doctotal]', $num_items, $main_template);
//-- Показано элементов запроса на странице
@ -991,13 +1022,17 @@ function request_parse($id, $params = array())
//-- Номер страницы пагинации
$main_template = str_replace('[tag:pages:curent]', get_current_page('apage'), $main_template);
//-- Общее кол-во страниц пагинации
$main_template = str_replace('[tag:pages:total]', $num_pages, $main_template);
//-- Title
$main_template = str_replace('[tag:pagetitle]', stripslashes(htmlspecialchars_decode($AVE_Core->curentdoc->document_title)), $main_template);
//-- Alias
$main_template = str_replace('[tag:alias]', (isset($AVE_Core->curentdoc->document_alias) ? $AVE_Core->curentdoc->document_alias : ''), $main_template);
// Возвращаем параметр документа из БД
//-- Возвращаем параметр документа из БД
$main_template = preg_replace_callback('/\[tag:doc:([a-zA-Z0-9-_]+)\]/u',
function ($match)
{
@ -1008,7 +1043,7 @@ function request_parse($id, $params = array())
$main_template
);
// Если пришел вызов на активацию языковых файлов
//-- Если пришел вызов на активацию языковых файлов
$main_template = preg_replace_callback(
'/\[tag:langfile:([a-zA-Z0-9-_]+)\]/u',
function ($match)
@ -1020,29 +1055,32 @@ function request_parse($id, $params = array())
$main_template
);
// Вставляем элементы запроса
//-- Вставляем элементы запроса
$return = str_replace('[tag:content]', $items, $main_template);
// Парсим тег [hide]
//-- Парсим тег [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));
//-- Фиксируем время генерации запроса
$GLOBALS['block_generate']['REQUESTS'][$id][] = Debug::endTime('request_' . $id);
// Статистика
if ($request->request_show_statistic)
$return .= "<div class=\"request_statistic\"><br>Найдено: $num_items<br>Показано: $items_count<br>Время генерации: " . Debug::endTime('request_' . $id) . " сек<br>Пиковое значение: ".number_format(memory_get_peak_usage()/1024, 0, ',', ' ') . ' Kb</div>';
return $return;
}
}
/**
/**
* Функция получения содержимого поля для обработки в шаблоне запроса
* <pre>
* Пример использования в шаблоне:
@ -1061,16 +1099,18 @@ function request_parse($id, $params = array())
* содержимое поля будет очищено от HTML-тегов.
* @return string
*/
function request_get_document_field_value($rubric_id, $document_id, $maxlength = 0)
{
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 '';
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'] : '';
$field_value = isset($document_fields[$rubric_id])
? $document_fields[$rubric_id]['field_value']
: '';
if (!empty($field_value))
if (! empty($field_value))
{
$field_value = strip_tags($field_value, '<br /><strong><em><p><i>');
$field_value = str_replace('[tag:mediapath]', ABS_PATH . 'templates/' . ((defined('THEME_FOLDER') === false) ? DEFAULT_THEME_FOLDER : THEME_FOLDER) . '/', $field_value);
@ -1090,5 +1130,5 @@ function request_get_document_field_value($rubric_id, $document_id, $maxlength =
}
return $field_value;
}
}
?>

9
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;
}

21
inc/config.php

@ -11,9 +11,9 @@
* @license GPL v.2
*/
@define('APP_NAME', 'AVE.CMS');
@define('APP_VERSION', '3.22');
@define('APP_INFO', '<a target="_blank" href="http://www.ave-cms.ru/">Ave-Cms.Ru</a> '.'&copy; 2007-' . date('Y'));
@define('APP_NAME', 'AVE.cms');
@define('APP_VERSION', '3.24');
@define('APP_INFO', '<a target="_blank" href="https://www.ave-cms.ru/">Ave-Cms.Ru</a> '.'&copy; 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']);
}
?>

18
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;
?>

2
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', '<h1>[tag:fld:header]</h1>[tag:fld:text]', 1, 1, 0, 1, '', '', '', '', '', '', '0', '', '0', '');#inst#
(1, 'Основные страницы', '', '0', '<h1>[tag:fld:header]</h1>[tag:fld:text]', 1, 1, 0, 1, '', '', '', '', '', '', '', '0', '', '0', '');#inst#
INSERT INTO `%%PRFX%%_settings` VALUES
(

59
install/structure_base.sql

@ -7,7 +7,8 @@ CREATE TABLE `%%PRFX%%_blocks` (
`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`)
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',
`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` (

Loading…
Cancel
Save