home *** CD-ROM | disk | FTP | other *** search
Wrap
<?php /*************************************************************************** * card.php * php Script needed for Yellow card mod (card ban/report mod) * * giving the rigth POST actions, this file can: * ban, unban, warn postes or report a post to the forums moderators * now also posible to block a user for limited time if "protect user account" mod is pressent * the moderators of the forum can have a email notification, * this can be controled in the ADMIN PANEL * * ------------------- * begin : Feb 05, 2002 * author : Niels Chr. R°d Denmark < ncr@db9.dk > * www : http://mods.db9.dk * email : ncr@db9.dk * * ver.1.4.14. * * History: * ver 0.9.0. - initial beta for RC-2 * ver 1.0.0. - initial release for RC-2 * ver 1.2.0. - initial release for phpBB2 ver 2.0.0. * ver 1.2.4. - history started, major rechange on how this file works, now uses POST action, for improved security * ver 1.2.5. - fixed that post report was send out evry time, regardless of the admin settings * ver 1.2.6. - allow admin to warn, ban outside a forum (e.g. in viewprofile/memberlist) * ver 1.2.7. - fixed that after ver 1.2.4. users was not banned when reatched the warn limit * ver 1.2.8. - fixed that the first post report was not sendt out * ver 1.2.9. - fixed a error that couses the "back" link not to work if not moderators * ver 1.3.0. - now posible to send PM to users if they are resiving cards / users can write a message to moderators easy * ver 1.3.1. - security update, this mod, now uses it own DB field, for counting warning cards * ver 1.3.2. - now also posible to post a report into a specific report forum (defined in admin panel) * ver 1.3.3. - fix some minor isues, regarding posting a report * ver 1.4.0. - security update * ver 1.4.1. - added block time, if protect useraccount mod is installed * ver 1.4.2. - users are now banned imidiatly if they are logged in same time as they are getting a red card * ver 1.4.3. - block email notification was not showing how long the user was blocked, now corrected * ver 1.4.5. - minor update * ver 1.4.6. - ver 1.4.1 introduced a bug, witch caused the ban email was not sendt out, this is now fixed * ver 1.4.7. - now compatible with admin panel, ban users panel * ver 1.4.8. - log ip of user witch have given block user card * ver 1.4.9. - ver 1.4.8. had a typo, witch is corrected * ver 1.4.10. - updated the RFC syntax in emails send out * ver 1.4.11. - fix that admin is allowed to give cards, outside viewtopic.php * ver 1.4.12. - replaced all RAPPORT and RAPORT with REPORT * ver 1.4.13. - fixed some isues about RY card * ver 1.4.14. - now uses 2.0.6. email format for subject * ***************************************************************************/ /*************************************************************************** * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * ***************************************************************************/ define('IN_PHPBB', true); // // Load default header // $phpbb_root_path = "./"; include($phpbb_root_path . 'extension.inc'); include($phpbb_root_path . 'common.'.$phpEx); // Find what we are to do $mode = ( isset($HTTP_POST_VARS['report_x']) ) ? 'report' : ((isset($HTTP_POST_VARS['report_reset_x']) ) ? 'report_reset' : ((isset($HTTP_POST_VARS['ban_x']) ) ? 'ban' : ((isset($HTTP_POST_VARS['unban_x']) ) ? 'unban' : ((isset($HTTP_POST_VARS['warn_x']) ) ? 'warn' : ((isset($HTTP_POST_VARS['block_x']) ) ? 'block' : '' ) ) ) ) ); $post_id = ( isset($HTTP_POST_VARS['post_id']) ) ? intval ($HTTP_POST_VARS['post_id']) : ''; $user_id = ( isset($HTTP_POST_VARS[POST_USERS_URL]) ) ? intval ($HTTP_POST_VARS[POST_USERS_URL]) : ''; // check that we have all what is needed to know if ( !( $post_id + $user_id ) ) message_die(GENERAL_ERROR, "No user/post specified", "", __LINE__, __FILE__,'post_id="'.$post_id.'", user_id="'.$user_id.'"'); if ( empty($mode) ) message_die(GENERAL_ERROR, "No action specified", "", __LINE__, __FILE__,'mode="'.$mode.'"'); $sql = 'SELECT DISTINCT forum_id, poster_id, post_bluecard FROM ' . POSTS_TABLE . ' WHERE post_id = "'.$post_id.'"'; if( !$result = $db->sql_query($sql) ) message_die(GENERAL_ERROR, "Couldn't obtain forums information.", "", __LINE__, __FILE__, $sql); $result = $db->sql_fetchrow($result); $blue_card = $result['post_bluecard']; if ( $post_id ) { // post mode $forum_id = $result['forum_id']; $poster_id = $result['poster_id']; } else if ( $user_id ) { //user mode //forum_id will control witch permission, when no post_id is given, and a user_id is given instead //disable the frum_id line will give no default access when no post_id is given // installe extra permission mod, in order to enable this feature // $forum_id = PAGE_CARD; $poster_id = $user_id; } $userdata = session_pagestart($user_ip, PAGE_CARD); init_userprefs($userdata); // // Start auth check // $is_auth = array(); $is_auth = auth(AUTH_ALL, $forum_id, $userdata); if ($mode=="report_reset") { if (! $is_auth['auth_mod']) message_die(GENERAL_ERROR, $lang['Not_Authorised']); $sql = 'SELECT pt.post_subject, f.forum_name FROM '.POSTS_TEXT_TABLE.' pt, '.POSTS_TABLE.' p, '.FORUMS_TABLE.' f WHERE pt.post_id="'.$post_id.'" AND p.post_id=pt.post_id AND p.forum_id=f.forum_id'; if( !$result = $db->sql_query($sql) ) message_die(GENERAL_ERROR, "Couldn't get post subject information".$sql); $subject = $db->sql_fetchrow($result); $post_subject=$subject['post_subject']; $forum_name=$subject['forum_name']; $sql = 'UPDATE ' . POSTS_TABLE . ' SET post_bluecard="0" WHERE post_id="'.$post_id.'"'; if( !$result = $db->sql_query($sql) ) message_die(GENERAL_ERROR, "Couldn't update blue card information"); message_die(GENERAL_MESSAGE, $lang['Post_reset']."<br /><br />". sprintf($lang['Click_return_viewtopic'], "<a href=\"" . append_sid("viewtopic.$phpEx?p=".$post_id."#".$post_id). "\">", "</a>")); } else if ($mode=="report") { if (!$is_auth['auth_bluecard']) { message_die(GENERAL_ERROR, $lang['Not_Authorised']); } $sql = 'SELECT f.forum_name, p.topic_id FROM '.POSTS_TABLE.' p, '.FORUMS_TABLE.' f WHERE p.post_id="'.$post_id.'" AND p.forum_id=f.forum_id'; if( !$result = $db->sql_query($sql) ) message_die(GENERAL_ERROR, "Couldn't get post subject information"); $post_details = $db->sql_fetchrow($result); $forum_name=$post_details['forum_name']; $topic_id=$post_details['topic_id']; $sql = 'SELECT pt.post_subject FROM '.POSTS_TEXT_TABLE.' pt, '.TOPICS_TABLE.' t WHERE t.topic_id="'.$topic_id.'" AND pt.post_id=t.topic_first_post_id'; if( !$result = $db->sql_query($sql) ) message_die(GENERAL_ERROR, "Couldn't get topic subject information".$sql); $post_details = $db->sql_fetchrow($result); $post_subject=$post_details['post_subject']; $sql = 'SELECT p.topic_id FROM '.POSTS_TEXT_TABLE.' pt, '.POSTS_TABLE.' p WHERE pt.post_subject="('.$post_id.')'.$post_subject.'" AND pt.post_id=p.post_id'; if( !$result = $db->sql_query($sql) ) message_die(GENERAL_ERROR, "Couldn't get topic subject information".$sql); $post_details = $db->sql_fetchrow($result); $allready_reported= ($blue_card) ? $post_details['topic_id'] : ''; $blue_card++; $sql = 'UPDATE ' . POSTS_TABLE . ' SET post_bluecard="'.$blue_card.'" WHERE post_id="'.$post_id.'"'; if( !$result = $db->sql_query($sql) ) message_die(GENERAL_ERROR, "Couldn't update blue card information"); // // Obtain list of moderators of this forum $sql = "SELECT g.group_name, u.username, u.user_email, u.user_lang FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE . " g, " . USERS_TABLE . " u WHERE aa.forum_id = $forum_id AND aa.auth_mod = " . TRUE . " AND ug.group_id = aa.group_id AND g.group_id = aa.group_id AND u.user_id = ug.user_id"; if( !$result_mods = $db->sql_query($sql) ) message_die(GENERAL_ERROR, "Couldn't obtain moderators information.", "", __LINE__, __FILE__, $sql); $total_mods = $db->sql_numrows($result_mods); $i=0; if (!$total_mods) message_die(GENERAL_MESSAGE, $lang['No_moderators']."<br /><br />". (($board_config['report_forum'])? sprintf($lang['Send_message'], "<a href=\"" . append_sid("posting.$phpEx?mode=".(($allready_reported)?"reply&t=".$allready_reported:"newtopic&f=".$board_config['report_forum'])."&postreport=".$post_id). "\">", "</a>"):""). sprintf($lang['Click_return_viewtopic'], "<a href=\"" . append_sid("viewtopic.$phpEx?p=".$post_id."#".$post_id). "\">", "</a>")); if (( $blue_card>=$board_config['bluecard_limit_2'] && (!(($blue_card-$board_config['bluecard_limit_2'])%$board_config['bluecard_limit']))) || $blue_card==$board_config['bluecard_limit_2']) { $mods_rowset = $db->sql_fetchrowset($result_mods); include($phpbb_root_path . 'includes/emailer.'.$phpEx); while ($i<$total_mods) { $script_name = preg_replace('/^\/?(.*?)\/?$/', '\1', trim($board_config['script_path'])). '/viewtopic.'.$phpEx; $server_name = trim($board_config['server_name']); $server_protocol = ( $board_config['cookie_secure'] ) ? 'https://' : 'http://'; $server_port = ( $board_config['server_port'] <> 80 ) ? ':' . trim($board_config['server_port']) . '/' : '/'; $emailer = new emailer($board_config['smtp_delivery']); $emailer->email_address($mods_rowset[$i]['user_email']); $email_headers = "To: \"".$mods_rowset[$i]['username']."\" <".$mods_rowset[$i]['user_email']. ">\r\n"; $email_headers .= "From: \"".$board_config['sitename']."\" <".$board_config['board_email'].">\r\n"; $email_headers .= "Return-Path: " . (($userdata['user_email']&&$userdata['user_viewemail'])? $userdata['user_email']."\r\n":"\r\n"); $email_headers .= "X-AntiAbuse: Board servername - " . $server_name . "\r\n"; $email_headers .= "X-AntiAbuse: User_id - " . $userdata['user_id'] . "\r\n"; $email_headers .= "X-AntiAbuse: Username - " . $userdata['username'] . "\r\n"; $email_headers .= "X-AntiAbuse: User IP - " . decode_ip($user_ip) . "\r\n"; $emailer->use_template("repport_post",(file_exists($phpbb_root_path . "language/lang_" . $mods_rowset[$i]['user_lang'] . "/email/repport_post.tpl"))?$mods_rowset[$i]['user_lang'] : ""); $i++; // $emailer->set_subject($lang['Post_repport']); $emailer->extra_headers($email_headers); $emailer->assign_vars(array( 'POST_URL' => $server_protocol . $server_name . $server_port . $script_name . '?' . POST_POST_URL . "=$post_id#$post_id", 'POST_SUBJECT' => $post_subject, 'FORUM_NAME' => $forum_name, 'USER' => '"'.$userdata['username'].'"', 'NUMBER_OF_REPPORTS' => $blue_card, 'SITENAME' => $board_config['sitename'], 'BOARD_EMAIL' => $board_config['board_email'])); $emailer->send(); $emailer->reset(); } } message_die(GENERAL_MESSAGE, (($total_mods)?sprintf($lang['Post_repported'],$total_mods):$lang['Post_repported_1'])."<br /><br />". (($board_config['report_forum'])? sprintf($lang['Send_message'], "<a href=\"" . append_sid("posting.$phpEx?mode=".(($allready_reported)?"reply&t=".$allready_reported:"newtopic&f=".$board_config['report_forum'])."&postreport=".$post_id). "\">", "</a>"):""). sprintf($lang['Click_return_viewtopic'], "<a href=\"" . append_sid("viewtopic.$phpEx?p=".$post_id."#".$post_id). "\">", "</a>")); } else if ( $mode == 'unban' ) { $no_error_ban=FALSE; if (! $is_auth['auth_greencard'] ) message_die(GENERAL_ERROR, $lang['Not_Authorised']); // look up the user $sql = 'SELECT user_active, user_warnings FROM ' . USERS_TABLE . ' WHERE user_id="'.$poster_id.'"'; if( !$result = $db->sql_query($sql) ) message_die(GENERAL_ERROR, "Couldn't obtain judge information.", "", __LINE__, __FILE__, $sql); $the_user = $db->sql_fetchrow($result); // remove the user from ban list $sql = 'DELETE FROM ' . BANLIST_TABLE . ' WHERE ban_userid="'.$poster_id.'"'; if (! $result = $db->sql_query($sql) ) message_die(GENERAL_ERROR, "Couldn't remove ban_userid info into database", "", __LINE__, __FILE__, $sql); // update the user table with new status $sql = 'UPDATE ' . USERS_TABLE . ' SET user_warnings="0" WHERE user_id="'.$poster_id.'"'; if(! $result = $db->sql_query($sql) ) message_die(GENERAL_ERROR, "Couldn't update user status information", "", __LINE__, __FILE__, $sql); $message = $lang['Ban_update_green']."<br /><br />". sprintf($lang['Send_PM_user'], "<a href=\"" . append_sid("privmsg.$phpEx?mode=post&u=$poster_id"). "\">", "</a>"); $e_temp="ban_reactivated"; // $e_subj=$lang['Ban_reactivate']; $no_error_ban=true; } else if ( $mode == 'ban' ) { $no_error_ban=FALSE; if (! $is_auth['auth_ban'] ) message_die(GENERAL_ERROR, $lang['Not_Authorised']); // look up the user $sql = 'SELECT user_active, user_level FROM ' . USERS_TABLE . ' WHERE user_id="'.$poster_id.'"'; if( !$result = $db->sql_query($sql) ) message_die(GENERAL_ERROR, "Couldn't obtain judge information.", "", __LINE__, __FILE__, $sql); $the_user = $db->sql_fetchrow($result); if ($the_user['user_level']== ADMIN ) message_die(GENERAL_ERROR, $lang['Ban_no_admin']); // insert the user in the ban list $sql = 'SELECT ban_userid FROM ' . BANLIST_TABLE . ' WHERE ban_userid="'.$poster_id.'"'; if( $result = $db->sql_query($sql) ) { if (!$db->sql_fetchrowset($result)) { // insert the user in the ban list $sql = "INSERT INTO " . BANLIST_TABLE . " (ban_userid) VALUES ($poster_id)"; if (!$result = $db->sql_query($sql) ) message_die(GENERAL_ERROR, "Couldn't insert ban_userid info into database", "", __LINE__, __FILE__, $sql); // update the user table with new status $sql = 'UPDATE ' . USERS_TABLE . ' SET user_warnings="'.$board_config['max_user_bancard'].'" WHERE user_id="'.$poster_id.'"'; if(! $result = $db->sql_query($sql) ) message_die(GENERAL_ERROR, "Couldn't update user status information", "", __LINE__, __FILE__, $sql); $sql = 'UPDATE ' . SESSIONS_TABLE . ' SET session_logged_in="0" WHERE session_user_id="'.$poster_id.'"'; if ( !$db->sql_query($sql) ) { message_die(GENERAL_ERROR, "Couldn't update banned sessions from database", "", __LINE__, __FILE__, $sql); } $no_error_ban=true; $message = $lang['Ban_update_red']; $e_temp="ban_block"; // $e_subj=$lang['Card_banned']; } else { $no_error_ban = true; $message = $lang['user_already_banned']; } } else message_die(GENERAL_ERROR, "Couldn't obtain banlist information", "", __LINE__, __FILE__, $sql); } else if ( $mode == 'block' ) { if (empty($board_config['block_time']) ) message_die(GENERAL_ERROR, "Protect user account mod not installed, this is required for this operation"); $no_error_ban=FALSE; if (! $is_auth['auth_ban'] ) message_die(GENERAL_ERROR, $lang['Not_Authorised']); // look up the user $sql = 'SELECT user_active, user_level FROM ' . USERS_TABLE . ' WHERE user_id="'.$poster_id.'"'; if( !$result = $db->sql_query($sql) ) message_die(GENERAL_ERROR, "Couldn't obtain judge information.", "", __LINE__, __FILE__, $sql); $the_user = $db->sql_fetchrow($result); if ($the_user['user_level']== ADMIN ) message_die(GENERAL_ERROR, $lang['Block_no_admin']); // update the user table with new status $sql = 'UPDATE ' . USERS_TABLE . ' SET user_block_by="'.$user_ip.'", user_blocktime="'.(time()+$board_config['RY_block_time']*60).'" WHERE user_id="'.$poster_id.'"'; if(! $result = $db->sql_query($sql) ) message_die(GENERAL_ERROR, "Couldn't update user status information", "", __LINE__, __FILE__, $sql); $sql = 'UPDATE ' . SESSIONS_TABLE . ' SET session_logged_in="0", session_user_id=".ANONYMOUS." WHERE session_user_id="'.$poster_id.'"'; if ( !$db->sql_query($sql) ) { message_die(GENERAL_ERROR, "Couldn't update blocked sessions from database", "", __LINE__, __FILE__, $sql); } $no_error_ban=true; $block_time = make_time_text ($board_config['RY_block_time']); $message = sprintf($lang['Block_update'],$block_time) . "<br /><br />". sprintf($lang['Send_PM_user'], "<a href=\"" . append_sid("privmsg.$phpEx?mode=post&u=$poster_id"). "\">", "</a>"); $e_temp="card_block"; // $e_subj=sprintf($lang['Card_blocked'],$block_time); } else if ( $mode == 'warn' ) { $no_error_ban=FALSE; if (! $is_auth['auth_ban'] ) message_die(GENERAL_ERROR, $lang['Not_Authorised']); // look up the user $sql = 'SELECT user_active, user_warnings, user_level FROM ' . USERS_TABLE . ' WHERE user_id="'.$poster_id.'"'; if( !$result = $db->sql_query($sql) ) message_die(GENERAL_ERROR, "Couldn't obtain judge information.", "", __LINE__, __FILE__, $sql); $the_user = $db->sql_fetchrow($result); if ($the_user['user_level']== ADMIN ) message_die(GENERAL_ERROR, $lang['Ban_no_admin']); //update the warning counter $sql = 'UPDATE ' . USERS_TABLE . ' SET user_warnings=user_warnings+1 WHERE user_id="'.$poster_id.'"'; if(! $result = $db->sql_query($sql) ) message_die(GENERAL_ERROR, "Couldn't update user status information", "", __LINE__, __FILE__, $sql); // se if the user are to be banned, if so do it ... if ($the_user['user_warnings']+1>=$board_config['max_user_bancard']) { $sql = 'SELECT ban_userid FROM ' . BANLIST_TABLE . ' WHERE ban_userid="'.$poster_id.'"'; if( $result = $db->sql_query($sql) ) { if (!$db->sql_fetchrowset($result)) { // insert the user in the ban list $sql = "INSERT INTO " . BANLIST_TABLE . " (ban_userid) VALUES ($poster_id)"; if (!$result = $db->sql_query($sql) ) message_die(GENERAL_ERROR, "Couldn't insert ban_userid info into database", "", __LINE__, __FILE__, $sql); // update the user table with new status $sql = 'UPDATE ' . SESSIONS_TABLE . ' SET session_logged_in="0" WHERE session_user_id="'.$poster_id.'"'; if ( !$db->sql_query($sql) ) { message_die(GENERAL_ERROR, "Couldn't update banned sessions from database", "", __LINE__, __FILE__, $sql); } $no_error_ban=true; $message = $lang['Ban_update_red']; $e_temp="ban_block"; // $e_subj=$lang['Ban_blocked']; } else { $no_error_ban = true; $message = $lang['user_already_banned']; } } else message_die(GENERAL_ERROR, "Couldn't obtain banlist information", "", __LINE__, __FILE__, $sql); } else { // the user shall not be baned this time, update the counter $message = sprintf($lang['Ban_update_yellow'],$the_user['user_warnings']+1,$board_config['max_user_bancard'])."<br /><br />". sprintf($lang['Send_PM_user'], "<a href=\"" . append_sid("privmsg.$phpEx?mode=post&u=$poster_id"). "\">", "</a>"); $no_error_ban=true; $e_temp="ban_warning"; // $e_subj=$lang['Ban_warning']; } } if ($no_error_ban) { $sql = 'SELECT username, user_warnings, user_email, user_lang FROM ' . USERS_TABLE . ' WHERE user_id="'.$poster_id.'"'; if( !$result = $db->sql_query($sql) ) message_die(GENERAL_ERROR, "Couldn't find the users personal information", "", __LINE__, __FILE__, $sql); $warning_data=$db->sql_fetchrow($result); if (!empty($warning_data['user_email'])) { include($phpbb_root_path . 'includes/emailer.'.$phpEx); $script_name = preg_replace('/^\/?(.*?)\/?$/', '\1', trim($board_config['script_path'])). '/viewtopic.'.$phpEx; $server_name = trim($board_config['server_name']); $server_protocol = ( $board_config['cookie_secure'] ) ? 'https://' : 'http://'; $server_port = ( $board_config['server_port'] <> 80 ) ? ':' . trim($board_config['server_port']) . '/' : '/'; $emailer = new emailer($board_config['smtp_delivery']); $email_headers = "TO: '".$warning_data['username']."' <".$warning_data['user_email']. ">\r\n"; $email_headers .= ($userdata['user_email'] && $userdata['user_viewemail']) ? "FROM: \"".$userdata['username']."\" <".$userdata['user_email'].">\r\n" : "FROM: \"".$board_config['sitename']."\" <" .$board_config['board_email'] . ">\r\n"; $emailer->use_template($e_temp, stripslashes($warning_data['user_lang'])); $emailer->email_address($warning_data['user_email']); // $emailer->set_subject($e_subj); $emailer->extra_headers($email_headers); $emailer->assign_vars(array( 'SITENAME' => $board_config['sitename'], 'WARNINGS' => $warning_data['user_warnings'], 'TOTAL_WARN' => $board_config['max_user_bancard'], 'POST_URL' => $server_protocol . $server_name . $server_port . $script_name . '?' . POST_POST_URL . "=$post_id#$post_id", 'EMAIL_SIG' => str_replace("<br />", "\n", "-- \n" . $board_config['board_email_sig']), 'WARNER' => $userdata['username'], 'BLOCK_TIME' => $block_time, 'WARNED_POSTER' => $warning_data['username']) ); // if ($e_subj) // { $emailer->send(); // } $emailer->reset(); } else { $message .= "<br/><br/>".$lang['user_no_email']; } } else { $message = 'Error card.php file'; } $message .= ( $post_id != '-1' ) ? "<br /><br />". sprintf($lang['Click_return_viewtopic'], "<a href=\"" . append_sid("viewtopic.$phpEx?p=".$post_id."#".$post_id). "\">", "</a>"):"<br /><br />". sprintf($lang['Click_return_index'], "<a href=\"" . append_sid("index.".$phpEx). "\">", "</a>"); message_die(GENERAL_MESSAGE, $message); include($phpbb_root_path . 'includes/page_tail.'.$phpEx); ?>