FileMaster
Search
Toggle Dark Mode
Home
/
.
/
wp-content
/
plugins
/
cleantalk-spam-protect
/
inc
Edit File: cleantalk-admin.php
<?php use Cleantalk\ApbctWP\AdjustToEnvironmentModule\AdjustToEnvironmentHandler; use Cleantalk\ApbctWP\AJAXService; use Cleantalk\ApbctWP\ApbctEnqueue; use Cleantalk\ApbctWP\CleantalkSettingsTemplates; use Cleantalk\ApbctWP\ContactsEncoder\ContactsEncoder; use Cleantalk\ApbctWP\Escape; use Cleantalk\ApbctWP\Variables\Get; use Cleantalk\ApbctWP\Variables\Post; use Cleantalk\ApbctWP\Variables\Server; use Cleantalk\ApbctWP\LinkConstructor; use Cleantalk\Common\TT; use Cleantalk\ApbctWP\SupportUser; // Prevent direct call if ( ! defined('ABSPATH') ) { die('Not allowed!'); } require_once('cleantalk-settings.php'); // Add buttons to comments list table add_action('manage_comments_nav', 'apbct_add_buttons_to_comments_and_users', 10, 1); add_action('manage_users_extra_tablenav', 'apbct_add_buttons_to_comments_and_users', 10, 1); // Check renew banner add_action('wp_ajax_apbct_settings__check_renew_banner', 'apbct_settings__check_renew_banner'); // Crunch for Anti-Bot add_action('admin_head', 'apbct_admin_set_cookie_for_anti_bot'); // Catch comment status change add_action('comment_approved_to_unapproved', 'apbct_comment__remove_meta_approved', 10, 1); add_action('comment_spam_to_unapproved', 'apbct_comment__remove_meta_approved', 10, 1); add_action('comment_trash_to_unapproved', 'apbct_comment__remove_meta_approved', 10, 1); /** * Crunch for Anti-Bot * Hooked by 'admin_head' */ function apbct_admin_set_cookie_for_anti_bot() { global $apbct; if ( $apbct->data['key_is_ok'] ) { echo '<script ' . (class_exists('Cookiebot_WP') ? 'data-cookieconsent="ignore"' : '') . '> var ctSecure = location.protocol === "https:" ? "; secure" : ""; document.cookie = "wordpress_apbct_antibot=' . hash('sha256', $apbct->api_key . $apbct->data['salt']) . '; path=/; expires=0; samesite=lax" + ctSecure; </script>'; } } /** * Add buttons to comments list table * Hooked by 'manage_comments_nav' and 'manage_users_extra_tablenav' * * @param $_unused_argument */ function apbct_add_buttons_to_comments_and_users($_unused_argument) { global $apbct; if ( is_null($current_screen = get_current_screen()) ) { return; } if ( 'users' === $current_screen->base ) { $button_url__check = $current_screen->base . '.php?page=ct_check_users'; $button_description = 'users'; } elseif ( 'edit-comments' === $current_screen->base ) { $button_url__check = $current_screen->base . '.php?page=ct_check_spam'; $button_description = 'comments'; } else { return; } echo ' <a href="' . Escape::escAttr($button_url__check) . '" class="button" style="margin:1px 0 0 0; display: inline-block;"> <img src="' . Escape::escUrl($apbct->logo__small__colored) . '" alt="CleanTalk Anti-Spam logo" height="" style="width: 17px; vertical-align: text-bottom;" /> ' . sprintf(__('Find spam %s', 'cleantalk-spam-protect'), $button_description) . ' </a> '; } /** * Adding widget * Hooked by 'wp_dashboard_setup' * * @psalm-suppress UndefinedFunction */ function ct_dashboard_statistics_widget() { global $apbct; $actual_plugin_name = $apbct->plugin_name; if (isset($apbct->data['wl_brandname']) && $apbct->data['wl_brandname'] !== APBCT_NAME) { $actual_plugin_name = $apbct->data['wl_brandname']; } /** * Hook. List of allowed user roles for the Dashboard widget. * add_filter('apbct_hook_dashboard_widget_allowed_roles_list', function($roles_list) { * $roles_list[] = 'editor'; * return $roles_list; * }); */ $roles_list = apply_filters('apbct_hook_dashboard_widget_allowed_roles_list', array('administrator')); if (is_array($roles_list) && apbct_is_user_role_in($roles_list) ) { wp_add_dashboard_widget( 'ct_dashboard_statistics_widget', $actual_plugin_name, 'ct_dashboard_statistics_widget_output' ); } } /** * Outputs statistics widget content * * @param $_post * @param $_callback_args */ function ct_dashboard_statistics_widget_output($_post, $_callback_args) { global $apbct, $current_user; $actual_plugin_name = $apbct->plugin_name; if (isset($apbct->data['wl_brandname']) && $apbct->data['wl_brandname'] !== APBCT_NAME) { $actual_plugin_name = $apbct->data['wl_brandname']; } echo "<div id='ct_widget_wrapper'>"; ?> <div class='ct_widget_top_links'> <img src="<?php echo Escape::escUrl(APBCT_IMG_ASSETS_PATH . '/preloader.gif'); ?>" class='ct_preloader'> <?php echo sprintf( __("%sRefresh%s", 'cleantalk-spam-protect'), "<a href='#ct_widget' class='ct_widget_refresh_link'>", "</a>" ); ?> <?php echo sprintf( __("%sConfigure%s", 'cleantalk-spam-protect'), "<a href='{$apbct->settings_link}' class='ct_widget_settings_link'>", "</a>" ); ?> </div> <form id='ct_refresh_form' method='POST' action='#ct_widget'> <input type='hidden' name='ct_brief_refresh' value='1'> </form> <h4 class='ct_widget_block_header' style='margin-left: 12px;'><?php _e('7 days Anti-Spam and SpamFireWall stats', 'cleantalk-spam-protect'); ?></h4> <div class='ct_widget_block ct_widget_chart_wrapper'> <canvas id='ct_widget_chart' ></canvas> </div> <h4 class='ct_widget_block_header'><?php _e('Top 5 spam IPs blocked', 'cleantalk-spam-protect'); ?></h4> <hr class='ct_widget_hr'> <?php if ( ! apbct_api_key__is_correct() || (isset($apbct->data['brief_data']['error_no']) && $apbct->data['brief_data']['error_no'] == 6) ) { ?> <div class='ct_widget_block'> <form action='<?php echo $apbct->settings_link; ?>' method='POST'> <h2 class='ct_widget_activate_header'><?php _e('Get Access key to activate Anti-Spam protection!', 'cleantalk-spam-protect'); ?></h2> <input class='ct_widget_button ct_widget_activate_button' type='submit' name='get_apikey_auto' value='ACTIVATE'/> </form> </div> <?php } elseif ( ! empty($apbct->data['brief_data']['error']) ) { echo '<div class="ct_widget_block">' . '<h2 class="ct_widget_activate_header">' . sprintf( __('Something went wrong! Error: "%s".', 'cleantalk-spam-protect'), "<u>{$apbct->brief_data['error']}</u>" ) . '</h2>'; if (apbct_is_user_role_in(array('administrator')) && $apbct->user_token && ! $apbct->white_label ) { $link = LinkConstructor::buildCleanTalkLink( 'anti_crawler_inactive', 'my', array( 'user_token' => $apbct->user_token, 'cp_mode' => 'antispam' ) ); echo '<h2 class="ct_widget_activate_header">' . __('Please, visit your Dashboard.', 'cleantalk-spam-protect') . '</h2>' . '<a target="_blank" href="' . $link . '">' . '<input class="ct_widget_button ct_widget_activate_button ct_widget_resolve_button" type="button" value="VISIT CONTROL PANEL">' . '</a>'; } echo '</div>'; } if ( apbct_api_key__is_correct() && empty($apbct->data['brief_data']['error']) ) { ?> <div class='ct_widget_block'> <table cellspacing="0"> <tr> <th><?php _e('IP', 'cleantalk-spam-protect'); ?></th> <th><?php _e('Country', 'cleantalk-spam-protect'); ?></th> <th><?php _e('Block Count', 'cleantalk-spam-protect'); ?></th> </tr> <?php foreach ( $apbct->brief_data['top5_spam_ip'] as $val ) { ?> <tr> <td><?php echo Escape::escHtml($val[0]); ?></td> <td class="ct_widget_block__country_cell"> <?php echo $val[1] ? "<img src='" . Escape::escHtml(APBCT_URL_PATH) . "/inc/images/flags/countries_collection.svg#" . strtolower(isset($val[1]['country_code']) ? Escape::escHtml($val[1]['country_code']) : 'xx') . "'>" : ''; ?> <?php echo isset($val[1]['country_name']) ? Escape::escHtml($val[1]['country_name']) : 'Unknown'; ?> </td> <td style='text-align: center;'><?php echo Escape::escHtml($val[2]); ?></td> </tr> <?php } ?> </table> <?php if (apbct_is_user_role_in(array('administrator')) && $apbct->user_token && ! $apbct->data["wl_mode_enabled"] ) { $link = LinkConstructor::buildCleanTalkLink( 'dashboard_widget_all_data_link', 'my/show_requests', array( 'user_token' => Escape::escHtml($apbct->user_token) ) ); ?> <a target='_blank' href='<?php echo $link; ?>'> <input class='ct_widget_button' id='ct_widget_button_view_all' type='button' value='View all'> </a> <?php } ?> </div> <?php } // Notice at the bottom if ( $apbct->spam_count && $apbct->spam_count > 0 ) { $cp_total_stats = ''; //Link to CP is only for admins due the token provided if ( apbct_is_user_role_in(array('administrator')) ) { $link = LinkConstructor::buildCleanTalkLink( 'dashboard_widget_go_to_cp', 'my', array( 'user_token' => $apbct->user_token, 'cp_mode' => 'antispam' ) ); $cp_total_stats = ($apbct->data["wl_mode_enabled"] ? '' : '<img src="' . Escape::escUrl($apbct->logo__small__colored) . '" class="ct_widget_small_logo"/>') . '<span title="' . sprintf( __( 'This is the count from the %s\'s cloud and could be different to admin bar counters', 'cleantalk-spam-protect' ) . '">', $actual_plugin_name ) . sprintf( /* translators: %s: Number of spam messages */ __( '%s%s%s has blocked %s spam for past year. The statistics are automatically updated every 24 hours.', 'cleantalk-spam-protect' ), ! $apbct->data["wl_mode_enabled"] ? '<a href="' . $link . '" target="_blank">' : '', $actual_plugin_name, ! $apbct->data["wl_mode_enabled"] ? '</a>' : '', number_format($apbct->data['spam_count'], 0, ',', ' ') ) . '</span>'; } echo '<div class="ct_widget_wprapper_total_blocked">' . $cp_total_stats . (! $apbct->white_label && ! $apbct->data["wl_mode_enabled"] ? '<br><br>' . '<b style="font-size: 16px;">' . sprintf( __('Do you like CleanTalk? %sPost your feedback here%s.', 'cleantalk-spam-protect'), '<u><a href="https://wordpress.org/support/plugin/cleantalk-spam-protect/reviews/#new-post" target="_blank">', '</a></u>' ) . '</b>' : '' ) . '</div>'; } echo '</div>'; } /** * Admin action 'admin_init' - Add the admin settings and such * * @psalm-suppress UndefinedFunction */ function apbct_admin__init() { global $apbct, $spbc; // TODO: need to find another way to be compatible with WP Rocket and WPEngine if (defined('WP_ROCKET_VERSION') && Server::get('IS_WPE') && strpos(TT::toString(Server::get('REQUEST_URI')), 'wp-admin/admin-ajax.php') === false ) { ob_start(function ($buffer) { $pattern_admin_js = '/<script\s+type="rocketlazyloadscript"[^>]*cleantalk-admin\.min\.js[^>]*>/i'; $pattern_checkusers_js = '/<script\s+type="rocketlazyloadscript"[^>]*cleantalk-users-checkspam\.min\.js[^>]*>/i'; $pattern_checkspam_js = '/<script\s+type="rocketlazyloadscript"[^>]*cleantalk-comments-checkspam\.min\.js[^>]*>/i'; $buffer = preg_replace($pattern_admin_js, '<script src="' . APBCT_JS_ASSETS_PATH . '/cleantalk-admin.min.js' . '?ver=' . APBCT_VERSION . '" id="ct_admin_common-js"></script>', $buffer); $buffer = preg_replace($pattern_checkusers_js, '<script src="' . APBCT_JS_ASSETS_PATH . '/cleantalk-users-checkspam.min.js' . '?ver=' . APBCT_VERSION . '" id="ct_check_users-js"></script>', $buffer); $buffer = preg_replace($pattern_checkspam_js, '<script src="' . APBCT_JS_ASSETS_PATH . '/cleantalk-comments-checkspam.min.js' . '?ver=' . APBCT_VERSION . '" id="ct_check_spam-js"></script>', $buffer); return $buffer; }); } // Admin bar $apbct->admin_bar_enabled = $apbct->settings['admin_bar__show'] && current_user_can('activate_plugins'); if ( $apbct->admin_bar_enabled ) { if ( ! has_action('admin_bar_menu', 'apbct_admin__admin_bar__add_structure') && ! has_action('admin_bar_menu', 'spbc_admin__admin_bar__add_structure') ) { add_action('admin_bar_menu', 'apbct_admin__admin_bar__add_structure', 999); } add_filter('cleantalk_admin_bar__parent_node__before', 'apbct_admin__admin_bar__prepare_counters'); add_filter('cleantalk_admin_bar__add_icon_to_parent_node', 'apbct_admin__admin_bar__prepare_counters'); add_filter('cleantalk_admin_bar__parent_node__after', 'apbct_admin__admin_bar__add_counter', 10, 1); add_action('admin_bar_menu', 'apbct_admin__admin_bar__add_child_nodes', 1000); if ( ! $spbc ) { add_filter('admin_bar_menu', 'apbct_spbc_admin__admin_bar__add_child_nodes', 1001); } } // Getting dashboard widget statistics if ( Post::getInt('ct_brief_refresh') === 1 ) { cleantalk_get_brief_data($apbct->api_key); } // Getting Access key like a hoster. Only once! if ( ! is_main_site() && $apbct->white_label && (empty($apbct->api_key) || $apbct->settings['apikey'] == $apbct->network_settings['apikey']) ) { $res = apbct_settings__get_key_auto(true); if ( isset($res['auth_key'], $res['user_token']) ) { $settings = apbct_settings__validate(array( 'apikey' => $res['auth_key'], )); $apbct->api_key = isset($settings['apikey']) ? $settings['apikey'] : null; $apbct->save('settings'); } } // Settings add_action( 'wp_ajax_apbct_settings__get__long_description', 'apbct_settings__get__long_description' ); // Long description add_action('wp_ajax_apbct_sync', 'apbct_settings__sync'); add_action('wp_ajax_apbct_get_key_auto', 'apbct_settings__get_key_auto'); add_action('wp_ajax_apbct_update_account_email', 'apbct_settings__update_account_email'); // Settings Templates if ( ! $apbct->data['wl_mode_enabled'] && ! is_multisite() || is_main_site() || ( ! is_main_site() && $apbct->network_settings['multisite__allow_custom_settings']) ) { new CleantalkSettingsTemplates($apbct->api_key); } // Check compatibility do_action('apbct__check_compatibility'); } /** * Manage links in plugins list * * @param $links * @param $_file * * @return array */ function apbct_admin__plugin_action_links($links, $_file) { global $apbct; $settings_link = '<a href="' . $apbct->settings_link . '">' . __('Settings') . '</a>'; array_unshift($links, $settings_link); // before other links return $links; } /** * Change th plugin description on all plugins page. * @param $all_plugins * @return array */ function apbct_admin__change_plugin_description($all_plugins) { global $apbct; if ( $apbct->data["wl_mode_enabled"] && isset($all_plugins['cleantalk-spam-protect/cleantalk.php']) && $apbct->data["wl_antispam_description"] ) { $all_plugins['cleantalk-spam-protect/cleantalk.php']['Description'] = $apbct->data["wl_antispam_description"]; } return $all_plugins; } /** * Manage links and plugins page * * @param $links * @param $file * @param $plugin_data * * @return array */ function apbct_admin__register_plugin_links($links, $file, $plugin_data) { global $apbct; $plugin_name = $plugin_data['Name'] ?: APBCT_NAME; //Return if it's not our plugin if ( $file != $apbct->base_name ) { return $links; } $actual_plugin_name = $apbct->plugin_name; if (isset($apbct->data['wl_brandname']) && $apbct->data['wl_brandname'] !== APBCT_NAME) { $actual_plugin_name = $apbct->data['wl_brandname'] . " Anti-Spam"; } if ( $apbct->white_label || $apbct->data["wl_mode_enabled"] ) { $links = array_slice($links, 0, 1); if (isset($links[0])) { $links[0] .= "<script " . (class_exists('Cookiebot_WP') ? 'data-cookieconsent="ignore"' : '') . "> function changedPluginName(){ jQuery('.plugin-title strong').each(function(i, item){ if(jQuery(item).html() == '{$plugin_name}') jQuery(item).html('{$actual_plugin_name}'); }); } changedPluginName(); jQuery( document ).ajaxComplete(function() { changedPluginName(); }); </script>"; } } if ( substr(get_locale(), 0, 2) != 'en' ) { $links[] = '<a class="ct_meta_links ct_translate_links" href="' . sprintf( 'https://translate.wordpress.org/locale/%s/default/wp-plugins/cleantalk-spam-protect', substr(get_locale(), 0, 2) ) . '" target="_blank">' . __('Translate', 'cleantalk-spam-protect') . '</a>'; } $links[] = '<a class="ct_meta_links" href="' . $apbct->settings_link . '" target="_blank">' . __('Start here', 'cleantalk-spam-protect') . '</a>'; $links[] = '<a class="ct_meta_links ct_faq_links" href="' . $apbct->data['wl_support_faq'] . '" target="_blank">' . __('FAQ', 'cleantalk-spam-protect') . '</a>'; $links[] = '<a class="ct_meta_links ct_support_links" href="' . $apbct->data['wl_support_url'] . '" target="_blank">' . __('Support', 'cleantalk-spam-protect') . '</a>'; $trial = apbct_admin__badge__get_premium('plugins_listing'); if ( ! empty($trial) && !$apbct->data["wl_mode_enabled"]) { $links[] = $trial; } return $links; } /** * Admin action 'admin_enqueue_scripts' - Enqueue admin script of reloading admin page after needed AJAX events * * @param string $hook URL of hooked page */ function apbct_admin__enqueue_scripts($hook) { global $apbct; // Scripts to all admin pages ApbctEnqueue::getInstance()->js('common-cleantalk-modal.js', array('jquery')); ApbctEnqueue::getInstance()->js('cleantalk-admin.js', array('common-cleantalk-modal-js', 'jquery')); ApbctEnqueue::getInstance()->css('cleantalk-admin.css'); ApbctEnqueue::getInstance()->css('cleantalk-icons.css'); ApbctEnqueue::getInstance()->css('cleantalk-email-decoder.css'); $data = array( '_ajax_nonce' => $apbct->ajax_service->getAdminNonce(), '_ajax_url' => admin_url('admin-ajax.php', 'relative'), 'plugin_name' => $apbct->plugin_name, 'logo' => '<img src="' . Escape::escUrl($apbct->logo) . '" alt="" height="" style="width: 17px; vertical-align: text-bottom;" />', 'logo_small' => '<img src="' . Escape::escUrl($apbct->logo__small) . '" alt="" height="" style="width: 17px; vertical-align: text-bottom;" />', 'logo_small_colored' => '<img src="' . Escape::escUrl($apbct->logo__small__colored) . '" alt="" height="" style="width: 17px; vertical-align: text-bottom;" />', 'new_window_gif' => APBCT_URL_PATH . "/inc/images/new_window.gif", 'notice_when_deleting_user_text' => esc_html__('Warning! Users are deleted without the possibility of restoring them, you can only restore them from a site backup.', 'cleantalk-spam-protect'), 'apbctNoticeDismissSuccess' => esc_html__('Thank you for the review! We strive to make our Anti-Spam plugin better every day.', 'cleantalk-spam-protect'), 'apbctNoticeForceProtectionOn' => esc_html__('This option affects the reflection of the page by checking the user and adds a cookie "apbct_force_protection_check", which serves as an indicator of successful or unsuccessful verification. If the check is successful, it will no longer run.', 'cleantalk-spam-protect'), ); $data = array_merge($data, ContactsEncoder::getLocalizationText()); wp_localize_script('cleantalk-admin-js', 'ctAdminCommon', $data); /** * Hook. List of allowed user roles for the Dashboard widget. * add_filter('apbct_hook_dashboard_widget_allowed_roles_list', function($roles_list) { * $roles_list[] = 'editor'; * return $roles_list; * }); */ $roles_list = apply_filters('apbct_hook_dashboard_widget_allowed_roles_list', array('administrator')); // DASHBOARD page JavaScript and CSS if ( $hook == 'index.php' && is_array($roles_list) && apbct_is_user_role_in($roles_list) && $apbct->settings['wp__dashboard_widget__show'] && ! $apbct->moderate_ip ) { // Enqueue widget scripts if the dashboard widget enabled and not IP license // Preparing widget data // Parsing brief data 'spam_stat' {"yyyy-mm-dd": spam_count, "yyyy-mm-dd": spam_count} to [["yyyy-mm-dd", "spam_count"], ["yyyy-mm-dd", "spam_count"]] $to_chart = array(); // Crunch. Response contains error. if ( ! empty($apbct->data['brief_data']['error']) ) { $apbct->data['brief_data'] = array_merge($apbct->data['brief_data'], $apbct->default_data['brief_data']); } if ( isset($apbct->data['brief_data']['spam_stat']) && is_array($apbct->data['brief_data']['spam_stat']) ) { foreach ( $apbct->data['brief_data']['spam_stat'] as $key => $value ) { $to_chart[] = array($key, $value); } unset($key, $value); } sort($to_chart); //hardcode fix to prevent more than 8 elements if ( count($to_chart) > 8 ) { array_shift($to_chart); } ApbctEnqueue::getInstance()->css('cleantalk-dashboard-widget.css'); $widget_chart_handler = ApbctEnqueue::getInstance()->js('cleantalk-dashboard-widget--chartjs.js', array('jquery')); $widget_handler = ApbctEnqueue::getInstance()->js('cleantalk-dashboard-widget.js', array($widget_chart_handler)); wp_localize_script($widget_handler, 'apbctDashboardWidget', array( 'data' => $to_chart, )); } // SETTINGS's page JavaScript and CSS if ( $hook == 'settings_page_cleantalk' ) { wp_enqueue_media(); ApbctEnqueue::getInstance()->js('cleantalk-admin-settings-page.js'); ApbctEnqueue::getInstance()->css('cleantalk-admin-settings-page.css'); wp_localize_script('cleantalk-admin-settings-page-js', 'ctSettingsPage', array( 'ct_subtitle' => $apbct->ip_license ? __('Hosting Anti-Spam', 'cleantalk-spam-protect') : '', 'ip_license' => $apbct->ip_license ? true : false, 'key_changed' => ! empty($apbct->data['key_changed']), 'key_is_ok' => ! empty($apbct->key_is_ok) && !empty($apbct->settings['apikey']), 'support_user_creation_msg_array' => SupportUser::getMessages(), )); ApbctEnqueue::getInstance()->js('common-cleantalk-modal.min.js'); } // COMMENTS page JavaScript if ( $hook == 'edit-comments.php' ) { ApbctEnqueue::getInstance()->css('cleantalk-trp.css'); ApbctEnqueue::getInstance()->js('/public-3-trp.js'); wp_localize_script( 'public-3-trp-js', 'ctTrpAdminLocalize', \Cleantalk\ApbctWP\CleantalkRealPerson::getLocalizingData() ); ApbctEnqueue::getInstance()->js('cleantalk-comments-editscreen.js'); $link = LinkConstructor::buildCleanTalkLink( 'public_comments_page_go_to_cp', 'my', array( 'user_token' => $apbct->user_token, 'cp_mode' => 'antispam' ) ); wp_localize_script('cleantalk-comments-editscreen-js', 'ctCommentsScreen', array( 'ct_ajax_nonce' => $apbct->ajax_service->getAdminNonce(), 'spambutton_text' => __("Find spam comments", 'cleantalk-spam-protect'), 'ct_feedback_msg_whitelisted' => __("The sender has been whitelisted.", 'cleantalk-spam-protect'), 'ct_feedback_msg_blacklisted' => __("The sender has been blacklisted.", 'cleantalk-spam-protect'), 'ct_feedback_msg' => sprintf( __("Feedback has been sent to %sCleanTalk Dashboard%s.", 'cleantalk-spam-protect'), $apbct->user_token ? "<a target='_blank' href='$link'>" : '', $apbct->user_token ? "</a>" : '' ) . ' ' . esc_html__('The service accepts feedback only for requests made no more than 7 or 45 days (if the Extra package is activated) ago.', 'cleantalk-spam-protect'), 'ct_show_check_links' => (bool)$apbct->settings['comments__show_check_links'], 'ct_img_src_new_tab' => plugin_dir_url(__FILE__) . "images/new_window.gif", )); } // USERS page JavaScript if ( $hook == 'users.php' ) { ApbctEnqueue::getInstance()->css('cleantalk-icons.css'); ApbctEnqueue::getInstance()->js('cleantalk-users-editscreen.js'); wp_localize_script('cleantalk-users-editscreen-js', 'ctUsersScreen', array( 'spambutton_text' => __("Find spam-users", 'cleantalk-spam-protect'), 'ct_show_check_links' => (bool)$apbct->settings['comments__show_check_links'], 'ct_img_src_new_tab' => plugin_dir_url(__FILE__) . "images/new_window.gif" )); } } /** * Premium badge layout. * * @param string $placement - where should the layout placed, prefix and utm marks depends on this * * @return string Escaped string */ function apbct_admin__badge__get_premium($placement = null) { global $apbct; $out = ''; $utm_preset = ''; $prefix = ''; $placements_available = array( 'checkers' => array( 'prefix' => __('Make it right!', 'cleantalk-spam-protect') . ' ', 'utm_set' => 'renew_checkers'), 'top_info' => array( 'prefix' => __('Make it right!', 'cleantalk-spam-protect') . ' ', 'utm_set' => 'renew_top_info'), 'cleantalk-bbpress-spam-scanner' => array( 'prefix' => __('Make it right!', 'cleantalk-spam-protect') . ' ', 'utm_set' => 'cleantalk-bbpress-spam-scanner'), 'plugins_listing' => array( 'prefix' => '', 'utm_set' => 'renew_plugins_listing'), ); if ( $apbct->license_trial == 1 && $apbct->user_token ) { if (!empty($placement) && isset($placements_available[$placement])) { $utm_preset = $placements_available[$placement]['utm_set']; $prefix = $placements_available[$placement]['prefix']; } $link_text = __('Get premium', 'cleantalk-spam-protect'); $renew_link = LinkConstructor::buildRenewalLinkATag($apbct->user_token, $link_text, 1, $utm_preset); $out = $prefix . '<b style="display: inline-block; margin-top: 10px;">' . $renew_link . '</b>'; } return Escape::escKsesPreset($out, 'apbct_get_premium_link'); } /** * Adds structure to the admin bar. * * This function adds a common parent node to the admin bar for both APBCT and SPBCT products. * It also adds individual nodes for APBCT and SPBCT under the common parent node. * * @param WP_Admin_Bar $wp_admin_bar The admin bar object. * @global object $spbc The SPBCT object. * @global object $apbct The APBCT object. */ function apbct_admin__admin_bar__add_structure($wp_admin_bar) { global $spbc, $apbct; //init preparing total counters for both products APBCT/SPBCT do_action('cleantalk_admin_bar__prepare_counters'); // Adding common parent node /** * Adding common parent node for both products APBCT/SPBCT */ $wp_admin_bar->add_node(array( 'id' => 'cleantalk_admin_bar__parent_node', 'title' => apply_filters('cleantalk_admin_bar__add_icon_to_parent_node', '') . // @deprecated apply_filters('cleantalk_admin_bar__parent_node__before', '') . '<span class="cleantalk_admin_bar__title">' . $apbct->data["wl_brandname_short"] . '</span>' . apply_filters('cleantalk_admin_bar__parent_node__after', ''), 'meta' => array('class' => 'cleantalk-admin_bar--list_wrapper'), )); /** * Adding APBCT bar node */ $apbct_title_node = apbct__admin_bar__get_title_for_apbct($apbct); if ( $apbct_title_node ) { $wp_admin_bar->add_node($apbct_title_node); } /** * Adding SPBCT bar node */ $spbc_title_node = apbct__admin_bar__get_title_for_spbc($spbc, $apbct->user_token, $apbct->white_label); if ( $spbc_title_node ) { $wp_admin_bar->add_node($spbc_title_node); } /** * Link to project manager */ $project_manager_title_node = apbct__admin_bar__get_title_for_project_manager(); if ( $project_manager_title_node ) { $wp_admin_bar->add_node($project_manager_title_node); $gf2db_title_node = apbct__admin_bar__add_gf2db_title(); if ($gf2db_title_node) { $wp_admin_bar->add_node($gf2db_title_node); } else { $gf2db_invite_to_install_title = apbct__admin_bar__get_title_for_gf2db_invite_to_install(); if ($gf2db_invite_to_install_title) { $wp_admin_bar->add_node($gf2db_invite_to_install_title); } } } /** * Adding FAQ node */ $faq_title_node = apbct__admin_bar__get_title_for_faq(); if ( $faq_title_node ) { $wp_admin_bar->add_node($faq_title_node); } } /** * Gets the title for the project manager admin bar node. * * This function constructs the title for the project manager admin bar node based on various conditions. * The title includes a link to the project manager. * * @return array|false The node data for the project manager admin bar node, or false if the project manager admin bar is not enabled. */ function apbct__admin_bar__get_title_for_project_manager() { if (!is_plugin_active('gravityforms/gravityforms.php')) { return false; } $title = '<span><a>' . __('Project management', 'cleantalk-spam-protect') . '</a></span>'; return array( 'parent' => 'cleantalk_admin_bar__parent_node', 'id' => 'project_manager__parent_node', 'title' => $title, ); } /** * Adds the title for the Gravity Forms to doBoard / Settings admin bar node. * * This function constructs the title for the Gravity Forms to doBoard / Settings admin bar node based on various conditions. * The title includes a link to the Gravity Forms to doBoard / Settings. * */ function apbct__admin_bar__add_gf2db_title() { if (!is_plugin_active('cleantalk-doboard-add-on-for-gravity-forms/cleantalk-doboard-add-on-for-gravity-forms.php')) { return false; } $title = sprintf( '<a href="%s" target="_blank">%s</a>', admin_url('admin.php?page=gf_settings&subview=cleantalk-doboard-add-on-for-gravity-forms'), esc_html__('Gravity Forms to doBoard / Settings', 'cleantalk-spam-protect') ); return array( 'parent' => 'project_manager__parent_node', 'id' => 'gf2db_title', 'title' => $title, ); } /** * Gets the title for the "Gravity Forms to doBoard" Add-On invite to install admin bar node. * * This function constructs the title for the "Gravity Forms to doBoard" Add-On invite to install admin bar node based on various conditions. * The title includes a link to the "Gravity Forms to doBoard" Add-On invite to install. * * @return array|false The node data for the "Gravity Forms to doBoard" Add-On invite to install admin bar node, or false if the "Gravity Forms to doBoard" Add-On invite to install admin bar node is not enabled. */ function apbct__admin_bar__get_title_for_gf2db_invite_to_install() { if (is_plugin_active('cleantalk-doboard-add-on-for-gravity-forms/cleantalk-doboard-add-on-for-gravity-forms.php')) { return false; } $title = sprintf( '<a href="%s" target="_blank" title="%s">%s</a>', admin_url('plugin-install.php?s=GF2DB&tab=search&type=term'), esc_html__( 'Organize and track all messages from your site. Gravity Forms, upgraded with project management.', 'cleantalk-spam-protect' ), esc_html__('Install "Gravity Forms to doBoard" Add-On', 'cleantalk-spam-protect') ); return array( 'parent' => 'project_manager__parent_node', 'id' => 'gf2db_invite_to_install_title', 'title' => $title, ); } /** * Gets the title for the APBCT admin bar node. * * This function constructs the title for the APBCT admin bar node based on various conditions. * The title includes a renewal link if the notice is set to show and either the trial notice or the renew notice is set. * An attention mark is added to the title if the notice is set to show. * * @param object $apbct The APBCT object. * @return array The node data for the APBCT admin bar node. */ function apbct__admin_bar__get_title_for_apbct($apbct) { $node_data = array( 'parent' => 'cleantalk_admin_bar__parent_node', 'id' => 'apbct__parent_node', 'title' => '', ); $title = '<span><a>' . __('Anti-Spam', 'cleantalk-spam-protect') . '</a></span>'; if ( $apbct->notice_show && // needs to show notice ( $apbct->notice_trial || // NPT trial flag $apbct->notice_renew // needs to renew ) && ( is_main_site() || $apbct->network_settings['multisite__work_mode'] == 2 ) // is single site or WPMS network mode 2 ) { $link_text = __('Renew Anti-Spam', 'cleantalk-spam-protect'); $renew_link = LinkConstructor::buildRenewalLinkATag($apbct->user_token, $link_text, 1, 'renew_admin_bar_apbct'); $title = '<span>' . $renew_link . '</span>'; } //show the attention mark in any case if the notice show gained $attention_mark = $apbct->notice_show ? '<i class="apbct-icon-attention-alt"></i>' : ''; //construct the final title $node_data['title'] = '<div class="cleantalk-admin_bar__parent">' . $title . $attention_mark . '</div>'; return $node_data; } /** * Gets the title for the SPBCT admin bar node. * * This function constructs the title for the SPBCT admin bar node based on various conditions. * The title includes a renewal link if the SPBCT object exists, a user token is provided, and the SPBCT trial is set. * An attention mark is added to the title if the SPBCT notice is set to show. * * @param object|null $spbc The SPBCT object. If not provided, defaults to null. * @param string $user_token The user token. * @param bool $is_apbct_wl_mode Indicates if the APBCT white label mode is enabled. * @return array|false The node data for the SPBCT admin bar node, or false if the SPBCT admin bar is not enabled or the APBCT white label mode is enabled. */ function apbct__admin_bar__get_title_for_spbc($spbc, $user_token, $is_apbct_wl_mode) { $node_data = array( 'parent' => 'cleantalk_admin_bar__parent_node', 'id' => 'spbc__parent_node', 'title' => '', ); if ( !$spbc || !$user_token || $spbc->trial !== 1 ) { $node_data['title'] = '<a>' . __('Security', 'security-malware-firewall') . '</a>'; return $node_data; } if ( !$spbc->admin_bar_enabled || $is_apbct_wl_mode ) { return false; } $link_text = __('Renew Security', 'cleantalk-spam-protect'); $renew_link = LinkConstructor::buildRenewalLinkATag($user_token, $link_text, 4, 'renew_admin_bar_spbct'); $spbc_title = '<span>' . $renew_link . '</span>'; //show the attention mark in any case if the notice show gained $attention_mark = $spbc->notice_show ? '<i class="apbct-icon-attention-alt"></i>' : ''; //construct the final title $node_data['title'] = '<div class="cleantalk-admin_bar__parent">' . $spbc_title . $attention_mark . '</div>'; return $node_data; } function apbct__admin_bar__get_title_for_faq() { $faq_link_url = LinkConstructor::buildCleanTalkLink('faq_admin_bar_apbct', 'help/introduction'); $faq_link_layout = sprintf( '<a href="%s" target="_blank">%s</a>', $faq_link_url, esc_html__('Manuals and FAQ', 'cleantalk-spam-protect') ); $title = '<div class="cleantalk-admin_bar__parent"><span>' . $faq_link_layout . '</span></div>'; return array( 'parent' => 'cleantalk_admin_bar__parent_node', 'id' => 'faq__parent_node', 'title' => $title, ); } /** * Prepares properties for counters in $apbct * Handles counter reset * * @return void */ function apbct_admin__admin_bar__prepare_counters() { global $apbct; //Reset or create user counter if ( ! empty(Get::get('ct_reset_user_counter')) ) { AJAXService::checkNonceRestrictingNonAdmins('security'); $apbct->data['user_counter']['accepted'] = 0; $apbct->data['user_counter']['blocked'] = 0; $apbct->data['user_counter']['since'] = date('d M'); $apbct->saveData(); } //Reset or create all counters if ( ! empty(Get::get('ct_reset_all_counters')) ) { AJAXService::checkNonceRestrictingNonAdmins('security'); $apbct->data['admin_bar__sfw_counter'] = array('all' => 0, 'blocked' => 0); $apbct->data['admin_bar__all_time_counter'] = array('accepted' => 0, 'blocked' => 0); $apbct->data['user_counter'] = array( 'all' => 0, 'accepted' => 0, 'blocked' => 0, 'since' => date('d M') ); $apbct->data['array_accepted'] = array(); $apbct->data['array_blocked'] = array(); $apbct->data['current_hour'] = ''; $apbct->saveData(); } $apbct->counter__sum = 0; $apbct->counter__user = array( 'accepted' => $apbct->data['user_counter']['accepted'], 'blocked' => $apbct->data['user_counter']['blocked'], 'all' => $apbct->data['user_counter']['accepted'] + $apbct->data['user_counter']['blocked'], 'since' => $apbct->data['user_counter']['since'] ); $apbct->counter__sum += $apbct->counter__user['all']; if ( $apbct->settings['admin_bar__all_time_counter'] ) { $apbct->counter__all_time = array( 'accepted' => $apbct->data['admin_bar__all_time_counter']['accepted'], 'blocked' => $apbct->data['admin_bar__all_time_counter']['blocked'], 'all' => $apbct->data['admin_bar__all_time_counter']['accepted'] + $apbct->data['admin_bar__all_time_counter']['blocked'] ); $apbct->counter__sum += $apbct->counter__all_time['all']; } if ( $apbct->settings['admin_bar__daily_counter'] ) { $apbct->counter__daily = array( 'accepted' => array_sum($apbct->data['array_accepted']), 'blocked' => array_sum($apbct->data['array_blocked']), 'all' => array_sum($apbct->data['array_accepted']) + array_sum($apbct->data['array_blocked']) ); $apbct->counter__sum += $apbct->counter__daily['all']; } if ( $apbct->settings['admin_bar__sfw_counter'] && $apbct->settings['sfw__enabled'] ) { $apbct->counter__sfw = array( 'all' => $apbct->data['admin_bar__sfw_counter']['all'], 'blocked' => $apbct->data['admin_bar__sfw_counter']['blocked'] ); $apbct->counter__sum += $apbct->counter__sfw['all']; } } function apbct_admin__admin_bar__add_parent_icon($icon) { return $icon . '<img class="cleantalk_admin_bar__apbct_icon" src="' . Escape::escUrl(APBCT_URL_PATH . '/inc/images/logo.png') . '" alt=""> '; } function apbct_admin__admin_bar__add_counter($after) { global $apbct; $counter__sum__layout = ($after ? ' / ' : '<div class="cleantalk_admin_bar__sum_counter">') . '<span title="' . __( 'All Anti-Spam events', 'cleantalk-spam-protect' ) . '">' . $apbct->counter__sum . '</span>' . '</div>'; return ($after ? substr($after, 0, -6) : $after) . $counter__sum__layout; } function apbct_admin__admin_bar__add_child_nodes($wp_admin_bar) { global $apbct; $attention_mark = $apbct->notice_show ? '<i class="apbct-icon-attention-alt"></i>' : ''; $wp_admin_bar->add_node(array( 'parent' => 'apbct__parent_node', 'id' => 'apbct_admin_bar__counter_header', 'title' => __('Counters:', 'cleantalk-spam-protect'), )); // User's counter $wp_admin_bar->add_node(array( 'parent' => 'apbct__parent_node', 'id' => 'apbct_admin_bar__counter__user', 'title' => '<a>' . __('Since', 'cleantalk-spam-protect') . ' ' . $apbct->counter__user['since'] . ': ' . '<span style="color: green;">' . $apbct->counter__user['accepted'] . '</span> / ' . '<span style="color: red;">' . $apbct->counter__user['blocked'] . '</span>' . '<i class="apbct-icon-help-circled" title="' . __( 'Shows amount of alllowed and blocked requests since the date.', 'cleantalk-spam-protect' ) . '"></i>' . '</a>', )); // All-time counter if ( $apbct->settings['admin_bar__all_time_counter'] ) { $wp_admin_bar->add_node(array( 'parent' => 'apbct__parent_node', 'id' => 'apbct_admin_bar__counter__all_time', 'title' => '<a>' . '<span>' . __('Since activation', 'cleantalk-spam-protect') . ': ' . '<span style="color: white;">' . $apbct->counter__all_time['all'] . '</span> / ' . '<span style="color: green;">' . $apbct->counter__all_time['accepted'] . '</span> / ' . '<span style="color: red;">' . $apbct->counter__all_time['blocked'] . '</span>' . '</span>' . '<i class="apbct-icon-help-circled" title="' . __( 'All / Allowed / Blocked submissions. The number of submissions is being counted since CleanTalk plugin installation.', 'cleantalk-spam-protect' ) . '"></i>' . '</a>', )); } // Daily counter if ( $apbct->settings['admin_bar__daily_counter'] ) { $wp_admin_bar->add_node(array( 'parent' => 'apbct__parent_node', 'id' => 'apbct_admin_bar__counter__daily', 'title' => '<a>' . '<span>' . __('Day', 'cleantalk-spam-protect') . ': ' . '<span style="color: green;">' . $apbct->counter__daily['accepted'] . '</span> / ' . '<span style="color: red;">' . $apbct->counter__daily['blocked'] . '</span>' . '</span>' . '<i class="apbct-icon-help-circled" title="' . __( 'Allowed / Blocked submissions. The number of submissions for past 24 hours. ', 'cleantalk-spam-protect' ) . '"></i>' . '</a>', )); } // SFW counter if ( $apbct->settings['admin_bar__sfw_counter'] && $apbct->settings['sfw__enabled'] ) { $wp_admin_bar->add_node(array( 'parent' => 'apbct__parent_node', 'id' => 'apbct_admin_bar__counter__sfw', 'title' => '<a>' . '<span>' . __('SpamFireWall', 'cleantalk-spam-protect') . ': ' . '<span style="color: white;">' . $apbct->counter__sfw['all'] . '</span> / ' . '<span style="color: red;">' . $apbct->counter__sfw['blocked'] . '</span>' . '</span>' . '<i class="apbct-icon-help-circled" title="' . __( 'All / Blocked events. Access attempts triggered by SpamFireWall counted since the last plugin activation.', 'cleantalk-spam-protect' ) . '"></i>' . '</a>', )); } // User counter reset. $wp_admin_bar->add_node(array( 'parent' => 'apbct__parent_node', 'id' => 'ct_reset_counter', 'title' => '<hr style="margin-top: 7px; border: 1px solid #888;">' . '<a href="?' . http_build_query(array_merge($_GET, array('ct_reset_user_counter' => 1, 'security' => $apbct->ajax_service->getAdminNonce()))) . '" title="Reset your personal counter of submissions.">' . __('Reset first counter', 'cleantalk-spam-protect') . '</a>', )); // Reset ALL counter $wp_admin_bar->add_node(array( 'parent' => 'apbct__parent_node', 'id' => 'ct_reset_counters_all', 'title' => '<a href="?' . http_build_query(array_merge($_GET, array('ct_reset_all_counters' => 1, 'security' => $apbct->ajax_service->getAdminNonce()))) . '" title="' . __('Reset all counters', 'cleantalk-spam-protect') . '">' . __('Reset all counters', 'cleantalk-spam-protect') . '</a>', )); // Counter separator if ( $apbct->counter__sum ) { $wp_admin_bar->add_node(array( 'parent' => 'apbct__parent_node', 'id' => 'apbct_admin_bar__separator', 'title' => '<hr style="margin-top: 7px;" />', 'meta' => array('class' => 'cleantalk_admin_bar__separator') )); } $wp_admin_bar->add_node(array( 'parent' => 'apbct__parent_node', 'id' => 'ct_settings_link', 'title' => '<a href="' . $apbct->settings_link . '">' . __('Settings', 'cleantalk-spam-protect') . '</a>' . $attention_mark, )); // Add a child item to our parent item. Bulk checks. if ( ! is_network_admin() ) { $wp_admin_bar->add_node( array( 'parent' => 'apbct__parent_node', 'id' => 'ct_settings_bulk_comments', 'title' => '<hr style="margin-top: 7px;" /><a href="edit-comments.php?page=ct_check_spam" title="' . __('Bulk spam comments removal tool.', 'cleantalk-spam-protect') . '">' . __('Check comments for spam', 'cleantalk-spam-protect') . '</a>', ) ); } // Add a child item to our parent item. Bulk checks. if ( ! is_network_admin() ) { $wp_admin_bar->add_node( array( 'parent' => 'apbct__parent_node', 'id' => 'ct_settings_bulk_users', 'title' => '<a href="users.php?page=ct_check_users" title="Bulk spam users removal tool.">' . __('Check users for spam', 'cleantalk-spam-protect') . '</a>', ) ); } // Add a child item to our parent item. Bulk checks. if ( ! is_network_admin() && apbct_is_plugin_active('woocommerce/woocommerce.php') ) { $wp_admin_bar->add_node( array( 'parent' => 'apbct__parent_node', 'id' => 'ct_settings_bulk_orders', 'title' => '<a href="admin.php?page=apbct_wc_spam_orders" title="Bulk spam orders removal tool.">' . __('WooCommerce spam orders', 'cleantalk-spam-protect') . '</a>', ) ); } // Support link $link_to_support = 'https://wordpress.org/support/plugin/cleantalk-spam-protect'; if (!empty($apbct->data['wl_support_url'])) { $link_to_support = esc_url($apbct->data['wl_support_url']); } if ( ! $apbct->white_label || !empty($apbct->data['wl_support_url']) ) { $wp_admin_bar->add_node( array( 'parent' => 'apbct__parent_node', 'id' => 'ct_admin_bar_support_link', 'title' => '<hr style="margin-top: 7px;" /><a target="_blank" href="' . $link_to_support . '">' . __('Support', 'cleantalk-spam-protect') . '</a>', ) ); } } function apbct_spbc_admin__admin_bar__add_child_nodes($wp_admin_bar) { // Installation link $wp_admin_bar->add_node( array( 'parent' => 'spbc__parent_node', 'id' => 'apbct_admin_bar__install', 'title' => '<a target="_blank" href="plugin-install.php?s=Security%20and%20Malware%20scan%20by%20CleanTalk%20&tab=search">' . __('Install Security by CleanTalk', 'cleantalk-spam-protect') . '</a>', ) ); $wp_admin_bar->add_node(array( 'parent' => 'spbc__parent_node', 'id' => 'install_separator', 'title' => '<hr style="margin-top: 7px;" />', 'meta' => array('class' => 'cleantalk_admin_bar__separator') )); // Counter header $wp_admin_bar->add_node(array( 'parent' => 'spbc__parent_node', 'id' => 'spbc_admin_bar__counter_header', 'title' => '<a>' . __('Counters:', 'security-malware-firewall') . '</a>', 'meta' => array('class' => 'cleantalk_admin_bar__blocked'), )); // Failed / success login attempts counter $wp_admin_bar->add_node(array( 'parent' => 'spbc__parent_node', 'id' => 'spbc_admin_bar__counter__logins', 'title' => '<a>' . '<span>' . __('Logins:', 'cleantalk-spam-protect') . '</span> ' . '<span style="color: white;">' . '<b style="color: green;">' . 0 . '</b> / ' . '<b style="color: red;">' . 0 . '</b>' . '</span>' . '<i class="apbct-icon-help-circled" title="' . __( 'Blocked login attempts in the local database for past 24 hours.', 'cleantalk-spam-protect' ) . '"></i>' . '</a>', 'meta' => array('class' => 'cleantalk_admin_bar__blocked'), )); // Firewall blocked / allowed counter $wp_admin_bar->add_node(array( 'parent' => 'spbc__parent_node', 'id' => 'spbc_admin_bar__counter__firewall', 'title' => '<a>' . '<b>' . __('Security Firewall: ', 'cleantalk-spam-protect') . '</b> ' . '<b style="color: white;">' . '<b style="color: green;">' . 0 . '</b> / ' . '<b style="color: red;">' . 0 . '</b>' . '</b>' . '<i class="apbct-icon-help-circled" title="' . __( 'Passed / Blocked requests by Security Firewall for past 24 hours.', 'cleantalk-spam-protect' ) . '"></i>' . '</a>', 'meta' => array('class' => 'cleantalk_admin_bar__blocked'), )); // Users online counter $wp_admin_bar->add_node(array( 'parent' => 'spbc__parent_node', 'id' => 'spbc_admin_bar__counter__online', 'title' => '<a>' . '<span>' . __('Users online:', 'cleantalk-spam-protect') . '</span>' . ' <b class="spbc-admin_bar--user_counter">' . 0 . '</b>' . '<i class="apbct-icon-help-circled" title="' . __( 'Shows amount of currently logged in administrators. Updates each 10 seconds.', 'cleantalk-spam-protect' ) . '"></i>' . '</a>', 'meta' => array('class' => 'cleantalk_admin_bar__blocked'), )); // Counter separator $wp_admin_bar->add_node(array( 'parent' => 'spbc__parent_node', 'id' => 'spbc_admin_bar__separator', 'title' => '<hr style="margin-top: 7px;" />', 'meta' => array('class' => 'cleantalk_admin_bar__separator') )); // Settings $wp_admin_bar->add_node(array( 'parent' => 'spbc__parent_node', 'id' => 'spbc_admin_bar__settings_link', 'title' => '<a>' . __('Settings', 'cleantalk-spam-protect') . '</a>', 'meta' => array('class' => 'cleantalk_admin_bar__blocked'), )); // Scanner $wp_admin_bar->add_node(array( 'parent' => 'spbc__parent_node', 'id' => 'spbc_admin_bar__scanner_link', 'title' => '<a style="display:inline">' . __('Scanner', 'cleantalk-spam-protect') . '</a>' . '/' . '<a style="display:inline">' . __('Start scan', 'cleantalk-spam-protect') . '</a>', 'meta' => array('class' => 'cleantalk_admin_bar__blocked'), )); // Support link $wp_admin_bar->add_node(array( 'parent' => 'spbc__parent_node', 'title' => '<hr style="margin-top: 7px;" /><a>' . __('Support', 'cleantalk-spam-protect') . '</a>', 'id' => 'spbc_admin_bar__support_link', 'meta' => array('class' => 'cleantalk_admin_bar__blocked'), )); } /** * Unmark bad words * * @param string $message * * @return string Cleat comment */ function apbct_comment__unmark_red($message) { $message = preg_replace("/\<font rel\=\"cleantalk\" color\=\"\#FF1000\"\>(\S+)\<\/font>/iu", '$1', $message); return $message; } /** * Ajax action feedback form comments page. * * @param null|int $comment_id * @param null|string $comment_status * @param bool $change_status * @param null|bool $direct_call */ function apbct_comment__send_feedback( $comment_id = null, $comment_status = null, $change_status = false, $direct_call = null ) { // For AJAX call if ( ! $direct_call ) { AJAXService::checkNonceRestrictingNonAdmins('security'); } $comment_id = Post::get('comment_id') ? Post::getInt('comment_id') : $comment_id; $comment_status = Post::get('comment_status') ? Post::getString('comment_status') : $comment_status; $change_status = Post::get('change_status') ? Post::getBool('change_status') : $change_status; // If enter params is empty exit if ( ! $comment_id || ! $comment_status ) { die(); } // $comment = get_comment($comment_id, 'ARRAY_A'); $hash = get_comment_meta($comment_id, 'ct_hash', true); // If we can send the feedback if ( $hash ) { // Approving if ( $comment_status == '1' || $comment_status == 'approve' ) { $result = ct_send_feedback($hash . ":1"); // $comment['comment_content'] = apbct_comment__unmark_red($comment['comment_content']); // wp_update_comment($comment); $result === true ? 1 : 0; } // Disapproving if ( $comment_status == 'spam' ) { $result = ct_send_feedback($hash . ":0"); $result === true ? 1 : 0; } } else { $result = 'no_hash'; } // Changing comment status(folder) if flag is set. spam || approve if ( $change_status !== false ) { wp_set_comment_status($comment_id, $comment_status); } if ( ! $direct_call ) { ! empty($result) ? die($result) : die(0); } } /** * Catch comment status change * * @param WP_Comment $comment Comment object * * @return void */ function apbct_comment__remove_meta_approved($comment) { delete_comment_meta((int)$comment->comment_ID, 'ct_marked_as_approved'); } /** * Ajax action feedback form user page. * * @param null $user_id * @param null $status * @param null $direct_call */ function apbct_user__send_feedback($user_id = null, $status = null, $direct_call = null) { AJAXService::checkNonceRestrictingNonAdmins('security'); if ( ! $direct_call ) { $user_id = Post::getInt('user_id'); $status = Post::getString('status', null, 'word'); } $hash = isset($user_id) ? get_user_meta($user_id, 'ct_hash', true) : null; if ( $hash ) { if ( $status === 'approve' || $status === '1' ) { $result = ct_send_feedback($hash . ":1"); $result = $result === true ? 1 : 0; } if ( $status === 'spam' || $status === 'disapprove' || $status === '0' ) { $result = ct_send_feedback($hash . ":0"); $result = $result === true ? 1 : 0; } } else { $result = 'no_hash'; } if ( ! $direct_call ) { ! empty($result) ? die($result) : die(0); } } /** * Send feedback when user deleted * * @param $user_id * @param null $_reassign * * @return null */ function apbct_user__delete__hook($user_id, $_reassign = null) { $hash = get_user_meta($user_id, 'ct_hash', true); if ( $hash !== '' ) { ct_feedback($hash, 0); } } /** * Check compatibility action */ add_action('apbct__check_compatibility', 'apbct__check_compatibility_handler'); function apbct__check_compatibility_handler() { new \Cleantalk\Common\Compatibility(); } /** * Function for `wpmu_blogs_columns` filter-hook. * * @param string[] $sites_columns An array of displayed site columns. * * @return string[] */ function apbct__wpmu_blogs_columns_filter($sites_columns) { $sites_columns['cleantalk_status'] = esc_html__('CleanTalk Status', 'cleantalk-spam-protect'); return $sites_columns; } add_filter('wpmu_blogs_columns', 'apbct__wpmu_blogs_columns_filter'); /** * Function for `manage_posts_custom_column` action-hook. * * @param string $_column_name The name of the column to display. * @param int $site_id The current post ID. * * @return void */ function apbct__manage_sites_custom_column_action($column_name, $site_id) { if ( $column_name !== 'cleantalk_status' ) { return; } $cleantalk_data = get_blog_option($site_id, 'cleantalk_data'); $key_is_ok_text = esc_html__('The Access key is set and correct', 'cleantalk-spam-protect'); $key_is_bad_text = esc_html__('The Access key is not set or is incorrect', 'cleantalk-spam-protect'); $key_status_caption = '<span style="color: red"">' . $key_is_bad_text . '</span>'; if (!$cleantalk_data) { return; } $key_is_ok = isset($cleantalk_data['key_is_ok']) ? $cleantalk_data['key_is_ok'] : false; if ($key_is_ok) { $key_status_caption = '<span style="color: green"">' . $key_is_ok_text . '</span>'; } echo $key_status_caption; } add_action('manage_sites_custom_column', 'apbct__manage_sites_custom_column_action', 10, 2); add_action('wp_ajax_apbct_action_adjust_change', 'apbct_action_adjust_change'); function apbct_action_adjust_change() { AJAXService::checkAdminNonce(); if (!current_user_can('activate_plugins')) { wp_send_json_error('Permission denied'); } if (in_array(Post::get('adjust'), array_keys(AdjustToEnvironmentHandler::SET_OF_ADJUST))) { try { $adjust = Post::getString('adjust'); $adjust_class = AdjustToEnvironmentHandler::SET_OF_ADJUST[$adjust]; $adjust_handler = new AdjustToEnvironmentHandler(); $adjust_handler->handleOne($adjust_class); } catch (Exception $exception) { error_log('CleanTalk adjusting action error: ' . $exception->getMessage()); } } wp_send_json_success(); } add_action('wp_ajax_apbct_action_adjust_reverse', 'apbct_action_adjust_reverse'); function apbct_action_adjust_reverse() { AJAXService::checkAdminNonce(); if (!current_user_can('activate_plugins')) { wp_send_json_error('Permission denied'); } if (in_array(Post::getString('adjust'), array_keys(AdjustToEnvironmentHandler::SET_OF_ADJUST))) { $adjust = Post::getString('adjust'); try { $adjust_class = AdjustToEnvironmentHandler::SET_OF_ADJUST[$adjust]; $adjust_handler = new AdjustToEnvironmentHandler(); $adjust_handler->reverseAdjust($adjust_class); } catch (Exception $exception) { error_log('CleanTalk adjusting reverse error: ' . $exception->getMessage()); } } wp_send_json_success(); } function apbct_action__create_support_user() { if (!current_user_can('activate_plugins')) { wp_send_json_error('Permission denied'); } $support_user = new SupportUser(); $result = $support_user->ajaxProcess(); wp_send_json($result); }
Save
Back