Setup header nav and work on search members form
authorSteve Sutton <steve@gaslightmedia.com>
Wed, 29 May 2019 20:39:42 +0000 (16:39 -0400)
committerSteve Sutton <steve@gaslightmedia.com>
Wed, 29 May 2019 20:39:42 +0000 (16:39 -0400)
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
setup/databaseScripts/create_database_V0.0.1.sql
views/admin/header.html
views/admin/messages/list.html
views/admin/messages/search.html

index 790fc14..f356d7e 100644 (file)
@@ -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 '<pre>$_REQUEST: ' . print_r( $_REQUEST, true ) . '</pre>';
+
+            // 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 '<pre>$catsToUse: ' . print_r( $catsToUse, true ) . '</pre>';
+
+            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 '<pre>$categories: ' . print_r( $categories, true ) . '</pre>';
 
             // 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 '<pre>$where: ' . print_r( $where, true ) . '</pre>';
+
+                $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 '<pre>' . print_r( $messages, true ) . '</pre>';
-            $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 '<pre>$_REQUEST: ' . print_r( $_REQUEST, true) . '</pre>';
             $_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 '<pre>' . print_r( $message, true) . '</pre>';
             }
             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
         );
 
index 06b81db..0633681 100644 (file)
@@ -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)
+);
index b4a464d..60c9db5 100644 (file)
@@ -2,4 +2,10 @@
 
     {* Navigation *}
 
+    <h2 class="nav-tab-wrapper">
+        <a href="{$thisUrl}?page={$thisPage}&option=search" class="nav-tab{if $thisOption==search} nav-tab-active{/if}">Search</a>
+        <a href="{$thisUrl}?page={$thisPage}&option=list" class="nav-tab{if $thisOption==list} nav-tab-active{/if}">HTML Messages</a>
+        <a href="{$thisUrl}?page={$thisPage}&option=editHtmlEmail" class="nav-tab{if $thisOption==editHtmlEmail} nav-tab-active{/if}">Add HTML Email</a>
+    </h2>
+
     <div id="glm-admin-content-container">
index 337ec76..233414a 100644 (file)
@@ -1,7 +1,7 @@
 <h2>List Messages</h2>
 {include file='admin/header.html'}
 
-<table class="wp-list-table striped glm-admin-table-single">
+<table class="wp-list-table widefat fixed posts glm-admin-table">
     <thead>
         <tr>
             <th align="left">ID</th>
@@ -17,7 +17,7 @@
                 <tr>
                     <td> {$message.id} </td>
                     <td> <a href="{$thisUrl}?page={$thisPage}&option=editHtmlEmail&id={$message.id}">{$message.subject}</a> </td>
-                    <td> {$message.last_updated.timestamp|date_format} </td>
+                    <td> {$message.last_updated.timestamp|date_format:"%D %r"} </td>
                     <td> </td>
                     <td> </td>
                 </tr>
index 9e3130e..a67b06d 100644 (file)
@@ -2,46 +2,91 @@
 
 {include file='admin/header.html'}
 
-
-
-<form action="{$thisUrl}?page={$thisPage}" method="post">
-    <input type="hidden" name="page" value="{$thisPage}" />
-    <input type="hidden" name="option" value="search" />
-    <input type="hidden" name="search" value="1" />
-    <table>
-        <tr>
-            <td colspan="2">
-                {* 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 *}
-            </td>
-        </tr>
-        <tr>
-            <th>Member Type</th>
-            <td>
-                <select id="filterMemberTypes" name="filterMemberTypes">
-                    <option value=""></option>
-                    {foreach $member_types as $type}
-                        <option value="{$type.id}"{if $type.id == $mTypeSelected} selected{/if}>{$type.name}</option>
-                    {/foreach}
-                </select>
-            </td>
-        </tr>
-        <tr>
-            <td colspan="2">
-                <input type="submit" value="Search" />
-            </td>
-        </tr>
-    </table>
-</form>
+{if $searchResults}
+    <form action="{$thisUrl}?page={$thisPage}" method="post">
+        <input type="hidden" name="page" value="{$thisPage}" />
+        <input type="hidden" name="option" value="search" />
+        <input type="hidden" name="option2" value="sendMessages" />
+        <input type="hidden" name="search" value="1" />
+        {if $smarty.request.filterCategories}
+            {foreach $smarty.request.filterCategories as $fCat}
+                <input type="hidden" name="filterCategories[]" value="{$fCat}" />
+            {/foreach}
+        {/if}
+        {if $smarty.request.filterMemberTypes}
+            <input type="hidden" name="filterMemberTypes" value="{$smarty.request.filterMemberTypes}" />
+        {/if}
+        <table>
+            <tr>
+                <th>Message</th>
+                <td>
+                    <select name="message_id" required>
+                        <option value="">-- Select --</option>
+                        <option value="x">Message One</option>
+                        <option value="x">Message Two</option>
+                    </select>
+                </td>
+            </tr>
+            <tr>
+                <td colspan="2">
+                    <input type="submit" value="Send Messages" />
+                </td>
+            </tr>
+        </table>
+    </form>
+{else}
+    <form action="{$thisUrl}?page={$thisPage}" method="post">
+        <input type="hidden" name="page" value="{$thisPage}" />
+        <input type="hidden" name="option" value="search" />
+        <input type="hidden" name="search" value="1" />
+        <table>
+            <tr>
+                <td colspan="2">
+                    {* 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 *}
+                </td>
+            </tr>
+            <tr>
+                <th>Member Type</th>
+                <td>
+                    <select id="filterMemberTypes" name="filterMemberTypes">
+                        <option value=""></option>
+                        {foreach $member_types as $type}
+                            <option value="{$type.id}"{if $type.id == $mTypeSelected} selected{/if}>{$type.name}</option>
+                        {/foreach}
+                    </select>
+                </td>
+            </tr>
+            <tr>
+                <td colspan="2">
+                    <input type="submit" value="Search" />
+                </td>
+            </tr>
+        </table>
+    </form>
+{/if}
 
 {if $searchResults}
-    {$searchResults|@print_r}
+    <table class="wp-list-table widefat fixed posts glm-admin-table">
+        <thead>
+            <tr>
+                <th>ID</th>
+                <th>Member Name</th>
+            </tr>
+        </thead>
+        {foreach $searchResults as $member}
+            <tr>
+                <td>{$member.member_pointer}</td>
+                <td>{$member.member_name}</td>
+            </tr>
+        {/foreach}
+    </table>
 {/if}
 
 {include file='admin/footer.html'}