From db932b3ba2207b37491b4f93212eef9f38ab68e4 Mon Sep 17 00:00:00 2001 From: Steve Sutton Date: Thu, 18 Jan 2018 16:12:11 -0500 Subject: [PATCH] Edit attend notifications now working with fullCalendar. fullCalendar showing the send date now. --- classes/regNotifications.php | 350 ++++++++++++++++++ .../registrations/events_notifications.php | 3 +- .../registrations/eventEditNotification.html | 69 +++- 3 files changed, 403 insertions(+), 19 deletions(-) create mode 100644 classes/regNotifications.php diff --git a/classes/regNotifications.php b/classes/regNotifications.php new file mode 100644 index 0000000..1326770 --- /dev/null +++ b/classes/regNotifications.php @@ -0,0 +1,350 @@ + + * @license http://www.gaslightmedia.com Gaslightmedia + * @release notifications.php,v 1.0 2014/10/31 19:31:47 cscott Exp $ + * @link http://dev.gaslightmedia.com/ + */ + +class GlmRegNotifications +{ + /** + * WordPress Database Object + * + * @var $wpdb + * @access public + */ + public $wpdb; + /** + * Plugin Configuration Data + * + * @var $config + * @access public + */ + public $config; + + + /** + * Constructor + * + * @param object $d database connection + * @param array $config Configuration array + * + * @return void + * @access public + */ + public function __construct($wpdb, $config) + { + + // If this class is not being extended along with existing $wpdb and $config + if (!$this->wpdb) { + + // Save WordPress Database object + $this->wpdb = $wpdb; + + // Save plugin configuration object + $this->config = $config; + + } + + } + + /** + * sendEmailNotification + * + * Send out the email notification based on reg_notification and the regEventID. + * + * @param mixed $reg_notification Id for reg_notifgication. + * @param mixed $reg_event_id Id for the reg Event. + * + * @access public + * @return void + */ + public function sendEmailNotification( $reg_notification, $reg_event_id ) + { + $to_email = $account['email']; + // echo '
$to_email: ' . print_r( $to_email, true ) . '
'; + if ( !$to_email ) { + // If there's no email then return false. + return false; + } + + // get the Notification type + var_dump( $reg_notification ); + $notification = $this->getRegNotificationById( $reg_notification ); + echo '
$notification: ' . print_r( $notification, true ) . '
'; + if ( !$notification ) { + // If there's no notification type then return false. + return false; + } + $subject = $notification['subject']; + if ( !$subject ) { + // If there's no subject then return false. + return false; + } + $from_header = $notification['from_header']; + $replyto = $notification['replyto']; + + // Setup the Smarty Engine + $smarty = new smartyTemplateSupport(); + $viewPath = GLM_MEMBERS_BILLING_PLUGIN_PATH . '/views'; + $smarty->template->setTemplateDir( $viewPath ); + + // Add standard parameters + require GLM_MEMBERS_PLUGIN_SETUP_PATH.'/standardTemplateParams.php'; + $viewFile = 'admin/notifications/notification.html'; + + $account_data = array( + 'account' => array( + 'name' => $account['ref_name'], + 'email' => $account['email'], + 'addr1' => $account['billing_addr1'], + 'addr2' => $account['billing_addr2'], + 'city' => $account['billing_city'], + 'state' => $account['billing_state'], + 'zip' => $account['billing_zip'], + 'phone' => $account['billing_phone'], + ) + ); + echo '
$notification[message]: ' . print_r( $notification['message'], true ) . '
'; + $notification_message = $this->parseSmartyTemplateString( + $account_data, + wpautop( $notification['message'] ) + ); + echo '
$account_data: ' . print_r( $account_data, true ) . '
'; + echo '
$notification_message: ' . print_r( $notification_message, true ) . '
'; + // exit; + + $smarty->templateAssign( 'title', $notification['subject'] ); + $smarty->templateAssign( 'html_content', $notification_message ); + + // 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' ) ); + + $message = $htmlMessage; + $header[] = 'From:' . $from_header; + $header[] = 'Reply-To:' . $replyto; + + wp_mail( $to_email, $subject, $message, $header ); + + // remove the filter to avoid conflicts + remove_filter( 'wp_mail_content_type', array( $this, 'set_content_type' ) ); + + // Send notification to recordNotification + $notice_data = array( + 'reg_notification' => $reg_notification, + 'account' => $account_id, + 'from_replyto' => $from_header, + 'subject' => $subject, + 'message' => $message, + 'email_sent' => $to_email, + ); + $this->recordNotification( $notice_data ); + } + + /** + * getRegNotificationById + * + * Grab the reg_notification given an id. + * + * @param mixed $id Id of the reg_notification to return. + * + * @access public + * @return array or false if not found + */ + public function getRegNotificationById( $id ) + { + return $this->wpdb->get_row( + $this->wpdb->prepare( + "SELECT * + FROM " . GLM_MEMBERS_REGISTRATIONS_PLUGIN_DB_PREFIX . "reg_notification + WHERE id = %d", + $id + ) + ); + } + + /** + * parseSmartyTemplateString + * + * + * + * @param mixed $data + * @param mixed $template_string + * + * @access public + * @return void + */ + public function parseSmartyTemplateString( $data, $template_string ) + { + // Load Smarty Template support + $smarty = new smartyTemplateSupport(); + + // Add standard parameters + require GLM_MEMBERS_PLUGIN_SETUP_PATH . '/standardTemplateParams.php'; + + // Add data from model to Smarty template + if ( is_array( $data ) && count( $data ) > 0 ) { + foreach ( $data as $key => $value ) { + echo '
$key: ' . print_r( $key, true ) . '
'; + $smarty->templateAssign( $key, $value ); + } + } + + return $smarty->template->fetch( 'eval:' . $template_string ); + } + + /** + * recordNotification + * + * Record the notification. + * + * @param mixed $notification Array of data for the notification + i + * @access public + * @return void + */ + public function recordNotification( $notification ) + { + if ( !$notification['notification_type'] || !$notification['account'] + || !$notification['from_replyto'] || !$notification['subject'] + || !$notification['message'] || !$notification['email_sent'] + ) { + return false; + } + $this->wpdb->insert( + GLM_MEMBERS_BILLING_PLUGIN_DB_PREFIX . 'notifications', + array( + 'notification_type' => $notification['notification_type'], + 'account' => $notification['account'], + 'from_replyto' => $notification['from_replyto'], + 'subject' => $notification['subject'], + 'message' => $notification['message'], + 'date_sent' => date('Y-m-d H:i;s'), + 'email_sent' => $notification['email_sent'], + ), + array( + '%d', // notification_type + '%d', // account + '%s', // from_replyto + '%s', // subject + '%s', // message + '%s', // date_sent + '%s', // email_sent + ) + ); + return true; + } + + /** + * Set content type of the email. + * + * Used as filter for the wp_mail_content_type + */ + function set_content_type() + { + return "text/html"; + } + + /** + * queueNotice + * + * Queue the noticifation. + * + * @param mixed $notification_type Id for the notification type + * @param mixed $account Id for the account + * + * @access public + * @return void + */ + public function queueNotice( $notification_type, $account ) + { + // First check to see if there's already one in the queue. + $queue_id = $this->wpdb->get_var( + $this->wpdb->prepare( + "SELECT id + FROM " . GLM_MEMBERS_BILLING_PLUGIN_DB_PREFIX . "notification_queue + WHERE notification_type = %d + AND account = %d", + $notification_type, + $account + ) + ); + if ( !$queue_id ) { + $this->wpdb->insert( + GLM_MEMBERS_BILLING_PLUGIN_DB_PREFIX . 'notification_queue', + array( + 'notification_type' => $notification_type, + 'account' => $account + ), + array( + '%d', + '%d' + ) + ); + } + } + + /** + * getQueuedNotifications + * + * Grab queued notifications. Number is based on input. + * If nothing given then defaults to all queued notifications. + * + * @param int $limit Number of queued items to fetch. + * + * @access public + * @return array + */ + public function getQueuedNotifications( $limit ) + { + $query = + "SELECT * + FROM " . GLM_MEMBERS_BILLING_PLUGIN_DB_PREFIX . "notification_queue"; + if ( $numb = filter_var( $limit, FILTER_VALIDATE_INT ) ) { + $query .= " LIMIT $limit OFFSET 0"; + } + return $this->wpdb->get_results( + $query, + ARRAY_A + ); + } + + /** + * deleteQueue + * + * Remove notice from the queue. + * + * @param mixed $queue_id Queue id to delete. + * + * @access public + * @return void + */ + public function deleteQueue( $queue_id ) + { + $this->wpdb->delete( + GLM_MEMBERS_BILLING_PLUGIN_DB_PREFIX . 'notification_queue', + array( 'id' => $queue_id ), + array( '%d' ) + ); + } +} diff --git a/models/admin/registrations/events_notifications.php b/models/admin/registrations/events_notifications.php index 759d85b..847c001 100644 --- a/models/admin/registrations/events_notifications.php +++ b/models/admin/registrations/events_notifications.php @@ -17,6 +17,7 @@ require_once GLM_MEMBERS_REGISTRATIONS_PLUGIN_CLASS_PATH.'/data/dataRegNotificat $Notifications = new GlmDataRegistrationsRegNotification($this->wpdb, $this->config); $regEvent = $this->getEntry($regEventID); +// echo '
$regEvent: ' . print_r( $regEvent, true ) . '
'; if ( isset( $_REQUEST['delete'] ) && filter_var( $_REQUEST['delete'], FILTER_VALIDATE_BOOLEAN ) ) { $regNotifications = $Notifications->getList("T.reg_event = $regEventID", 'notification_days'); @@ -25,9 +26,7 @@ if ( isset( $_REQUEST['delete'] ) && filter_var( $_REQUEST['delete'], FILTER_VAL $regNotifications = $Notifications->editEntry( $notice_id ); $view = 'eventEditNotification'; $days = $regNotifications['notification_days']; - echo '
$days: ' . print_r( $days, true ) . '
'; $when = ( $days > 0 ) ? 'after' : 'before'; - echo '
$when: ' . print_r( $when, true ) . '
'; } else if ( isset( $_REQUEST['new'] ) && filter_var( $_REQUEST['new'], FILTER_VALIDATE_BOOLEAN ) ) { $regNotifications = $Notifications->newEntry(); $view = 'eventEditNotification'; diff --git a/views/admin/registrations/eventEditNotification.html b/views/admin/registrations/eventEditNotification.html index 49a0dcb..ad4fd59 100644 --- a/views/admin/registrations/eventEditNotification.html +++ b/views/admin/registrations/eventEditNotification.html @@ -46,12 +46,13 @@
Days - @@ -139,37 +140,71 @@ var calendar; var regEvent = { id: 'regEvent', - title: 'regEvent', - start: '01/27/2018', - end: '01/27/2018', + title: 'Event', + start: '{$regEvent.first_datetime.datetime}', + end: '{$regEvent.first_datetime.datetime}', allDay: true, }; + function getSendDate(){ + var EventDate = new Date( + {$regEvent.first_datetime.timestamp|date_format:"%Y"}, + {$regEvent.first_datetime.timestamp|date_format:"%m"} - 1, + {$regEvent.first_datetime.timestamp|date_format:"%e"} + ); + var notificationDays = $('#notificationDays').val(); + var notificationWhen = $('#notificationWhen').val(); + var sendDate = new Date( + {$regEvent.first_datetime.timestamp|date_format:"%Y"}, + {$regEvent.first_datetime.timestamp|date_format:"%m"} - 1, + {$regEvent.first_datetime.timestamp|date_format:"%e"} + ); + if ( notificationWhen == 'before' ) { + sendDate.setDate(sendDate.getDate() - parseInt(notificationDays)); + } else { + sendDate.setDate(sendDate.getDate() + parseInt(notificationDays)); + } + calendar.fullCalendar('removeEvents', 'notice'); + var dateString = (sendDate.getMonth() + 1 ) + '/' + sendDate.getDate() + '/' + sendDate.getFullYear(); + var newEvent = { + id: 'notice', + title: 'Send', + start: dateString, + end: dateString, + allDay: true, + color: 'rgb(255,0,0)' + }; + calendar.fullCalendar('renderEvent', newEvent, true); + } + function initFullCalendar(){ calendar = $('#datepicker').fullCalendar({ timezone: 'local', events: [ regEvent + {if !$newEntry} + ,{ + id: 'notice', + title: 'Send', + start: '01/16/2018', + end: '01/16/2018', + allDay: true, + } + {/if} ], defaultDate: '01/27/2018', - dayClick: function( date, allDay, jsEvent, view ){ - // console.log( 'jsEvent: ', jsEvent ); - console.log( 'date: ', date ); - calendar.fullCalendar('removeEvents', 'selected'); - var newEvent = { - id: 'selected', - title: 'selected', - start: date.format(), - end: date.format(), - allDay: true, - }; - calendar.fullCalendar('renderEvent', newEvent, true); - }, }); // console.log( 'cal:', calendar ); } initFullCalendar(); + getSendDate(); + $('#notificationDays').click(function(){ + getSendDate(); + }); + $('#notificationWhen').click(function(){ + getSendDate(); + }); // Flash certain elements for a short time after display $(".glm-flash-updated").fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500); -- 2.17.1