Vergleich inc/plugins/akismet.php - 1.4.1 - 1.4.5

  Keine Änderungen   Hinzugefügt   Modifiziert   Entfernt
Zeile 6Zeile 6
 * Website: http://www.mybboard.net
* License: http://www.mybboard.net/about/license
*

 * Website: http://www.mybboard.net
* License: http://www.mybboard.net/about/license
*

 * $Id: akismet.php 3995 2008-07-07 09:32:32Z Tikitiki $

 * $Id: akismet.php 4343 2009-04-09 05:36:29Z Tikitiki $

 */

// Disallow direct access to this file for security reasons

 */

// Disallow direct access to this file for security reasons

Zeile 52Zeile 52
	$lang->load("forum_akismet", false, true);

return array(

	$lang->load("forum_akismet", false, true);

return array(

		"name"			=> $lang->akismet,
"description" => $lang->akismet_desc,
"website" => "http://mybboard.net",
"author" => "MyBB Group",
"authorsite" => "http://mybboard.net",
"version" => "1.2",
"guid" => "e57a80dbe7ff85083596a1a3b7da3ce7",

		"name"          => $lang->akismet,
"description" => $lang->akismet_desc,
"website" => "http://mybboard.net",
"author" => "MyBB Group",
"authorsite" => "http://mybboard.net",
"version" => "1.2.1",
"guid" => "e57a80dbe7ff85083596a1a3b7da3ce7",

		"compatibility" => "14*",
);
}

		"compatibility" => "14*",
);
}

Zeile 82Zeile 82
 *
* function hello_is_installed()
* {

 *
* function hello_is_installed()
* {

 *		global $db;
* if($db->table_exists("hello_world"))
* {
* return true;
* }
* return false;

 *      global $db;
* if($db->table_exists("hello_world"))
* {
* return true;
* }
* return false;

 * }
*
* _uninstall():

 * }
*
* _uninstall():

Zeile 116Zeile 116
 * {
* }
*/

 * {
* }
*/

 

	

function akismet_install()
{
global $db, $mybb, $lang;

if($db->field_exists('akismetstopped', "users"))
{

function akismet_install()
{
global $db, $mybb, $lang;

if($db->field_exists('akismetstopped', "users"))
{

		$db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP akismetstopped"); 

		$db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP akismetstopped");

	}

// DELETE ALL SETTINGS TO AVOID DUPLICATES

	}

// DELETE ALL SETTINGS TO AVOID DUPLICATES

Zeile 141Zeile 141
	$rows = $db->fetch_field($query, "rows");

$insertarray = array(

	$rows = $db->fetch_field($query, "rows");

$insertarray = array(

		'name' => 'akismet', 
'title' => 'Akismet',
'description' => 'Options on how to configure and personalize Akismet',
'disporder' => $rows+1,

		'name' => 'akismet',
'title' => 'Akismet',
'description' => 'Options on how to configure and personalize Akismet',
'disporder' => $rows+1,

		'isdefault' => 0
);
$group['gid'] = $db->insert_query("settinggroups", $insertarray);

		'isdefault' => 0
);
$group['gid'] = $db->insert_query("settinggroups", $insertarray);

Zeile 182Zeile 182
		'gid' => $group['gid']
);
$db->insert_query("settings", $insertarray);

		'gid' => $group['gid']
);
$db->insert_query("settings", $insertarray);

		

	

	$insertarray = array(
'name' => 'akismetfidsignore',
'title' => 'Forums to Ignore',

	$insertarray = array(
'name' => 'akismetfidsignore',
'title' => 'Forums to Ignore',

Zeile 190Zeile 190
		'optionscode' => 'text',
'value' => '',
'disporder' => 3,

		'optionscode' => 'text',
'value' => '',
'disporder' => 3,

		'gid' => $group['gid']

		'gid' => $group['gid']

	);
$db->insert_query("settings", $insertarray);


	);
$db->insert_query("settings", $insertarray);


Zeile 220Zeile 220

rebuild_settings();
}


rebuild_settings();
}

 



function akismet_is_installed()
{
global $db;

function akismet_is_installed()
{
global $db;

Zeile 241Zeile 241
	
find_replace_templatesets("postbit", "#".preg_quote('{$post[\'button_spam\']}')."#i", '', 0);
find_replace_templatesets("postbit_classic", "#".preg_quote('{$post[\'button_spam\']}')."#i", '', 0);

	
find_replace_templatesets("postbit", "#".preg_quote('{$post[\'button_spam\']}')."#i", '', 0);
find_replace_templatesets("postbit_classic", "#".preg_quote('{$post[\'button_spam\']}')."#i", '', 0);

		

	

	$db->delete_query("templates", "title = 'akismet_postbit_spam'");

	$db->delete_query("templates", "title = 'akismet_postbit_spam'");

	

	

	find_replace_templatesets("postbit", "#".preg_quote('{$post[\'button_edit\']}')."#i", '{$post[\'button_spam\']}{$post[\'button_edit\']}');
find_replace_templatesets("postbit_classic", "#".preg_quote('{$post[\'button_edit\']}')."#i", '{$post[\'button_spam\']}{$post[\'button_edit\']}');

	find_replace_templatesets("postbit", "#".preg_quote('{$post[\'button_edit\']}')."#i", '{$post[\'button_spam\']}{$post[\'button_edit\']}');
find_replace_templatesets("postbit_classic", "#".preg_quote('{$post[\'button_edit\']}')."#i", '{$post[\'button_spam\']}{$post[\'button_edit\']}');

	

	

	$insert_array = array(
'title' => 'akismet_postbit_spam',
'template' => $db->escape_string('<a href="{$mybb->settings[\'bburl\']}/moderation.php?action=mark_as_spam&amp;pid={$post[\'pid\']}&amp;fid={$post[\'fid\']}"><img src="{$theme[\'imglangdir\']}/postbit_spam.gif" alt="{$lang->spam}" /></a>'),

	$insert_array = array(
'title' => 'akismet_postbit_spam',
'template' => $db->escape_string('<a href="{$mybb->settings[\'bburl\']}/moderation.php?action=mark_as_spam&amp;pid={$post[\'pid\']}&amp;fid={$post[\'fid\']}"><img src="{$theme[\'imglangdir\']}/postbit_spam.gif" alt="{$lang->spam}" /></a>'),

Zeile 254Zeile 254
		'version' => '',
'dateline' => TIME_NOW
);

		'version' => '',
'dateline' => TIME_NOW
);

	

	

	$db->insert_query("templates", $insert_array);

	$db->insert_query("templates", $insert_array);

	

	

	change_admin_permission('forum', 'akismet');
}

function akismet_deactivate()

	change_admin_permission('forum', 'akismet');
}

function akismet_deactivate()

{
global $db, $mybb;

include MYBB_ROOT."/inc/adminfunctions_templates.php";

{
global $db, $mybb;

include MYBB_ROOT."/inc/adminfunctions_templates.php";

	
find_replace_templatesets("postbit", "#".preg_quote('{$post[\'button_spam\']}')."#i", '', 0);
find_replace_templatesets("postbit_classic", "#".preg_quote('{$post[\'button_spam\']}')."#i", '', 0);

	
find_replace_templatesets("postbit", "#".preg_quote('{$post[\'button_spam\']}')."#i", '', 0);
find_replace_templatesets("postbit_classic", "#".preg_quote('{$post[\'button_spam\']}')."#i", '', 0);

Zeile 279Zeile 279
	global $db;

if($db->field_exists('akismetstopped', "users"))

	global $db;

if($db->field_exists('akismetstopped', "users"))

	{
$db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP akismetstopped");
}


	{
$db->write_query("ALTER TABLE ".TABLE_PREFIX."users DROP akismetstopped");
}


	// DELETE ALL SETTINGS TO AVOID DUPLICATES
$db->write_query("DELETE FROM ".TABLE_PREFIX."settings WHERE name IN(
'akismetswitch',

	// DELETE ALL SETTINGS TO AVOID DUPLICATES
$db->write_query("DELETE FROM ".TABLE_PREFIX."settings WHERE name IN(
'akismetswitch',

Zeile 299Zeile 299
function akismet_key()
{
global $installed, $mybb;

function akismet_key()
{
global $installed, $mybb;

	

	

	if($installed == false && $mybb->input['plugin'] == "akismet")
{
global $message;

	if($installed == false && $mybb->input['plugin'] == "akismet")
{
global $message;

		

	

		flash_message($message, 'success');
admin_redirect("index.php?module=config/settings&action=change&gid=".intval($mybb->akismet_insert_gid)."#row_setting_akismetapikey");
}

		flash_message($message, 'success');
admin_redirect("index.php?module=config/settings&action=change&gid=".intval($mybb->akismet_insert_gid)."#row_setting_akismetapikey");
}

 
}


function akismet_show_confirm_page()
{
global $mybb, $lang, $theme, $pid, $fid, $db, $headerinclude, $header, $footer;

$pid = intval($pid);
$fid = intval($fid);

$query = $db->simple_select("posts", "subject", "pid='{$pid}'", 1);
$post = $db->fetch_array($query);

if(!$post)
{
error("Invalid Post ID.");
}

output_page("<html>
<head>
<title>{$mybb->settings['bbname']} - {$lang->mark_as_spam}</title>
{$headerinclude}
</head>
<body>
{$header}
<form action=\"moderation.php\" method=\"post\">
<input type=\"hidden\" name=\"my_post_key\" value=\"{$mybb->post_code}\" />
<table border=\"0\" cellspacing=\"{$theme['borderwidth']}\" cellpadding=\"{$theme['tablespace']}\" class=\"tborder\">
<tr>
<td class=\"thead\" colspan=\"2\"><strong>{$post['subject']} - {$lang->mark_as_spam}</strong></td>
</tr>
<tr>
<td class=\"trow1\" colspan=\"2\" align=\"center\">{$lang->confirm_mark_as_spam}</td>
</tr>
{$loginbox}
</table>
<br />
<div align=\"center\"><input type=\"submit\" class=\"button\" name=\"submit\" value=\"{$lang->mark_as_spam}\" /></div>
<input type=\"hidden\" name=\"action\" value=\"mark_as_spam\" />
<input type=\"hidden\" name=\"pid\" value=\"{$pid}\" />
<input type=\"hidden\" name=\"fid\" value=\"{$fid}\" />
</form>
{$footer}
</body>
</html>");
exit;

}

function akismet_moderation_start()
{

}

function akismet_moderation_start()
{

	global $mybb, $db, $akismet, $lang, $cache;

	global $mybb, $db, $akismet, $lang, $cache, $fid, $pid;

	
if(!$mybb->settings['akismetswitch'] || $mybb->input['action'] != 'mark_as_spam')
{
return;

	
if(!$mybb->settings['akismetswitch'] || $mybb->input['action'] != 'mark_as_spam')
{
return;

	}

$lang->load("akismet", false, true);


	}

$lang->load("akismet", false, true);


	if(!$mybb->input['pid'])

	if(!$mybb->input['pid'])

	{

	{

		error("No Post ID specified.");

		error("No Post ID specified.");

	}

$pid = intval($mybb->input['pid']);


	}

$pid = intval($mybb->input['pid']);


	if(!$mybb->input['fid'])
{
error("No Forum ID specified.");

	if(!$mybb->input['fid'])
{
error("No Forum ID specified.");

	}

$fid = intval($mybb->input['fid']);


	}

$fid = intval($mybb->input['fid']);


	if(!is_moderator($fid))
{
error("No Permissions to do this action.");
}

	if(!is_moderator($fid))
{
error("No Permissions to do this action.");
}

	

	

	$query = $db->query("

	$query = $db->query("

		SELECT p.username, u.email, u.website, u.akismetstopped, p.message, p.ipaddress, p.tid, p.replyto, p.fid

		SELECT p.uid, p.username, u.email, u.website, u.akismetstopped, p.message, p.ipaddress, p.tid, p.replyto, p.fid, f.usepostcounts

		FROM ".TABLE_PREFIX."posts p
LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=p.uid)

		FROM ".TABLE_PREFIX."posts p
LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=p.uid)

 
		LEFT JOIN ".TABLE_PREFIX."forums f ON (f.fid=p.fid)

		WHERE p.pid = '{$pid}'
");
$post = $db->fetch_array($query);

		WHERE p.pid = '{$pid}'
");
$post = $db->fetch_array($query);

Zeile 350Zeile 397
	if(!$post)
{
error("Invalid Post ID.");

	if(!$post)
{
error("Invalid Post ID.");

	}









	}

if(!$mybb->input['my_post_key'] || $mybb->request_method != "post")
{
akismet_show_confirm_page();
}

verify_post_check($mybb->input['my_post_key']);


	$akismet_array = array(
'type' => 'post',
'username' => $post['username'],

	$akismet_array = array(
'type' => 'post',
'username' => $post['username'],

Zeile 368Zeile 422
		$snippit = "thread";
}
else

		$snippit = "thread";
}
else

	{

	{

		$db->update_query("posts", array('visible' => '-4'), "pid = '{$pid}'");
$snippit = "post";

		$db->update_query("posts", array('visible' => '-4'), "pid = '{$pid}'");
$snippit = "post";

	}

	}

	
if(!$akismet)
{

	
if(!$akismet)
{

Zeile 379Zeile 433
	}

$akismet->submit_spam();

	}

$akismet->submit_spam();

	
$unapprovedakismetthread = 0;
$unapprovedakismetpost = 0;



$numakismetthread = $numakismetpost = 0;



	if($snippit == "thread")
{
$query = $db->query("
SELECT p.uid, u.usergroup
FROM ".TABLE_PREFIX."posts p
LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=p.uid)

	if($snippit == "thread")
{
$query = $db->query("
SELECT p.uid, u.usergroup
FROM ".TABLE_PREFIX."posts p
LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=p.uid)

			WHERE tid = '{$post['tid']}'

			WHERE p.tid = '{$post['tid']}'

		");
while($post2 = $db->fetch_array($query))
{

		");
while($post2 = $db->fetch_array($query))
{

			if($mybb->settings['akismetuidsignore'])








			++$numakismetpost;

if($post['usepostcounts'] != 0)
{
$db->write_query("UPDATE ".TABLE_PREFIX."users SET postnum=postnum-1 WHERE uid = '{$post2['uid']}'");
}

if($mybb->settings['akismetuidsignore'])

			{
$akismet_uids_ignore = explode(',', $mybb->settings['akismetuidsignore']);

			{
$akismet_uids_ignore = explode(',', $mybb->settings['akismetuidsignore']);

				if(in_array($post2['usergroup'], $akismet_uids_ignore))

				if(in_array($post2['usergroup'], $akismet_uids_ignore) || is_super_admin($post2['uid']))

				{
continue;
}

				{
continue;
}

 
			}

if(is_super_admin($post2['uid']))
{
continue;

			}

$db->write_query("UPDATE ".TABLE_PREFIX."users SET akismetstopped=akismetstopped+1 WHERE uid = '{$post2['uid']}'");
$query1 = $db->simple_select("users", "akismetstopped", "uid = '{$post2['uid']}'");
$akismetstopped = $db->fetch_field($query1, 'akismetstopped');

			}

$db->write_query("UPDATE ".TABLE_PREFIX."users SET akismetstopped=akismetstopped+1 WHERE uid = '{$post2['uid']}'");
$query1 = $db->simple_select("users", "akismetstopped", "uid = '{$post2['uid']}'");
$akismetstopped = $db->fetch_field($query1, 'akismetstopped');

		

			

			// Check if the person should be banned
if($mybb->settings['akismetnumtillban'] > 0 && $akismetstopped >= $mybb->settings['akismetnumtillban'])
{
$banned_user = array(
"uid" => $post2['uid'],

			// Check if the person should be banned
if($mybb->settings['akismetnumtillban'] > 0 && $akismetstopped >= $mybb->settings['akismetnumtillban'])
{
$banned_user = array(
"uid" => $post2['uid'],

					"admin" => "Akismet",

					"admin" => 0,

					"gid" => 7,
"oldgroup" => $post2['usergroup'],
"dateline" => TIME_NOW,
"bantime" => 'perm',
"lifted" => 'perm',

					"gid" => 7,
"oldgroup" => $post2['usergroup'],
"dateline" => TIME_NOW,
"bantime" => 'perm',
"lifted" => 'perm',

					"reason" => "Automatically banned by the Akismet system for spamming."


					"reason" => "Automatically banned by the Akismet system for spamming.",
"oldadditionalgroups" => ''

				);
$db->insert_query("banned", $banned_user);


				);
$db->insert_query("banned", $banned_user);


Zeile 425Zeile 491
				
$cache->update_moderators();
}

				
$cache->update_moderators();
}

			
++$unapprovedakismetthread;
++$unapprovedakismetpost;

 
		}

		}

 
		
++$numakismetthread;

	}
else
{

	}
else
{

Zeile 444Zeile 509
			{
continue;
}

			{
continue;
}

 
		}

if(is_super_admin($post['uid']))
{
continue;

		}

// Check if the person should be banned
if($mybb->settings['akismetnumtillban'] > 0 && $akismetstopped >= $mybb->settings['akismetnumtillban'])

		}

// Check if the person should be banned
if($mybb->settings['akismetnumtillban'] > 0 && $akismetstopped >= $mybb->settings['akismetnumtillban'])

		{			

		{

			$banned_user = array(
"uid" => $post['uid'],

			$banned_user = array(
"uid" => $post['uid'],

				"admin" => "Akismet",

				"admin" => 0,

				"gid" => 7,
"oldgroup" => $usergroup,
"dateline" => TIME_NOW,
"bantime" => 'perm',
"lifted" => 'perm',

				"gid" => 7,
"oldgroup" => $usergroup,
"dateline" => TIME_NOW,
"bantime" => 'perm',
"lifted" => 'perm',

				"reason" => "Automatically banned by the Akismet system for spamming."


				"reason" => "Automatically banned by the Akismet system for spamming.",
"oldadditionalgroups" => ''

			);
$db->insert_query("banned", $banned_user);

$db->update_query("users", array('usergroup' => 7), "uid = '{$post['uid']}'");

$cache->update_moderators();

			);
$db->insert_query("banned", $banned_user);

$db->update_query("users", array('usergroup' => 7), "uid = '{$post['uid']}'");

$cache->update_moderators();

		}

++$unapprovedakismetthread;
++$unapprovedakismetpost;
}

update_thread_counters($post['tid'], array('unapprovedposts' => '-'.$unapprovedakismetpost));
update_forum_counters($post['fid'], array('unapprovedthreads' => $unapprovedakismetthread, 'unapprovedposts' => '-'.$unapprovedakismetpost));






		}

++$numakismetpost;

if($post['usepostcounts'] != 0)
{
$db->write_query("UPDATE ".TABLE_PREFIX."users SET postnum=postnum-1 WHERE uid = '{$post['uid']}'");
}
}

update_thread_counters($post['tid'], array('replies' => '-'.$numakismetpost));
update_forum_counters($post['fid'], array('threads' => '-'.$numakismetthread, 'posts' => '-'.$numakismetpost));


	if($snippit == "thread")
{
redirect("./forumdisplay.php?fid={$post['fid']}", $lang->thread_spam_success);

	if($snippit == "thread")
{
redirect("./forumdisplay.php?fid={$post['fid']}", $lang->thread_spam_success);

Zeile 488Zeile 563
	global $templates, $mybb, $theme, $lang;

if(!$mybb->settings['akismetswitch'] || !is_moderator($post['fid']))

	global $templates, $mybb, $theme, $lang;

if(!$mybb->settings['akismetswitch'] || !is_moderator($post['fid']))

 
	{
return;
}

if($mybb->settings['akismetuidsignore'])
{
$akismet_uids_ignore = explode(',', $mybb->settings['akismetuidsignore']);
if(in_array($usergroup, $akismet_uids_ignore))
{
return;
}
}

if(is_super_admin($post['uid']))

	{
return;
}

	{
return;
}

Zeile 498Zeile 587
}

function akismet_verify(&$post)

}

function akismet_verify(&$post)

{
global $mybb, $isspam, $akismet;

{
global $mybb, $isspam, $akismet;

	
if($isspam == true && $mybb->settings['akismetswitch'] == 1)
{

	
if($isspam == true && $mybb->settings['akismetswitch'] == 1)
{

Zeile 518Zeile 607
	
$exclude_array = explode(',', $mybb->settings['akismetuserstoignore']);


	
$exclude_array = explode(',', $mybb->settings['akismetuserstoignore']);


	if(!$mybb->settings['akismetswitch'] || in_array($mybb->user['uid'], $exclude_array))

	if(!$mybb->settings['akismetswitch'] || in_array($mybb->user['uid'], $exclude_array) || is_super_admin($mybb->user['uid']))

	{
return;
}

	{
return;
}

Zeile 539Zeile 628
		{
return;
}

		{
return;
}

	}	

	}

	
$akismet_array = array(
'type' => 'post',

	
$akismet_array = array(
'type' => 'post',

Zeile 570Zeile 659
		{
$banned_user = array(
"uid" => $mybb->user['uid'],

		{
$banned_user = array(
"uid" => $mybb->user['uid'],

				"admin" => "Akismet",

				"admin" => 0,

				"gid" => 7,
"oldgroup" => $mybb->user['usergroup'],
"dateline" => TIME_NOW,
"bantime" => 'perm',
"lifted" => 'perm',

				"gid" => 7,
"oldgroup" => $mybb->user['usergroup'],
"dateline" => TIME_NOW,
"bantime" => 'perm',
"lifted" => 'perm',

				"reason" => "Automatically banned by the Akismet system for spamming."


				"reason" => "Automatically banned by the Akismet system for spamming.",
"oldadditionalgroups" => ''

			);
$db->insert_query("banned", $banned_user);


			);
$db->insert_query("banned", $banned_user);


Zeile 599Zeile 689
		
// Fake visibility
// Essentially because you can't modify the $visible variable we need to trick it

		
// Fake visibility
// Essentially because you can't modify the $visible variable we need to trick it

	 	// into thinking its saving a draft so it won't modify the users lastpost and postcount

		// into thinking its saving a draft so it won't modify the users lastpost and postcount

		// In akismet_verify, its set back to -4 so we can still uniquely verify that this is a spam message
// before it's inserted into the database.
$post->data['savedraft'] = 1;

		// In akismet_verify, its set back to -4 so we can still uniquely verify that this is a spam message
// before it's inserted into the database.
$post->data['savedraft'] = 1;

Zeile 657Zeile 747
		}

$sub_menu[$key] = array('id' => 'akismet', 'title' => $lang->akismet, 'link' => "index.php?module=forum/akismet");

		}

$sub_menu[$key] = array('id' => 'akismet', 'title' => $lang->akismet, 'link' => "index.php?module=forum/akismet");

	}	

	}

}

function akismet_admin_permissions(&$admin_permissions)
{

}

function akismet_admin_permissions(&$admin_permissions)
{

  	global $db, $mybb;

if($mybb->settings['akismetswitch'] == 1)

	global $db, $mybb;

if($mybb->settings['akismetswitch'] == 1)

	{
global $lang;

	{
global $lang;

		

		

		$lang->load("forum_akismet", false, true);

$admin_permissions['akismet'] = $lang->can_manage_akismet;

		$lang->load("forum_akismet", false, true);

$admin_permissions['akismet'] = $lang->can_manage_akismet;

Zeile 681Zeile 771
	if($page->active_action != "akismet")
{
return;

	if($page->active_action != "akismet")
{
return;

	}


	}


	$page->add_breadcrumb_item($lang->akismet);


	$page->add_breadcrumb_item($lang->akismet);


	if($mybb->input['delete_all'])
{

	if($mybb->input['delete_all'] && $mybb->request_method == "post")
{

		// User clicked no
if($mybb->input['no'])

		// User clicked no
if($mybb->input['no'])

		{
admin_redirect("index.php?module=forum/akismet");

		{
admin_redirect("index.php?module=forum/akismet");

		}

		}

	

		

		if($mybb->request_method == "post")
{
// Delete the template
$db->delete_query("posts", "visible = '-4'");

		if($mybb->request_method == "post")
{
// Delete the template
$db->delete_query("posts", "visible = '-4'");

	

			

			// Log admin action
log_admin_action();

			// Log admin action
log_admin_action();

	

			

			flash_message($lang->success_deleted_spam, 'success');
admin_redirect("index.php?module=forum/akismet");
}
else

			flash_message($lang->success_deleted_spam, 'success');
admin_redirect("index.php?module=forum/akismet");
}
else

		{		

		{

			$page->output_confirm_action("index.php?module=forum/akismet&amp;delete_all=1", $lang->confirm_spam_deletion);
}
}


			$page->output_confirm_action("index.php?module=forum/akismet&amp;delete_all=1", $lang->confirm_spam_deletion);
}
}


	if($mybb->input['unmark'])

	if($mybb->input['unmark'] && $mybb->request_method == "post")

	{
$unmark = $mybb->input['akismet'];

	{
$unmark = $mybb->input['akismet'];

	

		

		if(empty($unmark))
{
flash_message($lang->error_unmark, 'error');

		if(empty($unmark))
{
flash_message($lang->error_unmark, 'error');

Zeile 721Zeile 811
		}

$posts_in = '';

		}

$posts_in = '';

 
		$comma = '';

		foreach($unmark as $key => $val)
{

		foreach($unmark as $key => $val)
{

			$posts_in .= $comma.$key;

			$posts_in .= $comma.intval($key);

			$comma = ',';
}

			$comma = ',';
}

		$comma = '';


		


		$query = $db->simple_select("posts", "pid, tid", "pid IN ({$posts_in}) AND replyto = '0'");
while($post = $db->fetch_array($query))
{

		$query = $db->simple_select("posts", "pid, tid", "pid IN ({$posts_in}) AND replyto = '0'");
while($post = $db->fetch_array($query))
{

Zeile 742Zeile 832
		$thread_list = implode(',', $threadp);

$query = $db->query("

		$thread_list = implode(',', $threadp);

$query = $db->query("

			SELECT p.tid, f.usepostcounts, p.uid, p.fid, p.dateline, t.lastpost, t.lastposter, t.lastposteruid, t.subject

			SELECT p.tid, f.usepostcounts, p.uid, p.fid, p.dateline, p.replyto, t.lastpost, t.lastposter, t.lastposteruid, t.subject

			FROM ".TABLE_PREFIX."posts p
LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid)
LEFT JOIN ".TABLE_PREFIX."forums f ON (f.fid=p.fid)

			FROM ".TABLE_PREFIX."posts p
LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid)
LEFT JOIN ".TABLE_PREFIX."forums f ON (f.fid=p.fid)

Zeile 750Zeile 840
		");
while($post = $db->fetch_array($query))
{

		");
while($post = $db->fetch_array($query))
{

			if($post['usepostcounts'] != 0)
{
$db->write_query("UPDATE ".TABLE_PREFIX."users SET postnum=postnum+1 WHERE uid = '{$post['uid']}'");
}

update_thread_counters($post['tid'], array('posts' => '+1'));


 
			// Fetch the last post for this forum

			// Fetch the last post for this forum

			$query = $db->query("

			$query2 = $db->query("

				SELECT tid, lastpost, lastposter, lastposteruid, subject
FROM ".TABLE_PREFIX."threads
WHERE fid='{$post['fid']}' AND visible='1' AND closed NOT LIKE 'moved|%'
ORDER BY lastpost DESC
LIMIT 0, 1
");

				SELECT tid, lastpost, lastposter, lastposteruid, subject
FROM ".TABLE_PREFIX."threads
WHERE fid='{$post['fid']}' AND visible='1' AND closed NOT LIKE 'moved|%'
ORDER BY lastpost DESC
LIMIT 0, 1
");

			$lastpost = $db->fetch_array($query);

			$lastpost = $db->fetch_array($query2);

			
if($post['lastpost'] > $lastpost['lastpost'])
{

			
if($post['lastpost'] > $lastpost['lastpost'])
{

Zeile 774Zeile 857
				$lastpost['lastposteruid'] = $post['lastposteruid'];
$lastpost['subject'] = $post['subject'];
$lastpost['tid'] = $post['tid'];

				$lastpost['lastposteruid'] = $post['lastposteruid'];
$lastpost['subject'] = $post['subject'];
$lastpost['tid'] = $post['tid'];

			}

// Fetch the number of threads and replies in this forum (Approved only)
$query = $db->query("
SELECT COUNT(*) AS threads, SUM(replies) AS replies
FROM ".TABLE_PREFIX."threads
WHERE fid='{$post['fid']}' AND visible='1' AND closed NOT LIKE 'moved|%'
");
$count = $db->fetch_array($query);
$count['posts'] = $count['threads'] + $count['replies'];


			}











			$update_count = array(

			$update_count = array(

				"posts" => intval($count['posts'])+1,
"threads" => intval($count['threads'])+1,

 
				"lastpost" => intval($lastpost['lastpost']),
"lastposter" => $db->escape_string($lastpost['lastposter']),
"lastposteruid" => intval($lastpost['lastposteruid']),
"lastposttid" => intval($lastpost['tid']),
"lastpostsubject" => $db->escape_string($lastpost['subject'])
);

				"lastpost" => intval($lastpost['lastpost']),
"lastposter" => $db->escape_string($lastpost['lastposter']),
"lastposteruid" => intval($lastpost['lastposteruid']),
"lastposttid" => intval($lastpost['tid']),
"lastpostsubject" => $db->escape_string($lastpost['subject'])
);

		

			

			$db->update_query("forums", $update_count, "fid='{$post['fid']}'");


			$db->update_query("forums", $update_count, "fid='{$post['fid']}'");


			$query = $db->query("
SELECT COUNT(*) AS replies
FROM ".TABLE_PREFIX."posts
WHERE tid='{$post['tid']}'
AND visible='1' OR pid = '{$post['pid']}'
");
$treplies = $db->fetch_field($query, 'replies');

$query = $db->query("

			$query2 = $db->query("









				SELECT u.uid, u.username, p.username AS postusername, p.dateline

				SELECT u.uid, u.username, p.username AS postusername, p.dateline

				FROM ".TABLE_PREFIX."posts p 

				FROM ".TABLE_PREFIX."posts p

				LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=p.uid)
WHERE p.tid='{$post['tid']}' AND p.visible='1' OR p.pid = '{$post['pid']}'
ORDER BY p.dateline DESC
LIMIT 1"
);

				LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=p.uid)
WHERE p.tid='{$post['tid']}' AND p.visible='1' OR p.pid = '{$post['pid']}'
ORDER BY p.dateline DESC
LIMIT 1"
);

			$lastpost = $db->fetch_array($query);

$query = $db->query("

			$lastpost = $db->fetch_array($query2);

$query2 = $db->query("

				SELECT u.uid, u.username, p.username AS postusername, p.dateline

				SELECT u.uid, u.username, p.username AS postusername, p.dateline

				FROM ".TABLE_PREFIX."posts p 

				FROM ".TABLE_PREFIX."posts p

				LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=p.uid)
WHERE p.tid='{$post['tid']}'
ORDER BY p.dateline ASC
LIMIT 0,1
");

				LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=p.uid)
WHERE p.tid='{$post['tid']}'
ORDER BY p.dateline ASC
LIMIT 0,1
");

			$firstpost = $db->fetch_array($query);

			$firstpost = $db->fetch_array($query2);

			
if(!$firstpost['username'])
{

			
if(!$firstpost['username'])
{

Zeile 839Zeile 903
				$lastpost['username'] = $firstpost['username'];
$lastpost['uid'] = $firstpost['uid'];
$lastpost['dateline'] = $firstpost['dateline'];

				$lastpost['username'] = $firstpost['username'];
$lastpost['uid'] = $firstpost['uid'];
$lastpost['dateline'] = $firstpost['dateline'];

			}	


			}


			$lastpost['username'] = $db->escape_string($lastpost['username']);
$firstpost['username'] = $db->escape_string($firstpost['username']);


			$lastpost['username'] = $db->escape_string($lastpost['username']);
$firstpost['username'] = $db->escape_string($firstpost['username']);


Zeile 848Zeile 912
			if($mybb->user['akismetstopped'] < 0)
{
$mybb->user['akismetstopped'] = 0;

			if($mybb->user['akismetstopped'] < 0)
{
$mybb->user['akismetstopped'] = 0;

			}

			}

			$db->update_query("users", array('akismetstopped' => $mybb->user['akismetstopped']), "uid='{$mybb->user['uid']}'");

			$db->update_query("users", array('akismetstopped' => $mybb->user['akismetstopped']), "uid='{$mybb->user['uid']}'");

			

			

			$update_array = array(
'username' => $firstpost['username'],
'uid' => intval($firstpost['uid']),
'lastpost' => intval($lastpost['dateline']),
'lastposter' => $lastpost['username'],
'lastposteruid' => intval($lastpost['uid']),

			$update_array = array(
'username' => $firstpost['username'],
'uid' => intval($firstpost['uid']),
'lastpost' => intval($lastpost['dateline']),
'lastposter' => $lastpost['username'],
'lastposteruid' => intval($lastpost['uid']),

				'replies' => $treplies

 
			);
$db->update_query("threads", $update_array, "tid='{$post['tid']}'");

			);
$db->update_query("threads", $update_array, "tid='{$post['tid']}'");

 
			
if($post['usepostcounts'] != 0)
{
$db->write_query("UPDATE ".TABLE_PREFIX."users SET postnum=postnum+1 WHERE uid = '{$post['uid']}'");
}

$newthreads = $newreplies = 0;

if($post['replyto'] == 0)
{
++$newthreads;
}
else
{
++$newreplies;
}

update_thread_counters($post['tid'], array('replies' => '+'.$newreplies));
update_forum_counters($post['fid'], array('threads' => '+'.$newthreads, 'posts' => '+1'));

		}

$approve = array(

		}

$approve = array(

Zeile 880Zeile 962
		admin_redirect("index.php?module=forum/akismet");
}


		admin_redirect("index.php?module=forum/akismet");
}


	if($mybb->input['delete'])

	if($mybb->input['delete'] && $mybb->request_method == "post")

	{
$deletepost = $mybb->input['akismet'];

	{
$deletepost = $mybb->input['akismet'];

	

		

		if(empty($deletepost))
{
flash_message($lang->error_deletepost, 'error');

		if(empty($deletepost))
{
flash_message($lang->error_deletepost, 'error');

Zeile 891Zeile 973
		}

$posts_in = '';

		}

$posts_in = '';

 
		$comma = '';

		foreach($deletepost as $key => $val)
{

		foreach($deletepost as $key => $val)
{

			$posts_in .= $comma.$key;

			$posts_in .= $comma.intval($key);

			$comma = ',';

			$comma = ',';

		}


		}


		$query = $db->simple_select("posts", "pid, tid", "pid IN ({$posts_in}) AND replyto = '0'");
while($post = $db->fetch_array($query))
{
$threadp[$post['pid']] = $post['tid'];

		$query = $db->simple_select("posts", "pid, tid", "pid IN ({$posts_in}) AND replyto = '0'");
while($post = $db->fetch_array($query))
{
$threadp[$post['pid']] = $post['tid'];

		}


		}


		if(!is_array($threadp))
{
$threadp = array();

		if(!is_array($threadp))
{
$threadp = array();

		}

require_once MYBB_ROOT."inc/functions_upload.php";

foreach($deletepost as $key => $val)

		}

require_once MYBB_ROOT."inc/functions_upload.php";

foreach($deletepost as $pid => $val)

		{

		{

			if(array_key_exists($key, $threadp))

			if(array_key_exists($pid, $threadp))

			{
$db->delete_query("posts", "pid IN ({$posts_in})");
$db->delete_query("attachments", "pid IN ({$posts_in})");

			{
$db->delete_query("posts", "pid IN ({$posts_in})");
$db->delete_query("attachments", "pid IN ({$posts_in})");

	

				

				// Get thread info

				// Get thread info

				$query = $db->simple_select("threads", "poll", "tid='{$threadp[".$key."]}'");

				$query = $db->simple_select("threads", "poll", "tid='".$threadp[$pid]."'");

				$poll = $db->fetch_field($query, 'poll');

				$poll = $db->fetch_field($query, 'poll');

		

				

				// Delete threads, redirects, favorites, polls, and poll votes

				// Delete threads, redirects, favorites, polls, and poll votes

				$db->delete_query("threads", "tid='{$threadp[".$key."]}'");
$db->delete_query("threads", "closed='moved|{$threadp[".$key."]}'");
$db->delete_query("favorites", "tid='{$threadp[".$key."]}'");
$db->delete_query("polls", "tid='{$threadp[".$key."]}'");
$db->delete_query("pollvotes", "pid='$poll'");

				$db->delete_query("threads", "tid='".$threadp[$pid]."'");
$db->delete_query("threads", "closed='moved|".$threadp[$pid]."'");
$db->delete_query("threadsubscriptions", "tid='".$threadp[$pid]."'");
$db->delete_query("polls", "tid='".$threadp[$pid]."'");
$db->delete_query("pollvotes", "pid='{$poll}'");

			}

// Remove attachments

			}

// Remove attachments

			remove_attachments($post['pid']);

			remove_attachments($pid);

			
// Delete the post

			
// Delete the post

			$db->delete_query("posts", "pid='{$post['pid']}'");

			$db->delete_query("posts", "pid='{$pid}'");

		}

// Log admin action

		}

// Log admin action

Zeile 944Zeile 1027
	}

if(!$mybb->input['action'])

	}

if(!$mybb->input['action'])

	{		

	{

		require MYBB_ROOT."inc/class_parser.php";
$parser = new postParser;


		require MYBB_ROOT."inc/class_parser.php";
$parser = new postParser;


		$page->output_header($lang->akismet);


		$page->output_header($lang->akismet);


		$form = new Form("index.php?module=forum/akismet", "post");

$table = new Table;
$table->construct_header($form->generate_check_box("checkall", 1, '', array('class' => 'checkall')), array('width' => '5%'));
$table->construct_header("Title / Username / Post", array('class' => 'align_center'));

		$form = new Form("index.php?module=forum/akismet", "post");

$table = new Table;
$table->construct_header($form->generate_check_box("checkall", 1, '', array('class' => 'checkall')), array('width' => '5%'));
$table->construct_header("Title / Username / Post", array('class' => 'align_center'));

		

		

		$mybb->input['page'] = intval($mybb->input['page']);

if($mybb->input['page'] > 0)

		$mybb->input['page'] = intval($mybb->input['page']);

if($mybb->input['page'] > 0)

Zeile 1007Zeile 1090
			$post['message'] = $parser->parse_message($post['message'], $parser_options);

$table->construct_cell($post['message'], array("colspan" => 2));

			$post['message'] = $parser->parse_message($post['message'], $parser_options);

$table->construct_cell($post['message'], array("colspan" => 2));

			$table->construct_row();
}

			$table->construct_row();
}

		
$num_rows = $table->num_rows();


		
$num_rows = $table->num_rows();


Zeile 1033Zeile 1116
		$form->output_submit_wrapper($buttons);

$form->end();

		$form->output_submit_wrapper($buttons);

$form->end();

	

		

		$page->output_footer();
}

exit;
}

		$page->output_footer();
}

exit;
}





/**

/**

 * This class is Copyright 2007 Ryan Gordon (Tikitiki)

 * This class is Copyright 2009 Ryan Gordon (Tikitiki)

 * Built to communicate with the akismet server
*/

 * Built to communicate with the akismet server
*/





class Akismet {

/**

class Akismet {

/**

Zeile 1060Zeile 1143
		'REMOTE_ADDR',
'HTTP_USER_AGENT'
);

		'REMOTE_ADDR',
'HTTP_USER_AGENT'
);

	
/**

	
/**

	 * The array of a post to validate against Akismet.
*
* @var array
*/
var $post = array();


	 * The array of a post to validate against Akismet.
*
* @var array
*/
var $post = array();


	/**

	/**

	 * The port to use to connect to the Akismet servers

	 * The port to use to connect to the Akismet servers

	 *

	 *

	 * @var integer
*/
var $port = 80;

/**
* The address to use to connect to the Akismet servers

	 * @var integer
*/
var $port = 80;

/**
* The address to use to connect to the Akismet servers

	 *
* @var string
*/

	 *
* @var string
*/

	var $host = "rest.akismet.com";

	var $host = "rest.akismet.com";





	/**
* The version of Akismet being used
*
* @var integer
*/
var $version = "1.1";

	/**
* The version of Akismet being used
*
* @var integer
*/
var $version = "1.1";





	/**
* The API key used to validate your use of Akismet
*
* @var string
*/
var $key = false;

	/**
* The API key used to validate your use of Akismet
*
* @var string
*/
var $key = false;


/**


/**

	 * The main page of your forum
*
* @var string

	 * The main page of your forum
*
* @var string

Zeile 1131Zeile 1214
		$this->api_key = $api_key;

$this->post = $post;

		$this->api_key = $api_key;

$this->post = $post;

		

		

		$this->format_post();

if(!isset($this->post['user_ip']))

		$this->format_post();

if(!isset($this->post['user_ip']))

Zeile 1184Zeile 1267
		}

// Good! The check failed; We're all good to go!

		}

// Good! The check failed; We're all good to go!

		return false;
}


		return false;
}


	/**
* Submits a spam post to the Akismet server

	/**
* Submits a spam post to the Akismet server

	 *

	 *

	 */
function submit_spam()
{

	 */
function submit_spam()
{

Zeile 1203Zeile 1286
	function submit_ham()
{
$this->fetch_response($this->build_query_string(), 'submit-ham');

	function submit_ham()
{
$this->fetch_response($this->build_query_string(), 'submit-ham');

	}


	}


	/**
* Validate a API Key against the Akismet server
*

	/**
* Validate a API Key against the Akismet server
*

Zeile 1222Zeile 1305
	
/**
* Formats the comment array to the Akismet API Standards

	
/**
* Formats the comment array to the Akismet API Standards

	 *

	 *

	 */

	 */

	function format_post() 

	function format_post()

	{
$format = array(
'type' => 'comment_type',

	{
$format = array(
'type' => 'comment_type',

Zeile 1235Zeile 1318
		);

// Basically we're assigning $long to the comment array if $short in the comment array, is not null

		);

// Basically we're assigning $long to the comment array if $short in the comment array, is not null

		foreach($format as $short => $long) 

		foreach($format as $short => $long)

		{

		{

			if(isset($this->post[$short])) 

			if(isset($this->post[$short]))

			{
$this->post[$long] = $this->post[$short];
unset($this->post[$short]);

			{
$this->post[$long] = $this->post[$short];
unset($this->post[$short]);

			}
}

			}
}

	}

/**

	}

/**

Zeile 1252Zeile 1335
	 */
function build_query_string()
{

	 */
function build_query_string()
{

		foreach($_SERVER as $key => $value) 

		foreach($_SERVER as $key => $value)

		{
if(in_array($key, $this->required))
{
if($key == 'REMOTE_ADDR')
{
$this->post[$key] = $this->post['user_ip'];

		{
if(in_array($key, $this->required))
{
if($key == 'REMOTE_ADDR')
{
$this->post[$key] = $this->post['user_ip'];

				} 
else

				}
else

				{
$this->post[$key] = $value;
}

				{
$this->post[$key] = $value;
}

Zeile 1281Zeile 1364
	 * Connects to the Akismet server
*
* @return boolean True on success.

	 * Connects to the Akismet server
*
* @return boolean True on success.

	 */

	 */

	function connect()
{
$this->connection = @fsockopen($this->host, 80);
if(!$this->connection)
{

	function connect()
{
$this->connection = @fsockopen($this->host, 80);
if(!$this->connection)
{

			$this->set_error("server_not_found");			

			$this->set_error("server_not_found");

			return false;
}


			return false;
}


Zeile 1335Zeile 1418
			
$http_response = explode("\r\n\r\n", $http_response, 2);
return $http_response[1];

			
$http_response = explode("\r\n\r\n", $http_response, 2);
return $http_response[1];

		} 
else

		}
else

		{
$this->set_error("response_failed");
return false;

		{
$this->set_error("response_failed");
return false;

Zeile 1349Zeile 1432
	 * Disconnects from the Akismet server
*
*/

	 * Disconnects from the Akismet server
*
*/

	function disconnect() 

	function disconnect()

	{
@fclose($this->connection);
}

	{
@fclose($this->connection);
}