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

proba

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

Recommended Posts

10 часов назад, celsoft сказал:

Какая опечатка? Я не вижу никаких опечаток.

Коль одни переменные проверяются на существование, а другие - на своё значение, пусть так тогда и будет.

Тогда у меня другой вопрос. В файле /inc/files.php проверяется:

if ( $userdir == "files/" ) msg( "error", $lang['addnews_denied'], $lang['index_denied'] );

т.е. в папку FILES подразумевается, что нельзя, но при этом нет проверки на случай, когда $userdir = "", а $sub_dir = "files".

Share this post


Link to post
Share on other sites

Не баг!

 

Если удаляется "категория1" и имеется такой вариант:

категория1 (за ней имеются публикации)
  подкатегория1 (за ней имеются публикации)
  подкатегория2 (за ней имеются публикации)

 

При выборе "убрать эту категорию у публикаций", удаляются "категория1", "подкатегория1" и "подкатегория2", а у публикаций удаляется только категория с id соответствующей "категория1". Не правильнее было бы в таком случае, удалять у публикаций из категорий и id соответствующие "подкатегория1" и "подкатегория2"?

 

При выборе "Удалить также и публикации", удаляются "категория1", "подкатегория1" и "подкатегория2" и удаляются публикации только с id соответствующими "категория1". Не правильнее было бы в таком случае, удалять и публикаций с id соответствующими "подкатегория1" и "подкатегория2", либо добавлять им 0?

 

При выборе "Переместить в другую категорию", удаляются "категория1", "подкатегория1" и "подкатегория2" и только публикации с id соответствующими "категория1" перемещаются в указанную категорию. Не правильнее было бы в таком случае, если публикациям с id соответствующим "подкатегория1" и "подкатегория2", добавлять id указанной новой категории или 0?

 

В случае, если удаляется "категория1" и имеется такой вариант:

категория1 (публикаций нет)
  подкатегория1 (имеются публикации)
  подкатегория2 (имеются публикации)

то так же удаляются "категория1", "подкатегория1" и "подкатегория2" и публикации с id соответствующими "подкатегория1" и "подкатегория2" не затрагиваются.
Не правильнее было бы в таком случае, публикациям с id "подкатегория1" и "подкатегория2" добавлять 0 (если имелось по одной id)? Получается, что категории с подкатегориями удаляются, а публикации имеют номера своих бывших категорий, о которых ничего не известно, а если не известно, то зачем они остаются?!

 

Подводя всё это, как вариант, не лучше при удалении, например "категория1", помимо трёх предлагаемых действий (на данный момент), добавить действие, при котором всем имеющимся подкатегориям ("подкатегория1" и "подкатегория2") в parentid устанавливать parentid самой "категория1", т.е. все подкатегории не удалять, а поднимать на уровень выше, либо, если удалять (как сейчас реализовано) и подкатегории тоже, то тогда и с учётом их id для публикаций, как это делается для удаляемой "категория1"?

Share this post


Link to post
Share on other sites
В 18.06.2018 в 10:17, proba сказал:

Подводя всё это, как вариант, не лучше при удалении, например "категория1", помимо трёх предлагаемых действий (на данный момент), добавить действие, при котором всем имеющимся подкатегориям ("подкатегория1" и "подкатегория2") в parentid устанавливать parentid самой "категория1", т.е. все подкатегории не удалять, а поднимать на уровень выше, либо, если удалять (как сейчас реализовано) и подкатегории тоже, то тогда и с учётом их id для публикаций, как это делается для удаляемой "категория1"?

Первый вариант не нужен, т.к. перед удалением категории, можно итак поднять все подкатегории на уровень выше, чтобы они больше не являлись подкатегориями удаляемой категории. А вот второй вариант чтобы все действия применялись и к удаляемым подкатегориям имеет смысл. Будет сделано.

Share this post


Link to post
Share on other sites
В 26.06.2018 в 09:24, celsoft сказал:

перед удалением категории, можно итак поднять все подкатегории на уровень выше

Согласен, но для каждой подкатегории придётся совершать однотипные действия по поднятию, а так было бы меньше телодвижений и проще.

Share this post


Link to post
Share on other sites

Есть функция в файле /engine/inc/options.php которая принимает 4 параметра, но 4 параметр нигде не используется в функции.

function showRow($title = "", $description = "", $field = "", $class = "") {
	
	
	echo "<tr>
	<td class=\"col-xs-6 col-sm-6 col-md-7\"><h6 class=\"media-heading text-semibold\">{$title}</h6><span class=\"text-muted text-size-small hidden-xs\">{$description}</span></td>
	<td class=\"col-xs-6 col-sm-6 col-md-5\">{$field}</td>
	</tr>";
}
showRow( $lang['opt_sys_ht'], $lang['opt_sys_htd'], "<input type=\"text\" class=\"form-control\" name=\"save_con[home_title]\" value=\"{$config['home_title']}\">", "white-line" );

 

Share this post


Link to post
Share on other sites

@celsoft функция echofooter выводит если юзер не вошел в админ панель $skin_not_logged_footer но в global она не подтягивается.

function echofooter() {
	global $is_loged_in, $skin_footer;

	if( $is_loged_in ) echo $skin_footer;
	else echo $skin_not_logged_footer;

}

Так же echoheader выводит переменную $skin_not_logged_header которая не берется в global

Share this post


Link to post
Share on other sites

@celsoft 

Файл /engine/clasees/templates.class.php функция load_template. Имя файла обрабатывается функцией totranslit, в которой выполняется следующий код

$var = str_ireplace( ".php", "", $var );
$var = str_ireplace( ".php", ".ppp", $var );

Позже в функции load_template есть код

if( stripos ( $tpl_name, ".php" ) !== false ) {

Вопросы. Зачем после удаления .php делать замену .php на .ppp когда его никогда уже не будет? И зачем делать проверку на существование подстроки .php в названии файла, если эта подстрока уже стерта?

 

Файл /engine/inc/options.php зачем передавать данные в функцию оборачивая в скобки? Пример:

"{$config['allow_comments_wysiwyg']}"
"{$config['comments_rating_type']}"

 

Share this post


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

Вопросы. Зачем после удаления .php делать замену .php на .ppp когда его никогда уже не будет?

что будет в результате работы строки $var = str_ireplace( ".php", "", $var ); если строка будет ".p.phphp", это ответ на ваш вопрос зачем это делать, и о ложном утверждении что его уже никогда не будет. От такой невнимательности к деталям и взламывают коды и в результате сайты.

 

10 часов назад, Gameer сказал:

зачем передавать данные в функцию оборачивая в скобки?

Затем чтобы передать их как именно строки.

Share this post


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

Затем чтобы передать их как именно строки.

Зачем?

Share this post


Link to post
Share on other sites

@celsoft зачем использовать class который называется unifrom но использовать для него js скрипт selectpicker а не uniform?

$('select.uniform').selectpicker();

Это сбивает с толку, использовал метод апдейта uniform и какое было удивление что ничего не происходит и данные не обновляются. Пришлось заглядывать в главный скрипт что бы понять что там совсем не uniform

Edited by Gameer

Share this post


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

зачем использовать class который называется unifrom но использовать для него js скрипт selectpicker а не uniform?

Затем что не всем элементам с этим классом назначается именно selectpicker

Share this post


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

Затем что не всем элементам с этим классом назначается именно selectpicker

Я знаю, но почему для selectpicker не использовать отдельный класс?

Share this post


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

Я знаю, но почему для selectpicker не использовать отдельный класс?

Зачем? Нам удобно так.

Share this post


Link to post
Share on other sites

В движке используется $not_allow_symbol, но например, в файлах feedback.php (ajax и module) по сравнению с другими, отсутствуют символы пробела и &. А в файле editusers.php только &.

Share this post


Link to post
Share on other sites

В файле register.php:

strlen( $email ) > 40,

В файле profile.php:

strlen( $email ) > 50

В social.php:

strlen( $email ) > 50

Да же в api до 50.

Share this post


Link to post
Share on other sites

@celsoft обратите внимание (версия DLE 13.1)

1. /cron.php устаревшая функция each с 7.2.0

while ( list ( $key, $val ) = each( $arr ) ) {

2. /engine/ajax/upload.php нет global для $lang в функции xfparamload

echo $lang['xfield_error'], "$lang[xfield_err_3] \"engine/data/xfields.txt\". $lang[xfield_err_4]";

3. /engine/classes/antivirus.class.php нет переменной $file

$this->checked_folders[] = $dir . $this->dir_split . $file;

4. /engine/classes/parse.class.php нет переменной $url возможно имелось в виду $data->url

$html = ( !empty($data->title) ) ? '<a href="' . $this->safeUrl($url) . '">' . $this->escapeHTML($data->title) . '</a>' : false;

5. /engine/classes/social.class.php нет переменной $count

if(dle_strlen( $user['nickname'], $config['charset'] ) > 37) $user['nickname'] = dle_substr( $user['nickname'], 37, $count, $config['charset'] );

6. /engine/inc/categories.php в функции DisplayCategories нет переменной $cat

$category_name = $cat[$id];

7. /engine/inc/dumper.php объявлена переменная до ее проверки $is_dle

if( !$is_dle AND !empty($str) ) {

8. /engine/modules/social.php нет переменной $_IP в функции check_registration

$row = $db->super_query( "SELECT COUNT(*) as count FROM " . USERPREFIX . "_users WHERE logged_ip = '{$_IP}'" );

 

Edited by Gameer
  • Like 1
  • Upvote 1

Share this post


Link to post
Share on other sites
В 15.02.2019 в 21:22, Gameer сказал:

@celsoft обратите внимание (версия DLE 13.1)

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

Share this post


Link to post
Share on other sites

Только мысли вслух. :ph34r:

Тип текста как "Исходный текст HTML без фильтрации и изменений" в статических страницах ещё актуален? На деле, кроме BB-шного редактора, в прямом виде эта опция не работает.

 

По-умолчанию редактор "Фроала". При вставке куска кода в редактор и выборе данного типа, идёт преобразование символов в html-сущности + addslashes (при allow_br = 2), кусок кода при выводе страницы выводится как текст. С "Тини" такая же песня. В самих же браузерах, при редактировании страницы, кусок кода отображается как оригинальный (как только что вставленный). При переключении на BB-шный, в нём весь код отображается с сущностями, а не как оригинал. Но, если в него вставить оригинал, то кусок кода вставится в страницу правильно, и при редактировании отобразится в оригинале.


Если пойти дальше и вставить изображение через "Загрузка изображений и файлов на сервер" внутрь куска кода в обоих "висивигах" - на странице изображение отображается, кусок кода всё так же текстом. В BB-шном, чтобы обработался тэг картинки и кусок кода встал нормально, надо выбрать тип "фильтрованный ...".

 

Да, кстати, фраза "Фильтрованный текст ...", как понимаю подразумевает под собой как уже обработанный (+ без использования HTML, если опираться на то, что в третьем типе упоминается про наличие HTML), а фактически будет обработка парсером. Не правильнее ли обозвать, что-то типа "(От)Фильтровать текст ..." или "Текст с фильтрацией ..."?! Ну или добавить к этим типам подсказки.


Конечно, чтобы вставить в кусок кода загруженные картинки в "виcивигах" и всё это отобразить в выводе страницы, можно извратиться через "Исходный код HTML" и "Вставка исходного кода", но там не всё айс + в самих редакторах кусок кода тогда не отображается.

Share this post


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

Тип текста как "Исходный текст HTML без фильтрации и изменений" в статических страницах ещё актуален? На деле, кроме BB-шного редактора, в прямом виде эта опция не работает.

Это настройка не редакторов, а DLE. Визуальные редакторы приводят код к валидному, только к настройке это не имеет никакого отношения, это заложено в самих редакторах, разработчиками этих редакторов. Поэтому чтобы использовать невалидный HTML код, если вы хотите чтобы он был обязательно, то конечно визуальные редакторы нужно отключать переключив на BB редактор, где по сути это простое текстовое поле.

 

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

 

45 минут назад, proba сказал:

Да, кстати, фраза "Фильтрованный текст ...", как понимаю подразумевает под собой как уже обработанный (+ без использования HTML, если опираться на то, что в третьем типе упоминается про наличие HTML), а фактически будет обработка парсером. Не правильнее ли обозвать, что-то типа "(От)Фильтровать текст ..." или "Текст с фильтрацией ..."?! Ну или добавить к этим типам подсказки.

Нет не правильно. Это значит что текст пройдет проверку со стороны DLE на предмет валидации, и безопасности. Именно со стороны DLE, именно на сервере, а не со стороны редактора.

Share this post


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

Это настройка не редакторов, а DLE

Это понятно, но я о другом. Возможно Вы меня не поняли... Визуальные преобразуют в html-сущности, но при получении и дальнейшей обработке DLE получаемых данных от них, не правильнее ли будет перевести эти символы в их представление, и дальше уже DLE пусть либо экранирует addslashes (как она делает при allow_br = 2), либо парсером (как при = 0 или 1) и т.д..

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

Это значит что текст пройдет проверку со стороны DLE на предмет валидации, и безопасности.

И это понятно. Только названия параметров как "фильтрованный ..." сбивают почему-то с толку. :( То ли уточняют, какой "текст" вносится в редактор, то ли какой будет на выходе (при выводе страницы).

Share this post


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

Это понятно, но я о другом. Возможно Вы меня не поняли... Визуальные преобразуют в html-сущности, но при получении и дальнейшей обработке DLE получаемых данных от них, не правильнее ли будет перевести эти символы в их представление, и дальше уже DLE пусть либо экранирует addslashes (как она делает при allow_br = 2), либо парсером (как при = 0 или 1) и т.д..

Нет не правильнее. Редакторы это делают в вашем браузере и что они делают у вас в браузере, для DLE неведомо. Вы это поставили или редактор исправил, DLE этой информацией не обладает и не может обладать. DLE получает на сервер только то что потом ему отправилось, и это его исходная точка отчета. DLE работает на сервере, а редакторы в браузере, это разные места работы. Поэтому параметры вступают в силу только после отправки данных на сайт. А не до их отправки. То что было до, считается вашими действиями, а не действиями DLE.

Share this post


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

Редакторы это делают в вашем браузере и что они делают у вас в браузере, для DLE неведомо.

Не спорю.

21 час назад, celsoft сказал:

DLE получает на сервер только то что потом ему отправилось, и это его исходная точка отчета.

Правильно. И получая все данные с формы, такие, например, allow_br = 2 (Исходный текст HTML без фильтрации и изменений), template = содержимое обработанное фроалой или тини, и остальные, DLE в таком случае делает проверку на маг. кавычки и двойное экранирование (addslashes + safesql).

Так вот в данном случае, после проверки get_magic_quotes_gpc + если эти "висивиг" (из config), обработать template (html_entity_decode / htmlspecialchars_decode), а дальше тоже двойное экранирование. Или так будет не правильно?! B)

Share this post


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

DLE в таком случае делает проверку на маг. кавычки и двойное экранирование (addslashes + safesql)

Есть такое понятие как обратная совместимость, т.е. при обновлении DLE должен корректно отображать то что было добавлено ранее и на предыдущих версиях. Не забываем что DLE не год, а 15 лет. Он существовал тогда когда маг. кавычки существовали и были включены по умолчанию в PHP всегда и у всех, и контент был сформирован так как сформирован, и 15 лет назад не было никаких даже мыслей что, что то в этом вопросе изменится в PHP, а случилось то что случилось, и это двойное экранирование продолжает поддерживаться в DLE чтобы обеспечить совместимость со старым контентом. Не может обновление DLE "убить" то что вы добавляли несколько лет. Это очевидно. Это что касается двойного экранирования. Далее:

 

11 минут назад, proba сказал:

после проверки get_magic_quotes_gpc + если эти "висивиг" (из config), обработать template (html_entity_decode / htmlspecialchars_decode),

На основании чего это должен быть такой "финт" ушами? Что вы думаете что пользователи не используют HTML сущности? Используют и иногда делают это специально, так вот html_entity_decode это "убьет" на корню. Сущности это не только кавычки, и ряд HTML символов. Сущностями могут быть представлены абсолютно все существующие символы, DLE только делает это когда стоит вопрос безопасности и валидности и ни в каких других случаях.

Share this post


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

Что вы думаете что пользователи не используют HTML сущности?

Вот этого я и добивался от Вас два дня. :rolleyes: Вопрос исчерпан.

Share this post


Link to post
Share on other sites

@celsoft

1. /engine/inc/mass_static_actions.php
    Нет переменной $t1

msg( "success", $lang['db_ok'], $lang['db_ok_1'].$t1, $_SESSION['admin_referrer'] );

2. /engine/inc/preview.php
    Нет переменной $cat_icon из-за этого не работает тег {category-icon} в preview.tpl (код дважды)

if($cat_icon[$category[0]] != ""){ $tpl->set('{category-icon}', $cat_icon[$category[0]]); }
if($cat_icon[$category[0]] != ""){ $tpl->set('{category-icon}', $cat_icon[$category[0]]); }

3. /engine/inc/wordfilter.php
    Проверка производиться до получение данных из $_POST['word_replace']

if( $word_replace == "($lang[word_del])" ) {
	$word_replace = "";
}

4. /engine/classes/zipextract.class.php
    Нет переменной $lang в функции WriteFile

$this->errors_list[] = array( 'file' => $file, 'error' => $lang['upgr_f_error_18'] );
$this->errors_list[] = array( 'file' => $file, 'error' => $lang['upgr_f_error_18'] );
} else $this->errors_list[] = array( 'file' => $file, 'error' => $lang['upgr_f_error_18'] );
} else $this->errors_list[] = array( 'file' => $file, 'error' => $lang['upgr_f_error_18'] );

 

  • Like 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now