Перейти к контенту
  • 0

Время на удаление сообщения


Wartys

Вопрос

Имеем версию 2.1.5. Пользователям можно в правах группы указать, в течение какого времени после опубликования он может редактировать своё сообщение. С этим нет проблем. А вот насчёт удаления своего сообщения - диво: можно либо позволить ему это делать, либо нет, причём в первом случае он может удалять свои сообщения в любое время, независимо от времени разрешённого редактирования. Как так? :D Можно ли привязать удаление к тому же времени для редактирования? А то ведь получается, что пользователь может после большой дискуссии если не подменить, то просто удалить сообщение... А право удалять в первое время нужно, бывает люди в ошибку постят, зачем же модеров напрягать...
Ссылка на комментарий
Поделиться на других сайтах

Рекомендуемые сообщения

  • 0

Думаю, это не сложно будет доделать.

Посмотреть проверку при редактировании, и добавить те же условия для удаления.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Не знаю как в двушках, в однушках это переменная $ibforums->member['g_edit_cutoff']

 

Посметрел в БД "двушки, в таблице ibf_groups есть поле g_edit_cutoff :D

Ссылка на комментарий
Поделиться на других сайтах

  • 0
В общем, в php я ориентируюсь неважно, и логика мне не помогла. Билсо-билсо на локалке, ничё не добилсо. Не затруднит ли вас пораскинуть идеями более подробно? :D
Ссылка на комментарий
Поделиться на других сайтах

  • 0

Двушки под рукой сейчас нет.

Могу рассказать, как такое сделать в однушке.

Редактирование производится файлом post_edit_post.php, вот код проверки прав редактирования для пользователя:

		if ( ($this->orig_post['author_id'] == $ibforums->member['id']) and ($ibforums->member['g_edit_posts'])  and !$this->orig_post['has_modcomment'])
	{
		// Have we set a time limit?

		if ($ibforums->member['g_edit_cutoff'] > 0)
		{
			if ( $this->orig_post['post_date'] > ( time() - ( intval($ibforums->member['g_edit_cutoff']) * 60 ) ) )
			{

Сначала проверяется на автора сообщения и нет ли там комментария модератора.

Затем проверяется есть ли разрешение редактировать. Это фигня, это автор не подумал, третья проверка это все равно перекроет.

Затем проверяется, не истекло ли время на редактирование.

 

Значит, реальный код проверки на время редактирования будет:

	if ( $this->orig_post['post_date'] > ( time() - ( intval($ibforums->member['g_edit_cutoff']) * 60 ) ) )
{

 

 

Теперь ищем, где проверка на авторство поста при его удалении.

Находим в Moderate.php в функции delete_post()

		else if ( ($ibforums->member['g_delete_own_posts'] == 1) and ( $ibforums->member['id'] == $post['author_id'] ) )
	{

Вот к нему и добавить проверки на время редактирования:

		else if ( ($ibforums->member['g_delete_own_posts'] == 1) and ( $ibforums->member['id'] == $post['author_id'] ) and $this->orig_post['post_date'] > ( time() - ( intval($ibforums->member['g_edit_cutoff']) * 60 ) ) )
	{

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Файл с кодом проверки на время оказался class_post_edit.php, который удалось определить только с вашей помощью ;)

Но... При добавлении этой проверки в moderate.php (где всё идентично примеру), получается такая история: независимо от времени разрешения (даже если оно не ограничено) на редактирование, удаление запрещается (ошибка о "нельзя" сделать это, мол не имеешь права). Если внедрённую проверку убрать - удаление работает, в любое время (как и раньше). Внедряем проверку - удалять пост запрещается, какое бы время на редактирование поста ни стояло. :D При этом сие время для именно редактирования работает исправно, как и прежде. А удалять пост не позволяется совсем. Ну что за наказание... Что может быть не учтено?

Ссылка на комментарий
Поделиться на других сайтах

  • 0
В общем, эта проверка просто запрещает пользователю удалять свой пост, то есть для функции удаления она выполняется всегда с отрицательным результатом. Побробовал внедрить все четыре проверки из кода для редактирования - тот же результат. Неправильная проверка? Но для редактирования она же работает. Для интереса поменял в ней знак > на < - тогда удаление доступно всегда, как и без проверки вовсе :D Словом, засада. Изменено пользователем Wartys
Ссылка на комментарий
Поделиться на других сайтах

  • 0

Вероятно, переменная $this->orig_post['post_date'] (или что там у Вас в двушках) не определена в этом файле, и поэтому отрабатывает как ноль...

Попробуйте в локалке или в тихое время на форуме вывести ее значение на страницу через

die("Время создания сообщения: ".$this->orig_post['post_date']);

Если нет цифр - ищите, в какой переменной содержится нужная цифра (например, в той, которая отвечает за время над текстом сообщения), и используйте ее.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

1. Запрещаем удаление поста юзеру после истечения времени для редактирования поста.

./sources/action_public/moderate.php

Ищем:

else if ( ($this->ipsclass->member['g_delete_own_posts'] == 1) and ( $this->ipsclass->member['id'] == $post['author_id'] ) )

Заменяем на:

else if ( ($this->ipsclass->member['g_delete_own_posts'] == 1) and ( $this->ipsclass->member['id'] == $post['author_id'] ) && $post['post_date'] > ( time() - ( intval($this->ipsclass->member['g_edit_cutoff']) * 60 ) ) )

Сохраняем файл.

 

 

2. Убираем кнопку "Удалить" после истечения времени для редактирования поста.

./sources/action_public/topics.php

Ищем:

$this->delete_button($row['pid'], $poster)

Заменяем на:

$this->delete_button($row['pid'], $poster, $row['post_date'])

Ищем:

function delete_button($post_id, $poster)

Заменяем на:

function delete_button($post_id, $poster, $post_date)

Ищем:

if ($poster['id'] == $this->ipsclass->member['id'] and ($this->ipsclass->member['g_delete_own_posts'])) return $button;

Заменяем на:

if ($poster['id'] == $this->ipsclass->member['id'] and ($this->ipsclass->member['g_delete_own_posts'] && $post_date > ( time() - ( intval($this->ipsclass->member['g_edit_cutoff']) * 60)))) return $button;

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Действительно, вся проблема в первой переменной проверки. И месье `Maksik изложил исчерпывающее спасение из засады ;)

 

FatCat

`Maksik

Низкий Вам поклон за сравнительно оперативные усилия. Я уверен, за это буду благодарен не только я, функция полезная и нужная. И как к версии 2 ещё надо было разработчикам не додуматься до того, какая у них тут неосмотрительность...

 

Итак, проблема решена. Точную технологию изложил выше `Maksik для версии 2. Для версии 1 всё аналогично (п. 1 сравнивать с постом FatCat, для п. 2 поможет железная аналогия). Для 2.1.5 проверено и на локалке, и на живом сервере - работает. Большое всем спасибо :D

 

 

Если любишь в жизни риск, форматируй жесткий диск!

Уж если сознательно его форматить, какой там риск... Гораздо хуже, когда он сам летит в далёкие края =)

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Если стоит мод "Запрет на редактирование сообщений после добавления комментария модератором", то в topics.php и moderate.php ищите немного другой код, например:

$this->ipsclass->member['g_delete_own_posts'] == 1

и добавляйте код ниже перед последней скобкой ")":

./sources/action_public/moderate.php

$post_date > ( time() - ( intval($this->ipsclass->member['g_edit_cutoff']) * 60))

./sources/action_public/topics.php

$post_date > ( time() - ( intval($this->ipsclass->member['g_edit_cutoff']) * 60))

Остальное все так же!

Буду благодарен, если кто кинет ссылку на этот мод/хак (помоему что-то подобное на ibr стояло).

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Буду благодарен, если кто кинет ссылку на этот мод/хак (помоему что-то подобное на ibr стояло).

Не это?

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Спасибо, других (получше этого) наверное и нет)

Тогда даже с этим модом можно делать все, как в сообщении #11

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить на вопрос...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.