161 lines
4.7 KiB
PHP
161 lines
4.7 KiB
PHP
<?php
|
|
/**
|
|
* The Columns Class.
|
|
*
|
|
* @package Antispam Bee
|
|
*/
|
|
|
|
defined( 'ABSPATH' ) || exit;
|
|
|
|
/**
|
|
* Class Antispam_Bee_Columns
|
|
*/
|
|
final class Antispam_Bee_Columns {
|
|
|
|
/**
|
|
* Register plugin columns on comments screen.
|
|
*
|
|
* @since 2.6.0
|
|
* @change 2.6.0
|
|
*
|
|
* @param array $columns Array with existing columns.
|
|
* @return array Array with extended columns.
|
|
*/
|
|
public static function register_plugin_columns( $columns ) {
|
|
return array_merge(
|
|
$columns,
|
|
array(
|
|
'antispam_bee_reason' => esc_html__( 'Spam Reason', 'antispam-bee' ),
|
|
)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Display plugin column values on comments screen
|
|
*
|
|
* @since 2.6.0
|
|
* @change 2.6.0
|
|
*
|
|
* @param string $column Currently selected column.
|
|
* @param integer $comment_id Comment ID.
|
|
*/
|
|
public static function print_plugin_column( $column, $comment_id ) {
|
|
if ( 'antispam_bee_reason' !== $column ) {
|
|
return;
|
|
}
|
|
|
|
$spam_reason = get_comment_meta( $comment_id, $column, true );
|
|
$spam_reasons = Antispam_Bee::$defaults['reasons'];
|
|
|
|
if ( empty( $spam_reason ) || empty( $spam_reasons[ $spam_reason ] ) ) {
|
|
return;
|
|
}
|
|
|
|
echo esc_html( $spam_reasons[ $spam_reason ] );
|
|
}
|
|
|
|
/**
|
|
* Register plugin sortable columns on comments screen
|
|
*
|
|
* @since 2.6.3
|
|
* @change 2.6.3
|
|
*
|
|
* @param array $columns Registered columns.
|
|
* @return array $columns Columns with AB field.
|
|
*/
|
|
public static function register_sortable_columns( $columns ) {
|
|
$columns['antispam_bee_reason'] = 'antispam_bee_reason';
|
|
|
|
return $columns;
|
|
}
|
|
|
|
// phpcs:disable WordPress.VIP.SlowDBQuery.slow_db_query_meta_key
|
|
// phpcs:disable WordPress.CSRF.NonceVerification.NoNonceVerification
|
|
/**
|
|
* Adjust orderby query
|
|
*
|
|
* @since 2.6.3
|
|
* @change 2.6.3
|
|
*
|
|
* @param \WP_Comment_Query $query Current WordPress query.
|
|
*/
|
|
public static function set_orderby_query( $query ) {
|
|
$orderby = isset( $_GET['orderby'] ) ? sanitize_text_field( wp_unslash( $_GET['orderby'] ) ) : '';
|
|
|
|
if ( empty( $orderby ) || 'antispam_bee_reason' !== $orderby ) {
|
|
return;
|
|
}
|
|
|
|
$query->query_vars['meta_key'] = 'antispam_bee_reason';
|
|
$query->query_vars['orderby'] = 'meta_value';
|
|
}
|
|
// phpcs:enable WordPress.VIP.SlowDBQuery.slow_db_query_meta_key
|
|
// phpcs:enable WordPress.CSRF.NonceVerification.NoNonceVerification
|
|
|
|
//phpcs:disable WordPress.CSRF.NonceVerification.NoNonceVerification
|
|
/**
|
|
* Filter comments by the spam reason
|
|
*
|
|
* @global \wpdb $wpdb
|
|
*/
|
|
public static function filter_columns() {
|
|
global $wpdb;
|
|
?>
|
|
<label class="screen-reader-text" for="filter-by-comment-spam-reason"><?php esc_html_e( 'Filter by spam reason', 'antispam-bee' ); ?></label>
|
|
<select id="filter-by-comment-spam-reason" name="comment_spam_reason">
|
|
<option value=""><?php esc_html_e( 'All spam reasons', 'antispam-bee' ); ?></option>
|
|
<?php
|
|
$spam_reason = isset( $_GET['comment_spam_reason'] ) ? sanitize_text_field( wp_unslash( $_GET['comment_spam_reason'] ) ) : '';
|
|
$reasons = $wpdb->get_results( "SELECT meta_value FROM {$wpdb->prefix}commentmeta WHERE meta_key = 'antispam_bee_reason' group by meta_value", ARRAY_A );
|
|
|
|
foreach ( $reasons as $reason ) {
|
|
if ( ! isset( Antispam_Bee::$defaults['reasons'][ $reason['meta_value'] ] ) ) {
|
|
continue;
|
|
}
|
|
$label = Antispam_Bee::$defaults['reasons'][ $reason['meta_value'] ];
|
|
echo "\t" . '<option value="' . esc_attr( $reason['meta_value'] ) . '"' . selected( $spam_reason, $reason['meta_value'], false ) . '>' . esc_html( $label ) . "</option>\n";
|
|
}
|
|
?>
|
|
</select>
|
|
<?php
|
|
}
|
|
//phpcs:enable WordPress.CSRF.NonceVerification.NoNonceVerification
|
|
|
|
//phpcs:disable WordPress.CSRF.NonceVerification.NoNonceVerification
|
|
//phpcs:disable WordPress.VIP.SlowDBQuery.slow_db_query_meta_value
|
|
//phpcs:disable WordPress.VIP.SlowDBQuery.slow_db_query_meta_key
|
|
/**
|
|
* Filter comments by the spam reason
|
|
*
|
|
* @param \WP_Comment_Query $query Current WordPress query.
|
|
*/
|
|
public static function filter_by_spam_reason( $query ) {
|
|
$spam_reason = isset( $_GET['comment_spam_reason'] ) ? sanitize_text_field( wp_unslash( $_GET['comment_spam_reason'] ) ) : '';
|
|
if ( empty( $spam_reason ) || ! in_array( $spam_reason, array_keys( Antispam_Bee::$defaults['reasons'] ), true ) ) {
|
|
return;
|
|
}
|
|
|
|
$query->query_vars['meta_key'] = 'antispam_bee_reason';
|
|
$query->query_vars['meta_value'] = $spam_reason;
|
|
}
|
|
//phpcs:enable WordPress.VIP.SlowDBQuery.slow_db_query_meta_key
|
|
//phpcs:enable WordPress.VIP.SlowDBQuery.slow_db_query_meta_value
|
|
//phpcs:enable WordPress.CSRF.NonceVerification.NoNonceVerification
|
|
|
|
/**
|
|
* Print CSS for the plugin column
|
|
*
|
|
* @since 2.6.1
|
|
* @change 2.6.1
|
|
*/
|
|
public static function print_column_styles() {
|
|
?>
|
|
<style>
|
|
.column-antispam_bee_reason {
|
|
width: 10%;
|
|
}
|
|
</style>
|
|
<?php
|
|
}
|
|
}
|