Пропустить

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

Форум для авторов модов для phpBB 2.0.x.

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

Сообщение ursus » 13.03.2006 7: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
 
Сообщения: 55
Зарегистрирован: 26.02.2006 4:13
Откуда: Украина, Луганская обл.
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение VVVas » 13.03.2006 17:28

Понятно, но вообще, достаточно было просто установить последнюю версию мода disallow editing replied posts, там это уже есть, плюс ещё кое-что пофиксили.
Аватара пользователя
VVVas
Former team member
 
Сообщения: 4469
Зарегистрирован: 12.11.2004 0:20
Благодарил (а): 0 раз.
Поблагодарили: 10 раз.

Сообщение ursus » 14.03.2006 1:42

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

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

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

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

Сообщение VVVas » 14.03.2006 1:47

ursus
Ставьте последнюю версию, там все есть: и убирание кнопки и раздача прав на редактирование отвеченных (отдельно от неотвеченных).
Аватара пользователя
VVVas
Former team member
 
Сообщения: 4469
Зарегистрирован: 12.11.2004 0:20
Благодарил (а): 0 раз.
Поблагодарили: 10 раз.

Сообщение Steinberg » 17.04.2006 1: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.1
 
Сообщения: 148
Зарегистрирован: 21.03.2005 15:12
Откуда: Петербург
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение ursus » 17.04.2006 6:13

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

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

Сообщение Steinberg » 16.05.2006 1: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.1
 
Сообщения: 148
Зарегистрирован: 21.03.2005 15:12
Откуда: Петербург
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение dnk » 11.10.2006 2: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 21:40, всего редактировалось 1 раз.

dnk
phpBB 2.0.10
 
Сообщения: 350
Зарегистрирован: 23.08.2006 18:34
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение AlexWB » 11.10.2006 18:30

я немного иначе поступил, запретил редактировать сообщения по истечении 15 минут с момента создания
Аватара пользователя
AlexWB
phpBB 2.0.3
 
Сообщения: 199
Зарегистрирован: 11.01.2005 20:55
Откуда: Kiev.UA
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение dnk » 11.10.2006 19:56

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

Здорово, а я тоже хотел бы такое бы сделать.
Не подскажете, как?

dnk
phpBB 2.0.10
 
Сообщения: 350
Зарегистрирован: 23.08.2006 18:34
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение AlexWB » 15.10.2006 9: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.3
 
Сообщения: 199
Зарегистрирован: 11.01.2005 20:55
Откуда: Kiev.UA
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение dnk » 17.10.2006 1:17

AlexWB
Благодарен! А можно ли сделать так, чтобы название и описание сообщения можно было редактировать лишь определенное время.

dnk
phpBB 2.0.10
 
Сообщения: 350
Зарегистрирован: 23.08.2006 18:34
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение dnk » 25.11.2006 11: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 17:03, всего редактировалось 2 раз(а).

dnk
phpBB 2.0.10
 
Сообщения: 350
Зарегистрирован: 23.08.2006 18:34
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение AlexWB » 25.11.2006 11:56

dnk
тоже вариант
но удаление можно запретить установив соотв.права для форума
Аватара пользователя
AlexWB
phpBB 2.0.3
 
Сообщения: 199
Зарегистрирован: 11.01.2005 20:55
Откуда: Kiev.UA
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение dnk » 25.11.2006 17: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 12:44, всего редактировалось 2 раз(а).

dnk
phpBB 2.0.10
 
Сообщения: 350
Зарегистрирован: 23.08.2006 18:34
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

След.

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

 

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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

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

Бессрочный конкурс phpBB-ориентированных материалов
FastVPS — надёжный и доступный хостинг для phpBB
Место для вашей рекламы