rv777 Posted November 6, 2014 Share Posted November 6, 2014 Всем привет!Прошу совета - можно ли как-то настроить пользователям запрет удаления собственных сообщений через определенное время?Например, прошли сутки и кнопка "Удалить" становится недоступной. Версия форума 2.3.6 Link to comment Share on other sites More sharing options...
siv1987 Posted November 6, 2014 Share Posted November 6, 2014 Через определенное время - нельзя. Либо может удалять, либо не может. Время можно установить только на редактирование своих сообщений. Link to comment Share on other sites More sharing options...
siv1987 Posted November 6, 2014 Share Posted November 6, 2014 Но если очень сильно хочется, можно прикрутить костыль: 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 - без ограничения. Link to comment Share on other sites More sharing options...
rv777 Posted November 7, 2014 Author Share Posted November 7, 2014 Спасибо! Попробую протестировать, о результатах напишу! Link to comment Share on other sites More sharing options...
rv777 Posted November 10, 2014 Author Share Posted November 10, 2014 Как и обещал, отписываюсь по результату. Все отработало норм, кроме п.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 Еще раз спасибо за решение :) Link to comment Share on other sites More sharing options...
siv1987 Posted November 10, 2014 Share Posted November 10, 2014 Да, действительно, меня ввел в заблуждения массив $poster который содержал данные поста, а оказалось что это кеш. Инструкцию поправил. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now