Опубликовано: 6 ноября 201411 г Всем привет!Прошу совета - можно ли как-то настроить пользователям запрет удаления собственных сообщений через определенное время?Например, прошли сутки и кнопка "Удалить" становится недоступной. Версия форума 2.3.6
Опубликовано: 6 ноября 201411 г Через определенное время - нельзя. Либо может удалять, либо не может. Время можно установить только на редактирование своих сообщений.
Опубликовано: 6 ноября 201411 г Но если очень сильно хочется, можно прикрутить костыль: 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 - без ограничения.
Опубликовано: 10 ноября 201411 г Автор Как и обещал, отписываюсь по результату. Все отработало норм, кроме п.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 Еще раз спасибо за решение :)
Опубликовано: 10 ноября 201411 г Да, действительно, меня ввел в заблуждения массив $poster который содержал данные поста, а оказалось что это кеш. Инструкцию поправил.
Всем привет!
Прошу совета - можно ли как-то настроить пользователям запрет удаления собственных сообщений через определенное время?
Например, прошли сутки и кнопка "Удалить" становится недоступной.
Версия форума 2.3.6