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

[1.x.x]Скрытие и публикация сообщений и тем (для 1.х)


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

Название: Скрытие и публикация сообщений и тем (для 1.х)

Добавил: Jax

Добавлен: 06 Июн 2007

Обновлен: 07 Июн 2007

Категория: IP.Board 1.x.x

 

— Что есть:

  • Через АЦП даем права группам, которые будут иметь возможность скрывать посты и темы на форуме.
  • На форуме, рядом с каждым сообщением будет ссылка «Скрыть сообщение» или «Скрыть сообщение вместе с темой», после нажатия на которую, пост приобретает серый цвет, что дает понять о его скрытости.
  • В профиле, если стоит сборка Игорька, есть «5 последних сообщения юзера», то наши скрытые посты и темы там не показываются, если конечно у пользователя, который смотрит, нет прав скрытия сообщений.
  • В функции «Найти все сообщения пользователя» аналогичная ситуация. Если группа юзера не обладает правами скрытия постов, он их не видит.
  • Не учитывается, если у юзера будут ВСЕ посты скрытыми. Результат наверное будет просто пустое место на месте должных сообщений.
  • Сообщения показываться не будут, если стоит опция «Отображение результата -> Результаты в виде сообщений».
  • УЧИТЫВАЕТСЯ: Если у темы скрыто первое сообщение, а остальные нет (hide_post=0), то они НЕ будут показываться.
  • Для тех, у кого стоит LoFi для 1.х скрытые сообщения и темы НЕ показываются.
  • Поиск скрытых тем, в принципе проработан с «Где искать? -> В сообщениях/В заголовках» и «Отображение результата -> Результаты в виде тем».
— Знайте:
  • Если поиск будет осуществляться по типу «Отображение результата -> Результаты в виде тем» и если последним постом будет является наш скрытый пост, то он, к сожалению, будет виден в графе «Последнее сообщение».
Первая версия: Скрытие и публикация сообщений

 

Нажмите здесь, чтобы скачать файл

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

Косяк в описании в одной букве ;)

ALTER TABLE `ibf_topics` 
 ADD `hide_topics` TINYINT(1) DEFAULT '0' NOT NULL;

при этом везде в моде участвет только поле hide_topic, а не hide_topics

 

И вообще как я не пыжился не нашел кнопки скрытия тем :D

Ща пытаюсь переделать мод, чтобы все эти скрытия и раскрытия были в "Опциях модератора". У мну стоит мод перемещения сообщений от theIggs и там очень удобненькие чекбоксы в каждом сообщении, то бишь хотце сделать чтобы например сразу несколько сообщений можно было скрыть. А скрыть тему, дак вообще помойму правильнее будет смотреться именно в Опциях модератора, а не в сообщении +_+

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

при этом везде в моде участвет только поле hide_topic, а не hide_topics

Исправил - спасибо.

 

И вообще как я не пыжился не нашел кнопки скрытия тем

Значит что-то не так сделали.

А скрыть тему, дак вообще помойму правильнее будет смотреться именно в Опциях модератора, а не в сообщении +_+

Здесь уже каждому свое :D Я лично сначала захожу в тему, чтобы узнать, что за тема, а потом из нее же и скрываю ее ;) Зачем мне возвращаться или опускаться в опции модератора.. ну знесь на вкус и цвет..

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

Ну судя по моду, вот этот отвечает за кнопу

if ($ibforums->member['g_hide_post'])
{
if ($row['new_topic'])
{
	$poster['hidepost'] = "<a href='{$this->base_url}act=Mod&CODE=hidetopic&f={$this->forum['id']}&t={$this->topic['tid']}&p={$row['pid']}&st={$ibforums->input[st]}&auth_key=".$this->md5_check."'><{HIDE_TOPIC}>";
}
if (!$row['hide_post'] && !$row['new_topic'])
{
	$poster['hidepost'] = "<a href='{$this->base_url}act=Mod&CODE=hidepost&f={$this->forum['id']}&t={$this->topic['tid']}&p={$row['pid']}&st={$ibforums->input[st]}&auth_key=".$this->md5_check."'><{HIDE_POST}></a>";
}
if ($row['hide_post'] && !$row['new_topic'])
{
	$poster['hidepost'] = "<a href='{$this->base_url}act=Mod&CODE=hidepostback&f={$this->forum['id']}&t={$this->topic['tid']}&p={$row['pid']}&st={$ibforums->input[st]}&auth_key=".$this->md5_check."'><{HIDE_POST_BACK}>";
}
if ($this->topic['hide_topic'] && $row['new_topic'])
{
	$poster['hidepost'] = "<a href='{$this->base_url}act=Mod&CODE=hidetopicback&f={$this->forum['id']}&t={$this->topic['tid']}&p={$row['pid']}&st={$ibforums->input[st]}&auth_key=".$this->md5_check."'><{HIDE_TOPIC_BACK}>";
}
}

Но хоть убейся, я видел только "Скрыть сообщение"/"Опубликовать сообщение" и больше ничего и вариантов на тему "сделать здесь что то не так" быть не может, ведь скрывание сообщения работает.

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

Кнопка скрытии темы находится в первом сообщении топика.

 

То есть скрываем первый пост в теме — скрывается вся тема и сообщения в этой теме, хоть и с hide_post=0 все равно будут скрыты.

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

Я как раз так и понял, но там была только кнопа "Скрыть сообщение", на кой тогда в макросах писали HIDE_TOPIC? Я спецально создал тему, в ней естественно только одно сообщение, но видно только кнопу Скрыть сообщение, а не Скрыть тему с этим сообщением.
Ссылка на комментарий
Поделиться на других сайтах

Зачем мне переставлять? :D Это лучше вы переставьте. Удалите все от прошлой версии и поставьте новую. В Topics.php я убрал функции, для показа одной из кнопок, просто внимательнее отнеситесь, вот и все ;)
Ссылка на комментарий
Поделиться на других сайтах

Я понял в чем глюк, оказывается не всегда первые сообщения темы имеют значение new_topic=1, с чем это связано пока не разбирался. Также нельзя скрывать Опросы, а не мешало бы.

А ещё чтобы скрытые темы в списке форума как то отличались, я им прописал другой css стиль в функции RenderRowHideTopic.

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

А ещё чтобы скрытые темы в списке форума как то отличались, я им прописал другой css стиль в функции RenderRowHideTopic.

Ну я написал в readme, что html для скрытых тем и сообщений можете настраивать на свой вкус и цвет.

Я понял в чем глюк, оказывается не всегда первые сообщения темы имеют значение new_topic=1, с чем это связано пока не разбирался.

У меня всегда :D

Также нельзя скрывать Опросы, а не мешало бы.

Да, что-то я забыл про это.

Да и не столь нужно я думаю.

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

Это не суть важно, лично у мну эти "Ваше сообщение отправлено, сейчас вы будете перенапрвлены в тему...." вообще удалены, это зло от которого надо избавляться всем.
Ссылка на комментарий
Поделиться на других сайтах

SHiSH, вечерком обновлю ридми — спасибо.

 

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

Угу, у меня тоже, давно вырезал функцию эту.

 

Убираем все редиректы из 1.3

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

  • 2 недели спустя...
$print->redirect_screen( $ibforums->lang['post_deleted'],

и так в каждом случае скрытия/опубликования

 

иправить надо а то у народа инфаркт может случиться :D

Jax

Ну это вообще плохое кино:

Во-первых:

Открыть:

lang_mod.php

 

Найти:

 

post_deleted			   => "Post deleted",

 

Ниже добавить:

 

post_hide			  => "Сообщение скрыто",
post_unhide			  => "Сообщение опубликовано",
topic_deleted		 => "Тема скрыта",
topic_undeleted	   => "Тема опубликована",

 

Да и во-вторых, зачем в Moderate.php нужно было в function hide_post() и оставшихся трех функциях делать это:

 

if ( $this->topic['state'] != "closed" )
			{
				$passed = 1;
			} 
else
			{
				$passed = 0;
			}

Закроет админ, супермод тему и захочет скрыть ее или скрыть в ней сообщение, а ему в ответ

$this->moderate_error();

Я удалил бы эти куски.

Ну и с учетом всего этого в Moderate.php добавляемые функции должны иметь вид:

 

function hide_post() {
			global $std, $ibforums, $DB, $print;

	$DB->query("SELECT p.pid, p.post_date, p.new_topic, m.mgroup
			FROM ibf_posts p, ibf_members m
			WHERE p.forum_id='".$this->forum['id']."' AND p.topic_id='".$this->topic['tid']."'
			and m.id=p.author_id and p.pid='".$ibforums->input['p']."'");

	if ( ! $post = $DB->fetch_row() )
	{
		$this->moderate_error();
	}

	$passed = 0;

	if ( $ibforums->member['g_is_supmod'] or $ibforums->vars['admin_group'])
	{
		$passed = 1;

	}


			//---------------------------------------
			// Vicer`овский мод кодов
			//---------------------------------------

	#################### Exclaim Tags mod #####################
			if (preg_match("#\<!--mod1-->(.+?)<!--emod1-->(.+?)<!--mod2-->(.+?)<!--emod2-->#is", $post['post']) &&
!(($ibforums->vars['post_ex_tags_type']==1 && $ibforums->member["g_mod"]) || ($ibforums->vars['post_ex_tags_type']==0 &&
(($this->moderator['mid'] != "" &&  $ibforums->member['id'] != 0) || $ibforums->member['g_is_supmod'] == 1)))) $passed = 0;
			if (preg_match("#\<!--excl1-->(.+?)<!--eexcl1-->(.+?)<!--excl2-->(.+?)<!--eexcl2-->#is", $post['post']) &&
!(($ibforums->vars['post_ex_tags_type']==1 && $ibforums->member["g_ex"]) || ($ibforums->vars['post_ex_tags_type']==0 &&
(($this->moderator['mid'] != "" &&  $ibforums->member['id'] != 0) || $ibforums->member['g_is_supmod'] == 1)))) $passed = 0;
#################### Exclaim Tags mod #####################
	if ( $passed != 1 )
	{
		$this->moderate_error();
	}

			//---------------------------------------
			// обновляем наш пост
			//---------------------------------------

			$DB->query("UPDATE ibf_posts SET hide_post='1' WHERE topic_id='".$this->topic['tid']."' and pid='".$post['pid']."'");

			//---------------------------------------
			// Пишем в логах
			//---------------------------------------

			$this->moderate_log("Скрытие сообщения");

			$print->redirect_screen( $ibforums->lang['post_hide'],
"act=ST&f=".$this->forum['id']."&t=".$this->topic['tid']."&st=".$ibforums->input['st'] );

	}




	function hide_post_back() {
			global $std, $ibforums, $DB, $print;

	$DB->query("SELECT p.pid, p.post_date, p.new_topic, m.mgroup
			FROM ibf_posts p, ibf_members m
			WHERE p.forum_id='".$this->forum['id']."' AND p.topic_id='".$this->topic['tid']."'
			and m.id=p.author_id and p.pid='".$ibforums->input['p']."'");

	if ( ! $post = $DB->fetch_row() )
	{
		$this->moderate_error();
	}

	$passed = 0;

	if ( $ibforums->member['g_is_supmod'] or $ibforums->vars['admin_group'])
	{
		$passed = 1;

	}


			//---------------------------------------
			// Vicer`овский мод кодов
			//---------------------------------------

	#################### Exclaim Tags mod #####################
			if (preg_match("#\<!--mod1-->(.+?)<!--emod1-->(.+?)<!--mod2-->(.+?)<!--emod2-->#is", $post['post']) &&
!(($ibforums->vars['post_ex_tags_type']==1 && $ibforums->member["g_mod"]) || ($ibforums->vars['post_ex_tags_type']==0 &&
(($this->moderator['mid'] != "" &&  $ibforums->member['id'] != 0) || $ibforums->member['g_is_supmod'] == 1)))) $passed = 0;
			if (preg_match("#\<!--excl1-->(.+?)<!--eexcl1-->(.+?)<!--excl2-->(.+?)<!--eexcl2-->#is", $post['post']) &&
!(($ibforums->vars['post_ex_tags_type']==1 && $ibforums->member["g_ex"]) || ($ibforums->vars['post_ex_tags_type']==0 &&
(($this->moderator['mid'] != "" &&  $ibforums->member['id'] != 0) || $ibforums->member['g_is_supmod'] == 1)))) $passed = 0;
#################### Exclaim Tags mod #####################
	if ( $passed != 1 )
	{
		$this->moderate_error();
	}

			//---------------------------------------
			// обновляем наш пост
			//---------------------------------------

			$DB->query("UPDATE ibf_posts SET hide_post='0' WHERE topic_id='".$this->topic['tid']."' and pid='".$post['pid']."'");

			//---------------------------------------
			// Пишем в логах
			//---------------------------------------

			$this->moderate_log("Публикация сообщения");

			$print->redirect_screen( $ibforums->lang['post_unhide'],
"act=ST&f=".$this->forum['id']."&t=".$this->topic['tid']."&st=".$ibforums->input['st'] );

	}



	function hide_topic() {
			global $std, $ibforums, $DB, $print;

	$DB->query("SELECT p.pid, p.post_date, p.new_topic, m.mgroup, t.hide_topic
			FROM ibf_posts p, ibf_members m, ibf_topics t
			WHERE p.forum_id='".$this->forum['id']."' AND p.topic_id='".$this->topic['tid']."'
			and m.id=p.author_id and p.pid='".$ibforums->input['p']."'");

	if ( ! $post = $DB->fetch_row() )
	{
		$this->moderate_error();
	}

	$passed = 0;

	if ( $ibforums->member['g_is_supmod'] or $ibforums->vars['admin_group'])
	{
		$passed = 1;

	}


			//---------------------------------------
			// Vicer`овский мод кодов
			//---------------------------------------

	#################### Exclaim Tags mod #####################
			if (preg_match("#\<!--mod1-->(.+?)<!--emod1-->(.+?)<!--mod2-->(.+?)<!--emod2-->#is", $post['post']) &&
!(($ibforums->vars['post_ex_tags_type']==1 && $ibforums->member["g_mod"]) || ($ibforums->vars['post_ex_tags_type']==0 &&
(($this->moderator['mid'] != "" &&  $ibforums->member['id'] != 0) || $ibforums->member['g_is_supmod'] == 1)))) $passed = 0;
			if (preg_match("#\<!--excl1-->(.+?)<!--eexcl1-->(.+?)<!--excl2-->(.+?)<!--eexcl2-->#is", $post['post']) &&
!(($ibforums->vars['post_ex_tags_type']==1 && $ibforums->member["g_ex"]) || ($ibforums->vars['post_ex_tags_type']==0 &&
(($this->moderator['mid'] != "" &&  $ibforums->member['id'] != 0) || $ibforums->member['g_is_supmod'] == 1)))) $passed = 0;
#################### Exclaim Tags mod #####################
	if ( $passed != 1 )
	{
		$this->moderate_error();
	}

			//---------------------------------------
			// обновляем наш пост
			//---------------------------------------

			$DB->query("UPDATE ibf_posts SET hide_post='1' WHERE topic_id='".$this->topic['tid']."' and pid='".$post['pid']."'");

			//---------------------------------------
			// обновляем наш топик
			//---------------------------------------

			$DB->query("UPDATE ibf_topics SET hide_topic='1' WHERE tid='".$this->topic['tid']."'");

			//---------------------------------------
			// Пишем в логах
			//---------------------------------------

			$this->moderate_log("Скрытие темы");

			$print->redirect_screen( $ibforums->lang['topic_deleted'],
"act=ST&f=".$this->forum['id']."&t=".$this->topic['tid']."&st=".$ibforums->input['st'] );

	}



	function hide_topic_back() {
			global $std, $ibforums, $DB, $print;

	$DB->query("SELECT p.pid, p.post_date, p.new_topic, m.mgroup, t.hide_topic
			FROM ibf_posts p, ibf_members m, ibf_topics t
			WHERE p.forum_id='".$this->forum['id']."' AND p.topic_id='".$this->topic['tid']."'
			and m.id=p.author_id and p.pid='".$ibforums->input['p']."'");

	if ( ! $post = $DB->fetch_row() )
	{
		$this->moderate_error();
	}

	$passed = 0;

	if ( $ibforums->member['g_is_supmod'] or $ibforums->vars['admin_group'])
	{
		$passed = 1;

	}


			//---------------------------------------
			// Vicer`овский мод кодов
			//---------------------------------------

	#################### Exclaim Tags mod #####################
			if (preg_match("#\<!--mod1-->(.+?)<!--emod1-->(.+?)<!--mod2-->(.+?)<!--emod2-->#is", $post['post']) &&
!(($ibforums->vars['post_ex_tags_type']==1 && $ibforums->member["g_mod"]) || ($ibforums->vars['post_ex_tags_type']==0 &&
(($this->moderator['mid'] != "" &&  $ibforums->member['id'] != 0) || $ibforums->member['g_is_supmod'] == 1)))) $passed = 0;
			if (preg_match("#\<!--excl1-->(.+?)<!--eexcl1-->(.+?)<!--excl2-->(.+?)<!--eexcl2-->#is", $post['post']) &&
!(($ibforums->vars['post_ex_tags_type']==1 && $ibforums->member["g_ex"]) || ($ibforums->vars['post_ex_tags_type']==0 &&
(($this->moderator['mid'] != "" &&  $ibforums->member['id'] != 0) || $ibforums->member['g_is_supmod'] == 1)))) $passed = 0;
#################### Exclaim Tags mod #####################
	if ( $passed != 1 )
	{
		$this->moderate_error();
	}

			//---------------------------------------
			// обновляем наш пост
			//---------------------------------------

			$DB->query("UPDATE ibf_posts SET hide_post='0' WHERE topic_id='".$this->topic['tid']."' and pid='".$post['pid']."'");
			$DB->query("UPDATE ibf_topics SET hide_topic='0' WHERE tid='".$this->topic['tid']."'");

			//---------------------------------------
			// Пишем в логах
			//---------------------------------------

			$this->moderate_log("Публикация темы");

			$print->redirect_screen( $ibforums->lang['topic_undeleted'],
"act=ST&f=".$this->forum['id']."&t=".$this->topic['tid']."&st=".$ibforums->input['st'] );

	}

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

  • 4 недели спустя...

вот не большой косячок нашёл

 

в скрытую тему по ссылке может попасть группа которая не имеет права видеть их

 

заменить в Topics.php

		if ( $std->check_perms($this->forum['read_perms']) == TRUE )
	{
		$return = 0;
	}

на

		if ( $std->check_perms($this->forum['read_perms']) == TRUE )
	{
		if ( ($this->topic['hide_topic'] == 1) AND ($ibforums->member['g_hide_post'] == 0) )
		{
			$return = 1;
		}
		else
		{
			$return = 0;
		}
	}

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

  • 1 месяц спустя...

Спасибо всем за замечания.

 

Есть еще один косяк, что закрытые темы скрыть нельзя, в том числе и посты в них :D Буду дома - посмотрю, если кому-то это вообще нужно.

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

  • 2 месяца спустя...

Да, нужно.

И еще вопрос: включены ли в ту версию, которая сейчас отдается из Архива, исправления из двух предыдущих сообщений в этой теме?

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

Хех, обнаружил злой косяк, скрытые сообщения таки можно увидеть и очень просто, пользователю достаточно открыть полную форму ответа и там отображаются последние n сообщений, в том числе и скрытые... +_+

Вообщем правиться skin_post.php и Post.php по аналогии с skin_topic.php и Topics.php

 

Находим в skin_post.php

function TopicSummary_body($data) {

выше вставляем

function TopicSummary_body_HidePost_for_all($data) {
global $ibforums;
return <<<EOF
EOF;
}

function TopicSummary_body_HidePost($data) {
global $ibforums;
return <<<EOF
 <tr>
<td class='row4' valign='top' width='20%'><b>{$data['author']}</b></td>
<td class='row4' valign='top' width='80%'>{$ibforums->lang['posted_on']} {$data['date']}</td>
 </tr>
 <tr>
<td class='hide_post' valign='top' width='20%'> </td>
<td class='hide_post' valign='top' width='80%'><span class='postcolor'>{$data['post']}</span></td>
 </tr>
EOF;
}

 

В Post.php находим

		//--------------------------------------------------------------
	// Get the posts
	// This section will probably change at some point
	//--------------------------------------------------------------

	$post_query = $DB->query("SELECT post, pid, post_date, author_id, author_name FROM ibf_posts WHERE topic_id=$topic_id and queued <> 1 ORDER BY pid DESC LIMIT 0,10");

заменяем на

		//--------------------------------------------------------------
	// Get the posts
	// This section will probably change at some point
	//--------------------------------------------------------------

	$post_query = $DB->query("SELECT post, pid, post_date, author_id, author_name, hide_post FROM ibf_posts WHERE topic_id=$topic_id and queued <> 1 ORDER BY pid DESC LIMIT 0,10");

находим

$this->output .= $this->html->TopicSummary_body( $row );

и заменяем на

if ($row['hide_post'] && $ibforums->member['g_hide_post'])
		{
			$this->output .= $this->html->TopicSummary_body_HidePost( $row );
		}
		else if (!$ibforums->member['g_hide_post'] && $row['hide_post'])
		{
			$this->output .= $this->html->TopicSummary_body_HidePost_for_all( $row );
		}
		else
		{
			$this->output .= $this->html->TopicSummary_body( $row );
		}

Усе вроде.

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

×
×
  • Создать...

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

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