Adding ability to update the attendee from admin attendee list.
authorSteve Sutton <steve@gaslightmedia.com>
Mon, 8 Jan 2018 20:46:42 +0000 (15:46 -0500)
committerSteve Sutton <steve@gaslightmedia.com>
Mon, 8 Jan 2018 20:50:57 +0000 (15:50 -0500)
Edit attendee shows the custom fields now and it will save out the
attendee (fname,lname) and the custom fields.

models/admin/ajax/regAdmin.php
models/admin/ajax/regAdmin/attendee.php [new file with mode: 0644]
views/admin/registrations/eventRegistrants.html
views/admin/registrations/eventSubTabs.html

index 7fbc9e7..acb8e45 100644 (file)
@@ -75,7 +75,7 @@ class GlmMembersAdmin_ajax_regAdmin
         $collection = filter_var( $_REQUEST['collection'], FILTER_SANITIZE_STRING );
 
         // If not a valid collection, die quietly
-        if (!in_array($collection, array('regClasses', 'regRates'))) {
+        if (!in_array($collection, array('regClasses', 'regRates', 'attendee'))) {
             $this->failureResponse('Not a valid desitination (collection?).');
         }
 
diff --git a/models/admin/ajax/regAdmin/attendee.php b/models/admin/ajax/regAdmin/attendee.php
new file mode 100644 (file)
index 0000000..289532c
--- /dev/null
@@ -0,0 +1,140 @@
+<?php
+/**
+ * Gaslight Media Members Database
+ * Admin Registrations AJAX processing for Rates
+ *
+ * PHP version 5.5
+ *
+ * @category glmWordPressPlugin
+ * @package  glmMembersDatabase
+ * @author   Chuck Scott <cscott@gaslightmedia.com>
+ * @license  http://www.gaslightmedia.com Gaslightmedia
+ * @release  regRates.php,v 1.0 2014/10/31 19:31:47 cscott Exp $
+ * @link     http://dev.gaslightmedia.com/
+ */
+
+// Load Registrations data abstract
+require_once GLM_MEMBERS_REGISTRATIONS_PLUGIN_CLASS_PATH.'/data/dataRegRate.php';
+
+class GlmMembersAdmin_registrations_ajax_attendee // extends GlmDataRegistrationsRequestRegistrant
+{
+
+    /**
+     * WordPress Database Object
+     *
+     * @var $wpdb
+     * @access public
+     */
+    public $wpdb;
+    /**
+     * Plugin Configuration Data
+     *
+     * @var $config
+     * @access public
+     */
+    public $config;
+
+    /**
+     * Constructor
+     *
+     * This contructor performs the work for this model. This model returns
+     * an array containing the following.
+     *
+     * 'status'
+     *
+     * True if successfull and false if there was a fatal failure.
+     *
+     * 'view'
+     *
+     * A suggested view name that the contoller should use instead of the
+     * default view for this model or false to indicate that the default view
+     * should be used.
+     *
+     * 'data'
+     *
+     * Data that the model is returning for use in merging with the view to
+     * produce output.
+     *
+     * @wpdb object WordPress database object
+     *
+     * @return array Array containing status, suggested view, and any data
+     */
+    public function __construct ($wpdb, $config)
+    {
+
+        // Save WordPress Database object
+        $this->wpdb = $wpdb;
+
+        // Save plugin configuration object
+        $this->config = $config;
+
+        /*
+         * Run constructor for the Registrations data class
+         *
+         * Note, the third parameter is a flag that indicates to the Contacts
+         * data class that it should flag a group of fields as 'view_only'.
+         */
+        // parent::__construct(false, false, true);
+
+    }
+
+    public function modelAction($modelData)
+    {
+
+        trigger_error( print_r( $modelData, true ) );
+
+
+        // Perform specified action
+        switch ($modelData['option']) {
+
+            case 'update':
+
+                $this->wpdb->update(
+                    GLM_MEMBERS_REGISTRATIONS_PLUGIN_DB_PREFIX . 'reg_request_registrant',
+                    array(
+                        'fname' => $modelData['fname'],
+                        'lname' => $modelData['lname'],
+                    ),
+                    array( 'id' => $modelData['reg_id'] ),
+                    '%s',
+                    array( '%d' )
+                );
+
+                $registrant = array(
+                    'id'    => $modelData['reg_id'],
+                    'fname' => $modelData['fname'],
+                    'lname' => $modelData['lname'],
+                );
+
+                parse_str( $modelData['formData'], $queryParams );
+                // Store the custom field data
+                $_REQUEST = $queryParams;
+
+                // Save the custom field data if custom fields plugin is on
+                apply_filters(
+                    'glm-members-customfields-form-submit',
+                    '',
+                    'glm_reg_customfields_reg_event_attendee_' . $modelData['reg_event_id'],
+                    $modelData['reg_id'],
+                    true
+                );
+
+                echo json_encode( $registrant, JSON_NUMERIC_CHECK );
+                wp_die();
+
+                break;
+
+            default:
+                die();  // should never get here
+                break;
+
+        }
+
+        wp_die();
+
+
+
+    }
+
+
+}
index 58abe0f..6f9562c 100644 (file)
             </span>
         </p>
     </div>
+</form>
 
-    <div class="glm-admin-table-inner glm-admin-table">
+<div class="glm-admin-table-inner glm-admin-table">
 
-        <p><b>Total found:</b> {$registrantCount}&nbsp;&nbsp;</p>
+    <p><b>Total found:</b> {$registrantCount}&nbsp;&nbsp;</p>
 
-        {if $paging}
-            <input type="Submit" name="pageSelect" value="Previous {$limit} {$terms.reg_term_attendee_plur_cap}" class="button button-secondary glm-button"{if !$prevStart} disabled{/if}>
-            <input type="Submit" name="pageSelect" value="Next {$limit} {$terms.reg_term_attendee_plur_cap}" class="button button-secondary glm-button"{if !$nextStart} disabled{/if}>
-        {/if}
+    {if $paging}
+    <form method="post" action="{$thisUrl}?page={$thisPage}">
+        <input type="hidden" name="page" value="{$thisPage}">
+        <input type="hidden" name="option" value="registrants">
+        <input type="hidden" name="regEventID" value="{$regEvent.id}">
+        <input type="hidden" name="prevStart" value="{$prevStart}">
+        <input type="hidden" name="nextStart" value="{$nextStart}">
+        <input type="hidden" name="limit" value="{$limit}">
+        <input type="Submit" name="pageSelect" value="Previous {$limit} {$terms.reg_term_attendee_plur_cap}" class="button button-secondary glm-button"{if !$prevStart} disabled{/if}>
+        <input type="Submit" name="pageSelect" value="Next {$limit} {$terms.reg_term_attendee_plur_cap}" class="button button-secondary glm-button"{if !$nextStart} disabled{/if}>
+    </form>
+    {/if}
 
-        <table class="wp-list-table striped glm-admin-table" style="width: 100%;">
-            <thead>
-                <tr>
-
-                    <th>Name</th>
-                    <th>Level</th>
-                    <th>Date/Time</th>
-                    <th>Rate</th>
-                    <th>Status</th>
-
-                </tr>
-            </thead>
-            <tbody>
-    {if $haveRegistrants}
-        {foreach $registrants as $r}
-                <tr class="glm-edit-form glm-attendee-{$r.id}">
-
-                    <td>
-                        <span style="clear:right;float:left;display:block;width:100%;">
-                            {$r.fname} {$r.lname}
-                        </span>
-                        <span class="attendee-edit-link">
-                            <a class="glm-edit" href="#" data-registrant="{$r.id}">Edit {$terms.reg_term_attendee_cap}</a> |
-                        </span>
-                        <span class="attendee-edit-link">
-                            <a href="{$thisUrl}?page=glm-members-admin-menu-registrations-requests&option=requestDashboard&requestID={$r.reg_request}">View Request</a> |
-                        </span>
-                        <span class="attendee-edit-link">
-                            <a href="{$thisUrl}?page=glm-members-admin-menu-registrations-accounts&glm_action=accounts&option=accountDashboard&accountID={$r.account.id}">View Account</a> |
-                        </span>
-                        <span class="attendee-edit-link">
-                            <a href="#">View Full Details</a>
-                        </span>
-                    </td>
-                    <td>{$r.class_name}</td>
-                    <td>{$r.event_time_reformatted}</td>
-                    <td>{$r.rate_name}</td>
-                    <td>{$r.request_status_name}</td>
-
-                </tr>
-                <tr class="glm-edit-form glm-edit-form-{$r.id}" style="display:none;">
-                    <td colspan="5">
-                        <form action="#">
-                            <div class="glm-row">
-                                <div class="glm-columns glm-small-12">
-                                    <label>Email</label>
-                                    <input type="text" name="email" value="{$r.account.email}">
-                                    <label>First Name</label>
-                                    <input type="text" name="fname" value="{$r.account.fname}">
-                                    <label>Last Name</label>
-                                    <input type="text" name="lname" value="{$r.account.lname}">
-                                </div>
+    {* Attendee Listing Table *}
+    {* Showing the results from reg_request_registrant table *}
+    <table class="wp-list-table striped glm-admin-table-single" style="width: 100%;">
+        <thead>
+            <tr>
+                <th>Name</th>
+                <th>Level</th>
+                <th>Date/Time</th>
+                <th>Rate</th>
+                <th>Status</th>
+            </tr>
+        </thead>
+        <tbody>
+        {if $haveRegistrants}
+            {foreach $registrants as $r}
+            <tr class="glm-edit-form glm-attendee-{$r.id}{if $r@iteration is div by 2} alternate{/if}">
+                <td>
+                    <span style="clear:right;float:left;display:block;width:100%;">
+                        <span class="glm-attendee-fullname-{$r.id}">{$r.fname} {$r.lname}</span>
+                    </span>
+                    <span class="attendee-edit-link">
+                        <a class="glm-edit" href="#" data-registrant="{$r.id}">Edit {$terms.reg_term_attendee_cap}</a> |
+                    </span>
+                    <span class="attendee-edit-link">
+                        <a href="{$thisUrl}?page=glm-members-admin-menu-registrations-requests&option=requestDashboard&requestID={$r.reg_request}">View Request</a> |
+                    </span>
+                    <span class="attendee-edit-link">
+                        <a href="{$thisUrl}?page=glm-members-admin-menu-registrations-accounts&glm_action=accounts&option=accountDashboard&accountID={$r.account.id}">View Account</a>
+                    </span>
+                </td>
+                <td>{$r.class_name}</td>
+                <td>{$r.event_time_reformatted}</td>
+                <td>{$r.rate_name}</td>
+                <td>{$r.request_status_name}</td>
+            </tr>
+            <tr class="glm-edit-form glm-edit-form-{$r.id}{if $r@iteration is div by 2} alternate{/if}" style="display:none;">
+                <td colspan="5">
+                    <h4>Edit Attendee</h4>
+                        <div class="glm-row">
+                            <div id="glm-attendee-{$r.id}" class="glm-columns glm-small-{if apply_filters('glm-members-customfields-plugin-active', false)}6{else}12{/if}">
+                                <b>{$r.account.email}</b>
+                                <label>First Name</label>
+                                <input class="glm-form-text-input-medium" type="text" name="fname" value="{$r.fname}">
+                                <label>Last Name</label>
+                                <input class="glm-form-text-input-medium" type="text" name="lname" value="{$r.lname}">
                             </div>
-                            <div class="glm-row">
-                                <div class="glm-columns glm-small-12">
-                                    <button class="glm-cancel" data-registrant="{$r.id}">Cancel</button>
-                                    <button class="glm-update button button-primary" data-registrant="{$r.id}">Update</button>
+                            {if apply_filters('glm-members-customfields-plugin-active', false)}
+                            <form action="#" id="glm-attendee-form-{$r.id}">
+                                <div class="glm-columns glm-small-5">
+                                    Additional Info
+                                    <div class="customfields-attendee-{$r.id}">
+                                    </div>
                                 </div>
+                            </form>
+                            {/if}
+                        </div>
+                        <div class="glm-row">
+                            <div class="glm-columns glm-small-7">
+                                <button class="glm-cancel" data-registrant="{$r.id}">Cancel</button>
+                                <button class="glm-update button button-primary" data-registrant="{$r.id}">Update</button>
                             </div>
-                        </form>
-                    </td>
-                </tr>
-        {/foreach}
-    {else}
-                <tr class="alternate"><td colspan="2">(no registrants listed)</td></tr>
-    {/if}
+                        </div>
+                </td>
+            </tr>
+            {/foreach}
+        {else}
+            <tr class="alternate"><td colspan="2">(no registrants listed)</td></tr>
+        {/if}
             </tbody>
         </table>
 
 
-        {if $paging}
-            <input type="Submit" name="pageSelect" value="Previous {$limit} {$terms.reg_term_attendee_plur_cap}" class="button button-secondary glm-button"{if !$prevStart} disabled{/if}>
-            <input type="Submit" name="pageSelect" value="Next {$limit} {$terms.reg_term_attendee_plur_cap}" class="button button-secondary glm-button"{if !$nextStart} disabled{/if}>
-        {/if}
-
-    </div>
+    {if $paging}
+    <form method="post" action="{$thisUrl}?page={$thisPage}">
+        <input type="hidden" name="page" value="{$thisPage}">
+        <input type="hidden" name="option" value="registrants">
+        <input type="hidden" name="regEventID" value="{$regEvent.id}">
+        <input type="hidden" name="prevStart" value="{$prevStart}">
+        <input type="hidden" name="nextStart" value="{$nextStart}">
+        <input type="hidden" name="limit" value="{$limit}">
+        <input type="Submit" name="pageSelect" value="Previous {$limit} {$terms.reg_term_attendee_plur_cap}" class="button button-secondary glm-button"{if !$prevStart} disabled{/if}>
+        <input type="Submit" name="pageSelect" value="Next {$limit} {$terms.reg_term_attendee_plur_cap}" class="button button-secondary glm-button"{if !$nextStart} disabled{/if}>
+    </form>
+    {/if}
 
-</form>
+</div>
 
+{* Export and Print popup form *}
 <div id="exportRegistrantsDialog" title="Export {$terms.reg_term_attendee_plur}">
     <form id="exportForm" action="{$ajaxUrl}" method="post" enctype="multipart/form-data">
         <input type="hidden" name="action" value="glm_members_admin_ajax">
                         </tr>
                         <tr>
                             <td class="exportFieldsTd">
-                                <input type="checkbox" name="exportId"> {$terms.reg_term_attendee_cap} ID<br>
+                                <input class="" type="checkbox" name="exportId"> {$terms.reg_term_attendee_cap} ID<br>
                                 <input type="checkbox" name="exportRegistrant" checked> {$terms.reg_term_attendee_cap} Name<br>
                                 <input type="checkbox" name="exportAddr1" checked> Address Line #1<br>
                                 <input type="checkbox" name="exportAddr2" checked> Address Line #2<br>
                                 {if apply_filters('glm-members-customfields-plugin-active', false)}
                                     <input type="checkbox" name="exportCustom" checked> Custom Fields <br>
                                 {/if}
-
                             </td>
                         </tr>
                     </table>
@@ -227,6 +244,25 @@ jQuery(document).ready(function($){
         e.preventDefault();
         $('.glm-edit-form-' + $(this).data('registrant')).show();
         $('.glm-attendee-' + $(this).data('registrant')).hide();
+        var refId = $(this).data('registrant');
+        {if apply_filters('glm-members-customfields-plugin-active', false)}
+            $.ajax({
+                cache: false,
+                type: 'POST',
+                url: '{$ajaxUrl}?action=glm_members_admin_ajax',
+                data: {
+                    'action': 'glm_members_admin_ajax',
+                    'glm_action': 'customFieldsFront',
+                    'option': 'displayForm',
+                    'fid': 'glm_reg_customfields_reg_event_attendee_' + {$regEvent.id},
+                    'recordId': refId,
+                    'parentFormId': '',
+                    'formData': false,
+                },
+            }).done(function( formHtml ){
+                $('.customfields-attendee-' + refId).html( formHtml );
+            }).fail();
+        {/if}
     });
     $('.glm-cancel').click(function(e){
         e.preventDefault();
@@ -239,6 +275,41 @@ jQuery(document).ready(function($){
     $('.glm-detail').click(function(e){
         e.preventDefault();
     });
+    $('.glm-update').click(function(e){
+        e.preventDefault();
+        var refId = $(this).data('registrant');
+
+        // Get possible custom field data
+        var attendeeFormData = $('#glm-attendee-form-' + refId).serialize();
+        console.log(attendeeFormData);
+
+        var accountFname = $('#glm-attendee-' + refId + ' input[name=fname]').val().trim();
+        var accountLname = $('#glm-attendee-' + refId + ' input[name=lname]').val().trim();
+        $.ajax({
+            context: this,
+            url: '{$ajaxUrl}?action=glm_members_admin_ajax',
+            dataType: 'json',
+            data: {
+                glm_action: 'regAdmin',
+                collection: 'attendee',
+                option: 'update',
+                reg_id: refId,
+                fname: accountFname,
+                lname: accountLname,
+                reg_event_id: {$regEvent.id},
+                formData: attendeeFormData,
+            }
+        }).done(function(account){
+            // Have to change the actual td display too.
+            $('.glm-attendee-fullname-' + account.id ).html( account.fname + ' ' + account.lname );
+            // And update the edit form also
+            $('#glm-attendee-form-' + account.id + ' input[name=fname]').val( account.fname );
+            $('#glm-attendee-form-' + account.id + ' input[name=lname]').val( account.lname );
+            $('.glm-edit-form-' + $(this).data('registrant')).hide();
+            $('.glm-attendee-' + $(this).data('registrant')).show();
+        }).fail(function(msg){
+        });
+    });
 
 });
 </script>
index 95224e1..9a36e8a 100644 (file)
@@ -15,7 +15,8 @@
 {/if}
         <a {if $option=="notifications" || $option=="notificationsUpdate"}onClick="return false;" class="nav-tab nav-tab-active"{else}href="{$thisUrl}?page=glm-members-admin-menu-registrations-events&option=notifications&regEventID={$regEventID}" class="nav-tab"{/if}>Attendee Notification</a>
         <a {if $option=="paymentCodes"}onClick="return false;" class="nav-tab nav-tab-active"{else}href="{$thisUrl}?page=glm-members-admin-menu-registrations-events&option=paymentCodes&regEventID={$regEventID}" class="nav-tab"{/if}>Payment Codes</a>
-<a {if $option=="registrants"}onClick="return false;" class="nav-tab nav-tab-active"{else}href="{$thisUrl}?page=glm-members-admin-menu-registrations-events&option=registrants&regEventID={$regEventID}" class="nav-tab"{/if}>{$terms.reg_term_attendee_plur_cap}</a>
+        <!-- <a {if $option=="registrants"}onClick="return false;" class="nav&#45;tab nav&#45;tab&#45;active"{else}href="{$thisUrl}?page=glm&#45;members&#45;admin&#45;menu&#45;registrations&#45;events&#38;option=registrants&#38;regEventID={$regEventID}" class="nav&#45;tab"{/if}>{$terms.reg_term_attendee_plur_cap}</a> -->
+        <a href="{$thisUrl}?page=glm-members-admin-menu-registrations-events&option=registrants&regEventID={$regEventID}" class="nav-tab{if $option=='registrants'} nav-tab-active{/if}">{$terms.reg_term_attendee_plur_cap}</a>
     </h2>
 
 {if $haveMessages}