Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

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

Форум для авторов модов для phpBB 2.0.x.
Аватара пользователя
ursus
phpBB 1.4.2
Сообщения: 55
Стаж: 18 лет 1 месяц
Откуда: Украина, Луганская обл.
Контактная информация:

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

Сообщение ursus »

Представляю на ваше суждение логическую доработку мода 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
Надеюсь, понятно, что я хотел сказать ;)
Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Стаж: 19 лет 5 месяцев
Поблагодарили: 13 раз
Контактная информация:

Сообщение VVVas »

Понятно, но вообще, достаточно было просто установить последнюю версию мода disallow editing replied posts, там это уже есть, плюс ещё кое-что пофиксили.
я люблю daft punk | новый sugoi.ru
Аватара пользователя
ursus
phpBB 1.4.2
Сообщения: 55
Стаж: 18 лет 1 месяц
Откуда: Украина, Луганская обл.
Контактная информация:

Сообщение ursus »

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

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

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

Второй облом заключается в том, что если в админке (в Правах доступа) выставить Изменить на Приватный , то не будет ничего из вышеописанного. Правда, это не совсем то, что я хотел, но все равно досадно...
Я нормальный, небуйный подонок, каких миллионы (с) А. Мухин "Горбушка"
Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Стаж: 19 лет 5 месяцев
Поблагодарили: 13 раз
Контактная информация:

Сообщение VVVas »

ursus
Ставьте последнюю версию, там все есть: и убирание кнопки и раздача прав на редактирование отвеченных (отдельно от неотвеченных).
я люблю daft punk | новый sugoi.ru
Аватара пользователя
Steinberg
phpBB 1.4.4
Сообщения: 147
Стаж: 19 лет
Откуда: Петербург
Контактная информация:

Сообщение Steinberg »

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 не нашел)
זלמן בערג
Аватара пользователя
ursus
phpBB 1.4.2
Сообщения: 55
Стаж: 18 лет 1 месяц
Откуда: Украина, Луганская обл.
Контактная информация:

Сообщение ursus »

Steinberg,
Steinberg писал(а):И попутно вопрос, где этот мод взять? (на phpbbhacks не нашел)
да что вы в самом деле?
Поиск рулит! ;)
Я нормальный, небуйный подонок, каких миллионы (с) А. Мухин "Горбушка"
Аватара пользователя
Steinberg
phpBB 1.4.4
Сообщения: 147
Стаж: 19 лет
Откуда: Петербург
Контактная информация:

Сообщение Steinberg »

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

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

Побродил по оф.сайту автора мода и таки нашел ;)
Если кому нужно? залил сюда: http://rapidshare.de/files/25772620/dis ... 0.rar.html
и сюда: http://up.spbland.ru/files/06071412/
זלמן בערג
dnk
phpBB 2.0.4
Сообщения: 431
Стаж: 17 лет 7 месяцев
Благодарил (а): 12 раз
Поблагодарили: 1 раз

Сообщение dnk »

А еще лучше сделать так:
Чтобы пользователь мог править/удалять первое сообщение темы, если после него никто не ответил и не мог править его, если за его первым сообщением есть ответы других участников.Это делается для того, чтобы запретить править заголовок темы после получения ответов от других.
В скрипте 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 раз.
Аватара пользователя
AlexWB
phpBB 1.4.4
Сообщения: 199
Стаж: 19 лет 3 месяца
Откуда: Kiev.UA

Сообщение AlexWB »

я немного иначе поступил, запретил редактировать сообщения по истечении 15 минут с момента создания
dnk
phpBB 2.0.4
Сообщения: 431
Стаж: 17 лет 7 месяцев
Благодарил (а): 12 раз
Поблагодарили: 1 раз

Сообщение dnk »

AlexWB писал(а):я немного иначе поступил, запретил редактировать сообщения по истечении 15 минут с момента создания
Здорово, а я тоже хотел бы такое бы сделать.
Не подскажете, как?
Аватара пользователя
AlexWB
phpBB 1.4.4
Сообщения: 199
Стаж: 19 лет 3 месяца
Откуда: Kiev.UA

Сообщение AlexWB »

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

находим

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

if ( ( $userdata['user_id'] == $poster_id && $is_auth['auth_edit']) || $is_auth['auth_mod'] )
	{
		$temp_url = append_sid("posting.$phpEx?mode=editpost&" . 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 минутам
dnk
phpBB 2.0.4
Сообщения: 431
Стаж: 17 лет 7 месяцев
Благодарил (а): 12 раз
Поблагодарили: 1 раз

Сообщение dnk »

AlexWB
Благодарен! А можно ли сделать так, чтобы название и описание сообщения можно было редактировать лишь определенное время.
dnk
phpBB 2.0.4
Сообщения: 431
Стаж: 17 лет 7 месяцев
Благодарил (а): 12 раз
Поблагодарили: 1 раз

Сообщение dnk »

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 раза.
Аватара пользователя
AlexWB
phpBB 1.4.4
Сообщения: 199
Стаж: 19 лет 3 месяца
Откуда: Kiev.UA

Сообщение AlexWB »

dnk
тоже вариант
но удаление можно запретить установив соотв.права для форума
dnk
phpBB 2.0.4
Сообщения: 431
Стаж: 17 лет 7 месяцев
Благодарил (а): 12 раз
Поблагодарили: 1 раз

Сообщение dnk »

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&" . 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 раза.
Закрыто

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