array(), 'min_level' => 'moderate', 'cron_every' => 604800, 'expire_time' => 7776000, 'ban' => array(), 'version' => '0.1-beta2' ) ); return; } $change = false; if ( !isset( $options['ban'] ) ) { $options['ban'] = array(); $change = true; } if ( empty( $options['version'] ) ) { global $bbdb; $all_warnings = $bbdb->get_results( 'SELECT `user_id`, `meta_value` FROM `' . $bbdb->usermeta . '` WHERE `meta_key` = \'bbmodsuite_warnings\'' ); $types = array_values( bbmodsuite_warning_types() ); foreach ( $all_warnings as $warnings ) { $user = $warnings->user_id; $warnings = unserialize( $warnings->meta_value ); foreach ( $warnings as &$warning ) { $warning['type'] = $types[$warning['type']]; } bb_update_usermeta( $user, 'bbmodsuite_warnings', $warnings ); } $options['version'] = '0.1-beta2'; $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 ( !$warnings || $all_warnings[$i] !== $warnings ) { $warnings = array_values( $warnings ); bbmodsuite_warning_update_user_ban( $i, count( $warnings ), true ); if ( $warnings ) { bb_update_usermeta( $i, 'bbmodsuite_warnings', $warnings ); bb_update_usermeta( $i, 'bbmodsuite_warnings_count', count( $warnings ) ); } else { bb_delete_usermeta( $i, 'bbmodsuite_warnings' ); bb_delete_usermeta( $i, 'bbmodsuite_warnings_count' ); } } } 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, $args ) { 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'] = $args['before_each'] . '' . __( 'Warn', 'bbpress-moderation-suite' ) . '' . $args['after_each']; } } return $parts; } add_filter( 'bb_post_admin', 'bbmodsuite_warning_link', 10, 2 ); function bbmodsuite_warning_types() { $options = bb_get_option( 'bbmodsuite_warning_options' ); $types = $options['types']; if ( !is_array( $types ) ) { $types = explode( "\n", $types ); $types = array_values( array_filter( $types ) ); $types = array_combine( array_map( 'md5', $types ), $types ); $options['types'] = $types; bb_update_option( 'bbmodsuite_warning_options', $options ); } $types['d41d8cd98f00b204e9800998ecf8427e'] = __( 'Other', 'bbpress-moderation-suite' ); return $types; } function bbmodsuite_warning_parse_types( $raw ) { $parsed = array(); $raw = array_map( 'trim', explode( "\n", stripslashes( $raw ) ) ); foreach ( $raw as $type ) { if ( strlen( $type ) ) { $parsed[md5( $type )] = $type; } } return $parsed; } function bbmodsuite_warning_admin_add_jquery() { wp_enqueue_script( 'jquery' ); } add_action( 'bbpress_moderation_suite_warning_pre_head', 'bbmodsuite_warning_admin_add_jquery' ); function bbpress_moderation_suite_warning() { global $bbdb; ?>