dimitry Опубликовано 5 Сентября 2006 Жалоба Поделиться Опубликовано 5 Сентября 2006 Существует ли предложения по модификации IPB так, чтобы при модерации была возможность копирования сообщений или тем (в т.ч. массовое).Часто хочется выделить что-то определенное и при этом хочется, чтобы исходные сообщение или тема оставались на своих местах, а там, где нужно - появилась бы их копия? Реализуемо такое? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
dimitry Опубликовано 17 Июля 2007 Автор Жалоба Поделиться Опубликовано 17 Июля 2007 Нашел такие моды - копируют выбранную тему в другой форум для версии 1.x - Copy TopicДля тех, у кого версии форума 2.1 - Copy Topics Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
dimitry Опубликовано 23 Июля 2007 Автор Жалоба Поделиться Опубликовано 23 Июля 2007 Очень хочется сделать так, чтобы можно было копировать отдельные сообщения как в уже существующую тему, так и в новую тему (тот же шаблон можно использовать, что и для меню Разделить тему либо встроить опции копирования темы в меню Разделить тему). Немаловажно, чтобы эта модификация была совместима с модом мультивложений Multiattach <a href="http://www.ibresource.ru/db/794/" target="_blank">http://www.ibresource.ru/db/794/</a> Давайте рассмотрим самый простой случай - копирование выбранный сообщений в уже существующую тему. Для случая копирования выбранных сообщений в уже существующую тему можно выбрать подход как в моде перемещения и удаления отдельных сообщений Перемещение/удаление отдельных сообщений =================1. Topics.php=================Найти: 'MERGE_TOPIC' => '60', Ниже добавить: 'DELETE_POSTZ' => '66', 'MOVE_POSTZ' => '67', 'COPY_POSTZ' => '69', Найти: $actions = array( 'MOVE_TOPIC', 'CLOSE_TOPIC', 'OPEN_TOPIC', 'DELETE_TOPIC', 'EDIT_TOPIC', 'PIN_TOPIC', 'UNPIN_TOPIC', 'UNSUBBIT', 'MERGE_TOPIC', 'SPLIT_TOPIC' );Заменить на: $actions = array( 'MOVE_TOPIC', 'CLOSE_TOPIC', 'OPEN_TOPIC', 'DELETE_TOPIC', 'EDIT_TOPIC', 'PIN_TOPIC', 'UNPIN_TOPIC', 'UNSUBBIT', 'MERGE_TOPIC', 'SPLIT_TOPIC', 'DELETE_POSTZ', 'MOVE_POSTZ', 'COPY_POSTZ' ); Найти: if ($key == 'MERGE_TOPIC' or $key == 'SPLIT_TOPIC') { if ($this->moderator['split_merge'] == 1) { $mod_links .= $this->append_link($key); } } Заменить на: if ($key == 'MERGE_TOPIC' or $key == 'SPLIT_TOPIC' or $key == 'MOVE_POSTZ' or $key == 'COPY_POSTZ') { if ($this->moderator['split_merge'] == 1) { $mod_links .= $this->append_link($key); } } else if ($key == 'DELETE_POSTZ') { if ($this->moderator['delete_post'] == 1) { $mod_links .= $this->append_link($key); } } =================2. lang_topic.php=================Найти: $lang = array ( Ниже добавить: 'COPY_POSTZ' => "Копировать выбранные сообщения", =================6. lang_mod.php=================Найти: $lang = array ( Ниже добавить: 'postz_copied' => "Сообщения скопированы", 'copied_post' => "Это сообщение было скопировано в эту тему", Moderate.php Скажем пусть будет функция копирования отдельных постов function complete_copying() Найти: case '68': $this->complete_deleting(); break; Ниже добавить: case '69': $this->complete_copying(); break; Теперь самое основное, в чем загвоздка:Начало функции, мне кажется, должно быть то же, что и для complete_moving() function complete_copying() { global $std, $ibforums, $DB, $print; //------------------------------------------ // Проверяемся на модератора //------------------------------------------ $passed = 0; if ( $ibforums->member['g_is_supmod'] ) { $passed = 1; } elseif ( $this->moderator['split_merge'] ) { $passed = 1; } if ( !$passed ) { $this->moderate_error(); } //------------------------------------------ // Проверяем наличие ID темы для копирования //------------------------------------------ if ( !trim($ibforums->input['where2move']) ) { $this->Error( array( 'LEVEL' => 1, 'MSG' => 'complete_form' ) ); } //-------------------------------------------- // Get the topic ID of the entered URL // (Ещё бы я это сам писал! Делать нечего! :Р) //-------------------------------------------- preg_match("/(\?|&)(t|showtopic)=(\d+)($|&)/", $ibforums->input['where2move'], $match ); $id = intval(trim($match[3])); if ( !$id ) { $this->Error( array( 'LEVEL' => 1, 'MSG' => 'mt_no_topic' ) ); } if ( $id == $this->topic['tid'] ) { $this->Error( array( 'LEVEL' => 1, 'MSG' => 'mt_same_topic' ) ); } $DB->query("SELECT tid, forum_id, state, approved FROM ibf_topics WHERE tid='".$id."'"); if ( !$new = $DB->fetch_row() or $new['state'] == "closed" or !$new['approved'] or $new['deleted'] ) { $this->Error( array( 'LEVEL' => 1, 'MSG' => 'move_no_topic' ) ); } //------------------------------------------ // Собираем состояние чекбоксов //------------------------------------------ $idz = array(); $std->collect_ids("pozt", &$idz); if ( !count($idz) ) { $this->Error( array( 'LEVEL' => 1, 'MSG' => 'no_msg_checked' ) ); } $idz = "pid".$std->collect_ids_query_part($idz); $DB->query("SELECT pid FROM ibf_posts WHERE new_topic=1 and ".$idz); if ( $DB->get_num_rows() ) { $DB->free_result(); $this->moderate_error('no_delete_post'); } //------------------------------------------ // Не даём нашему модеру зацепить // чужие форумы //------------------------------------------ $DB->query("SELECT pid FROM ibf_posts WHERE forum_id != '".$this->forum['id']."' and ".$idz); if ( $DB->get_num_rows() ) { $DB->free_result(); $this->moderate_error(); } $moved_line = "[color=gray][size=0]".$ibforums->lang['copied_post'].""[url=http://{$this->base_url}showtopic={$this->topic%5b'tid']}]{$this->topic['title']}[/url]"[/size][/color]"; //------------------------------------------ // Вперёд и с песней! //------------------------------------------ ......... Вот часть функции function do_copy() мода Copy topic, отвечающая за, собственно, процесс копирования: $DB->query("SELECT * FROM ibf_topics WHERE tid='".$ibforums->input['tid']."'"); if ( ! $this->topic = $DB->fetch_row() ) { $std->Error( array( 'LEVEL' => 1, 'MSG' => 'copy_no_forum' ) ); } $tid = $ibforums->input['tid']; $source = $ibforums->input['sf']; $copyoftopic=$this->topic; $copyto = $ibforums->input['copy_id']; $copyoftopic['forum_id']=$copyto; $copyoftopic['tid']=""; $db_string=$DB->compile_db_insert_string($copyoftopic); $DB->query("INSERT INTO ibf_topics (".$db_string['FIELD_NAMES'].") VALUES (".$db_string['FIELD_VALUES'].")"); $new_tid=$DB->get_insert_id(); $bla=$DB->query("SELECT * from ibf_posts where topic_id=".$tid." ORDER by post_date ASC"); $posts=$DB->get_num_rows(); $i=0; while ($i<$posts) { $post=$DB->fetch_row($bla); $post['topic_id']=$new_tid; unset($post['pid']); $post['forum_id']=$copyto; $db_string=$DB->compile_db_insert_string($post); $DB->query("INSERT INTO ibf_posts (".$db_string['FIELD_NAMES'].") VALUES (".$db_string['FIELD_VALUES'].")"); $i++; } Как можно прикрутить код, подобный тому, что в в функции copy_do в функцию complete_copying() Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
xRay Опубликовано 23 Июля 2007 Жалоба Поделиться Опубликовано 23 Июля 2007 Вот такая модификая для 2.0.х естьhttp://www.ibresource.ru/db/558/ Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.