Updates for adding alpha search in admin
authorSteve Sutton <steve@gaslightmedia.com>
Tue, 4 Sep 2018 18:38:29 +0000 (14:38 -0400)
committerSteve Sutton <steve@gaslightmedia.com>
Tue, 4 Sep 2018 18:42:44 +0000 (14:42 -0400)
Adding alpha search

classes/data/dataLeads.php
css/admin.css
models/admin/travel/index.php
views/admin/travel/index.html
views/admin/travel/searchForm.html

index 819e7ab..9345f48 100644 (file)
@@ -295,4 +295,35 @@ class GlmDataTravelLeads extends GlmDataAbstract
         return $r;
     }
 
+    /*
+     * 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(company, 1) AS alpha
+             FROM ".GLM_MEMBERS_TRAVEL_PLUGIN_DB_PREFIX. "leads
+            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;
+
+    }
 }
index 88d089c..5a13c7b 100644 (file)
@@ -408,3 +408,45 @@ div.webform table, div.webform td {
        padding-left: 30px;
        display: block;
        }
+.paging {
+       display: block;
+       }
+.paging,
+.business-first-letter {
+       clear: both;
+       margin: 1em 0;
+       padding: 1em 0 0 0;
+       height: 1%;
+       overflow: hidden;
+       margin-left: 2px;
+       }
+.business-first-letter  {
+       margin-bottom: 1em;
+       border-bottom: 1px dotted #369;
+       padding-bottom: 1em;
+       }
+.paging b,
+.business-first-letter a.curr {
+       padding: 0.2em 0.4em;
+       background: #eee;
+       border: 1px solid #9AAFE5;
+       margin-left: 0.2em;
+       display: block;
+       float: left;
+       }
+.paging a,
+.business-first-letter a {
+       margin-left: 0.2em;
+       color: #036;
+       padding: 0.2em 0.4em;
+       border: 1px solid #9AAFE5;
+       text-decoration: none;
+       background: white;
+       display: block;
+       float: left;
+       }
+.paging a:hover,
+.business-first-letter a:hover {
+       border: 1px solid #2e8d32;
+       background: #eee;
+       }
index 739661d..b21daad 100644 (file)
@@ -169,26 +169,38 @@ class GlmMembersAdmin_travel_index extends GlmDataTravelLeads
             $where_parts = array();
             // echo '<pre>$search_params: ' . print_r( $search_params, true ) . '</pre>';
             if ( $search_params['company'] ) {
-                $where_parts[] = "T.company like '%" . esc_sql( $search_params['company'] ) . "%'";
+                $name_parts    = array();
+                $name_parts[]  = "company like '%" . esc_sql( $search_params['company'] ) . "%'";
+                $name_parts[]  = "SOUNDEX(company) LIKE CONCAT('%', SOUNDEX('" . esc_sql( $search_params['company'] ) . "'), '%')";
+                $where_parts[] = '('.implode( ' OR ', $name_parts ).')';
             }
             if ( $search_params['contact'] ) {
-                // Search for name.
-                // Could be in these formats:
-                // fname lname
-                // lname, fname
-                // lname fname
-                // lname
-                // fname
-                $name_parts   = array();
-                $name_parts[] = "SOUNDEX(CONCAT_WS(' ', fname, lname)) = SOUNDEX( '" . esc_sql( $search_params['contact'] ) . "')";
-                $name_parts[] = "SOUNDEX(CONCAT_WS(' ', lname, fname)) = SOUNDEX( '" . esc_sql( $search_params['contact'] ) . "')";
-                $name_parts[] = "SOUNDEX(fname) = SOUNDEX( '" . esc_sql( $search_params['contact'] ) . "')";
-                $name_parts[] = "SOUNDEX(lname) = SOUNDEX( '" . esc_sql( $search_params['contact'] ) . "')";
-                $where_parts[]  = '('.implode( ' OR ', $name_parts ).')';
+                $name_parts    = array();
+                $name_parts[]  = "SOUNDEX(CONCAT_WS(' ', fname, lname)) = SOUNDEX( '" . esc_sql( $search_params['contact'] ) . "')";
+                $name_parts[]  = "SOUNDEX(CONCAT_WS(' ', lname, fname)) = SOUNDEX( '" . esc_sql( $search_params['contact'] ) . "')";
+                $name_parts[]  = "SOUNDEX(fname) = SOUNDEX( '" . esc_sql( $search_params['contact'] ) . "')";
+                $name_parts[]  = "SOUNDEX(lname) = SOUNDEX( '" . esc_sql( $search_params['contact'] ) . "')";
+                $where_parts[] = '('.implode( ' OR ', $name_parts ).')';
             }
 
         }
 
+        // echo '<pre>$where_parts: ' . print_r( $where_parts, true ) . '</pre>';
+
+        // 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.company LIKE '$alphaSelected%'";
+        }
+
         // Initialize the interests array
         $interests = array();
 
@@ -310,6 +322,11 @@ class GlmMembersAdmin_travel_index extends GlmDataTravelLeads
             } else if ( isset( $_REQUEST['search'] ) && !isset( $_REQUEST['contact'] ) ) {
                 unset( $_SESSION['search']['contact'] );
             }
+            if ( isset( $_REQUEST['alpha'] ) ) {
+                $_SESSION['search']['alpha'] = $_REQUEST['alpha'];
+            } else  if ( isset( $_REQUEST['alpha'] ) && !isset( $_REQUEST['alpha'] ) ) {
+                unset( $_SESSION['search']['alpha'] );
+            }
 
             if ( ( isset( $search ) && $search ) || $searching ) {
                 if ( isset( $where_parts ) && !empty( $where_parts ) ) {
@@ -337,8 +354,17 @@ class GlmMembersAdmin_travel_index extends GlmDataTravelLeads
 
             // $entry = $this->getList( $where );
             $orderBy      = 'T.company ASC,T.lname ASC,T.fname ASC,T.updated DESC';
-            $entryResults = $this->getList( $where, $orderBy, true, 'id', $start, $limit );
-            $stats        = $this->getStats( $where );
+            $entryResults = $this->getList( $where.$alphaWhere, $orderBy, true, 'id', $start, $limit );
+            $stats        = $this->getStats( $where.$alphaWhere );
+
+
+            // Get full list for all other filters, but not filtered by alpha (that would be silly)
+            $alphaList = $this->getAlphaList(' AND '.$where, $alphaSelected);
+
+
+            // echo '<pre>$alphaWhere: ' . print_r( $alphaWhere, true ) . '</pre>';
+
+            // echo '<pre>$alphaList: ' . print_r( $alphaList, true ) . '</pre>';
 
             // Get paging results
             $params        = '';
@@ -353,7 +379,10 @@ class GlmMembersAdmin_travel_index extends GlmDataTravelLeads
                     $start = 1;
                 }
             }
-            if ( $entryResults['returned'] == $limit ) {
+            // if ( $entryResults['returned'] == $limit ) {
+            //     $nextStart = $start + $limit;
+            // }
+            if ( $start + $limit <= $stats ) {
                 $nextStart = $start + $limit;
             }
             $entry = $entryResults['list'];
@@ -395,6 +424,8 @@ class GlmMembersAdmin_travel_index extends GlmDataTravelLeads
             'inserting'       => $inserting,
             'inserting_error' => $inserting_error,
             'assetsUrl'       => GLM_MEMBERS_TRAVEL_PLUGIN_URL . 'assets',
+            'alphaList'       => $alphaList,
+            'alphaSelected'   => $alphaSelected,
         );
 
 
index 20d50e5..97d00d5 100644 (file)
         <input type="hidden" name="limit" value="{$limit}">
     <br clear="all">
     <p><b>Total found:</b> {$leadCount}&nbsp;&nbsp;</p>
+    <div class="business-first-letter">
+        <a href="{$thisUrl}?page={$thisPage}&glm_action=index&company={$smarty.request.company}&contact={$smarty.request.contact}#glm-member-list-filters-button" class="glm-alpha-link{if !$alphaSelected} curr{/if}">All</a>
+        {foreach $alphaList as $a}
+        <a href="{$thisUrl}?page={$thisPage}&glm_action=index&alpha={$a.alpha}&company={$smarty.request.company}&contact={$smarty.request.contact}#glm-member-list-filters-button" class="glm-alpha-link{if $a.default} curr{/if}">{$a.alpha}</a>
+        {/foreach}
+    </div>
+
     {if $paging}
         <input type="hidden" name="search" value="1">
         {if isset($smarty.request.company)}<input type="hidden" name="company" value="{$smarty.request.company}">{/if}
         {if isset($smarty.request.contact)}<input type="hidden" name="contact" value="{$smarty.request.contact}">{/if}
+        {if isset($smarty.request.alpha)}<input type="hidden" name="alpha" value="{$smarty.request.alpha}">{/if}
         <input type="Submit" name="pageSelect" value="Previous {$limit} Leads" class="button button-secondary glm-button"{if !$prevStart} disabled{/if}>
         <input type="Submit" name="pageSelect" value="Next {$limit} Leads" class="button button-secondary glm-button"{if !$nextStart} disabled{/if}>
     {/if}
index eea5ae7..479b25f 100644 (file)
@@ -12,7 +12,7 @@
                 <input type="hidden" name="glm_action" value="index" />
                 <input type="hidden" name="search" value="1" />
                 <div>
-                    <input id="company" name="company"{if isset($smarty.request.company)} value="{$smarty.request.company}"{/if}>
+                    <input id="company" name="company"{if isset($smarty.request.company)} value="{$smarty.request.company|escape:'quotes'}"{/if}>
                     <input type="submit" value="Go" id="leadCompanySearch" class="button">
                 </div>
             </form>