'', '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)); 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'); } function bbmodsuite_warning_update_user_ban($user_id, $warning_count) { 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['length'] * $_ban['multiplier']; } } if ($ban === 0) return bbmodsuite_banplus_set_ban($user_id, 'unban'); return bbmodsuite_banplus_set_ban($user_id, 'temp', $ban, __('Automated ban from Warning moderation helper', 'bbpress-moderation-suite')); } 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); $user = class_exists('BP_User') ? new BP_User($user_id) : 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)); ?>