From 324b2d94dd4fc75b529ea5c2a116931eaaddfb43 Mon Sep 17 00:00:00 2001 From: Steve Sutton Date: Tue, 26 Jun 2018 12:48:40 -0400 Subject: [PATCH] Setting up email notifications when moderated member updates If a moderated member contact sets the status to pending (for member info), it will send an email. --- classes/helper/notification.php | 36 +++++++------- config.php | 8 ++++ config/plugin.ini | 5 +- models/admin/member/memberInfo.php | 55 +++++++++++++++------- views/admin/members/list.html | 2 + views/admin/notifications/memberEmail.html | 27 +++++++++++ views/admin/notifications/ownerEmail.html | 30 ++++++++++++ 7 files changed, 126 insertions(+), 37 deletions(-) create mode 100644 views/admin/notifications/memberEmail.html create mode 100644 views/admin/notifications/ownerEmail.html diff --git a/classes/helper/notification.php b/classes/helper/notification.php index ecd2e666..3751056b 100644 --- a/classes/helper/notification.php +++ b/classes/helper/notification.php @@ -83,7 +83,7 @@ class GlmMembersAdmin_member_notification extends GlmDataMembers * If not found use the member info record email. * If nothing in either one then return. */ - public function sendMemberNotice( $memberId, $event ) + public function sendMemberNotice( $memberId, $profile ) { $member = $this->getEntry( $memberId ); // find notify_to @@ -100,22 +100,23 @@ class GlmMembersAdmin_member_notification extends GlmDataMembers $memberInfoData = new GlmDataMemberInfo( $this->wpdb, $this->config ); $memberInfo = $memberInfoData->getActiveInfoForMember( $memberId ); // get settings - $settings = $this->config['settings']; + $settings = $this->config['email_notifications']; $notify_from = $settings['from_email']; + $message = $settings['approved_message']; // Setup the Smarty Engine $smarty = new smartyTemplateSupport(); - $viewPath = GLM_MEMBERS_EVENTS_PLUGIN_PATH . '/views'; + $viewPath = GLM_MEMBERS_PLUGIN_PATH . '/views'; $smarty->template->setTemplateDir( $viewPath ); // Add standard parameters require GLM_MEMBERS_PLUGIN_SETUP_PATH.'/standardTemplateParams.php'; - $viewFile = 'admin/events/memberEmail.html'; + $viewFile = 'admin/notifications/memberEmail.html'; - $eventList = GLM_MEMBERS_EVENTS_PLUGIN_ADMIN_URL ."?page=glm-members-admin-menu-events-list&glm_action=list"; - $smarty->templateAssign( 'location', 'Member Events' ); - $smarty->templateAssign( 'name', $event['fieldData']['name'] ); - $smarty->templateAssign( 'pendingEvents', $eventList ); + $memberList = GLM_MEMBERS_EVENTS_PLUGIN_ADMIN_URL ."?page=glm-members-admin-menu-members-list"; + $smarty->templateAssign( 'message', $message ); + // $smarty->templateAssign( 'name', $event['fieldData']['name'] ); + $smarty->templateAssign( 'pendingMembers', $memberList ); // Generate output from model data and view $htmlMessage = $smarty->template->fetch( $viewFile ); @@ -148,13 +149,13 @@ class GlmMembersAdmin_member_notification extends GlmDataMembers * * Sending email notice to the Admin user setting form Event Management. */ - public function sendAdminNotice( $memberId, $event ) + public function sendAdminNotice( $memberId, $profile ) { $member = $this->getEntry( $memberId ); - $settings = $this->config['settings']; + $settings = $this->config['email_notifications']; $notify_to = $settings['to_email']; $notify_from = $settings['from_email']; - $notify_message = $settings['email_notification']; + $notify_message = $settings['notification_message']; if ( !$notify_to ) { return false; } @@ -169,19 +170,16 @@ class GlmMembersAdmin_member_notification extends GlmDataMembers // Setup the Smarty Engine $smarty = new smartyTemplateSupport(); - $viewPath = GLM_MEMBERS_EVENTS_PLUGIN_PATH . '/views'; + $viewPath = GLM_MEMBERS_PLUGIN_PATH . '/views'; $smarty->template->setTemplateDir( $viewPath ); // Add standard parameters require GLM_MEMBERS_PLUGIN_SETUP_PATH.'/standardTemplateParams.php'; - $viewFile = 'admin/events/ownerEmail.html'; + $viewFile = 'admin/notifications/ownerEmail.html'; - $eventList = GLM_MEMBERS_EVENTS_PLUGIN_ADMIN_URL ."?page=glm-members-admin-menu-events-index"; $smarty->templateAssign( 'notify_message', $notify_message); - $smarty->templateAssign( 'location', 'Member Events' ); $smarty->templateAssign( 'member', $member ); - $smarty->templateAssign( 'name', $event['fieldData']['name'] ); - $smarty->templateAssign( 'pendingEvents', $eventList ); + $smarty->templateAssign( 'name', $profile['reference_name'] ); // Generate output from model data and view $htmlMessage = $smarty->template->fetch( $viewFile ); @@ -199,8 +197,8 @@ class GlmMembersAdmin_member_notification extends GlmDataMembers add_filter( 'wp_mail_content_type', array( $this, 'set_content_type' ) ); // Set the Reply-To to use Admin Contact E-Mail - $replyTo = ( $event['fieldData']['admin_email'] ) ? $event['fieldData']['admin_email']: $notify_from; - $subject = 'Event Form Submission'; + $replyTo = $notify_from;//( $event['fieldData']['admin_email'] ) ? $event['fieldData']['admin_email']: $notify_from; + $subject = $this->config['terms']['term_member_cap'] . ' Update Request'; $message = $htmlMessage; $header[] = 'From:' . $notify_from; $header[] = 'Reply-To:' . $replyTo; diff --git a/config.php b/config.php index 38d05d1f..fa24a018 100644 --- a/config.php +++ b/config.php @@ -26,13 +26,21 @@ $config['countries'] = $countryData['countries']; // if we have the database setup already (activated) - Read in Settings and Terms from database if ($glmMembersDatabaseDbVersion) { + // Setup for settings $settings = $wpdb->get_row("SELECT * FROM ".GLM_MEMBERS_PLUGIN_DB_PREFIX . "settings_general WHERE id = 1;", ARRAY_A); unset($settings['id']); $config['settings'] = $settings; + + // Setup for terms $terms = $wpdb->get_row("SELECT * FROM ".GLM_MEMBERS_PLUGIN_DB_PREFIX . "settings_terms WHERE id = 1;", ARRAY_A); unset($terms['id']); $config['terms'] = $terms; + // Setup for email_notifications + $email_notifications = $wpdb->get_row( "SELECT * FROM ".GLM_MEMBERS_PLUGIN_DB_PREFIX . "email_notifications WHERE id = 1", ARRAY_A ); + unset($email_notifications['id']); + $config['email_notifications'] = $email_notifications; + // Add Debug defines - These can't go into the defines.php file - Guess why. define('GLM_MEMBERS_PLUGIN_ADMIN_DEBUG', $settings['admin_debug']); define('GLM_MEMBERS_PLUGIN_ADMIN_DEBUG_VERBOSE', $settings['admin_debug_verbose']); diff --git a/config/plugin.ini b/config/plugin.ini index 61a1320e..27c76ccc 100644 --- a/config/plugin.ini +++ b/config/plugin.ini @@ -56,8 +56,9 @@ status[20] = 'Pending Review' status[30] = 'Draft' status[90] = 'Archived' -status_numb['Active'] = 10 -status_numb['Pending'] = 20 +status_numb['Active'] = 10 +status_numb['Pending'] = 20 +status_numb['Draft'] = 30 status_numb['Inactive'] = 30 status_numb['Archived'] = 90 diff --git a/models/admin/member/memberInfo.php b/models/admin/member/memberInfo.php index d6cee00a..4dcd9b90 100644 --- a/models/admin/member/memberInfo.php +++ b/models/admin/member/memberInfo.php @@ -13,8 +13,17 @@ * @version 0.1 */ -// Load Members data abstract -require_once GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataMemberInfo.php'; +// Load Members data abstracts +require_once GLM_MEMBERS_PLUGIN_CLASS_PATH . '/data/dataMembers.php'; +require_once GLM_MEMBERS_PLUGIN_CLASS_PATH . '/data/dataMemberInfo.php'; +require_once GLM_MEMBERS_PLUGIN_CLASS_PATH . '/data/dataCategories.php'; +require_once GLM_MEMBERS_PLUGIN_CLASS_PATH . '/data/dataCategoryMemberInfo.php'; +require_once GLM_MEMBERS_PLUGIN_CLASS_PATH . '/data/dataCities.php'; +require_once GLM_MEMBERS_PLUGIN_CLASS_PATH . '/data/dataImages.php'; +require_once GLM_MEMBERS_PLUGIN_CLASS_PATH . '/data/dataFiles.php'; +require_once GLM_MEMBERS_PLUGIN_CLASS_PATH . '/data/dataAmenities.php'; +require_once GLM_MEMBERS_PLUGIN_CLASS_PATH . '/glmMemberInfoClone.php'; +require_once GLM_MEMBERS_PLUGIN_CLASS_PATH . '/helper/notification.php'; /** * This class performs the work for the default action of the "Members" menu @@ -277,7 +286,6 @@ class GlmMembersAdmin_member_memberInfo extends GlmDataMemberInfo } // Get member base data - require_once GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataMembers.php'; $Members = new GlmDataMembers($this->wpdb, $this->config); $this->memberData = $Members->getEntry($this->memberID); $this->fields['logo']['i_prefix'] = 'memb_'.$this->memberID.'_'; @@ -295,7 +303,6 @@ class GlmMembersAdmin_member_memberInfo extends GlmDataMemberInfo * These will be sorted so sub-categories fall under their * respective category. */ - require_once GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataCategories.php'; $Categories = new GlmDataCategories($this->wpdb, $this->config); $categories = $Categories->getListSortedParentChild(); $categories2 = $Categories->getListSortedParentChild(false); @@ -328,8 +335,34 @@ class GlmMembersAdmin_member_memberInfo extends GlmDataMemberInfo // Process submission of a member information record update case 'submit': + // Get the old status for this entry + $old_entry = $this->getEntry( $this->memberInfoID ); + // echo '
$old_entry: ' . print_r( $old_entry, true ) . '
'; + $old_status = $old_entry['status']['value']; + // echo '
$old_status: ' . print_r( $old_status, true ) . '
'; + $new_status = isset( $_REQUEST['status'] ) ? $_REQUEST['status'] : null; + // echo '
$new_status: ' . print_r( $new_status, true ) . '
'; // echo '
$_REQUEST: ' . print_r( $_REQUEST, true ) . '
'; + // echo '
$this->config: ' . print_r( $this->config, true ) . '
'; + // If a moderated user is going from Draft to Pending then send the admin notification + if ( $lockedToMember && apply_filters( 'glm_user_is_moderated', $lockedToMember ) ) { + $draft = $this->config['status_numb']['Draft']; + // echo '
$draft: ' . print_r( $draft, true ) . '
'; + $pending = $this->config['status_numb']['Pending']; + // echo '
$pending: ' . print_r( $pending, true ) . '
'; + if ( $new_status == $pending && $old_status == $draft ) { + // TODO: Code to send admin notification here + $Notifications = new GlmMembersAdmin_member_notification( $this->wpdb, $this->config ); + $settings = $this->config['email_notifications']; + // Get the profile reference name + $profile = array(); + $profile['reference_name'] = filter_var( $_REQUEST['reference_name'], FILTER_SANITIZE_STRING ); + $Notifications->sendAdminNotice( $this->memberID, $profile ); + echo '
$settings: ' . print_r( $settings, true ) . '
'; + } + } + // Check for new cities being submitted $this->checkNewCities(); @@ -341,11 +374,9 @@ class GlmMembersAdmin_member_memberInfo extends GlmDataMemberInfo $this->updateAmenities(); // Load Image data class - require_once GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataImages.php'; $Images = new GlmDataImages($this->wpdb, $this->config); // Load File data class - require_once GLM_MEMBERS_PLUGIN_CLASS_PATH . '/data/dataFiles.php'; $Files = new GlmDataFiles( $this->wpdb, $this->config ); // Update image gallery titles, descriptions, and image positions then return current image gallery @@ -379,7 +410,8 @@ class GlmMembersAdmin_member_memberInfo extends GlmDataMemberInfo } else { } -// print_r($customFieldResults); + + // Clear out shortcode cache for members glmClearShortcodeCache(); break; @@ -427,7 +459,6 @@ class GlmMembersAdmin_member_memberInfo extends GlmDataMemberInfo case 'clone': // Load Member Info Clone Class - require_once GLM_MEMBERS_PLUGIN_CLASS_PATH.'/glmMemberInfoClone.php'; $CloneMemberInfo = new GlmMemberInfoClone($this->wpdb, $this->config); $oldId = $this->memberInfoID; @@ -462,7 +493,6 @@ class GlmMembersAdmin_member_memberInfo extends GlmDataMemberInfo } // Get list of Available Member Amenities to use for picklists - require_once GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataAmenities.php'; $Amenities = new GlmDataAmenities($this->wpdb, $this->config); $this->amenities = $Amenities->getList("T.ref_type = ".$this->config['ref_type_numb']['MemberInfo']); @@ -500,13 +530,11 @@ class GlmMembersAdmin_member_memberInfo extends GlmDataMemberInfo if ($this->memberInfoID) { // Also, if this is not a create, get any image gallery images - require_once GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataImages.php'; $Images = new GlmDataImages($this->wpdb, $this->config); $this->imageGallery = $Images->getGallery($this->config['ref_type_numb']['MemberInfo'], $this->memberInfoID); $this->haveImageGallery = ($this->imageGallery != false); // Also, if this is not a create, get any files - require_once GLM_MEMBERS_PLUGIN_CLASS_PATH . '/data/dataFiles.php'; $Files = new GlmDataFiles( $this->wpdb, $this->config ); $this->files = $Files->getFiles( $this->config['ref_type_numb']['MemberInfo'], $this->memberInfoID ); $this->haveFiles = ($this->files != false); @@ -577,7 +605,6 @@ class GlmMembersAdmin_member_memberInfo extends GlmDataMemberInfo $cName = trim(filter_var($_REQUEST['newCityName'])); // Try to add the city - require_once GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataCities.php'; $Cities = new GlmDataCities($this->wpdb, $this->config); $cID = $Cities->addCity($cName); @@ -604,7 +631,6 @@ class GlmMembersAdmin_member_memberInfo extends GlmDataMemberInfo $cName = trim(filter_var($_REQUEST['newMailingCityName'])); // Try to add the mailing_city - require_once GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataCities.php'; $Cities = new GlmDataCities($this->wpdb, $this->config); $cID = $Cities->addCity($cName); @@ -635,11 +661,9 @@ class GlmMembersAdmin_member_memberInfo extends GlmDataMemberInfo { // Instatiate the dataCategories class - require_once GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataCategories.php'; $Categories = new GlmDataCategories($this->wpdb, $this->config); // Instatiate categoryMemberInfo class - require_once GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataCategoryMemberInfo.php'; $CategoryMemberInfo = new GlmDataCategoryMemberInfo($this->wpdb, $this->config); // Get any selected categories @@ -785,7 +809,6 @@ class GlmMembersAdmin_member_memberInfo extends GlmDataMemberInfo { // Instantiate Amenities data class - require_once GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataAmenities.php'; $Amenities = new GlmDataAmenities($this->wpdb, $this->config); $selectedAmenities = array(); diff --git a/views/admin/members/list.html b/views/admin/members/list.html index 7bd477a4..c35a6754 100644 --- a/views/admin/members/list.html +++ b/views/admin/members/list.html @@ -88,7 +88,9 @@ {$m.name} + {if $m.active_id} Edit Active Profile + {/if} View Profile diff --git a/views/admin/notifications/memberEmail.html b/views/admin/notifications/memberEmail.html new file mode 100644 index 00000000..7d22eff6 --- /dev/null +++ b/views/admin/notifications/memberEmail.html @@ -0,0 +1,27 @@ + + + + + + +

{$terms.term_member_cap} Approval Notification

+ + {if $message} +
+

{$message}

+
+ {/if} + + + + + + +
{$terms.term_member_cap} Name:{$name}
+ +
+

A {$terms.term_member_cap} has been approved.

+

To view it, please go to the {$terms.term_member} page in your admin.

+
+ + diff --git a/views/admin/notifications/ownerEmail.html b/views/admin/notifications/ownerEmail.html new file mode 100644 index 00000000..8526f276 --- /dev/null +++ b/views/admin/notifications/ownerEmail.html @@ -0,0 +1,30 @@ + + + + + + +

{$terms.term_member_cap} Submission Notification

+ + {if $notify_message} +
+

{$notify_message}

+
+ {/if} + + + + + + + + + + +
Member Name:{$member.name}
Profile Name:{$name}
+ +
+

+
+ + -- 2.17.1