Проблема с модом Additional Topic Authors

Автор sb67, 29 мая 2018, 00:55:57

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

sb67

Мод работает, но прослеживается одна странность.
Если автор темы назначает соавтора, то соавтор может редактировать любые сообщения (других пользователей) в данной теме, хотя автор темы может редактировать только свои.
Как решить данную проблему, чтобы соавтор мог редактировать только сообщение в котором его сделали соавтором?
Спасибо!

Версия форума 2.0.15
Мод брал здесь https://github.com/realdigger/AdditionalAuthors

sb67

Ещё выявленная проблема. Если соавтор редактирует любое сообщение кроме первого (даже своё), всех выкидывает из соавторов.

GeorG

Цитата: sb67 от 29 мая 2018, 00:55:57Как решить данную проблему, чтобы соавтор мог редактировать только сообщение в котором его сделали соавтором?
Настройки прав доступа смотрели?
Верстка тем по шаблону, их доработка/переработка, переделка тем с версии smf 1.1 на smf 2.0. Примеры работ - insidestyle.ru
Установка модов (заточка под ваш форум); Моды под заказ; Обновление форума; Правильный перенос; Удаление/лечение вирусов; Устранения ошибок.
Обращаться в ЛС
Мой форум
Модуль анти-спама CleanTalk, сам пользуюсь
Сервера которыми сам пользуюсь - cadedic.ru

sb67

Цитата: GeorG от 03 июня 2018, 23:21:36Настройки прав доступа смотрели?

Да, права смотрел, всё в порядке, проблема в самом коде.

Вот это условие удаляет всех соавторов при редактировании любого сообщения в теме.
// Remove all authors if we have just done so.
 elseif (empty($_POST['add_authors']) && !empty($topic_info['add_authors']))
 $add_authors = array();
Подскажите как сделать, чтобы условие срабатывало только при редактировании первого сообщения?

GeorG

@sb67, в Post.php найти это:

// Sanitise the IDs for the additional authors, which have a valid ID.
if (!empty($_POST['add_authors']))
{
$add_authors = array();
foreach ($_POST['add_authors'] as $d => $aa_id)
{
$aa_id = (int) $aa_id;
if (!empty($aa_id))
$add_authors[] = $aa_id;
}
}
// Remove all authors if we have just done so.
elseif (empty($_POST['add_authors']) && !empty($topic_info['add_authors']))
$add_authors = array();
Заменить этим:
$add_authors = array();
if(!empty($topic_info['add_authors']))
$add_authors = explode(',', $topic_info['add_authors']);

if (!$newTopic && (!empty($_REQUEST['msg']) && $topic_info['id_first_msg'] == $_REQUEST['msg']))
{
// Sanitise the IDs for the additional authors, which have a valid ID.
if (!empty($_POST['add_authors']))
{
$add_authors = array();
foreach ($_POST['add_authors'] as $d => $aa_id)
{
$aa_id = (int) $aa_id;
if (!empty($aa_id))
$add_authors[] = $aa_id;
}
}
// Remove all authors if we have just done so.
elseif (empty($_POST['add_authors']) && !isset($_REQUEST['addAuthors']) == '')
$add_authors = array();
}
Верстка тем по шаблону, их доработка/переработка, переделка тем с версии smf 1.1 на smf 2.0. Примеры работ - insidestyle.ru
Установка модов (заточка под ваш форум); Моды под заказ; Обновление форума; Правильный перенос; Удаление/лечение вирусов; Устранения ошибок.
Обращаться в ЛС
Мой форум
Модуль анти-спама CleanTalk, сам пользуюсь
Сервера которыми сам пользуюсь - cadedic.ru

sb67

#5
Спасибо большое за помощь.
Заработало в таком виде:

Найти
// Remove all authors if we have just done so.
elseif (empty($_POST['add_authors']) && !empty($topic_info['add_authors']))
$add_authors = array();

Заменить на
// Remove all authors if we have just done so.
elseif (!$newTopic && (!empty($_REQUEST['msg']) && $topic_info['id_first_msg'] == $_REQUEST['msg']) && empty($_POST['add_authors']) && !empty($topic_info['add_authors']))
$add_authors = array();

sb67

#6
Осталось решить одну проблему, соавтору предоставляются права на редактирование всех сообщений в теме, а должен только первое и свои.

Файл Display.php
'can_modify' => (!$context['is_locked'] || allowedTo('moderate_board')) && (allowedTo('modify_any') || (allowedTo('modify_replies') && $context['user']['started']) || (!empty($context['add_authors']) && array_key_exists($user_info['id'], $context['add_authors'])) || (allowedTo('modify_own') && $message['id_member'] == $user_info['id'] && (empty($modSettings['edit_disable_time']) || !$message['approved'] || $message['poster_time'] + $modSettings['edit_disable_time'] * 60 > time()))),Нужно добавить условие, что это первое сообщение.

UPD
Разобрался сам
Находим
(!empty($context['add_authors']) && array_key_exists($user_info['id'], $context['add_authors']))Меняем на
(!empty($context['add_authors']) && array_key_exists($user_info['id'], $context['add_authors']) && $message['id_msg'] == $topicinfo['id_first_msg'])
P.S. обязательно выставлять права "Добавление дополнительных авторов в собственной теме" и "Добавление дополнительных авторов в любой теме".

sb67

Еще один баг, если в теме несколько страниц с сообщениями, то список соавторов выводится в первом сообщении на каждой странице, а если установлен мод прикрепления первого сообщения, то список соавторов выводится во втором сообщении темы.

Fix В файле Display.template.php найти
// But, are there any additional authors?
 if ($message['id'] == $context['first_message'] && !empty($context['add_authors']))
Заменить на
// But, are there any additional authors?
 if ($message['id'] == $context['topic_first_message'] && !empty($context['add_authors']))