From 6a5f69a96fc678105796f6a8c5af36fa544771ea Mon Sep 17 00:00:00 2001 From: Chuck Scott Date: Thu, 19 Mar 2015 16:01:42 -0400 Subject: [PATCH] Cleaned up last of initial issues with Front End --- classes/data/dataCategoryMemberInfo.php | 3 +- classes/data/dataMemberInfo.php | 48 +++++++++++- config/plugin.ini | 2 +- css/front.css | 20 ++++- lib/GlmDataAbstract/DataAbstract.php | 6 ++ misc/databaseScripts/create_database_V0.1.sql | 1 + misc/notes.txt | 3 + ...40ebc45e387f5f95c45e90.file.index.html.php | 8 +- models/admin/configure/categories.php | 2 +- models/admin/member/index.php | 10 +++ models/admin/member/memberInfo.php | 13 +++- models/admin/members/index.php | 1 + models/front/members/list.php | 78 ++++++++++++++++--- views/admin/member/index.html | 2 +- views/front/members/detail.html | 12 ++- views/front/members/list.html | 23 +++--- 16 files changed, 197 insertions(+), 35 deletions(-) diff --git a/classes/data/dataCategoryMemberInfo.php b/classes/data/dataCategoryMemberInfo.php index caceaed3..55d76329 100644 --- a/classes/data/dataCategoryMemberInfo.php +++ b/classes/data/dataCategoryMemberInfo.php @@ -277,7 +277,8 @@ class GlmDataCategoryMemberInfo extends GlmDataAbstract // Add the category $sql = " DELETE FROM ".GLM_MEMBERS_PLUGIN_DB_PREFIX."category_member_info - WHERE id = ".$val['id']." + WHERE member_info = $memberInfoID + AND id = ".$val['id']." ;"; $this->wpdb->query($sql); diff --git a/classes/data/dataMemberInfo.php b/classes/data/dataMemberInfo.php index 5cd019dc..5dd38dbf 100644 --- a/classes/data/dataMemberInfo.php +++ b/classes/data/dataMemberInfo.php @@ -25,7 +25,8 @@ * Exp $ * @link http://www.visitgreatlakesbay.org/ */ -class GlmDataMemberInfo extends GlmDataAbstract { +class GlmDataMemberInfo extends GlmDataAbstract +{ /** * WordPress Database Object @@ -125,6 +126,13 @@ class GlmDataMemberInfo extends GlmDataAbstract { 'use' => 'a' ), + // Member Name (stored by member updates) for sorting + 'member_name' => array( + 'field' => 'member_name', + 'type' => 'text', + 'use' => 'lg' + ), + // Member Pointer index 'member_pointer' => array ( 'field' => 'member', @@ -346,7 +354,7 @@ class GlmDataMemberInfo extends GlmDataAbstract { * Perform post-processing for all result entries. * * In this case we're using it to append an array of category - * data to each member result. + * data to each member result and also sort by member name. * * @param array $r Array of field result data for a single entry * @param string $a Action being performed (l, i, g, ...) @@ -379,10 +387,44 @@ class GlmDataMemberInfo extends GlmDataAbstract { ;"; $r['categories'] = $this->wpdb->get_results($sql, ARRAY_A); - // Required return $r; } + /* + * Get Apha 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(M.name, 1) AS alpha + FROM ".GLM_MEMBERS_PLUGIN_DB_PREFIX. "members M, + ".GLM_MEMBERS_PLUGIN_DB_PREFIX. "member_info T + WHERE T.status = ".$this->config['status_numb']['Active']." + AND M.id = T.member + $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; + + } + + } ?> \ No newline at end of file diff --git a/config/plugin.ini b/config/plugin.ini index 685cbac4..f942a5ae 100644 --- a/config/plugin.ini +++ b/config/plugin.ini @@ -66,7 +66,7 @@ front-config['list_show_search'] = true front-config['list_search_text'] = true front-config['list_search_category'] = true front-config['list_search_amenities'] = false -front-config['list_search_alpha'] = false +front-config['list_search_alpha'] = true ; Front-end Member Listing Options front-config['list_show_detaillink'] = true front-config['list_show_logo'] = true diff --git a/css/front.css b/css/front.css index d0d92411..3185406d 100644 --- a/css/front.css +++ b/css/front.css @@ -36,7 +36,6 @@ width: 90%; } - /* Member List */ .glm-member-list-container { border: 1px #ccc solid; @@ -77,8 +76,25 @@ margin-top: .5em; } -/* Map */ +/* Alpha Lists */ +.glm-alpha-links { + clear: both; +} +.glm-alpha-link { + border: 1px black solid; + padding: .1em .3em .1em .3em; + margin-right: .2em; + font-weight: bold; + text-decoration: none !important; +} +.glm-alpha-link a:hover { +} +.glm-alpha-link-selected { + background-color: blue; + color: white; +} +/* Maps */ .glm-map { width: 100%; height:400px; diff --git a/lib/GlmDataAbstract/DataAbstract.php b/lib/GlmDataAbstract/DataAbstract.php index 1e2422bc..c3d30a89 100755 --- a/lib/GlmDataAbstract/DataAbstract.php +++ b/lib/GlmDataAbstract/DataAbstract.php @@ -2895,6 +2895,11 @@ abstract class GlmDataAbstract /** * List Entries Method * + * NOTE: Order by only works on the initial query, not on the target values of + * pointer fields because those fields are post-processed to get the target value + * after the query takes place. Calling code will have to sort the results to + * sort by those target values. + * * @param string $where Optional WHERE clause for selection of entries. Defaults to all. * @param string $order Optional ORDER BY clause for sorting of results. * @param boolean $fieldVals Optional flag requesting fields contain array of all possible values. @@ -2905,6 +2910,7 @@ abstract class GlmDataAbstract */ public function getList($where = '', $order = '', $fieldVals = true, $idField = 'id') { + // NOTE: $fieldVals not yet implemented // Get field specifications for this instance diff --git a/misc/databaseScripts/create_database_V0.1.sql b/misc/databaseScripts/create_database_V0.1.sql index f21f35fb..b54b8b7a 100644 --- a/misc/databaseScripts/create_database_V0.1.sql +++ b/misc/databaseScripts/create_database_V0.1.sql @@ -382,6 +382,7 @@ CREATE TABLE {prefix}members ( CREATE TABLE {prefix}member_info ( id INT NOT NULL AUTO_INCREMENT, member INT NULL, + member_name TINYTEXT NULL, status INT NULL, reference_name TINYTEXT NULL, descr TEXT NULL, diff --git a/misc/notes.txt b/misc/notes.txt index c030fe8a..053e7aa3 100644 --- a/misc/notes.txt +++ b/misc/notes.txt @@ -3,6 +3,9 @@ Development Notes ADMIN AREA +* Member Info Add/Edit + - When editing a member info record, if the user specifies a new main category more than once with the "Add a new Category" button, the category is created multiple times. + * Consider paginating certain lists * On all admin lists - add sort order links to headers diff --git a/misc/smarty/templates_c/1be35689c5d30d774f40ebc45e387f5f95c45e90.file.index.html.php b/misc/smarty/templates_c/1be35689c5d30d774f40ebc45e387f5f95c45e90.file.index.html.php index d9d4e4dd..742809d0 100644 --- a/misc/smarty/templates_c/1be35689c5d30d774f40ebc45e387f5f95c45e90.file.index.html.php +++ b/misc/smarty/templates_c/1be35689c5d30d774f40ebc45e387f5f95c45e90.file.index.html.php @@ -1,4 +1,4 @@ - decodeProperties(array ( @@ -7,7 +7,7 @@ $_valid = $_smarty_tpl->decodeProperties(array ( '1be35689c5d30d774f40ebc45e387f5f95c45e90' => array ( 0 => '/var/www/server/wordpress/wp-content/plugins/glm-member-db/views/admin/member/index.html', - 1 => 1426429308, + 1 => 1426784332, 2 => 'file', ), ), @@ -71,8 +71,8 @@ $_valid = $_smarty_tpl->decodeProperties(array ( - + tpl_vars['haveMember']->value) {?>
IDtpl_vars['member']->value['fieldData']['id'];?> -
IDtpl_vars['member']->value['fieldData']['id'];?> +
tpl_vars['member']->value['fieldRequired']['name']) {?>class="glm-required">Member Name: tpl_vars['member']->value['fieldFail']['name']) {?>class="glm-form-bad-input"> diff --git a/models/admin/configure/categories.php b/models/admin/configure/categories.php index e5828153..2be9fa02 100644 --- a/models/admin/configure/categories.php +++ b/models/admin/configure/categories.php @@ -167,7 +167,7 @@ class GlmMembersAdmin_configure_categories extends GlmDataCategories } // Sort results by higherarchy (Parent/Child and Alpha) - $categories = glmMembersAdmin::sortParentChild($categories); + $categories = $this->sortParentChild($categories); if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE) { glmMembersAdmin::addNotice($categories, 'DataBlock', 'Categories Data'); diff --git a/models/admin/member/index.php b/models/admin/member/index.php index b7ed4c0b..8e26efb3 100644 --- a/models/admin/member/index.php +++ b/models/admin/member/index.php @@ -193,8 +193,18 @@ class GlmMembersAdmin_member_index extends GlmDataMembers // If update was successful then use editEntry() to setup for the edit again. if ($memberData['status']) { + $memberData = $this->editEntry($memberID); $updated = true; + + // Also update all member info records with any possible name change + $sql = " + UPDATE ".GLM_MEMBERS_PLUGIN_DB_PREFIX."member_info + SET member_name = '".addslashes($memberData['fieldData']['name'])."' + WHERE member = $memberID + ;"; + $this->wpdb->query($sql); + } $haveMember = true; diff --git a/models/admin/member/memberInfo.php b/models/admin/member/memberInfo.php index 76f2d004..b7cd2338 100644 --- a/models/admin/member/memberInfo.php +++ b/models/admin/member/memberInfo.php @@ -258,11 +258,22 @@ class GlmMembersAdmin_member_memberInfo extends GlmDataMemberInfo // Add the new member information record case 'addNew': - // Insert the new member into the database + // Insert the new member info into the database + $this->memberName = $memberData['name']; $MemberInfo = $this->insertEntry(); if ($MemberInfo['status']) { + $memberInfoID = $MemberInfo['fieldData']['id']; $haveMemberInfo = true; + + // Also store member name for reference and sorting + $sql = " + UPDATE ".GLM_MEMBERS_PLUGIN_DB_PREFIX."member_info + SET member_name = '".addslashes($memberData['name'])."' + WHERE id = $memberInfoID + ;"; + $this->wpdb->query($sql); + } break; diff --git a/models/admin/members/index.php b/models/admin/members/index.php index 807302eb..caee4bdc 100644 --- a/models/admin/members/index.php +++ b/models/admin/members/index.php @@ -133,6 +133,7 @@ class GlmMembersAdmin_members_index extends GlmDataMembers $membersPending = $MemberInfo->getStats('status = '.$this->config['status_numb']['Pending']); // If there's members with pending information, list them + $pendingList = false; if ($membersPending > 0) { $pendingList = $MemberInfo->getList('status = '.$this->config['status_numb']['Pending']); diff --git a/models/front/members/list.php b/models/front/members/list.php index 0d0027fe..46a59747 100644 --- a/models/front/members/list.php +++ b/models/front/members/list.php @@ -99,7 +99,8 @@ class GlmMembersFront_members_list extends GlmDataMemberInfo public function modelAction ($actionData = false) { - $where = ' TRUE'; + $where = ''; + $whereSep = ''; $filterPending = false; $filterArchived = false; $filterName = false; @@ -109,7 +110,7 @@ class GlmMembersFront_members_list extends GlmDataMemberInfo // Apply any provided text search to name, description, short description, and street address if (isset($_REQUEST['textSearch']) && $_REQUEST['textSearch'] != '') { $textSearch = filter_input(INPUT_POST, 'textSearch', FILTER_SANITIZE_STRING, FILTER_FLAG_NO_ENCODE_QUOTES); - $where .= " AND ( + $where .= $whereSep." ( ( SELECT true FROM ".GLM_MEMBERS_PLUGIN_DB_PREFIX."members @@ -121,22 +122,75 @@ class GlmMembersFront_members_list extends GlmDataMemberInfo T.addr1 LIKE '%$textSearch%' OR T.addr2 LIKE '%$textSearch%' )"; + $whereSep = ' AND '; } - // Apply any specified category filter - require_once(GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataCategories.php'); - $Categories = new GlmDataCategories($this->wpdb, $this->config); - $categoryData = $Categories->getListSortedParentChild(); -//*** HERE complete category filter **** + // Get category filter data + $categoryData = false; + $catSelected = ''; + if ($this->config['front-config']['list_search_category']) { + + // Get category data for search pick list + require_once(GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataCategories.php'); + $Categories = new GlmDataCategories($this->wpdb, $this->config); + $categoryData = $Categories->getListSortedParentChild(); + + // Add default flag as false to all entries + foreach ($categoryData as $k=>$v) { + $categoryData[$k]['default'] = false; + } + + // Check if a category has been submitted + if (isset($_REQUEST['categorySearch'])) { + $catSelected = $_REQUEST['categorySearch'] - 0; + + // If we have a category ID + if ($catSelected > 0) { + + $where .= $whereSep." T.id in ( + SELECT DISTINCT(member_info) + FROM ".GLM_MEMBERS_PLUGIN_DB_PREFIX."category_member_info M, + ".GLM_MEMBERS_PLUGIN_DB_PREFIX."categories C + WHERE M.category = $catSelected + OR (C.parent = $catSelected AND M.category = C.id) + )"; + $whereSep = ' AND '; + + // Set default to true for the selected category + $categoryData[$catSelected]['default'] = true; + + } + } + + } // Only look at active member information - $where .= " AND T.status = ".$this->config['status_numb']['Active']; + $where .= $whereSep." T.status = ".$this->config['status_numb']['Active']; + + // If doing alpha list + $alphaList = false; + $alphaWhere = ''; + if ($this->config['front-config']['list_search_alpha']) { + + $alphaSelected = false; + + // Check for alpha selected + if (isset($_REQUEST['alpha']) && strlen($_REQUEST['alpha']) == 1) { + $alphaSelected = $_REQUEST['alpha']; + $alphaWhere .= " AND T.member_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); + + } /* * Get a current list of members */ - $list = $this->getList($where); + // Get member list and sort + $list = $this->getList($where.$alphaWhere, 'member_name'); if (GLM_MEMBERS_PLUGIN_FRONT_DEBUG) { glmMembersFront::addNotice($list, 'DataBlock', 'Member Data'); @@ -164,8 +218,10 @@ class GlmMembersFront_members_list extends GlmDataMemberInfo 'filterPending' => $filterPending, 'filterName' => stripslashes($filterName), 'textSearch' => $textSearch, - 'categories' => $categoryData -// 'canEdit' => $canEdit + 'categories' => $categoryData, + 'catSelected' => $catSelected, + 'alphaList' => $alphaList, + 'alphaSelected' => $alphaSelected ); // Return status, suggested view, and data to controller diff --git a/views/admin/member/index.html b/views/admin/member/index.html index afe52b9f..d801e61b 100644 --- a/views/admin/member/index.html +++ b/views/admin/member/index.html @@ -26,7 +26,7 @@ {/if} - + {if $haveMember}{/if}
ID{$member.fieldData.id}
ID{$member.fieldData.id}
Member Name: diff --git a/views/front/members/detail.html b/views/front/members/detail.html index 4e43aee4..0741060d 100644 --- a/views/front/members/detail.html +++ b/views/front/members/detail.html @@ -19,6 +19,13 @@
Enter address to show directions ...

+ Directions type: +
@@ -190,11 +197,14 @@ directionsMap = new google.maps.Map(document.getElementById("glm-directionsMap"), mapOptions); directionsDisplay.setMap(directionsMap); + // Get directions type selected + var directionsType = $('#directionsType').find(':selected').val(); + // Specify origin and destination then get route var request = { origin: start, destination: memberlocation, - travelMode: google.maps.TravelMode.DRIVING + travelMode: google.maps.TravelMode[directionsType] }; directionsService.route(request, function(result, status) { if (status == google.maps.DirectionsStatus.OK) { diff --git a/views/front/members/list.html b/views/front/members/list.html index 03874af9..27204197 100644 --- a/views/front/members/list.html +++ b/views/front/members/list.html @@ -19,10 +19,10 @@ {if $list_search_category}
Member Category: - + {foreach from=$categories item=v} - {/foreach} @@ -32,9 +32,6 @@ {if $list_search_amenities}
Amenity search goes here
{/if} - {if $list_search_alpha} -
Alpha search goes here
- {/if}
@@ -42,13 +39,21 @@ {if $list_show_list}

List of Members

- {if $haveMembers} - + + {if $list_search_alpha} + + {/if} + {foreach $members as $m}
- {if $list_show_logo}
{/if} + {if $m.logo && $list_show_logo}
{/if}

{if $list_show_detaillink} -- 2.17.1