WordPress.org

Making WordPress.org

Changeset 7472


Ignore:
Timestamp:
07/17/2018 07:24:58 PM (9 months ago)
Author:
coreymckrill
Message:

CampTix Attendance: Add sorting options to attendance UI.

Update the Attendance UI filters with the ability to sort Attendees by First
Name, Last Name and Order Date.

Also:

  • Assure defaults for model and filter settings (id was missing from model).
  • Fix console error about viewport tag using semicolons instead of commas.

Fixes #1097
Props dryanpress

Location:
sites/trunk/wordcamp.org/public_html/wp-content/plugins/camptix-attendance/addons
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordcamp.org/public_html/wp-content/plugins/camptix-attendance/addons/assets/attendance-ui.js

    r7454 r7472  
    1515        defaults: function() {
    1616            return {
     17                id: null,
    1718                status: false,
     19                sort: 'firstName',
    1820                avatar: '',
    19                 name: '',
     21                firstName: '',
     22                lastName: ''
    2023            }
    2124        },
     
    163166         */
    164167        render: function() {
    165             this.$el.html( this.template( this.model.toJSON() ) );
     168            var attendeeData = _.extend( this.model.toJSON(), { sort: this.controller.filterSettings.sort } );
     169            this.$el.html( this.template( attendeeData ) );
    166170            return this;
    167171        },
     
    316320        events: {
    317321            'fastClick .close': 'close',
     322            'fastClick .filter-sort li': 'toggleSort',
    318323            'fastClick .filter-attendance li': 'toggleAttendance',
    319324            'fastClick .filter-tickets li': 'toggleTickets'
     
    367372            this.controller.trigger( 'filter', this.filterSettings );
    368373        },
     374
     375        /**
     376         * Toggle sort order for tickets list
     377         */
     378        toggleSort: function( event ) {
     379            var sortOrder = $( event.target ).data( 'sort' );
     380            this.filterSettings.sort = sortOrder;
     381            this.render();
     382
     383            this.controller.trigger( 'filter', this.filterSettings );
     384        }
    369385    });
    370386
     
    381397            'fastClick .dashicons-menu': 'menu',
    382398            'fastClick .submenu .search': 'searchView',
     399            'fastClick .submenu .sort': 'sortView',
    383400            'fastClick .submenu .refresh': 'refresh',
    384401            'fastClick .submenu .filter': 'filterView'
     
    397414                'attendance': 'none',
    398415                'tickets': _camptixAttendanceTickets,
    399                 'search': ''
     416                'search': '',
     417                'sort': 'firstName'
    400418            };
    401419
     
    433451
    434452            // Dispose of the current collection and cache it for later use.
    435             if ( 'undefined' != typeof this.collection ) {
     453            if ( 'undefined' !== typeof this.collection ) {
    436454                this.collection.off( null, null, this );
    437455                this.cache.push( this.collection );
  • sites/trunk/wordcamp.org/public_html/wp-content/plugins/camptix-attendance/addons/attendance-ui.php

    r919 r7472  
    2020    </script>
    2121
    22     <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" />
     22    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
    2323    <meta name="referrer" content="never" />
    2424</head>
     
    2727        <div class="spinner-container"><span class="spinner"></span></div>
    2828        <a href="#" class="status toggle <# if ( data.status ) { #> yes <# } #>"><div class="dashicons dashicons-admin-users"></div></a>
     29
    2930        <span class="name">
    30             {{ data.name }}
     31            <# if ( 'lastName' == data.sort ) { #>
     32                {{ data.lastName }}, {{ data.firstName }}
     33            <# } else { #>
     34                {{ data.firstName }} {{ data.lastName }}
     35            <# } #>
    3136        </span>
    3237    </script>
     
    3439    <script id="tmpl-attendee-toggle" type="text/template">
    3540        <img src="{{ data.avatar }}" />
    36         <p>Did <strong>{{ data.name }}</strong> attend <?php echo esc_html( $camptix_options['event_name'] ); ?>?</p>
     41        <p>Did <strong>{{ data.firstName }} {{ data.lastName }}</strong> attend <?php echo esc_html( $camptix_options['event_name'] ); ?>?</p>
    3742
    3843        <div class="yes-no-container">
     
    5257                <div class="submenu">
    5358                    <a href="#" class="search">Search</a>
    54                     <a href="#" class="filter">Filter</a>
     59                    <a href="#" class="filter">Sort & Filter</a>
    5560                    <a href="#" class="refresh">Refresh</a>
    5661                </div>
     
    7984        <a href="#" class="close dashicons dashicons-no"></a>
    8085        <div class="wrapper">
    81             <h1>Filters</h1>
     86            <h1>Sort & Filter</h1>
     87
     88            <h1 class="section-title">Sort Attendees By</h1>
     89            <ul class="filter-sort section-controls">
     90                <li data-sort="firstName" <# if ( data.sort == 'firstName' ) { #> class="selected" <# } #> >First Name</li>
     91                <li data-sort="lastName" <# if ( data.sort == 'lastName' ) { #> class="selected" <# } #> >Last Name</li>
     92                <li data-sort="orderDate" <# if ( data.sort == 'orderDate' ) { #> class="selected" <# } #> >Order Date</li>
     93            </ul>
    8294
    8395            <h1 class="section-title">Attendance</h1>
  • sites/trunk/wordcamp.org/public_html/wp-content/plugins/camptix-attendance/addons/attendance.php

    r5531 r7472  
    7171
    7272    /**
    73      * Synchronize an attendee model.
     73     * Synchronize a single attendee model.
    7474     *
    7575     * Sets are removes the attended flag for a given camptix_id.
     
    114114
    115115        $query_args = array(
    116             'post_type' => 'tix_attendee',
    117             'post_status' => 'publish',
    118             'orderby' => 'title',
    119             'order' => 'ASC',
    120             'paged' => $paged,
     116            'post_type'      => 'tix_attendee',
     117            'post_status'    => 'publish',
     118            'orderby'        => 'title',
     119            'order'          => 'ASC',
     120            'paged'          => $paged,
    121121            'posts_per_page' => 50,
    122             'meta_query' => '',
     122            'meta_query'     => '',
    123123        );
     124
     125        /**
     126         * Sort Attendee Posts
     127         */
     128        if ( ! empty( $_REQUEST['camptix_filters']['sort'] ) ) {
     129            switch ( $_REQUEST['camptix_filters']['sort'] ) {
     130                case 'lastName':
     131                    $query_args['orderby']  = 'meta_value';
     132                    $query_args['meta_key'] = 'tix_last_name';
     133                    break;
     134                case 'orderDate':
     135                    $query_args['orderby'] = 'date';
     136                    $query_args['order']   = 'DESC';
     137                    break;
     138                case 'firstName':
     139                default:
     140                    // each $attendee->post_title is already First Lastname
     141                    break;
     142            }
     143
     144            unset( $_REQUEST['camptix_filters']['sort'] );
     145        }
    124146
    125147        $filters = array();
     
    174196
    175197        $first_name = get_post_meta( $attendee->ID, 'tix_first_name', true );
    176         $last_name = get_post_meta( $attendee->ID, 'tix_last_name', true );
     198        $last_name  = get_post_meta( $attendee->ID, 'tix_last_name', true );
    177199        $avatar_url = sprintf( 'https://secure.gravatar.com/avatar/%s?s=160', md5( get_post_meta( $attendee->ID, 'tix_email', true ) ) );
    178200        $avatar_url = add_query_arg( 'd', 'https://secure.gravatar.com/avatar/ad516503a11cd5ca435acc9bb6523536?s=160', $avatar_url );
     
    182204        return array(
    183205            'id' => $attendee->ID,
    184             'name' => sprintf( '%s %s', $first_name, $last_name ),
     206            'firstName' => $first_name,
     207            'lastName' => $last_name,
    185208            'avatar' => esc_url_raw( $avatar_url ),
    186209            'status' => $status,
     
    250273    public function setup_sections( $sections ) {
    251274        $sections['attendance-ui'] = esc_html__( 'Attendance UI', 'wordcamporg' );
     275
    252276        return $sections;
    253277    }
     
    314338
    315339    /**
    316      * Get CampTix Tickets
     340     * Get CampTix Tickets (not to be confused with Attendees)
    317341     *
    318342     * Returns an array of published tickets registered with CampTix.
Note: See TracChangeset for help on using the changeset viewer.