Перейти к содержимому
Открыть в приложении

Удобный способ просмотра. Узнать больше.

Дизайн и модификация Invision Community

Полноэкранное приложение на главном экране с push-уведомлениями, медалями и многим другим.

Чтобы установить это приложение на iOS и iPadOS
  1. Нажмите иконку «Поделиться» в Safari
  2. Прокрутите меню и нажмите На экран «Домой».
  3. Нажмите Добавить в правом верхнем углу.
Чтобы установить это приложение на Android
  1. Нажмите меню из трёх точек (⋮) в правом верхнем углу браузера.
  2. Нажмите Добавить на главный экран или Установить приложение.
  3. Подтвердите, нажав Установить.
Русский язык для Invision Community 5

Запрет удаления собственных сообщений через определенное время

Всем привет!

Прошу совета - можно ли как-то настроить пользователям запрет удаления собственных сообщений через определенное время?

Например, прошли сутки и кнопка "Удалить" становится недоступной.

 

Версия форума 2.3.6

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

Через определенное время - нельзя. Либо может удалять, либо не может. Время можно установить только на редактирование своих сообщений.

Но если очень сильно хочется, можно прикрутить костыль:

 

1. Выполнить sql запрос

ALTER TABLE ibf_groups ADD COLUMN g_delete_time int(10) unsigned DEFAULT '0'

 

2. Открыть \sources\action_admin\groups.php

Найти

							 'g_delete_own_posts'   => $this->ipsclass->input['g_delete_own_posts'],

Ниже добавить

							 'g_delete_time'        => intval( $this->ipsclass->input['g_delete_time'] ),

 

Найти

		$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "<b>Могут открывать/закрывать свои темы?$guest_legend" ,

Выше добавить

		$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "<b>Временное ограничение, после которого удаления сообщения будет запрещено (в минутах)?$guest_legend</b>" ,
											  $this->ipsclass->adskin->form_input("g_delete_time", $group['g_delete_time'] )
								     )      );

 

3. Открыть \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['id'] == $post['author_id']) and ($this->ipsclass->member['g_delete_own_posts'] == 1 and (!$this->ipsclass->member['g_delete_time'] or (time() - $this->ipsclass->member['g_delete_time'] * 60) < $post['post_date'])) )

 

4. Открыть \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']))

Заменить на

if ($poster['id'] == $this->ipsclass->member['id'] and ($this->ipsclass->member['g_delete_own_posts'] and (!$this->ipsclass->member['g_delete_time'] or (time() - $this->ipsclass->member['g_delete_time'] * 60) < $post_date)))

 

В настройках групп появится новая настройка для временного ограничения. 0 - без ограничения.

  • Автор

Спасибо! Попробую протестировать, о результатах напишу!

  • Автор

Как и обещал, отписываюсь по результату. Все отработало норм, кроме п.4.

В итоге, я переписал функцию delete_button:

	function delete_button($post_id, $poster, $post_date)
{
	if ($this->ipsclass->member['id'] == "" or $this->ipsclass->member['id'] == 0)
	{
		return "";
	}

	$button = $this->ipsclass->compiled_templates['skin_topic']->button_delete($this->forum['id'],$this->topic['tid'],$post_id,$this->md5_check );

	if ($this->ipsclass->member['g_is_supmod']) return $button;
	if ($this->moderator['delete_post']) return $button;


	if ($poster['id'] == $this->ipsclass->member['id'] and ($this->ipsclass->member['g_delete_own_posts']))
	{
		// Have we set a time limit?

		if ($this->ipsclass->member['g_delete_time'] > 0)
		{
			if ( $post_date > ( time() - ( intval($this->ipsclass->member['g_delete_time']) * 60 ) ) )
			{
				return $button;
			}
			else
			{
				return "";
			}
		}
		else
		{
			return $button;
		}
	}


}

 

И в описание и вызов delete_button надо добавить параметр $post_date

 

Еще раз спасибо за решение :)

Да, действительно, меня ввел в заблуждения массив $poster который содержал данные поста, а оказалось что это кеш. Инструкцию поправил.

Создайте аккаунт или войдите в него для комментирования

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.