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

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


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

Существует ли предложения по модификации 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()

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

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

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

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

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

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

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

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

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