From bb545a1e6da0a8e10605ae79249ca0cb9ed94d05 Mon Sep 17 00:00:00 2001 From: Steve Sutton Date: Mon, 25 Jun 2018 16:47:57 -0400 Subject: [PATCH] WIP setup for member notification when update as moderated member. setup button for save as draft and pending update. --- classes/helper/notification.php | 223 ++++++++++++++++++ models/admin/member/memberInfo.php | 3 + views/admin/member/memberInfo.html | 24 +- .../member/memberInfo/editMediaImages.html | 6 +- .../member/memberInfo/editProfileStatus.html | 3 +- 5 files changed, 253 insertions(+), 6 deletions(-) create mode 100644 classes/helper/notification.php diff --git a/classes/helper/notification.php b/classes/helper/notification.php new file mode 100644 index 00000000..ecd2e666 --- /dev/null +++ b/classes/helper/notification.php @@ -0,0 +1,223 @@ + + * @license http://www.galightmedia.com Gaslightmedia + * @release 1 + */ + +// Load the Member Data class +require_once GLM_MEMBERS_PLUGIN_CLASS_PATH . '/data/dataMembers.php'; +require_once GLM_MEMBERS_PLUGIN_CLASS_PATH . '/data/dataMemberInfo.php'; + + +// Extend the member class +class GlmMembersAdmin_member_notification extends GlmDataMembers +{ + /** + * WordPress Database Object + * + * @var $wpdb + * @access public + */ + public $wpdb; + /** + * Plugin Configuration Data + * + * @var $config + * @access public + */ + public $config; + + /** + * Constructor + * + * This constructor performs the work for this model. This model returns + * an array containing the following. + * + * 'status' + * + * True if successful and false if there was a fatal failure. + * + * 'view' + * + * A suggested view name that the controller should use instead of the + * default view for this model or false to indicate that the default view + * should be used. + * + * 'data' + * + * Data that the model is returning for use in merging with the view to + * produce output. + * + * @wpdb object Word Press database object + * + * @return array Array containing status, suggested view, and any data + */ + public function __construct ($wpdb, $config) + { + + // Save WordPress Database object + $this->wpdb = $wpdb; + + // Save plugin configuration object + $this->config = $config; + + /* + * Run constructor for the Events class + */ + parent::__construct($wpdb, $config); + } + + + /** + * Send the member a notice. + * + * This will be the primary contact email if found. + * If not found use the member info record email. + * If nothing in either one then return. + */ + public function sendMemberNotice( $memberId, $event ) + { + $member = $this->getEntry( $memberId ); + // find notify_to + // See if there's a primary member contact for this member + $notify_to = apply_filters( 'glm-member-db-admin-get-member-primary-email', '', $memberId ); + if ( !$notify_to ) { + return false; + } + $validEmail = filter_var( $notify_to, FILTER_VALIDATE_EMAIL ); + if ( !$validEmail ) { + return false; + } + + $memberInfoData = new GlmDataMemberInfo( $this->wpdb, $this->config ); + $memberInfo = $memberInfoData->getActiveInfoForMember( $memberId ); + // get settings + $settings = $this->config['settings']; + $notify_from = $settings['from_email']; + + // Setup the Smarty Engine + $smarty = new smartyTemplateSupport(); + $viewPath = GLM_MEMBERS_EVENTS_PLUGIN_PATH . '/views'; + $smarty->template->setTemplateDir( $viewPath ); + + // Add standard parameters + require GLM_MEMBERS_PLUGIN_SETUP_PATH.'/standardTemplateParams.php'; + $viewFile = 'admin/events/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 ); + + // Generate output from model data and view + $htmlMessage = $smarty->template->fetch( $viewFile ); + + + // change the default wordpress from name when sending mail + add_filter( + 'wp_mail_from_name', + function ( $name ) { + $siteName = get_bloginfo( 'name' ); + return $siteName; + } + ); + // Send confirmation email, set the content type to allow html by using this filter + add_filter( 'wp_mail_content_type', array( $this, 'set_content_type' ) ); + + $subject = 'Event Approved'; + $message = $htmlMessage; + $header[] = 'From:' . $notify_from; + $header[] = 'Reply-To:' . $notify_from; + + wp_mail( $notify_to, $subject, $message, $header ); + + // remove the filter to avoid conflicts + remove_filter( 'wp_mail_content_type', array( $this, 'set_content_type' ) ); + } + + /** + * Send the admin user a notice. + * + * Sending email notice to the Admin user setting form Event Management. + */ + public function sendAdminNotice( $memberId, $event ) + { + $member = $this->getEntry( $memberId ); + $settings = $this->config['settings']; + $notify_to = $settings['to_email']; + $notify_from = $settings['from_email']; + $notify_message = $settings['email_notification']; + if ( !$notify_to ) { + return false; + } + // Double check the email for valid address + $emails = explode( ',', $notify_to ); + foreach ( $emails as $email ) { + $validEmail = filter_var( trim( $email ), FILTER_VALIDATE_EMAIL ); + if ( !$validEmail ) { + return false; + } + } + + // Setup the Smarty Engine + $smarty = new smartyTemplateSupport(); + $viewPath = GLM_MEMBERS_EVENTS_PLUGIN_PATH . '/views'; + $smarty->template->setTemplateDir( $viewPath ); + + // Add standard parameters + require GLM_MEMBERS_PLUGIN_SETUP_PATH.'/standardTemplateParams.php'; + $viewFile = 'admin/events/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 ); + + // Generate output from model data and view + $htmlMessage = $smarty->template->fetch( $viewFile ); + + + // change the default wordpress from name when sending mail + add_filter( + 'wp_mail_from_name', + function ( $name ) { + $siteName = get_bloginfo( 'name' ); + return $siteName; + } + ); + // Send confirmation email, set the content type to allow html by using this filter + 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'; + $message = $htmlMessage; + $header[] = 'From:' . $notify_from; + $header[] = 'Reply-To:' . $replyTo; + + wp_mail( $notify_to, $subject, $message, $header ); + + // remove the filter to avoid conflicts + remove_filter( 'wp_mail_content_type', array( $this, 'set_content_type' ) ); + } + + /** + * Set content type of the email. + * + * Used as filter for the wp_mail_content_type + */ + function set_content_type() + { + return "text/html"; + } +} diff --git a/models/admin/member/memberInfo.php b/models/admin/member/memberInfo.php index 7e745dda..d6cee00a 100644 --- a/models/admin/member/memberInfo.php +++ b/models/admin/member/memberInfo.php @@ -328,6 +328,9 @@ class GlmMembersAdmin_member_memberInfo extends GlmDataMemberInfo // Process submission of a member information record update case 'submit': + // echo '
$_REQUEST: ' . print_r( $_REQUEST, true ) . '
'; + + // Check for new cities being submitted $this->checkNewCities(); diff --git a/views/admin/member/memberInfo.html b/views/admin/member/memberInfo.html index b7f91a99..0e196317 100644 --- a/views/admin/member/memberInfo.html +++ b/views/admin/member/memberInfo.html @@ -71,7 +71,7 @@ {/if} -
+ {if $memberInfoID && $memberInfo} @@ -114,11 +114,13 @@ {if $errorMessage}{$errorMessage}{/if} + {* If moderated member is editing give them save draft or request update *} {if $lockedToMember && apply_filters( 'glm_user_is_moderated', $lockedToMember )} - - + {* Else they can edit normally *} {else} {/if} @@ -371,6 +373,22 @@ glmPageUpdateRequired(); }); + {* If member is moderated *} + {if $memberInfo && $lockedToMember && apply_filters( 'glm_user_is_moderated', $lockedToMember)} + // If they click the request update + $('#pendingMemberUpdate').click(function(e){ + e.preventDefault(); + $('input[name=status]').val('20'); + $('#glm-member-profile-edit-form').submit(); + }); + // If they click the save as draft + $('#saveAsDraft').click(function(e){ + e.preventDefault(); + $('input[name=status]').val('30'); + $('#glm-member-profile-edit-form').submit(); + }); + {/if} + {if $memberInfoID && $memberInfo} // Delete Member Info dialog $("#deleteMemberInfoDialog").dialog({ diff --git a/views/admin/member/memberInfo/editMediaImages.html b/views/admin/member/memberInfo/editMediaImages.html index e0a5d326..faed1a8b 100644 --- a/views/admin/member/memberInfo/editMediaImages.html +++ b/views/admin/member/memberInfo/editMediaImages.html @@ -16,7 +16,7 @@

Profile Image:

- {if $memberInfo.fieldData.logo} + {if $memberInfo.fieldData.logo}
@@ -30,10 +30,12 @@
- {/if} + {/if}
New image:
+ {if $memberInfo.fieldData.logo} + {/if} {if $memberInfo.fieldFail.logo}

{$memberInfo.fieldFail.logo}

{/if}
diff --git a/views/admin/member/memberInfo/editProfileStatus.html b/views/admin/member/memberInfo/editProfileStatus.html index a31ed580..cc8e31b7 100644 --- a/views/admin/member/memberInfo/editProfileStatus.html +++ b/views/admin/member/memberInfo/editProfileStatus.html @@ -1,6 +1,7 @@
{if $lockedToMember && apply_filters( 'glm_user_is_moderated', $lockedToMember )} - + + {* 30 is the Draft *} {else}

Profile Status:

-- 2.17.1