Making WordPress.org

Ticket #2893: camptix-add-flag-filtering.diff

File camptix-add-flag-filtering.diff, 3.3 KB (added by dd32, 7 years ago)
  • wordcamp.org/public_html/wp-content/plugins/camptix-admin-flags/addons/admin-flags.php

    diff --git wordcamp.org/public_html/wp-content/plugins/camptix-admin-flags/addons/admin-flags.php wordcamp.org/public_html/wp-content/plugins/camptix-admin-flags/addons/admin-flags.php
    index 89165594..71bd0f48 100644
    class CampTix_Admin_Flags_Addon extends CampTix_Addon { 
    4444                        // Bulk editing from Attendees screen
    4545                        add_filter( 'manage_tix_attendee_posts_columns', array( $this, 'add_custom_columns' ) );
    4646                        add_action( 'manage_tix_attendee_posts_custom_column', array( $this, 'render_custom_columns' ), 10, 2 );
     47                        add_filter( 'views_edit-tix_attendee', array( $this, 'add_custom_filters' ) );
     48                        add_filter( 'pre_get_posts', array( $this, 'add_custom_filters_post_filter' ) );
    4749                        add_action( 'admin_footer-edit.php', array( $this, 'render_client_side_templates' ) );
    4850                        add_action( 'wp_ajax_tix_admin_flag_toggle', array( $this, 'toggle_flag' ) );
    4951                        add_action( 'admin_footer-edit.php', array( $this, 'print_javascript' ) );
    class CampTix_Admin_Flags_Addon extends CampTix_Addon { 
    301303        }
    302304
    303305        /**
     306         * Add custom views to the attendee listing post listing.
     307         */
     308        public function add_custom_filters( $views ) {
     309                global $wpdb;
     310                if ( 'tix_attendee' != $GLOBALS['typenow'] || ! $this->flags ) {
     311                        return $views;
     312                }
     313
     314                $meta_counts = $wpdb->get_results( "SELECT meta_value, COUNT(post_id) AS count FROM {$wpdb->postmeta} WHERE meta_key = 'camptix-admin-flag' GROUP BY meta_value", ARRAY_A );
     315                $meta_counts = wp_list_pluck( $meta_counts, 'count', 'meta_value' );
     316                if ( ! $meta_counts ) {
     317                        return $views;
     318                }
     319
     320                $currently_viewed_flag = !empty( $_GET['camptix_flag'] ) ? wp_unslash( $_GET['camptix_flag'] ) : false;
     321
     322                $base_url = add_query_arg( 'post_type', 'tix_attendee', 'edit.php' );
     323
     324                foreach ( $this->flags as $flag => $label ) {
     325                        $url = add_query_arg( 'camptix_flag', $flag, $base_url );
     326
     327                        $class_html = '';
     328                        if ( $currently_viewed_flag && $currently_viewed_flag == $flag ) {
     329                                $class_html = ' class="current"';
     330                        }
     331
     332                        $count = 0;
     333                        if ( isset( $meta_counts[ $flag ] ) ) {
     334                                $count = $meta_counts[ $flag ];
     335                        }
     336
     337                        $views[ $flag ] = sprintf(
     338                                '<a href="%s"%s>%s <span class="count">(%s)</span></a>',
     339                                esc_url( $url ),
     340                                $class_html,
     341                                $label,
     342                                number_format_i18n( $count )
     343                        );
     344
     345                }
     346
     347                return $views;
     348        }
     349
     350        /**
     351         * Filter the wp-admin post listing query to filter to admin flags.
     352         */
     353        public function add_custom_filters_post_filter( $query ) {
     354                if ( ! is_admin() || 'tix_attendee' != $GLOBALS['typenow'] ) {
     355                        return $query;
     356                }
     357
     358                $flag = !empty( $_GET['camptix_flag'] ) ? wp_unslash( $_GET['camptix_flag'] ) : false;
     359                if ( ! isset( $this->flags[ $flag ] ) ) {
     360                        $flag = false;
     361                }
     362
     363                if ( $flag ) {
     364                        if ( ! isset( $query->query_vars['meta_query'] ) ) {
     365                                $query->query_vars['meta_query'] = array();
     366                        }
     367
     368                        $query->query_vars['meta_query'][] = array(
     369                                'key' => 'camptix-admin-flag',
     370                                'value' => $flag,
     371                                'compare' => '=',
     372                                'type' => 'CHAR',
     373                        );
     374                }
     375
     376                return $query;
     377        }
     378
     379        /**
    304380         * Render the templates used by JavaScript
    305381         */
    306382        public function render_client_side_templates() {