Логическая доработка мода disallow editing replied posts mod

Форум для авторов модов для phpBB 2.0.x. Здесь можно попросить помощи в разработке у коллег.

Логическая доработка мода disallow editing replied posts mod

Сообщение ursus 13.03.2006 8:31

Представляю на ваше суждение логическую доработку мода disallow editing replied posts mod

Предыстория такова: есть замечательный мод, который называется disallow editing replied posts mod. Он запрещает редактировать сообщения, на которые были получены ответы. Рассмотрим на примере. Допустим есть Тема, в которой сообщения расположены следующим образом: Сообщение1 от Пользователя1 и Сообщение2 от Пользователя2. Так вот, по умолчанию, Пользователь1 может отредактировать свое Сообщение1 после того, как в Теме ответил Пользователь2. Мод disallow editing replied posts mod запрещает это делать. Прикольно, но слегка попахивает паранойей :).
Но есть небольшой нюанс, который заключается в следующем: как только Пользователь2 ответит в Теме на Сообщение1, то Пользователь1 сможет лишь отредактировать свое Сообщение1 (а после установки мода и вовсе не сможет), а удалить-нет. Мало того, у Пользователя1 даже не будет отображаться кнопка удаления поста (через форму редактирования также нельзя будет удалить). Но как сделать, чтобы у Пользователя1 над его Сообщением1, после того, как на него ответят, не отображалась даже кнопка редактирования поста?
Все просто. Идем в viewtopic.php , находим строку
Код: Выделить всё
   if ( ( $userdata['user_id'] == $poster_id && $is_auth['auth_edit'] ) || $is_auth['auth_mod'] )

у меня она оказалась под номером 1213 и после
Код: Выделить всё
is_auth['auth_edit']
добавляем
Код: Выделить всё
&& $forum_topic_data['topic_last_post_id'] == $postrow[$i]['post_id']
(пробел перед && обязателен)
то есть, искомая строка принимает вид
Код: Выделить всё
if ( ( $userdata['user_id'] == $poster_id && $is_auth['auth_edit'] && $forum_topic_data['topic_last_post_id'] == $postrow[$i]['post_id'] ) || $is_auth['auth_mod'] )


итог: после того, как Пользователь2 ответит в Теме на Сообщение1 Пользователя1, Пользователь1 не увидит кнопку редактирования Соообщения1.

PS
Надеюсь, понятно, что я хотел сказать ;)
Аватара пользователя
ursus
phpBB 1.4.2
 
Сообщения: 58
Зарегистрирован: 26.02.2006 5:13
Откуда: Украина, Луганская обл.

Сообщение VVVas 13.03.2006 18:28

Понятно, но вообще, достаточно было просто установить последнюю версию мода disallow editing replied posts, там это уже есть, плюс ещё кое-что пофиксили.
вы нарушили правила конференции, объяснений не будет - сами читайте правила
я люблю daft punk | Активные темы
Аватара пользователя
VVVas
Люмпен Пролетариат
Люмпен Пролетариат
 
Сообщения: 4737
Зарегистрирован: 12.11.2004 1:20
Откуда: RU-MSK

Сообщение ursus 14.03.2006 2:42

Блин, сегодня меня постигли два разочарования, вернее облома, настолько сильных, что я почти решился на принятие яда и поездку в Бабруйск.
Дело в том, что если делать, как я – то при просмотре форум будет проверять topic_last_post_id и в соответствии с этим решать, показывать или нет кнопку редактирования поста. То есть, если Пользователь1 создал Тему1, содержащую Сообщение1, а затем решил его посмотреть – он не увидит кнопку редактирования поста. Плюс к тому же, косяк с языковыми файлами. Косяк не тот, который курят, а тот, который пишет:

Вы можете начинать темы
Вы можете отвечать на сообщения
Вы можете редактировать свои сообщения
Вы можете удалять свои сообщения
Вы можете голосовать в опросах

А на самом деле, редактирование сообщений запрещено…

Второй облом заключается в том, что если в админке (в Правах доступа) выставить Изменить на Приватный , то не будет ничего из вышеописанного. Правда, это не совсем то, что я хотел, но все равно досадно...
Я нормальный, небуйный подонок, каких миллионы (с) А. Мухин "Горбушка"
Аватара пользователя
ursus
phpBB 1.4.2
 
Сообщения: 58
Зарегистрирован: 26.02.2006 5:13
Откуда: Украина, Луганская обл.

Сообщение VVVas 14.03.2006 2:47

ursus
Ставьте последнюю версию, там все есть: и убирание кнопки и раздача прав на редактирование отвеченных (отдельно от неотвеченных).
вы нарушили правила конференции, объяснений не будет - сами читайте правила
я люблю daft punk | Активные темы
Аватара пользователя
VVVas
Люмпен Пролетариат
Люмпен Пролетариат
 
Сообщения: 4737
Зарегистрирован: 12.11.2004 1:20
Откуда: RU-MSK

Сообщение Steinberg 17.04.2006 2:45

VVVas писал(а):Ставьте последнюю версию

не подскажете, какая версия последняя?

я нашел через поиск, как вы год назад писали про вот это:

Код: Выделить всё
## MOD Title: Disallow editing replied posts
## MOD Author: markus_petrux < phpbb.mods@phpmix.com > (Markus) http://www.phpmix.com
## MOD Description: Disallows editing replied posts, except for Admins and Moderators.
## MOD Version: 1.0.0
## MOD url: http://www.phpmix.com
##
## Installation Level: (Easy)
## Installation Time: 3 Minutes
## Files To Edit: 2
##    posting.php
##    language/lang_english/lang_main.php
## Included Files: 0


Добавлено спустя 1 минуту 24 секунды:

И попутно вопрос, где этот мод взять? (на phpbbhacks не нашел)
זלמן בערג
Аватара пользователя
Steinberg
phpBB 2.0.2
 
Сообщения: 151
Зарегистрирован: 21.03.2005 16:12
Откуда: Петербург

Сообщение ursus 17.04.2006 7:13

Steinberg,
Steinberg писал(а):И попутно вопрос, где этот мод взять? (на phpbbhacks не нашел)

да что вы в самом деле?
Поиск рулит! ;)
Я нормальный, небуйный подонок, каких миллионы (с) А. Мухин "Горбушка"
Аватара пользователя
ursus
phpBB 1.4.2
 
Сообщения: 58
Зарегистрирован: 26.02.2006 5:13
Откуда: Украина, Луганская обл.

Сообщение Steinberg 16.05.2006 2:40

Премного благодарен! :wink: Но в этом топике есть рабочая ссылка только на версию мода 1.0.0 :oops:
Более новых не имеется нигде?

Добавлено спустя 15 минут 14 секунд:

Побродил по оф.сайту автора мода и таки нашел ;)
Если кому нужно? залил сюда: http://rapidshare.de/files/25772620/dis ... 0.rar.html
и сюда: http://up.spbland.ru/files/06071412/
זלמן בערג
Аватара пользователя
Steinberg
phpBB 2.0.2
 
Сообщения: 151
Зарегистрирован: 21.03.2005 16:12
Откуда: Петербург

Сообщение dnk 11.10.2006 3:52

А еще лучше сделать так:
Чтобы пользователь мог править/удалять первое сообщение темы, если после него никто не ответил и не мог править его, если за его первым сообщением есть ответы других участников.Это делается для того, чтобы запретить править заголовок темы после получения ответов от других.
В скрипте posting.php
Найти:
Код: Выделить всё
$post_data['poster_id'] = $post_info['poster_id'];

Ниже добавить:
Код: Выделить всё
$post_data['poster_id'] = $post_info['poster_id'];
      //+MOD: Disallow editing replied posts
      if( $userdata['user_level'] != ADMIN && $userdata['user_level'] != MOD )
      {
         if( $post_id == $post_data['first_post'] && $post_id != $post_data['last_post'])
         {
            message_die(GENERAL_MESSAGE, $lang['Cannot_edit_replied']);
         }
      }
//-MOD: Disallow editing replied posts

Ну и в языковых файлах:
lang_main.php (en)
После:
Код: Выделить всё
$lang['Cannot_delete_replied'] = 'Sorry, but you may not delete posts that have been replied to.';

Добавить:
Код: Выделить всё
//+MOD: Disallow editing replied posts
$lang['Cannot_edit_replied'] = "Sorry, but you may not edit first post that has been replied to.";
//-MOD: Disallow editing replied posts

Для русского:
Код: Выделить всё
//+MOD: Disallow editing replied posts
$lang['Cannot_edit_replied'] = "Извините, но вы не можете править первое сообщение, на которое были получены ответы";
//-MOD: Disallow editing replied posts
Последний раз редактировалось dnk 11.10.2006 22:40, всего редактировалось 1 раз.
dnk
phpBB 2.0.9
 
Сообщения: 371
Зарегистрирован: 23.08.2006 19:34

Сообщение AlexWB 11.10.2006 19:30

я немного иначе поступил, запретил редактировать сообщения по истечении 15 минут с момента создания
Аватара пользователя
AlexWB
phpBB 2.0.5
 
Сообщения: 243
Зарегистрирован: 11.01.2005 21:55
Откуда: Kiev.UA

Сообщение dnk 11.10.2006 20:56

AlexWB писал(а):я немного иначе поступил, запретил редактировать сообщения по истечении 15 минут с момента создания

Здорово, а я тоже хотел бы такое бы сделать.
Не подскажете, как?
dnk
phpBB 2.0.9
 
Сообщения: 371
Зарегистрирован: 23.08.2006 19:34

Сообщение AlexWB 15.10.2006 10:20

открываем viewtopic.php

находим
Код: Выделить всё
if ( ( $userdata['user_id'] == $poster_id && $is_auth['auth_edit']) || $is_auth['auth_mod'] )
   {
      $temp_url = append_sid("posting.$phpEx?mode=editpost&amp;" . POST_POST_URL . "=" . $postrow[$i]['post_id']);
      $edit_img = '<a href="' . $temp_url . '"><img src="' . $images['icon_edit'] . '" alt="' . $lang['Edit_delete_post'] . '" title="' . $lang['Edit_delete_post'] . '" border="0" /></a>';


перед этим добавляем

Код: Выделить всё
$edit_timeout = time()-$postrow[$i]['post_time'];


в условие
Код: Выделить всё
if ( ( $userdata['user_id'] == $poster_id && $is_auth['auth_edit']) || $is_auth['auth_mod'] )


добавляем && $edit_timeout <= 900

в результате должно быть примерно вот так:
Код: Выделить всё
if ( ( $userdata['user_id'] == $poster_id && $is_auth['auth_edit'] && $edit_timeout <= 900
) || $is_auth['auth_mod'] )


где 900 секунд = 15 минутам
Аватара пользователя
AlexWB
phpBB 2.0.5
 
Сообщения: 243
Зарегистрирован: 11.01.2005 21:55
Откуда: Kiev.UA

Сообщение dnk 17.10.2006 2:17

AlexWB
Благодарен! А можно ли сделать так, чтобы название и описание сообщения можно было редактировать лишь определенное время.
dnk
phpBB 2.0.9
 
Сообщения: 371
Зарегистрирован: 23.08.2006 19:34

Сообщение dnk 25.11.2006 12:21

AlexWB
Еще некоторое дополнение: Чтобы участник не смог удалить сообщение по истечении определенного времени, нужно аналогично как и для случая с запретом правки сделать следующее:
Открыть viewtopic.php
Найти:

Код: Выделить всё
if ( $userdata['user_id'] == $poster_id && $is_auth['auth_delete'] && $forum_topic_data['topic_last_post_id'] == $postrow[$i]['post_id'])

Вставить выше:
Код: Выделить всё
$delete_timeout = time()-$postrow[$i]['post_time'];

А сам код
Код: Выделить всё
if ( $userdata['user_id'] == $poster_id && $is_auth['auth_delete'] && $forum_topic_data['topic_last_post_id'] == $postrow[$i]['post_id'])

Заменить на:
Код: Выделить всё
if ( $userdata['user_id'] == $poster_id && $is_auth['auth_delete'] && $forum_topic_data['topic_last_post_id'] == $postrow[$i]['post_id'] && $delete_timeout <= 900)


где 900 секунд = 15 минутам
Последний раз редактировалось dnk 25.11.2006 18:03, всего редактировалось 2 раз(а).
dnk
phpBB 2.0.9
 
Сообщения: 371
Зарегистрирован: 23.08.2006 19:34

Сообщение AlexWB 25.11.2006 12:56

dnk
тоже вариант
но удаление можно запретить установив соотв.права для форума
Аватара пользователя
AlexWB
phpBB 2.0.5
 
Сообщения: 243
Зарегистрирован: 11.01.2005 21:55
Откуда: Kiev.UA

Сообщение dnk 25.11.2006 18:05

AlexWB писал(а):dnk
тоже вариант
но удаление можно запретить установив соотв.права для форума

Согласен, но это будет слишком строго и потом, это запретит участнику удаление сообщения сразу после отправки.
Допустим, если участник напишет сообщение, потом ему через пару минут оно не понравится, то он хоть успеет, до "минуты X" хоть удалить свое сообщение.
вообще запрет правки или удаления сообщения можно преподнести как желание админа бороться с т.н. капризными людьми.
Пример: Участник выложил интересную информацию или ссылку на другой ресурс, а потом когда-нибудь кто-то (в т.ч. из админов) решит сделать предупреждение, скажем.Участнику это не понравиться.Он подумает: Раз так, админы, ну я Вам ... покажу, возьмет и решит потереть свои сообщения, чтобы в базе у админа хоть что-то удалить, ну т.е. зло сорватьи оставить без интересной информации.
Ну может не очень удачный пример, но Вы поняли.
Некоторые делают это, чтобы не было принципа: "Я не я и лошадь не моя", - нафлудил, потер (так сказать "поиграл с базой") - и я вновь "хороший парень".

Добавлено спустя 4 часа 56 минут 56 секунд:

Вот собственная версия переделанного мода.Автора мода, который я переделал, я позабыл:

Код: Выделить всё
#
#-----[ SQL ]-------------------------------------------
#

INSERT INTO phpbb_config (config_name, config_value) VALUES ('edit_time_limit', '60');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('delete_time_limit', '60');

#
#-----[ OPEN ]------------------------------------------------
#

viewtopic.php

#
#-----[ FIND ]------------------------------------------------
#

   $temp_url = append_sid("posting.$phpEx?mode=quote&amp;" . POST_POST_URL . "=" . $postrow[$i]['post_id']);

#
#-----[ BEFORE, ADD ]------------------------------------------
#

   $limit_time = $postrow[$i]['post_time'] + (intval($board_config['edit_time_limit']) * 60);
   $limit_del_time = $postrow[$i]['post_time'] + (intval($board_config['delete_time_limit']) * 60);
#
#-----[ FIND ]------------------------------------------------
#

   if ( ( $userdata['user_id'] == $poster_id && $is_auth['auth_edit'] ) || $is_auth['auth_mod'] )

#
#-----[ IN-LINE FIND ]---------------------------------------
#

$userdata['user_id'] ==

#
#-----[ IN-LINE BEFORE, ADD ]----------------------------------
#

time() <= $limit_time &&

#
#-----[ FIND ]------------------------------------------------
#
if ($userdata['user_id'] == $poster_id && $is_auth['auth_delete'] && $forum_topic_data['topic_last_post_id'] == $postrow[$i]['post_id'])

#
#-----[ IN-LINE FIND ]---------------------------------------
#

$userdata['user_id'] ==

#
#-----[ IN-LINE BEFORE, ADD ]----------------------------------
#

time() <= $limit_del_time &&


#
#-----[ OPEN ]------------------------------------------------
#

posting.php

#
#-----[ FIND ]------------------------------------------------
#

      $sql = "SELECT f.*, t.topic_id, t.topic_status, t.topic_type, t.topic_first_post_id, t.topic_last_post_id, t.topic_vote, p.post_id, p.poster_id" . $select_sql . "

#
#-----[ IN-LINE FIND ]---------------------------------------
#

, p.poster_id

#
#-----[ IN-LINE AFTER, ADD ]----------------------------------
#

, p.post_time


#
#-----[ FIND ]------------------------------------------------
#

      //
      // Can this user edit/delete the post/poll?
      //

#
#-----[ AFTER, ADD ]------------------------------------------
#

      $limit_time = $post_info['post_time'] + (intval($board_config['edit_time_limit']) * 60);
      if ( time() > $limit_time && ($mode == 'editpost') && !$is_auth['auth_mod'])
      {
         $message = sprintf($lang['post_limit_time'],$board_config['edit_time_limit']) . '<br /><br />' . sprintf($lang['Click_view_message'], '<a href="' . append_sid("viewtopic.$phpEx?" . POST_POST_URL . "=" . $post_id) . '#' . $post_id . '">', '</a>') . '<br /><br />' . sprintf($lang['Click_return_forum'], '<a href="' . append_sid("viewforum.$phpEx?" . POST_FORUM_URL . "=$forum_id") . '">', '</a>');
            message_die(GENERAL_MESSAGE, $message);
      }
     
       $limit_del_time = $post_info['post_time'] + (intval($board_config['delete_time_limit']) * 60);
      if ( time() > $limit_del_time && ($mode == 'delete' || $mode == 'poll_delete') && !$is_auth['auth_mod'])
      {
         $message = sprintf($lang['post_limit_time'],$board_config['delete_time_limit']) . '<br /><br />' . sprintf($lang['Click_view_message'], '<a href="' . append_sid("viewtopic.$phpEx?" . POST_POST_URL . "=" . $post_id) . '#' . $post_id . '">', '</a>') . '<br /><br />' . sprintf($lang['Click_return_forum'], '<a href="' . append_sid("viewforum.$phpEx?" . POST_FORUM_URL . "=$forum_id") . '">', '</a>');
            message_die(GENERAL_MESSAGE, $message);
      }
#
#-----[ OPEN ]------------------------------------------------
#

admin/admin_board.php

#
#-----[ FIND ]------------------------------------------------
#

   "L_HOT_THRESHOLD" => $lang['Hot_threshold'],

#
#-----[ AFTER, ADD ]------------------------------------------
#

   'L_EDIT_TIME_LIMIT' => $lang['edit_time_limit'],
   'L_EDIT_TIME_LIMIT_EXPLAIN' => $lang['edit_time_limit_explain'],
   'EDIT_TIME_LIMIT' => $new['edit_time_limit'],
  'L_DELETE_TIME_LIMIT' => $lang['delete_time_limit'],
   'L_DELETE_TIME_LIMIT_EXPLAIN' => $lang['delete_time_limit_explain'],
   'DELETE_TIME_LIMIT' => $new['delete_time_limit'],
#
#-----[ OPEN ]------------------------------------------------
#

language/lang_english/lang_admin.php

#
#-----[ FIND ]------------------------------------------------
#

?>

#
#-----[ BEFORE, ADD ]------------------------------------------
#
$lang['edit_time_limit'] = 'Время правки последнего сообщения';
$lang['edit_time_limit_explain'] = 'Установка времени правки последнего сообщения в теме';
$lang['delete_time_limit'] = 'Время удаления последнего сообщения';
$lang['delete_time_limit_explain'] = 'Установка времени удаления последнего сообщения в теме';
#
#-----[ OPEN ]------------------------------------------------
#

language/lang_english/lang_main.php

#
#-----[ FIND ]------------------------------------------------
#

?>

#
#-----[ BEFORE, ADD ]------------------------------------------
#
$lang['post_limit_time'] = 'Извините, но Вы не можете больше править сообщение.';
$lang['delete_limit_time'] = 'Извините, но Вы не можете больше удалять это сообщение или опрос.';
#
#-----[ OPEN ]------------------------------------------------
#

templates/subSilver/admin/board_config_body.tpl

#
#-----[ FIND ]------------------------------------------------
#

   <tr>
      <td class="row1">{L_HOT_THRESHOLD}</td>
      <td class="row2"><input class="post" type="text" name="hot_threshold" size="3" maxlength="4" value="{HOT_TOPIC}" /></td>
   </tr>

#
#-----[ AFTER, ADD ]------------------------------------------
#

   <tr>
      <td class="row1">{L_EDIT_TIME_LIMIT}<br /><span class="gensmall">{L_EDIT_TIME_LIMIT_EXPLAIN}</span></td>
      <td class="row2"><input class="post" type="text" name="edit_time_limit" size="4" maxlength="5" value="{EDIT_TIME_LIMIT}" /></td>
   </tr>
<tr>
      <td class="row1">{L_DELETE_TIME_LIMIT}<br /><span class="gensmall">{L_DELETE_TIME_LIMIT_EXPLAIN}</span></td>
      <td class="row2"><input class="post" type="text" name="delete_time_limit" size="4" maxlength="5" value="{DELETE_TIME_LIMIT}" /></td>
   </tr>
#
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------
#
# EoM
Последний раз редактировалось dnk 29.06.2007 13:44, всего редактировалось 2 раз(а).
dnk
phpBB 2.0.9
 
Сообщения: 371
Зарегистрирован: 23.08.2006 19:34

След.

Вернуться в Для авторов (phpBB 2.0.x)

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1