Перейти к контенту

Копирование сообщений и тем


Рекомендуемые сообщения

Существует ли предложения по модификации IPB так, чтобы при модерации была возможность копирования сообщений или тем (в т.ч. массовое).Часто хочется выделить что-то определенное и при этом хочется, чтобы исходные сообщение или тема оставались на своих местах, а там, где нужно - появилась бы их копия? Реализуемо такое?
Ссылка на комментарий
Поделиться на других сайтах

  • 10 месяцев спустя...

Нашел такие моды - копируют выбранную тему в другой форум для версии 1.x - Copy Topic

Для тех, у кого версии форума 2.1 - Copy Topics

Ссылка на комментарий
Поделиться на других сайтах

Очень хочется сделать так, чтобы можно было копировать отдельные сообщения как в уже существующую тему, так и в новую тему (тот же шаблон можно использовать, что и для меню Разделить тему либо встроить опции копирования темы в меню Разделить тему). Немаловажно, чтобы эта модификация была совместима с модом мультивложений 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()

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.