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 on other sites

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

Share this post


Link to post
Share on other sites

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

 

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 on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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...