Предложение помощи

Ответить
Аватара пользователя
Mio
Сообщения: 15
Зарегистрирован: 14 ноя 2015, 21:56

Предложение помощи

Сообщение Mio »

Сергей, добрый день.

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

Например, в файле comments_form.php вызывается не существующая функция include_modalbox_template. Оба вызова этой функции надо заменить на:

Код: Выделить всё

ajax_modal_template_header(TEXT_WARNING) . '<div class="modal-body">' . TEXT_NO_ACCESS . '</div>' . ajax_modal_template_footer_simple();
В файле /css/default.css в таблице стилей user-photo-content надо удалить стиль max-width: 50px; иначе это приводит к тому, что в списке комментариев фотка пользователя искажается и делается квадратной (я кстати, так и не понял, каким образом этот стиль применялся в этом случае, но его редактирование решило проблему).

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

Ну есть еще несколько чисто стилевых решений, которые тоже, я считаю, вам будут не лишними.
В общем, если вам это нужно, я опишу все это. Ну кроме тех специфических изменений, которые не всем пригодятся.
Аватара пользователя
support
Техническая поддержка
Сообщения: 9016
Зарегистрирован: 19 окт 2014, 18:22
Имя: Харчишин Сергей
Откуда: Крым, Евпатория

Re: Предложение помощи

Сообщение support »

Добрый день

Да, конечно выкладывайте, будем исправлять.
Аватара пользователя
Mio
Сообщения: 15
Зарегистрирован: 14 ноя 2015, 21:56

Re: Предложение помощи

Сообщение Mio »

comments.php
Два вызова redirect_to('users/access_forbidden') заменить на redirect_to('dashboard/access_forbidden');

attachments.php
Три раза возникает ошибка
Warning: date() expects parameter 2 to be long, string given in D:\OpenServer\domains\iki\includes\classes\attachments.php on line 110
Добавить (int) перед тремя $filetime в строке 110

urls.php
В функции url_for_file по аналогии с функцией url_for после строки

Код: Выделить всё

$self = pathinfo($_SERVER['PHP_SELF']);
должна быть строка

Код: Выделить всё

$self['dirname'] = str_replace("\\","/",$self['dirname']);
Иначе в списке комментариев фотография пользователя не загружается из-за слеша '\' в адресе после имени домена.
Аватара пользователя
Mio
Сообщения: 15
Зарегистрирован: 14 ноя 2015, 21:56

Re: Предложение помощи

Сообщение Mio »

\modules\items\actions\comments.php
На строке 19 заполняется массив $sql_data для записи в БД

Код: Выделить всё

$sql_data = array('description'=>$_POST['description'],
Этот массив используется как для создания, так и для обновления записи, что неверно.
Потому что некоторые поля, такие как 'created_by' и 'date_added' изменяться не должны. Изменение 'date_added' вопрос дискуссионный, кто-то может посчитает что его надо обновлять. Но на мой взгляд это неправильно, потому что комментарии отсортированы по дате. Ну а редактирование 'created_by' не от лица автора комментария переписывает комментарий на другого пользователя, что совсем уж не логично.
Исправляется это таким образом, что данные поля добавляются в массив $sql_data только в случае создания записи.
Значит в самом начале (строка 19) мы убираем их из массива. И добавляем чуть ниже в условие else (строка 32) перед db_perform('app_comments',$sql_data);

Код: Выделить всё

$sql_data['date_added'] = time();
$sql_data['created_by'] = $app_user['id'];
Вообще доступ к комментариям у вас не доделан. В настройках можно давать "Да", "Нет", "Только создание", "Только просмотр", что явно не достаточно. Не хватает возможности редактировать и удалять только свои комментарии, что так естественно. Но если дать полный доступ, то всей группе пользователей будет доступны удаление и редактирование всех комментариев. Остальные же виды доступа вообще не дают права удаления и редактирования.
Для себя я сделал жесткое условие, которое позволяет удалять и редактировать комментарии только автору и администратору. Таким образом, настройки доступа у меня влияют только на возможность создания и просмотра. Поскольку у меня нельзя дать группе пользователей полные права на удаление и редактирование любых комментариев (модераторские права), то я не предлагаю вам свое решение. Так что тут я предлагаю автору подумать над более гибким решением. Логично было бы организовать настройку доступа так же, как и в других сущностях.
Аватара пользователя
Mio
Сообщения: 15
Зарегистрирован: 14 ноя 2015, 21:56

Re: Предложение помощи

Сообщение Mio »

При создании фильтра может сложиться ситуация для проявления следующей ошибки
Warning: in_array() expects parameter 2 to be array, null given in /home/qdsteam/public_html/rukovoditel.net/demo/ext_ru/modules/reports/actions/filters_options.php on line 133
Чтобы смоделировать эту ситуацию нужно сделать следующее. Мы создаем новую группу пользователей и сразу назначаем в эту группу какого-нибудь пользователя. После этого пытаемся создать или отредактировать любой фильтр по полю типа "Пользователь" и увидим эту ошибку.
Это связано с тем, что после создания новой группы пользователей в таблице `app_entities_access` нет ни одной записи для этой новой группы.
Для устранения этой ошибки надо добавить проверку в filters_options.php on line 133. Вместо

Код: Выделить всё

if($users['field_6']==0 or in_array('view',$access_schema[$users['field_6']]) or in_array('view_assigned',$access_schema[$users['field_6']]))
Пишем

Код: Выделить всё

if($users['field_6']==0 or isset($access_schema[$users['field_6']]) and
   (in_array('view',$access_schema[$users['field_6']]) or in_array('view_assigned',$access_schema[$users['field_6']])))
Можно конечно сделать и короче, добавив @ перед двумя $access_schema[$users['field_6']] on line 133, но это дурной стиль.

Кстати, при удалении группы пользователей не удаляются никакие связанные с ней записи. Это не порядок.
В файле users_groups.php после строки

Код: Выделить всё

db_delete_row('app_access_groups',$_GET['id']);
на строке 60 добавляем функцию удаления записей из таблицы `app_entities_access`

Код: Выделить всё

db_delete_row('app_entities_access',$_GET['id'],'access_groups_id');
Я не знаю, в каких еще таблицах есть связанные с группами записи. Если есть, то подскажите, в каких.
Ответить