Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
rv777

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

Recommended Posts

Всем привет!

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

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

 

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

Share this post


Link to post

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

Share this post


Link to post

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

 

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 - без ограничения.

Share this post


Link to post

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

Share this post


Link to post

Как и обещал, отписываюсь по результату. Все отработало норм, кроме п.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

 

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

Share this post


Link to post

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

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...