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

[2.3.x]Удаление всех ПМ конкретного юзера


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

index.php?app=downloads&module=display&section=screenshot&id=169

Название: Удаление всех ПМ конкретного юзера

Добавил: Slimer

Добавлен: 02 Апр 2009

Обновлен: 03 Апр 2009

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

 

В связи с участившимися случаями спама через ПМ и ввиду бездействия поддержки от производителя пришлось написать небольшую приблуду.

 

Можно посмотреть и удалить все ПМ сообщения конкретного юзера.

 

версия 1.1

- при просмотре сообщений по ID теперь есть ссылка - удалить все сообщения

 

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

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

Напишите инструкцию по установке, ибо придут нубы и...

 

И версию точнее укажите.

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

Да какая уж там версия - пусть будет 1.0.

Установка такая - копируешь файлик в директорию /modules/

и запускаешь www.bla-bla.ru/forum/index.php?automodule=spam

Сначала покажет список наиболее активных ПМ-юзеров. Как правило у меня первый всегда спамер с несколькими десятками тысяч сообщений ))

Или тупо ИД можно ввести - если пришла жалоба от юзеров на спам и поглядеть что он там шлет.

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

Я имел в виду версию IPB, к которой это подходит.
Ссылка на комментарий
Поделиться на других сайтах

Насчет всех версий смело заявлено.

На 1.х, как и следовало ожидать, и вызов другой - index.php?act=module&module=spam - и все равно белая страница.

 

Если руки дойдут, перепишу под "однушку" :D

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

Я имел в виду версию IPB, к которой это подходит.

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

Подправил версии. Не уверен про 2.0. Кто-нибудь помнит, с модулями там все прокатит?

 

Если руки дойдут, перепишу под "однушку" :D

Собственно там все элементарно. Кто хоть немного соображает разберется. Смысл в двух запросах, которые неоднократно пролетали на форуме.

 

Из косяков - там запросы с префиксом таблиц по-умолчанию, у кого-то может не завестись - поправьте сами.

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

Смысл в двух запросах, которые неоднократно пролетали на форуме.

Чуть побольше.

Собственно, вот модуль для 1.2+

<?php
/*
+--------------------------------------------------------------------------
|   Invision Power Board v1.2 Module File
|   ========================================
|   by Matthew Mecham
|   © 2001 - 2003 Invision Power Services
|   [url="http://www.invisionpower.com"]http://www.invisionpower.com[/url]
|   ========================================
|   Web: [url="http://www.invisionboard.com"]http://www.invisionboard.com[/url]
|   Email: matt@invisionpower.com
|   Licence Info: [url="http://www.invisionboard.com/?license"]http://www.invisionboard.com/?license[/url]
+---------------------------------------------------------------------------
|   > Модуль от FatCat: очистка форума от спама в ПМ 
|   > с возможнстью одновременного удаления спамера
|   > За идею и 2 сложных запроса спасибо Slimer
|   > [url="http://www.ibresource.ru/forums/index.php?showtopic=57273"]http://www.ibresource.ru/forums/index.php?showtopic=57273[/url]
+--------------------------------------------------------------------------
*/

//=====================================
// Define class, this must be the same
// in all modules
//=====================================

class module extends module_loader
{

//=====================================
// Define vars if required
//=====================================

var $result = "";

//=====================================
// Constructer, called and run by IPB
//=====================================

function module()
{
	global $ibforums, $DB, $std;

	//=====================================
	// Do any set up here, like load lang
	// skin files, etc
	//=====================================

	$ibforums->lang = $std->load_words($ibforums->lang, 'lang_boards', $ibforums->lang_id);
       $this->html     = $std->load_template('skin_boards');

	//=====================================
	// Set up structure
	//=====================================

	switch( $ibforums->input['cmd'] )
	{
		case 'show':
			$this->show();
			break;
		case 'del':
			$this->del();
			break;
		case 'complete_del':
			$this->complete_del();
			break;
		default:
			$this->defaultdo();
			break;
	}
	print $this->result;
	exit();
}

function show()
{
	global $ibforums, $DB, $std;
	if ( $ibforums->member['mgroup'] == $ibforums->vars['admin_group'] )
	{
		$msges = "";
		$id = intval($ibforums->input['id']);
		$DB->query("SELECT name FROM ibf_members WHERE id = ".$id);
		$name = "";
		if ( $row = $DB->fetch_row() )
		{
			$name = $row['name'];
		}
		$DB->query("SELECT p.from_id, p.recipient_id, p.msg_date, p.title, p.message, m.name FROM ibf_messages p LEFT JOIN ibf_members m ON (p.recipient_id=m.id) WHERE from_id = ".$id." ORDER BY msg_date DESC LIMIT 20");
		while($row = $DB->fetch_row())
		{
			$msges .= "<tr><td valign=top>".date("d-m-Y H:i:s",$row['msg_date'])."</td><td valign=top>".$row['title']."</td><td>".$row['message']."</td><td>".$row['name']."</td></tr>";
			if ($msges == "")
			{
				$this->result = "У этого пользователя нет отправленных ПМ-сообщений";
			}
			else
			{
				$this->result = "<table width=90% border=1 cellspacing=0 cellpadding=7 align=center><tr><tr><td colspan=4>Последние 20 отправленных ПМ-сообщений пользователя <strong>".$name."</strong>     <a href='index.php?act=module&module=spam&cmd=del&id=".$id."'>Удалить все</a></td></tr><tr><tr><td colspan=4><hr width='100%' size='1'></td></tr><th>Дата</th><th>Заголовок</th><th>Текст</th><th>Получатель</th></tr>".$msges."</table>";
			}
		}
	}
	else
	{
		$this->result = "You're not an admin!";
	}
}

function del()
{
	global $ibforums, $DB, $std;
	if ( $ibforums->member['mgroup'] == $ibforums->vars['admin_group'] )
	{
		$id = intval($ibforums->input['id']);
		$DB->query("SELECT name FROM ibf_members WHERE id = ".$id);
		if ( $DB->get_num_rows() )
		{
			$row = $DB->fetch_row();
			$this->result = "<ul><li><a href='index.php?act=module&module=spam&cmd=complete_del&memd=0&id=".$id."'>Удалить все сообщения пользователя <strong>".$row['name']."</strong></a>?</li><li><a href='index.php?act=module&module=spam&cmd=complete_del&memd=1&id=".$id."'>Удалить все сообщения <strong>и самого пользователя ".$row['name']."</strong></a>?</li></ul>Внимание! Больше никаких предупреждений не будет!";
		}
		else
		{
			$this->result = "Пользователь не существует!<br><br>Если пользователь был некорректно удален, Вы можете <a href='index.php?act=module&module=spam&cmd=complete_del&memd=0&id=".$id."'>удалить оставшиеся после него сообщения</a> или <a href='index.php?act=module&module=spam'>выбрать других пользователей</a>.";
		}
	}
	else
	{
		$this->result = "You're not an admin!";
	}
}

function complete_del()
{
	global $ibforums, $DB, $std;
	if ( $ibforums->member['mgroup'] == $ibforums->vars['admin_group'] )
	{
		$id = intval($ibforums->input['id']);
		if($ibforums->input['memd'] == 1)
		{
			$this->result = "Удаляем сообщения и затем пользователя:<br>";
		}
		else
		{
			$this->result = "Удаляем сообщения:<br>";
		}
		$DB->query("SELECT msg_id FROM ibf_messages WHERE read_state = 0 AND from_id = ".$id);
		if ( $DB->get_num_rows() )
		{
			$recipients = Array();
			while($row = $DB->fetch_row())
			{
				$recipients[] = $row['msg_id'];
			}
			$recipients = implode(",",$recipients);
			$this->result .= "- Удаление оповещений о непрочитанных сообщениях ID's ".$recipients." ... ";
			$DB->query("UPDATE ibf_members SET new_msg = (new_msg-1), show_popup = '0' WHERE id IN(".$recipients.")");
			$this->result .= "удалены!<br>";
		}
		else
		{
			$recipients = "";
		}
		$this->result .= "- Удаление сообщений ... ";
		$DB->query("DELETE FROM ibf_messages WHERE from_id = ".$id);
		$DB->query("DELETE FROM ibf_contacts WHERE member_id='".$id."' or contact_id='".$id."'");
		$this->result .= "выполнено!";
		if($ibforums->input['memd'] == 1)
		{
			$this->result .= "- Удаление пользователя ... ";
			$DB->query("UPDATE ibf_posts SET author_id='0' WHERE author_id='".$id."'");
			$DB->query("UPDATE ibf_topics SET starter_id='0' WHERE starter_id='".$id."'");
			$DB->query("DELETE from ibf_members WHERE id='".$id."'");
			$DB->query("DELETE from ibf_pfields_content WHERE member_id='".$id."'");
			$DB->query("DELETE from ibf_member_extra WHERE id='".$id."'");
			$DB->query("DELETE from ibf_tracker WHERE member_id='".$id."'");
			$DB->query("DELETE from ibf_forum_tracker WHERE member_id='".$id."'");
			$DB->query("DELETE from ibf_warn_logs WHERE wlog_mid='".$id."'");
			$DB->query("DELETE FROM ibf_validating WHERE member_id='".$id."'");
			// Удаляем журнал (mJournal 1.05)
			$DB->query("DELETE FROM ibf_jposts WHERE author_id = '".$id."'");
			$DB->query("DELETE FROM ibf_jcomments WHERE owner_id = '".$id."'");
			$this->result .= "выполнено!";
		}
		$this->result .= "<br><br><br><a href='index.php?act=module&module=spam'>К началу</a>";
	}
	else
	{
		$this->result = "You're not an admin!";
	}
}

function defaultdo()
{
	global $ibforums, $DB, $std;

	if ( $ibforums->member['mgroup'] == $ibforums->vars['admin_group'] )
	{
		$msges = "";
		$this->result = "<table border=1 align=center><tr><td colspan=3 align=center><form method=get action=\"\"><input type=hidden name=cmd value=show><input type=hidden name=act value=module><input type=hidden name=module value=spam>ID юзера:<input type=text name=id size=5><input type=submit value=\"Посмотреть последние сообщения\"></form></td><tr><td colspan=3><hr width=100% size=1></td></tr><tr><th>Пользователь</th><th>Отправил</th><th>-</th></tr></tr>";
		$DB->query("select t.from_id, count(1) as num, m.name FROM ibf_messages t INNER JOIN ibf_members m ON (m.id=t.from_id) group by from_id order by num DESC LIMIT 20");
		while($row = $DB->fetch_row())
		{
			$msges .= "<tr><td><strong><a href='index.php?showuser=".$row['from_id']."' target='_blank'>".$row['name']."</a></strong></td><td>".$row['num']."</td><td><a href=index.php?act=module&module=spam&cmd=del&id=".$row['from_id'].">Удалить все</a> | <a href=index.php?act=module&module=spam&cmd=show&id=".$row['from_id'].">Посмотреть</a></td></tr>";
		}
		$this->result .= $msges;
		$this->result .= "</table>";
	}
	else
	{
		$this->result = "You're not an admin!";
	}
}
}
?>

 

Я скрутил-таки счетчики и убрал оповещение о новом ПМ для тех, кто еще не прочитал.

И сделал опциональное удаление пользователя вслед за удалением личных сообщений - чтобы лишний раз в админку не залезать.

Ну и так по мелочи чуть подрихтовал.

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

Из косяков - там запросы с префиксом таблиц по-умолчанию, у кого-то может не завестись - поправьте сами.

Драйвер БД должен сам исправлять это :D

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

Да какая уж там версия - пусть будет 1.0.

Установка такая - копируешь файлик в директорию /modules/

и запускаешь www.bla-bla.ru/forum/index.php?automodule=spam

Сначала покажет список наиболее активных ПМ-юзеров. Как правило у меня первый всегда спамер с несколькими десятками тысяч сообщений ))

Или тупо ИД можно ввести - если пришла жалоба от юзеров на спам и поглядеть что он там шлет.

 

как удалять то? не нашел ничего подобного!

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

как удалять то? не нашел ничего подобного!

Что удалять-то? Сам мод? Просто удали файл и забудь про него!

 

при чем тут мод. как удалять сообщения? захожу ввожу ID вижу сообщение некого пользователя а функции удалить нету

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

Ёлки, забыл прикрутить линк. Скачайте новую версию.

 

скачал. а толку? нажимаю "Удалить все сообщения" и с форума выходит на главную страницу сайта. то ли я тормоз, то ли не работает не понимаю...

 

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

 

http://сайт.ru/index.php?automodule=spam&a...ер_пользователя хотя должен быть http://сайт.ру/forum/index.php?automodule=...пользователя.... так что исправляй.

 

ладно, я себе сам исправил. но для остальных сделай.

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

А чё там править то?

найти

$this->nav		= array( "<a href='".$this->ipsclass->base_url."automodule=map'>".$this->page_title."</a>" );

заменить на

$this->nav		= array( "<a href='".$this->ipsclass->base_url."automodule=spam'>".$this->page_title."</a>" );

найти

$msges .= "<tr><td>".$row['name']."</td><td>".$row['num']."</td><td><a href=/index.php?automodule=spam&cmd=del&id=".$row['mt_from_id'].">Удалить все</a> | <a href=/index.php?automodule=spam&cmd=show&id=".$row['mt_from_id'].">Посмотреть</a></td></tr>";

и заменить на

$msges .= "<tr><td>".$row['name']."</td><td>".$row['num']."</td><td><a href=".$this->ipsclass->base_url."automodule=spam&cmd=del&id=".$row['mt_from_id'].">Удалить все</a> | <a href=".$this->ipsclass->base_url."automodule=spam&cmd=show&id=".$row['mt_from_id'].">Посмотреть</a></td></tr>";

 

найти

$this->output .= "<a href=/index.php?automodule=spam&cmd=del&id=".$id.">Удалить все сообщения</a><br><br><table width=100% border=1 cellspacing=0 cellpadding=7>";

заменить на

$this->output .= "<a href=".$this->ipsclass->base_url."automodule=spam&cmd=del&id=".$id.">Удалить все сообщения</a><br><br><table width=100% border=1 cellspacing=0 cellpadding=7>";

 

найти

$this->output .= "Вы уверены, что хотите удалить все <b>$num</b> сообщения от ".$row['name']." (".$id.")? <a href=/index.php?automodule=spam&cmd=jhdiuy23h&id=".$id.">ДА</a>";

заменить на

$this->output .= "Вы уверены, что хотите удалить все <b>$num</b> сообщения от ".$row['name']." (".$id.")? <a href=".$this->ipsclass->base_url."automodule=spam&cmd=jhdiuy23h&id=".$id.">ДА</a>";

вроде всё :D

p.s. А как добавить туда поле от кого сообщение?

p.p.s Лимит сообщений выводящихся изменяются в этой

строке

group by mt_from_id order by num DESC LIMIT 20

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

Не уверен про 2.0. Кто-нибудь помнит, с модулями там все прокатит?

 

У меня 2.0 на МКПортале - запускаю

 

...../index.php?automodule=spam

 

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

 

 

Немного вроде разобрался.

Надо в начале скрипта изменить в строке 48

function run_module()

на

function module()

 

 

 

тогда начинает запускаться.

 

но тогда пишет

Call to a member function query() on a non-object in

 

в строке 132

 

$result = $this->ipsclass->DB->query("select m.msg_post, m.msg_date, t.mt_title FROM ibf_message_topics t INNER JOIN ibf_message_text m ON (m.msg_id=t.mt_msg_id) WHERE msg_author_id=$id order by m.msg_date DESC LIMIT 20") or die("Query failed");

 

Чтобы это значило?

Похоже, что 2.0 не знает что такое ipsclass

Чем заменить?

 

+ + +

 

ХМ, по ходу тут вообще другой способ, придется весь скрипт переписывать...

 

+ + +

 

Короче, помучался 6 часов и получилась переделка. :D

У меня на 2.0 работает.

Наверное есть какие-то косяки, сильно не бейте ибо я в ПХП как свинья в апельсинах. ;)

А лучше - скорректируйте. :)

 

Не стал париться с переменной корневой папки. У меня стоит forums - кому надо, меняйте ручками, автозаменой

Да, и файлик надо назвать antispam.php

 

<?php
/*
+--------------------------------------------------------------------------
|   Invision Power Board v2.0 Module File
|   ========================================
|   by Matthew Mecham
|   (c) 2001 - 2003 Invision Power Services
|   http://www.invisionpower.com
|   ========================================
|   Web: http://www.invisionboard.com
|   Email: matt@invisionpower.com
|   Licence Info: http://www.invisionboard.com/?license
+---------------------------------------------------------------------------
|   > Example Module Loader File
|   > Module written by Matt Mecham
|   > Date started: 7th July 2003
|
+--------------------------------------------------------------------------
|   Антиспам ПМ для 2.0х
|   Настройки: 
|	  заменить при необходимости по тексту корневую папку (forums)
|	  файлик назвать antispam.php и поместить в папку modules
+=====================================
*/

//=====================================
// Define class, this must be the same
// in all modules
//=====================================

class module extends module_loader
{

//=====================================
// Define vars if required
//=====================================


var $class  = "";
var $module = "";
var $html   = "";

var $page_title = "";
var $nav = "";



//=====================================
// Constructer, called and run by IPB
//=====================================

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

	//=====================================
	// Do any set up here, like load lang
	// skin files, etc
	//=====================================

	$ibforums->lang = $std->load_words($ibforums->lang, 'lang_boards', $ibforums->lang_id);
		$this->html	 = $std->load_template('skin_boards');

	$page_title = "ПМ Антиспам";		
		$nav		= array( "<a href='/forums/index.php?automodule=antispam'>".$this->page_title."</a>" );

	//=====================================
	// Set up structure
	//=====================================


	switch( $ibforums->input['cmd'] )
	{

		case 'jhdiuy23h':
			$this->jhdiuy23h();
			break;

		case 'show':
			$this->show();
			break;

		case 'del':
			$this->del();
			break;

		case 'sortpmq':
			$this->sortpmq();
			break;

		default:
			$this->defaultdo();
			break;

	}



	$output .= "<br><br><br>";
	$print->add_output("$output");
	$print->do_output( array( 'TITLE' => $page_title, 'JS' => 1, NAV => $nav ) );

	exit();

}


function defaultdo()	
{

	global $ibforums, $DB, $std, $print;

		if ( $ibforums->member['mgroup'] == $ibforums->vars['admin_group'] )
	{

	$output = "<center><H2>ПМ Антиспам</H2><br><a href=/forums/index.php?automodule=antispam>Последние ПМ</a>  |  <a href=/forums/index.php?automodule=antispam&cmd=sortpmq>ПМ по количеству</a><br><br><hr><br></center>";
	$output .= "<form method=get action=\"\"><input type=hidden name=cmd value=show><input type=hidden name=automodule value=antispam>ID юзера:<input type=text name=id size=5><input type=submit value=\"Посмотреть последние сообщения\"></form><br><br><table width=100%>";

		$DB->query("select t.mt_from_id, count(1) as num, m.name FROM ibf_message_topics t INNER JOIN ibf_members m ON (m.id=t.mt_from_id) group by mt_from_id order by t.mt_date DESC LIMIT 200") or die("Query failed");

		while ($row = $DB->fetch_row())
		{
			$output .= "<tr><td>".$row['name']."</td><td>".$row['num']."</td><td><a href=/forums/index.php?automodule=antispam&cmd=del&id=".$row['mt_from_id'].">Удалить все</a> | <a href=/forums/index.php?automodule=antispam&cmd=show&id=".$row['mt_from_id'].">Посмотреть</a></td></tr>";
		}

			$output .= "</table>";
			$print->add_output("$output");

	}
		else
	{

		$output .= "Ну ты же не админ, дружище!!!";
		$print->add_output("$output");
	}
}

function sortpmq()	
{

	global $ibforums, $DB, $std, $print;

		if ( $ibforums->member['mgroup'] == $ibforums->vars['admin_group'] )
	{

	$output = "<center><H2>ПМ Антиспам</H2><br><a href=/forums/index.php?automodule=antispam>Последние ПМ</a>  |  <a href=/forums/index.php?automodule=antispam&cmd=sortpmq>ПМ по количеству</a><br><br><hr><br></center>";
	$output .= "<form method=get action=\"\"><input type=hidden name=cmd value=show><input type=hidden name=automodule value=antispam>ID юзера:<input type=text name=id size=5><input type=submit value=\"Посмотреть последние сообщения\"></form><br><br><table width=100%>";

		$DB->query("select t.mt_from_id, count(1) as num, m.name FROM ibf_message_topics t INNER JOIN ibf_members m ON (m.id=t.mt_from_id) group by mt_from_id order by num DESC LIMIT 200") or die("Query failed");

		while ($row = $DB->fetch_row())
		{
			$output .= "<tr><td>".$row['name']."</td><td>".$row['num']."</td><td><a href=/forums/index.php?automodule=antispam&cmd=del&id=".$row['mt_from_id'].">Удалить все</a> | <a href=/forums/index.php?automodule=antispam&cmd=show&id=".$row['mt_from_id'].">Посмотреть</a></td></tr>";
		}

			$output .= "</table>";
			$print->add_output("$output");

	}
		else
	{

		$output .= "Ну ты же не админ, дружище!!!";
		$print->add_output("$output");
	}
}

function show()	
{

	global $ibforums, $DB, $std, $print;

		if ( $ibforums->member['mgroup'] == $ibforums->vars['admin_group'] )
	{

		$id = intval($ibforums->input['id']);

		$msges = "";

	$output = "<center><H2>ПМ Антиспам</H2><br><a href=/forums/index.php?automodule=antispam>Последние ПМ</a>  |  <a href=/forums/index.php?automodule=antispam&cmd=sortpmq>ПМ по количеству</a><br><br><hr><br></center>";

		$DB->query("select distinct name FROM ibf_members where id=$id  ") or die("Query failed");

		$row = $DB->fetch_row();

		if ( $row['name'] == "" ) {
		$output .= "Пользователь с таким id не найден<br><br><br><br>";
		} else {
		$output .= "<H3>Сообщения от пользователя \"".$row['name']."\", id №   ".$id."</H3><br>";
		}


		$output .= "<a href=/forums/index.php?automodule=antispam&cmd=del&id=".$id.">Удалить все сообщения</a><br><br><table width=100% border=1 cellspacing=0 cellpadding=7>";

		$DB->query("select distinct m.msg_post, m.msg_date, t.mt_title FROM ibf_message_topics t INNER JOIN ibf_message_text m ON (m.msg_id=t.mt_msg_id) where msg_author_id=$id order by m.msg_date DESC LIMIT 200") or die("Query failed");

		while ($row = $DB->fetch_row())
		{
			$msges .= "<tr><td valign=top>".date("d-m-Y H:i:s",$row['msg_date'])."</td><td valign=top>".$row['mt_title']."</td><td>".$row['msg_post']."</td></tr>";
		}

		if ($msges == "")
		{
			$output .= "</table>";
			$output .= "У этого пользователя нет ПМ сообщений";
			$print->add_output("$output");
		} else {
			$output .= $msges;
			$output .= "</table>";
			$print->add_output("$output");
		}


	}
		else
	{

		$output .= "Ну ты же не админ, дружище!!!";
		$print->add_output("$output");
	}


}

function del()	
{

	global $ibforums, $DB, $std, $print;


		if ( $ibforums->member['mgroup'] == $ibforums->vars['admin_group'] )
	{

	$output = "<center><H2>ПМ Антиспам</H2><br><a href=/forums/index.php?automodule=antispam>Последние ПМ</a>  |  <a href=/forums/index.php?automodule=antispam&cmd=sortpmq>ПМ по количеству</a><br><br><hr><br></center>";
		$id = intval($ibforums->input['id']);

		$result = $DB->query("select * FROM ibf_members WHERE id=$id LIMIT 1") or die("Query failed");
		$row = $DB->fetch_row($result);

		$result = $DB->query("select msg_author_id FROM ibf_message_text WHERE msg_author_id=$id") or die("Query failed");
		$num = $DB->get_num_rows($result);

		$output .= "Вы уверены, что хотите удалить все <b>$num</b> сообщения от ".$row['name']." (".$id.")? <a href=/forums/index.php?automodule=antispam&cmd=jhdiuy23h&id=".$id.">ДА</a>";
		$print->add_output("$output");

	}
		else
	{
		$output .= "Ну ты же не админ, дружище!!!";
		$print->add_output("$output");
	}

}

function jhdiuy23h()
{

	global $ibforums, $DB, $std, $print;

		if ( $ibforums->member['mgroup'] == $ibforums->vars['admin_group'] )
	{

	$output = "<center><H2>ПМ Антиспам</H2><br><a href=/forums/index.php?automodule=antispam>Последние ПМ</a>  |  <a href=/forums/index.php?automodule=antispam&cmd=sortpmq>ПМ по количеству</a><br><br><hr><br></center>";
		$id = intval($ibforums->input['id']);

		$result = $DB->query("DELETE FROM ibf_message_topics where mt_from_id=$id") or die("Query failed");
		$result = $DB->query("delete FROM ibf_message_text where msg_author_id=$id") or die("Query failed");

		$output .= "УДАЛЕНО";
		$print->add_output("$output");


	}
		else
	{
		$output .= "Ну ты же не админ, дружище!!!";
		$print->add_output("$output");
	}

}


}


?>

 

* * *

 

Добавлена опция сортировки списка по времени отправки ПМ - чтобы можно было вовремя отследить новых спамеров.

В списке сообщений добавлен заголовок об отправителе -- имя и id

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

В связи с участившимися случаями спама через ПМ и ввиду бездействия поддержки от производителя пришлось написать небольшую приблуду.

 

Можно посмотреть и удалить все ПМ сообщения конкретного юзера.

Отличный мод, спасибо. Но есть несколько замечаний:

 

1. Просмотреть возможно только последние 20 писем юзера, даже если в коде DESC LIMIT 20 вместо 20 поставить 50, все равно выводиться только 20 писем. Надо как то разбить письма на страницы, если их больше 20.

 

2. Было бы неплохо (как тут уже говорилось) установить возможность удалять не все, а конкретные письма (поставив галочку перед теми, которые надо удалить).

 

3. Также было бы неплохо если бы указывалось кому адресовано письмо. (Почему выводятся письма, которые писал (отсылал) юзер, а не те, что находятся у него во входящих?)

 

Надеюсь наши пожелания будут приняты к сведению и мод будет доработан :D

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

moskovit

не-а.

не работает.

на главную страницу обратно вылетает.

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

Rainbowwolf

Честно говоря, мне сложно помочь дистантно. У меня 2.0.2, там все работает...

А корневая папка форума -- forums или другая? Если другая -- по всему скрипту изменена?

Файлик назван именно antispam.php?

 

Возможно, только одна функция не работает, можно попробовать другие команды:

 

 

http://www.yoursite.com/forums/index.php?automodule=antispam
http://www.yoursite.com/forums/index.php?automodule=antispam&cmd=sortpmq
http://www.yoursite.com/forums/index.php?automodule=antispam&cmd=show&id=2
http://www.yoursite.com/forums/index.php?automodule=antispam&cmd=del&id=2

 

Еще можно в папке модулей посмотреть на скрипт-пример mod_example.php, как там описана функция запуска модуля (40-50 строки)

поздний вариант -- function run_module()

или

ранний вариант function module()

 

мой вариант - ранний, унаследован с 1-й версии форума, топиковый - поздний. Соответственно, первый случай -- самый неприятный.

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

корневая папка другая.

изменена по всему скрипту.

скрипт назван именно так и закинут в верную папку.

функция запуска: function module()

 

при попытке запуска выбрасывает на главную страницу(т.е. на портал)

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

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

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

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