IBResource Опубликовано 30 Октября 2003 Жалоба Поделиться Опубликовано 30 Октября 2003 (изменено) Вот в этой теме привожу код для создания нового поля для мульти-модерации. Поля, где вводится количество дней, через которое тема будет удалена. Естесственно отсчет пойдет, когда мульти-модерация (с включенным этим пунктом) на конкретной теме будет применена. Этот хак, наппример, будет полезен для создания мульти-модерации, включающей в себя закрытие темы, написание сообщения от закрывшего модератора, и соответственно удаление темы, например, через 10 дней. Эта мульти-модерация будет работать по темам, которые должны быть удалены не по правиламт и т.д. Значит здесь привожу еще не завершенную модификацию. Нет никакого интерфейса для отмены удаления уже ждущих (удаления) тем Его необходимо придумать, где он будет, кто с ним будет работать, и как...Также хак не тестировался на реально работающих форумах. На локалке вроде нормально работает! Сам мод:Сначала вам необходимо выполнить следующие SQL запросы к базе, чтобы добавить необходимые поле и таблицу:CREATE TABLE ibf_topic_deleting ( did mediumint(9) NOT NULL auto_increment, topic_id bigint(20) default '0', date_del int(10) NOT NULL default '0', PRIMARY KEY (did) ) TYPE=MyISAM;иALTER TABLE ibf_topic_mmod ADD topic_delete smallint(5) NOT NULL DEFAULT '0'; Теперь собственно изменения в файлах: В index.php найдите://-------------------------------- // The rest :D //--------------------------------До него вставьте: // oska mod delete topic x days start $cur_time = time(); $del_check = $DB->query("SELECT * FROM ibf_topic_deleting WHERE date_del < {$cur_time}"); if ($DB->get_num_rows($check) > 0 ) { while ($topic_for_delete = $DB->fetch_row($check)) { $DB->query("DELETE FROM ibf_topic_deleting WHERE did = {$topic_for_delete['did']}"); $DB->query("DELETE FROM ibf_topics WHERE tid = {$topic_for_delete['topic_id']}"); } } // oska mod delete topic x days start В sources/Admin/ad_multi_moderate.php найдите:'topic_reply' => $IN['topic_reply'],Перед этой строкой добавьте:'topic_delete' => $ADMIN->make_safe($HTTP_POST_VARS['topic_delete']), Далее в этом же файле найдите: $ADMIN->html .= $SKIN->add_td_row( array( "<b>Add to <i>END</i> of topic title?</b>" , $SKIN->form_input("topic_title_end", $topic_mm['topic_title_end'] ) ) ); После этого необходимо добавить: // oska mod delete topic in X days start $ADMIN->html .= $SKIN->add_td_row( array( "<b>Через сколько дней тему удалить?</b><br>После применении мульти-модерации с заполненным этим полем, начинается отчет дней, после которого тема удаляется!" , $SKIN->form_input("topic_delete", $topic_mm['topic_delete'] ) ) ); // oska mod delete topic in X days end Далее в файле sources/lib/modfunctions.php найдите: //------------------------------------------------------ // @topic_add_reply: Appends topic with reply // ----------- // Accepts: $post, $tids = array( 'tid', 'forumid' ); // // Returns: NOTHING (TRUE/FALSE) //------------------------------------------------------ Перед ним вставьте: // oska mod delete topic days start function add_deleting_topic ($tid, $days) { global $std, $ibforums, $DB; if ($tid && $days) { $now_time = time(); $daysinsec = $days * 24 * 60 * 60 ; $answer = $now_time + $daysinsec; $insert_del_array = array ( 'topic_id' => $tid, 'date_del' => $answer, ); $db_del_string = $DB->compile_db_insert_string( $insert_del_array ); $DB->query("INSERT INTO ibf_topic_deleting (" .$db_del_string['FIELD_NAMES']. ") VALUES (". $db_del_string['FIELD_VALUES'] .")"); } } // oska mod delete topic days end И в файле sources/mis/multi_moderate.php найдите: //------------------------------------- // Move topic? //------------------------------------- Перед этим кодом вставьте: //------------------------------------- // Delete topic? Oska MOD! //------------------------------------- if ( $this->mm_data['topic_delete'] ) { $this->modfunc->add_deleting_topic($this->topic['tid'], $this->mm_data['topic_delete']); } Всё. Незавершенный мод установлен. Но уже должен быть работоспособен! Пожалуйста тестируйте, высказывайте замеченные ошибки и ваши предложения насчет того интерфейса для отмены... Изменено 30 Октября 2003 пользователем Oska Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
V_V Опубликовано 5 Ноября 2003 Жалоба Поделиться Опубликовано 5 Ноября 2003 Проверено на реальном форуме - все работает. Очень полезный хак. Респект. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
IBResource Опубликовано 6 Ноября 2003 Автор Жалоба Поделиться Опубликовано 6 Ноября 2003 V_V Нет никакого интерфейса для отмены удаления уже ждущих (удаления) тем Его необходимо придумать, где он будет, кто с ним будет работать, и как...Что скажешь по поводу интерфейса? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
V_V Опубликовано 7 Ноября 2003 Жалоба Поделиться Опубликовано 7 Ноября 2003 Oska ИМХО: в теме должна быть отметка о том, через сколько она будет удалена, возможно видимая всем и/или только тем, кому можно... + возможность отменить/изменить удалениеА также какой-нить лист в модер/админ центре со списком "ждущих" тем и возможностью внесения исправлений и отмены. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
IBResource Опубликовано 8 Ноября 2003 Автор Жалоба Поделиться Опубликовано 8 Ноября 2003 Ладно сделаем отметку в теме либо для админов + модеров этого раздела ИЛИ для всех (эту опцию настраиваться в админке будет).Также сделаем страничку, которую можно выбрать будет из "опции модератора", где можно будет изменить дату удаления или вообще отменить удаление! А также список этих всех тем для изменения и удаления! Вот тогда реальный мод будет. ОК. В общем интерфейс в разработке! Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Anna Опубликовано 22 Марта 2006 Жалоба Поделиться Опубликовано 22 Марта 2006 Мое видение проблемы - для 2.0.х Ибо в 2.0.х есть такая чудесная вещь как корзина, то удаление можно заменить отложенным переносом темы в эту самую корзину. Т.е. с темой производятся СРАЗУ все остальные действия, и ОТЛОЖЕННО производится перенос темы. В качестве форума для переноса указываем корзину. Отдельно создаем второе правило мультимодерации, где в поле "отложить перемещение на X дней" указываем "-1" - это будет означать отмену ранее установленного отложенного действия по перемещению. Отложенное действие по перемещению осуществляется с помощью задачи (task) Инструкция по установке (2.0.х). запросыALTER TABLE ibf_topic_mmod ADD topic_movetime smallint(5) NOT NULL DEFAULT '0'; CREATE TABLE `ibf_topic_movetime` ( `did` mediumint(9) NOT NULL auto_increment, `topic_id` bigint(20) default '0', `date_move` int(10) NOT NULL default '0', `forum_id` smallint(6) NOT NULL default '0', PRIMARY KEY (`did`) ) ENGINE=MyISAM то и другое - со своим префиксом правим шаблон для отображения текущего статуса в контексте данного мода. Просмотр темы (skin_topic) / mm_startНаверх добавить <?php if ( ! defined( 'IN_IPB' ) ) { print "<h1>Некорректный адрес</h1>Вы не имеете доступа к этому файлу напрямую. Если вы недавно обновляли форум, вы должны обновить все соответствующие файлы."; exit(); } class task_item { var $class = ""; var $root_path = ""; var $task = ""; /*-------------------------------------------------------------------------*/ // Our 'auto_run' function // ADD CODE HERE /*-------------------------------------------------------------------------*/ function run_task() { global $DB, $ibforums, $std; $cur_time = time(); $check = $DB->query("SELECT * FROM ibf_topic_movetime WHERE date_move < '{$cur_time}'"); while ($row = $DB->fetch_row($check)) { $DB->query("DELETE FROM ibf_topic_movetime WHERE did = '{$row['did']}'"); $DB->query("UPDATE ibf_topics SET forum_id='{$row['forum_id']}' WHERE tid = '{$row['topic_id']}'"); } $this->class->append_task_log( $this->task, 'Checked and proceed' ); } /*-------------------------------------------------------------------------*/ // register_class // LEAVE ALONE /*-------------------------------------------------------------------------*/ function register_class(&$class) { $this->class = $class; $this->root_path = $this->class->root_path; } /*-------------------------------------------------------------------------*/ // pass_task // LEAVE ALONE /*-------------------------------------------------------------------------*/ function pass_task( $this_task ) { $this->task = $this_task; } } ?> файл /sources/admin/ad_multi_moderate.phpнайти 'topic_approve' => $ibforums->input['topic_approve'], НИЖЕ добавить 'topic_movetime' => $ibforums->input['topic_movetime'], найти $ibforums->html .= $ibforums->adskin->add_td_row( array( "<b>Переместить тему?</b><br /><div class='graytext'>Выберите форум куда переместить тему при мульти-модерации.</div>" , $ibforums->adskin->form_dropdown("topic_move", array_merge( array( 0 => array('-1', 'Не перемещать' ) ), $fporum_jump ), $topic_mm['topic_move'] ) ."<br />".$ibforums->adskin->form_checkbox('topic_move_link', $topic_mm['topic_move_link'] )."<strong>Оставить ссылку на тему в старом форуме?</strong>" ) ); НИЖЕ добавить: $ibforums->html .= $ibforums->adskin->add_td_row( array( "<b>Отложенное перемещение на X дней или отмена этого действия?</b><br /><div class='graytext'>Для того, чтобы отложить действие по перемещению, укажите количество дней. Укажите <nobr><b>-1</b></nobr> для того, чтобы отменить ранее установленное время задержки.</div>" , $ibforums->adskin->form_input("topic_movetime", $topic_mm['topic_movetime'] ) ) ); файл /sources/misc/multi_moderate.phpнайти //----------------------------------------- // Move topic? //----------------------------------------- ВЫШЕ добавить: if (intval($this->mm_data['topic_movetime']) == -1 ) { $DB->query("DELETE FROM ibf_topic_movetime WHERE topic_id='{$this->topic['tid']}'"); } найти: if ( $this->mm_data['topic_move'] ) { НИЖЕ добавить: if (intval($this->mm_data['topic_movetime']) > 0 ) { $now_time = time(); $daysinsec = intval($this->mm_data['topic_movetime']) * 24 * 60 * 60; $answer = $now_time + $daysinsec; $DB->query("DELETE FROM ibf_topic_movetime WHERE topic_id='{$this->topic['tid']}'"); $DB->query("INSERT INTO ibf_topic_movetime (topic_id, date_move, forum_id) VALUES ('{$this->topic['tid']}','{$answer}','{$this->mm_data['topic_move']}')"); } else { найти: } else { $DB->do_update( 'topic_mmod', array( 'topic_move' => 0 ), 'mm_id='.$this->mm_id ); } НИЖЕ добавить: } Настройкасоздаем два правила мультимодерации в админке.Правило 1.Название: Закрыть и удалить через 5 днейДействует: во всех форумахИзменить состояние темы?: ЗакрытьПереместить тему?: КорзинаОтложенное перемещение на X дней или отмена этого действия?: 5Добавить сообщение в эту тему?: ДаТекст сообщения: <b>[!]</b> Эта тема закрыта и будет удалена через 5 дней. Правило 2.Название: Отменить удаление и открытьДействует: во всех форумахИзменить состояние темы?: ОткрытьОтложенное перемещение на X дней или отмена этого действия?: -1Добавить сообщение в эту тему?: ДаТекст сообщения: <b>[!]</b> Действие по отложенному удалению отменено, тема открыта. Добавляем задачу в админке.Название: Отложенное перемещение темИмя PHP-файла для выполнения: topic_movetime.phpВремя выполнения: 12Включить запись журнала действий: НетВключить задачу?: Да Усё Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 23 Марта 2006 Жалоба Поделиться Опубликовано 23 Марта 2006 Хм.. не видел этой темы и делал сам. У меня для топиков и для постов, но минус мода Оски в том, что у него появляются дополнительные запросы.+ у него удаляется при авторизации, а у меня по крону. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Hastelloy Опубликовано 5 Апреля 2006 Жалоба Поделиться Опубликовано 5 Апреля 2006 Несколько вопросов 1. Совместим ли мод с 2.1.5?2. Сроки "жизни" темы устанавливает модератор или же пользователь тоже сможет?3. Можно ли автоматом устанавливать сроки на какой-либо один раздел целиком или же только на конкретные темы? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Hastelloy Опубликовано 30 Июня 2006 Жалоба Поделиться Опубликовано 30 Июня 2006 А-у-у-у!!! Тема заглохла чтоль? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Anna Опубликовано 30 Июня 2006 Жалоба Поделиться Опубликовано 30 Июня 2006 Несколько вопросов 1. Совместим ли мод с 2.1.5? а разве не видно: ibforums->html ? естественно надо переделывать 2. Сроки "жизни" темы устанавливает модератор или же пользователь тоже сможет? сроки жизни ставятся в правиле мульти-модерации. кто по вашему редактирует правила мульти-модерации? только админ. 3. Можно ли автоматом устанавливать сроки на какой-либо один раздел целиком или же только на конкретные темы? если бы это было можно, наверное это было бы заявлено в описании мода. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Xeim.net Опубликовано 5 Июля 2006 Жалоба Поделиться Опубликовано 5 Июля 2006 Для 1.3 форума хочется такой же хак... очень Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Jax Опубликовано 6 Июля 2006 Жалоба Поделиться Опубликовано 6 Июля 2006 Работает он.Сначала ставьте, а потом говорите... Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Xeim.net Опубликовано 6 Июля 2006 Жалоба Поделиться Опубликовано 6 Июля 2006 Работает он.Сначала ставьте, а потом говорите...Не понял. Это мне? т.е. на 1.3 работает!? или не ко мне.... Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Anna Опубликовано 7 Июля 2006 Жалоба Поделиться Опубликовано 7 Июля 2006 Да, вам - про 1.3.х. Потому что под 2.1.х надо стопудово переписывать использование классов (ipsclass делать) Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Evgheni Опубликовано 23 Июля 2006 Жалоба Поделиться Опубликовано 23 Июля 2006 Да, очь хотелось бы увидеть версию мода под 2.1.x Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
vladf Опубликовано 8 Августа 2006 Жалоба Поделиться Опубликовано 8 Августа 2006 Anna, может вы сделаете версию под 2.1.х (например 2.1.7) ? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Anna Опубликовано 9 Августа 2006 Жалоба Поделиться Опубликовано 9 Августа 2006 Нет, извините, но я если что-то пишу то только под 2.0.х. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
M-K Опубликовано 3 Августа 2007 Жалоба Поделиться Опубликовано 3 Августа 2007 Ладно сделаем отметку в теме либо для админов + модеров этого раздела ИЛИ для всех (эту опцию настраиваться в админке будет).Также сделаем страничку, которую можно выбрать будет из "опции модератора", где можно будет изменить дату удаления или вообще отменить удаление! А также список этих всех тем для изменения и удаления! Вот тогда реальный мод будет. ОК. В общем интерфейс в разработке!Ну почему он так и не доделан?? Очень хочется для 1.3 интерфейс. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Jax Опубликовано 11 Августа 2007 Жалоба Поделиться Опубликовано 11 Августа 2007 Забей, никто писать это не будет.У Сонга сделано через Крон, можешь купить мод у него Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
aivus Опубликовано 16 Августа 2007 Жалоба Поделиться Опубликовано 16 Августа 2007 Мож у кого нить есть что-то подобное под 2.1.7 ? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.