From: Steve Sutton Date: Tue, 4 Sep 2018 18:38:29 +0000 (-0400) Subject: Updates for adding alpha search in admin X-Git-Tag: v1.0.0^2~2 X-Git-Url: http://cvs2.gaslightmedia.com/gitweb/?a=commitdiff_plain;h=c86813cc438f4324f677a7e63852860fd0ce5bf1;p=WP-Plugins%2Fglm-member-db-travel.git Updates for adding alpha search in admin Adding alpha search --- diff --git a/classes/data/dataLeads.php b/classes/data/dataLeads.php index 819e7ab..9345f48 100644 --- a/classes/data/dataLeads.php +++ b/classes/data/dataLeads.php @@ -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; + + } } diff --git a/css/admin.css b/css/admin.css index 88d089c..5a13c7b 100644 --- a/css/admin.css +++ b/css/admin.css @@ -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; + } diff --git a/models/admin/travel/index.php b/models/admin/travel/index.php index 739661d..b21daad 100644 --- a/models/admin/travel/index.php +++ b/models/admin/travel/index.php @@ -169,26 +169,38 @@ class GlmMembersAdmin_travel_index extends GlmDataTravelLeads $where_parts = array(); // echo '
$search_params: ' . print_r( $search_params, true ) . '
'; 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 '
$where_parts: ' . print_r( $where_parts, 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.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 '
$alphaWhere: ' . print_r( $alphaWhere, true ) . '
'; + + // echo '
$alphaList: ' . print_r( $alphaList, true ) . '
'; // 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, ); diff --git a/views/admin/travel/index.html b/views/admin/travel/index.html index 20d50e5..97d00d5 100644 --- a/views/admin/travel/index.html +++ b/views/admin/travel/index.html @@ -43,10 +43,18 @@

Total found: {$leadCount}  

+
+ All + {foreach $alphaList as $a} + {$a.alpha} + {/foreach} +
+ {if $paging} {if isset($smarty.request.company)}{/if} {if isset($smarty.request.contact)}{/if} + {if isset($smarty.request.alpha)}{/if} {/if} diff --git a/views/admin/travel/searchForm.html b/views/admin/travel/searchForm.html index eea5ae7..479b25f 100644 --- a/views/admin/travel/searchForm.html +++ b/views/admin/travel/searchForm.html @@ -12,7 +12,7 @@
- +