Browse Source

Fixes

master
M@d D3n 6 years ago
parent
commit
19416872ff
  1. 1
      admin/lang/ru/dbactions.txt
  2. 5
      admin/lang/ru/request.txt
  3. 326
      admin/settings.php
  4. 8
      admin/templates/dbactions/actions.tpl
  5. 2
      admin/templates/modules/modules.tpl
  6. 4
      admin/templates/request/form.tpl
  7. 1
      admin/templates/rubs/_field_code.tpl
  8. 2
      admin/templates/rubs/form.tpl
  9. 4
      admin/templates/rubs/tmpls.tpl
  10. 6
      admin/templates/settings/pagination_edit.tpl
  11. 7
      admin/templates/settings/settings_main.tpl
  12. 6
      admin/templates/settings/settings_pagination.tpl
  13. 420
      class/class.core.php
  14. 187
      class/class.database.php
  15. 23
      class/class.dbdump.php
  16. 13
      class/class.debug.php
  17. 7005
      class/class.docs.php
  18. 3
      class/class.modules.php
  19. 49
      class/class.navigation.php
  20. 21
      class/class.paginations.php
  21. 109
      class/class.porter.php
  22. 205
      class/class.request.php
  23. 836
      class/class.rubs.php
  24. 1139
      class/class.settings.php
  25. 599
      class/class.template.php
  26. 76
      class/class.templates.php
  27. 121
      class/class.utm.php
  28. 29
      fields/multi_line/field.php
  29. 34
      fields/multi_line_simple/field.php
  30. 39
      fields/multi_line_slim/field.php
  31. 224
      fields/tags/field.php
  32. 4
      fields/tags/lang/ru.txt
  33. 9
      fields/tags/tpl/field-doc.tpl
  34. 5
      fields/tags/tpl/field-req.tpl
  35. 26
      fields/tags/tpl/field.tpl
  36. 4
      functions/func.breadcrumbs.php
  37. 100
      functions/func.common.php
  38. 47
      functions/func.documents.php
  39. 69
      functions/func.fields.php
  40. 31
      functions/func.navigation.php
  41. 202
      functions/func.parserequest.php
  42. 367
      functions/func.watermarks.php
  43. 4
      inc/config.php
  44. 16
      inc/init.php
  45. 24
      inc/sitemap.php
  46. 2
      index.php
  47. 12
      install/data_base.sql
  48. 24
      install/index.php
  49. 63
      install/structure_base.sql
  50. 33
      templates/default/css/styles.css
  51. 267
      tmp/update/sql.update.php

1
admin/lang/ru/dbactions.txt

@ -45,3 +45,4 @@ DB_ACTIONS_DELETE_H = "Удалить файл"
DB_ACTIONS_DELETE_T = "Вы уверены, что хотите удалить файл резервной копии базы данных?"
DB_NO_FILES_MESS = "В настоящий момент, нет файлов резервных копий базы данных"
DB_BACKUP_FILE_NAME = "Имя файла:"

5
admin/lang/ru/request.txt

@ -193,4 +193,7 @@ REQUEST_OTHER = "Прочее"
REQUEST_SHOW_SQL = "Показать SQL запрос"
REQUEST_DOC_ON_PAGE = "Число элементов запроса на странице"
REQUEST_PAGES_CURENT = "Номер страницы пагинации"
REQUEST_PAGES_TOTAL = "Общее кол-во страниц пагинации"
REQUEST_PAGES_TOTAL = "Общее кол-во страниц пагинации"
// v 3.24
REQUEST_COUNT_ITEMS = "Получать кол-во элементов (если не используется постраничная навигация)"

326
admin/settings.php

@ -1,186 +1,186 @@
<?php
/**
* AVE.cms
*
* @package AVE.cms
* @version 3.x
* @filesource
* @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru
*
* @license GPL v.2
*/
if (!defined('ACP'))
{
header('Location:index.php');
exit;
}
global $AVE_Template;
require(BASE_DIR . '/class/class.docs.php');
require(BASE_DIR . '/class/class.settings.php');
$AVE_Settings = new AVE_Settings;
$AVE_Document = new AVE_Document;
$AVE_Template->config_load(BASE_DIR . '/admin/lang/' . $_SESSION['admin_language'] . '/settings.txt','settings');
switch($_REQUEST['action'])
{
case '':
switch ($_REQUEST['sub'])
{
case '':
if(check_permission_acp('gen_settings'))
/**
* AVE.cms
*
* @package AVE.cms
* @version 3.x
* @filesource
* @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru
*
* @license GPL v.2
*/
if (!defined('ACP'))
{
header('Location:index.php');
exit;
}
global $AVE_Template;
require(BASE_DIR . '/class/class.docs.php');
require(BASE_DIR . '/class/class.settings.php');
$AVE_Settings = new AVE_Settings;
$AVE_Document = new AVE_Document;
$AVE_Template->config_load(BASE_DIR . '/admin/lang/' . $_SESSION['admin_language'] . '/settings.txt','settings');
switch($_REQUEST['action'])
{
case '':
switch ($_REQUEST['sub'])
{
$AVE_Settings->settingsShow();
break;
}
case 'case':
if(check_permission_acp('gen_settings_more'))
{
$AVE_Settings->settingsCase();
break;
}
case '':
if(check_permission_acp('gen_settings'))
{
$AVE_Settings->settingsShow();
break;
}
case 'save':
if (isset($_REQUEST['more'])) {
if(check_permission_acp('gen_settings_more')) $AVE_Settings->settingsCase();
} else {
if(check_permission_acp('gen_settings')) $AVE_Settings->settingsSave();
case 'case':
if(check_permission_acp('gen_settings_more'))
{
$AVE_Settings->settingsCase();
break;
}
break;
case 'countries':
if(check_permission_acp('gen_settings_countries'))
{
if (isset($_REQUEST['save']) && $_REQUEST['save'] == 1)
case 'save':
if (isset($_REQUEST['more'])) {
if(check_permission_acp('gen_settings_more')) $AVE_Settings->settingsCase();
} else {
if(check_permission_acp('gen_settings')) $AVE_Settings->settingsSave();
}
break;
case 'countries':
if(check_permission_acp('gen_settings_countries'))
{
$AVE_Settings->settingsCountriesSave();
if (isset($_REQUEST['save']) && $_REQUEST['save'] == 1)
{
$AVE_Settings->settingsCountriesSave();
header('Location:index.php?do=settings&sub=countries&cp=' . SESSION);
exit;
header('Location:index.php?do=settings&sub=countries&cp=' . SESSION);
exit;
}
$AVE_Settings->settingsCountriesList();
break;
}
$AVE_Settings->settingsCountriesList();
break;
}
case 'language':
if(check_permission_acp('gen_settings_languages'))
{
if(isset($_REQUEST['func'])){
switch($_REQUEST['func'])
{
case 'default':
if(isset($_REQUEST['Id'])){
$exists=$AVE_DB->Query("SELECT Id FROM ".PREFIX."_settings_lang WHERE Id=".(int)$_REQUEST['Id'])->GetCell();
if($exists){
$AVE_DB->Query("UPDATE ".PREFIX."_settings_lang SET lang_default=0");
$AVE_DB->Query("UPDATE ".PREFIX."_settings_lang SET lang_default=1 WHERE Id=".(int)$_REQUEST['Id']." LIMIT 1");
case 'language':
if(check_permission_acp('gen_settings_languages'))
{
if(isset($_REQUEST['func'])){
switch($_REQUEST['func'])
{
case 'default':
if(isset($_REQUEST['Id'])){
$exists=$AVE_DB->Query("SELECT Id FROM ".PREFIX."_settings_lang WHERE Id=".(int)$_REQUEST['Id'])->GetCell();
if($exists){
$AVE_DB->Query("UPDATE ".PREFIX."_settings_lang SET lang_default=0");
$AVE_DB->Query("UPDATE ".PREFIX."_settings_lang SET lang_default=1 WHERE Id=".(int)$_REQUEST['Id']." LIMIT 1");
}
}
}
header('Location:index.php?do=settings&sub=language&cp=' . SESSION);
exit;
case 'on':
if(isset($_REQUEST['Id'])){
$AVE_DB->Query("UPDATE ".PREFIX."_settings_lang SET lang_status=1 WHERE Id=".(int)$_REQUEST['Id']);
}
header('Location:index.php?do=settings&sub=language&cp=' . SESSION);
exit;
case 'off':
if(isset($_REQUEST['Id'])){
$AVE_DB->Query("UPDATE ".PREFIX."_settings_lang SET lang_status=0 WHERE Id=".(int)$_REQUEST['Id']);
}
header('Location:index.php?do=settings&sub=language&cp=' . SESSION);
exit;
case 'save':
$AVE_Settings->settingsLanguageEditSave();
exit;
header('Location:index.php?do=settings&sub=language&cp=' . SESSION);
exit;
case 'on':
if(isset($_REQUEST['Id'])){
$AVE_DB->Query("UPDATE ".PREFIX."_settings_lang SET lang_status=1 WHERE Id=".(int)$_REQUEST['Id']);
}
header('Location:index.php?do=settings&sub=language&cp=' . SESSION);
exit;
case 'off':
if(isset($_REQUEST['Id'])){
$AVE_DB->Query("UPDATE ".PREFIX."_settings_lang SET lang_status=0 WHERE Id=".(int)$_REQUEST['Id']);
}
header('Location:index.php?do=settings&sub=language&cp=' . SESSION);
exit;
case 'save':
$AVE_Settings->settingsLanguageEditSave();
exit;
}
}
else
{
$AVE_Settings->settingsLanguageList();
break;
}
}
else
case 'editlang':
if (check_permission_acp('gen_settings_languages'))
{
$AVE_Settings->settingsLanguageList();
$AVE_Settings->settingsLanguageEdit();
break;
}
}
case 'editlang':
if(check_permission_acp('gen_settings_languages'))
{
$AVE_Settings->settingsLanguageEdit();
break;
}
case 'clearcache':
if (check_permission_acp('cache_clear'))
{
$AVE_Template->CacheClear();
exit;
}
case 'clearcache':
if(check_permission_acp('cache_clear'))
{
$AVE_Template->CacheClear();
exit;
}
case 'clearthumb':
if (check_permission_acp('cache_thumb'))
{
$AVE_Template->ThumbnailsClear();
exit;
}
case 'clearthumb':
if(check_permission_acp('cache_thumb'))
{
$AVE_Template->ThumbnailsClear();
exit;
}
case 'clearrevision':
if (check_permission_acp('document_revisions'))
{
$AVE_Document->documentsRevisionsClear();
exit;
}
case 'clearrevision':
if(check_permission_acp('document_revisions'))
{
$AVE_Document->documentsRevisionsClear();
exit;
}
case 'clearcounter':
if (check_permission_acp('gen_settings'))
{
$AVE_Document->documentCounterClear();
exit;
}
case 'clearcounter':
if(check_permission_acp('gen_settings'))
{
$AVE_Document->documentCounterClear();
exit;
case 'showcache':
cacheShow();
exit;
}
case 'showcache':
cacheShow();
exit;
}
break;
//-- v3.2
case 'paginations':
$AVE_Settings->settingsPaginationsList();
break;
case 'new_paginations':
$AVE_Settings->settingsPaginationsNew();
break;
case 'edit_paginations':
$AVE_Settings->settingsPaginationsEdit();
break;
case 'save_paginations':
$AVE_Settings->settingsPaginationsSave();
break;
case 'del_paginations':
$AVE_Settings->settingsPaginationsDel();
break;
//-- v3.2
//-- v3.24
case 'robots':
$AVE_Settings->editRobots();
break;
case 'custom':
$AVE_Settings->editCustom();
break;
//-- v3.24
}
break;
//-- v3.2
case 'paginations':
$AVE_Settings->settingsPaginationsList();
break;
case 'new_paginations':
$AVE_Settings->settingsPaginationsNew();
break;
case 'edit_paginations':
$AVE_Settings->settingsPaginationsEdit();
break;
case 'save_paginations':
$AVE_Settings->settingsPaginationsSave();
break;
case 'del_paginations':
$AVE_Settings->settingsPaginationsDel();
break;
//-- v3.2
//-- v3.24
case 'robots':
$AVE_Settings->editRobots();
break;
case 'custom':
$AVE_Settings->editCustom();
break;
//-- v3.24
}
?>

8
admin/templates/dbactions/actions.tpl

@ -53,6 +53,14 @@
<div class="fix mt10"><input type="checkbox" name="server" value="1" class="float" /><label>{#DB_BACKUP_SERVER#}</label></div>
</td>
</tr>
<tr>
<td>
{#DB_BACKUP_FILE_NAME#}
</td>
<td colspan="3">
<input type="text" name="file_name" value="" />
</td>
</tr>
</tbody>
</table>
<div class="rowElem">

2
admin/templates/modules/modules.tpl

@ -128,7 +128,7 @@ $(document).ready(function(){ldelim}
</td>
<td align="center" width="20">
{if $module.status}
{if $module.ModuleStatus}
<a title="{#MODULES_REINSTALL#}" href="index.php?do=modules&action=reinstall&module={$module.ModuleSysName}&cp={$sess}" class="topleftDir ConfirmReInstall icon_sprite ico_reinstall"></a>
{else}
<a title="{#MODULES_DELETE#}" dir="{#MODULES_DELETE#}" name="{#MODULES_DELETE_CONFIRM#}" href="index.php?do=modules&action=delete&module={$module.ModuleSysName}&cp={$sess}" class="topleftDir ConfirmDelete icon_sprite ico_delete"></a>

4
admin/templates/request/form.tpl

@ -288,8 +288,10 @@ function changeRub(select) {ldelim}
</td>
</tr>
<tr>
<td>{#REQUEST_COUNT_ITEMS#}</td>
<td><input class="mousetrap float" name="request_count_items" type="checkbox" id="request_count_items" value="1"{if $row->request_count_items == '1'} checked="checked"{/if} /><label>&nbsp;</label></td>
<td>{#REQUEST_USE_QUERY#}</td>
<td colspan="3"><input class="mousetrap float" name="request_use_query" type="checkbox" id="request_use_query" value="1"{if $row->request_use_query == '1'} checked="checked"{/if} /><label>&nbsp;</label></td>
<td><input class="mousetrap float" name="request_use_query" type="checkbox" id="request_use_query" value="1"{if $row->request_use_query == '1'} checked="checked"{/if} /><label>&nbsp;</label></td>
</tr>
</tbody>

1
admin/templates/rubs/_field_code.tpl

@ -50,6 +50,7 @@
</div>
<input type="hidden" name="rubric_id" value="{$smarty.request.rubric_id}" />
<input type="hidden" name="func" value="{$params.func}" />
{if $params.id}
<input type="hidden" name="field_id" value="{$params.id}" />

2
admin/templates/rubs/form.tpl

@ -6,7 +6,7 @@
<div class="title">
<h5>{#RUBRIK_TEMPLATE_EDIT#}</h5>
<div class="num">
<a class="basicNum" href="index.php?do=rubs&action=tmpls&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TMPLS_BUTTON#}</a>
<a class="basicNum greenNum" href="index.php?do=rubs&action=tmpls&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TMPLS_BUTTON#}</a>
</div>
</div>
{/if}

4
admin/templates/rubs/tmpls.tpl

@ -36,7 +36,7 @@ $(document).ready(function(){ldelim}
<div class="title">
<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>
<a class="basicNum greenNum" href="index.php?do=rubs&action=template&Id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIK_EDIT_TEMPLATE#}</a>
</div>
</div>
@ -90,7 +90,7 @@ $(document).ready(function(){ldelim}
<li class="activeTab"><a href="#tab1">{#RUBRIC_TMPLS_HEAD#}</a></li>
{if check_permission('rubric_edit')}<li class=""><a href="#tab2">{#RUBRIC_TMPLS_ADD#}</a></li>{/if}
<div class="num">
<a class="basicNum" href="index.php?do=rubs&action=tmpls_from&rubric_id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TMPLS_FROM#}</a>
<a class="basicNum greenNum" href="index.php?do=rubs&action=tmpls_from&rubric_id={$smarty.request.Id|escape}&cp={$sess}">{#RUBRIC_TMPLS_FROM#}</a>
</div>
</ul>
<div class="tab_container">

6
admin/templates/settings/pagination_edit.tpl

@ -33,12 +33,6 @@
</div>
</div>
{if $smarty.const.SYSTEM_CACHE_LIFETIME > 0}
<ul class="messages first">
<li class="highlight red"><strong>{#SETTINGS_CACHE_LIFETIME#}</strong></li>
</ul>
{/if}
<div class="widget first">
<ul class="inact_tabs">
{if check_permission('gen_settings')}<li><a href="index.php?do=settings&cp={$sess}">{#SETTINGS_MAIN_SETTINGS#}</a></li>{/if}

7
admin/templates/settings/settings_main.tpl

@ -28,13 +28,8 @@
</div>
</div>
{if $smarty.const.SYSTEM_CACHE_LIFETIME > 0}
<ul class="messages first">
<li class="highlight red"><strong>{#SETTINGS_CACHE_LIFETIME#}</strong></li>
</ul>
{/if}
<form id="settings" name="settings" method="post" action="index.php?do=settings&cp={$sess}&sub=save" class="mainForm">
<fieldset>
<div class="widget first">

6
admin/templates/settings/settings_pagination.tpl

@ -28,12 +28,6 @@
</div>
</div>
{if $smarty.const.SYSTEM_CACHE_LIFETIME > 0}
<ul class="messages first">
<li class="highlight red"><strong>{#SETTINGS_CACHE_LIFETIME#}</strong></li>
</ul>
{/if}
<div class="widget first">
<ul class="inact_tabs">
{if check_permission('gen_settings')}<li><a href="index.php?do=settings&cp={$sess}">{#SETTINGS_MAIN_SETTINGS#}</a></li>{/if}

420
class/class.core.php

@ -108,21 +108,21 @@
if (is_numeric($template_id))
{
$cache = 'template_' . $template_id;
$cache_file = BASE_DIR . '/tmp/cache/templates/' . $cache . '.inc';
$cache_file = BASE_DIR . '/templates/' . DEFAULT_THEME_FOLDER . '/include/templates/' . $template_id . '/template.inc';
// Если включен DEV MODE, то отключаем кеширование
if (defined('DEV_MODE') AND DEV_MODE)
$cache_file = null;
if (! file_exists(dirname($cache_file)))
mkdir(dirname($cache_file), 0766, true);
if (! is_dir(dirname($cache_file)))
@mkdir(dirname($cache_file), 0766, true);
if (file_exists($cache_file))
// Если файл есть и он не пустой используем его
if (file_exists($cache_file) && filesize($cache_file))
{
$return = file_get_contents($cache_file);
}
// Иначе лезем в БД и достаем шаблон
else
{
$return = $AVE_DB->Query("
@ -137,6 +137,7 @@
$return = stripslashes($return);
// Сохраняем в файл
if ($cache_file)
file_put_contents($cache_file, $return);
}
@ -434,22 +435,6 @@
}
/**
* Метод, предназначенный для формирования хэша страницы
*
* @return string
*/
function _get_cache_hash()
{
$hash = 'g-' . UGROUP;
$hash .= 'r-' . RUB_ID;
$hash .= 'u-' . get_redirect_link();
$hash .= 't-' . $this->curentdoc->rubric_tmpl_id;
return md5($hash);
}
/**
* Метод, предназначенный для проверки существования документа в БД
*
@ -747,12 +732,6 @@
$main_content
);
// Удаляем ошибочные теги полей документа в шаблоне рубрики
$main_content = preg_replace('/\[tag:watermark:\w*\]/', '', $main_content);
$main_content = preg_replace('/\[tag:fld:\d*\]/', '', $main_content);
$main_content = preg_replace('/\[tag:doc:\w*\]/', '', $main_content);
$main_content = preg_replace('/\[tag:langfile:\w*\]/', '', $main_content);
// парсим теги в шаблоне рубрики
$main_content = preg_replace_callback(
'/\[tag:date:([a-zA-Z0-9-. \/]+)\]/',
@ -769,47 +748,132 @@
if (preg_match('[tag:docauthor]', $main_content))
$main_content = str_replace('[tag:docauthor]', get_username_by_id($this->curentdoc->document_author_id), $main_content);
if (CACHE_DOC_TPL && empty($_POST))
// Удаляем ошибочные теги полей документа в шаблоне рубрики
$main_content = preg_replace('/\[tag:watermark:\w*\]/', '', $main_content);
$main_content = preg_replace('/\[tag:fld:\w*\]/', '', $main_content);
$main_content = preg_replace('/\[tag:doc:\w*\]/', '', $main_content);
$main_content = preg_replace('/\[tag:langfile:\w*\]/', '', $main_content);
//-- Кеширование скомпилированного документа
$this->setCompileDocument($main_content);
return $main_content;
}
/**
* Метод, предназначенный для формирования хэша страницы
*
* @return string
*/
function _get_cache_hash()
{
$hash = 'g-' . UGROUP; // Группа пользователей
$hash .= 'r-' . RUB_ID; // ID Рубрики
$hash .= 't-' . $this->curentdoc->rubric_tmpl_id; // Шаблон рубрики
//$hash .= 'u-' . get_redirect_link(); // ToDo
return md5($hash);
}
function _get_cache_id()
{
$cache = array();
$cache['id'] = (int)$this->curentdoc->Id;
if (! $cache['id'])
return false;
$cache['id'] = (int)$cache['id'];
$cache['id'] = 'documents/compiled/' . (floor($cache['id'] / 1000)) . '/' . $cache['id'];
$cache['file'] = $this->_get_cache_hash() . '.compiled';
if (! $cache['file'])
return false;
$cache['dir'] = BASE_DIR . '/tmp/cache/sql/' . (trim($cache['id']) > ''
? trim($cache['id']) . '/'
: substr($cache['file'], 0, 2) . '/' . substr($cache['file'], 2, 2) . '/' . substr($cache['file'], 4, 2) . '/');
return $cache;
}
function setCompileDocument ($main_content)
{
$cache = $this->_get_cache_id();
if (! $cache)
return false;
//-- Удаляем файл, если существует
if (file_exists($cache['dir'] . $cache['file']))
unlink($cache['dir'] . $cache['file']);
// Если включен DEV MODE, то отключаем кеширование запросов
if (defined('DEV_MODE') AND DEV_MODE)
return false;
//-- Кэширование разрешено
if (defined('CACHE_DOC_TPL') && CACHE_DOC_TPL)
{
$cache_id = (int)$this->curentdoc->Id;
$cache_id = 'compiled/' . (floor($cache_id / 1000)) . '/' . $cache_id;
//-- Если нет папки, создаем
if (! is_dir($cache['dir']))
@mkdir($cache['dir'], 0766, true);
$cache_file = $this->_get_cache_hash();
//-- Сохраняем скомпилированный шаблон в кэш
file_put_contents($cache['dir'] . $cache['file'], $main_content);
}
$cache_dir = BASE_DIR . '/tmp/cache/sql/' . (trim($cache_id) > ''
? trim($cache_id) . '/'
: substr($cache_file, 0, 2) . '/' . substr($cache_file, 2, 2) . '/' . substr($cache_file, 4, 2) . '/');
return true;
}
// кэширование разрешено
// сохраняем скомпилированный шаблон в кэш
if (CACHE_DOC_FILE)
{
if (! is_dir($cache_dir))
mkdir($cache_dir, 0766, true);
file_put_contents($cache_dir . $cache_file, $main_content);
}
function getCompileDocument ()
{
$cache = $this->_get_cache_id();
// кэширование разрешено
// сохраняем скомпилированный шаблон в кэш
$AVE_DB->Query("
INSERT INTO
" . PREFIX . "_rubric_template_cache
SET
hash = '" . $cache_file . "',
rub_id = '" . RUB_ID . "',
rub_tmpl_id = '" . $this->curentdoc->rubric_tmpl_id . "',
grp_id = '" . UGROUP . "',
doc_id = '" . $id . "',
compiled = '" . addslashes($main_content) . "'
");
if (! $cache)
return false;
$content = false;
//-- Если нет папки, создаем
if (! is_dir($cache['dir']))
@mkdir($cache['dir'], 0766, true);
//-- Получаем сразу поля
get_document_fields((int)$this->curentdoc->Id);
unset ($cache_id, $cache_file, $cache_dir);
// Наличие файла
if (file_exists($cache['dir'] . $cache['file']))
{
// Получаем время создания файла
$file_time = filemtime($cache['dir'] . $cache['file']);
// Получаем время для проверки
$cache_time = $this->curentdoc->rubric_changed;
if (! $cache_time || $cache_time > $file_time)
{
unlink ($cache['dir'] . $cache['file']);
}
else if (defined('CACHE_DOC_TPL') && CACHE_DOC_TPL)
// Извлекаем скомпилированный шаблон документа из кэша
$content = file_get_contents($cache['dir'] . $cache['file']);
}
else
{
$content = false;
}
return $main_content;
return $content;
}
/**
* Метод, предназначенный для обработки системных тегов модулей. Здесь подключаются только те файлы модулей,
* системные теги которых обнаружены в шаблоне при парсинге. Также формирует массив всех установленных модулей
@ -1119,44 +1183,12 @@
}
}
if (CACHE_DOC_TPL && empty ($_POST))
{
// Кэширование разрешено
// Извлекаем скомпилированный шаблон документа из кэша
// Если там пусто, пробуем достать из бд
$cache_id = (int)$this->curentdoc->Id;
$cache_id = 'compiled/' . (floor($cache_id / 1000)) . '/' . $cache_id;
$cache_file = $this->_get_cache_hash();
$cache_dir = BASE_DIR . '/tmp/cache/sql/' . (trim($cache_id) > ''
? trim($cache_id) . '/'
: substr($cache_file, 0, 2) . '/' . substr($cache_file, 2, 2) . '/' . substr($cache_file, 4, 2) . '/');
if (CACHE_DOC_FILE && file_exists($cache_dir . $cache_file))
{
$main_content = file_get_contents($cache_dir . $cache_file);
}
else
{
$main_content = $AVE_DB->Query("
SELECT
compiled
FROM
" . PREFIX . "_rubric_template_cache
WHERE
hash = '" . $cache_file . "'
LIMIT 1
")->GetCell();
}
unset($cache_dir, $cache_file, $cache_id);
}
// Извлекаем скомпилированный шаблон документа из кэша
if (defined('CACHE_DOC_TPL') && CACHE_DOC_TPL) // && empty ($_POST)
$main_content = $this->getCompileDocument();
else
{ // Кэширование запрещено
// Кэширование запрещено
$main_content = false;
}
// Собираем контент
// Если в кеше нет контента, то
@ -1203,15 +1235,11 @@
// Собираем шаблон рубрики
if (empty($rubTmpl))
{
// Если не задан шаблон рубрики, выводим сообщение
$main_content = $this->_rubric_template_empty;
}
else
{
// Обрабатываем основные поля рубрики
$main_content = $this->_main_content($main_content, $id, $rubTmpl);
}
}
}
@ -1253,7 +1281,7 @@
// Парсим поля запроса
$out = preg_replace_callback(
'/\[tag:rfld:([a-zA-Z0-9-_]+)]\[(more|esc|img|[0-9-]+)]/',
'/\[tag:rfld:([a-zA-Z0-9-_]+)]\[(more|esc|img|strip|[0-9-]+)]/',
create_function(
'$m',
'return request_get_document_field($m[1], ' . $id . ', $m[2], ' . (defined('RUB_ID') ? RUB_ID : 0) . ');'
@ -1262,7 +1290,7 @@
);
// Удаляем ошибочные теги полей документа в шаблоне рубрики
$out = preg_replace('/\[tag:rfld:\d*\]/', '', $out);
$out = preg_replace('/\[tag:rfld:\w*\]/', '', $out);
// Если в GET запросе пришел параметр print, т.е. страница для печати,
// парсим контент, который обрамлен тегами только для печати
@ -1544,7 +1572,7 @@
{
global $AVE_DB;
// Если нужны параметры GET, можно отключить
//-- Если нужны параметры GET, можно отключить
$get_url = (strpos($get_url, ABS_PATH . '?') === 0
? ''
: $get_url);
@ -1555,15 +1583,18 @@
$get_url = rawurldecode($get_url);
$get_url = mb_substr($get_url, strlen(ABS_PATH));
// Сохранение старого урла для првоерки использования суффикса
$test_url = $get_url;
//-- Сохранение старого урла для првоерки использования суффикса
$check_url = $get_url;
if (mb_substr($get_url, - strlen(URL_SUFF)) == URL_SUFF)
{
$get_url = mb_substr($get_url, 0, - strlen(URL_SUFF));
}
// Разбиваем строку параметров на отдельные части
//-- Ложный URL
$fake_url = false;
//-- Разбиваем строку параметров на отдельные части
$get_url = explode('/', $get_url);
if (isset ($get_url['index']))
@ -1577,7 +1608,7 @@
unset ($get_url['print']);
}
// Определяем, используется ли у нас разделение документа по страницам
//-- Определяем, используется ли у нас разделение документа по страницам
$pages = preg_grep('/^(a|art)?page-\d+$/i', $get_url);
if (! empty ($pages))
@ -1594,18 +1625,62 @@
$pages
);
}
// В противном случае формируем окончательную ссылку для документа
//-- В противном случае формируем окончательную ссылку для документа
else
{
$get_url = implode('/', $get_url);
}
//-- Страница тегов
preg_match('/^tags(|(\/.*))+$/is', $get_url, $match);
//-- Если есть совпадение с tag
if ($match)
{
//-- Смотрим условие
if (isset($match[2]))
{
//-- Отрезаем лишнее
$matches = trim($match[2], '/');
//-- Разбиваем
$matches = explode('/', $matches);
//-- Берем первое значение
$matches = urldecode(array_shift($matches));
//-- Если значение не равно пусто
if ($matches != '')
{
//-- Передаем в _GET условие tag
$_GET['tag'] = $_REQUEST['tag'] = $matches;
//-- Парсим query strings
parse_str($_SERVER['QUERY_STRING'], $query_string);
//-- Назначаем условие
$query_string['tag'] = $matches;
//-- Пересобираем QUERY_STRING
$_SERVER['QUERY_STRING'] = http_build_query($query_string);
//-- Назначаем URL
$get_url = 'tags';
//-- Инициализируем ложный URL
$fake_url = true;
}
}
}
//-- Экранируем поступающий URL
$get_url = $AVE_DB->ClearUrl($get_url);
//-- Проверяем есть ли данный URL в таблице алиасов модулей
$sql = "
SELECT
# MODULE LINK
document_id,
module_name,
module_action,
module_link
@ -1615,18 +1690,24 @@
module_url = '" . str_ireplace("'", "\'", $get_url) . "'
";
$query = $AVE_DB->Query($sql)->FetchRow();
$module = $AVE_DB->Query($sql)->FetchAssocArray();
if ($query)
if ($module)
{
//-- Передаем глобальные перемененные
$_GET['module'] = $_REQUEST['module'] = $query->module_name;
$_GET['action'] = $_REQUEST['action'] = $query->module_action;
$_GET['module'] = $_REQUEST['module'] = $module['module_name'];
$_GET['action'] = $_REQUEST['action'] = $module['module_action'];
$get_url = ABS_PATH . $query->module_link;
$get_url = ABS_PATH . $module['module_link'];
//-- Если есть document_id, назначем его
if ($module['document_id'])
$_REQUEST['id'] = (int)$module['document_id'];
}
// проверка на наличие id в запросе
unset ($sql, $module);
//-- Проверка на наличие id в запросе
if (! empty($_REQUEST['id']))
{
$get_url = $AVE_DB->Query("
@ -1646,67 +1727,98 @@
? intval($_REQUEST['id'])
: 1);
// Забираем нужные данные
//-- Забираем нужные данные
$sql = "
SELECT
doc.*,
rubric_permission,
rubric_template,
rubric_meta_gen,
rubric_template_id,
rub.rubric_header_template,
rub.rubric_footer_template,
rub.rubric_start_code,
other.template
# URL FETCH = $get_url
*
FROM
" . PREFIX . "_documents AS doc
JOIN
" . PREFIX . "_rubrics AS rub
ON rub.Id = doc.rubric_id
JOIN
" . PREFIX . "_rubric_permissions AS prm
ON doc.rubric_id = prm.rubric_id
LEFT JOIN
" . PREFIX . "_rubric_templates AS other
ON doc.rubric_id = other.rubric_id AND doc.rubric_tmpl_id = other.id
" . PREFIX . "_documents
WHERE
user_group_id = '" . UGROUP . "'
AND
" . (! empty ($get_url) && ! isset($_REQUEST['module'])
? "document_alias = '" . str_ireplace("'", "\'", $get_url) . "'"
: (! empty($_REQUEST['id'])
? "doc.Id =" . intval($_REQUEST['id'])
: "doc.Id = 1")) . "
? "Id =" . intval($_REQUEST['id'])
: "Id = 1")) . "
LIMIT 1
";
$hash_url = md5($get_url);
$query = $AVE_DB->Query($sql, CACHE_DOC_SQL, 'url_' . $hash_url);
$cache_time = 0;
if (defined('CACHE_DOC_FILE') && CACHE_DOC_FILE)
$cache_time = -1;
else
$AVE_DB->clearCacheUrl('url_' . $hash_url);
$this->curentdoc = $AVE_DB->Query($sql, $cache_time, 'url_' . $hash_url, true, '.fetch')->FetchRow();
if ($this->curentdoc = $query->FetchRow())
if ($this->curentdoc)
{
// Получить шаблон рубрики
$sql = "
SELECT STRAIGHT_JOIN
# FETCH RUB = " . $this->curentdoc->rubric_id . "
prm.rubric_permission,
rub.rubric_template,
rub.rubric_meta_gen,
rub.rubric_template_id,
rub.rubric_header_template,
rub.rubric_footer_template,
rub.rubric_start_code,
rub.rubric_changed,
rub.rubric_changed_fields,
other.template
FROM
" . PREFIX . "_rubrics AS rub
LEFT JOIN
" . PREFIX . "_rubric_permissions AS prm
ON rub.Id = prm.rubric_id
LEFT JOIN
" . PREFIX . "_rubric_templates AS other
ON (rub.Id = other.rubric_id AND other.id = '" . $this->curentdoc->rubric_tmpl_id . "')
WHERE
prm.user_group_id = '" . UGROUP . "'
AND
rub.Id = '" . $this->curentdoc->rubric_id . "'
";
$query = $AVE_DB->Query($sql, $cache_time, 'rub_' . $this->curentdoc->rubric_id, true, '.fetch')->FetchRow();
$this->curentdoc = (object) array_merge((array) $query, (array) $this->curentdoc);
if ($this->curentdoc->rubric_tmpl_id != 0)
{
$this->curentdoc->rubric_template = (($this->curentdoc->template != '')
? $this->curentdoc->template
: $this->curentdoc->rubric_template);
unset($this->curentdoc->template);
unset ($this->curentdoc->template);
}
// Глобальные переменные
//-- Глобальные переменные
$_GET['id'] = $_REQUEST['id'] = $this->curentdoc->Id;
$_GET['doc'] = $_REQUEST['doc'] = $this->curentdoc->document_alias;
// Назначаем язык пользователю, в завивисомтси от языка документа
//-- Назначаем язык пользователю, в завивисомтси от языка документа
if ($this->curentdoc->Id != PAGE_NOT_FOUND_ID OR $this->curentdoc->document_lang == '--')
$_SESSION['user_language'] = $this->curentdoc->document_lang;
// Перенаправление на адреса с суффиксом
//-- Если есть ложный URL указываем его
if ($fake_url)
{
$check_url = preg_replace('/\/(a|art)?page-\d/i', '', $check_url);
$_GET['doc'] = $_REQUEST['doc'] = $check_url;
$this->curentdoc->document_alias = $check_url;
$get_url = $check_url;
}
//-- Перенаправление на адреса с суффиксом
if (
$test_url !== $get_url . URL_SUFF
&& ! $pages && $test_url
$check_url !== $get_url . URL_SUFF
&& ! $pages && $check_url
&& ! $_REQUEST['print']
&& ! $_REQUEST['module']
&& ! $_REQUEST['tag']
@ -1716,21 +1828,20 @@
header('HTTP/1.1 301 Moved Permanently');
if ($this->curentdoc->Id == 1)
{
header('Location:' . ABS_PATH);
exit();
}
else
{
header('Location:' . ABS_PATH . $get_url . URL_SUFF);
exit();
}
exit();
}
}
else
{
$AVE_DB->clearCacheUrl('url_' . $hash_url);
$sql = "
SELECT
# REDIRECT = $get_url
a.document_alias
FROM
".PREFIX."_document_alias_history AS h,
@ -1743,12 +1854,11 @@
$redirect_alias = $AVE_DB->Query($sql)->GetCell();
$redirect_alias = ABS_PATH . $redirect_alias . URL_SUFF;
$redirect_alias = str_replace('//', '/', $redirect_alias);
if (! empty($redirect_alias))
if ($redirect_alias && ! empty($redirect_alias))
{
$redirect_alias = ABS_PATH . $redirect_alias . URL_SUFF;
$redirect_alias = str_replace('//', '/', $redirect_alias);
header('HTTP/1.1 301 Moved Permanently');
header('Location:' . $redirect_alias);
exit();

187
class/class.database.php

@ -400,6 +400,10 @@
*/
public $_last_query;
//-- Instance
protected static $instance = null;
/**
* Конструктор
*
@ -415,12 +419,12 @@
$this->db_password = $db['dbpass'];
$this->db_prefix = $db['dbpref'];
if(!isset($db['dbport']))
if (! isset($db['dbport']))
$this->db_port = ini_get ('mysqli.default_port');
else
$this->db_port = (isset($db['dbport']) ? $db['dbport'] : null);
if(!isset($db['dbsock']))
if (! isset($db['dbsock']))
$this->db_socket = ini_get ('mysqli.default_socket');
else
$this->db_port = (isset($db['dbsock']) ? $db['dbsock'] : null);
@ -511,9 +515,9 @@
* @param $db
* @return object возвращает инстанс данного класса.
*/
public static function getInstance($db = array())
public static function getInstance ($config = array())
{
return new self($db);
return new self($config);
}
@ -767,27 +771,83 @@
}
public function cacheFile($cache_id)
public function cacheId($cache_id)
{
// Если это документ, то меняем расположение
//-- Если это документ, то меняем расположение
if (substr($cache_id, 0, 3) == 'doc')
{
$cache_id = (int)str_replace('doc_', '', $cache_id);
$cache_id = 'doc/' . (floor($cache_id / 1000)) . '/' . $cache_id;
return $cache_id = 'documents/' . (floor($cache_id / 1000)) . '/' . $cache_id;
}
//-- Если это полный документ, то меняем расположение
if (substr($cache_id, 0, 3) == 'dat')
{
$cache_id = (int)str_replace('dat_', '', $cache_id);
return $cache_id = 'documents/data/' . (floor($cache_id / 1000)) . '/' . $cache_id;
}
// Если это
//-- Если это скомпилированный шаблон документа, то меняем расположение
if (substr($cache_id, 0, 3) == 'cmd')
{
$cache_id = (int)str_replace('cmd_', '', $cache_id);
return $cache_id = 'documents/compiled/' . (floor($cache_id / 1000)) . '/' . $cache_id;
}
//-- Если это поля документа, то меняем расположение
if (substr($cache_id, 0, 3) == 'fld')
{
$cache_id = (int)str_replace('fld_', '', $cache_id);
return $cache_id = 'documents/fields/' . (floor($cache_id / 1000)) . '/' . $cache_id;
}
//-- Сборка страницы
if (substr($cache_id, 0, 3) == 'url')
{
$cache_id = str_replace('url_', '', $cache_id);
$cache_id = 'url/' . substr($cache_id, 0, 3);
return $cache_id = 'documents/urls/' . substr($cache_id, 0, 3);
}
//-- Если это хлебные крошки, то меняем расположение
if (substr($cache_id, 0, 3) == 'brd')
{
$cache_id = (int)str_replace('brd_', '', $cache_id);
return $cache_id = 'documents/breadcrumbs/' . (floor($cache_id / 1000)) . '/' . $cache_id;
}
//-- Если это рубрика, то меняем расположение
if (substr($cache_id, 0, 3) == 'rub')
{
$cache_id = (int)str_replace('rub_', '', $cache_id);
return $cache_id = 'rubrics/' . $cache_id;
}
// Если это
//-- Если это запрос, то меняем расположение
if (substr($cache_id, 0, 3) == 'req')
{
$cache_id = (int)str_replace('req_', '', $cache_id);
return $cache_id = 'requests/' . $cache_id;
}
//-- Если это элемент запроса, то меняем расположение
if (substr($cache_id, 0, 3) == 'rqe')
{
$cache_id = (int)str_replace('rqe_', '', $cache_id);
return $cache_id = 'requests/elements/' . (floor($cache_id / 1000)) . '/' . $cache_id;
}
//-- Если это настройки запроса, то меняем расположение
if (substr($cache_id, 0, 3) == 'rqs')
{
$cache_id = str_replace('rqs_', '', $cache_id);
return $cache_id = 'requests/settings/' . $cache_id;
}
// -- Навигация
if (substr($cache_id, 0, 3) == 'nav')
{
$cache_id = str_replace('nav_', '', $cache_id);
$cache_id = 'nav/' . substr($cache_id, 0, 3);
$cache_id = explode('_', $cache_id);
return $cache_id = 'navigations/' . $cache_id[1];
}
return $cache_id;
@ -803,9 +863,9 @@
* @param bool $log - записать ошибки в лог? по умолчанию включено
* @return array - асоциативный массив с результом запроса
*/
public function Query($query, $TTL = null, $cache_id = '', $log = true)
public function Query ($query, $TTL = null, $cache_id = '', $log = true, $ext = '')
{
$cache_id = $this->cacheFile($cache_id);
$cache_id = $this->cacheId($cache_id);
// Принудительная фильтрация запроса
if (defined(SQL_QUERY_SANITIZE) && SQL_QUERY_SANITIZE)
@ -824,7 +884,7 @@
if ($TTL && ($TTL != 'nocache' AND $TTL != null))
{
$cache_file = md5($query);
$cache_file = md5($query) . $ext;
$cache_dir = BASE_DIR . '/tmp/cache/sql/' . (trim($cache_id) > ''
? trim($cache_id) . '/'
@ -833,13 +893,6 @@
if (! file_exists($cache_dir))
mkdir($cache_dir, 0766, true);
// Если стоит в настройках, запоминать все запросы
if (defined('SQL_PROFILING') && SQL_PROFILING)
{
$_caller = $this->getCaller();
$this->_query_list[] = array('caller' => $_caller, 'query' => $query, 'ttl' => $TTL, 'cache' => $cache_dir . $cache_file);
}
if (! (file_exists($cache_dir . $cache_file) && ($TTL == -1 ? true : time() - filemtime($cache_dir . $cache_file) < $TTL)))
{
$res = $this->Real_Query($query, $log);
@ -851,6 +904,19 @@
}
else
{
// Если стоит в настройках, запоминать все запросы
if (defined('SQL_PROFILING') && SQL_PROFILING)
{
$_caller = $this->getCaller();
$this->_query_list[] = array(
'caller' => $_caller,
'query' => $query,
'ttl' => $TTL,
'cache' => $cache_dir . $cache_file
);
}
$result = unserialize(file_get_contents($cache_dir . $cache_file));
}
@ -1024,11 +1090,13 @@
*/
public function NumAllRows($query, $TTL = null, $cache_id = '')
{
$cache_id = $this->cacheId($cache_id);
// Если включен DEV MODE, то отключаем кеширование запросов
if (defined('DEV_MODE') AND DEV_MODE)
$TTL = null;
if ($TTL AND ($TTL != "nocache" AND $TTL != null))
if ($TTL AND ($TTL != 'nocache' AND $TTL != null))
{
// Кол-во
$cache_file = md5($query) . '.count';
@ -1057,6 +1125,19 @@
}
else
{
// Если стоит в настройках, запоминать все запросы
if (defined('SQL_PROFILING') && SQL_PROFILING)
{
$_caller = $this->getCaller();
$this->_query_list[] = array(
'caller' => $_caller,
'query' => 'SELECT FOUND_ROWS();',
'ttl' => $TTL,
'cache' => $cache_dir . $cache_file
);
}
return file_get_contents($cache_dir . $cache_file);
}
}
@ -1316,11 +1397,9 @@
* @param $cache_id
* @return bool
*/
public function clearcache($cache_id)
public function clearCache($cache_id)
{
$cache_id = (substr($cache_id, 0, 3) == 'doc'
? 'doc/' . intval(floor((int)substr($cache_id, 4)) / 1000) . '/' . (int)substr($cache_id, 4)
: $cache_id);
$cache_id = $this->cacheId($cache_id);
$cache_dir = BASE_DIR . '/tmp/cache/sql/' . (trim($cache_id) > ''
? trim($cache_id) . '/'
@ -1339,26 +1418,7 @@
public function clearCacheUrl($cache_id)
{
$cache_id = str_replace('url_', '', $cache_id);
$cache_id = 'url/' . substr($cache_id, 0, 3);
$cache_dir = BASE_DIR . '/tmp/cache/sql/' . (trim($cache_id) > ''
? trim($cache_id) . '/'
: '');
return rrmdir($cache_dir);
}
/**
* Метод, предназначенный для очищения кеша документов
*
* @param $cache_id
* @return bool
*/
public function clearCacheNav($cache_id)
{
$cache_id = str_replace('nav_', '', $cache_id);
$cache_id = 'nav/' . substr($cache_id, 0, 3);
$cache_id = 'documents/urls/' . substr($cache_id, 0, 3);
$cache_dir = BASE_DIR . '/tmp/cache/sql/' . (trim($cache_id) > ''
? trim($cache_id) . '/'
@ -1374,31 +1434,10 @@
* @param $cache_id
* @return bool
*/
public function clearcacherequest($cache_id)
{
$cache_id = (substr($cache_id, 0, 3) == 'doc'
? 'request/' . (int)substr($cache_id, 4)
: $cache_id);
$cache_dir = BASE_DIR . '/tmp/cache/sql/' . (trim($cache_id) > ''
? trim($cache_id) . '/'
: '');
return rrmdir($cache_dir);
}
/**
* Метод, предназначенный для очищения кеша шаблонов
*
* @param $cache_id
* @return bool
*/
public function clearcompile($cache_id)
public function clearCacheRequest($cache_id)
{
$cache_id = (substr($cache_id, 0, 3) == 'doc'
? 'compiled/' . intval(floor((int)substr($cache_id, 4)) / 1000) . '/' . (int)substr($cache_id, 4)
: $cache_id);
$cache_id = (int)str_replace('req_', '', $cache_id);
$cache_id = 'request/' . (floor($cache_id / 1000)) . '/' . $cache_id;
$cache_dir = BASE_DIR . '/tmp/cache/sql/' . (trim($cache_id) > ''
? trim($cache_id) . '/'
@ -1414,15 +1453,15 @@
* @param $cache_id
* @return bool
*/
public function clear_request($cache_id)
public function clearRequest($cache_id)
{
$request = request_get_settings($cache_id);
$cache_from_id = BASE_DIR . '/tmp/cache/sql/request/settings/' . (trim($request->Id) > ''
$cache_from_id = BASE_DIR . '/tmp/cache/sql/requests/settings/' . (trim($request->Id) > ''
? trim($request->Id) . '/'
: '');
$cache_from_alias = BASE_DIR . '/tmp/cache/sql/request/settings/' . (trim($request->request_alias) > ''
$cache_from_alias = BASE_DIR . '/tmp/cache/sql/requests/settings/' . (trim($request->request_alias) > ''
? trim($request->request_alias) . '/'
: '');

23
class/class.dbdump.php

@ -235,7 +235,10 @@
}
// Готовим шаблон имени файла
$file_name = preg_replace_ru(array("/%SERVER%/", "/%DATE%/", "/%TIME%/"), array($_SERVER['SERVER_NAME'], date('d.m.y'), date('H.i.s')), DB_EXPORT_TPL);
if (isset($_REQUEST['file_name']) AND $_REQUEST['file_name'] != '')
$file_name = prepare_fname($_REQUEST['file_name']);
else
$file_name = preg_replace_ru(array("/%SERVER%/", "/%DATE%/", "/%TIME%/"), array($_SERVER['SERVER_NAME'], date('d.m.y'), date('H.i.s')), DB_EXPORT_TPL);
$dump = (defined('DB_EXPORT_GZ') && DB_EXPORT_GZ
? gzencode($this->_database_dump)
@ -329,7 +332,7 @@
{
// Получаем имя файла и его расширение (должно быть sql)
$fupload_name = $_FILES['file']['name'];
$gz = substr($fupload_name, -3)=='.gz';
$gz = substr($fupload_name, -3) == '.gz';
$end = substr($fupload_name, -3);
// Если расширение sql, тогда
@ -426,7 +429,7 @@
{
global $AVE_DB, $AVE_Template;
$file = BASE_DIR . '/backup/'. $file;
$file = BASE_DIR . '/tmp/backup/'. $file;
if (! is_file($file))
return false;
@ -436,9 +439,9 @@
reportLog($AVE_Template->get_config_vars('DB_REPORT_DUMP_DEL_OK') . ' ('.basename($file).')');
}
else
{
reportLog($AVE_Template->get_config_vars('DB_REPORT_DUMP_DEL_ER') . ' ('.basename($file).')');
}
{
reportLog($AVE_Template->get_config_vars('DB_REPORT_DUMP_DEL_ER') . ' ('.basename($file).')');
}
header('Location:index.php?do=dbsettings&cp=' . SESSION);
}
@ -474,10 +477,10 @@
$insert = true;
}
else
{
// В противном случае, если расширение файла НЕ sql, формируем сообщение с ошибкой
$AVE_Template->assign('msg', '<li class="highlight red"><strong>Ошибка:</strong> ' . $AVE_Template->get_config_vars('MAIN_SQL_FILE_ERROR') . '</li>');
}
{
// В противном случае, если расширение файла НЕ sql, формируем сообщение с ошибкой
$AVE_Template->assign('msg', '<li class="highlight red"><strong>Ошибка:</strong> ' . $AVE_Template->get_config_vars('MAIN_SQL_FILE_ERROR') . '</li>');
}
}
// Если флаг готовности записи установлен, тогда

13
class/class.debug.php

@ -541,6 +541,19 @@
}
public static function _errorSql ($header, $body, $caller, $exit = false)
{
Debug::_echo(preg_replace('/(\s)+/s', ' ', $header));
Debug::_echo(DB::queryList($body));
Debug::_echo($caller);
if ($exit)
exit;
}
/**
* Вывод статистики
*/

7005
class/class.docs.php

File diff suppressed because it is too large Load Diff

3
class/class.modules.php

@ -222,6 +222,7 @@
// согласно статусу, либо все модули, если статус не указан
$sql = "
SELECT
# MODULES
*
FROM
" . PREFIX . "_module
@ -230,7 +231,7 @@
ModuleName ASC
";
$query = $AVE_DB->Query($sql, SYSTEM_CACHE_LIFETIME, 'modules');
$query = $AVE_DB->Query($sql, -1, 'modules', true, '.modules');
while ($row = $query->FetchRow())
$modules[$row->ModuleSysName] = $row;

49
class/class.navigation.php

@ -243,7 +243,6 @@
//-- Стираем кеш навигации
$this->clearCache($navigation_id, $_REQUEST['alias']);
$this->clearCacheId($navigation_id, $_REQUEST['alias']);
$this->clearCacheNav($navigation_id, $_REQUEST['alias']);
if ($sql === false)
@ -1267,47 +1266,24 @@
function clearCache($id, $alias = '')
{
if (file_exists(BASE_DIR . '/tmp/cache/sql/nav/template-' . $id . '.cache'))
unlink(BASE_DIR . '/tmp/cache/sql/nav/template-' . $id . '.cache');
if (file_exists(BASE_DIR . '/tmp/cache/sql/navigations/' . $id . '/template.cache'))
unlink(BASE_DIR . '/tmp/cache/sql/navigations/' . $id . '/template.cache');
if (file_exists(BASE_DIR . '/tmp/cache/sql/nav/template-' . $alias . '.cache'))
unlink(BASE_DIR . '/tmp/cache/sql/nav/template-' . $alias . '.cache');
if (file_exists(BASE_DIR . '/tmp/cache/sql/navigations/' . $alias . '/template.cache'))
unlink(BASE_DIR . '/tmp/cache/sql/navigations/' . $alias . '/template.cache');
if (file_exists(BASE_DIR . '/tmp/cache/sql/nav/items-' . $id . '.cache'))
unlink(BASE_DIR . '/tmp/cache/sql/nav/items-' . $id . '.cache');
if (file_exists(BASE_DIR . '/tmp/cache/sql/navigations/' . $id . '/items.cache'))
unlink(BASE_DIR . '/tmp/cache/sql/navigations/' . $id . '/items.cache');
if (file_exists(BASE_DIR . '/tmp/cache/sql/nav/items-' . $alias . '.cache'))
unlink(BASE_DIR . '/tmp/cache/sql/nav/items-' . $alias . '.cache');
}
function clearCacheId($id, $alias = '')
{
$dir_id = BASE_DIR . '/tmp/cache/sql/nav_' . $id;
$dir_alias = BASE_DIR . '/tmp/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);
}
}
if (file_exists(BASE_DIR . '/tmp/cache/sql/navigations/' . $alias . '/items.cache'))
unlink(BASE_DIR . '/tmp/cache/sql/navigations/' . $alias . '/items.cache');
}
function clearCacheNav($id, $alias)
{
$cache_id = str_replace('nav_', '', $id);
$cache_id = 'nav/' . substr($cache_id, 0, 3);
$cache_id = explode('_', $id);
$cache_id = 'navigations/' . $cache_id[1];
$cache_dir = BASE_DIR . '/tmp/cache/sql/' . (trim($cache_id) > ''
? trim($cache_id) . '/'
@ -1315,9 +1291,8 @@
rrmdir($cache_dir);
$cache_id = str_replace('nav_', '', $alias);
$cache_id = 'nav/' . substr($cache_id, 0, 3);
$cache_id = explode('_', $alias);
$cache_id = 'navigations/' . $cache_id[1];
$cache_dir = BASE_DIR . '/tmp/cache/sql/' . (trim($cache_id) > ''
? trim($cache_id) . '/'

21
class/class.paginations.php

@ -110,12 +110,12 @@
}
}
foreach($pages as $page)
foreach ($pages as $page)
{
if ($page >= 1 && $page <= $total_pages)
{
// Текущий номер страницы (активная страница)
if ($curent_page == $page)
if ($curent_page == $page && $curent_page != 1)
{
$search = array('[link]', '[page]', '[name]');
$replace = array($template_label, $curent_page, $curent_page);
@ -222,13 +222,28 @@
$containers = $AVE_DB->Query("
SELECT
# PAGINATION = $id
*
FROM
" . PREFIX . "_paginations
WHERE
id = '" . $id . "'
")->FetchAssocArray();
", -1, 'paginations', true, '.paginations')->FetchAssocArray();
return $containers;
}
/**
* Очистка кеша постраничной навигации
*
* @param void
* @return
*/
public static function clearCache()
{
global $AVE_DB;
$AVE_DB->clearCache('paginations');
}
}

109
class/class.porter.php

@ -0,0 +1,109 @@
<?php
class Lingua_Stem_Ru
{
public $VERSION = "0.02";
public $Stem_Caching = 1;
public $Stem_Cache = array();
public $VOWEL = '/аеиоуыэюя/';
public $PERFECTIVEGROUND = '/((ив|ивши|ившись|ыв|ывши|ывшись)|((?<=[ая])(в|вши|вшись)))$/';
public $REFLEXIVE = '/(с[яь])$/';
public $ADJECTIVE = '/(ее|ие|ые|ое|ими|ыми|ей|ий|ый|ой|ем|им|ым|ом|его|ого|ему|ому|их|ых|ую|юю|ая|яя|ою|ею)$/';
public $PARTICIPLE = '/((ивш|ывш|ующ)|((?<=[ая])(ем|нн|вш|ющ|щ)))$/';
public $VERB = '/((ила|ыла|ена|ейте|уйте|ите|или|ыли|ей|уй|ил|ыл|им|ым|ен|ило|ыло|ено|ят|ует|уют|ит|ыт|ены|ить|ыть|ишь|ую|ю)|((?<=[ая])(ла|на|ете|йте|ли|й|л|ем|н|ло|но|ет|ют|ны|ть|ешь|нно)))$/';
public $NOUN = '/(а|ев|ов|ие|ье|е|иями|ями|ами|еи|ии|и|ией|ей|ой|ий|й|иям|ям|ием|ем|ам|ом|о|у|ах|иях|ях|ы|ь|ию|ью|ю|ия|ья|я)$/';
public $RVRE = '/^(.*?[аеиоуыэюя])(.*)$/';
public $DERIVATIONAL = '/[^аеиоуыэюя][аеиоуыэюя]+[^аеиоуыэюя]+[аеиоуыэюя].*(?<=о)сть?$/';
function s(&$s, $re, $to)
{
$orig = $s;
$s = preg_replace($re, $to, $s);
return $orig !== $s;
}
function m($s, $re)
{
return preg_match($re, $s);
}
function stem_word($word)
{
$word = mb_strtolower($word);
//$word = strtr($word, 'ё', 'е');
# Check against cache of stemmed words
if ($this->Stem_Caching && isset($this->Stem_Cache[$word]))
{
return $this->Stem_Cache[$word];
}
$stem = $word;
do
{
if (! preg_match($this->RVRE, $word, $p))
break;
$start = $p[1];
$RV = $p[2];
if (!$RV)
break;
# Step 1
if (! $this->s($RV, $this->PERFECTIVEGROUND, ''))
{
$this->s($RV, $this->REFLEXIVE, '');
if ($this->s($RV, $this->ADJECTIVE, ''))
{
$this->s($RV, $this->PARTICIPLE, '');
}
else
{
if (! $this->s($RV, $this->VERB, ''))
$this->s($RV, $this->NOUN, '');
}
}
# Step 2
$this->s($RV, '/и$/', '');
# Step 3
if ($this->m($RV, $this->DERIVATIONAL))
$this->s($RV, '/ость?$/', '');
# Step 4
if (!$this->s($RV, '/ь$/', ''))
{
$this->s($RV, '/ейше?/', '');
$this->s($RV, '/нн$/', 'н');
}
$stem = $start.$RV;
}
while(false);
if ($this->Stem_Caching)
$this->Stem_Cache[$word] = $stem;
return $stem;
}
function stem_caching($parm_ref)
{
$caching_level = @$parm_ref['-level'];
if ($caching_level) {
if (!$this->m($caching_level, '/^[012]$/')) {
die(__CLASS__ . "::stem_caching() - Legal values are '0','1' or '2'. '$caching_level' is not a legal value");
}
$this->Stem_Caching = $caching_level;
}
return $this->Stem_Caching;
}
function clear_stem_cache()
{
$this->Stem_Cache = array();
}
}
?>

205
class/class.request.php

@ -13,10 +13,6 @@
class AVE_Request
{
/**
* Свойстав класса
*/
/**
* Количество Запросов на странице
*
@ -24,9 +20,6 @@
*/
public $_limit = 25;
/**
* Внутренние методы
*/
/**
* Метод, предназначенный для получения и вывода списка Запросов
@ -64,8 +57,10 @@
$items = array();
$sql = $AVE_DB->Query("
SELECT *
FROM " . PREFIX . "_request
SELECT
*
FROM
" . PREFIX . "_request
ORDER BY Id ASC
" . $limit . "
");
@ -93,15 +88,17 @@
static $requests = array();
if (!isset($requests[$request_id]))
if (! isset($requests[$request_id]))
{
$requests[$request_id] = $AVE_DB->Query("
SELECT
rubric_id,
request_title,
request_description
FROM " . PREFIX . "_request
WHERE Id = '" . $request_id . "'
FROM
" . PREFIX . "_request
WHERE
Id = '" . $request_id . "'
LIMIT 1
")->FetchRow();
}
@ -267,6 +264,7 @@
request_show_pagination = '" . (isset($_REQUEST['request_show_pagination']) ? (int)$_REQUEST['request_show_pagination'] : 0) . "',
request_pagination = '" . (isset($_REQUEST['request_pagination']) ? (int)$_REQUEST['request_pagination'] : 1) . "',
request_use_query = '" . (isset($_REQUEST['request_use_query']) ? (int)$_REQUEST['request_use_query'] : 0) . "',
request_count_items = '" . (isset($_REQUEST['request_count_items']) ? (int)$_REQUEST['request_count_items'] : 0) . "',
request_hide_current = '" . (int)$_REQUEST['request_hide_current'] . "',
request_only_owner = '" . (int)$_REQUEST['request_only_owner'] . "',
request_cache_lifetime = '" . (int)$_REQUEST['request_cache_lifetime'] . "',
@ -293,12 +291,12 @@
else
{
// В противном случае выполняем переход к списку запросов
if (!$_REQUEST['next_edit']) {
if (!$_REQUEST['next_edit'])
header('Location:index.php?do=request&cp=' . SESSION);
} else {
else
header('Location:index.php?do=request&action=edit&Id=' . $iid . '&rubric_id='.$_REQUEST['rubric_id'].'&cp=' . SESSION);
}
}
exit;
}
}
@ -321,8 +319,10 @@
// Выполняем запрос к БД и получаем всю информацию о запросе
$sql = $AVE_DB->Query("
SELECT *
FROM " . PREFIX . "_request
WHERE Id = '" . $request_id . "'
FROM
" . PREFIX . "_request
WHERE
Id = '" . $request_id . "'
");
if ($sql->_result->num_rows == 0)
@ -345,9 +345,7 @@
$paginations = array();
while ($pages = $sql->FetchRow())
{
array_push($paginations, $pages);
}
// Передаем данные в шаблон и отображаем страницу с редактированием запроса
$AVE_Template->assign('row', $row);
@ -363,11 +361,14 @@
$sql = $AVE_DB->Query("
SELECT *
FROM " . PREFIX . "_request
WHERE Id = '" . $request_id . "'
FROM
" . PREFIX . "_request
WHERE
Id = '" . $request_id . "'
");
if($sql->_result->num_rows == 0) {
if ($sql->_result->num_rows == 0)
{
header('Location:index.php?do=request&cp=' . SESSION);
exit;
}
@ -387,6 +388,7 @@
$row->request_show_pagination = (isset($_REQUEST['request_show_pagination']) ? $_REQUEST['request_show_pagination'] : 0);
$row->request_pagination = (isset($_REQUEST['request_pagination']) ? (int)($_REQUEST['request_pagination']) : 1);
$row->request_use_query = (isset($_REQUEST['request_use_query']) ? $_REQUEST['request_use_query'] : 0);
$row->request_count_items = (isset($_REQUEST['request_count_items']) ? $_REQUEST['request_count_items'] : 0);
$row->request_only_owner = (isset($_REQUEST['request_only_owner']) ? (int)($_REQUEST['request_only_owner']) : 0);
$row->request_cache_lifetime = (isset($_REQUEST['request_cache_lifetime']) ? (int)($_REQUEST['request_cache_lifetime']) : 0);
$row->request_lang = (isset($_REQUEST['request_lang']) ? (int)$_REQUEST['request_lang'] : 0);
@ -430,7 +432,7 @@
if ($save === false)
{
if(isAjax())
if (isAjax())
{
$header = $AVE_Template->get_config_vars('REQUEST_ERROR');
echo json_encode(array('message' => $message, 'header' => $header, 'theme' => 'error'));
@ -461,6 +463,7 @@
request_show_pagination = '" . (isset($_REQUEST['request_show_pagination']) ? (int)$_REQUEST['request_show_pagination'] : 0) . "',
request_pagination = '" . (isset($_REQUEST['request_pagination']) ? (int)$_REQUEST['request_pagination'] : 1) . "',
request_use_query = '" . (isset($_REQUEST['request_use_query']) ? (int)$_REQUEST['request_use_query'] : 0) . "',
request_count_items = '" . (isset($_REQUEST['request_count_items']) ? (int)$_REQUEST['request_count_items'] : 0) . "',
request_hide_current = '" . @(int)$_REQUEST['request_hide_current'] . "',
request_only_owner = '" . @(int)$_REQUEST['request_only_owner'] . "',
request_cache_lifetime = '" . (int)($_REQUEST['request_cache_lifetime']>'' ? $_REQUEST['request_cache_lifetime'] : '-1') . "',
@ -469,19 +472,14 @@
request_show_statistic = '" . (isset($_REQUEST['request_show_statistic']) ? (int)$_REQUEST['request_show_statistic'] : 0). "',
request_external = '" . (isset($_REQUEST['request_external']) ? (int)$_REQUEST['request_external'] : 0). "',
request_ajax = '" . (isset($_REQUEST['request_ajax']) ? (int)$_REQUEST['request_ajax'] : 0). "',
request_show_sql = '" . (isset($_REQUEST['request_show_sql']) ? (int)$_REQUEST['request_show_sql'] : 0). "'
request_show_sql = '" . (isset($_REQUEST['request_show_sql']) ? (int)$_REQUEST['request_show_sql'] : 0). "',
request_changed = '" . time() . "',
request_changed_elements = '" . time() . "'
WHERE
Id = '" . $request_id . "'
");
$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->clearRequest($request_id);
// Сохраняем системное сообщение в журнал
reportLog($AVE_Template->get_config_vars('REQUEST_SAVE_CHA_SUC') . ' (' . stripslashes(htmlspecialchars($_REQUEST['request_title'], ENT_QUOTES)) . ') (Id:' . $request_id . ')');
@ -491,7 +489,9 @@
{
header('Location:index.php?do=request&cp=' . SESSION);
exit;
} else {
}
else
{
$message = $AVE_Template->get_config_vars('REQUEST_TEMPLATE_SAVED');
$header = $AVE_Template->get_config_vars('REQUEST_SUCCESS');
$theme = 'accept';
@ -515,11 +515,14 @@
// Выполняем запрос к БД на получение информации о копиреумом запросе
$sql = $AVE_DB->Query("
SELECT *
FROM " . PREFIX . "_request
WHERE Id = '" . $request_id . "'
FROM
" . PREFIX . "_request
WHERE
Id = '" . $request_id . "'
");
if($sql->_result->num_rows == 0) {
if ($sql->_result->num_rows == 0)
{
header('Location:index.php?do=request&cp=' . SESSION);
exit;
}
@ -543,6 +546,7 @@
request_asc_desc = '" . $row->request_asc_desc . "',
request_show_pagination = '" . $row->request_show_pagination . "',
request_use_query = '" . $row->request_use_query . "',
request_count_items = '" . $row->request_count_items . "',
request_hide_current = '" . $row->request_hide_current . "',
request_lang = '" . $row->request_lang . "',
request_cache_elements = '" . (isset($row->request_cache_elements) ? $row->request_cache_elements : 0) . "'
@ -557,8 +561,10 @@
// Выполняем запрос к БД и получаем все условия запроса для копируемого запроса
$sql = $AVE_DB->Query("
SELECT *
FROM " . PREFIX . "_request_conditions
WHERE request_id = '" . $request_id . "'
FROM
" . PREFIX . "_request_conditions
WHERE
request_id = '" . $request_id . "'
");
// Обрабатываем полученные данные и
@ -566,7 +572,8 @@
{
// Выполняем запрос к БД на добавление условий для нового, скопированного запроса
$AVE_DB->Query("
INSERT " . PREFIX . "_request_conditions
INSERT
" . PREFIX . "_request_conditions
SET
request_id = '" . $iid . "',
condition_compare = '" . $row_cond->condition_compare . "',
@ -594,18 +601,22 @@
// Выполняем запрос к БД на удаление общей информации о запросе
$AVE_DB->Query("
DELETE
FROM " . PREFIX . "_request
WHERE Id = '" . $request_id . "'
DELETE FROM
" . PREFIX . "_request
WHERE
Id = '" . $request_id . "'
");
// Выполняем запрос к БД на удаление условий запроса
$AVE_DB->Query("
DELETE
FROM " . PREFIX . "_request_conditions
WHERE request_id = '" . $request_id . "'
DELETE FROM
" . PREFIX . "_request_conditions
WHERE
request_id = '" . $request_id . "'
");
$AVE_DB->clearRequest($request_id);
// Сохраняем системное сообщение в журнал
reportLog($AVE_Template->get_config_vars('REQUEST_DELETE_SUC') . ' (' . stripslashes(htmlspecialchars($request_name, ENT_QUOTES)) . ') ( Id:' . $request_id . ' )');
@ -633,8 +644,10 @@
// Выполняем запрос к БД и получаем список полей у той рубрики, к которой относится данный запрос
$sql = $AVE_DB->Query("
SELECT *
FROM " . PREFIX . "_rubric_fields
WHERE rubric_id = '" . $_REQUEST['rubric_id'] . "'
FROM
" . PREFIX . "_rubric_fields
WHERE
rubric_id = '" . $_REQUEST['rubric_id'] . "'
ORDER BY rubric_field_position ASC
");
@ -649,27 +662,27 @@
// Выполняем запрос к БД и получаем условия запроса
$sql = $AVE_DB->Query("
SELECT *
FROM " . PREFIX . "_request_conditions
WHERE request_id = '" . $request_id . "'
FROM
" . PREFIX . "_request_conditions
WHERE
request_id = '" . $request_id . "'
ORDER BY condition_position ASC
");
// Обрабатываем полученные данные и формируем массив
while ($row = $sql->FetchRow())
{
array_push($conditions, $row);
}
// Передаем данные в шаблон и отображаем страницу с редактированием условий
$AVE_Template->assign('request_title', $this->get_request_by_id($request_id)->request_title);
$AVE_Template->assign('fields', $fields);
$AVE_Template->assign('conditions', $conditions);
if (isAjax() && (isset($_REQUEST['ajax']) && $_REQUEST['ajax'] == 1)){
if (isAjax() && (isset($_REQUEST['ajax']) && $_REQUEST['ajax'] == 1))
$AVE_Template->assign('content', $AVE_Template->fetch('request/cond_list.tpl'));
} else {
else
$AVE_Template->assign('content', $AVE_Template->fetch('request/conditions.tpl'));
}
break;
case 'sort':
@ -677,7 +690,8 @@
foreach ($_REQUEST['sort'] as $position => $cond_id)
{
$AVE_DB->Query("
UPDATE " . PREFIX . "_request_conditions
UPDATE
" . PREFIX . "_request_conditions
SET
condition_position = '" . (int)$position . "'
WHERE
@ -685,7 +699,8 @@
");
}
if (isAjax()){
if (isAjax())
{
$message = $AVE_Template->get_config_vars('REQUEST_SORTED');
$header = $AVE_Template->get_config_vars('REQUEST_SUCCESS');
$theme = 'accept';
@ -756,9 +771,10 @@
{
// Выполняем запрос к БД на удаление условий
$AVE_DB->Query("
DELETE
FROM " . PREFIX . "_request_conditions
WHERE Id = '" . $condition_id . "'
DELETE FROM
" . PREFIX . "_request_conditions
WHERE
Id = '" . $condition_id . "'
");
}
@ -771,14 +787,29 @@
// require(BASE_DIR . '/functions/func.parserequest.php');
request_get_condition_sql_string($request_id, true);
if (!isAjax() && $_REQUEST['ajax'] != '1'){
$AVE_DB->Query("
UPDATE
" . PREFIX . "_requests
SET
request_changed = '" . time() . "'
WHERE
Id = '" . $request_id . "'
");
$AVE_DB->clearRequest($request_id);
if (!isAjax() && $_REQUEST['ajax'] != '1')
{
// Выполняем обновление страницы
header('Location:index.php?do=request&action=conditions&rubric_id=' . $_REQUEST['rubric_id'] . '&Id=' . $request_id . '&cp=' . SESSION . ($_REQUEST['pop'] ? '&pop=1' : ''));
exit;
} else {
}
else
{
echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
exit;
}
break;
// Если пользователь добавил новое условие
@ -787,7 +818,8 @@
{
// Выполняем запрос к БД на добавление нового условия
$sql = $AVE_DB->Query("
INSERT " . PREFIX . "_request_conditions
INSERT
" . PREFIX . "_request_conditions
SET
request_id = '" . $request_id . "',
condition_compare = '" . $_POST['new_operator'] . "',
@ -795,16 +827,22 @@
condition_value = '" . $_POST['new_value'] . "',
condition_join = '" . $_POST['oper_new'] . "'
");
if ($sql->_result === false) {
if ($sql->_result === false)
{
$message = $AVE_Template->get_config_vars('REQUEST_COND_NEW_ERR');
$header = $AVE_Template->get_config_vars('REQUEST_ERROR');
$theme = 'error';
} else {
}
else
{
// Сохраняем системное сообщение в журнал
reportLog('' . $AVE_Template->get_config_vars('REQUEST_COND_ADD_SUC') . ' (' . stripslashes(htmlspecialchars($this->get_request_by_id($request_id)->request_title, ENT_QUOTES)) . ') - ( Id: '.$request_id.' )');
}
} else {
}
else
{
$message = $AVE_Template->get_config_vars('REQUEST_COND_VALUE_ERR');
$header = $AVE_Template->get_config_vars('REQUEST_ERROR');
$theme = 'error';
@ -815,6 +853,17 @@
// require(BASE_DIR . '/functions/func.parserequest.php');
request_get_condition_sql_string($request_id, true);
$AVE_DB->Query("
UPDATE
" . PREFIX . "_requests
SET
request_changed = '" . time() . "'
WHERE
Id = '" . $request_id . "'
");
$AVE_DB->clearRequest($request_id);
if (! isAjax())
{
header('Location:index.php?do=request&action=conditions&rubric_id=' . $_REQUEST['rubric_id'] . '&Id=' . $request_id . '&cp=' . SESSION);
@ -828,6 +877,7 @@
$header = $AVE_Template->get_config_vars('REQUEST_SUCCESS');
$theme = 'accept';
}
echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
exit;
}
@ -835,6 +885,7 @@
}
}
function conditionFieldChange($field_id, $cond_id)
{
global $AVE_DB, $AVE_Template;
@ -845,12 +896,14 @@
$AVE_Template->assign('content', $AVE_Template->fetch('request/change.tpl'));
}
function conditionFieldChangeSave($field_id, $cond_id)
{
global $AVE_DB, $AVE_Template;
$sql = $AVE_DB->Query("
UPDATE " . PREFIX . "_request_conditions
UPDATE
" . PREFIX . "_request_conditions
SET
condition_field_id = '" . $field_id . "'
WHERE
@ -859,6 +912,26 @@
request_get_condition_sql_string((int)$_REQUEST['req_id'], true);
$request_id = $AVE_DB->Query("
SELECT
request_id
FROM
" . PREFIX . "_request_conditions
WHERE
Id = '" . $cond_id . "'
")->GetCell();
$AVE_DB->Query("
UPDATE
" . PREFIX . "_requests
SET
request_changed = '" . time() . "'
WHERE
Id = '" . $request_id . "'
");
$AVE_DB->clearRequest($request_id);
// Передаем данные в шаблон и отображаем страницу с редактированием условий
$AVE_Template->assign('field_id', $field_id);
$AVE_Template->assign('cond_id', $cond_id);

836
class/class.rubs.php

File diff suppressed because it is too large Load Diff

1139
class/class.settings.php

File diff suppressed because it is too large Load Diff

599
class/class.template.php

@ -1,401 +1,376 @@
<?php
/**
* AVE.cms
*
* @package AVE.cms
* @version 3.x
* @filesource
* @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru
*
*/
/**
* Подключаем файл шаблонизатора Smarty
*/
require(BASE_DIR . '/lib/Smarty/Smarty.class.php');
/**
* Расширение класса шаблонизатора Smarty
*
*/
class AVE_Template extends Smarty
{
/**
* СВОЙСТВА
*/
/**
* AVE.cms
*
* @package AVE.cms
* @version 3.x
* @filesource
* @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru
*
*/
/**
* Конструктор
* Подключаем файл шаблонизатора Smarty
*/
require(BASE_DIR . '/lib/Smarty/Smarty.class.php');
/**
* Расширение класса шаблонизатора Smarty
*
* @param string $template_dir путь к директории шаблонов по умолчанию
* @return AVE_Template
*/
function __construct($template_dir)
class AVE_Template extends Smarty
{
/**
* Путь к директории шаблонов по умолчанию.
* Если вы не передадите тип ресурса во время подключения файлов, они будут искаться здесь.
*/
$this->template_dir = $template_dir;
/**
* СВОЙСТВА
*/
/**
* Имя каталога, в котором хранятся компилированные шаблоны.
* Конструктор
*
* @param string $template_dir путь к директории шаблонов по умолчанию
* @return AVE_Template
*/
$this->compile_dir = BASE_DIR . '/tmp/cache/smarty';
function __construct($template_dir)
{
/**
* Путь к директории шаблонов по умолчанию.
* Если вы не передадите тип ресурса во время подключения файлов, они будут искаться здесь.
*/
$this->template_dir = $template_dir;
/**
* Имя каталога, в котором хранятся компилированные шаблоны.
*/
$this->compile_dir = BASE_DIR . '/tmp/cache/smarty';
/**
* Имя каталога, в котором хранится кэш.
*/
$this->cache_dir_root = BASE_DIR . '/tmp/cache';
/**
* Имя каталога, в котором хранится кэш шаблонов.
*/
$this->cache_dir = BASE_DIR . '/tmp/cache/tpl';
/**
* Имя каталога, в котором хранится кэш модулей.
*/
$this->module_cache_dir = BASE_DIR . '/tmp/cache/module';
/**
* Имя каталога, в котором хранится сессии пользователей.
*/
$this->session_dir = BASE_DIR . '/tmp/session';
/**
* Имя каталога, в котором хранится сессии пользователей.
*/
$this->sql_cache_dir = BASE_DIR . '/tmp/cache/sql';
/**
* Использование поддиректорий для хранения кэша и скомпилированных шаблонов.
*/
$this->use_sub_dirs = SMARTY_USE_SUB_DIRS;
/**
* При каждом вызове РНР-приложения Smarty проверяет, изменился или нет текущий шаблон
* с момента последней компиляции. Если шаблон изменился, он перекомпилируется.
* В случае, если шаблон еще не был скомпилирован, его компиляция производится
* с игнорированием значения этого параметра.
*/
$this->compile_check = SMARTY_COMPILE_CHECK;
/**
* Активирует debugging console - порожденное при помощи javascript окно браузера,
* содержащее информацию о подключенных шаблонах и загруженных переменных для текущей страницы.
*/
$this->debugging = SMARTY_DEBUGGING;
/**
* Регистрация плагинов-функций Smarty.
* Передается наименование функции шаблона и имя функции, реализующей ее.
*/
$this->register_function('check_permission', 'check_permission');
$this->register_function('get_home_link', 'get_home_link');
$this->register_function('num_format', 'num_format');
$this->register_function('thumb', 'make_thumbnail');
/**
* Регистрация плагинов-модификаторов Smarty.
* Передается имя модификатора и имя функции, реализующей его.
*/
$this->register_modifier('pretty_date', 'pretty_date');
$this->register_modifier('translate_date', 'translate_date');
$this->register_modifier('utf8', 'utf8');
// плагин позволяющий поставить метки шаблонов
// для быстрого поиска шаблона отвечающего за вывод
// перед использованием очистить cache/smarty
// $this->register_postfilter('add_template_comment');
/**
* Присваиваем общие значения для шаблонов.
* Можно явно передавать пары имя/значение,
* или ассоциативные массивы, содержащие пары имя/значение.
*/
$assign['BASE_DIR'] = BASE_DIR;
$assign['ABS_PATH'] = ABS_PATH;
$assign['DATE_FORMAT'] = DATE_FORMAT;
$assign['TIME_FORMAT'] = TIME_FORMAT;
$assign['PAGE_NOT_FOUND_ID'] = PAGE_NOT_FOUND_ID;
$this->assign($assign);
}
/**
* Имя каталога, в котором хранится кэш.
*/
$this->cache_dir_root = BASE_DIR . '/tmp/cache';
/**
* ВНУТРЕННИЕ МЕТОДЫ
*/
/**
* Имя каталога, в котором хранится кэш шаблонов.
* Проверка наличия одноименного шаблона в директории темы дизайна.
* При наличии шаблона в директории темы дизайна используется этот шаблон.
*
* @param string $tpl путь к шаблону
* @return string
*/
$this->cache_dir = BASE_DIR . '/tmp/cache/tpl';
function _redefine_template($tpl)
{
if (!defined('THEME_FOLDER')) return $tpl;
/**
* Имя каталога, в котором хранится кэш модулей.
*/
$this->module_cache_dir = BASE_DIR . '/tmp/cache/module';
$r_tpl = str_replace(BASE_DIR, BASE_DIR . '/templates/' . THEME_FOLDER, $tpl);
/**
* Имя каталога, в котором хранится сессии пользователей.
*/
$this->session_dir = BASE_DIR . '/tmp/session';
return (file_exists($r_tpl) && is_file($r_tpl)) ? $r_tpl : $tpl;
}
/**
* Имя каталога, в котором хранится сессии пользователей.
*/
$this->sql_cache_dir = BASE_DIR . '/tmp/cache/sql';
/**
* ВНЕШНИЕ МЕТОДЫ
*/
/**
* Использование поддиректорий для хранения кэша и скомпилированных шаблонов.
* Переопределение одноименного метода Smarty
* для конфигурационных файлов созданных в теме дизайна.
*
* @param string $file
* @param string $section
* @param string $scope
*/
$this->use_sub_dirs = SMARTY_USE_SUB_DIRS;
function config_load($file, $section = null, $scope = 'global')
{
Smarty::config_load($this->_redefine_template($file), $section, $scope);
}
/**
* При каждом вызове РНР-приложения Smarty проверяет, изменился или нет текущий шаблон
* с момента последней компиляции. Если шаблон изменился, он перекомпилируется.
* В случае, если шаблон еще не был скомпилирован, его компиляция производится
* с игнорированием значения этого параметра.
* Переопределение одноименного метода Smarty
* для пользовательских шаблонов созданных в теме дизайна.
*
* @param string $tpl_file name of template file
* @param string $cache_id
* @param string $compile_id
* @return string|false results of {@link _read_cache_file()}
*/
$this->compile_check = SMARTY_COMPILE_CHECK;
function is_cached($tpl_file, $cache_id = null, $compile_id = null)
{
return Smarty::is_cached($this->_redefine_template($tpl_file), $cache_id, $compile_id);
}
/**
* Активирует debugging console - порожденное при помощи javascript окно браузера,
* содержащее информацию о подключенных шаблонах и загруженных переменных для текущей страницы.
* Переопределение одноименного метода Smarty
* для пользовательских шаблонов созданных в теме дизайна.
*
* @param string $resource_name
* @param string $cache_id
* @param string $compile_id
* @param boolean $display
*/
$this->debugging = SMARTY_DEBUGGING;
function fetch($resource_name, $cache_id = null, $compile_id = null, $display = false)
{
return Smarty::fetch($this->_redefine_template($resource_name), $cache_id, $compile_id, $display);
}
/**
* Регистрация плагинов-функций Smarty.
* Передается наименование функции шаблона и имя функции, реализующей ее.
* Переопределение одноименного метода Smarty
* для пользовательских шаблонов созданных в теме дизайна.
*
* @param string $resource_name
* @param string $cache_id
* @param string $compile_id
*/
$this->register_function('check_permission', 'check_permission');
$this->register_function('get_home_link', 'get_home_link');
$this->register_function('num_format', 'num_format');
$this->register_function('thumb', 'make_thumbnail');
function display($resource_name, $cache_id = null, $compile_id = null)
{
$this->fetch($resource_name, $cache_id, $compile_id, true);
}
/**
* Регистрация плагинов-модификаторов Smarty.
* Передается имя модификатора и имя функции, реализующей его.
*/
$this->register_modifier('pretty_date', 'pretty_date');
$this->register_modifier('translate_date', 'translate_date');
$this->register_modifier('utf8', 'utf8');
// плагин позволяющий поставить метки шаблонов
// для быстрого поиска шаблона отвечающего за вывод
// перед использованием очистить cache/smarty
// $this->register_postfilter('add_template_comment');
function recursivDelete($dir)
{
$it = new RecursiveDirectoryIterator($dir . '/');
$files = new RecursiveIteratorIterator($it, RecursiveIteratorIterator::CHILD_FIRST);
/**
* Присваиваем общие значения для шаблонов.
* Можно явно передавать пары имя/значение,
* или ассоциативные массивы, содержащие пары имя/значение.
*/
$assign['BASE_DIR'] = BASE_DIR;
$assign['ABS_PATH'] = ABS_PATH;
$assign['DATE_FORMAT'] = DATE_FORMAT;
$assign['TIME_FORMAT'] = TIME_FORMAT;
$assign['PAGE_NOT_FOUND_ID'] = PAGE_NOT_FOUND_ID;
foreach($files as $file)
{
if ($file->getFilename() === '.' || $file->getFilename() === '..')
continue;
$this->assign($assign);
}
if ($file->isDir())
rmdir($file->getRealPath());
else
unlink($file->getRealPath());
}
/**
* ВНУТРЕННИЕ МЕТОДЫ
*/
rmdir($dir);
}
/**
* Проверка наличия одноименного шаблона в директории темы дизайна.
* При наличии шаблона в директории темы дизайна используется этот шаблон.
*
* @param string $tpl путь к шаблону
* @return string
*/
function _redefine_template($tpl)
{
if (!defined('THEME_FOLDER')) return $tpl;
$r_tpl = str_replace(BASE_DIR, BASE_DIR . '/templates/' . THEME_FOLDER, $tpl);
/**
* Метод очистки кэша
*
*/
function CacheClear()
{
global $AVE_DB, $AVE_Template;
return (file_exists($r_tpl) && is_file($r_tpl)) ? $r_tpl : $tpl;
}
$message = array();
/**
* ВНЕШНИЕ МЕТОДЫ
*/
// Метод очистки кэша
if (isset($_REQUEST['templateCache']) && $_REQUEST['templateCache'] == '1')
{
// Smarty clear cache
$this->clear_all_cache();
/**
* Переопределение одноименного метода Smarty
* для конфигурационных файлов созданных в теме дизайна.
*
* @param string $file
* @param string $section
* @param string $scope
*/
function config_load($file, $section = null, $scope = 'global')
{
Smarty::config_load($this->_redefine_template($file), $section, $scope);
}
foreach (glob($this->cache_dir_root . "/cache_*") as $filename)
@unlink($filename);
/**
* Переопределение одноименного метода Smarty
* для пользовательских шаблонов созданных в теме дизайна.
*
* @param string $tpl_file name of template file
* @param string $cache_id
* @param string $compile_id
* @return string|false results of {@link _read_cache_file()}
*/
function is_cached($tpl_file, $cache_id = null, $compile_id = null)
{
return Smarty::is_cached($this->_redefine_template($tpl_file), $cache_id, $compile_id);
}
write_htaccess_deny($this->cache_dir . '/');
/**
* Переопределение одноименного метода Smarty
* для пользовательских шаблонов созданных в теме дизайна.
*
* @param string $resource_name
* @param string $cache_id
* @param string $compile_id
* @param boolean $display
*/
function fetch($resource_name, $cache_id = null, $compile_id = null, $display = false)
{
return Smarty::fetch($this->_redefine_template($resource_name), $cache_id, $compile_id, $display);
}
/**
* Переопределение одноименного метода Smarty
* для пользовательских шаблонов созданных в теме дизайна.
*
* @param string $resource_name
* @param string $cache_id
* @param string $compile_id
*/
function display($resource_name, $cache_id = null, $compile_id = null)
{
$this->fetch($resource_name, $cache_id, $compile_id, true);
}
// Memcached
if ($_REQUEST['ajax'] && Memcached_Server && Memcached_Port)
{
$memcache = new Memcache;
$memcache->connect(Memcached_Server, Memcached_Port);
$memcache->flush();
}
/**
* Метод очистки кэша
*
*/
function CacheClear()
{
global $AVE_DB, $AVE_Template;
// Очищаем кэш шаблона документов рубрики
$AVE_DB->Query("
DELETE FROM
" . PREFIX . "_rubric_template_cache
");
$message = array();
$message[] = $AVE_Template->get_config_vars('TEMPLATES_CACHE_SUCCESS');
reportLog($AVE_Template->get_config_vars('TEMPLATES_CACHE_SUCCESS_LOG'));
//Метод очистки кэша
if (isset($_REQUEST['templateCache']) && $_REQUEST['templateCache'] == '1')
{
$this->clear_all_cache();
// Очищаем кэш сессий в БД в таблице _sessions
$AVE_DB->Query("
DELETE FROM
" . PREFIX . "_sessions
");
foreach (glob($this->cache_dir_root . "/cache_*") as $filename)
{
@unlink($filename);
$message[] = $AVE_Template->get_config_vars('TEMPLATES_CACHE_DB_SUCCESS');
reportLog($AVE_Template->get_config_vars('TEMPLATES_CACHE_DB_SUCCESS_LOG'));
}
$filename = $this->cache_dir . '/.htaccess';
if (! file_exists($filename))
{
$fp = @fopen($filename, 'w');
if ($fp)
{
fputs($fp, 'Deny from all');
fclose($fp);
}
}
if ($_REQUEST['ajax'] && Memcached_Server && Memcached_Port)
//Метод удаления скомпилированных шаблонов
if (isset($_REQUEST['templateCompiledTemplate']) && $_REQUEST['templateCompiledTemplate'] == '1')
{
$memcache = new Memcache;
$memcache->connect(Memcached_Server, Memcached_Port);
$memcache->flush();
}
// Smarty compiled cache
$this->clear_compiled_tpl();
// Очищаем кэш шаблона документов рубрики
$GLOBALS['AVE_DB']->Query("
DELETE
FROM
" . PREFIX . "_rubric_template_cache
");
$message[] = $AVE_Template->get_config_vars('TEMPLATES_CACHE_SUCCESS');
reportLog($AVE_Template->get_config_vars('TEMPLATES_CACHE_SUCCESS_LOG'));
// Очищаем кэш сессий в БД в таблице _sessions
$GLOBALS['AVE_DB']->Query("
DELETE
FROM
" . PREFIX . "_sessions
");
$message[] = $AVE_Template->get_config_vars('TEMPLATES_CACHE_DB_SUCCESS');
reportLog($AVE_Template->get_config_vars('TEMPLATES_CACHE_DB_SUCCESS_LOG'));
}
write_htaccess_deny($this->compile_dir . '/');
//Метод удаления скомпилированных шаблонов
if (isset($_REQUEST['templateCompiledTemplate']) && $_REQUEST['templateCompiledTemplate'] == '1')
{
$this->clear_compiled_tpl();
$filename = $this->compile_dir . '/.htaccess';
$filename = $this->compile_dir . '/.htaccess';
if (! file_exists($filename))
{
$fp = @fopen($filename, 'w');
if ($fp)
{
fputs($fp, 'Deny from all');
fclose($fp);
}
$message[] = $AVE_Template->get_config_vars('TEMPLATES_CACHE_CT_SUCCESS');
reportLog($AVE_Template->get_config_vars('TEMPLATES_CACHE_CT_SUCCESS_LOG'));
}
$message[] = $AVE_Template->get_config_vars('TEMPLATES_CACHE_CT_SUCCESS');
reportLog($AVE_Template->get_config_vars('TEMPLATES_CACHE_CT_SUCCESS_LOG'));
}
//Метод удаления скомпилированных шаблонов модулей
if (isset($_REQUEST['moduleCache']) && $_REQUEST['moduleCache'] == '1')
{
rrmdir($this->module_cache_dir);
//Метод удаления скомпилированных шаблонов модулей
if (isset($_REQUEST['moduleCache']) && $_REQUEST['moduleCache'] == '1')
{
$this->recursivDelete($this->module_cache_dir);
mkdir($this->module_cache_dir,0777,true);
mkdir($this->module_cache_dir, 0777, true);
$filename = $this->module_cache_dir . '/.htaccess';
write_htaccess_deny($this->module_cache_dir . '/');
if (! file_exists($filename))
{
$fp = @fopen($filename, 'w');
if ($fp)
{
fputs($fp, 'Deny from all');
fclose($fp);
}
$message[] = $AVE_Template->get_config_vars('TEMPLATES_CACHE_MC_SUCCESS');
reportLog($AVE_Template->get_config_vars('TEMPLATES_CACHE_MC_SUCCESS_LOG'));
}
$message[] = $AVE_Template->get_config_vars('TEMPLATES_CACHE_MC_SUCCESS');
reportLog($AVE_Template->get_config_vars('TEMPLATES_CACHE_MC_SUCCESS_LOG'));
}
//Метод удаления всех сессий
if (isset($_REQUEST['sessionUsers']) && $_REQUEST['sessionUsers'] == '1')
{
rrmdir($this->session_dir);
//Метод удаления всех сессий
if (isset($_REQUEST['sessionUsers']) && $_REQUEST['sessionUsers'] == '1')
{
$this->recursivDelete($this->session_dir);
mkdir($this->session_dir,0777,true);
mkdir($this->session_dir, 0777, true);
$filename = $this->session_dir . '/.htaccess';
write_htaccess_deny($this->session_dir . '/');
if (! file_exists($filename))
{
$fp = @fopen($filename, 'w');
if ($fp)
{
fputs($fp, 'Deny from all');
fclose($fp);
}
$message[] = $AVE_Template->get_config_vars('TEMPLATES_CACHE_SU_SUCCESS');
reportLog($AVE_Template->get_config_vars('TEMPLATES_CACHE_SU_SUCCESS_LOG'));
}
$message[] = $AVE_Template->get_config_vars('TEMPLATES_CACHE_SU_SUCCESS');
reportLog($AVE_Template->get_config_vars('TEMPLATES_CACHE_SU_SUCCESS_LOG'));
}
//Метод удаления кэша запросов
if (isset($_REQUEST['sqlCache']) && $_REQUEST['sqlCache'] == '1')
{
rrmdir($this->sql_cache_dir);
//Метод удаления кэша запросов
if (isset($_REQUEST['sqlCache']) && $_REQUEST['sqlCache'] == '1')
{
$this->recursivDelete($this->sql_cache_dir);
mkdir($this->sql_cache_dir,0777,true);
mkdir($this->sql_cache_dir, 0777, true);
$filename = $this->sql_cache_dir . '/.htaccess';
write_htaccess_deny($this->sql_cache_dir . '/');
if (!file_exists($filename))
{
$fp = @fopen($filename, 'w');
if ($fp)
{
fputs($fp, 'Deny from all');
fclose($fp);
}
$message[] = $AVE_Template->get_config_vars('TEMPLATES_CACHE_SC_SUCCESS');
reportLog($AVE_Template->get_config_vars('TEMPLATES_CACHE_SC_SUCCESS_LOG'));
}
$message[] = $AVE_Template->get_config_vars('TEMPLATES_CACHE_SC_SUCCESS');
reportLog($AVE_Template->get_config_vars('TEMPLATES_CACHE_SC_SUCCESS_LOG'));
echo json_encode(array($AVE_Template->get_config_vars('TEMPLATES_MESSAGE') . "<br />" . implode('<br />', $message), 'accept'));
}
echo json_encode(array($AVE_Template->get_config_vars('TEMPLATES_MESSAGE') . "<br />" . implode('<br />', $message), 'accept'));
}
/**
* Метод очистки миниатюр
*
*/
function ThumbnailsClear()
{
global $AVE_DB, $AVE_Template;
$message = array();
function rdel_thumb($dirname)
/**
* Метод очистки миниатюр
*
*/
function ThumbnailsClear()
{
$dirs = glob("$dirname/*", GLOB_ONLYDIR|GLOB_NOSORT);
global $AVE_DB, $AVE_Template;
$message = array();
foreach ($dirs as $dir)
function rdel_thumb($dirname)
{
$dir_thumb = THUMBNAIL_DIR;
$tmb = glob("$dir/$dir_thumb", GLOB_ONLYDIR|GLOB_NOSORT);
$dirs = glob("$dirname/*", GLOB_ONLYDIR|GLOB_NOSORT);
foreach ($tmb as $tmbs)
foreach ($dirs as $dir)
{
rrmdir($tmbs);
}
$dir_thumb = THUMBNAIL_DIR;
$tmb = glob("$dir/$dir_thumb", GLOB_ONLYDIR|GLOB_NOSORT);
rdel_thumb($dir);
}
foreach ($tmb as $tmbs)
rrmdir($tmbs);
$hid_cat=(glob("$dirname/{.tmb}*", GLOB_ONLYDIR|GLOB_BRACE));
$hid_tmb=$hid_cat[0];
rdel_thumb($dir);
}
foreach (glob("$hid_cat[0]/*.png", GLOB_NOSORT) as $filename)
unlink("$filename");
}
$hid_cat = (glob("$dirname/{.tmb}*", GLOB_ONLYDIR|GLOB_BRACE));
$hid_tmb = $hid_cat[0];
rdel_thumb(BASE_DIR . '/' . UPLOAD_DIR);
foreach (glob("$hid_cat[0]/*.png", GLOB_NOSORT) as $filename)
unlink("$filename");
}
$message[] = $AVE_Template->get_config_vars('TEMPLATES_THUMBNAILS_SUCCESS');
rdel_thumb(BASE_DIR . '/' . UPLOAD_DIR);
reportLog($AVE_Template->get_config_vars('TEMPLATES_THUMBNAILS_SUCCESS_LOG'));
$message[] = $AVE_Template->get_config_vars('TEMPLATES_THUMBNAILS_SUCCESS');
echo json_encode(array($AVE_Template->get_config_vars('TEMPLATES_MESSAGE') . "<br />" . implode('<br />', $message), 'accept'));
}
reportLog($AVE_Template->get_config_vars('TEMPLATES_THUMBNAILS_SUCCESS_LOG'));
}
echo json_encode(array($AVE_Template->get_config_vars('TEMPLATES_MESSAGE') . "<br />" . implode('<br />', $message), 'accept'));
}
}
?>

76
class/class.templates.php

@ -12,6 +12,40 @@
class AVE_Templates
{
public static function setTemplate($template_id)
{
$cache_file = BASE_DIR . '/templates/' . DEFAULT_THEME_FOLDER . '/include/templates/' . $template_id . '/template.inc';
if (isset($_REQUEST['template_text']) && $_REQUEST['template_text'] != '')
$template = stripslashes(pretty_chars($_REQUEST['template_text']));
else
return false;
// Проверяем наличие папки шаблона
if (! file_exists(dirname($cache_file)))
mkdir(dirname($cache_file), 0766, true);
// Сохраняем данные в фвйл
file_put_contents($cache_file, $template);
return true;
}
public static function getTemplate($template_id)
{
$cache_file = BASE_DIR . '/templates/' . DEFAULT_THEME_FOLDER . '/include/templates/' . $template_id . '/template.inc';
if (file_exists($cache_file) && filesize($cache_file))
$template = file_get_contents($cache_file);
else
$template = false;
return $template;
}
public static function templatesList()
{
global $AVE_DB, $AVE_Template;
@ -144,10 +178,6 @@
$template_id = (int)$_REQUEST['Id'];
$cache = 'template_' . $template_id;
$cache_file = BASE_DIR . '/tmp/cache/templates/' . $cache . '.inc';
$row = $AVE_DB->Query("
SELECT
*
@ -165,9 +195,11 @@
$AVE_Template->assign('read_only', 'readonly');
}
if (file_exists($cache_file) && filesize($cache_file))
$template = self::getTemplate($template_id);
if ($template)
{
$row->template_text = file_get_contents($cache_file);
$row->template_text = $template;
}
else
{
@ -205,13 +237,9 @@
$theme = 'error';
}
$cache = 'template_' . $template_id;
$cache_file = BASE_DIR . '/tmp/cache/templates/' . $cache . '.inc';
if ($ok === false)
{
if (isset($_REQUEST['ajax']) && $_REQUEST['ajax'] = '1')
if (isAjax())
{
echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
exit;
@ -242,10 +270,8 @@
}
else
{
if (! file_exists(dirname($cache_file)))
mkdir(dirname($cache_file), 0766, true);
file_put_contents($cache_file, stripslashes(pretty_chars($_REQUEST['template_text'])));
// Сохраняем шаблон в файле
self::setTemplate($template_id);
$message = $AVE_Template->get_config_vars('TEMPLATES_SAVED');
$header = $AVE_Template->get_config_vars('TEMPLATES_SUCCESS');
@ -317,27 +343,17 @@
template_created = '" . time() . "'
");
$iid = $AVE_DB->InsertId();
$cache = 'template_' . $iid;
$cache_file = BASE_DIR . '/tmp/cache/templates/' . $cache . '.inc';
$template_id = $AVE_DB->InsertId();
if (! file_exists(dirname($cache_file)))
mkdir(dirname($cache_file), 0766, true);
file_put_contents($cache_file, stripslashes(pretty_chars($_REQUEST['template_text'])));
// Сохраняем шаблон в файле
self::setTemplate($template_id);
reportLog($AVE_Template->get_config_vars('TEMPLATES_REPORT_NEW') . '(' . stripslashes(htmlspecialchars($_REQUEST['template_text'], ENT_QUOTES)) . ') (Id:' . (int)$iid . ')');
if (!$_REQUEST['next_edit'])
{
if (! $_REQUEST['next_edit'])
header('Location:index.php?do=templates&cp=' . SESSION);
}
else
{
header('Location:index.php?do=templates&action=edit&Id=' . (int)$template_new . '&cp=' . SESSION);
}
header('Location:index.php?do=templates&action=edit&Id=' . (int)$template_new . '&cp=' . SESSION);
exit;
}

121
class/class.utm.php

@ -0,0 +1,121 @@
<?php
/*
Версия от 06.03.2018г.
Как это работает:
1) Пользователь зашел на сайт первый раз.
2) Если есть хотя бы один параметр - сохраняет cookies
3) Если utm_history уже есть, то сохраняет данные в utm_last
4) utm_last перезаписывается при каждом новом значении, а utm_history всегда остаётся неизменной (если был передан хотя бы один параметр)
5) utm_source сохраняется всегда до закрытия браузера
*/
class UTMCookie
{
private $parameters = array('utm_source', 'utm_medium', 'utm_campaign');
private $utm_history = '';
private $utm_last = '';
private $utm_source = '';
//Проверка параметров: Если все присутствуют - true, иначе false
private function check_parameters()
{
//return true; //Сохранять всегда!
$return = false;
foreach ($this->parameters as $param)
if (isset($_GET[$param]) && $_GET[$param] != '')
$return = true;
return $return;
}
//Создаёт строку с параметрами вот такого вида: utm_source=test; utm_medium=none; utm_campaign=kompaniya1;
private function create_parameters()
{
$content = '';
foreach($this->parameters as $param){
if (isset($_GET[$param]) && $_GET[$param] != '')
{
$content .= $param.'='.$_GET[$param].'; ';
}
else
{
$content .= $param.'=none; ';
}
}
return $content;
}
//Сохраняет переданные параметры, если требуется
//Если utm_history присутствует, то сохраняет utm_last
public function save_parameters()
{
if (isset($_GET['utm_source']) && trim($_GET['utm_source']) != '')
{
setcookie('utm_source', $_GET['utm_source']);
$this->utm_source = $_GET['utm_source'];
}
//$utm_history = '';
if (! isset($_COOKIE['utm_history']) || $_COOKIE['utm_history'] == '')
{
//Отсутствует utm_history
if($this->check_parameters() == true)
{
$utm_history = $this->create_parameters();
setcookie('utm_history', $utm_history, time()+15552000); //На 6 месяцев
setcookie('utm_last', '');
$this->utm_history = $utm_history;
}
}
else
{
//utm_history присутствует
$this->utm_history = $_COOKIE['utm_history'];
//Перезапишем utm_last, если есть данные для этого
if($this->check_parameters() == true){
$utm_last = $this->create_parameters();
if($utm_last != $_COOKIE['utm_history'])
setcookie('utm_last', $utm_last, time()+15552000); //На 6 месяцев
$this->utm_last = $utm_last;
}
}
return true;
}
//Возвращает значение cookies
public function get_value($name = '')
{
$name = trim($name);
if ($name == '' || ! in_array($name, array('utm_history', 'utm_last', 'utm_source')))
$name = 'utm_history';
if (isset($this->$name) && $this->$name != '')
return $this->$name;
return isset($_COOKIE[$name]) ? $_COOKIE[$name] : '';
}
}
?>

29
fields/multi_line/field.php

@ -14,7 +14,7 @@
// Многострочное
function get_field_multi_line($field_value, $action, $field_id=0, $tpl='', $tpl_empty=0, &$maxlength=null, $document_fields=array(), $rubric_id=0, $default=null, $_tpl = null)
{
global $AVE_Template, $AVE_Document;
global $AVE_Template;
$fld_dir = dirname(__FILE__) . '/';
@ -31,23 +31,16 @@
switch ($action)
{
case 'edit':
if (isset($_COOKIE['no_wysiwyg']) && $_COOKIE['no_wysiwyg'] == 1)
if (isset($_REQUEST['multiedit']) && ($_REQUEST['multiedit'] === true))
{
$field = '<a name="' . $field_id . '"></a>';
$field .= '<textarea style="width: 98%" name="feld[' . $field_id . ']">' . $field_value . '</textarea>';
$oCKeditor = new CKeditor();
$oCKeditor->returnOutput = true;
$oCKeditor->config['toolbar'] = 'Verysmall';
$oCKeditor->config['height'] = 250;
$config = array();
$field = $oCKeditor->editor('data['.$_REQUEST['Id'].'][feld][' . $field_id . ']', $field_value, $config);
}
else
{
if (isset($_REQUEST['outside']) && ($_REQUEST['outside'] === true))
{
$oCKeditor = new CKeditor();
$oCKeditor->returnOutput = true;
$oCKeditor->config['toolbar'] = 'Verysmall';
$oCKeditor->config['height'] = 250;
$config = array();
$field = $oCKeditor->editor('data['.$_REQUEST['Id'].'][feld][' . $field_id . ']', $field_value, $config);
}
else
{
$oCKeditor = new CKeditor();
$oCKeditor->returnOutput = true;
@ -56,17 +49,19 @@
$config = array();
$field = $oCKeditor->editor('feld[' . $field_id . ']', $field_value, $config);
}
}
$res = $field;
break;
case 'doc':
case 'req':
$res = get_field_default($field_value, $action, $field_id, $tpl, $tpl_empty, $maxlength, $document_fields, $rubric_id);
$res = document_pagination($res);
break;
case 'req':
$res = get_field_default($field_value, $action, $field_id, $tpl, $tpl_empty, $maxlength, $document_fields, $rubric_id);
break;
case 'name' :
return $AVE_Template->get_config_vars('name');
break;

34
fields/multi_line_simple/field.php

@ -18,34 +18,29 @@
$fld_dir = dirname(__FILE__) . '/';
$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());
$AVE_Template->config_load($lang_file, 'admin');
$res=0;
$res = null;
switch ($action)
{
case 'edit':
if (isset($_COOKIE['no_wysiwyg']) && $_COOKIE['no_wysiwyg'] == 1)
if (isset($_REQUEST['multiedit']) && ($_REQUEST['multiedit'] === true))
{
$field = '<a name="' . $field_id . '"></a>';
$field .= '<textarea style="width: 98%" name="feld[' . $field_id . ']">' . $field_value . '</textarea>';
$oCKeditor = new CKeditor();
$oCKeditor->returnOutput = true;
$oCKeditor->config['toolbar'] = 'Verysmall';
$oCKeditor->config['height'] = 250;
$config = array();
$field = $oCKeditor->editor('data['.$_REQUEST['Id'].'][feld][' . $field_id . ']', $field_value, $config);
}
else
{
if (isset($_REQUEST['outside']) && ($_REQUEST['outside'] === true))
{
$oCKeditor = new CKeditor();
$oCKeditor->returnOutput = true;
$oCKeditor->config['toolbar'] = 'Verysmall';
$oCKeditor->config['height'] = 250;
$config = array();
$field = $oCKeditor->editor('data['.$_REQUEST['Id'].'][feld][' . $field_id . ']', $field_value, $config);
}
else
{
$oCKeditor = new CKeditor();
$oCKeditor->returnOutput = true;
@ -54,21 +49,24 @@
$config = array();
$field = $oCKeditor->editor('feld[' . $field_id . ']', $field_value, $config);
}
}
$res = $field;
break;
case 'doc':
case 'req':
$res = get_field_default($field_value,$action,$field_id,$tpl,$tpl_empty,$maxlength,$document_fields,$rubric_id);
$res = document_pagination($res);
break;
case 'req':
$res = get_field_default($field_value,$action,$field_id,$tpl,$tpl_empty,$maxlength,$document_fields,$rubric_id);
break;
case 'name' :
return $AVE_Template->get_config_vars('name');
break;
}
return ($res ? $res : $field_value);
}
?>

39
fields/multi_line_slim/field.php

@ -12,40 +12,35 @@
*/
// Многострочное (Слим)
function get_field_multi_line_slim($field_value,$action, $field_id=0, $tpl='', $tpl_empty=0, &$maxlength=null, $document_fields=array(), $rubric_id=0, $default=null, $_tpl=null)
function get_field_multi_line_slim($field_value, $action, $field_id=0, $tpl='', $tpl_empty=0, &$maxlength=null, $document_fields=array(), $rubric_id=0, $default=null, $_tpl=null)
{
global $AVE_Template, $AVE_Document;
global $AVE_Template;
$fld_dir = dirname(__FILE__) . '/';
$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());
$AVE_Template->config_load($lang_file, 'admin');
$res = 0;
$res = null;
switch ($action)
{
case 'edit':
if (isset($_COOKIE['no_wysiwyg']) && $_COOKIE['no_wysiwyg'] == 1)
if (isset($_REQUEST['multiedit']) && ($_REQUEST['multiedit'] === true))
{
$field = '<a name="' . $field_id . '"></a>';
$field .= '<textarea style="width: 98%" name="feld[' . $field_id . ']">' . $field_value . '</textarea>';
$oCKeditor = new CKeditor();
$oCKeditor->returnOutput = true;
$oCKeditor->config['toolbar'] = 'Verysmall';
$oCKeditor->config['height'] = 250;
$config = array();
$field = $oCKeditor->editor('data['.$_REQUEST['Id'].'][feld][' . $field_id . ']', $field_value, $config);
}
else
{
if (isset($_REQUEST['outside']) && ($_REQUEST['outside'] === true))
{
$oCKeditor = new CKeditor();
$oCKeditor->returnOutput = true;
$oCKeditor->config['toolbar'] = 'Verysmall';
$oCKeditor->config['height'] = 250;
$config = array();
$field = $oCKeditor->editor('data['.$_REQUEST['Id'].'][feld][' . $field_id . ']', $field_value, $config);
}
else
{
$oCKeditor = new CKeditor();
$oCKeditor->returnOutput = true;
@ -54,22 +49,24 @@
$config = array();
$field = $oCKeditor->editor('feld[' . $field_id . ']', $field_value, $config);
}
}
$res = $field;
break;
case 'doc':
case 'req':
$res = get_field_default($field_value,$action,$field_id,$tpl,$tpl_empty,$maxlength,$document_fields,$rubric_id);
$res = document_pagination($res);
break;
case 'req':
$res = get_field_default($field_value,$action,$field_id,$tpl,$tpl_empty,$maxlength,$document_fields,$rubric_id);
break;
case 'name' :
return $AVE_Template->get_config_vars('name');
break;
}
return ($res ? $res : $field_value);
return ($res ? $res : $field_value);
}
?>

224
fields/tags/field.php

@ -0,0 +1,224 @@
<?php
/**
* AVE.cms
*
* @package AVE.cms
* @version 3.x
* @filesource
* @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru
*
* @license GPL v.2
*/
// Tags
function get_field_tags ($field_value, $action, $field_id = 0, $tpl = '', $tpl_empty = 0, &$maxlength = null, $document_fields = array(), $rubric_id = 0, $default = null, $_tpl = null)
{
global $AVE_DB, $AVE_Template;
$fld_dir = dirname(__FILE__) . '/';
$tpl_dir = $fld_dir . 'tpl/';
$fld_name = basename($fld_dir);
$rubric_id = $rubric_id > 0
? $rubric_id
: $_REQUEST['rubric_id']
? (int)$_REQUEST['rubric_id']
: $AVE_DB->Query("SELECT rubric_id FROM ".PREFIX."_documents WHERE Id = '".$_REQUEST['Id']."'")->GetCell();
$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');
switch ($action)
{
case 'edit':
$sql = "
SELECT DISTINCT
tag
FROM
".PREFIX."_document_tags
WHERE
rubric_id = '".$rubric_id."'
ORDER BY tag ASC
";
$query = $AVE_DB->Query($sql);
$field_tags = array();
while ($row = $query->GetCell())
array_push($field_tags, $row);
$field_value = explode('|', $field_value);
$field_value = array_diff($field_value, array(''));
$total = count($field_tags);
$field_points = array(ceil($total/4), 2*ceil($total/4), 3*ceil($total/4));
$AVE_Template->assign('field_points', $field_points);
$AVE_Template->assign('field_tags', $field_tags);
$AVE_Template->assign('field_dir', $fld_name);
$AVE_Template->assign('field_id', $field_id);
$AVE_Template->assign('field_value', $field_value);
$tpl_file = get_field_tpl($tpl_dir, $field_id, 'admin', $_tpl);
return $AVE_Template->fetch($tpl_file);
break;
case 'doc':
$AVE_Template->config_load($lang_file, 'public');
if ($tpl_empty)
{
$field_value = explode('|', $field_value);
$field_value = array_diff($field_value, array(''));
$field_value = array_values($field_value);
}
else
{
$field_param = explode('|', $field_value);
$field_param = array_diff($field_param, array(''));
$field_param = array_values($field_param);
$field_value = preg_replace_callback(
'/\[tag:parametr:(\d+)\]/i',
function ($data) use ($field_param)
{
return $field_param[(int)$data[1]];
},
$tpl
);
}
$tpl_file = get_field_tpl($tpl_dir, $field_id, 'doc', $_tpl);
if ($tpl_empty && $tpl_file)
{
$AVE_Template->assign('field_id', $field_id);
$AVE_Template->assign('field_default', $default);
$AVE_Template->assign('field_value', $field_value);
return $AVE_Template->fetch($tpl_file);
}
return $field_value;
break;
case 'req':
$AVE_Template->config_load($lang_file, 'public');
if ($tpl_empty)
{
$field_value = explode('|', $field_value);
$field_value = array_diff($field_value, array(''));
$field_value = array_values($field_value);
}
else
{
$field_param = explode('|', $field_value);
$field_param = array_diff($field_param, array(''));
$field_param = array_values($field_param);
$field_value = preg_replace_callback(
'/\[tag:parametr:(\d+)\]/i',
function($data) use($field_param)
{
return $field_param[(int)$data[1]];
},
$tpl
);
}
$tpl_file = get_field_tpl($tpl_dir, $field_id, 'req', $_tpl);
if ($tpl_empty && $tpl_file)
{
$AVE_Template->assign('field_id', $field_id);
$AVE_Template->assign('field_default', $default);
$AVE_Template->assign('field_value', $field_value);
return $AVE_Template->fetch($tpl_file);
}
return $field_value;
break;
case 'save':
// Регистрируем хук
Hooks::register('DocumentAfterSave', 'afterTagsSave', 10);
$field_value = tagsValue($field_value);
if (! empty($field_value))
$field_value = '|' . implode('|', $field_value) . '|';
return $field_value;
case 'name':
return $AVE_Template->get_config_vars('name');
default:
return $field_value;
}
}
if (! function_exists('tagsValue'))
{
function tagsValue ($field_value)
{
// Если есть выделенные теги
if (! empty($field_value['tags']))
$tags = $field_value['tags'];
else
$tags = array();
unset ($tags['other']);
// Если есть теги через зяпятую
if (! empty($field_value['tags']['other']))
{
$tags_new = explode(',', $field_value['tags']['other']);
$tags_new = array_map('trim', $tags_new);
}
else
$tags_new = array();
// Совмещаем массивы
$tags = array_merge($tags, $tags_new);
// Делаем уникальные значения
$field_value = array_unique($tags);
return $field_value;
}
}
if (! function_exists('afterTagsSave'))
{
function afterTagsSave ($data)
{
global $AVE_Document;
foreach ($data['data']['feld'] AS $_k => $_v)
{
if (array_key_exists('tags', $_v))
{
$tags = tagsValue($_v);
if (! empty($tags))
{
$tags = implode(',', $tags);
$AVE_Document->saveTags($data['document_id'], $data['rubric_id'], $tags);
}
}
}
}
}
?>

4
fields/tags/lang/ru.txt

@ -0,0 +1,4 @@
[admin]
name = "Теги"
new = "Новые теги, через запятую"
notags = "Отсутвуют теги"

9
fields/tags/tpl/field-doc.tpl

@ -0,0 +1,9 @@
{*
$field_id
$field_value
*}
{if $field_value}
{foreach from=$field_value item=tag}
<li>{$tag}</li>
{/foreach}
{/if}

5
fields/tags/tpl/field-req.tpl

@ -0,0 +1,5 @@
{*
$field_id
$field_value
*}
{$field_value}

26
fields/tags/tpl/field.tpl

@ -0,0 +1,26 @@
{if $field_tags}
<div style="width:25%; float:left;">
{foreach from=$field_tags item=tag name=tags}
<label style="clear:both; display:block; padding: 2px; width: 90%;">
<input class="float checkbox" type="checkbox" value="{$tag}" name="feld[{$field_id}][tags][]" {if in_array($tag, $field_value)}checked="checked"{/if} />&nbsp;{$tag}
</label>
{if in_array($smarty.foreach.tags.index, $field_points)}
<div class="fix"></div>
</div>
<div style="width:25%; float:left;">
{/if}
{/foreach}
<div class="fix"></div>
</div>
{else}
<ul class="messages">
<li class="highlight yellow">{#notags#}</li>
</ul>
{/if}
<div class="fix"></div>
<div>
<br/>
<h6>{#new#}</h6>
<input type="text" style="width: 100%;" name="feld[{$field_id}][tags][other]" value="" class="mousetrap" />
<div class="fix"></div>
</div>

4
functions/func.breadcrumbs.php

@ -97,7 +97,7 @@
FROM
" . PREFIX . "_documents
WHERE
Id = '" . $curent_document . "'", -1, 'doc_' . $curent_document
Id = '" . $curent_document . "'", -1, 'brd_' . $curent_document, true, '.breadcrumbs'
);
$row_document = $sql_document->FetchRow();
@ -131,7 +131,7 @@
FROM
" . PREFIX . "_documents
WHERE
Id = '" . $current->document_parent . "'", -1, 'doc_' . $current->document_parent
Id = '" . $current->document_parent . "'", -1, 'brd_' . $current->document_parent, true, '.item'
);
$row_doc = $sql_doc->FetchRow();

100
functions/func.common.php

@ -258,7 +258,13 @@
static $settings = null;
if ($settings === null)
$settings = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_settings", SYSTEM_CACHE_LIFETIME, 'settings')->FetchAssocArray();
$settings = $AVE_DB->Query("
SELECT
# SETTINGS
*
FROM
" . PREFIX . "_settings
", -1, 'settings', true, '.settings')->FetchAssocArray();
if ($field == '')
return $settings;
@ -1101,6 +1107,8 @@
*/
function output_compress($data)
{
global $AVE_DB;
$Gzip = strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false;
if (HTML_COMPRESSION)
@ -1108,6 +1116,20 @@
if ($Gzip && GZIP_COMPRESSION)
{
if (
! defined('ONLYCONTENT')
&&
UGROUP == 1
&&
defined('PROFILING') && PROFILING
)
{
$data .= "\r\n" . "<!-- ------ Time generation: ".Debug::getStatistic('time')." sec ----- -->";
$data .= "\r\n" . "<!-- ------ Memory usage: ".Debug::getStatistic('memory')." ----- -->";
$data .= "\r\n" . "<!-- ------ Memory peak usage: ".Debug::getStatistic('peak')." ----- -->";
$data .= "\r\n" . "<!-- ------ SQL Queries: ".$AVE_DB->DBProfilesGet('count')." for ".$AVE_DB->DBProfilesGet('time')." sec ----- -->";
}
$content = gzencode($data, 9);
header ('Content-Encoding: gzip');
}
@ -1128,4 +1150,80 @@
echo $content;
}
/**
* Функция создает короткий URL документа для редиректа
* После выполения функции нужно очистить кеш данного документа
*
* @return
*/
function gen_short_link ($length = 1, $doc_id)
{
global $AVE_DB;
if (! is_numeric($doc_id))
return false;
// Проврека на существование редиректа для данного документа
$check_doc = $AVE_DB->Query("
SELECT
id
FROM
" . PREFIX . "_document_alias_history
WHERE
document_id = '" . $doc_id . "'
")->GetCell();
// Если редирект отсутствует
if (! $check_doc)
{
$characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$short_link = '';
for ($i = 0; $i < $length; $i++)
$short_link .= $characters[rand(0, strlen($characters) - 1)];
// Проеряем есть такое редирект уже
$exists = $AVE_DB->Query("
SELECT
id
FROM
" . PREFIX . "_document_alias_history
WHERE
document_alias = '" . $short_link . "'
")->GetCell();
// Если есть, повторяем генерацию
if ($exists)
{
gen_short_link($length, $doc_id);
}
// Иначе заносим в БД
else
{
$AVE_DB->Query("
INSERT INTO
" . PREFIX . "_document_alias_history
SET
document_id = '" . $doc_id . "',
document_alias = '" . $short_link . "',
document_alias_author = '" . $_SESSION['user_id'] . "',
document_alias_changed = '" . time() . "'
");
$AVE_DB->Query("
UPDATE
" . PREFIX . "_documents
SET
document_short_alias = '" . $short_link . "'
WHERE
Id = '" . $doc_id . "'
");
}
}
return true;
}
?>

47
functions/func.documents.php

@ -94,14 +94,9 @@
if (! isset ($get_documents_data[$doc_id]))
{
$get_documents_data[$doc_id] = $AVE_DB->Query("
SELECT
*
FROM
" . PREFIX . "_documents
WHERE
Id = '" . $doc_id . "'
")->FetchAssocArray();
$get_documents_data[$doc_id] = getDocument($doc_id);
$get_documents_data[$doc_id] = object2array($get_documents_data[$doc_id]);
$get_documents_data[$doc_id]['doc_title'] = $get_documents_data[$doc_id]['document_title'];
$get_documents_data[$doc_id]['feld'] = array();
@ -112,4 +107,40 @@
else
return $get_documents_data[$doc_id];
}
/**
* Функция отдаёт основные параметры дока
*
* @param int $doc_id - номер id документа
*
* @return object
*/
function getDocument ($doc_id)
{
global $AVE_DB;
$doc_id = (int)$doc_id;
if ($doc_id < 1)
return false;
$sql = "
SELECT
# DOCUMENT = $doc_id
*
FROM
" . PREFIX . "_documents
WHERE
Id = '" . $doc_id . "'
";
$cache_time = (defined('CACHE_DOC_FILE') && CACHE_DOC_FILE)
? -1
: 0;
$data = $AVE_DB->Query($sql, $cache_time, 'dat_' . $doc_id, true, '.data')->FetchRow();
return $data;
}
?>

69
functions/func.fields.php

@ -42,17 +42,20 @@
/**
* Проверка папок /fields/ в модулях, на наличие полей
*/
$d = dir(BASE_DIR . '/modules');
while (false !== ($entry = $d->read()))
if (is_dir(BASE_DIR . '/modules/'))
{
$module_dir = $d->path . '/' . $entry;
$d = dir(BASE_DIR . '/modules');
if (is_dir($module_dir) && file_exists($module_dir . '/field.php'))
require_once($module_dir . '/field.php');
}
while (false !== ($entry = $d->read()))
{
$module_dir = $d->path . '/' . $entry;
$d->Close();
if (is_dir($module_dir) && file_exists($module_dir . '/field.php'))
require_once($module_dir . '/field.php');
}
$d->Close();
}
/**
@ -216,7 +219,7 @@
static $alias_field_id = array();
if(isset($alias_field_id[$id]))
if (isset($alias_field_id[$id]))
return $alias_field_id[$id];
$sql = "
@ -352,7 +355,7 @@
if ($field_value != '')
{
$field_value = strip_tags($field_value, "<br /><strong><em><p><i>");
$field_value = strip_tags($field_value); // "<br /><strong><em><p><i>"
if (is_numeric($length) && $length != 0)
{
@ -406,7 +409,7 @@
*/
function get_document_fields($document_id, $values = null)
{
global $AVE_DB, $request_documents;
global $AVE_DB, $request_documents, $AVE_Core;
static $document_fields = array();
@ -419,42 +422,64 @@
$where = "WHERE doc_field.document_id = '" . $document_id . "'";
$query="
$query = "
SELECT
# DOC FIELDS = $document_id
doc.document_author_id,
doc_field.Id,
doc_field.document_id,
doc_field.rubric_field_id,
doc_field.field_value,
text_field.field_value as field_value_more,
rub_field.rubric_field_alias,
rub_field.rubric_field_type,
rub_field.rubric_field_default,
doc_field.field_value,
text_field.field_value as field_value_more,
doc.document_author_id,
rub_field.rubric_field_title,
rub_field.rubric_field_template,
rub_field.rubric_field_template_request
FROM
" . PREFIX . "_document_fields AS doc_field
JOIN
" . PREFIX . "_rubric_fields AS rub_field
ON doc_field.rubric_field_id = rub_field.Id
LEFT JOIN
" . PREFIX . "_document_fields_text AS text_field
ON (doc_field.rubric_field_id = text_field.rubric_field_id AND doc_field.document_id = text_field.document_id)
ON (doc_field.rubric_field_id = text_field.rubric_field_id AND doc_field.document_id = text_field.document_id)
JOIN
" . PREFIX . "_documents AS doc
ON doc.Id = doc_field.document_id
ON doc.Id = doc_field.document_id
" . $where;
$sql = $AVE_DB->Query($query, -1, 'doc_'.$document_id);
$cache_id = (int)$AVE_Core->curentdoc->Id;
$cache_id = 'documents/fields/' . (floor($cache_id / 1000)) . '/' . $cache_id;
//Вдруг памяти мало!!!!
if (memory_panic() && (count($document_fields) > 3))
$cache_file = md5($query) . '.fields';
$cache_dir = BASE_DIR . '/tmp/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 . $cache_file))
{
$document_fields = array();
// Получаем время создания файла
$file_time = filemtime($cache_dir . $cache_file);
// Получаем время для проверки
$cache_time = $AVE_Core->curentdoc->rubric_changed_fields;
// Сравниваем временные метки
if (! $cache_time || $cache_time > $file_time)
unlink ($cache_dir . $cache_file);
}
// Безусловный кеш
$sql = $AVE_DB->Query($query, -1, 'fld_' . $document_id, true, '.fields');
// Вдруг памяти мало!!!!
if (memory_panic() && (count($document_fields) > 3))
$document_fields = array();
while ($row = $sql->FetchAssocArray())
{
$row['tpl_req_empty'] = (trim($row['rubric_field_template_request']) == '');

31
functions/func.navigation.php

@ -29,6 +29,7 @@
// Достаем для проверки тип меню
$sql = "
SELECT
# NAVIGATION = $navi_id
expand_ext
FROM
".PREFIX."_navigation
@ -38,7 +39,7 @@
alias = '" . $navi_id . "'
";
$expnad_ext = $AVE_DB->Query($sql, SYSTEM_CACHE_LIFETIME, 'nav_' . $navi_id)->GetCell();
$expnad_ext = $AVE_DB->Query($sql, -1, 'nav_' . $navi_id, true, '.naviagtion')->GetCell();
// извлекаем level из аргумента
$navi_print_level = (! empty($navi_tag[2]))
@ -47,7 +48,7 @@
$navi = '';
$cache_file = BASE_DIR . '/tmp/cache/sql/nav/template-' . $navi_id . '.cache';
$cache_file = BASE_DIR . '/tmp/cache/sql/navigations/' . $navi_id . '/template.cache';
// Если включен DEV MODE, то отключаем кеширование запросов
if (defined('DEV_MODE') AND DEV_MODE || $expnad_ext != 1)
@ -108,18 +109,28 @@
// запрос для выборки по текущему алиасу
$sql_doc_active_alias = '';
$url_suff = '';
if (defined('URL_SUFF') AND URL_SUFF)
{
$url_suff = "
OR nav.alias = '" . $alias . URL_SUFF . "'
OR nav.alias = '/" . $alias . URL_SUFF . "'
";
}
if ($AVE_Core->curentdoc->Id == $doc_active_id)
{
$sql_doc_active_alias = "
OR nav.alias = '" . $alias . "'
OR nav.alias = '/" . $alias . "'
OR nav.alias = '" . $alias . URL_SUFF . "'
OR nav.alias = '/" . $alias . URL_SUFF . "'
" . $url_suff . "
";
}
$navi_active = $AVE_DB->Query("
SELECT CONCAT_WS(
SELECT
CONCAT_WS(
';',
CONCAT_WS(',', nav.navigation_item_id, nav.parent_id, nav2.parent_id),
CONCAT_WS(',', nav.level),
@ -201,7 +212,7 @@
}
}
$cache_items = BASE_DIR . '/tmp/cache/sql/nav/items-' . $navi_id . '.cache';
$cache_items = BASE_DIR . '/tmp/cache/sql/navigations/' . $navi_id . '/items.cache';
$navi_items = array();
@ -216,7 +227,8 @@
{
//-- Запрос пунктов меню
$sql = "
SELECT *
SELECT
*
FROM
" . PREFIX . "_navigation_items
WHERE
@ -246,7 +258,8 @@
{
//-- Запрос пунктов меню
$sql = "
SELECT *
SELECT
*
FROM
" . PREFIX . "_navigation_items
WHERE
@ -464,7 +477,7 @@
if (empty($navi))
$navi = '';
$navi .= eval2var(' ?>' . $item . '<?php ');
$navi .= eval2var(' ?'.'>' . $item . '<'.'?php ');
}
// Вставляем все пункты уровня в шаблон уровня

202
functions/func.parserequest.php

@ -16,14 +16,17 @@
global $AVE_DB;
// Получаем информацию о запросе
$reqest_settings = $AVE_DB->Query("
$sql = "
SELECT
#REQUEST SETTINGS = $id
*
FROM
" . PREFIX . "_request
WHERE
" . (is_numeric($id) ? 'Id' : 'request_alias') . " = '" . $id . "'
", -1, 'request/settings/' . $id)->FetchRow();
";
$reqest_settings = $AVE_DB->Query($sql, -1, 'rqs_' . $id, true, '.settings')->FetchRow();
// Выходим, если нет запроса
if (! is_object($reqest_settings))
@ -197,7 +200,7 @@
Id = '" . $id . "'
");
$AVE_DB->clear_request($id);
$AVE_DB->clearRequest($id);
}
return @$retval;
@ -275,7 +278,7 @@
if ($maxlength != '')
{
if ($maxlength == 'more' || $maxlength == 'esc'|| $maxlength == 'img')
if ($maxlength == 'more' || $maxlength == 'esc'|| $maxlength == 'img' || $maxlength == 'strip')
{
if ($maxlength == 'more')
{
@ -291,6 +294,13 @@
{
$field_value = getImgSrc($field_value);
}
elseif ($maxlength == 'strip')
{
$field_value = str_replace(array("\r\n","\n","\r"), " ", $field_value);
$field_value = strip_tags($field_value, REQUEST_STRIP_TAGS);
$field_value = preg_replace('/ +/', ' ', $field_value);
$field_value = trim($field_value);
}
}
elseif (is_numeric($maxlength))
{
@ -336,22 +346,23 @@
// Функция получения элемента запроса
function showrequestelement($mixed, $template = '', $tparams = '')
{
global $AVE_DB, $req_item_num, $params_of_teaser, $use_cache;
global
$AVE_DB,
$req_item_num,
$params_of_teaser,
$use_cache,
$request_id,
$request_changed,
$request_changed_elements;
if (is_array($mixed))
$mixed = $mixed[1];
$row = intval($mixed[1]);
$row = (is_object($mixed) ? $mixed : $AVE_DB->Query("
SELECT
a.*
FROM
" . PREFIX . "_documents AS a
WHERE
a.Id = '" . intval($mixed) . "'
GROUP BY
a.Id
LIMIT 1
")->FetchRow());
$row = (is_object($mixed)
? $mixed
: getDocument($row));
unset ($mixed);
if (! $row)
return '';
@ -360,17 +371,47 @@
if ($tparams != '')
{
$tparams_id = $row->Id.md5($tparams); // Создаем уникальный id для каждого набора параметров
$tparams_id = $row->Id . md5($tparams); // Создаем уникальный id для каждого набора параметров
$params_of_teaser[$tparams_id] = array(); // Для отмены лишних ворнингов
$tparams = trim($tparams,'[]:'); // Удаляем: слева ':[', справа ']'
$params_of_teaser[$tparams_id] = explode('|',$tparams); // Заносим параметры в массив уникального id
}
$template = ($template > '' ? $template : $AVE_DB->Query(
"SELECT rubric_teaser_template FROM " . PREFIX . "_rubrics WHERE Id='" . intval($row->rubric_id) . "'"
)->GetCell());
$sql = "
SELECT
rubric_teaser_template
FROM
" . PREFIX . "_rubrics
WHERE
Id = '" . intval($row->rubric_id) . "'
";
$template = ($template > ''
? $template
: $AVE_DB->Query($sql)->GetCell());
$hash = 'g-' . UGROUP; // Группа пользователей
$hash .= 'r-' . $request_id; // ID Запроса
$hash .= 't-' . $row->Id; // ID документа
$hash = md5($hash);
$cachefile_docid = BASE_DIR . '/tmp/cache/sql/request/' . $row->Id . '/request-' . md5($template) . '.cache';
$cache_id = 'requests/elements/' . (floor($row->Id / 1000)) . '/' . $row->Id;
$cachefile_docid = BASE_DIR . '/tmp/cache/sql/' . $cache_id . '/' . $hash . '.element';
if (file_exists($cachefile_docid) && isset($use_cache) && $use_cache == 1)
{
$check_file = $request_changed_elements;
if ($check_file > filemtime($cachefile_docid))
unlink ($cachefile_docid);
}
else
{
if (file_exists($cachefile_docid))
unlink ($cachefile_docid);
}
// Если включен DEV MODE, то отключаем кеширование запросов
if (defined('DEV_MODE') AND DEV_MODE)
@ -378,8 +419,8 @@
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);
$template = preg_replace("/\[tag:if_notempty:rfld:([a-zA-Z0-9-_]+)]\[(more|esc|img|strip|[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|strip|[0-9-]+)]/u", '<'.'?php if((htmlspecialchars(request_get_document_field(\'$1\', '.$row->Id.', \'$2\', '.(int)$row->rubric_id.'), ENT_QUOTES)) == \'\') { '.'?'.'>', $template);
$template = str_replace('[tag:if:else]', '<?php }else{ ?>', $template);
$template = str_replace('[tag:/if]', '<?php } ?>', $template);
@ -401,7 +442,7 @@
// Парсим теги полей
$item = preg_replace_callback(
'/\[tag:rfld:([a-zA-Z0-9-_]+)]\[(more|esc|img|[0-9-]+)]/',
'/\[tag:rfld:([a-zA-Z0-9-_]+)]\[(more|esc|img|strip|[0-9-]+)]/',
create_function(
'$m',
'return request_get_document_field($m[1], ' . $row->Id . ', $m[2], ' . (int)$row->rubric_id . ');'
@ -411,7 +452,7 @@
// Повторно парсим теги полей
$item = preg_replace_callback(
'/\[tag:rfld:([a-zA-Z0-9-_]+)]\[(more|esc|img|[0-9-]+)]/',
'/\[tag:rfld:([a-zA-Z0-9-_]+)]\[(more|esc|img|strip|[0-9-]+)]/',
create_function(
'$m',
'return request_get_document_field($m[1], ' . $row->Id . ', $m[2], ' . (int)$row->rubric_id . ');'
@ -472,7 +513,6 @@
if ($tparams != '')
{
// Заменяем tparam в тизере
// $item = preg_replace('/\[tparam:([0-9]+)\]/', '<'.'?php echo $params_of_teaser["'.$tparams_id.'"][$1]'.'?'.'>', $item); // косячная версия, пока оставил
$item = preg_replace_callback(
'/\[tparam:([0-9]+)\]/',
create_function(
@ -715,12 +755,9 @@
$request_where[] = "a.document_published <= UNIX_TIMESTAMP() AND (a.document_expire = 0 OR a.document_expire >= UNIX_TIMESTAMP())";
// Условия запроса
// если используется выпадающий список, получаем строку без сохранения
if (! empty($_POST['req_' . $id]) || ! empty($_SESSION['doc_' . $AVE_Core->curentdoc->Id]['req_' . $id]))
$where_cond = request_get_condition_sql_string($request->Id, false);
// если условия пустые, получаем строку с сохранением её в бд
elseif (! $request->request_where_cond)
$where_cond = request_get_condition_sql_string($request->Id, true);
if (! $request->request_where_cond)
$where_cond = request_get_condition_sql_string($request->Id, false);
// иначе, берём из запроса
else
$where_cond = unserialize($request->request_where_cond);
@ -795,73 +832,84 @@
if ($request_select)
$request_select_str = ',' . implode(",\r\n",$request_select);
unset($a, $t, $v);
unset ($a, $t, $v);
// Составляем запрос к БД
$sql = " ?>
#REQUEST = $request->Id
SELECT STRAIGHT_JOIN SQL_CALC_FOUND_ROWS
a.*
" . $request_select_str . "
FROM
" . $where_cond['from'] . "
" . (isset($params['USER_FROM']) ? $params['USER_FROM'] : '') . "
" . PREFIX . "_documents AS a
" . implode(' ', $request_join) . "
" . (isset($params['USER_JOIN']) ? $params['USER_FROM'] : '') . "
WHERE
" . $request_where_str . "
GROUP BY a.Id
" . $request_order_str . "
" . $limit_str . "
<? ";
$sql_request = eval2var($sql);
if (! isset($params['SQL_QUERY']))
{
// Составляем запрос к БД
$sql = " ?>
SELECT STRAIGHT_JOIN SQL_CALC_FOUND_ROWS
#REQUEST = $request->Id
a.*
" . $request_select_str . "
FROM
" . $where_cond['from'] . "
" . (isset($params['USER_FROM']) ? $params['USER_FROM'] : '') . "
" . PREFIX . "_documents AS a
" . implode(' ', $request_join) . "
" . (isset($params['USER_JOIN']) ? $params['USER_FROM'] : '') . "
WHERE
" . $request_where_str . "
GROUP BY a.Id
" . $request_order_str . "
" . $limit_str . "
<?"."php ";
unset($sql);
$sql_request = eval2var($sql);
// Убираем дубли в выборе полей
foreach(array_keys($request_join) AS $key)
{
$search = PREFIX . '_document_fields AS t' . $key . ',';
unset ($sql);
if (preg_match('/' . $search . '/', $sql_request) > 0)
// Убираем дубли в выборе полей
foreach (array_keys($request_join) AS $key)
{
$sql_request = str_replace($search, '', $sql_request);
$search = PREFIX . '_document_fields AS t' . $key . ',';
if (preg_match('/' . $search . '/', $sql_request) > 0)
{
$sql_request = str_replace($search, '', $sql_request);
}
}
}
// Если просили просто показать сформированный запрос
if ((isset($params['DEBUG']) && $params['DEBUG'] == 1) || $request->request_show_sql == 1)
{
$return = Debug::_print($sql_request);
// Если просили просто показать сформированный запрос
if ((isset($params['DEBUG']) && $params['DEBUG'] == 1) || $request->request_show_sql == 1)
{
$return = Debug::_print($sql_request);
return $return;
return $return;
}
}
else
{
$sql_request = $params['SQL_QUERY'];
}
// Выполняем запрос к бд
$sql = $AVE_DB->Query($sql_request, (int)$request->request_cache_lifetime, 'rub_' . $request->rubric_id);
$sql = $AVE_DB->Query($sql_request, (int)$request->request_cache_lifetime, 'rqs_' . $id, true, '.request');
// Если просили просто вернуть запрос, возвращаем результат
// Если просили просто вернуть резльтат запроса, возвращаем результат
if (isset($params['RETURN_SQL']) && $params['RETURN_SQL'] == 1)
return $AVE_DB->GetFoundRows();
$num_items = 0;
// Если есть вывод пагинации, то выполняем запрос на получение кол-ва элементов
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);
$num_items = $AVE_DB->NumAllRows($sql_request, (int)$request->request_cache_lifetime, 'rqs_' . $id);
else
$num_items = $AVE_DB->GetFoundRows();
$num_items = ((isset($params['NO_FOUND_ROWS']) && $params['NO_FOUND_ROWS'] == 1) || ! $request->request_count_items
? 0
: $AVE_DB->GetFoundRows());
// Если просили просто вернуть кол-во, возвращаем результат
if (isset($params['RETURN_COUNT']) && $params['RETURN_COUNT'] == 1)
return $num_items;
unset($sql_request);
unset ($sql_request);
// Приступаем к обработке шаблона
$main_template = $request->request_template_main;
//-- Если кол-во элементов больше 0
//-- Если кол-во элементов больше 0, удалаяем лишнее
if ($num_items > 0)
{
$main_template = preg_replace('/\[tag:if_empty](.*?)\[\/tag:if_empty]/si', '', $main_template);
@ -903,12 +951,13 @@
}
// Запоминаем глобально
@$GLOBALS['page_id'][$_REQUEST['id']]['apage'] = (@$GLOBALS['page_id'][$_REQUEST['id']]['apage'] > $num_pages
@$GLOBALS['page_id'][$_REQUEST['id']]['apage'] = (isset($GLOBALS['page_id'][$_REQUEST['id']]['apage']) && $GLOBALS['page_id'][$_REQUEST['id']]['apage'] > $num_pages
? @$GLOBALS['page_id'][$_REQUEST['id']]['apage']
: $num_pages);
$pagination = '';
// Если кол-во страниц больше 1й
if ($num_pages > 1)
{
$queries = '';
@ -976,10 +1025,15 @@
//-- Общее число элементов
$items_count = count($rows);
global $req_item_num, $use_cache;
global $req_item_num, $use_cache, $request_id, $request_changed, $request_changed_elements;
$use_cache = $request->request_cache_elements;
$request_id = $request->Id;
$request_changed = $request->request_changed;
$request_changed_elements = $request->request_changed_elements;
$item = '';
foreach ($rows as $row)

367
functions/func.watermarks.php

@ -1,213 +1,226 @@
<?php
/**
* AVE.cms
*
* @package AVE.cms
* @version 3.x
* @filesource
* @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru
*
* @license GPL v.2
*/
/**
* Функция дописывает в JPG файлы IPTC Tag
*
* @param string $rec
* @param string $data
* @param string $value
* @return string
*/
function iptc_make_tag($rec, $data, $value)
{
$length = strlen($value);
$retval = chr(0x1C) . chr($rec) . chr($data);
if($length < 0x8000)
{
$retval .= chr($length >> 8) . chr($length & 0xFF);
}
else
/**
* AVE.cms
*
* @package AVE.cms
* @version 3.x
* @filesource
* @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru
*
* @license GPL v.2
*/
/**
* Функция дописывает в JPG файлы IPTC Tag
*
* @param string $rec
* @param string $data
* @param string $value
* @return string
*/
if (! function_exists('iptc_make_tag'))
{
$retval .= chr(0x80) .
chr(0x04) .
chr(($length >> 24) & 0xFF) .
chr(($length >> 16) & 0xFF) .
chr(($length >> 8) & 0xFF) .
chr($length & 0xFF);
}
return $retval . $value;
}
/**
* Функция накладывает watermark на заданный файл
*
* @param string $file URL Файла
* @param string $position Позиция
* @param int $transparency Прозарчность
* @return string link
*/
function watermarks($file, $position='center', $transparency=100) {
function iptc_make_tag($rec, $data, $value)
{
$length = strlen($value);
$retval = chr(0x1C) . chr($rec) . chr($data);
global $AVE_DB;
if ($length < 0x8000)
{
$retval .= chr($length >> 8) . chr($length & 0xFF);
}
else
{
$retval .= chr(0x80) .
chr(0x04) .
chr(($length >> 24) & 0xFF) .
chr(($length >> 16) & 0xFF) .
chr(($length >> 8) & 0xFF) .
chr($length & 0xFF);
}
if (!defined('WATERMARKS_DIR') || !defined('WATERMARKS_FILE')) exit(0);
return $retval . $value;
}
}
$save = true;
$margin = 10;
/**
* Функция накладывает watermark на заданный файл
*
* @param string $file URL Файла
* @param string $position Позиция
* @param int $transparency Прозарчность
* @return string link
*/
function watermarks($file, $position='center', $transparency=100)
{
global $AVE_DB;
$file_info = pathinfo($file);
if (! defined('WATERMARKS_DIR') || ! defined('WATERMARKS_FILE'))
return $file;
$watermarkFile = BASE_DIR . '/' . WATERMARKS_FILE;
$watermarkDir = BASE_DIR . '/' . WATERMARKS_DIR;
$save = true;
$imagePath = BASE_DIR . '/' . trim($file_info['dirname'], '/');
$imageName = $file_info['basename'];
$margin = 10;
$copyPath = $watermarkDir . '/' . trim($file_info['dirname'], '/');
$copyName = $imageName;
$file_info = pathinfo($file);
if(!is_dir($watermarkDir)) {
@mkdir($watermarkDir, 0777, true);
write_htaccess_deny($watermarkDir);
}
$watermarkFile = BASE_DIR . '/' . WATERMARKS_FILE;
$watermarkDir = BASE_DIR . '/' . WATERMARKS_DIR;
if(file_exists("$copyPath/$copyName") || !file_exists("$imagePath/$imageName")){
$save = false;
}
$imagePath = BASE_DIR . '/' . trim($file_info['dirname'], '/');
$imageName = $file_info['basename'];
if(file_exists($watermarkFile) && file_exists("$imagePath/$imageName")){
$copyPath = $watermarkDir . '/' . trim($file_info['dirname'], '/');
$copyName = $imageName;
$size_image = getimagesize("$imagePath/$imageName");
$size_wtmrk = getimagesize($watermarkFile);
if (! file_exists($watermarkDir . $file))
return $file;
list($xImage, $yImage) = $size_image;
list($xWtmrk, $yWtmrk) = $size_wtmrk;
if (! is_dir($watermarkDir))
{
@mkdir($watermarkDir, 0777, true);
write_htaccess_deny($watermarkDir);
}
if ($xImage < $xWtmrk || $yImage < $yWtmrk) {
if (file_exists("$copyPath/$copyName") || !file_exists("$imagePath/$imageName"))
$save = false;
} else {
$save = true;
}
}
if (file_exists("$copyPath/$copyName")) $save = false;
if (file_exists($watermarkFile) && file_exists("$imagePath/$imageName"))
{
$size_image = getimagesize("$imagePath/$imageName");
$size_wtmrk = getimagesize($watermarkFile);
if ($save){
if (!is_dir($copyPath) && !@mkdir($copyPath, 0777, true)) exit(0);
require_once BASE_DIR.'/class/class.thumbnail.php';
$watermark = new Image_Toolbox("$imagePath/$imageName");
list($xImage, $yImage) = $size_image;
list($xWtmrk, $yWtmrk) = $size_wtmrk;
if (rename("$imagePath/$imageName", "$copyPath/$copyName"))
{
$old = umask(0);
chmod("$copyPath/$copyName", 0777);
umask($old);
if ($xImage < $xWtmrk || $yImage < $yWtmrk)
$save = false;
else
$save = true;
}
switch ($position)
if (file_exists("$copyPath/$copyName"))
$save = false;
if ($save)
{
case 'top':
case 'topcenter':
$xLogoPosition = 'center -';
$yLogoPosition = 'top +'.$margin;
break;
case 'topleft':
$xLogoPosition = 'left +'.$margin;
$yLogoPosition = 'top +'.$margin;
break;
case 'topright':
$xLogoPosition = 'right -'.$margin;
$yLogoPosition = 'top +'.$margin;
break;
case 'center':
$xLogoPosition = 'center -';
$yLogoPosition = 'center -';
break;
case 'centerleft':
$xLogoPosition = 'left +'.$margin;
$yLogoPosition = 'center -';
break;
case 'centerright':
$xLogoPosition = 'right -'.$margin;
$yLogoPosition = 'center -';
break;
case 'bottom':
case 'bottomcenter':
$xLogoPosition = 'center -';
$yLogoPosition = 'bottom -'.$margin;
break;
case 'bottomleft':
$xLogoPosition = 'left +'.$margin;
$yLogoPosition = 'bottom -'.$margin;
break;
case 'bottomright':
$xLogoPosition = 'right -'.$margin;
$yLogoPosition = 'bottom -'.$margin;
break;
case 'repeat':
$xLogoPosition = 'repeat ';
$yLogoPosition = 'repeat ';
break;
default:
$xLogoPosition = 'center -';
$yLogoPosition = 'center -';
break;
}
if (! is_dir($copyPath) && !@mkdir($copyPath, 0777, true))
return $file;
$watermark->addImage($watermarkFile);
$watermark->blend($xLogoPosition, $yLogoPosition, IMAGE_TOOLBOX_BLEND_COPY, $transparency);
$watermark->save("$imagePath/$imageName");
require_once BASE_DIR.'/class/class.thumbnail.php';
if($watermark->_img['main']['type']==2){
$image = getimagesize("$imagePath/$imageName", $info);
if(!isset($info['APP13']))
$watermark = new Image_Toolbox("$imagePath/$imageName");
if (rename("$imagePath/$imageName", "$copyPath/$copyName"))
{
$old = umask(0);
chmod("$copyPath/$copyName", 0777);
umask($old);
}
$sitename = get_settings('site_name');
switch ($position)
{
case 'top':
case 'topcenter':
$xLogoPosition = 'center -';
$yLogoPosition = 'top +'.$margin;
break;
case 'topleft':
$xLogoPosition = 'left +'.$margin;
$yLogoPosition = 'top +'.$margin;
break;
case 'topright':
$xLogoPosition = 'right -'.$margin;
$yLogoPosition = 'top +'.$margin;
break;
case 'center':
$xLogoPosition = 'center -';
$yLogoPosition = 'center -';
break;
case 'centerleft':
$xLogoPosition = 'left +'.$margin;
$yLogoPosition = 'center -';
break;
case 'centerright':
$xLogoPosition = 'right -'.$margin;
$yLogoPosition = 'center -';
break;
case 'bottom':
case 'bottomcenter':
$xLogoPosition = 'center -';
$yLogoPosition = 'bottom -'.$margin;
break;
case 'bottomleft':
$xLogoPosition = 'left +'.$margin;
$yLogoPosition = 'bottom -'.$margin;
break;
case 'bottomright':
$xLogoPosition = 'right -'.$margin;
$yLogoPosition = 'bottom -'.$margin;
break;
case 'repeat':
$xLogoPosition = 'repeat ';
$yLogoPosition = 'repeat ';
break;
default:
$xLogoPosition = 'center -';
$yLogoPosition = 'center -';
break;
}
// установка IPTC тэгов
$iptc = array(
'2#120' => iconv("UTF-8","WINDOWS-1251",$sitename),
'2#116' => "http://".$_SERVER['SERVER_NAME']
);
$watermark->addImage($watermarkFile);
$watermark->blend($xLogoPosition, $yLogoPosition, IMAGE_TOOLBOX_BLEND_COPY, $transparency);
$watermark->save("$imagePath/$imageName");
// Преобразование IPTC тэгов в двоичный код
$data = '';
if ($watermark->_img['main']['type'] == 2)
{
$image = getimagesize("$imagePath/$imageName", $info);
foreach($iptc as $tag => $string)
if (! isset($info['APP13']))
{
$tag = substr($tag, 2);
$data .= iptc_make_tag(2, $tag, $string);
$sitename = get_settings('site_name');
// установка IPTC тэгов
$iptc = array(
'2#120' => iconv("UTF-8","WINDOWS-1251",$sitename),
'2#116' => "http://".$_SERVER['SERVER_NAME']
);
// Преобразование IPTC тэгов в двоичный код
$data = '';
foreach ($iptc AS $tag => $string)
{
$tag = substr($tag, 2);
$data .= iptc_make_tag(2, $tag, $string);
}
// Встраивание IPTC данных
$content = iptcembed($data, "$imagePath/$imageName");
// запись нового изображения в файл
$fp = fopen("$imagePath/$imageName", "wb");
fwrite($fp, $content);
fclose($fp);
}
// Встраивание IPTC данных
$content = iptcembed($data, "$imagePath/$imageName");
// запись нового изображения в файл
$fp = fopen("$imagePath/$imageName", "wb");
fwrite($fp, $content);
fclose($fp);
}
unset($watermark);
}
unset($watermark);
return $file;
}
return $file;
}
?>
?>

4
inc/config.php

@ -124,8 +124,8 @@
$GLOBALS['CMS_CONFIG']['SMARTY_USE_SUB_DIRS'] = array('DESCR' => 'Создание папок для кэширования Установите это в false если ваше окружение PHP не разрешает создание директорий от имени Smarty. Поддиректории более эффективны, так что используйте их, если можете.','default'=>true,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['CACHE_DOC_TPL'] = array('DESCR' => 'Кэширование скомпилированных шаблонов документов','default'=>true,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['CACHE_DOC_FILE'] = array('DESCR' => 'Кэширование скомпилированных шаблонов документов в файлах','default'=>true,'TYPE'=>'bool','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['CACHE_DOC_SQL'] = array('DESCR' => 'Кэширование SQL запроса информации о документе','default'=>0,'TYPE'=>'integer','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['SYSTEM_CACHE_LIFETIME'] = array('DESCR' => 'Время жизни кеша запроса к настройкам системы (60*60*24*14 - 2 недели)','default'=>0,'TYPE'=>'integer','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['SITEMAP_CACHE_LIFETIME'] = array('DESCR' => 'Время жизни кеша для карты сайта (60*60*24*14 - 2 недели)','default'=>0,'TYPE'=>'integer','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['YANDEX_MAP_API_KEY'] = array('DESCR' => 'Yandex MAP API REY','default'=>'','TYPE'=>'string','VARIANT'=>'');
$GLOBALS['CMS_CONFIG']['GOOGLE_MAP_API_KEY'] = array('DESCR' => 'Google MAP API REY','default'=>'','TYPE'=>'string','VARIANT'=>'');

16
inc/init.php

@ -6,7 +6,7 @@
* @package AVE.cms
* @version 3.x
* @filesource
* @copyright © 2007-2016 AVE.cms, http://www.ave-cms.ru
* @copyright © 2007-2018 AVE.cms, http://www.ave-cms.ru
*
* @license GPL v.2
*/
@ -212,9 +212,12 @@
foreach (array(ATTACH_DIR, 'cache', 'backup', 'logs', 'session', 'update') as $dir)
write_htaccess_deny(BASE_DIR . '/tmp/' . $dir);
foreach (array('combine', 'module', 'redactor', 'smarty', 'sql', 'templates', 'tpl') as $dir)
foreach (array('check', 'combine', 'module', 'redactor', 'smarty', 'sql', 'tpl') as $dir)
write_htaccess_deny(BASE_DIR . '/tmp/cache/' . $dir);
//-- Шаблоны
write_htaccess_deny(BASE_DIR . '/templates/' . DEFAULT_THEME_FOLDER . '/include/');
global $AVE_DB;
//-- Класс для работы с MySQL (Global $AVE_DB)
@ -362,6 +365,7 @@
$sql = $AVE_DB->Query("
SELECT
# LANGS
*
FROM
" . PREFIX . "_settings_lang
@ -369,7 +373,7 @@
lang_status = '1'
ORDER BY
lang_default ASC
", SYSTEM_CACHE_LIFETIME, 'langs');
", -1, 'langs', true, '.langs');
while ($row = $sql->FetchRow())
{
@ -406,6 +410,12 @@
//-- Класс пагинации
require (BASE_DIR . '/class/class.paginations.php');
// Класс UTM
require (BASE_DIR . '/class/class.utm.php');
$AVE_Utm = new UTMCookie;
$AVE_Utm->save_parameters();
//-- Класс Модулей
require (BASE_DIR . '/class/class.modules.php');
$AVE_Module = new AVE_Module;

24
inc/sitemap.php

@ -17,7 +17,7 @@
define ('BASE_DIR', str_replace("\\", "/", rtrim($_SERVER['DOCUMENT_ROOT'],'/')));
if (! @filesize(BASE_DIR . '/inc/db.config.php'))
if (! @filesize(BASE_DIR . '/config/db.config.php'))
{
header ('Location: Location:install/index.php');
exit;
@ -32,15 +32,6 @@
$abs_path = str_ireplace(BASE_DIR, '/', str_replace("\\", "/", dirname(dirname(__FILE__))));
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off')
{
$domain = 'https://'.$_SERVER['SERVER_NAME'];
}
else
{
$domain = 'http://'.$_SERVER['SERVER_NAME'];
}
// Проверяем настройку на публикацию документов
$publish = get_settings('use_doctime')
? 'AND doc.document_published < UNIX_TIMESTAMP() AND doc.document_expire > UNIX_TIMESTAMP()'
@ -67,7 +58,7 @@
// Вытаскиваем кол-во документов
$sql = "
SELECT STRAIGHT_JOIN SQL_CALC_FOUND_ROWS
COUNT(doc.Id)
COUNT(doc.Id) AS count
FROM
" . PREFIX . "_documents doc
LEFT JOIN
@ -86,7 +77,7 @@
AND (rubperm.user_group_id = 2 AND rubperm.rubric_permission LIKE '%docread%')
";
$num = $AVE_DB->Query($sql)->GetCell();
$num = $AVE_DB->Query($sql, SITEMAP_CACHE_LIFETIME, 'sitemap')->GetCell();
if ($num > $_end)
$parts = ceil($num/$_end);
@ -98,7 +89,7 @@
for ($i = 1; $i <= $parts; $i++):
?>
<sitemap>
<loc><?= $domain . '/sitemap-' . $i . '.xml'; ?></loc>
<loc><?= HOST . '/sitemap-' . $i . '.xml'; ?></loc>
<lastmod><?= date("c"); ?></lastmod>
</sitemap>
<? endfor;
@ -127,6 +118,7 @@
AND doc.document_status = 1
AND doc.document_deleted = 1
$publish
AND doc.Id != 1
AND doc.Id != " . PAGE_NOT_FOUND_ID . "
AND (document_meta_robots NOT LIKE '%noindex%' or document_meta_robots NOT LIKE '%nofollow%')
AND (rubperm.user_group_id = 2 AND rubperm.rubric_permission LIKE '%docread%')
@ -134,14 +126,14 @@
LIMIT ".$_start.",".$_end."
";
$res = $AVE_DB->Query($sql);
$res = $AVE_DB->Query($sql, SITEMAP_CACHE_LIFETIME, 'sitemap');
echo '<?xml version="1.0" encoding="UTF-8"?>' . PHP_EOL;
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . PHP_EOL;
if ((int)$_REQUEST['id'] == 1):
?>
<url>
<loc><? echo $domain . '/'; ?></loc>
<loc><? echo HOST . '/'; ?></loc>
<lastmod><? echo date("c", time()); ?></lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
@ -150,7 +142,7 @@
<?
while($row = $res->FetchAssocArray()):
$document_alias = $abs_path . $row['document_alias'] . URL_SUFF;
$document_alias = $domain . str_ireplace($abs_path . '/' . URL_SUFF, '/', $document_alias);
$document_alias = HOST . str_ireplace($abs_path . '/' . URL_SUFF, '/', $document_alias);
$date = $row["document_published"] ? date("c", $row["document_published"]) : date("c");
?>
<url>

2
index.php

@ -178,6 +178,8 @@
if (
! defined('ONLYCONTENT')
&&
! GZIP_COMPRESSION
&&
UGROUP == 1
&&
defined('PROFILING') && PROFILING

12
install/data_base.sql

@ -244,18 +244,18 @@ INSERT INTO `%%PRFX%%_document_fields` VALUES
(4, 2, 2, 0, 'Извините, запрошенный Вами документ не найден.', '0');#inst#
INSERT INTO `%%PRFX%%_documents` VALUES
(1, 1, 0, 0, '/', '0','Главная', 'Главная страница', 0, 0, 0, 1, '0', '', '', 'index,follow', '3', '0.5', '1', '0', 0, 0, 0, '', '', 'ru', '1', ''),
(2, 1, 0, 0, '404-not-found', '0', '404 - Документ не найден', 'Ошибка 404', 0, 0, 0, 1, '0', '', '', 'noindex,nofollow', '6', '0', '1', '0', 0, 0, 0, '', '', 'ru', '2', '');#inst#
(1, 1, 0, 0, '/', '0', '', 'Главная', 'Главная страница', '0', '0', '0', '1', '0', '', '', 'index,follow', '3', '0.5', '1', '0', '0', '0', '0', '', '', 'ru', '1', ''),
(2, 1, 0, 0, '404-dokument-ne-najden', '0', '', '404 - Документ не найден', 'Ошибка 404', '0', '0', '0', '1', '0', '', '', 'noindex,nofollow', '6', '0', '1', '0', '0', '0', '0', '', '', 'ru', '2', '');#inst#
INSERT INTO `%%PRFX%%_navigation` VALUES
(1,'main','Основное меню','<li class=\"nav-item\">\n <a class=\"nav-link\" href=\"[tag:link]\">[tag:linkname]</a>\n</li>','','','<li class=\"nav-item active\">\n <a class=\"nav-link\" href=\"[tag:link]\">[tag:linkname]</a>\n</li>','','','<ul class=\"navbar-nav mr-auto\">\n[tag:content]\n</ul>','','','','','','','','1,2,3,4,5','1');#inst#
INSERT INTO `%%PRFX%%_navigation_items` VALUES
(1,1,1,'/','Главная','','_self','','','','',0,'1',0,'1');#inst#
(1,1,1,'/','Главная','','_self','','','','','0','1','0','1');#inst#
INSERT INTO `%%PRFX%%_rubric_fields` VALUES
(1, 1, 0, 'header', 'Заголовок', 'single_line', 0, 1, '', '', '', '', ''),
(2, 1, 0, 'text', 'Текст', 'multi_line', 0, 2, '', '', '', '', '');#inst#
(1, 1, 0, 'header', 'Заголовок', 'single_line', '0', '1', '', '0', '', '', ''),
(2, 1, 0, 'text', 'Текст', 'multi_line', '0', '2', '', '0', '', '', '');#inst#
INSERT INTO `%%PRFX%%_rubric_permissions` VALUES
(1, 1, 1, 'alles'),
@ -265,7 +265,7 @@ INSERT INTO `%%PRFX%%_rubric_permissions` VALUES
(5, 1, 5, 'docread');#inst#
INSERT INTO `%%PRFX%%_rubrics` VALUES
(1,'Основные страницы','','0','<h1 class=\"mt-5\">[tag:fld:header]</h1>\n[tag:fld:text]',1,1,0,1,'','','','','','','','0','','0',0);#inst#
(1,'Основные страницы','','0','<h1 class=\"mt-5\">[tag:fld:header]</h1>\n[tag:fld:text]','1','1','0','1','','','','','','','','0','','0','0','0','0');#inst#
INSERT INTO `%%PRFX%%_settings` VALUES
(

24
install/index.php

@ -227,7 +227,7 @@
define('BASE_DIR', str_replace("\\", "/", dirname(dirname(__FILE__))));
if (! is_writable(BASE_DIR . '/cache/smarty/'))
if (! is_writable(BASE_DIR . '/tmp/cache/smarty/'))
die('Cache folder is not writeable!');
include(BASE_DIR . '/config/db.config.php');
@ -247,7 +247,8 @@
$db_connect = check_db_connect($config['dbhost'], $config['dbuser'], $config['dbpass'], $config['dbname']);
$check_installed = check_installed($config['dbpref']);
if ((true === $db_connect) && $_REQUEST['step'] != 'finish' && check_installed($config['dbpref'])) {
if ((true === $db_connect) && $_REQUEST['step'] != 'finish' && check_installed($config['dbpref']))
{
echo '<pre>' . $AVE_Template->get_config_vars('installed') . '</pre>';
exit;
};
@ -260,14 +261,15 @@
// include_once(BASE_DIR . '/inc/errors.php');
$count_error = sizeof((array) $error_is_required);
if (1 == $count_error)
{
$AVE_Template->assign('error_header', $AVE_Template->get_config_vars('erroro'));
}
elseif ($count_error > 1)
{
$AVE_Template->assign('error_header', $AVE_Template->get_config_vars('erroro_more'));
}
{
$AVE_Template->assign('error_header', $AVE_Template->get_config_vars('erroro_more'));
}
if ($count_error > 0 && ! (isset($_REQUEST['force']) && 1 == $_REQUEST['force']))
{
@ -482,9 +484,9 @@
$filename = BASE_DIR . '/install/data_demo.sql';
}
else
{
$filename = BASE_DIR . '/install/data_base.sql';
}
{
$filename = BASE_DIR . '/install/data_base.sql';
}
$mysql_connect = @mysqli_connect($config['dbhost'], $config['dbuser'], $config['dbpass']);
@mysqli_select_db($mysql_connect, $config['dbname']);
@ -514,11 +516,9 @@
@mysqli_query($mysql_connect, "SET COLLATION_CONNECTION = 'utf8_general_ci'");
@mysqli_query($mysql_connect, $in);
}
/*
$auth = base64_encode(serialize(array('id' => '1', 'hash'=>$hash)));
@setcookie('auth', $auth);
*/
$AVE_Template->display('step6.tpl');
exit;
}

63
install/structure_base.sql

@ -11,6 +11,7 @@ CREATE TABLE `%%PRFX%%_blocks` (
KEY `block_alias` (`block_alias`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;#inst#
CREATE TABLE `%%PRFX%%_countries` (
`Id` mediumint(5) unsigned NOT NULL auto_increment,
`country_code` char(2) NOT NULL default 'RU',
@ -20,6 +21,7 @@ CREATE TABLE `%%PRFX%%_countries` (
PRIMARY KEY (`Id`)
) 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',
@ -29,11 +31,12 @@ CREATE TABLE `%%PRFX%%_document_fields` (
`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`),
KEY `field_value` (`field_value`),
KEY `field_number_value` (`field_number_value`),
KEY `rubric_field_id` (`rubric_field_id`)
KEY `field_number_value` (`field_number_value`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst#
CREATE TABLE `%%PRFX%%_document_fields_text` (
`Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`rubric_field_id` mediumint(5) unsigned NOT NULL DEFAULT '0',
@ -44,6 +47,7 @@ CREATE TABLE `%%PRFX%%_document_fields_text` (
KEY `rubric_field_id` (`rubric_field_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst#
CREATE TABLE `%%PRFX%%_document_keywords` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`document_id` int(11) NOT NULL,
@ -53,6 +57,7 @@ CREATE TABLE `%%PRFX%%_document_keywords` (
KEY `keyword` (`keyword`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst#
CREATE TABLE `%%PRFX%%_document_remarks` (
`Id` int(10) unsigned NOT NULL auto_increment,
`document_id` int(10) unsigned NOT NULL default '0',
@ -67,6 +72,7 @@ CREATE TABLE `%%PRFX%%_document_remarks` (
KEY `document_id` (`document_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst#
CREATE TABLE `%%PRFX%%_document_rev` (
`Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`doc_id` mediumint(5) unsigned NOT NULL DEFAULT '0',
@ -77,6 +83,7 @@ CREATE TABLE `%%PRFX%%_document_rev` (
KEY `doc_id` (`doc_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst#
CREATE TABLE `%%PRFX%%_documents` (
`Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`rubric_id` mediumint(5) unsigned NOT NULL DEFAULT '0',
@ -84,6 +91,7 @@ CREATE TABLE `%%PRFX%%_documents` (
`document_parent` int(10) unsigned NOT NULL DEFAULT '0',
`document_alias` varchar(255) NOT NULL DEFAULT '',
`document_alias_history` enum('0','1','2') NOT NULL DEFAULT '0',
`document_short_alias` VARCHAR(10) NOT NULL DEFAULT '', # 3.24
`document_title` varchar(255) NOT NULL DEFAULT '',
`document_breadcrum_title` varchar(255) NOT NULL DEFAULT '',
`document_published` int(10) unsigned NOT NULL DEFAULT '0',
@ -115,6 +123,7 @@ CREATE TABLE `%%PRFX%%_documents` (
KEY `document_expire` (`document_expire`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst#
CREATE TABLE `%%PRFX%%_document_alias_history` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`document_id` int(10) unsigned NOT NULL default '0',
@ -126,15 +135,19 @@ CREATE TABLE `%%PRFX%%_document_alias_history` (
KEY `document_id` (`document_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst#
CREATE TABLE `%%PRFX%%_document_tags` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`rubric_id` int(3) NOT NULL, # 3.24
`document_id` int(11) NOT NULL,
`tag` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `rubric_id` (`rubric_id`),
KEY `document_id` (`document_id`),
KEY `tag` (`tag`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst#
CREATE TABLE `%%PRFX%%_module` (
`Id` smallint(3) unsigned NOT NULL auto_increment,
`ModuleName` char(50) NOT NULL,
@ -152,9 +165,10 @@ CREATE TABLE `%%PRFX%%_module` (
UNIQUE KEY `ModuleName` (`ModuleName`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst#
CREATE TABLE `%%PRFX%%_modules_aliases` (
`id` tinyint(5) unsigned NOT NULL AUTO_INCREMENT,
`document_id` int(10) NOT NULL DEFAULT '0',
`document_id` int(10) NOT NULL DEFAULT '0', # 3.24
`module_name` char(50) NOT NULL DEFAULT '',
`module_action` varchar(255) NOT NULL DEFAULT '',
`module_link` varchar(500) NOT NULL DEFAULT '',
@ -166,6 +180,7 @@ CREATE TABLE `%%PRFX%%_modules_aliases` (
KEY `module_name` (`module_name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst#
CREATE TABLE `%%PRFX%%_navigation` (
`navigation_id` smallint(3) unsigned NOT NULL AUTO_INCREMENT,
`alias` varchar(20) NOT NULL,
@ -190,6 +205,7 @@ CREATE TABLE `%%PRFX%%_navigation` (
KEY `alias` (`alias`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst#
CREATE TABLE `%%PRFX%%_navigation_items` (
`navigation_item_id` mediumint(5) unsigned NOT NULL AUTO_INCREMENT,
`navigation_id` smallint(3) unsigned NOT NULL DEFAULT '0',
@ -212,6 +228,7 @@ CREATE TABLE `%%PRFX%%_navigation_items` (
KEY `navi_item_status` (`status`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst#
CREATE TABLE `%%PRFX%%_paginations` (
`id` tinyint(1) unsigned NOT NULL AUTO_INCREMENT,
`pagination_name` tinytext,
@ -229,6 +246,7 @@ CREATE TABLE `%%PRFX%%_paginations` (
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst#
CREATE TABLE `%%PRFX%%_request` (
`Id` smallint(3) unsigned NOT NULL AUTO_INCREMENT,
`rubric_id` smallint(3) unsigned NOT NULL,
@ -256,11 +274,14 @@ CREATE TABLE `%%PRFX%%_request` (
`request_external` enum('0','1') NOT NULL DEFAULT '0',
`request_ajax` enum('0','1') NOT NULL DEFAULT '0',
`request_show_sql` enum('0','1') NOT NULL DEFAULT '0',
`request_changed` int(10) unsigned NOT NULL DEFAULT '0', # 3.24
`request_changed_elements` int(10) unsigned NOT NULL DEFAULT '0', # 3.24
PRIMARY KEY (`Id`),
KEY `rubric_id` (`rubric_id`),
KEY `request_alias` (`request_alias`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst#
CREATE TABLE `%%PRFX%%_request_conditions` (
`Id` mediumint(5) unsigned NOT NULL AUTO_INCREMENT,
`request_id` smallint(3) unsigned NOT NULL,
@ -274,6 +295,25 @@ CREATE TABLE `%%PRFX%%_request_conditions` (
KEY `request_id` (`request_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst#
# 3.24
CREATE TABLE `%%PRFX%%_rubric_breadcrumb` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`rubric_id` smallint(3) unsigned NOT NULL,
`box` varchar(500) NOT NULL DEFAULT '',
`show_main` enum('1','0') NOT NULL DEFAULT '1',
`show_host` enum('1','0') NOT NULL DEFAULT '1',
`sepparator` varchar(255) NOT NULL,
`sepparator_use` enum('1','0') NOT NULL DEFAULT '1',
`link_box` varchar(500) NOT NULL DEFAULT '',
`link_template` varchar(500) NOT NULL DEFAULT '',
`self_box` varchar(500) NOT NULL DEFAULT '',
`link_box_last` enum('1','0') NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
KEY `rubric_id` (`rubric_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst#
CREATE TABLE `%%PRFX%%_rubric_fields` (
`Id` mediumint(5) unsigned NOT NULL AUTO_INCREMENT,
`rubric_id` smallint(3) unsigned NOT NULL,
@ -294,6 +334,7 @@ CREATE TABLE `%%PRFX%%_rubric_fields` (
KEY `rubric_field_alias` (`rubric_field_alias`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst#
CREATE TABLE `%%PRFX%%_rubric_fields_group` (
`Id` mediumint(5) unsigned NOT NULL AUTO_INCREMENT,
`rubric_id` smallint(3) unsigned NOT NULL,
@ -304,6 +345,7 @@ CREATE TABLE `%%PRFX%%_rubric_fields_group` (
KEY `rubric_id` (`rubric_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst#
CREATE TABLE `%%PRFX%%_rubric_permissions` (
`Id` mediumint(5) unsigned NOT NULL AUTO_INCREMENT,
`rubric_id` smallint(3) unsigned NOT NULL,
@ -313,6 +355,7 @@ CREATE TABLE `%%PRFX%%_rubric_permissions` (
KEY `rubric_id` (`rubric_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst#
CREATE TABLE `%%PRFX%%_rubric_template_cache` (
`id` bigint(15) unsigned NOT NULL AUTO_INCREMENT,
`hash` char(32) NOT NULL,
@ -327,6 +370,7 @@ CREATE TABLE `%%PRFX%%_rubric_template_cache` (
KEY `rubric_id` (`rub_id`,`doc_id`,`wysiwyg`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst#
CREATE TABLE `%%PRFX%%_rubrics` (
`Id` smallint(3) unsigned NOT NULL AUTO_INCREMENT,
`rubric_title` varchar(255) NOT NULL,
@ -348,10 +392,13 @@ CREATE TABLE `%%PRFX%%_rubrics` (
`rubric_description` text NOT NULL,
`rubric_meta_gen` enum('0','1') default '0' NOT NULL,
`rubric_position` int(11) unsigned NOT NULL DEFAULT '100',
`rubric_changed` int(10) NOT NULL DEFAULT '0', # 3.24
`rubric_changed_fields` int(10) NOT NULL DEFAULT '0', # 3.24
PRIMARY KEY (`Id`),
KEY `rubric_template_id` (`rubric_template_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst#
CREATE TABLE `%%PRFX%%_rubric_templates` (
`id` mediumint(5) unsigned NOT NULL AUTO_INCREMENT,
`rubric_id` smallint(3) unsigned NOT NULL,
@ -363,6 +410,7 @@ CREATE TABLE `%%PRFX%%_rubric_templates` (
KEY `rubric_id` (`rubric_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst#
CREATE TABLE `%%PRFX%%_sessions` (
`sesskey` varchar(32) NOT NULL,
`expiry` int(10) unsigned NOT NULL DEFAULT '0',
@ -374,6 +422,7 @@ CREATE TABLE `%%PRFX%%_sessions` (
KEY `expire_datum` (`expire_datum`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;#inst#
CREATE TABLE `%%PRFX%%_settings` (
`Id` tinyint(1) unsigned NOT NULL AUTO_INCREMENT,
`site_name` varchar(255) NOT NULL,
@ -421,6 +470,7 @@ CREATE TABLE `%%PRFX%%_settings` (
PRIMARY KEY (`Id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;#inst#
CREATE TABLE `%%PRFX%%_settings_lang` (
`Id` mediumint(5) unsigned NOT NULL AUTO_INCREMENT,
`lang_key` varchar(2) NOT NULL DEFAULT 'ru',
@ -432,6 +482,7 @@ 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,
@ -441,6 +492,7 @@ CREATE TABLE `%%PRFX%%_settings_menu` (
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,
@ -457,6 +509,7 @@ CREATE TABLE `%%PRFX%%_sysblocks` (
KEY `sysblock_alias` (`sysblock_alias`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;#inst#
CREATE TABLE `%%PRFX%%_templates` (
`Id` smallint(3) unsigned NOT NULL AUTO_INCREMENT,
`template_title` varchar(255) NOT NULL,
@ -466,6 +519,7 @@ CREATE TABLE `%%PRFX%%_templates` (
PRIMARY KEY (`Id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst#
CREATE TABLE `%%PRFX%%_user_groups` (
`user_group` smallint(3) unsigned NOT NULL AUTO_INCREMENT,
`user_group_name` char(50) NOT NULL,
@ -476,6 +530,7 @@ CREATE TABLE `%%PRFX%%_user_groups` (
PRIMARY KEY (`user_group`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;#inst#
CREATE TABLE `%%PRFX%%_users` (
`Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`password` char(32) NOT NULL,
@ -513,6 +568,7 @@ CREATE TABLE `%%PRFX%%_users` (
KEY `user_group` (`user_group`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst#
CREATE TABLE `%%PRFX%%_users_session` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
@ -524,6 +580,7 @@ CREATE TABLE `%%PRFX%%_users_session` (
KEY `user_id` (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst#
CREATE TABLE `%%PRFX%%_view_count` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`document_id` int(11) NOT NULL,

33
templates/default/css/styles.css

@ -0,0 +1,33 @@
/* Sticky footer styles
-------------------------------------------------- */
html {
position: relative;
min-height: 100%;
}
body {
/* Margin bottom by footer height */
margin-bottom: 60px;
}
.footer {
position: absolute;
bottom: 0;
width: 100%;
/* Set the fixed height of the footer here */
height: 60px;
line-height: 60px; /* Vertically center the text there */
background-color: #f5f5f5;
}
/* Custom page CSS
-------------------------------------------------- */
/* Not required for template or sticky footer method. */
body > .container {
padding: 60px 15px 0;
}
.footer > .container {
padding-right: 15px;
padding-left: 15px;
}

267
tmp/update/sql.update.php

@ -0,0 +1,267 @@
<?
/* -------------------------------------------------------------------------------------------------------------- */
/* -------------------------------------------------------3.24-------------------------------------------------- */
/* -------------------------------------------------------------------------------------------------------------- */
$check = $AVE_DB->Query("
SHOW COLUMNS
FROM
" . PREFIX . "_rubrics
LIKE
'rubric_changed'
")->NumRows();
$exist = ($check) ? true : false;
if ($exist === false)
{
$AVE_DB->Real_Query("
ALTER TABLE
" . PREFIX . "_rubrics
ADD
`rubric_changed` int(10) NOT NULL DEFAULT '0'
AFTER
`rubric_position`
");
$AVE_DB->Real_Query("
UPDATE
" . PREFIX . "_rubrics
SET
`rubric_changed` = UNIX_TIMESTAMP()
");
}
// ----------------------------------------------------------------------------------------
$check = $AVE_DB->Query("
SHOW COLUMNS
FROM
" . PREFIX . "_rubrics
LIKE
'rubric_changed_fields'
")->NumRows();
$exist = ($check) ? true : false;
if ($exist === false)
{
$AVE_DB->Real_Query("
ALTER TABLE
" . PREFIX . "_rubrics
ADD
`rubric_changed_fields` int(10) NOT NULL DEFAULT '0'
AFTER
`rubric_changed`
");
$AVE_DB->Real_Query("
UPDATE
" . PREFIX . "_rubrics
SET
`rubric_changed_fields` = UNIX_TIMESTAMP()
");
}
// ----------------------------------------------------------------------------------------
$check = $AVE_DB->Query("
SHOW TABLES
LIKE
'" . PREFIX . "_rubric_breadcrumb'
")->NumRows();
$exist = ($check) ? true : false;
if ($exist === false)
{
$AVE_DB->Real_Query("
CREATE TABLE `" . PREFIX . "_rubric_breadcrumb` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`rubric_id` smallint(3) unsigned NOT NULL,
`box` varchar(500) NOT NULL DEFAULT '',
`show_main` enum('1','0') NOT NULL DEFAULT '1',
`show_host` enum('1','0') NOT NULL DEFAULT '1',
`sepparator` varchar(255) NOT NULL,
`sepparator_use` enum('1','0') NOT NULL DEFAULT '1',
`link_box` varchar(500) NOT NULL DEFAULT '',
`link_template` varchar(500) NOT NULL DEFAULT '',
`self_box` varchar(500) NOT NULL DEFAULT '',
`link_box_last` enum('1','0') NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
KEY `rubric_id` (`rubric_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;
");
}
// ----------------------------------------------------------------------------------------
$check = $AVE_DB->Query("
SHOW COLUMNS
FROM
" . PREFIX . "_request
LIKE
'request_changed'
")->NumRows();
$exist = ($check) ? true : false;
if ($exist === false)
{
$AVE_DB->Real_Query("
ALTER TABLE
" . PREFIX . "_request
ADD
`request_changed` int(10) unsigned NOT NULL DEFAULT '0'
AFTER
`request_show_sql`
");
$AVE_DB->Real_Query("
UPDATE
" . PREFIX . "_request
SET
`request_changed` = UNIX_TIMESTAMP()
");
}
// ----------------------------------------------------------------------------------------
$check = $AVE_DB->Query("
SHOW COLUMNS
FROM
" . PREFIX . "_request
LIKE
'request_changed_elements'
")->NumRows();
$exist = ($check) ? true : false;
if ($exist === false)
{
$AVE_DB->Real_Query("
ALTER TABLE
" . PREFIX . "_request
ADD
`request_changed_elements` int(10) unsigned NOT NULL DEFAULT '0'
AFTER
`request_changed`
");
$AVE_DB->Real_Query("
UPDATE
" . PREFIX . "_request
SET
`request_changed_elements` = UNIX_TIMESTAMP()
");
}
// ----------------------------------------------------------------------------------------
$check = $AVE_DB->Query("
SHOW COLUMNS
FROM
" . PREFIX . "_documents
LIKE
'document_short_alias'
")->NumRows();
$exist = ($check) ? true : false;
if ($exist === false)
{
$AVE_DB->Real_Query("
ALTER TABLE
" . PREFIX . "_documents
ADD
`document_short_alias` VARCHAR(10) NOT NULL DEFAULT ''
AFTER
`document_alias_history`
");
}
// ----------------------------------------------------------------------------------------
$check = $AVE_DB->Query("
SHOW COLUMNS
FROM
" . PREFIX . "_document_tags
LIKE
'rubric_id'
")->NumRows();
$exist = ($check) ? true : false;
if ($exist === false)
{
$AVE_DB->Real_Query("
ALTER TABLE
" . PREFIX . "_document_tags
ADD
`rubric_id` int(3) NOT NULL
AFTER
`id`
");
}
// ----------------------------------------------------------------------------------------
$check = $AVE_DB->Query("
SHOW COLUMNS
FROM
" . PREFIX . "_modules_aliases
LIKE
'document_id'
")->NumRows();
$exist = ($check) ? true : false;
if ($exist === false)
{
$AVE_DB->Real_Query("
ALTER TABLE
" . PREFIX . "_modules_aliases
ADD
`document_id` int(10) NOT NULL DEFAULT '0'
AFTER
`id`
");
}
// ----------------------------------------------------------------------------------------
$check = $AVE_DB->Query("
SHOW COLUMNS
FROM
" . PREFIX . "_request
LIKE
'request_count_items'
")->NumRows();
$exist = ($check) ? true : false;
if ($exist === false)
{
$AVE_DB->Real_Query("
ALTER TABLE
" . PREFIX . "_request
ADD
`request_count_items` enum('0','1') NOT NULL DEFAULT '0'
AFTER
`request_use_query`
");
$AVE_DB->Real_Query("
UPDATE
" . PREFIX . "_request
SET
`request_changed_elements` = UNIX_TIMESTAMP()
");
}
/* -------------------------------------------------------------------------------------------------------------- */
/* -------------------------------------------------------3.25---------------------------------------------------- */
/* -------------------------------------------------------------------------------------------------------------- */
?>
Loading…
Cancel
Save