'', 'min_level' => 'moderate', 'cron_every' => 604800, 'expire_time' => 7776000, 'ban' => array() ) ); $bbmodsuite_cache['warning'] = array( 'types' => '', 'min_level' => 'moderate', 'cron_every' => 604800, 'expire_time' => 7776000, 'ban' => array() ); return; } $change = false; if ( !isset( $options['ban'] ) ) { $options['ban'] = array(); $change = true; } if ( $change ) bb_update_option( 'bbmodsuite_warning_options', $options ); } function bbmodsuite_warning_uninstall() { global $bbdb; $bbdb->query( "DELETE FROM `{$bbdb->usermeta}` WHERE `meta_key`='bbmodsuite_warnings' OR `meta_key`='bbmodsuite_warnings_count'" ); bb_delete_option( 'bbmodsuite_warning_options' ); } function bbmodsuite_warning_init() { global $bbmodsuite_cache; if ( empty( $bbmodsuite_cache['warning'] ) ) $bbmodsuite_cache['warning'] = bb_get_option( 'bbmodsuite_warning_options' ); } add_action( 'bbmodsuite_init', 'bbmodsuite_warning_init' ); function bbmodsuite_warning_cron() { global $bbdb, $bbmodsuite_cache; $options = $bbmodsuite_cache['warning']; $the_warnings = $bbdb->get_results( "SELECT `user_id`, `meta_value` FROM `{$bbdb->usermeta}` WHERE `meta_key`='bbmodsuite_warnings'" ); $now = time(); $all_warnings = array(); foreach ( $the_warnings as $warnings ) { $all_warnings[$warnings->user_id] = unserialize( $warnings->meta_value ); } foreach ( $all_warnings as $i => $warnings ) { foreach ( $warnings as $j => $warning ) { if ( $warning['date'] < $now - $options['expire_time'] ) unset( $warnings[$j] ); } if ( $all_warnings[$i] !== $warnings ) { $warnings = array_values( $warnings ); bbmodsuite_warning_update_user_ban( $i, count( $warnings ), true ); bb_update_usermeta( $i, 'bbmodsuite_warnings', $warnings ); bb_update_usermeta( $i, 'bbmodsuite_warnings_count', count( $warnings ) ); } } wp_schedule_single_event( time() + $options['cron_every'], 'bbmodsuite_warning_cron' ); } add_action( 'bbmodsuite_warning_cron', 'bbmodsuite_warning_cron' ); function bbmodsuite_warning_update_user_ban( $user_id, $warning_count, $cron = false ) { if ( !$user_id = bb_get_user_id( $user_id ) ) return; if ( !function_exists( 'bbmodsuite_banplus_set_ban' ) ) return; $ban = 0; if ( $warning_count ) { global $bbmodsuite_cache; $options = $bbmodsuite_cache['warning']; foreach ( $options['ban'] as $_ban ) { if ( $_ban['at'] <= $warning_count ) $ban = $_ban; } } if ( $ban['at'] === $warning_count && $cron === false ) return bbmodsuite_banplus_set_ban( $user_id, 'temp', $ban['length'] * $ban['multiplier'], __( 'Automated ban from Warning moderation helper', 'bbpress-moderation-suite' ) ); return true; } function bbmodsuite_warning_link( $parts ) { global $bbmodsuite_cache; $options = $bbmodsuite_cache['warning']; if ( bb_current_user_can( $options['min_level'] ) ) { $post_id = get_post_id(); $user_id = get_post_author_id( $post_id ); if ( class_exists( 'BP_User' ) ) $user = new BP_User( $user_id ); else $user = new WP_User( $user_id ); if ( $user_id !== bb_get_current_user_info( 'ID' ) && ( bb_current_user_can( 'use_keys' ) || ( !$user->has_cap( 'administrate' ) && bb_current_user_can( 'administrate' ) ) || ( !$user->has_cap( 'moderate' ) && bb_current_user_can( 'moderate' ) ) ) ) { $title = __( 'Give this user a warning.', 'bbpress-moderation-suite' ); $link = attribute_escape( bb_nonce_url( bb_get_uri( 'bb-admin/admin-base.php', array( 'page' => 'warn_user', 'user' => $user_id, 'post' => $post_id, 'plugin' => 'bbpress_moderation_suite_warning', ), BB_URI_CONTEXT_A_HREF + BB_URI_CONTEXT_BB_ADMIN ), 'bbmodsuite-warning-warn_' . $user_id . '_' . $post_id ) ); $parts[] = '' . __( 'Warn', 'bbpress-moderation-suite' ) . ''; } } return $parts; } add_filter( 'bb_post_admin', 'bbmodsuite_warning_link' ); function bbmodsuite_warning_types() { global $bbmodsuite_cache; $options = $bbmodsuite_cache['warning']; $types = explode( "\n", ".\n" . $options['types'] ); $types = array_filter( $types ); unset( $types[0] ); return $types; } function bbmodsuite_warning_admin_css() { ?> bb_get_current_user_info( 'ID' ), 'type' => $warn_type, 'date' => time(), 'notes' => bb_autop( htmlspecialchars( trim( $_POST['warn_content'] ) ) ), 'post' => $_GET['post'], ); bbmodsuite_warning_update_user_ban( $_GET['user'], count( $warnings ) ); bb_mail( bb_get_user_email( $_GET['user'] ), 'Warning', htmlspecialchars( trim( $_POST['warn_content'] ) ) ); bb_update_usermeta( $_GET['user'], 'bbmodsuite_warnings', $warnings ); bb_update_usermeta( $_GET['user'], 'bbmodsuite_warnings_count', count( $warnings ) ); ?>

$_GET['post'], 'post_author' => $_GET['user'] ) ); $GLOBALS['bb_posts'] =& $post_query->results; bb_admin_list_posts(); ?>

will be shown to the user.', 'bbpress-moderation-suite' ); ?>

$the_ban ) { $the_ban = (int)$the_ban; if ( !$the_ban ) continue; $ban_at = (int)$_POST['banat'][$i]; if ( !$ban_at || isset( $ban[$ban_at] ) ) continue; $mult = (int)$_POST['banmultiplier'][$i]; if ( !$mult ) continue; $ban[$ban_at] = array( 'at' => $ban_at, 'length' => $the_ban, 'multiplier' => $mult ); } ksort( $ban ); $ban = array_values( $ban ); bb_update_option( 'bbmodsuite_warning_options', compact( 'types', 'min_level', 'cron_every', 'expire_time', 'ban' ) ); global $bbmodsuite_cache; $bbmodsuite_cache['warning'] = compact( 'types', 'min_level', 'cron_every', 'expire_time', 'ban' ); wp_clear_scheduled_hook( 'bbmodsuite_warning_cron' ); wp_schedule_single_event( time() + $cron_every, 'bbmodsuite_warning_cron' ); ?>

weeks

months

get_results( "SELECT `meta_value`,`user_id` FROM `{$bbdb->usermeta}` WHERE `meta_key` = 'bbmodsuite_warnings_count' ORDER BY `meta_value` DESC" ); foreach ( $warned_users as $warned_user ) { $url = bb_get_uri( 'bb-admin/admin-base.php', array( 'user' => $warned_user->user_id, 'plugin' => 'bbpress_moderation_suite_warning', ), BB_URI_CONTEXT_A_HREF + BB_URI_CONTEXT_BB_ADMIN ); ?>
user_id ); ?> meta_value ); ?>