WordPress.org

Making WordPress.org

Ticket #1097: 1097-allow-attendee-sorting.diff

File 1097-allow-attendee-sorting.diff, 9.2 KB (added by dryanpress, 10 months ago)
  • wordcamp.org/public_html/wp-content/plugins/camptix-attendance/addons/assets/attendance-ui.js

    diff --git wordcamp.org/public_html/wp-content/plugins/camptix-attendance/addons/assets/attendance-ui.js wordcamp.org/public_html/wp-content/plugins/camptix-attendance/addons/assets/attendance-ui.js
    index 150c37a3b..8a86f1e0e 100644
    jQuery(document).ready(function($){ 
    1414        camptix.models.Attendee = Backbone.Model.extend({
    1515                defaults: function() {
    1616                        return {
     17                                id: null,
    1718                                status: false,
     19                                sort: 'firstName',
    1820                                avatar: '',
    19                                 name: '',
     21                                firstName: '',
     22                                lastName: ''
    2023                        }
    2124                },
    2225
    jQuery(document).ready(function($){ 
    162165                 * Render the attendee list item.
    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                },
    168172
    jQuery(document).ready(function($){ 
    317321
    318322                events: {
    319323                        'fastClick .close': 'close',
     324                        'fastClick .filter-sort li': 'toggleSort',
    320325                        'fastClick .filter-attendance li': 'toggleAttendance',
    321326                        'fastClick .filter-tickets li': 'toggleTickets'
    322327                },
    jQuery(document).ready(function($){ 
    368373                        this.render();
    369374                        this.controller.trigger( 'filter', this.filterSettings );
    370375                },
     376
     377        /**
     378                 * Toggle sort order for tickets list
     379         */
     380        toggleSort: function( event ) {
     381                        var sortOrder = $( event.target ).data( 'sort' );
     382                        this.filterSettings.sort = sortOrder;
     383                        this.render();
     384
     385                        this.controller.trigger( 'filter', this.filterSettings );
     386                }
    371387        });
    372388
    373389        /**
    jQuery(document).ready(function($){ 
    382398                events: {
    383399                        'fastClick .dashicons-menu': 'menu',
    384400                        'fastClick .submenu .search': 'searchView',
     401                        'fastClick .submenu .sort': 'sortView',
    385402                        'fastClick .submenu .refresh': 'refresh',
    386403                        'fastClick .submenu .filter': 'filterView'
    387404                },
    jQuery(document).ready(function($){ 
    398415                        this.filterSettings = {
    399416                                'attendance': 'none',
    400417                                'tickets': _camptixAttendanceTickets,
    401                                 'search': ''
     418                                'search': '',
     419                                'sort': 'firstName'
    402420                        };
    403421
    404422                        this.render();
    jQuery(document).ready(function($){ 
    434452                                options = {};
    435453
    436454                        // Dispose of the current collection and cache it for later use.
    437                         if ( 'undefined' != typeof this.collection ) {
     455                        if ( 'undefined' !== typeof this.collection ) {
    438456                                this.collection.off( null, null, this );
    439457                                this.cache.push( this.collection );
    440458                        }
  • wordcamp.org/public_html/wp-content/plugins/camptix-attendance/addons/attendance-ui.php

    diff --git wordcamp.org/public_html/wp-content/plugins/camptix-attendance/addons/attendance-ui.php wordcamp.org/public_html/wp-content/plugins/camptix-attendance/addons/attendance-ui.php
    index 15b1ea915..9dc53fb95 100644
    $camptix_options = $camptix->get_options(); 
    1919                _camptixAttendanceTickets = [ <?php echo esc_js( implode( ', ', array_map( 'absint', wp_list_pluck( $camptix_tickets, 'ID' ) ) ) ); ?> ];
    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>
    2525<body>
    2626        <script id="tmpl-attendee" type="text/template">
    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                 <span class="name">
    30                         {{ data.name }}
    31                 </span>
     29
     30        <span class="name">
     31            <# if ( 'lastName' == data.sort ) { #>
     32                {{ data.lastName }}, {{ data.firstName }}
     33            <# } else { #>
     34                {{ data.firstName }} {{ data.lastName }}
     35            <# } #>
     36        </span>
    3237        </script>
    3338
    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">
    3944                        <a href="#" class="yes">Yes</a>
    $camptix_options = $camptix->get_options(); 
    5156                                <a href="#" class="dashicons dashicons-menu"></a>
    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>
    5762                        </div>
    $camptix_options = $camptix->get_options(); 
    7883        <script id="tmpl-attendee-filter" type="text/template">
    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>
    8496                        <ul class="filter-attendance section-controls">
  • wordcamp.org/public_html/wp-content/plugins/camptix-attendance/addons/attendance.php

    diff --git wordcamp.org/public_html/wp-content/plugins/camptix-attendance/addons/attendance.php wordcamp.org/public_html/wp-content/plugins/camptix-attendance/addons/attendance.php
    index 9707106be..90bfac115 100644
    class CampTix_Attendance extends CampTix_Addon { 
    7070        }
    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.
    7676         */
    class CampTix_Attendance extends CampTix_Addon { 
    113113                $ticket_ids = wp_list_pluck( $this->get_tickets(), '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                );
    124124
     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        }
     146
    125147                $filters = array();
    126148                if ( ! empty( $_REQUEST['camptix_filters'] ) )
    127149                        $filters = (array) $_REQUEST['camptix_filters'];
    class CampTix_Attendance extends CampTix_Addon { 
    170192         * with an AJAX method.
    171193         */
    172194        public function _make_object( $attendee ) {
    173                 $attendee = get_post( $attendee );
     195        $attendee = get_post( $attendee );
    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 );
    179201
    class CampTix_Attendance extends CampTix_Addon { 
    181203
    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,
    187210                );
    class CampTix_Attendance extends CampTix_Addon { 
    249272         */
    250273        public function setup_sections( $sections ) {
    251274                $sections['attendance-ui'] = esc_html__( 'Attendance UI', 'wordcamporg' );
     275
    252276                return $sections;
    253277        }
    254278
    class CampTix_Attendance extends CampTix_Addon { 
    313337        }
    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.
    319343         */