\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'];
Вообще доступ к комментариям у вас не доделан. В настройках можно давать "Да", "Нет", "Только создание", "Только просмотр", что явно не достаточно. Не хватает возможности редактировать и удалять только свои комментарии, что так естественно. Но если дать полный доступ, то всей группе пользователей будет доступны удаление и редактирование всех комментариев. Остальные же виды доступа вообще не дают права удаления и редактирования.
Для себя я сделал жесткое условие, которое позволяет удалять и редактировать комментарии только автору и администратору. Таким образом, настройки доступа у меня влияют только на возможность создания и просмотра. Поскольку у меня нельзя дать группе пользователей полные права на удаление и редактирование любых комментариев (модераторские права), то я не предлагаю вам свое решение. Так что тут я предлагаю автору подумать над более гибким решением. Логично было бы организовать настройку доступа так же, как и в других сущностях.