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

Sign in to follow this  
proba

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

Recommended Posts

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

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

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

Share this post


Link to post
Share on other sites

Добрый день!

В файле 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);

}

 

  • Like 1

Share this post


Link to post
Share on other sites
2 часа назад, proba сказал:

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

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

 

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

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

из файла functions.php:

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

Share this post


Link to post
Share on other sites

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

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

rrUY4Lp_S2iAni_kkIcCOw.png

  • Like 1

Share this post


Link to post
Share on other sites
1 час назад, Gameer сказал:

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

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

Share this post


Link to post
Share on other sites
29 минут назад, celsoft сказал:

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

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

Share this post


Link to post
Share on other sites

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

Файл /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.

 

Share this post


Link to post
Share on other sites
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.

 

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites
34 минуты назад, Gameer сказал:

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

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

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

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

Share this post


Link to post
Share on other sites

В модуле плагинов, при вставке длинной строки кода, идёт расползание ссылка (в 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 рядом с двойными кавычками.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
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; поэтому модуль плагинов и не учитывает пробелы, для максимальной совместимости.

  • Like 1

Share this post


Link to post
Share on other sites
В 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);

 

Share this post


Link to post
Share on other sites
30 минут назад, proba сказал:

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


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

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

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

Share this post


Link to post
Share on other sites

В файле 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, а так, вроде как, и не нужна эта строка.

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites
15 минут назад, proba сказал:

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


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

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

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

Share this post


Link to post
Share on other sites
2 hours ago, celsoft said:

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

Уважаемый celsoft,

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

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

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

Share this post


Link to post
Share on other sites

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

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

и

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

 

Share this post


Link to post
Share on other sites
18 часов назад, Datagor сказал:

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

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

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

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

  • Like 1

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites
7 часов назад, proba сказал:

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

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

Share this post


Link to post
Share on other sites

В файле /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:

Share this post


Link to post
Share on other sites
5 часов назад, proba сказал:

 

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


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

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

 

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this