query( 'CREATE TABLE IF NOT EXISTS `' . $bbdb->prefix . 'bbmodsuite_reports` ( `ID` int(10) NOT NULL auto_increment, `report_reason` varchar(32) NOT NULL default \'d41d8cd98f00b204e9800998ecf8427e\', `report_from` int(10) NOT NULL, `reported_post` int(10) NOT NULL, `report_content` text NOT NULL, `report_type` varchar(250) NOT NULL default \'new\', `resolved_by` int(10) NOT NULL default \'0\', `resolve_type` varchar(32) NOT NULL default \'d41d8cd98f00b204e9800998ecf8427e\', `resolve_content` text NOT NULL default \'\', `reported_at` datetime NOT NULL, `resolved_at` datetime, PRIMARY KEY (`ID`) )' ); if ( !$options = bb_get_option( 'bbmodsuite_report_options' ) ) { $types = array(); $types[md5( __( 'Offensive', 'bbpress-moderation-suite' ) )] = __( 'Offensive', 'bbpress-moderation-suite' ); $types[md5( __( 'Spam', 'bbpress-moderation-suite' ) )] = __( 'Spam', 'bbpress-moderation-suite' ); $types[md5( __( 'Abusive', 'bbpress-moderation-suite' ) )] = __( 'Abusive', 'bbpress-moderation-suite' ); $resolve_types = array(); $resolve_types[md5( __( 'Invalid', 'bbpress-moderation-suite' ) )] = __( 'Invalid', 'bbpress-moderation-suite' ); $resolve_types[md5( __( 'Post deleted', 'bbpress-moderation-suite' ) )] = __( 'Post deleted', 'bbpress-moderation-suite' ); $resolve_types[md5( __( 'Post edited', 'bbpress-moderation-suite' ) )] = __( 'Post edited', 'bbpress-moderation-suite' ); bb_update_option( 'bbmodsuite_report_options', $options = array( 'min_level' => 'moderate', 'max_level' => 'moderate', 'types' => $types, 'resolve_types' => $resolve_types, 'obtrusive' => true, 'version' => '0.1-beta2' ) ); } if ( !isset( $options['version'] ) || $options['version'] != '0.1-beta2' ) { switch ( isset( $options['version'] ) ? $options['version'] : false ) { case false: if ( !isset( $options['obtrusive'] ) ) $options['obtrusive'] = true; $bbdb->query( 'ALTER TABLE `' . $bbdb->prefix . 'bbmodsuite_reports` MODIFY `report_reason` varchar(32) NOT NULL default \'d41d8cd98f00b204e9800998ecf8427e\', MODIFY `resolve_type` varchar(32) NOT NULL default \'d41d8cd98f00b204e9800998ecf8427e\'' ); $report_types = array_keys( bbmodsuite_report_reasons() ); foreach ( $report_types as $old => $new ) $bbdb->update( $bbdb->prefix . 'bbmodsuite_reports', array( 'report_reason' => $new ), array( 'report_reason' => $old ) ); $resolve_types = array_keys( bbmodsuite_report_resolve_types() ); foreach ( $resolve_types as $old => $new ) $bbdb->update( $bbdb->prefix . 'bbmodsuite_reports', array( 'resolve_type' => $new ), array( 'resolve_type' => $old ) ); break; } $options['version'] = '0.1-beta2'; bb_update_option( 'bbmodsuite_report_options', $options ); } } function bbmodsuite_report_uninstall() { global $bbdb; $bbdb->query( 'DROP TABLE `' . $bbdb->prefix . 'bbmodsuite_reports`' ); bb_delete_option( 'bbmodsuite_report_options' ); } if ( !function_exists( 'add_action' ) && isset( $_GET['report'] ) ) { if ( file_exists( '../bb-load.php' ) ) require_once '../bb-load.php'; elseif ( file_exists( '../../bb-load.php' ) ) require_once '../../bb-load.php'; elseif ( file_exists( '../../../bb-load.php' ) ) require_once '../../../bb-load.php'; else exit( 'Fatal error.' ); if ( strtoupper( $_SERVER['REQUEST_METHOD'] ) === 'GET' ) { if ( !bb_verify_nonce( $_GET['_nonce'], 'bbmodsuite-report-' . $_GET['report'] ) ) bb_die( __( 'Invalid report', 'bbpress-moderation-suite' ) ); global $forums, $bb_post; $bb_post = bb_get_post( $_GET['report'] ); if ( $bb_post->post_status ) bb_die( __( 'Invalid report', 'bbpress-moderation-suite' ) ); function bbmodsuite_report_form_uri( $a, $b ) { if ( $b == 'bb-post.php' ) return str_replace( '\\', '/', substr( BB_PLUGIN_URL, 0, -1 ) . str_replace( realpath( BB_PLUGIN_DIR ), '', dirname( __FILE__ ) ) . '/' . basename( __FILE__ ) . '?report=' . $_GET['report'] ); return $a; } add_filter( 'bb_get_uri', 'bbmodsuite_report_form_uri', 10, 2 ); $forums = false; function bbmodsuite_report_form( $a, $b ) { if ( $b === 'post-form.php' ) { return $template = bb_get_template( 'report-form.php' ) ? $template : dirname( __FILE__ ) . '/report-form.php'; } return $a; } add_filter( 'bb_template', 'bbmodsuite_report_form', 10, 2 ); bb_get_header(); echo '
' . bb_get_option('name') . ' » ' . __( 'Report', 'bbpress-moderation-suite' ) . '
'; post_form(); bb_get_footer(); exit; } else { if ( !array_key_exists( $_POST['report_reason'], bbmodsuite_report_reasons() ) ) bb_die( __( 'Invalid report', 'bbpress-moderation-suite' ) ); $report_reason = $_POST['report_reason']; $report_content = htmlspecialchars( stripslashes( $_POST['report_content'] ) ); $reported_post = $_GET['report']; $report_from = bb_get_current_user_info( 'ID' ); $reported_at = bb_current_time( 'mysql' ); global $bbdb; $bbdb->insert( $bbdb->prefix . 'bbmodsuite_reports', compact( 'report_reason', 'report_content', 'reported_post', 'report_from', 'reported_at' ) ); bb_die( __( '

Your report was submitted. The moderation staff will review the post in question.

', 'bbpress-moderation-suite' ), __( 'Report Submitted', 'bbpress-moderation-suite' ) ); } } function bbpress_moderation_suite_report() { ?>

href=" 'bbpress_moderation_suite_report', 'page' => 'new_reports' ), BB_URI_CONTEXT_A_HREF + BB_URI_CONTEXT_BB_ADMIN ); ?>"> () | href=" 'bbpress_moderation_suite_report', 'page' => 'resolved_reports' ), BB_URI_CONTEXT_A_HREF + BB_URI_CONTEXT_BB_ADMIN ); ?>"> () | (#) | href=" 'bbpress_moderation_suite_report', 'page' => 'admin' ), BB_URI_CONTEXT_A_HREF + BB_URI_CONTEXT_BB_ADMIN ); ?>">
get_var( $bbdb->prepare( 'SELECT `ID` FROM `' . $bbdb->prefix . 'bbmodsuite_reports` WHERE `report_type`=\'new\' AND `ID`=%d', $_GET['report'] ) ); if ( !$report_id ) { ?>

update( $bbdb->prefix . 'bbmodsuite_reports', array( 'report_type' => 'resolved', 'resolve_content' => htmlspecialchars( trim( stripslashes( $_POST['resolve_content'] ) ) ), 'resolved_at' => bb_current_time( 'mysql' ), 'resolved_by' => bb_get_current_user_info( 'ID' ), 'resolve_type' => $_POST['resolve_type'] ), array( 'ID' => $report_id ) ) ) { ?>

get_results( 'SELECT ID, report_reason, report_from, reported_post, report_content, resolved_by, resolve_type, resolve_content FROM `' . $bbdb->prefix . 'bbmodsuite_reports` WHERE `report_type`=\'resolved\'' ); $reasons = bbmodsuite_report_reasons(); $resolve_types = bbmodsuite_report_resolve_types(); ?> 'resolve_reports', 'report' => $report->ID, 'plugin' => 'bbpress_moderation_suite_report', ), BB_URI_CONTEXT_A_HREF + BB_URI_CONTEXT_BB_ADMIN ), 'bbmodsuite-report-resolve_' . $report->ID ); ?> >
report_from ); ?> report_reason] ) ? $reasons[$report->report_reason] : $reasons['d41d8cd98f00b204e9800998ecf8427e']; ?> report_content ); ?> resolved_by ); ?> resolve_type] ) ? $resolve_types[$report->resolve_type] : $resolve_types['d41d8cd98f00b204e9800998ecf8427e']; ?> resolve_content ); ?>

/>

get_results( 'SELECT `ID`, `report_reason`, `report_from`, `reported_post`, `report_content` FROM `' . $bbdb->prefix . 'bbmodsuite_reports` WHERE `report_type`=\'new\'' ); $reasons = bbmodsuite_report_reasons(); ?> 'resolve_reports', 'report' => $report->ID, 'plugin' => 'bbpress_moderation_suite_report', ), BB_URI_CONTEXT_A_HREF + BB_URI_CONTEXT_BB_ADMIN ), 'bbmodsuite-report-resolve_' . $report->ID ); ?> >
report_from ); ?> report_reason] ) ? $reasons[$report->report_reason] : $reasons['d41d8cd98f00b204e9800998ecf8427e']; ?> report_content ); ?>
get_results( $bbdb->prepare( 'SELECT `reported_post` FROM `' . $bbdb->prefix . 'bbmodsuite_reports` WHERE `report_type` = %s', 'new' ) ); $reported_post_ids = array(); foreach ( $new_reports as $new_report ) { foreach ( $posts as $post ) { if ( $new_report->reported_post == $post->post_id ) $reported_post_ids[] = $new_report->reported_post; } } return '#post-' . implode( ' .threadpost, #post-', $reported_post_ids ) . ' .threadpost { background: none #900 !important; color: #fff !important; }'; } function bbmodsuite_report_css() { $options = bb_get_option( 'bbmodsuite_report_options' ); if ( !bb_current_user_can( $options['min_level'] ) || !bbmodsuite_report_count( 'new' ) ) return; echo ''; } add_action( 'bb_head', 'bbmodsuite_report_css' ); function bbmodsuite_report_reasons() { $options = bb_get_option( 'bbmodsuite_report_options' ); $reasons = $options['types']; if ( !is_array( $reasons ) ) { $reasons = explode( "\n", $reasons ); $reasons = array_values( array_filter( $reasons ) ); if ( count( $reasons ) ) $reasons = array_combine( array_map( 'md5', $reasons ), $reasons ); $options['types'] = $reasons; bb_update_option( 'bbmodsuite_report_options', $options ); } $reasons['d41d8cd98f00b204e9800998ecf8427e'] = __( 'Other', 'bbpress-moderation-suite' ); return $reasons; } function bbmodsuite_report_resolve_types() { $options = bb_get_option( 'bbmodsuite_report_options' ); $reasons = $options['resolve_types']; if ( !is_array( $reasons ) ) { $reasons = explode( "\n", $reasons ); $reasons = array_values( array_filter( $reasons ) ); if ( count( $reasons ) ) $reasons = array_combine( array_map( 'md5', $reasons ), $reasons ); $options['resolve_types'] = $reasons; bb_update_option( 'bbmodsuite_report_options', $options ); } $reasons['d41d8cd98f00b204e9800998ecf8427e'] = __( 'Other', 'bbpress-moderation-suite' ); return $reasons; } function bbmodsuite_report_header() { $options = bb_get_option( 'bbmodsuite_report_options' ); if ( !bb_current_user_can( $options['min_level'] ) ) return; $link = bb_get_uri( 'bb-admin/admin-base.php', array( 'page' => 'new_reports', 'plugin' => 'bbpress_moderation_suite_report', ), BB_URI_CONTEXT_A_HREF + BB_URI_CONTEXT_BB_ADMIN ); $number = bb_number_format_i18n( bbmodsuite_report_count( 'new' ) ); if ( $number == '0' ) return; if ( $number == '1' ) echo '

' . __( 'There is a new report waiting for you!', 'bbpress-moderation-suite' ) . '

'; else echo '

' . sprintf( __( 'There are %s new reports waiting for you!', 'bbpress-moderation-suite' ), $number ) . '

'; } add_action( 'bb_logged-in.php', 'bbmodsuite_report_header' ); function bbmodsuite_report_loggedin_header( $file ) { if ( substr( $file, -14 ) == '/logged-in.php' ) bbmodsuite_report_header(); return $file; } if ( version_compare( bb_get_option( 'version' ), '1.0dev', '<' ) ) add_filter( 'bb_template', 'bbmodsuite_report_loggedin_header' ); function bbmodsuite_report_count( $type = 'all' ) { global $bbdb; if ( false === $count = wp_cache_get( $type, 'bbmodsuite-report' ) ) { if ( $type == 'all' ) $count = $bbdb->get_var( 'SELECT COUNT(*) FROM `' . $bbdb->prefix . 'bbmodsuite_reports`' ); else $count = $bbdb->get_var( $bbdb->prepare( 'SELECT COUNT(*) FROM `' . $bbdb->prefix . 'bbmodsuite_reports` WHERE `report_type`=%s', $type ) ); wp_cache_add( $type, $count, 'bbmodsuite-report' ); } return $count; } function bbmodsuite_report_link( $parts, $args ) { $post_id = get_post_id(); if ( bb_current_user_can( 'participate' ) && !bb_current_user_can( 'delete_post', $post_id ) ) { $post_author_id = get_post_author_id( $post_id ); if ( class_exists( 'BP_User' ) ) $post_author = new BP_User( $post_author_id ); else $post_author = new WP_User( $post_author_id ); global $bbmodsuite_cache; $options = bb_get_option( 'bbmodsuite_report_options' ); if ( $post_author_id != bb_get_current_user_info( 'ID' ) && ( $options['max_level'] == 'none' || !$post_author->has_cap( $options['max_level'] ) ) ) { $title = __( 'Report this post to a moderator.', 'bbpress-moderation-suite' ); $href = str_replace( '\\', '/', substr( BB_PLUGIN_URL, 0, -1 ) . str_replace( realpath( BB_PLUGIN_DIR ), '', dirname( __FILE__ ) ) . '/' . basename( __FILE__ ) ); $parts['report'] = $args['before_each'] . '' . __( 'Report', 'bbpress-moderation-suite' ) . '' . $args['after_each']; } } return $parts; } add_filter( 'bb_post_admin', 'bbmodsuite_report_link', 10, 2 );