<?php
/* Sicherheitsabfrage */
if ( !class_exists('Antispam_Bee') ) {
die();
}
/**
* Antispam_Bee_GUI
*
* @since 2.4
*/
class Antispam_Bee_GUI extends Antispam_Bee {
/**
* Speicherung der GUI
*
* @since 0.1
* @change 2.5.2
*/
public static function save_changes()
{
/* Kein POST? */
if ( empty($_POST) ) {
wp_die(__('Cheatin’ uh?'));
}
/* Referer prüfen */
check_admin_referer('antispam_bee');
/* Optionen ermitteln */
$options = array(
'flag_spam' => (int)(!empty($_POST['ab_flag_spam'])),
'email_notify' => (int)(!empty($_POST['ab_email_notify'])),
'cronjob_enable' => (int)(!empty($_POST['ab_cronjob_enable'])),
'cronjob_interval' => (int)self::get_key($_POST, 'ab_cronjob_interval'),
'no_notice' => (int)(!empty($_POST['ab_no_notice'])),
'dashboard_count' => (int)(!empty($_POST['ab_dashboard_count'])),
'dashboard_chart' => (int)(!empty($_POST['ab_dashboard_chart'])),
'advanced_check' => (int)(!empty($_POST['ab_advanced_check'])),
'regexp_check' => (int)(!empty($_POST['ab_regexp_check'])),
'spam_ip' => (int)(!empty($_POST['ab_spam_ip'])),
'already_commented' => (int)(!empty($_POST['ab_already_commented'])),
'always_allowed' => (int)(!empty($_POST['ab_always_allowed'])),
'ignore_pings' => (int)(!empty($_POST['ab_ignore_pings'])),
'ignore_filter' => (int)(!empty($_POST['ab_ignore_filter'])),
'ignore_type' => (int)self::get_key($_POST, 'ab_ignore_type'),
'reasons_enable' => (int)(!empty($_POST['ab_reasons_enable'])),
'ignore_reasons' => (array)self::get_key($_POST, 'ab_ignore_reasons'),
'bbcode_check' => (int)(!empty($_POST['ab_bbcode_check'])),
'dnsbl_check' => (int)(!empty($_POST['ab_dnsbl_check'])),
'country_code' => (int)(!empty($_POST['ab_country_code'])),
'country_black' => sanitize_text_field(self::get_key($_POST, 'ab_country_black')),
'country_white' => sanitize_text_field(self::get_key($_POST, 'ab_country_white')),
'translate_api' => (int)(!empty($_POST['ab_translate_api'])),
'translate_lang' => sanitize_text_field(self::get_key($_POST, 'ab_translate_lang'))
);
/* Keine Tagmenge eingetragen? */
if ( empty($options['cronjob_interval']) ) {
$options['cronjob_enable'] = 0;
}
/* Translate API */
if ( !empty($options['translate_lang']) ) {
if ( !preg_match('/^(de|en|fr|it|es)$/', $options['translate_lang']) ) {
$options['translate_lang'] = '';
}
}
if ( empty($options['translate_lang']) ) {
$options['translate_api'] = 0;
}
/* Liste der Spamgründe */
if ( empty($options['reasons_enable']) ) {
$options['ignore_reasons'] = array();
}
/* Blacklist reinigen */
if ( !empty($options['country_black']) ) {
$options['country_black'] = preg_replace(
'/[^A-Z ]/',
'',
strtoupper($options['country_black'])
);
}
/* Whitelist reinigen */
if ( !empty($options['country_white']) ) {
$options['country_white'] = preg_replace(
'/[^A-Z ]/',
'',
strtoupper($options['country_white'])
);
}
/* Leere Listen? */
if ( empty($options['country_black']) && empty($options['country_white']) ) {
$options['country_code'] = 0;
}
/* Cron stoppen? */
if ( $options['cronjob_enable'] && !self::get_option('cronjob_enable') ) {
self::init_scheduled_hook();
} else if ( !$options['cronjob_enable'] && self::get_option('cronjob_enable') ) {
self::clear_scheduled_hook();
}
/* Optionen speichern */
self::update_options($options);
/* Redirect */
wp_safe_redirect(
add_query_arg(
array(
'updated' => 'true'
),
wp_get_referer()
)
);
die();
}
/**
* Generierung eine Selectbox
*
* @since 2.4.5
* @change 2.4.5
*
* @param string $name Name der Selectbox
* @param array $data Array mit Werten
* @param string $selected Selektierter Wert
* @return string $html Erzeugtes HTML
*/
private static function _build_select($name, $data, $selected)
{
/* Start HTML */
$html = '<select name="' .$name. '">';
/* Loop options */
foreach( $data as $k => $v) {
$html .= '<option value="' .esc_attr($k). '" ' .selected($selected, $k, false). '>' .esc_html__($v, 'antispam_bee'). '</option>';
}
/* Close HTML */
$html .= '</select>';
return $html;
}
/**
* Anzeige der GUI
*
* @since 0.1
* @change 2.5.2
*/
function options_page() { ?>
<div class="wrap" id="ab_main">
<?php screen_icon('ab') ?>
<h2>
Antispam Bee
</h2>
<form action="<?php echo admin_url('admin-post.php') ?>" method="post">
<input type="hidden" name="action" value="ab_save_changes" />
<?php wp_nonce_field('antispam_bee') ?>
<?php $options = self::get_options() ?>
<div class="ab-wrap">
<!--[if lt IE 9]>
<p class="browsehappy">
<a href="http://browsehappy.com">Browse Happy</a>
</p>
<![endif]-->
<div class="ab-column ab-arrow">
<h3 class="icon">
<?php esc_html_e('Antispam filter', 'antispam_bee') ?>
</h3>
<h6>
<?php esc_html_e('Filter in the execution order', 'antispam_bee') ?>
</h6>
<ul>
<li>
<label for="ab_already_commented">
<?php esc_html_e('Trust approved commentators', 'antispam_bee') ?>
<span><?php esc_html_e('No check for already commenting users', 'antispam_bee') ?></span>
</label>
<input type="checkbox" name="ab_already_commented" id="ab_already_commented" value="1" <?php checked($options['already_commented'], 1) ?> />
</li>
<li>
<label for="ab_bbcode_check">
<?php esc_html_e('BBCode is spam', 'antispam_bee') ?>
<span><?php esc_html_e('Review the comment contents for BBCode links', 'antispam_bee') ?></span>
</label>
<input type="checkbox" name="ab_bbcode_check" id="ab_bbcode_check" value="1" <?php checked($options['bbcode_check'], 1) ?> />
</li>
<li>
<label for="ab_advanced_check">
<?php esc_html_e('Validate the ip address of commentators', 'antispam_bee') ?>
<span><?php esc_html_e('Validity check for used ip address', 'antispam_bee') ?></span>
</label>
<input type="checkbox" name="ab_advanced_check" id="ab_advanced_check" value="1" <?php checked($options['advanced_check'], 1) ?> />
</li>
<li>
<label for="ab_regexp_check">
<?php esc_html_e('Use regular expressions', 'antispam_bee') ?>
<span><?php _e('Predefined and custom patterns by <a href="https://gist.github.com/4242142" target="_blank">plugin hook</a>', 'antispam_bee') ?></span>
</label>
<input type="checkbox" name="ab_regexp_check" id="ab_regexp_check" value="1" <?php checked($options['regexp_check'], 1) ?> />
</li>
<li>
<label for="ab_spam_ip">
<?php esc_html_e('Look in the local spam database', 'antispam_bee') ?>
<span><?php esc_html_e('Already marked as spam? Yes? No?', 'antispam_bee') ?></span>
</label>
<input type="checkbox" name="ab_spam_ip" id="ab_spam_ip" value="1" <?php checked($options['spam_ip'], 1) ?> />
</li>
<li>
<label for="ab_dnsbl_check">
<?php esc_html_e('Use a public antispam database', 'antispam_bee') ?>
<span><?php _e('Matching the ip address with <a href="http://opm.tornevall.org" target="_blank">Tornevall</a>', 'antispam_bee') ?></span>
</label>
<input type="checkbox" name="ab_dnsbl_check" id="ab_dnsbl_check" value="1" <?php checked($options['dnsbl_check'], 1) ?> />
</li>
<li>
<label for="ab_country_code">
<?php esc_html_e('Block comments from specific countries', 'antispam_bee') ?>
<span><?php esc_html_e('Filtering the requests depending on country', 'antispam_bee') ?></span>
</label>
<input type="checkbox" name="ab_country_code" id="ab_country_code" value="1" <?php checked($options['country_code'], 1) ?> />
<ul>
<li>
<input type="text" name="ab_country_black" id="ab_country_black" value="<?php echo esc_attr($options['country_black']); ?>" class="ab-medium-field code" />
<label for="ab_country_black">
Blacklist <a href="http://www.iso.org/iso/country_names_and_code_elements" target="_blank">ISO Codes</a>
</label>
</li>
<li>
<input type="text" name="ab_country_white" id="ab_country_white" value="<?php echo esc_attr($options['country_white']); ?>" class="ab-medium-field code" />
<label for="ab_country_white">
Whitelist <a href="http://www.iso.org/iso/country_names_and_code_elements" target="_blank">ISO Codes</a>
</label>
</li>
</ul>
</li>
<li>
<label for="ab_translate_api">
<?php esc_html_e('Allow comments only in certain language', 'antispam_bee') ?>
<span><?php esc_html_e('Detection and approval in specified language', 'antispam_bee') ?></span>
</label>
<input type="checkbox" name="ab_translate_api" id="ab_translate_api" value="1" <?php checked($options['translate_api'], 1) ?> />
<ul>
<li>
<select name="ab_translate_lang">
<?php foreach( array('de' => 'German', 'en' => 'English', 'fr' => 'French', 'it' => 'Italian', 'es' => 'Spanish') as $k => $v ) { ?>
<option <?php selected($options['translate_lang'], $k); ?> value="<?php echo esc_attr($k) ?>"><?php esc_html_e($v, 'antispam_bee') ?></option>
<?php } ?>
</select>
<label for="ab_translate_lang">
<?php esc_html_e('Language', 'antispam_bee') ?>
</label>
</li>
</ul>
</li>
</ul>
</div>
<div class="ab-column ab-join">
<h3 class="icon advanced">
<?php esc_html_e('Advanced', 'antispam_bee') ?>
</h3>
<h6>
<?php esc_html_e('Other antispam tools', 'antispam_bee') ?>
</h6>
<ul>
<li>
<label for="ab_flag_spam">
<?php esc_html_e('Mark as spam, do not delete', 'antispam_bee') ?>
<span><?php esc_html_e('Keep the spam in my blog.', 'antispam_bee') ?></span>
</label>
<input type="checkbox" name="ab_flag_spam" id="ab_flag_spam" value="1" <?php checked($options['flag_spam'], 1) ?> />
</li>
<li>
<label for="ab_email_notify">
<?php esc_html_e('Notification by email', 'antispam_bee') ?>
<span><?php esc_html_e('Sending an alert to the admin', 'antispam_bee') ?></span>
</label>
<input type="checkbox" name="ab_email_notify" id="ab_email_notify" value="1" <?php checked($options['email_notify'], 1) ?> />
</li>
<li>
<label for="ab_no_notice">
<?php esc_html_e('Not store the reason in the comment body', 'antispam_bee') ?>
<span><?php esc_html_e('Filter name as reason for current suspicion', 'antispam_bee') ?></span>
</label>
<input type="checkbox" name="ab_no_notice" id="ab_no_notice" value="1" <?php checked($options['no_notice'], 1) ?> />
</li>
<li>
<label>
<?php echo sprintf(
esc_html__('Delete existing spam after %s days', 'antispam_bee'),
'<input type="text" name="ab_cronjob_interval" value="' .esc_attr($options['cronjob_interval']). '" class="ab-mini-field" />'
) ?>
<span><?php esc_html_e('Cleaning up the database from old entries', 'antispam_bee') ?></span>
</label>
<input type="checkbox" name="ab_cronjob_enable" id="ab_cronjob_enable" value="1" <?php checked($options['cronjob_enable'], 1) ?> />
</li>
<li>
<label>
<?php echo sprintf(
esc_html__('Limit on %s', 'antispam_bee'),
self::_build_select(
'ab_ignore_type',
array(
1 => 'Comments',
2 => 'Pings'
),
$options['ignore_type']
)
); ?>
<span><?php esc_html_e('Another type of spam will be deleted immediately', 'antispam_bee') ?></span>
</label>
<input type="checkbox" name="ab_ignore_filter" id="ab_ignore_filter" value="1" <?php checked($options['ignore_filter'], 1) ?> />
</li>
<li>
<label for="ab_reasons_enable">
<?php esc_html_e('Delete comments by spam reasons', 'antispam_bee') ?>
<span><?php esc_html_e('Multiple choice by pressing Ctrl/CMD', 'antispam_bee') ?></span>
</label>
<input type="checkbox" name="ab_reasons_enable" id="ab_reasons_enable" value="1" <?php checked($options['reasons_enable'], 1) ?> />
<ul>
<li>
<select name="ab_ignore_reasons[]" id="ab_ignore_reasons" size="2" multiple>
<?php foreach ( self::$defaults['reasons'] as $k => $v ) { ?>
<option <?php selected(in_array($k, $options['ignore_reasons']), true); ?> value="<?php echo $k ?>"><?php esc_html_e($v, 'antispam_bee') ?></option>
<?php } ?>
</select>
<label for="ab_ignore_reasons">
<?php esc_html_e('Spam Reason', 'antispam_bee') ?>
</label>
</li>
</ul>
</li>
</ul>
</div>
<div class="ab-column ab-diff">
<h3 class="icon more">
<?php esc_html_e('More', 'antispam_bee') ?>
</h3>
<h6>
<?php esc_html_e('A few little things', 'antispam_bee') ?>
</h6>
<ul>
<li>
<label for="ab_dashboard_chart">
<?php esc_html_e('Statistics on the dashboard', 'antispam_bee') ?>
<span><?php esc_html_e('Spam detection rate with daily values', 'antispam_bee') ?></span>
</label>
<input type="checkbox" name="ab_dashboard_chart" id="ab_dashboard_chart" value="1" <?php checked($options['dashboard_chart'], 1) ?> />
</li>
<li>
<label for="ab_dashboard_count">
<?php esc_html_e('Spam counter on the dashboard', 'antispam_bee') ?>
<span><?php esc_html_e('Amount of identified spam comments', 'antispam_bee') ?></span>
</label>
<input type="checkbox" name="ab_dashboard_count" id="ab_dashboard_count" value="1" <?php checked($options['dashboard_count'], 1) ?> />
</li>
<li>
<label for="ab_ignore_pings">
<?php esc_html_e('Do not check trackbacks / pingbacks', 'antispam_bee') ?>
<span><?php esc_html_e('No spam check for trackback notifications', 'antispam_bee') ?></span>
</label>
<input type="checkbox" name="ab_ignore_pings" id="ab_ignore_pings" value="1" <?php checked($options['ignore_pings'], 1) ?> />
</li>
<li>
<label for="ab_always_allowed">
<?php esc_html_e('Comment form used outside of posts', 'antispam_bee') ?>
<span><?php esc_html_e('Check for comment forms on archive pages', 'antispam_bee') ?></span>
</label>
<input type="checkbox" name="ab_always_allowed" id="ab_always_allowed" value="1" <?php checked($options['always_allowed'], 1) ?> />
</li>
</ul>
</div>
<div class="ab-column ab-submit">
<p>
<?php if ( get_locale() == 'de_DE' ) { ?>
<a href="http://playground.ebiene.de/antispam-bee-wordpress-plugin/" target="_blank">Handbuch</a>
<?php } ?>
<a href="https://flattr.com/t/1323822" target="_blank">Flattr</a><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=5RDDW9FEHGLG6" target="_blank">PayPal</a>
</p>
<input type="submit" class="button-primary" value="<?php _e('Save Changes') ?>" />
</div>
</div>
</form>
</div>
<?php }
}