Несколько пунктов к разработчику

  • 14 Ответов
  • 473 Просмотров

Smolenkov_BN

  • Сообщений: 27
    • Просмотр профиля
Несколько пунктов к разработчику
« : 05 Октября 2017, 08:49:52 »
Не теряю надежды включить Danneo CMS в учебный процесс средней школы, потому что она прекрасно приспособлена для работы на "тихоходных" бюджетных серверах, где обновление страниц в режиме администрирования для "вебмонстров" типа Drupal CMS 8.3.x занимает от нескольких десятков секунд до нескольких минут при наличии всевозможных видов "кеширования", без которых сама инсталляция длится более 1 часа. Поэтому у меня появилось несколько пунктов к разработчику по поводу Danneo CMS 1.5.4 с патчами 1-3.

1. Баги администрирования пользователей.
Моя последовательность действий.
Под учетной записью админа вошел в панель управления.
Создал пользователя "Foma_BU" ("Фома без ума") с правами публикатора.
Вышел из учетной записи админа.
Попытался войти под учетной записью пользователя "Foma_BU" и получил отказ:

Найдена ошибка!
Возможные причины:
Ваше имя должно быть не менее 3 и не более 18 символов!
Ваше имя должно состоять только из букв и цифр, без пробелов и любых спецсимволов.


Снова под учетной записью админа вошел в панель управления.
Удалил пользователя "Foma_BU" и создал нового "FomaBU".
Вошел в редактирование указанного пользователя и на уровне поля "День рождения" получил кучу двустрочных сообщений об ошибке:

Warning: Illegal string offset 'd' in admin\mod\user\index.php on line 661
Notice: Uninitialized string offset: 0 in admin\mod\user\index.php on line 661
...


2. В установочном пакете Danneo CMS присутствует редактор TinyMCE, но статьи и другие текстовые документы демоконтента опубликованы без его участия. В процессе их редактирования редактор TinyMCE также невозможно подключить.

3. Мне удалось найти приличную CMS форума, автор которой готов оказать помощь по ее интеграции в Danneo CMS. Это FUDforum. Вот все необходимые для ознакомления и связи с автором веблинки:
- продукт
_http://fudforum.org/
« Последнее редактирование: 05 Октября 2017, 23:52:02 от Neon »

Saor

  • Сообщений: 101
    • Просмотр профиля
Re: Несколько пунктов к разработчику
« Ответ #1 : 05 Октября 2017, 15:23:11 »
Куда вы пытаетесь зайти созданным пользователем?
Пользователи заходят на сайт, Чтобы зайти в Админку нужно создавать Администратора.
Есть список символов запрещенный в имени пользователя, среди них по умолчанию пробелы и знаки подчеркивания.
Если хотите их включить нужно менять функцию проверки имени пользователя.
По поводу ошибок пользователя на уровне дня рождения ничего сейчас не скажу, надо проверить, но есть подозрение что либо файлы cms заливались не в бинарном режиме либо что -то делаете не так.
По поводу форума, что ен утраивает с форумами интеграция которых уже реализованна? хотя бы тем же Simple Machines?

Smolenkov_BN

  • Сообщений: 27
    • Просмотр профиля
Re: Несколько пунктов к разработчику
« Ответ #2 : 06 Октября 2017, 09:06:09 »
>> Куда вы пытаетесь зайти созданным пользователем?
- Через блок входа пользователей. На локальном хостинге это выглядит так:
http://localhost/user/login

>> Пользователи заходят на сайт
- Именно туда я и хотел войти под именем публикатора.

>> Чтобы зайти в Админку нужно создавать Администратора.
- Администратор создается во время инсталляции. Зачем мне создавать на локальном хостинге кучу администраторов?

>> Есть список символов запрещенный в имени пользователя, среди них по умолчанию пробелы и знаки подчеркивания.
- Первый баг и заключается в том, что Администратор может создать Пользователя с любым именем, включая запрещенные символы. А Пользователь с этим именем войти через блок пользователей не может, потому что выдается предупреждение. Почему предупреждение о символах имени не выдается Администратору при создании нового пользователя?

>> По поводу ошибок пользователя на уровне дня рождения ничего сейчас не скажу, надо проверить, но есть подозрение что либо файлы cms заливались не в бинарном режиме либо что-то делаете не так.
- Все очень просто: заходите под именем Администратора, создаете нового пользователя и пытаетесь редактировать его профиль. Что тут неясно?

>> По поводу форума, что ен утраивает с форумами интеграция которых уже реализованна? хотя бы тем же Simple Machines?
- Автор FUDforum может оказать помощь при создании мода встроенного форума для Danneo CMS!!!

Smolenkov_BN

  • Сообщений: 27
    • Просмотр профиля
Re: Несколько пунктов к разработчику
« Ответ #3 : 06 Октября 2017, 16:46:00 »
Более подробно исследовал проблему и пришел к следующим выводам.

Баг №1 (пример на локальном хосте)

1. Входим в админпанель:
http://localhost/admin/

2. Движемся по маршруту:
Управление контентом >> Пользователи >> Добавить пользователя

3. Заполняем поля:
- Логин     Foma_BU
- E-Mail    foma@bu.ru
- Пароль    1234567890
- Группа     Публикатор
- Действие   Просто добавить

4. Кликаем по кнопке "Добавить".

5. В открывшемся окне "Список пользователей" кликаем по изображению "Редактировать" в строке пользователя Foma_BU.

6. В открывшемся окне "Редактировать пользователя" возле поля "День рождения" наблюдаем пары сообщений:
- 31 раз
Warning: Illegal string offset 'd' in C:\usbwebserver\root\public_html\admin\mod\user\index.php on line 661
Notice: Uninitialized string offset: 0 in C:\usbwebserver\root\public_html\admin\mod\user\index.php on line 661

- 12 раз
Warning: Illegal string offset 'm' in C:\usbwebserver\root\public_html\admin\mod\user\index.php on line 666
Notice: Uninitialized string offset: 0 in C:\usbwebserver\root\public_html\admin\mod\user\index.php on line 666

- около 100 раз
Warning: Illegal string offset 'y' in C:\usbwebserver\root\public_html\admin\mod\user\index.php on line 674
Notice: Uninitialized string offset: 0 in C:\usbwebserver\root\public_html\admin\mod\user\index.php on line 674


7. Кликаем кнопку "Сохранить".

8. В открывшемся окне "Список пользователей" опять кликаем по изображению "Редактировать" в строке пользователя Foma_BU.

9. В открывшемся окне "Редактировать пользователя" возле поля "День рождения" сообщения уже не наблюдаются.

10. Выходим из админпанели.

Вывод №1:
В файле
admin/mod/user/index.php
виноват вот этот кусочек кода:
						if ($item['fieldtype'] == 'date')
{
$sel = ' <select name="'.$name.'[day]">';
for ($i = 1; $i < 32; $i ++) {
$sel.= ' <option value="'.$i.'"'.(($value['d'] == $i) ? ' selected' : '').'>'.$i.'</option>';
}
$sel.=   ' </select>&nbsp;'
.' <select name="'.$name.'[month]">';
for ($i = 1; $i < 13; $i ++) {
$sel.= ' <option value="'.$i.'"'.(($value['m'] == $i) ? ' selected' : '').'>'.$i.'</option>';
}
$sel.=   ' </select>&nbsp;'
.' <select name="'.$name.'[year]">';
for($i = 1928; $i < (NEWYEAR + 1); $i ++)
{
if (empty($value) AND $i == 1971)
$sel.= ' <option value="'.$i.'" selected>'.$i.'</option>';
elseif ($i == $value['y'])
$sel.= ' <option value="'.$i.'" selected>'.$i.'</option>';
else
$sel.= ' <option value="'.$i.'">'.$i.'</option>';
}
$sel.= ' </select>';
echo $sel;
}
При редактировании профиля сразу после добавления пользователя, видимо, не определены переменные:
$value['d']
$value['m']
$value['y']

Баг №2 (пример на локальном хосте)

1. В предыдущем примере мы смогли создать пользователя с недопустимым именем Foma_BU.

2. Пытаемся войти в юзерпанель:
http://localhost/user/
с логином Foma_BU и паролем 1234567890

3. В ответ получаем сообщение:
Найдена ошибка!
Возможные причины:
Ваше имя должно быть не менее 3 и не более 18 символов!
Ваше имя должно состоять только из букв и цифр, без пробелов и любых спецсимволов.


Вывод №2:
В процессе разработки Danneo CMS была допущена оплошность:
созданы параллельные ветви алгоритмов обработки информации для админов и прочих пользователей.
Придется либо до конца версии править коды параллельно для скриптов админов и для скриптов прочих пользователей, либо ввести админов в состав модуля "Пользователи", который должен стать неотъемной частью базы движка, как это сделано во всех приличных CMS.

Neon

  • Сообщений: 666
    • Просмотр профиля
    • Danneo CMS
Re: Несколько пунктов к разработчику
« Ответ #4 : 13 Октября 2017, 11:14:03 »
Smolenkov_BN, спасибо за выявление ошибок, и подробный разбор.
Разумеется все баги будем исправлять.

Вот только с некоторыми вашими выводами, позволю не согласиться.
Особенно относительно высказывания "...как это сделано во всех приличных CMS".
Нужно было добавить "во всех дырявых CMS", и заодно назвать имена этих "приличных" CMS. Чтобы было понятно о ком речь.

В Danneo CMS административная панель максимально отделена от публичной части системы, и это не недостаток, а как раз наоборот, преимущество.
Админка более надежно защищена.

Данное разделение было принято еще в первых версиях DN, и я не стал менять этот принцип в новой ветке.
Это, являлось поводом для бесконечных споров с пользователем Staf4.

Staf4, предлагал совместить базы пользователей и админов, а заодно и функционал.
Основная мотивировка, не улучшенное управление или безопасность, а сокращение количества файлов.
Я против такого решения.
Экономия общего веса системы в 100 кб, не может считаться хорошим поводом, когда речь идет о безопасности.

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

Описанные баги не влияют на нормальную работу системы.
Но, все равно, спасибо. Будем исправлять.

PS:
Для постоянных пользователей. Прошу, извинить за редкое появление.
1. Много текущей работы.
2. Надо же дать возможность и самим пользователям решать некоторые проблемы. А то, все сидят и ждут когда придет Neon, и все исправит, и разрешит все вопросы.

Так или иначе,
я все равно отслеживаю все значимые посты, и все баги будут исправлены и собраны в патчи.
DANNEO ™

Smolenkov_BN

  • Сообщений: 27
    • Просмотр профиля
Re: Несколько пунктов к разработчику
« Ответ #5 : 14 Октября 2017, 19:02:16 »
> Smolenkov_BN, спасибо за выявление ошибок, и подробный разбор.
> Разумеется все баги будем исправлять.
- Приятно читать, но неприятно вспоминать.
1. Исправить строку с копирайтом сайта
http://forum.danneo.ru/index.php?topic=318.0
Наличие лишь одного символа копирайта (C) не обеспечит положительное решение в суде по защите авторских прав. Только обязательное наличие слова "Copyright" с символом копирайта (C) или без него и обязательно с указанием периода действия авторского права в годах (например, 1992-2017) даст положительное решение суда в пользу владельца сайта. Это особенно остро проявилось в период 1992-1998 г.г., когда идеи из бывшего СССР стали появляться на сайтах в Интернет. Многие российские авторы изобретений тогда "остались с носом при своих интересах".
2. Защита адреса email от спамботов
http://forum.danneo.ru/index.php?topic=323.0
Адрес email из мода "Контакты" до сих пор "свистит" на весь Интернет, потому что доступен даже самым примитивным ботам. Например, лично я рекомендовал бы для этой цели использовать какой-нибудь известный JS преобразования текста в картинку.

> Вот только с некоторыми вашими выводами, позволю не согласиться.
> Особенно относительно высказывания "...как это сделано во всех приличных CMS".
> Нужно было добавить "во всех дырявых CMS", и заодно назвать имена этих "приличных" CMS. Чтобы было понятно о ком речь.
- Существует много приличных CMS. Первой на ум пришла Elxis CMS, где довольно грамотно сделана защита.

> В Danneo CMS административная панель максимально отделена от публичной части системы, и это не недостаток, а как раз наоборот, преимущество.
> Админка более надежно защищена.
> Данное разделение было принято еще в первых версиях DN, и я не стал менять этот принцип в новой ветке.
> Это, являлось поводом для бесконечных споров с пользователем Staf4.
> Staf4, предлагал совместить базы пользователей и админов, а заодно и функционал.
> Основная мотивировка, не улучшенное управление или безопасность, а сокращение количества файлов.
> Я против такого решения.
> Экономия общего веса системы в 100 кб, не может считаться хорошим поводом, когда речь идет о безопасности.
- Несмотря на все ухищрения с разделением административной и пользовательской частей уязвимость Danneo CMS остается на уровне Opencart CMS, где все сделано примерно аналогично. Знаете, сколько раз мне приходилось восстанавливать учетную запись администратора у знакомых е-шопников? А причина одна - наличие общей БД! Происходит очередная SQL-инъекция (после обновления, инсталляции нового модуля или работы нечистоплотного пользователя), и владелец сайта начнает судорожно искать спеца, потому что изменились или исчезли учетные записи всех админов. В связи с этим на многих хостингах уже стали предлагать не одну, а сразу две БД с различающимися логинами и паролями: в первую обычно заносятся таблицы всех пользователей и всех каталогов, а во вторую - таблицы учетных записей админов, конфигурации системы и снимок первой БД. Danneo CMS пока не обладает возможностью разделения таблиц по разным БД для подобной цели. Следовательно, у меня нет пока оснований согласиться с Вами. Если бы все было хорошо, как Вы пишете, то не было бы подобных веблинков:
http://webprovincia.com/opencart/parol-ot-paneli-administratora.html

> Что касается логинов администратора с нижним подчеркиванием, можно было не расписывать все пункты ваших действий.
> А, просто попросить добавить возможность использования некоторых символов.
> И все.
- Я просто указал несоответствие между возможным именем пользователя, созданным администратором, и его проверкой на входе.

> Описанные баги не влияют на нормальную работу системы.
- Но вызывают недовольство у админов...

> PS:
> Для постоянных пользователей. Прошу, извинить за редкое появление.
> 1. Много текущей работы.
> 2. Надо же дать возможность и самим пользователям решать некоторые проблемы. А то, все сидят и ждут когда придет Neon, и все исправит, и разрешит все вопросы.
- Не так-то просто отследить последовательность выполнения PHP в условиях действия JS. Например, формирование титульной страницы происходит с использованием целой кучи JS:
- Danneo CMS (ios.js, jquery.js, jquery.colorbox.js, jquery.liquid.slider.js, script.js, watch.js) - 6 шт.;
- форум Danneo CMS (bootstrap.min.js, highlight.pack.js, jquery.min.js, menu.js, script.js, theme.js, watch.js) - 7 шт.
Честно говоря, сам по себе язык PHP - это по сути шаблонизатор (препроцессор гипертекста) с расширенными возможностями. К чему его насыщать таким количеством JS, снижая общий уровень безопасности сайта и его гостей? Ну, разве что для мнимой экономии времени на разработку! Будет немного свободного времени - поклацайте по кнопке "Next" и посмотрите возможности HTML5/CSS3:
https://www.w3schools.com/css/

Neon

  • Сообщений: 666
    • Просмотр профиля
    • Danneo CMS
Re: Несколько пунктов к разработчику
« Ответ #6 : 15 Октября 2017, 12:27:19 »
Smolenkov_BN, сколько воды, и мало конкретики.
Если это возможно, постарайтесь быть более кратким, и четким в высказываниях.

Несмотря на все ухищрения с разделением административной и пользовательской частей уязвимость Danneo CMS остается на уровне Opencart CMS, где все сделано примерно аналогично. Знаете, сколько раз мне приходилось восстанавливать учетную запись администратора у знакомых е-шопников? А причина одна - наличие общей БД! Происходит очередная SQL-инъекция (после обновления, инсталляции нового модуля или работы нечистоплотного пользователя), и владелец сайта начнает судорожно искать спеца, потому что изменились или исчезли учетные записи всех админов. В связи с этим на многих хостингах уже стали предлагать не одну, а сразу две БД с различающимися логинами и паролями: в первую обычно заносятся таблицы всех пользователей и всех каталогов, а во вторую - таблицы учетных записей админов, конфигурации системы и снимок первой БД. Danneo CMS пока не обладает возможностью разделения таблиц по разным БД для подобной цели. Следовательно, у меня нет пока оснований согласиться с Вами. Если бы все было хорошо, как Вы пишете, то не было бы подобных веблинков:
_http://webprovincia.com/opencart/parol-ot-paneli-administratora.html

Вы забыли (наверное) уточнить, сколько раз вам приходилось восстанавливать конкретно Danneo CMS, после взломов?

В DN, кроме обычных мер безопасности, еще есть "секретное слово".
Даже если администратор, по глупости, создал простой пароль, и его смогли подобрать, злоумышленник не сможет изменить пароль основного админа, без секретного слова. Поэтому, доступ в панель он не сможет закрыть, а значит и восстанавливать ничего не придется.
Админ всегда может войти, и сменить пароль.

Кроме этого, панель всегда можно закрыть .htaccess, как дополнительной защитой.
В предыдущих версиях были проблемы с ЧПУ, если каталоге администратора добавить файл .htaccess
В новой версии этой проблемы нет.

Что касается SQL-инъекций, также, пожалуйста, примеры в студию.

Danneo CMS, это открытая и свободно распространяемая система. Если есть уязвимости, рассказывайте, будем устранять.
Мы можем пропустить или проигнорировать предложения относительно общего функционала, но только не сообщения об "дырах" в системе.
И, здесь, мы рассчитываем на помощь сообщества.

На конкретную помощь, а не на голословные рассуждения, - мол возможно, может быть, и пр.
Абстрактные разговоры только отвлекают, и мешают сосредоточиться на главном.
DANNEO ™

Smolenkov_BN

  • Сообщений: 27
    • Просмотр профиля
Re: Несколько пунктов к разработчику
« Ответ #7 : 15 Октября 2017, 13:51:46 »
> Вы забыли (наверное) уточнить, сколько раз вам приходилось восстанавливать конкретно Danneo CMS, после взломов?
- Версию 1.5.x - ни разу не восстанавливал, потому что она пока не получила такого широкого распространения как Opencart. А вот с версией 0.5.4 нам пришлось дополнительно повозиться, зато она и сегодня "пашет как трактор" в бесприбыльной и неблагодарной сфере. За это Вам огромное сердечное "спасибо"!

> В DN, кроме обычных мер безопасности, еще есть "секретное слово"...
> Кроме этого, панель всегда можно закрыть .htaccess, как дополнительной защитой...
> Что касается SQL-инъекций, также, пожалуйста, примеры в студию.
- Первая же выявленная SQL-инъекция накроет "известным органом" и "секретное слово", и ".htaccess". А примеры уязвимостей по версиям Danneo CMS Вы можете посмотреть, набрав в любом приличном поисковике всего два слова:
Danneo vulnerability

> Danneo CMS, это открытая и свободно распространяемая система. Если есть уязвимости, рассказывайте, будем устранять.
> Мы можем пропустить или проигнорировать предложения относительно общего функционала, но только не сообщения об "дырах" в системе.
> И, здесь, мы рассчитываем на помощь сообщества.
> На конкретную помощь, а не на голословные рассуждения, - мол возможно, может быть, и пр.
> Абстрактные разговоры только отвлекают, и мешают сосредоточиться на главном.
- Если Вы позволите, то я в свободное время подготовлю необходимую информацию, и мы с Вашим непосредственным участием попробуем проделать необходимые операции по исследованию CMS на уязвимость. А пока можете посмотреть этот веблинк:
https://www.ibm.com/developerworks/ru/library/os-test-websites/index.html

Я с искренним уважением отношусь к людям, которые что-либо делают бесплатно для блага других людей. Поэтому не считайте меня своим врагом. Несколько слов о себе.
Впервые мне удалось выйти в Интернет в 1992 году. Под DOS использовал Arachne в качестве графического браузера и Astra в качестве системы передачи информационных файлов. А вот последние годы моей профессиональной деятельности:
1995-2000 - заведующий отделом компьютерной обработки информации исполнительной дирекции областного отделения фонда социального страхования;
2000-2008 - главный инженер проекта (ГИП) и по совместительству начальник отдела института по проектированию систем автоматизации производства;
2008-2009 - начальник отдела автоматизации систем управления производством в коммерческой фирме;
2009-2013 - эксперт по IT товарам и технологиям "ноу-хау" представительства областной торгово-промышленной палаты и одновременно администратор информационных технологий товарной биржи (по трудовому соглашению).
2013-настоящее время - пенсионер и не торопясь занимаюсь вопросами IT в школьном образовании.
Мне пришлось курировать кучу серьезных проектов по созданию Интранет/Интернет на предприятиях металлургической отрасли как внутри страны, так и за рубежом. Через мои руки прошло более 1000 свободных и проприетарных CMS различного назначения, большая часть которых давно "канула в лету". Поэтому у меня накопился некоторый опыт по выбору железа и программ, а в сложных случаях я могу воспользоваться услугами серверов и специалистов IT-полигона проектного института.
А Вы чем занимаетесь за пределами этого форума, если не секрет?

Neon

  • Сообщений: 666
    • Просмотр профиля
    • Danneo CMS
Re: Несколько пунктов к разработчику
« Ответ #8 : 15 Октября 2017, 23:42:56 »
Smolenkov_BN, сожалею, но вы так и не назвали конкретные примеры.
Читать одно и тоже сообщение, семилетней давности, об одной уязвимости в DN, которая давно закрыта, у меня нет ни времени ни желания.

А Вы чем занимаетесь за пределами этого форума, если не секрет?
Живу, с вашего позволения.
И, по мере сил (на старости лет) пытаюсь поддерживать открытый проект, который мы когда-то начинали еще с Денисом Донским (aka Dantes).
Ни для кого не секрет, что DANNEO, это абревиатура Dantes & Neon.

Поскольку, и Danneo v.0.5.4 и v.0.5.5 я подготавливал и выкладывал в паблик сам (так получилось), я мог бы новую ветку, которую уже точно пересобирал и переосмысливал один, назвать к примеру Arisfera. И, имел бы на это, полное право. Но, в память о наших общих делах, я хочу, чтобы это была Danneo CMS.
И, еще надеюсь, что ни смотря ни на что, система будет востребована, и будет поддерживаться под этим брендом, даже когда основные разработчики уйдут совсем со сцены.

У нас, по прежнему, так мало чисто Российских (открытых) разработок в этой области, и по моему мнению, просто стыдно использовать Джумлы и Вордпрессы.
Заниматься переводом чужого ПО, и хвастаться сколько там удобных плагинов, просто противно.
Нужно создавать своё, ни смотря ни на что.
DANNEO ™

shrodik

  • Сообщений: 11
    • Просмотр профиля
Re: Несколько пунктов к разработчику
« Ответ #9 : 19 Октября 2017, 19:14:56 »
"Живу, с вашего позволения." )))
Фаллометрии не случилось. +100 к карме Neon'а!
 

Smolenkov_BN

  • Сообщений: 27
    • Просмотр профиля
Re: Несколько пунктов к разработчику
« Ответ #10 : 21 Октября 2017, 14:08:03 »
С Вашего позволения продолжу перетирать косточки Danneo CMS.

Низкая скорость администрирования
Вот несколько прописных истин администрирования любой CMS.
1. Чем меньше длительность подключения компьютера к админпанели CMS, тем ниже вероятность ее взлома через компьютер админа.
2. Вложенность меню админпанели не должна превышать 3 переходов по веблинкам.
3. CMS должна обеспечить максимальную скорость заполнения форм админом:
- низшей квалификации - более 60 знаков в минуту (1 знак в секунду);
- средней квалификации - более 120 знаков в минуту (2 знака в секунду);
- высшей квалификации - более 240 знаков в минуту (4 знака в секунду).
Остановимся на этом пункте подробнее.
Для заполнения даты в формате
ГГГГ-ММ-ДД
по ГОСТ ИСО 8601-2001 "Представление дат и времени" админу высшей квалификации при наборе на клавиатуре понадобится 2 с (8 знаков цифр и 2 знака табуляции). Запомним это значение времени.
В Danneo CMS для набора даты "День рождения" предусмотрены выпадающие чекбоксы: день, месяц и год. Результаты исследований показали, что скорость реакции (биологический пинг) админа при работе на компьютере по дисплею, а не по памяти как при наборе текста, определяется по следующей схеме:
1) админ увидел изображение выпадающего чекбокса;
2) админ распознал изображение и принял решение на выбор;
3) админ дал команду мышцам руки нажать кнопку.
И так 3 (три) раза по каждому выпадающему чекбоксу. Скорость реакции (биологического пинга) по каждому пункту вышеприведенной схемы у админа:
- низшей квалификации - до 1,6 с;
- средней квалификации - до 1 с;
- высшей квалификации - до 0,6 с.
Админ высшей квалификации на заполнение одного выпадающего чекбокса затратит до
0,6 с * 3 = 1,5 с
Следовательно, админу высшей квалификации на заполнение трех выпадающих чекбоксов понадобится
1,5 с * 3 = 4,5 с
Сравните скорости заполнения даты:
- при наборе с клавиатуры - 2 с;
- при заполнении выпадающих чекбоксов - 4,5 с.
При наборе с клавиатуры скорость работы админа выше примерно в 2 раза!

Потенциальная опасность в схеме буферизации
В Danneo CMS применяется буферизация PHP по схеме:
ob_start();
... ob_get_contents();
ob_end_clean();
...
ob_end_flush();
Вопреки рекомендациям разработчиков PHP я бы изменил ее на следующую:
ob_start();
... ob_get_contents();
ob_clean();
...
ob_end_flush();
Дело в том, что функция "ob_end_clean" может влиять на значения переменных окружения текстового редактора, если он используется в режиме реверсирования при редактировании. Я пока не вникал в тонкости Вашего алгоритма, поэтому можете считать данный пункт как общее предупреждение.

О применении связки CKEditor и KCFinder
Применяемый в составе Danneo CMS текстовый редактор "Крошка смелокодов" (TinyMCE) приносит неприятности админам своей ограниченностью функций и отсутствием качественного русского перевода интерфейса. На мой взгляд имеет смысл заменить или предложить в качестве альтернативы связку CKEditor+KCFinder. У меня имеется достаточный опыт подключения именно через PHP всех версий CKEditor от 3.6.6.2 до 4.7.3. Последнюю версию 4.7.3 подключил в обновленную мною SiNG CMS Base 2.12.7 буквально вчера. Добавляется файл PHP с установками редактора и в нужном месте инклюдится в Вашу программу. Работает через буфер, поэтому никаких дополнительных временных файлов в системе не требуется. Если надо, то могу поделиться.

Улучшение дизайна меню
В качестве наглядного пособия предлагаю посмотреть демо-меню с бегающим указателем (см. вложение), которое мне прислал в 2009 году ныне покойный Nick Jones
https://www.php-fusion.co.uk/infusions/book_of_condolences/condolences.php
В составе основного пакета меню дополнительно имеется PHP-код, который создает пропорциональный длине пункта меню скачок указателя и который отсутствует в демо-меню. Оно может скрасить унылый имидж темы по умолчанию в Danneo CMS.

Smolenkov_BN

  • Сообщений: 27
    • Просмотр профиля
Re: Несколько пунктов к разработчику
« Ответ #11 : 23 Октября 2017, 08:23:19 »
Как сказал Карлсон Который Живет На Крыше:
- Продолжим наше общение!

Недостаток в процессе редактирования
Существенный недостаток процесса редактирования в Danneo CMS - это загрузка сразу всего текста статьи с тегом разделения (паженации) страниц. Давайте в уме смоделируем наихудший вариант этого процесса. Представим себе следующие исходные условия:
1) бесплатный захудалый российский хостинг с общим объемом выделенной оперативной памяти не более 8 Мб и жесткими лимитами месячного трафика;
2) статья пользователя в виде диссертации или монографии объемом более 300 страниц с большим количеством внешних веблинков и наглядных материалов.
После каждой вставки или правки блока текста с его обязательным сохранением, а опытные пользователи поступают именно так, весь объем статьи будет постоянно регенерироваться в редакторе. На это требуются дополнительные объемы времени и лимиты трафика. У занятых пользователей почти всегда не хватает времени, а на бесплатном захудалом хостинге почти всегда установлены лимиты трафика. Единственный выход из создавшейся ситуации - это постраничное редактирование и хранение статей в БД или в файлах. При этом автоматически отпадет необходимость обработки кода тега разделения (паженации) страниц.
Хорошей альтернативой данному предложению также может стать возможность загрузки объемных статей в формате PDF с возможностью их постраничного чтения с помощью просмотрщиков типа ViewerJS или PDFJS.

Автоматизация процесса заполнения каталога
Опыт работы с Opencart CMS подсказывает: необходимо обязательно автоматизировать процесс заполнения каталога в Danneo CMS. Вводить вручную сотни позиций товаров и иных ценностей - это напрасная трата времени и трафика. Поэтому необходимо предусмотреть возможность автоматического ввода данных из предварительно отредактированного файла, например, типа CSV в архиве типа ZIP. Возможно, следует рассмотреть подобный вариант и в отношении списка пользователей.

Многоязычность с помощью тегов
С целью экономии количества дополнительных сайтов и таблиц для них предлагаю сделать многоязычность на основе языковых тегов. Приведу пример использования в поле или в форме текста:
Danneo CMS [eng]the best in the world[/eng][rus]лучшая в мире[/rus]!
Англоязычный гость или пользователь увидит на мониторе "Danneo CMS the best in the world!", а русскоязычный - "Danneo CMS лучшая в мире!". Подобную идею я предлагал автору PHP-Fusion CMS Нику Джонсу. Идея ему понравилась. PHP-Fusion CMS уже подразумевала многосайтовость, для чего в версии 7.00 он специально ввел файл
includes/multisite_include.php
Ну, а я сделал инструкцию и парочку файлов PHP в качестве примера для инсталляции нескольких сайтов на уже существующей версии движка. Китайцы вообще были в восторге. Но, к величайшему сожалению, воплотить эти идеи в жизнь помешала болезнь Ника Джонса. Позже это сделали в Serendipity CMS и в некоторых других.

Лишние JS файлы в текстовом редакторе
Файлы
admin/js/editor/tinymce/langs/en.js
js/editor/tinymce/langs/en.js
не несут никакой информационной нагрузки, потому что в TinyMCE 4.3.2 английский язык является встроенным и не требует внешних файлов. Да и версию редактора давно пора обновить хотя бы до 4.3.13 или даже до 4.6.7.

Saor

  • Сообщений: 101
    • Просмотр профиля
Re: Несколько пунктов к разработчику
« Ответ #12 : 23 Октября 2017, 09:21:28 »
Smolenkov_BN, Вы потратили кучу времени на анализ и на написание этих постов. Хорошо разбираетесь в коде,есть предложения по улучшению? Возьмите и реализуйте, даже если Неон не прислушается к Вам и не посчитает нужным включит ваши дополнения в официальную сборку, то найдутся пользователи которые будут их использовать. А пока все ваши предложения выглядят как наставления "папки" "сынкам",  "А вот если бы я был президентом то я бы порядок навел, все бы получали большие зарплаты и всей страной переехали жить на Канары". Если получится круто то пользователи оценят вашу работу.

Smolenkov_BN

  • Сообщений: 27
    • Просмотр профиля
Re: Несколько пунктов к разработчику
« Ответ #13 : 26 Октября 2017, 20:25:57 »
> Smolenkov_BN, Вы потратили кучу времени на анализ и на написание этих постов.
> Хорошо разбираетесь в коде, есть предложения по улучшению?..
- Все предложения, основанные на личном опыте создания информационных систем промышленных предприятий на базе стандартных СУБД MS SQL, MS VFP и Oracle заключаются в одном единственном пункте:
правильно разделить хранимую полезную информацию между базой данных (БД) и файлами данных (ФД)!
Правильное разделение функций БД и ФД при больших объемах хранимых данных дает реальный выигрыш в быстродействии до 17 раз в сравнении с другими известными двумя способами:
1) все данные хранятся в БД;
2) все данные хранятся в ФД.
Алгоритм работы программы в среде стандартной СУБД поясню на конкретном примере работы с научными, техническими и технологическими документами.
Имеется некий документ в формате DOC объемом 100 страниц. С помощью CMS его необходимо опубликовать в Интернет или в Интранет. По требованию заказчика используется система классификации и кодирования ГРНТИ
http://grnti.ru/
Оператор в программе вызывает процедуру ввода нового документа и в открывшемся окне заполняет форму с полями данных стандартной библиотечной карточки документа:
- код ГРНТИ (например, 47.01.14);
- автор(ы);
- название;
- город издания;
- страна издания;
- издательство;
- год издания;
- количество страниц;
- количество иллюстраций (при необходимости);
- код ISBN (при необходимости);
- аннотация.
Нажимается "Ввод".
Информация заносится в БД.
Далее другая процедура на дисковом носителе проверяет наличие цепочки папок:
documents/47/01/14/
При необходимости автоматически создает отсутствующие звенья.
В конечную папку цепочки помещают файл для записи первой страницы документа
documents/47/01/14/1.inc
В этот файл записывается один символ "пробел".
Открывается окно редактора для правки файла первой страницы
documents/47/01/14/1.inc
В него прямо из окна MS Word методом "выделить-копировать-вставить" переносится первая страница документа.
Нажимается "Ввод".
Редактор сохраняет в формате HTML исключительно редактируемую часть (без тегов !doctype, html, head, body и т.п.).
Далее сохраненная страница с помощью шаблона полного HTML документа выводится на экран.
Процесс ввода страниц повторяется до завершения ввода всего документа.
В папке
documents/47/01/14/
оказываются 100 небольших файлов
documents/47/01/14/1.inc, ..., documents/47/01/14/100.inc
Вот примерно так работает алгоритм раздельного хранения данных в БД и ФД.

Smolenkov_BN

  • Сообщений: 27
    • Просмотр профиля
Re: Несколько пунктов к разработчику
« Ответ #14 : 26 Октября 2017, 20:28:53 »
К моему величайшему сожалению я не владею языком PHP на уровне "мастер-класс", хотя могу корректировать коды и устранять ошибки. В качестве примера дам коды применения PHP в качестве шаблонизатора урезанной (без CSS и JS) и упрощенной (всего 3 раздела) модели HTML5 страницы, которые я когда-то использовал для модернизации PHP-Fusion приведу ниже:
<?php
/*
  Start CMS
*/
if (preg_match("/maincore.php/i", $_SERVER['PHP_SELF'])) { die(); }

/*
  Calculate script start/end time
*/
function get_microtime() {
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}

define("START_TIME", get_microtime());
define("IN_FUSION", true);

/*
  Prevent any possible XSS attacks via $_GET.
*/
function stripget($check_url) {
  $return = false;
  if (is_array($check_url)) {
    foreach ($check_url as $value) {
      if (stripget($value) == true) {
        return true;
      }
    }
  } else {
$check_url = str_replace(array("\"", "\'"), array("", ""), urldecode($check_url));
if (preg_match("/<[^<>]+>/i", $check_url)) {
return true;
}
}
return $return;
}

/*
  Prevent any possible XSS attacks via $_GET.
*/
if (stripget($_GET)) { die('Prevented a XSS attack through a GET variable!'); }

/*
  Locate config.php and set the basedir path
*/
//$folder_level = ""; $i = 0;
//while (!file_exists($folder_level.'config.php')) {
//  $folder_level .= "../"; $i++;
//  if ($i == 7) { die('File config.php not found'); }
//}
//define("BASEDIR", $folder_level);
//require_once BASEDIR."config.php";

/*
  If config.php is empty, activate setup.php script
*/
//if (!isset($db_name)) { redirect("setup.php"); }
//require_once BASEDIR."includes/multisite_include.php";
?>

<?php
/*
  Before created variables
*/
//error_reporting(E_ALL);
if (!defined('IN_FUSION')) { die('<b>Client Error:<br>404 Not Found</b>'); }
$charset='UTF-8';
$application_name='Free Web Site Link';
$author='Boris Smolenkov';
$description='Free Web CSS, HTML, JS, PHP Tutorials';
$generator='Free Web';
$keywords='css,html,js,php';
$title='Free Web Tutorials';
$base_href='http://localhost/';
$link_rel='stylesheet';
$link_href='css/default.css';
$script_type='text/javascript';
$script_src='js/default.js';
$copyright='"Free Web", 1992 - '.date('Y');

$section='Articles Section';
$article1='<h4>Article 1</h4>
<p>
1. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
<br>Pellentesque in porta lorem.
<br>Morbi condimentum est nibh, et consectetur tortor feugiat at.
</p>';
$aside1='<i><h5>Aside 1</h5>
<p>
1. This is an "aside" for the first article.</i>
</p>';
$article2='<h4>Article 2</h4>
<p>
2. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
<br>Pellentesque in porta lorem.
<br>Morbi condimentum est nibh, et consectetur tortor feugiat at.
</p>';
$aside2='<i><h5>Aside 2</h5>
<p>
2. This is an "aside" for the second article.</i>
</p>';
?>

<?php
/*
  HTML5 Page Model
*/
//error_reporting(E_ALL);
if (!defined('IN_FUSION')) { die('<b>Client Error:<br>404 Not Found</b>'); }
echo
'
<!doctype html>
<html>
<head>
<meta charset="'.$charset.'">
<meta name="application-name" content="'.$application_name.'">
<meta name="author" content="'.$author.'">
<meta name="description" content="'.$description.'">
<meta name="generator" content="'.$generator.'">
<meta name="keywords" content="'.$keywords.'">
<title>'.$title.'</title>
<base href="'.$base_href.'">
<link rel="'.$link_rel.'" href="'.$link_href.'">
<script type="'.$script_type.'" src="'.$script_src.'"></script>
</head>
<body>
<header>
<h1>'.$title.'</h1>
<h2>'.$author.'</h2>
<b>'.$copyright.'</b>
</header>
<nav>
<ul>
<li><a href="#"><b>CSS</b></a></li>
<li><a href="#"><b>HTML</b></a></li>
<li><a href="#"><b>JS</b></a></li>
<li><a href="#"><b>PHP</b></a></li>
</ul>
</nav>
<section>
<h3>'.$section.'</h3>
<article>
'.$article1.'
<aside>
'.$aside1.'
</aside>
</article>
<article>
'.$article2.'
<aside>
'.$aside2.'
</aside>
</article>
</section>
<footer>
<p>
<h6>Copyright &copy; '.$copyright.'<br>
All rights reserved.</h6>
</p>
</footer>
</body>
</html>
'
?>