Browse Source

Fixes

pull/3/head
M@dD3n 5 years ago
parent
commit
e2e034f316
  1. 4
      README.md
  2. 4
      admin/index.php
  3. 230
      class/class.debug.php
  4. 42
      class/class.docs.php
  5. 10
      inc/config.php
  6. 160
      lib/debug/debug.css
  7. 51
      lib/debug/debug.js

4
README.md

@ -26,8 +26,8 @@
1. Распакуйте содержимое архива в новую папку на вашем локальном компьютере.
2. Загрузить эту папку целиком через FTP-клиент на ваш хост.
3. Вам также может потребоваться установить права доступа (CHMOD 777) рекурсивно, на папки /tmp/cache/, /tmp/session/ и /uploads/, если ваш хостинг не установливает это по умолчанию.
4. Также вам может потребоваться установить права доступа (CHMOD 777) рекурсивно, на файлы inc/db.config.php и inc/config.inc.php, если ваш хостинг не установливает это по умолчанию.
3. Вам также может потребоваться установить права доступа (CHMOD 777) рекурсивно, на папки /tmp/cache/, /tmp/session/ и /uploads/, если ваш хостинг не устанавливает это по умолчанию.
4. Также вам может потребоваться установить права доступа (CHMOD 777) рекурсивно, на файлы inc/db.config.php и inc/config.inc.php, если ваш хостинг не устанавливает это по умолчанию.
5. Наберите http://адрес вашего сайта/ в браузере.
6. Следуйте инструкциям.
7. После установки системы настоятельно рекомендуем устанавливать права доступа на папку uploads не выше CHMOD 755.

4
admin/index.php

@ -132,6 +132,6 @@
$AVE_Template->display($tpl);
// Статистика
//if (defined('PROFILING') && PROFILING)
// echo get_statistic(1, 1, 1, 1);
if (defined('PROFILING_ADMIN') && PROFILING_ADMIN)
echo Debug::displayInfo();
?>

230
class/class.debug.php

@ -20,9 +20,11 @@
class Debug {
protected static $time = array();
protected static $time = [];
protected static $memory = array();
protected static $memory = [];
protected static $_debug = [];
public function __construct()
@ -607,6 +609,119 @@
}
/**
* Функция для вывода переменной (для отладки)
*
* @param mixed $var любая переменная
* @param bool $exit
* @param null $bg
* @param bool $echo
*
* @return false|null|string|string[]
*/
public static function _($var, $_bg = null, $from = '')
{
$code = '';
$backtrace = debug_backtrace();
$backtrace = $backtrace[0];
if (preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file']))
{
preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file'], $match);
$file = $match[1];
}
$fh = fopen((isset($file)
? $file
: $backtrace['file']), 'r');
$line = 0;
while (++$line <= $backtrace['line'])
$code = fgets($fh);
fclose($fh);
preg_match('/' . __FUNCTION__ . '\s*\((.*)\)\s*;/u', $code, $name);
unset ($code, $backtrace);
ob_start();
var_dump($var);
$var_dump = ob_get_contents();
$var_dump = preg_replace('/=>(\s+|\s$)/', ' => ', $var_dump);
$var_dump = htmlspecialchars($var_dump);
$var_dump = preg_replace('/(=&gt;)/', '<span style="color: #ff8c00;">$1</span>', $var_dump);
ob_end_clean();
if (! empty($name))
{
$fn_name = explode(',', $name[1]);
$fn_name = array_shift($fn_name);
}
else
$fn_name = 'EVAL';
if ($_bg)
$bg = 'style="background: #' . $_bg . ';"';
else
$bg = '';
$var_dump = '
<style>
.debug_bg {
margin: 20px;
border: 1px solid #d9d9d9;
background-color: #f1efef;
border-radius: 5px;
box-shadow: 0 0 3px rgba(0, 0, 0, 0.1);
font-family: "Consolas", Verdana, Arial;
font-size: 11px;
}
.debug_top {
color: #ffffff;
font-size: 15px;
font-weight: bold;
padding-left: 20px;
padding-top: 10px;
padding-bottom: 10px;
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.75);
background-color: #43648c;
background-repeat: repeat-x;
border-bottom: 1px solid #ffffff;
}
.debug_box {
margin: 10px;
padding: 4px;
background-color: #efeded;
border: 1px solid #dedcdc;
}
</style>
<div class="debug_bg">
<div class="debug_top" ' . $bg . '>
var_dump(<strong>' . trim($fn_name) . '</strong>) ' . $from . '
</div>
'.self::_trace().'
<div class="debug_box">
<pre style="background:#f5f5f5; color: #000; margin: 0; padding: 5px; border: 0; font-size: 11px; font-family: Consolas, Verdana, Arial;">'
. $var_dump .
'</pre>
</div>
</div>
';
self::$_debug[] = $var_dump;
}
/**
* Функция для трейсинга дебаггера
*
@ -793,6 +908,18 @@
$stat = self::_stat_get('request');
break;
case 'files':
$stat = self::_stat_get('files');
break;
case 'cookie':
$stat = self::_stat_get('cookie');
break;
case 'env':
$stat = self::_stat_get('env');
break;
case 'session':
$stat = self::_stat_get('session');
break;
@ -824,10 +951,16 @@
var_dump($_POST);
else if ($type == 'request')
var_dump($_REQUEST);
else if ($type == 'files')
var_dump($_FILES);
else if ($type == 'cookie')
var_dump($_COOKIE);
else if ($type == 'session')
var_dump($_SESSION);
else if ($type == 'server')
var_dump($_SERVER);
else if ($type == 'env')
var_dump($_ENV);
else if ($type == 'globals')
var_dump($GLOBALS);
$stat = ob_get_contents();
@ -855,23 +988,28 @@
$out .= PHP_EOL;
$out .= '<script src="/lib/debug/debug.js"></script>';
$out .= PHP_EOL;
$out .= '<div id="debug_btn"></div>';
$out .= PHP_EOL;
$out .= '
<div id="debug-panel">
<div class="debug-wrapper">
<div id="debug-panel-legend" class="legend">
<span>Debug console</span>
<a id="debugArrowMinimize" class="debugArrow" href="javascript:void(0)" title="Minimize" onclick="javascript:appTabsHide()">&times;</a>
<span>
<a id="tabGeneral" href="javascript:void(\'General\')" onclick="javascript:appExpandTabs(\'auto\', \'General\')">General</a>
<a id="tabParams" href="javascript:void(\'Params\')" onclick="javascript:appExpandTabs(\'auto\', \'Params\')">Params</a>
<a id="tabGlobals" href="javascript:void(\'Globals\')" onclick="javascript:appExpandTabs(\'auto\', \'Globals\')">Globals</a>
<a id="tabQueries" href="javascript:void(\'Queries\')" onclick="javascript:appExpandTabs(\'auto\', \'Queries\')">SQL Queries (' . self::getStatistic('sqlcount') . ')</a>
<a id="tabSqlTrace" href="javascript:void(\'SqlTrace\')" onclick="javascript:appExpandTabs(\'auto\', \'SqlTrace\')">SQL Trace (' . self::getStatistic('sqltrace') . ')</a>
</span>
</div>
<div id="debug_bar">
<ul class="debug_tabs">
<li id="debug-1">Timers</li>
<li id="debug-2">$_GET</li>
<li id="debug-3">$_POST</li>
<li id="debug-4">$_REQUEST</li>
<li id="debug-5">$_FILES</li>
<li id="debug-6">$_COOKIE</li>
<li id="debug-7">$_SESSION</li>
<li id="debug-8">$_SERVER</li>
<li id="debug-9">$_ENV</li>
<li id="debug-10">$GLOBALS</li>
<li id="debug-11">MySQL</li>
<li id="debug-12">Trace</li>
<li id="debug-13">Debug</li>
</ul>
';
$out .= PHP_EOL;
$out .= '<div id="contentGeneral" class="items" style="display: none">' . PHP_EOL;
$out .= '<div class="debug_tab" id="debug-1-cont" style="display: block;">' . PHP_EOL;
$out .= 'Time generation: ' . self::getStatistic('time') . ' sec';
$out .= '<br>';
$out .= 'Memory usage: ' . self::getStatistic('memory');
@ -882,38 +1020,82 @@
$out .= '</div>';
$out .= PHP_EOL;
$out .= '<div id="contentParams" class="items" style="display: none">' . PHP_EOL;
$out .= '<div class="debug_tab" id="debug-2-cont" style="display: none;">' . PHP_EOL;
$out .= 'GET:';
$out .= self::getStatistic('get');
$out .= '<br>';
$out .= '</div>';
$out .= PHP_EOL;
$out .= '<div class="debug_tab" id="debug-3-cont" style="display: none;">' . PHP_EOL;
$out .= 'POST:';
$out .= self::getStatistic('post');
$out .= '<br>';
$out .= '</div>';
$out .= PHP_EOL;
$out .= '<div class="debug_tab" id="debug-4-cont" style="display: none;">' . PHP_EOL;
$out .= 'REQUEST:';
$out .= self::getStatistic('request');
$out .= '<br>';
$out .= '</div>';
$out .= PHP_EOL;
$out .= '<div class="debug_tab" id="debug-5-cont" style="display: none;">' . PHP_EOL;
$out .= 'FILES:';
$out .= self::getStatistic('files');
$out .= '</div>';
$out .= PHP_EOL;
$out .= '<div class="debug_tab" id="debug-6-cont" style="display: none;">' . PHP_EOL;
$out .= 'COOKIE:';
$out .= self::getStatistic('cookie');
$out .= '</div>';
$out .= PHP_EOL;
$out .= '<div class="debug_tab" id="debug-7-cont" style="display: none;">' . PHP_EOL;
$out .= 'SESSION:';
$out .= self::getStatistic('session');
$out .= '<br>';
$out .= '</div>';
$out .= PHP_EOL;
$out .= '<div class="debug_tab" id="debug-8-cont" style="display: none;">' . PHP_EOL;
$out .= 'SERVER:';
$out .= self::getStatistic('server');
$out .= '</div>';
$out .= PHP_EOL;
$out .= '<div id="contentGlobals" class="items" style="display: none">' . PHP_EOL;
$out .= '<div class="debug_tab" id="debug-9-cont" style="display: none;">' . PHP_EOL;
$out .= 'ENV:';
$out .= self::getStatistic('env');
$out .= '</div>';
$out .= PHP_EOL;
$out .= '<div class="debug_tab" id="debug-10-cont" style="display: none;">' . PHP_EOL;
$out .= self::getStatistic('globals');
$out .= '</div>';
$out .= PHP_EOL;
$out .= '<div id="contentQueries" class="items" style="display: none">' . PHP_EOL;
$out .= '<div class="debug_tab" id="debug-11-cont" style="display: none;">' . PHP_EOL;
$out .= $AVE_DB->DBProfilesGet('list');
$out .= '</div>';
$out .= PHP_EOL;
$out .= '<div id="contentSqlTrace" class="items" style="display: none">' . PHP_EOL;
$out .= '<div class="debug_tab" id="debug-12-cont" style="display: none;">' . PHP_EOL;
$out .= $AVE_DB->showAllQueries();
$out .= '</div>';
$out .= PHP_EOL;
$out .= '<div class="debug_tab" id="debug-13-cont" style="display: none;">' . PHP_EOL;
$out .= implode('', self::$_debug);
$out .= '</div>';
$out .= PHP_EOL;
$out .= '</div>';

42
class/class.docs.php

@ -1234,7 +1234,6 @@
*
* @return int|bool Возвращает номер документа если все удачно или false если все плохо
*/
function documentSave ($rubric_id, $document_id, $data, $update_non_exists_fields = false, $rubric_code = true, $revisions = true, $logs = true, $generate = true)
{
global $AVE_DB, $AVE_Template;
@ -1262,8 +1261,19 @@
// Забираем параметры рубрики
$_rubric = $this->_get_rubric($rubric_id);
// Запускаем триггер перед сохранением
Hooks::trigger('DocumentBeforeSave', array('rubric_id' => $rubric_id, 'document_id' => $document_id, 'data' => $data, 'requests' => $_REQUEST));
$_data = [
'rubric_id' => $rubric_id,
'document_id' => $document_id,
'data' => $data,
'requests' => $_REQUEST
];
Hooks::register('DocumentBeforeSave', 'DocumentBeforeSave', 100);
// Запускаем триггер перед сохранением, возвращаем $data для дальнейшего сохранения
$data = Hooks::trigger('DocumentBeforeSave', $_data);
unset ($_data);
// Выполняем стартовый код рубрики
if ($rubric_code)
@ -1816,8 +1826,19 @@
? $data['field_module']
: '';
Hooks::register('DocumentAfterSave', 'DocumentAfterSave', 100);
$_data = [
'rubric_id' => $rubric_id,
'document_id' => $document_id,
'data' => $data,
'field_module' => $field_module
];
// Запускаем триггер после сохранения
Hooks::trigger('DocumentAfterSave', array('rubric_id' => $rubric_id, 'document_id' => $document_id, 'data' => $data, 'field_module' => $field_module));
Hooks::trigger('DocumentAfterSave', $_data);
unset ($_data);
// Выполняем код рубрики, после сохранения
if ($rubric_code)
@ -1845,6 +1866,7 @@
return $document_id;
}
/**
* Метод, предназначенный для добавления нового документа в БД
*
@ -4419,5 +4441,17 @@
exit;
}
function DocumentBeforeSave ($data)
{
return $data['data'];
}
function DocumentAfterSave ($data)
{
return $data;
}
}
?>

10
inc/config.php

@ -12,7 +12,7 @@
*/
@define('APP_NAME', 'AVE.cms');
@define('APP_VERSION', '3.26');
@define('APP_VERSION', '3.25');
@define('APP_INFO', '<a target="_blank" href="https://www.ave-cms.ru/">Ave-Cms.Ru</a> '.'&copy; 2007-' . date('Y'));
$themes = array();
@ -280,6 +280,14 @@
'VARIANT' => array('off', 'light', 'full')
);
//-- Вывод общей статистики
$GLOBALS['CMS_CONFIG']['_CONST_DEV']['PROFILING_ADMIN'] = array(
'DESCR' => 'Вывод общей статистики в дминистративной части',
'DEFAULT' => false,
'TYPE' => 'bool',
'VARIANT' => ''
);
//-- Собирать статистику выполненных запросов
$GLOBALS['CMS_CONFIG']['_CONST_DEV']['SQL_PROFILING'] = array(
'DESCR' => 'Собирать статистику выполненных SQL запросов',

160
lib/debug/debug.css

@ -1,51 +1,123 @@
/* == Debug Panel == */
#debug-panel {
font-size: 12px !important;
opacity: 0.9;
#debug_btn {
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKYSURBVDjLnZPJT1NRFMb5G1wDHV5boNiqdHrvFYolCAtsGSSWKpMFKhYqlDI6oAEKaVJwCIgSphaKtLYWCgSNBgRjMNHoxsSFS3cmJmA0NMTw+R6JKKZl4eJL7sm953fOd3JPHIC4WMpcppG5SGnZc8ZjVVF6QLn975sDgfaZmvg71oRJZIRUYcuAnq/2KWroGfm3QwEn2YpLVPPvOD2oiqj9yq/mGznegl56mx6T7ZbY1M6YAM0CuZkxT0b2Wg6QW/SsApRXDsotR+d6E9Y/h9DuqoCuJq0lKoDxqU1/pITGR27mBU4h+GEcTz5OY+ClA5JbyahYzof/9TBO9B/FcWcqpA4xU3We3GJ87ntnfO5meinMvruNnqcmXA2XoDVcCc0wCYkzBaZpA7ILRJ/2O2B87jA+QT9UeDRe8svZYAG8b/txc6kc9mA+yqayYPQXwvdmBEOrA5B2p0BtFIYOWKCm5RukWwZyXIbA+0F0LpaiKaBHmVsLw4we99ccsM8a8GClF5JOMcQdou8prULrgRmQo7KI0VcE13MrGv06lE5kodhzGvdWu2GdKkTVWC4DcELcJkKyXbCb1EhAVM//M0DVUNqP2qAJd1baUDaZjTMTeXAttsPi0cM0mgvHvA0NkxYk2QRIrieOsDmEmXttH0DfVfSluSToWmpD8bgOroUOWNw6VI7koGfOBuq6EqLLTNU6ojrmP5D1HVsjmrkYezGIrlA9LjKgnrlGXJlpgbCOD0EtD0QNN8I3cZqjAlhJr4rXpB1iNLhrYffUQWoT7yUKzbxqJlHLq0jc5JYmgHMunogKYJVqF7mTrPyfgktMRTMX/CrOq1gLF3fYNrLiX+Bs8MoTwT2fQPwXgBXHGL+TaIjfinb3C7cscRMIcYL6AAAAAElFTkSuQmCC);
cursor: pointer;
position: fixed;
bottom: 0;
top: 4px;
right: 4px;
width: 16px;
height: 16px;
z-index: 99999999;
}
#debug_bar {
background: #ffffff;
color: #000000;
display: none;
font-family: "Consolas", Verdana, Arial;
font-size: 11pt;
font-weight: normal;
line-height: normal;
position: fixed;
top: 0;
left: 0;
z-index: 2000;
width: 100%;
font-family: Consolas, Monaco, Menlo, "Courier New", monospace !important;
}
#debug-panel .debug-wrapper {
padding: 0px .875em;
background-color: #fff;
border: 1px solid rgba(0,0,0,0.2);
border-bottom: 0;
margin: 0px auto 0px auto;
}
#debug-panel .items {
padding: 10px;
height: 350px;
padding-top: 1em;
font-size: 12px !important;
color: #888;
font-family: Consolas, Monaco, Menlo, "Courier New", monospace !important;
}
#debug-panel .debug-wrapper .legend {
background-color: #f9f9f9;
padding: .25em;
border: 1px solid rgba(0,0,0,0.2);
width: auto;
margin-top: -1.25em;
}
#debug-panel .debug-wrapper .legend span {
color: #999;
font-weight: 300 !important
}
#debug-panel a {
text-decoration: none;
color: rgba(0,0,0,0.5);
height: 100%;
z-index: 90000000;
}
#debug_bar .debug_tabs {
display: block;
list-style: none;
margin: 0;
padding: 0;
border-bottom: 1px solid #999999;
overflow: hidden;
}
#debug_bar .debug_tabs > li {
cursor: pointer;
font-family: Tahoma;
font-size: 10px;
font-weight: bold;
color: #000000;
display: block;
float: left;
line-height: 18px;
padding: 3px 5px;
border-right: 1px solid #999999;
}
#debug_bar .debug_tabs > li:hover {
background: #ff8000;
}
#debug_bar .debug_tabs > li.selected {
background: #999999;
border-bottom: 3px solid #999999;
margin-bottom: -3px;
color: #ffffff;
}
#debug_bar .debug_tab {
font-family: "Consolas", Verdana, Arial;
font-size: 12px;
margin: 0 .25em;
clear: both;
display: none;
padding: 15px;
overflow: scroll;
position: absolute;
left: 0;
right: 0;
top: 25px;
bottom: 0;
}
#debug_bar pre,
#debug_bar code {
display: block;
margin: 0;
color: #000;
background: #FFF;
font-size: 12px;
border: 0;
padding: 5px 10px;
overflow-y: auto;
max-height: calc(100vh - 30px);
max-width: 100%;
overflow-x: hidden;
}
#debug_bar pre.pre_wrap,
#debug_bar code.pre_wrap {
white-space: pre-wrap; /* Since CSS 2.1 */
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
word-wrap: break-word; /* Internet Explorer 5.5+ */
word-break: break-all;
}
#debug_bar .debug_one_query {
padding: 2px 0px;
}
#debug_bar .debug_one_query span {
display: inline-block;
vertical-align: middle;
width: calc(100% - 64px);
}
#debug_bar .debug_one_query span:first-child {
width: 64px;
}
#debug-panel pre {
border: 0px;
font-family: Consolas, Monaco, Menlo, "Courier New", monospace !important;
font-size: 12px !important;
#debug_bar .debug_one_dump {
padding:0 0 40px 0;
}
#debugArrowMinimize {
float: right;
#debug_bar .debug_one_dump .debug_varname {
display:block;
font-weight:bold;
font-size: 16px;
text-transform: uppercase;
}

51
lib/debug/debug.js

@ -1,30 +1,35 @@
function appExpandTabs(act, key) {
var arrDebugTabs = ["General", "Params", "Globals", "Queries", "SqlTrace"];
$(document).ready(function() {
keyTab = (key == null)
? "General"
: key;
$('#debug_btn').on('click', function() {
for (var i = 0; i < arrDebugTabs.length; i++) {
if (act == "min" || arrDebugTabs[i] != keyTab) {
$("#content" + arrDebugTabs[i]).css("display", "none");
$("#tab" + arrDebugTabs[i]).css("color", "#bbb")
}
$bar = $('#debug_bar');
if ($bar.css('display') == 'none') {
$(document.body).css('overflow', 'hidden');
$bar.show();
} else {
$(document.body).css('overflow', '');
$bar.hide();
}
if (act != "min") {
$("#content" + keyTab).css("display", "");
$("#content" + keyTab).css({
"overflow-y": "auto"
});
$("#tab" + keyTab).css("color", "#222")
}
$("#debug-panel").css("opacity", (act == "min") ? "0.9" : "1");
};
$('.debug_tabs > li').on('click', function() {
$('.debug_tabs > li').removeClass('selected');
$('.debug_tab').hide();
$(this).addClass('selected');
$('#'+this.id+'-cont').show();
if($.cookie){
$.cookie('__debug_bar', this.id, {expires: 7, path: '/'});
}
});
if($.cookie){
var id = $.cookie('__debug_bar');
var tab = $('.debug_tabs > li#'+id);
if(tab.length > 0){
tab.click();
}
}
function appTabsHide()
{
$('#debug-panel-legend span a').css("color", "#bbb");
$("#debug-panel .items").hide();
}
}); //document.ready
Loading…
Cancel
Save