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
 | 
						|
	}
 | 
						|
}
 |