From 842b00a587c5eec476c7088a4dc30b3b7d674e92 Mon Sep 17 00:00:00 2001 From: Steve Sutton Date: Wed, 29 May 2019 16:39:42 -0400 Subject: [PATCH] Setup header nav and work on search members form Working on search form for member (member, info, contact) search to pull list of member for sending out the message. --- models/admin/messages/index.php | 135 +++++++++++++----- .../create_database_V0.0.1.sql | 15 ++ views/admin/header.html | 6 + views/admin/messages/list.html | 4 +- views/admin/messages/search.html | 121 +++++++++++----- 5 files changed, 206 insertions(+), 75 deletions(-) diff --git a/models/admin/messages/index.php b/models/admin/messages/index.php index 790fc14..f356d7e 100644 --- a/models/admin/messages/index.php +++ b/models/admin/messages/index.php @@ -106,8 +106,14 @@ class GlmMembersAdmin_messages_index extends GlmDataEmailMessages $option = $_REQUEST['option']; } + if ( isset( $_REQUEST['option2'] ) ) { + $option2 = $_REQUEST['option2']; + } + + $tData = array(); $templateData = array( - 'newEntry' => false, + 'newEntry' => false, + 'thisOption' => $option, ); switch ( $option ) { @@ -115,14 +121,70 @@ class GlmMembersAdmin_messages_index extends GlmDataEmailMessages $view = 'search'; $searchResults = array(); $mTypeSelected = false; + $whereParts = array( + "T.status != " . $this->config['status_numb']['Archived'] + ); - wp_enqueue_style('select2',"https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/css/select2.min.css" ); - wp_enqueue_script('select2js', "https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.min.js" ); + wp_enqueue_style( 'select2','https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/css/select2.min.css' ); + wp_enqueue_script( 'select2js', 'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.min.js' ); // Get a list of categories for filtering - require_once GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataCategories.php'; - $Categories = new GlmDataCategories($this->wpdb, $this->config); - $categories = $Categories->getListSortedParentChild(false); + require_once GLM_MEMBERS_PLUGIN_CLASS_PATH . '/data/dataCategories.php'; + $Categories = new GlmDataCategories( $this->wpdb, $this->config ); + $categories = $Categories->getListSortedParentChild( false ); + + echo '
$_REQUEST: ' . print_r( $_REQUEST, true ) . '
'; + + // Check if this is a request to show archived members + if ( isset( $_REQUEST['filterArchived'] ) ) { + $whereParts[] = " T.member IN (SELECT id FROM " . GLM_MEMBERS_PLUGIN_DB_PREFIX . "members where access = ".$this->config['access_numb']['Archived'].")"; + $filterArchived = true; + $haveFilter = true; + + // If not, don't show them + } else { + $whereParts[] = " T.member IN (SELECT id FROM " . GLM_MEMBERS_PLUGIN_DB_PREFIX . "members where access != ".$this->config['access_numb']['Archived'].")"; + } + + // If we have categories, add "selected" element default false; + if ( is_array( $categories ) ) { + reset( $categories ); + foreach ( $categories as $k => $v ) { + $categories[$k]['selected'] = false; + } + } + + if ( isset( $_REQUEST['filterCategories'] ) && count( $_REQUEST['filterCategories'] ) > 0) { + $catsToUse = $_REQUEST['filterCategories']; + } + // echo '
$catsToUse: ' . print_r( $catsToUse, true ) . '
'; + + if ( $catsToUse && $catsToUse !== '' ) { + $cats = ''; + $catsSep = ''; + + // For each selected category + foreach ( $catsToUse as $c ) { + $cats .= $catsSep.$c; + $catsSep = ','; + $categories[$c]['selected'] = true; + } + + $whereParts[] = " T.member in ( + SELECT DISTINCT(I.member) + FROM ".GLM_MEMBERS_PLUGIN_DB_PREFIX."member_info I, + ".GLM_MEMBERS_PLUGIN_DB_PREFIX."category_member_info M, + ".GLM_MEMBERS_PLUGIN_DB_PREFIX."categories C + WHERE I.id = M.member_info + AND I.status != " . $this->config['status_numb']['Archived'] ." + AND ( + M.category in ($cats) + OR (C.parent in ($cats) AND M.category = C.id) + ) + )"; + // $catSelectedString = $cats; + } + // echo '
$categories: ' . print_r( $categories, true ) . '
'; // Get a list of member_types for filtering require_once GLM_MEMBERS_PLUGIN_CLASS_PATH . '/data/dataMemberTypes.php'; @@ -131,71 +193,74 @@ class GlmMembersAdmin_messages_index extends GlmDataEmailMessages // Check if there is a member_type filter if ( isset( $_REQUEST['filterMemberTypes'] ) && $memberTypeFilter = filter_var( $_REQUEST['filterMemberTypes'], FILTER_VALIDATE_INT ) ) { - $where .= " AND T.member_type = $memberTypeFilter "; + $whereParts[] = " T.member IN (SELECT id FROM " . GLM_MEMBERS_PLUGIN_DB_PREFIX . "members where member_type = $memberTypeFilter) "; $mTypeSelected = $memberTypeFilter; } - - // If we have categories, add "selected" element default false; - if (is_array($categories)) { - reset($categories); - foreach ( $categories as $k => $v ) { - $categories[$k]['selected'] = false; - } - } - if ( isset( $_REQUEST['search'] ) && filter_var( $_REQUEST['search'], FILTER_VALIDATE_BOOLEAN ) ) { // Do search - $searchResults = array( - array( - 'name' => 'Gaslight Media', - 'status' => 'Active', - ) - ); + require_once GLM_MEMBERS_PLUGIN_CLASS_PATH . '/data/dataMemberInfo.php'; + $Members = new GlmDataMemberInfo( $this->wpdb, $this->config ); + + $where = implode( ' AND ', $whereParts ); + // echo '
$where: ' . print_r( $where, true ) . '
'; + + $searchResults = $Members->getList( $where ); + } - $templateData['mTypeSelected'] = $mTypeSelected; - $templateData['categories'] = $categories; - $templateData['member_types'] = $member_types; - $templateData['searchResults'] = $searchResults; + $tData = array( + 'mTypeSelected' => $mTypeSelected, + 'categories' => $categories, + 'member_types' => $member_types, + 'searchResults' => $searchResults, + ); break; + case 'list': $view = 'list'; $messages = $this->getList(); - // echo '
' . print_r( $messages, true ) . '
'; - $templateData['messages'] = $messages; + $tData = array( + 'messages' => $messages, + ); break; + case 'editHtmlEmail': - $view = 'editHtmlEmail'; + $view = 'editHtmlEmail'; + $newEntry = false; if ( isset( $_REQUEST['id'] ) && $id = filter_var( $_REQUEST['id'], FILTER_VALIDATE_INT ) ) { $message = $this->editEntry( $id ); } else { - $message = $this->newEntry(); - $templateData['newEntry'] = true; + $message = $this->newEntry(); + $newEntry = true; } - $templateData['message'] = $message; + $tData = array( + 'message' => $message, + 'newEntry' => $newEntry, + ); break; + case 'updateHtmlEmail': - // echo '
$_REQUEST: ' . print_r( $_REQUEST, true) . '
'; $_REQUEST['last_updated'] = date( 'Y-m-d H:i:s' ); if ( isset( $_REQUEST['id'] ) && $id = filter_var( $_REQUEST['id'], FILTER_VALIDATE_INT ) ) { $message = $this->updateEntry( $id ); } else { $message = $this->insertEntry(); - // echo '
' . print_r( $message, true) . '
'; } break; + default: break; } + $templateData = array_merge( $templateData, $tData ); // Return status, suggested view, and data to controller return array( 'status' => $success, 'menuItemRedirect' => false, 'modelRedirect' => false, - 'view' => 'admin/messages/'.$view.'.html', + 'view' => 'admin/messages/' . $view . '.html', 'data' => $templateData ); diff --git a/setup/databaseScripts/create_database_V0.0.1.sql b/setup/databaseScripts/create_database_V0.0.1.sql index 06b81db..0633681 100644 --- a/setup/databaseScripts/create_database_V0.0.1.sql +++ b/setup/databaseScripts/create_database_V0.0.1.sql @@ -31,3 +31,18 @@ CREATE TABLE {prefix}email_logs ( send_date DATETIME NOT NULL, PRIMARY KEY (id) ); + +---- + +-- Queue +CREATE TABLE {prefix}email_queue ( + id INT NOT NULL AUTO_INCREMENT, + to_email TINYTEXT NOT NULL, + subject TINYTEXT NOT NULL, + from_email TINYTEXT NOT NULL, + reply_to_email TINYTEXT NULL, + message_body TEXT NOT NULL, + send_date DATETIME NOT NULL, + processed BOOLEAN DEFAULT false, + PRIMARY KEY (id) +); diff --git a/views/admin/header.html b/views/admin/header.html index b4a464d..60c9db5 100644 --- a/views/admin/header.html +++ b/views/admin/header.html @@ -2,4 +2,10 @@ {* Navigation *} + +
diff --git a/views/admin/messages/list.html b/views/admin/messages/list.html index 337ec76..233414a 100644 --- a/views/admin/messages/list.html +++ b/views/admin/messages/list.html @@ -1,7 +1,7 @@

List Messages

{include file='admin/header.html'} - +
@@ -17,7 +17,7 @@ - + diff --git a/views/admin/messages/search.html b/views/admin/messages/search.html index 9e3130e..a67b06d 100644 --- a/views/admin/messages/search.html +++ b/views/admin/messages/search.html @@ -2,46 +2,91 @@ {include file='admin/header.html'} - - - - - - -
ID
{$message.id} {$message.subject} {$message.last_updated.timestamp|date_format} {$message.last_updated.timestamp|date_format:"%D %r"}
- - - - - - - - - - -
- {* Multiselect Search Module. Set the necessary parameters for the element here *} - {assign var="multiSelectFilterID" value="filterCategories"} - {assign var="multiSelectFilterName" value="filterCategories[]"} - {assign var="multiSelectFilterData" value=$categories} - {assign var="multiSelectFilterPlaceholder" value="Filter Categories"} - {assign var="multiSelectFilterSearchTerm" value="Categories"} - {include file='admin/ui/multiSelectSearch.html'} - {* End Multiselect Search Module *} -
Member Type - -
- -
- +{if $searchResults} +
+ + + + + {if $smarty.request.filterCategories} + {foreach $smarty.request.filterCategories as $fCat} + + {/foreach} + {/if} + {if $smarty.request.filterMemberTypes} + + {/if} + + + + + + + + +
Message + +
+ +
+
+{else} +
+ + + + + + + + + + + + + + +
+ {* Multiselect Search Module. Set the necessary parameters for the element here *} + {assign var="multiSelectFilterID" value="filterCategories"} + {assign var="multiSelectFilterName" value="filterCategories[]"} + {assign var="multiSelectFilterData" value=$categories} + {assign var="multiSelectFilterPlaceholder" value="Filter Categories"} + {assign var="multiSelectFilterSearchTerm" value="Categories"} + {include file='admin/ui/multiSelectSearch.html'} + {* End Multiselect Search Module *} +
Member Type + +
+ +
+
+{/if} {if $searchResults} - {$searchResults|@print_r} + + + + + + + + {foreach $searchResults as $member} + + + + + {/foreach} +
IDMember Name
{$member.member_pointer}{$member.member_name}
{/if} {include file='admin/footer.html'} -- 2.17.1