Added alpha links to the member list
authorLaury GvR <laury@gaslightmedia.com>
Thu, 6 Apr 2017 20:15:09 +0000 (16:15 -0400)
committerLaury GvR <laury@gaslightmedia.com>
Thu, 6 Apr 2017 20:15:09 +0000 (16:15 -0400)
classes/data/dataMembers.php
models/admin/member/memberInfo.php
models/admin/members/list.php
views/admin/member/memberInfo/editCategory.html
views/admin/member/memberInfo/editProfileAddress.html
views/admin/members/list.html

index c0714dd..77e1b90 100644 (file)
@@ -306,6 +306,38 @@ class GlmDataMembers extends GlmDataAbstract {
 
     }
 
+    
+    /*
+     * Get Alpha list of first characters in member name
+     * for those members that have active info.
+     *
+     * @param string $where Where clause
+     *     Note the table refernces M and I.
+     * @param string $selected Optional selected alpha character
+     *
+     * @return object Class object
+     *
+     */
+    public function getAlphaList($where = '', $selected = '')
+    {
+
+        $sql = "
+           SELECT DISTINCT LEFT(T.name, 1) AS alpha
+             FROM ".GLM_MEMBERS_PLUGIN_DB_PREFIX. "members T
+            WHERE true
+                  $where
+            ORDER BY alpha
+        ;";
+        $alphaData = $this->wpdb->get_results($sql, ARRAY_A);
+
+        // Set selected
+        foreach ($alphaData as $k=>$v) {
+            $alphaData[$k]['default'] = ($v['alpha'] == $selected);
+        }
+
+        return $alphaData;
+
+    }
 
     /*
      * Get a simple members list - Name and ID only
index e64806f..7ee9513 100644 (file)
@@ -290,12 +290,21 @@ class GlmMembersAdmin_member_memberInfo extends GlmDataMemberInfo
         require_once GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataCategories.php';
         $Categories = new GlmDataCategories($this->wpdb, $this->config);
         $categories = $Categories->getListSortedParentChild();
+        $categories2 = $Categories->getListSortedParentChild(false);
 
+        // If we have categories, add "selected" element default false;
+        if (is_array($categories2)) {
+            reset($categories2);
+            while (list($k, $v) = each($categories2)) {
+                $categories2[$k]['selected'] = false;
+            }
+        }
+        
         // Check for action option - Should be one of the values in the "switch" statement below
         if (isset($_REQUEST['option']) && trim($_REQUEST['option']) != '') {
             $option = $_REQUEST['option'];
         }
-
+        
         /*
          * Perform requested action
          */
@@ -503,6 +512,7 @@ class GlmMembersAdmin_member_memberInfo extends GlmDataMemberInfo
         $templateData = array(
             'haveMember'          => $this->haveMember,
             'availableCategories' => $categories,
+            'availableCategories2'=> $categories2,
             'memberID'            => $this->memberID,
             'member'              => $this->memberData,
             'memberName'          => $memberName,
index 9d97cc8..dfd520f 100644 (file)
@@ -104,20 +104,26 @@ class GlmMembersAdmin_members_list extends GlmDataMembers
     public function modelAction ($actionData = false)
     {
 
-        $where          = ' true ';
-        $filterPending  = false;
-        $filterArchived = false;
-        $filterFeatured = false;
-        $haveFilter     = false;
-        $numbDisplayed  = false;
-        $lastDisplayed  = false;
-        $paging         = true;
-        $prevStart      = false;
-        $nextStart      = false;
-        $start          = 1;
-        $limit          = 20;        // Set to the number of listings per page
-        $namesList      = false;
-        $enable_members = $this->config['settings']['enable_members'];
+        $where              = ' true ';
+        $alphaWhere         = ' true ';
+        $catSearchSelected  = false;
+        $catSelectedString  = "";
+        $catSelected        = '';
+        $catsToUse          = '';
+        $filterPending      = false;
+        $filterArchived     = false;
+        $filterFeatured     = false;
+        $haveFilter         = false;
+        $numbDisplayed      = false;
+        $lastDisplayed      = false;
+        $paging             = true;
+        $prevStart          = false;
+        $nextStart          = false;
+        $start              = 1;
+        $limit              = 20;        // Set to the number of listings per page
+        $namesList          = false;
+        $enable_members     = $this->config['settings']['enable_members'];
+        $textSearch         = false;
 
         // Check if this is a request to show archived members
         if (isset($_REQUEST['filterArchived'])) {
@@ -153,15 +159,21 @@ class GlmMembersAdmin_members_list extends GlmDataMembers
                 $categories[$k]['selected'] = false;
             }
         }
-
+        
         // Check if there is a category filter (multi-select)
+        if (isset($_REQUEST['categorySearch']) && $_REQUEST['categorySearch'] > 0) {
+            $catsToUse = explode(',',$_REQUEST['categorySearch']);
+        }       
         if (isset($_REQUEST['filterCategories']) && count($_REQUEST['filterCategories']) > 0) {
-
+            $catsToUse = $_REQUEST['filterCategories'];
+        }
+        
+        if ($catsToUse && $catsToUse !== '') {
             $cats = '';
             $catsSep = '';
-
+            
             // For each selected category
-            foreach($_REQUEST['filterCategories'] as $c) {
+            foreach($catsToUse as $c) {
                 $cats .= $catsSep.$c;
                 $catsSep = ',';
                 $categories[$c]['selected'] = true;
@@ -178,6 +190,7 @@ class GlmMembersAdmin_members_list extends GlmDataMembers
                            OR (C.parent in ($cats) AND M.category = C.id)
                            )
             )";
+            $catSelectedString = $cats;
         }
 
         // Check for "Pending Only
@@ -209,6 +222,30 @@ class GlmMembersAdmin_members_list extends GlmDataMembers
             $filterFeatured = true;
             $haveFilter = true;
         }
+        
+        // If doing alpha list
+        if (isset($_REQUEST['alpha'])) {
+            $actionData['request']['alpha'] = $_REQUEST['alpha'];
+        }
+        
+        $alphaList = false;
+        $alphaWhere = '';
+
+        $alphaSelected = false;
+
+        // Check for alpha selected
+        if ($actionData['request']['alpha'] && strlen($actionData['request']['alpha']) == 1) {
+            $alphaSelected = strtoupper($actionData['request']['alpha']);
+            $alphaWhere .= " AND T.name LIKE '$alphaSelected%'";
+        }
+
+        // Get full list for all other filters, but not filtered by alpha (that would be silly)
+        $alphaList = $this->getAlphaList(' AND '.$where, $alphaSelected);
+        
+        // If user clicked a page request then we need to check the savedAlpha value
+        if (isset($_REQUEST['savedAlpha']) && isset($_REQUEST['pageSelect'])) {
+            $actionData['request']['alpha'] = $_REQUEST['savedAlpha'];
+        }
 
         // Get count of members listed
         $memberCount = $this->getStats($where);
@@ -237,9 +274,12 @@ class GlmMembersAdmin_members_list extends GlmDataMembers
                 $start = $newStart;
             }
         }
+        
+        // Get stats for number of members found matching current selection criteria (includes alpha selection)
+        $filteredMembersFound = $this->getStats(str_replace('T.', '', $where.$alphaWhere));
 
         // Get a current list of members
-        $listResult = $this->getSimpleMembersList($where, 'name', true, 'id', $start, $limit);
+        $listResult = $this->getSimpleMembersList($where.$alphaWhere, 'name', true, 'id', $start, $limit);
 
         // Get paging results
         $numbDisplayed = $listResult['returned'];
@@ -298,6 +338,10 @@ class GlmMembersAdmin_members_list extends GlmDataMembers
             'filterArchived' => $filterArchived,
             'filterFeatured' => $filterFeatured,
             'filterPending'  => $filterPending,
+            'catSelected' => $catSelected,
+            'catSearchSelected' => $catSelectedString,
+            'alphaList'      => $alphaList,
+            'alphaSelected'  => $alphaSelected,
             'numbDisplayed'  => $numbDisplayed,
             'lastDisplayed'  => $lastDisplayed,
             'paging'         => $paging,
@@ -305,7 +349,8 @@ class GlmMembersAdmin_members_list extends GlmDataMembers
             'nextStart'      => $nextStart,
             'start'          => $start,
             'limit'          => $limit,
-            'namesList'      => $namesList
+            'namesList'      => $namesList,
+            'textSearch'     => $textSearch
         );
 
         // Return status, suggested view, and data to controller
@@ -319,7 +364,6 @@ class GlmMembersAdmin_members_list extends GlmDataMembers
 
     }
 
-
 }
 
 ?>
index 181b00a..259bd3e 100644 (file)
                         {/foreach}
                     {/if}                    
                     </div>
+                    <div class="glm-row">
+                        <select id="filterCategories" name="filterCategories[]" multiple="multiple" size="1">
+                            {foreach from=$availableCategories2 item=v}
+                                <option value="{$v.id}" data-parent="{$v.parent}"{if $v.selected} selected{/if}>
+                                    {if $v.parent_id}&nbsp;&nbsp;&nbsp;&nbsp;{/if}{$v.name}
+                                </option>
+                            {/foreach}
+                        </select>
+                    </div>
                 </div>
             </div>
             <div class="glm-row glm-admin-amenities-container">
                 </div>
             </div>
         </div>
+<script type="text/javascript">
+        jQuery(document).ready(function($) {
+            
+             // Expand multi-select on hover
+             $('#filterCategories').multiselect();
+             $('#exportFilterCategories').multiselect();
 
+    });
+    </script>
index 42f6e10..a7696bd 100644 (file)
@@ -1,4 +1,4 @@
-<br>
+                <br>
                 <h2>Address</h2>
                 <div class="glm-admin-table glm-admin-table-inner-wrapper">
                     <div class="glm-admin-table glm-admin-table-inner">
                                 <input id="cityName" type="hidden" name="newCityName" value=""><!-- this field is only used if adding a new city to pass the new name -->
                                 <select name="city" id="city" class="glm-left">
                                     <option value="0"></option>
-                    {foreach from=$memberInfo.fieldData.city.list item=v}
-                                    <option value="{$v.value}"{if $v.default} selected="selected"{/if}>
-                                        {$v.name}
-                                    </option>
+                                    {foreach from=$memberInfo.fieldData.city.list item=v}
+                                        <option value="{$v.value}"{if $v.default} selected="selected"{/if}>
+                                            {$v.name}
+                                        </option>
+                                    {/foreach}
+                                </select>
+                            </div>
+                        </div>
+                        <div class="glm-row">
+                            <h4 {if $memberInfo.fieldRequired.county}class="glm-required"{/if}>County:</h4>
+                            <div {if $memberInfo.fieldFail.county}class="glm-form-bad-input" data-tabid="glm-member-info-address"{/if}>
+                                <select name="county">
+                                    {foreach from=$memberInfo.fieldData.county.list item=v}
+                                        <option value="{$v.value}"{if $v.default} selected="selected"{/if}>{$v.name}</option>
+                                    {/foreach}
+                                </select>
+                                {if $memberInfo.fieldFail.county}<p>{$memberInfo.fieldFail.county}</p>{/if}
+                            </div>
+                        </div>
+                        <div class="glm-row">
+                            <h4 {if $memberInfo.fieldRequired.region}class="glm-required"{/if}>Region:</h4>
+                            <div class="glm-small-12" {if $memberInfo.fieldFail.region}class="glm-form-bad-input" data-tabid="glm-member-info-address"{/if}>
+                                <select name="region">
+                    {foreach from=$memberInfo.fieldData.region.list item=v}
+                                    <option value="{$v.value}"{if $v.default} selected="selected"{/if}>{$v.name}</option>
                     {/foreach}
                                 </select>
+                                {if $memberInfo.fieldFail.region}<p>{$memberInfo.fieldFail.region}</p>{/if}
                             </div>
                         </div>
                         <div class="glm-row">
                             </div>
                         </div>
                         <div class="glm-row">
-                            <h4 {if $memberInfo.fieldRequired.region}class="glm-required"{/if}>Region:</h4>
-                            <div class="glm-small-12" {if $memberInfo.fieldFail.region}class="glm-form-bad-input" data-tabid="glm-member-info-address"{/if}>
-                                <select name="region">
-                    {foreach from=$memberInfo.fieldData.region.list item=v}
-                                    <option value="{$v.value}"{if $v.default} selected="selected"{/if}>{$v.name}</option>
-                    {/foreach}
-                                </select>
-                                {if $memberInfo.fieldFail.region}<p>{$memberInfo.fieldFail.region}</p>{/if}
-                            </div>
-                        </div>
-                                                <div class="glm-row">
                             {if $memberInfo.fieldRequired.lat}<h4 class="emRequiredInputField">{else}<h4>{/if}Location:</h4>
                             <div class="glm-small-12">
                                 <div id="glm-estimate-location" class="button button-secondary glm-left">Map Location Using Above Address</div>
index 77c9162..af2e7f1 100644 (file)
             <input type="Submit" name="pageSelect" value="Next {$limit} {$terms.term_member_plur_cap}" class="button button-secondary glm-button"{if !$nextStart} disabled{/if}>
         {/if}    
         
+        <div class="glm-alpha-links">
+            <a href="{$thisUrl}?page=glm-members-admin-menu-members-list&glm_action=list&textSearch={$textSearch}&categorySearch={$catSearchSelected}" class="glm-alpha-link{if !$alphaSelected} glm-alpha-link-selected{/if}">All</a>
+      {foreach $alphaList as $a}
+            <a href="{$thisUrl}?page=glm-members-admin-menu-members-list&glm_action=list&alpha={$a.alpha}&textSearch={$textSearch}&categorySearch={$catSearchSelected}" class="glm-alpha-link{if $a.default} glm-alpha-link-selected{/if}">{$a.alpha}</a>
+      {/foreach}
+       </div>
+        
         <table class="wp-list-table striped glm-admin-table-single">
             <thead>
                 <tr>