CMS DataLife Engine - Система управления сайтами

proba

Интересная логика кода

Рекомендуемые сообщения

При выставлении часового пояса (GMT-03:00) Гренландия как Greenland возникает ошибка:

Fatal error: Uncaught Exception: DateTimeZone::__construct(): Unknown or bad timezone (Greenland) in ...

Все значения не проверял.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день!

В файле templates.class.php имеется строка ( ~ 400 ):

$templatee = preg_replace( "'\\[page-description\\](.*?)\\[/page-description\\]'is", "", $template );

где у переменной лишняя буква Е.

 

В файлах functions.php и functions.inc.php имеется функция dle_strpos, которая не применяется в движке, но её реализация в обоих файлах разная, видимо из-за копирования дублированием первоначально функции dle_strrpos (содержание mb_strrpos и iconv_strrpos).

из файла functions.php:

function dle_strpos($str, $needle, $charset ) {

	if ( strtolower($charset) == "utf-8") {
		if( function_exists( 'mb_strpos' ) ) {
			return mb_strpos( $str, $needle, null, "utf-8" );
	
		} elseif( function_exists( 'iconv_strrpos' ) ) {
			return iconv_strpos($str, $needle, null, "utf-8");
		}
	}

	return strpos($str, $needle);

}

из файла functions.inc.php:

function dle_strpos($str, $needle, $charset ) {

	if ( strtolower($charset) == "utf-8") {
		if( function_exists( 'mb_strrpos' ) ) {
			return mb_strpos( $str, $needle, null, "utf-8" );
	
		} elseif( function_exists( 'iconv_strrpos' ) ) {
			return iconv_strpos($str, $needle, null, "utf-8");
		}
	}

	return strpos($str, $needle);

}

 

  • Нравится 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, proba сказал:

где у переменной лишняя буква Е.

Принято спасибо

 

2 часа назад, proba сказал:

В файлах functions.php и functions.inc.php имеется функция dle_strpos, которая не применяется в движке, но её реализация в обоих файлах разная, видимо из-за копирования дублированием первоначально функции dle_strrpos (содержание mb_strrpos и iconv_strrpos).

из файла functions.php:

Также принято. Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@celsoft почему в DLE 12.1 в /engine/ajax/registration.php дважды подключен functions.php? А так же 

require_once ENGINE_DIR . '/modules/sitelogin.php';

rrUY4Lp_S2iAni_kkIcCOw.png

  • Нравится 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, Gameer сказал:

почему в DLE 12.1 в /engine/ajax/registration.php дважды подключен functions.php?

Просто случайно, поставлена лишняя строчка. Дважды он не подключается, благодаря require_once которая как раз для этого предназначена, чтобы файл случайно не был подключен два раза.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
29 минут назад, celsoft сказал:

Просто случайно, поставлена лишняя строчка. Дважды он не подключается, благодаря require_once которая как раз для этого предназначена, чтобы файл случайно не был подключен два раза.

Это понятно что второй раз не подгружается. Просто заметил при редактировании этого файла.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не баг, опечатка.

Файл /inc/editvote.php строка ( ~ 436 ):

<label class="control-label control-label col-md-2 col-sm-3">{$lang['vote_title']}</label>

дважды один и тот же класс указан.

в этом же файле, строка ( ~ 573 ):

<td class=\"cursor-pointer\" onclick=\"document.location = '?mod=editvote&action=edit&id={$item_id}'; return false;\">{$item_date}&nbsp;-&nbsp;<a class=\"tip\" title='{$lang['word_ledit']}' href=\"?mod=editvote&action=edit&id={$item_id}\">{$title}</td>

отсутствует закрывающий тэг A.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3 часа назад, proba сказал:

Не баг, опечатка.

Файл /inc/editvote.php строка ( ~ 436 ):


<label class="control-label control-label col-md-2 col-sm-3">{$lang['vote_title']}</label>

дважды один и тот же класс указан.

в этом же файле, строка ( ~ 573 ):


<td class=\"cursor-pointer\" onclick=\"document.location = '?mod=editvote&action=edit&id={$item_id}'; return false;\">{$item_date}&nbsp;-&nbsp;<a class=\"tip\" title='{$lang['word_ledit']}' href=\"?mod=editvote&action=edit&id={$item_id}\">{$title}</td>

отсутствует закрывающий тэг A.

 

Принято, спасибо. Внесем изменения в будущих версиях.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Существует функция convert_unicode которая нигде не используется.

Только объявлена \engine\inc\include\functions.inc.php Line 1207 и \engine\modules\functions.php Line 2288

Не понятен смысл ее существования. + комментарий // deprecated

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
34 минуты назад, Gameer сказал:

Существует функция convert_unicode которая нигде не используется.

Только объявлена \engine\inc\include\functions.inc.php Line 1207 и \engine\modules\functions.php Line 2288

Не понятен смысл ее существования. + комментарий // deprecated

Эта функция больше не нужна, она конвретировала данные, что более при utf-8 не требуется. Эта функция раньше активно использовалась в том числе и сторонними плагинами, поэтому ее обьявление и оставлено для совместимости, чтобы множество сторонних модулей и разработок не падало в фатальную ошибку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В модуле плагинов, при вставке длинной строки кода, идёт расползание ссылка (в Firefox 49.0.2), в Яше.Браузере (в Хроме скорей всего тоже) такого не замечено.

 

В файле inc/plugins.php имеется строка ( ~ 893):

<li><a onclick="PluginUpdate('{$row['id']}'); return false;"href="#"><i class="fa fa-upload"></i> {$lang['plugins_update']}</a></li>

Атрибут href рядом с двойными кавычками.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Казус в работе модуля плагинов: к примеру, для поиска задаётся строка "form class", и надо заменить на какую-нибудь строку, например, "form style='display:none' class" (любая строка отличная от поисковой строки) и все вхождения заменятся как надо, НО, если встретится переменная $formClass (неважно строчные или прописные буквы и БЕЗ пробелов), она так же подвергается замене!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3 часа назад, proba сказал:

В модуле плагинов, при вставке длинной строки кода, идёт расползание ссылка (в Firefox 49.0.2), в Яше.Браузере (в Хроме скорей всего тоже) такого не замечено.

В актуальной версии  FF проблем не зафиксировано. Актуальной является аж 60.xx, ваша 49.xx давно морально устарела.

 

1 час назад, proba сказал:

Казус в работе модуля плагинов: к примеру, для поиска задаётся строка "form class", и надо заменить на какую-нибудь строку, например, "form style='display:none' class" (любая строка отличная от поисковой строки) и все вхождения заменятся как надо, НО, если встретится переменная $formClass (неважно строчные или прописные буквы и БЕЗ пробелов), она так же подвергается замене!

Для шаблона поиска неважен регистр написанных букв и количество пробелов и отступов между словам. Это сделано в целях максимальной совместимости плагина с будущими версиями. например если в коде появились дополнительные пробелы в будущем или переносы строк и т.д. они не влияли на нахождение того что указано в шаблоне поиска. Поэтому в вашем случае срабатывает ваша замена. Он заменяет вам не переменную, а "form class" найдет ваше "formClass" и найдет также "form       Class" и т.д. Вам нужно в данном случае делать более точную строку для поиска, расширив ее дополнительными элементами. Это же модуль поиска по PHP коду, а не по просто HTML, а в PHP коде пробелы играют не существенную роль. Например $test = $test1 . $test2 ; эквивалентно и $test=$test1.$test2; поэтому модуль плагинов и не учитывает пробелы, для максимальной совместимости.

  • Нравится 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 22.05.2018 в 14:17, celsoft сказал:

В актуальной версии  FF проблем не зафиксировано. Актуальной является аж 60.xx, ваша 49.xx давно морально устарела.

Не проверял на 52.хх, но для 60.хх придётся полный апгрейд делать, что пока в планы не вписывается :-(

 

В 22.05.2018 в 14:17, celsoft сказал:

Это же модуль поиска по PHP коду

Тогда другая ситуация. При указании, например "найти и добавить выше" или "найти и добавить ниже", указать какую-нибудь строку, и добавляемой будет что-то вроде такой:

$df  = preg_replace("'\\{\\*(.*?)\\*\\}'si", '', $sd);

строка вносится так, как и указали, без каких-либо изменений, но если открыть плагин и действием указать "найти и заменить", а всё остальное оставить прежним, то в файле становится строка:

$df  = preg_replace("'\{\*(.*?)\*\}'si", '', $sd);

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
30 минут назад, proba сказал:

Тогда другая ситуация. При указании, например "найти и добавить выше" или "найти и добавить ниже", указать какую-нибудь строку, и добавляемой будет что-то вроде такой:


$df  = preg_replace("'\\{\\*(.*?)\\*\\}'si", '', $sd);

строка вносится так, как и указали, без каких-либо изменений, но если открыть плагин и действием указать "найти и заменить", а всё остальное оставить прежним, то в файле становится строка:

Да верно. Это известное нам ограничение системы плагинов, потому как для строк замены текста есть управляющие символы, для самой функции замены. Если используются регулярные выражения, то для них нужно использовать найти и добавить выше, чтобы отменить стандартную регулярку. Либо выносить в отдельный файл, и подключать через систему плагинов как отдельный файл, в котором записаны регулярные выражения. Мы работаем над тем чтобы устранить это ограничение надежным и безопасным способом. В будущем оно будет снято.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В файле sitelogin.php не используются переменные:

$dle_user_id = "";
$dle_password = "";

В файле /ajax/allvotes.php не используется переменная:

$vote_skin = $config['skin'];

В файле /modules/vote.php в строке:

$.get(dle_root + "engine/ajax/controller.php?mod=vote", { vote_id: "{$rid}", vote_action: event, vote_check: vote_check, vote_skin: dle_skin, user_hash: dle_login_hash }, function(data){

передаётся параметр vote_skin, его наверное надо переименовать в dle_skin или просто skin, смотря что для controller.php выгоднее оставить.

В самом controller.php имеется строка:

$_REQUEST['dle_skin'] = $_REQUEST['dle_skin'] = $config['skin'];

дублируется _REQUEST. Если задумано передавать дальше файлам, то один dle_skin наверное должен быть skin, а так, вроде как, и не нужна эта строка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В файле functions.inc.php в функции check_login имеется строка:

set_cookie( "dle_name", "", 0 );

может вместо dle_name должно dle_skin?!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
15 минут назад, proba сказал:

В файле functions.inc.php в функции check_login имеется строка:


set_cookie( "dle_name", "", 0 );

может вместо dle_name должно dle_skin?!

нет не должно. DLE должен еще и обеспечивать совместимость со старыми версиями DLE, иногда с очень старыми. Это нужно для этого.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 hours ago, celsoft said:

DLE должен еще и обеспечивать совместимость со старыми версиями DLE, иногда с очень старыми.

Уважаемый celsoft,

у меня работает единая авторизация на субдоменах.

Сохраняется ли эта функция в новейшей версии DLE13?

Нужно ли обновляться до 13й одновременно на домене и всех зависимых поддоменах?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@celsoft , в api присутствуют опечатки (дублирование точки с запятой)

$password = $this->db->safesql( password_hash($password, PASSWORD_DEFAULT) );;

и

$new_password = $this->db->safesql( password_hash($new_password, PASSWORD_DEFAULT) );;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
18 часов назад, Datagor сказал:

у меня работает единая авторизация на субдоменах.

Сохраняется ли эта функция в новейшей версии DLE13?

Нужно ли обновляться до 13й одновременно на домене и всех зависимых поддоменах?

Да сохраняется. Обновляться везде обязательно. Скрипт должен быть одной версии на всех сайтах где используется единая авторизация.

  • Нравится 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В файле templates.class.php в функции sub_load_template() имеются строки:

return "Template not found: " . $templatefile ;
return false;

если первым идёт возврат, зачем второй?! И в этой же функции используется $page_header_info, но в global не объявлена.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
7 часов назад, proba сказал:

И в этой же функции используется $page_header_info, но в global не объявлена.

Спасибо за информацию, принято.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В файле /ajax/upload.php имеется строка ( ~ 45 ):

if( intval( $_REQUEST['news_id'] ) ) $news_id = intval( $_REQUEST['news_id'] ); else $news_id = 0;

однако с isset опечатка.

В файле /inc/editvote.php имеется (~ 516):

while ( $row = $db->get_row() ) {
	
	if( !$langformatdate ) $langformatdate = "d.m.Y";
	if( !$langformatdatefull ) $langformatdatefull = "d.m.Y H:i";

условия можно и вне вынести.:rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
5 часов назад, proba сказал:

 

В файле /ajax/upload.php имеется строка ( ~ 45 ):


if( intval( $_REQUEST['news_id'] ) ) $news_id = intval( $_REQUEST['news_id'] ); else $news_id = 0;

однако с isset опечатка.

 

Какая опечатка? Я не вижу никаких опечаток. Там нет isset и не должно его быть. Все написано так как нужно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти