From c3b0325e7c3d4140bec89f893e449a9852dc1f11 Mon Sep 17 00:00:00 2001 From: Steve Sutton Date: Thu, 9 Feb 2017 13:54:52 -0500 Subject: [PATCH] Start work for pending packages Updating the database table for management (packaging) to have three new fields. Originally named them to_email,from_email,email_notification. Had to rename them in my database and update the create and update script to add a prefix of package_ to these names. As they were conflicting with the events ones. I added the new field for status and updated the member edit and the member manager edit package page to use the status. To have it marked pending when the member edits the package. Need to test this out though for member that is not moderated. I added the notification class from the events and coupon that I used there and I'm setting it up for the email notifications. Testing right now the email for admin. Emails working currently. --- classes/data/dataManagement.php | 172 +++++++------ classes/data/dataPackages.php | 10 + classes/helper/notification.php | 229 ++++++++++++++++++ index.php | 2 +- models/admin/member/packaging.php | 85 ++++--- models/admin/packaging/index.php | 114 +++++---- models/front/packaging/list.php | 2 +- ..._V1.1.5.sql => create_database_V1.1.6.sql} | 14 +- setup/databaseScripts/dbVersions.php | 15 +- .../update_database_V1.1.6.sql | 35 +++ views/admin/management/packaging.html | 20 ++ views/admin/member/packaging.html | 12 +- views/admin/packaging/index.html | 20 +- views/admin/packaging/memberEmail.html | 25 ++ views/admin/packaging/ownerEmail.html | 31 +++ 15 files changed, 613 insertions(+), 173 deletions(-) create mode 100644 classes/helper/notification.php rename setup/databaseScripts/{create_database_V1.1.5.sql => create_database_V1.1.6.sql} (90%) create mode 100644 setup/databaseScripts/update_database_V1.1.6.sql create mode 100644 views/admin/packaging/memberEmail.html create mode 100644 views/admin/packaging/ownerEmail.html diff --git a/classes/data/dataManagement.php b/classes/data/dataManagement.php index 92f3b65..e7c0c0b 100644 --- a/classes/data/dataManagement.php +++ b/classes/data/dataManagement.php @@ -122,7 +122,7 @@ class GlmDataPackagingManagement extends GlmDataAbstract 'required' => true, 'use' => 'a' ), - + // Member List Link to Packages on Member Detail 'package_link_text_member_list' => array ( 'field' => 'package_link_text_member_list', @@ -130,7 +130,7 @@ class GlmDataPackagingManagement extends GlmDataAbstract 'required' => false, 'use' => 'a' ), - + // Member Detail Link to Packages on Member Detail 'package_link_text_member_detail' => array ( 'field' => 'package_link_text_member_detail', @@ -138,281 +138,305 @@ class GlmDataPackagingManagement extends GlmDataAbstract 'required' => false, 'use' => 'a' ), - - // + + // Notification To Email + 'package_to_email' => array( + 'field' => 'package_to_email', + 'type' => 'text', + 'required' => false, + 'use' => 'a', + ), + + // Notification From Email + 'package_from_email' => array( + 'field' => 'package_from_email', + 'type' => 'text', + 'required' => false, + 'use' => 'a', + ), + + // Notification Message + 'package_email_notification' => array( + 'field' => 'package_email_notification', + 'type' => 'text', + 'required' => false, + 'use' => 'a', + ), + + // 'package_list_show_member_image' => array( 'field' => 'package_list_show_member_image', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - - // + + + // 'package_list_show_member_link' => array( 'field' => 'package_list_show_member_link', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_list_show_member_link_newtarget' => array( 'field' => 'package_list_show_member_link_newtarget', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_list_show_offsite_url' => array( 'field' => 'package_list_show_offsite_url', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_list_show_offsite_url_newtarget' => array( 'field' => 'package_list_show_offsite_url_newtarget', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_list_show_image' => array( 'field' => 'package_list_show_image', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_list_show_short_descr' => array( 'field' => 'package_list_show_short_descr', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_list_show_expire_date' => array( 'field' => 'package_list_show_expire_date', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_list_show_pricing' => array( 'field' => 'package_list_show_pricing', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_list_show_member_address' => array( 'field' => 'package_list_show_member_address', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_list_show_member_short_descr' => array( 'field' => 'package_list_show_member_short_descr', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_list_show_member_second_address' => array( 'field' => 'package_list_show_member_second_address', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_list_show_member_street' => array( 'field' => 'package_list_show_member_street', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_list_show_member_citystatezip' => array( 'field' => 'package_list_show_member_citystatezip', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_list_show_member_country' => array( 'field' => 'package_list_show_member_country', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_list_show_member_region' => array( 'field' => 'package_list_show_member_region', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_list_show_member_phone' => array( 'field' => 'package_list_show_member_phone', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_list_show_member_tollfree' => array( 'field' => 'package_list_show_member_tollfree', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_list_show_member_email' => array( 'field' => 'package_list_show_member_email', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_list_show_member_website_url' => array( 'field' => 'package_list_show_member_website_url', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_list_show_member_website_url_newtarget' => array( 'field' => 'package_list_show_member_website_url_newtarget', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_list_show_package_detail_link' => array( 'field' => 'package_list_show_package_detail_link', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_detail_show_member_link' => array( 'field' => 'package_detail_show_member_link', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_detail_show_member_link_newtarget' => array( 'field' => 'package_detail_show_member_link_newtarget', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_detail_show_offsite_url' => array( 'field' => 'package_detail_show_offsite_url', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_detail_show_offsite_url_newtarget' => array( 'field' => 'package_detail_show_offsite_url_newtarget', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_detail_show_image' => array( 'field' => 'package_detail_show_image', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_detail_show_member_address' => array( 'field' => 'package_detail_show_member_address', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_detail_show_member_street' => array( 'field' => 'package_detail_show_member_street', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_detail_show_member_citystatezip' => array( 'field' => 'package_detail_show_member_citystatezip', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_detail_show_member_country' => array( 'field' => 'package_detail_show_member_country', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_detail_show_member_region' => array( 'field' => 'package_detail_show_member_region', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_detail_show_member_phone' => array( 'field' => 'package_detail_show_member_phone', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_detail_show_member_tollfree' => array( 'field' => 'package_detail_show_member_tollfree', 'type' => 'checkbox', 'default' => true, 'use' => 'a' ), - - // + + // 'package_detail_show_member_email' => array( 'field' => 'package_detail_show_member_email', 'type' => 'checkbox', @@ -427,4 +451,4 @@ class GlmDataPackagingManagement extends GlmDataAbstract } -?> \ No newline at end of file +?> diff --git a/classes/data/dataPackages.php b/classes/data/dataPackages.php index 2f9c83e..fe7a186 100644 --- a/classes/data/dataPackages.php +++ b/classes/data/dataPackages.php @@ -135,6 +135,16 @@ class GlmDataPackages extends GlmDataAbstract 'use' => 'a' ), + // Status + 'status' => array ( + 'field' => 'status', + 'type' => 'list', + 'list' => $this->config['status'], + 'required' => true, + 'default' => $this->config['status_numb']['Pending'], + 'use' => 'a' + ), + // Title 'title' => array ( 'field' => 'title', diff --git a/classes/helper/notification.php b/classes/helper/notification.php new file mode 100644 index 0000000..cc84165 --- /dev/null +++ b/classes/helper/notification.php @@ -0,0 +1,229 @@ + + * @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_package_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 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, $package ) + { + $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; + } + // Double check the email for valid address + $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['package_from_email']; + + // Setup the Smarty Engine + $smarty = new smartyTemplateSupport(); + $viewPath = GLM_MEMBERS_PACKAGING_PLUGIN_PATH . '/views'; + $smarty->template->setTemplateDir( $viewPath ); + + // Add standard parameters + require GLM_MEMBERS_PLUGIN_SETUP_PATH.'/standardTemplateParams.php'; + $viewFile = 'admin/packaging/memberEmail.html'; + + // Setup the template variables + $packageList = GLM_MEMBERS_PACKAGING_PLUGIN_ADMIN_URL ."?page=glm-members-admin-menu-packaging-index"; + $smarty->templateAssign( 'location', 'Member Packages' ); + $smarty->templateAssign( 'name', $package['fieldData']['title'] ); + $smarty->templateAssign( 'pendingPackages', $packageList ); + + // 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 = 'Package Approved'; + $message = $htmlMessage; + $header[] = 'From:' . $notify_from; + $header[] = 'Reply-To:' . $notify_from; + + // Send the email + 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, $package ) + { + $member = $this->getEntry( $memberId ); + $settings = $this->config['settings']; + $notify_to = $settings['package_to_email']; + $notify_from = $settings['package_from_email']; + $notify_message = $settings['package_email_notification']; + + // If they have no $notify_to then return false. + if ( !$notify_to ) { + return false; + } + + // Double check the email for valid address + $emails = explode( ',', $notify_to ); + foreach ( $emails as $email ) { + $validEmail = filter_var( $email, FILTER_VALIDATE_EMAIL ); + if ( !$validEmail ) { + return false; + } + } + + // Setup the Smarty Engine + $smarty = new smartyTemplateSupport(); + $viewPath = GLM_MEMBERS_PACKAGING_PLUGIN_PATH . '/views'; + $smarty->template->setTemplateDir( $viewPath ); + + // Add standard parameters + require GLM_MEMBERS_PLUGIN_SETUP_PATH.'/standardTemplateParams.php'; + $viewFile = 'admin/packaging/ownerEmail.html'; + + // Setup the template variables + $packageList = GLM_MEMBERS_PACKAGING_PLUGIN_ADMIN_URL ."?page=glm-members-admin-menu-packaging-index"; + $smarty->templateAssign( 'notify_message', $notify_message); + $smarty->templateAssign( 'location', 'Member Packages' ); + $smarty->templateAssign( 'member', $member ); + $smarty->templateAssign( 'name', $package['fieldData']['title'] ); + $smarty->templateAssign( 'pendingPackages', $packageList ); + + // 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 = 'Member Package Update'; + $message = $htmlMessage; + $header[] = 'From:' . $notify_from; + $header[] = 'Reply-To:' . $notify_from; + + // Send the email + 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/index.php b/index.php index b368545..753fbce 100644 --- a/index.php +++ b/index.php @@ -38,7 +38,7 @@ * version from this plugin. */ define('GLM_MEMBERS_PACKAGING_PLUGIN_VERSION', '1.2.5'); -define('GLM_MEMBERS_PACKAGING_PLUGIN_DB_VERSION', '1.1.5'); +define('GLM_MEMBERS_PACKAGING_PLUGIN_DB_VERSION', '1.1.6'); // This is the minimum version of the GLM Members DB plugin require for this plugin. define('GLM_MEMBERS_PACKAGING_PLUGIN_MIN_MEMBERS_REQUIRED_VERSION', '2.0.0'); diff --git a/models/admin/member/packaging.php b/models/admin/member/packaging.php index 8621864..ab889ae 100644 --- a/models/admin/member/packaging.php +++ b/models/admin/member/packaging.php @@ -81,19 +81,23 @@ class GlmMembersAdmin_member_packaging extends GlmDataPackages public function modelAction($actionData = false) { - $success = true; - $havePackages = false; - $packages = false; - $havePackage = false; + $success = true; + $havePackages = false; + $packages = false; + $havePackage = false; $packageUpdated = false; $packageDeleted = false; - $packageInfo = false; - $packageError = false; - $haveMember = false; - $memberID = false; - $memberName = false; - $option = false; - $error = false; + $packageInfo = false; + $packageError = false; + $haveMember = false; + $memberID = false; + $memberName = false; + $option = false; + $error = false; + + // Load Notifications from the helper classes + include_once GLM_MEMBERS_PACKAGING_PLUGIN_CLASS_PATH . '/helper/notification.php'; + $notification = new GlmMembersAdmin_package_notification( $this->wpdb, $this->config ); // If there's an action option $option = 'list'; @@ -212,6 +216,15 @@ class GlmMembersAdmin_member_packaging extends GlmDataPackages break; case 'update': + // Get the original Package Status. Before the update. + $old_package_status = $this->wpdb->get_var( + $this->wpdb->prepare( + "SELECT status + FROM " . GLM_MEMBERS_PACKAGING_PLUGIN_DB_PREFIX . "packages + WHERE id = %d", + $packageID + ) + ); // Try to update the package with the submitted data $packageInfo = $this->updateEntry($packageID); @@ -219,6 +232,14 @@ class GlmMembersAdmin_member_packaging extends GlmDataPackages // If it updated successfully if ($packageInfo && $packageInfo['status']) { + // Check if the package is being apprevod + if ( $packageInfo['fieldData']['status']['value'] && $old_package_status && $memberID ) { + $new_status = $packageInfo['fieldData']['status']['value']; + if ( $old_package_status == 20 && $new_status == 10 ) { + $notification->sendMemberNotice( $memberID, $packageInfo ); + } + } + // Update the package title slug $this->updateSlug($packageID); @@ -293,12 +314,12 @@ class GlmMembersAdmin_member_packaging extends GlmDataPackages // If we had a fatal error, redirect to the error page if ($error) { return array( - 'status' => $success, - 'option' => $option, - 'menuItemRedirect' => 'error', - 'modelRedirect' => 'index', - 'view' => 'admin/error/index.html', - 'data' => false + 'status' => $success, + 'option' => $option, + 'menuItemRedirect' => 'error', + 'modelRedirect' => 'index', + 'view' => 'admin/error/index.html', + 'data' => false ); } @@ -315,29 +336,29 @@ class GlmMembersAdmin_member_packaging extends GlmDataPackages // Compile template data $templateData = array( - 'havePackages' => $havePackages, - 'packages' => $packages, - 'havePackage' => $havePackage, + 'havePackages' => $havePackages, + 'packages' => $packages, + 'havePackage' => $havePackage, 'packageUpdated' => $packageUpdated, 'packageDeleted' => $packageDeleted, - 'packageID' => $packageID, - 'packageInfo' => $packageInfo, - 'packageError' => $packageError, - 'haveMember' => $haveMember, - 'memberID' => $memberID, - 'memberName' => $memberName, - 'option' => $option + 'packageID' => $packageID, + 'packageInfo' => $packageInfo, + 'packageError' => $packageError, + 'haveMember' => $haveMember, + 'memberID' => $memberID, + 'memberName' => $memberName, + 'option' => $option ); // Return status, any suggested view, and any data to controller return array( - 'status' => true, - 'modelRedirect' => false, - 'view' => 'admin/member/packaging.html', - 'data' => $templateData + 'status' => true, + 'modelRedirect' => false, + 'view' => 'admin/member/packaging.html', + 'data' => $templateData ); } } -?> \ No newline at end of file +?> diff --git a/models/admin/packaging/index.php b/models/admin/packaging/index.php index 987a475..c05578b 100644 --- a/models/admin/packaging/index.php +++ b/models/admin/packaging/index.php @@ -81,35 +81,39 @@ class GlmMembersAdmin_packaging_index extends GlmDataPackages public function modelAction($actionData = false) { - $lockedToMember = false; - $success = true; - $lockedToMember = false; - $lockedWhereT = 'true'; - $memberWhere = 'true'; - $lockedWhereT = 'true'; - $lockedWhere = 'true'; - $havePackages = false; - $packages = false; - $filterPackageType = false; - $haveFilter = false; - $havePackage = false; - $packageUpdated = false; - $packageInfo = false; - $packageError = false; - $membersList = false; + $lockedToMember = false; + $success = true; + $lockedToMember = false; + $lockedWhereT = 'true'; + $memberWhere = 'true'; + $lockedWhereT = 'true'; + $lockedWhere = 'true'; + $havePackages = false; + $packages = false; + $filterPackageType = false; + $haveFilter = false; + $havePackage = false; + $packageUpdated = false; + $packageInfo = false; + $packageError = false; + $membersList = false; $havePackageMembers = false; - $packageMembers = false; - $option = false; - $error = false; + $packageMembers = false; + $option = false; + $error = false; + + // Load Notifications from the helper classes + include_once GLM_MEMBERS_PACKAGING_PLUGIN_CLASS_PATH . '/helper/notification.php'; + $notification = new GlmMembersAdmin_package_notification( $this->wpdb, $this->config ); // Check if there's a logged in user who is locked to their own entity $lockedToMember = apply_filters('glm_members_locked_to_member_id', false); if ($lockedToMember) { - $memberID = $lockedToMember; + $memberID = $lockedToMember; $lockedToMember = $memberID; - $memberWhere = "T.id = $memberID"; - $lockedWhereT = 'T.ref_type = '.$this->config['ref_type_numb']['Member'].' AND T.ref_dest = '.$memberID; - $lockedWhere = 'ref_type = '.$this->config['ref_type_numb']['Member'].' AND ref_dest = '.$memberID; + $memberWhere = "T.id = $memberID"; + $lockedWhereT = 'T.ref_type = '.$this->config['ref_type_numb']['Member'].' AND T.ref_dest = '.$memberID; + $lockedWhere = 'ref_type = '.$this->config['ref_type_numb']['Member'].' AND ref_dest = '.$memberID; } // If there's an action option @@ -124,10 +128,10 @@ class GlmMembersAdmin_packaging_index extends GlmDataPackages $packageID = $_REQUEST['packageID'] - 0; } - if ($option == 'add' || $option == 'edit') { + if ( in_array( $option, array( 'add', 'edit', 'insert', 'update' ) ) ) { // Get simple member list require_once GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataMembers.php'; - $Members = new GlmDataMembers($this->wpdb, $this->config); + $Members = new GlmDataMembers($this->wpdb, $this->config); $membersList = $Members->getSimpleMembersList($memberWhere); } @@ -161,6 +165,13 @@ class GlmMembersAdmin_packaging_index extends GlmDataPackages // Get the package data again prepared for editing $packageInfo = $this->editEntry($packageID); + // If this is a member edit to package then send notices + if ( $lockedToMember ) { + if ( isset( $memberID ) && $member_id = filter_var( $memberID, FILTER_VALIDATE_INT ) ) { + $notification->sendAdminNotice( $member_id, $packageInfo ); + } + } + // Say what we have $havePackage = true; $packageUpdated = true; @@ -204,6 +215,13 @@ class GlmMembersAdmin_packaging_index extends GlmDataPackages // Get the package data again prepared for editing $packages = $this->editEntry($packageID); + // If this is a member edit to package then send notices + if ( $lockedToMember ) { + if ( isset( $memberID ) && $member_id = filter_var( $memberID, FILTER_VALIDATE_INT ) ) { + $notification->sendAdminNotice( $member_id, $packageInfo ); + } + } + // Tell the template the package was updated $packageUpdated = true; @@ -302,12 +320,12 @@ class GlmMembersAdmin_packaging_index extends GlmDataPackages // If we had a fatal error, redirect to the error page if ($error) { return array( - 'status' => $success, - 'option' => $option, - 'menuItemRedirect' => 'error', - 'modelRedirect' => 'index', - 'view' => 'admin/error/index.html', - 'data' => false + 'status' => $success, + 'option' => $option, + 'menuItemRedirect' => 'error', + 'modelRedirect' => 'index', + 'view' => 'admin/error/index.html', + 'data' => false ); } @@ -317,28 +335,28 @@ class GlmMembersAdmin_packaging_index extends GlmDataPackages // Compile template data $templateData = array( - 'lockedToMember' => $lockedToMember, - 'havePackages' => $havePackages, - 'packages' => $packages, - 'filterPackageType' => $filterPackageType, - 'haveFilter' => $haveFilter, - 'havePackage' => $havePackage, - 'packageUpdated' => $packageUpdated, - 'packageID' => $packageID, - 'packageInfo' => $packageInfo, - 'packageError' => $packageError, + 'lockedToMember' => $lockedToMember, + 'havePackages' => $havePackages, + 'packages' => $packages, + 'filterPackageType' => $filterPackageType, + 'haveFilter' => $haveFilter, + 'havePackage' => $havePackage, + 'packageUpdated' => $packageUpdated, + 'packageID' => $packageID, + 'packageInfo' => $packageInfo, + 'packageError' => $packageError, 'havePackageMembers' => $havePackageMembers, - 'packageMembers' => $packageMembers, - 'membersList' => $membersList, - 'option' => $option + 'packageMembers' => $packageMembers, + 'membersList' => $membersList, + 'option' => $option ); // Return status, any suggested view, and any data to controller return array( - 'status' => true, - 'modelRedirect' => false, - 'view' => 'admin/packaging/index.html', - 'data' => $templateData + 'status' => true, + 'modelRedirect' => false, + 'view' => 'admin/packaging/index.html', + 'data' => $templateData ); } diff --git a/models/front/packaging/list.php b/models/front/packaging/list.php index e3c196f..3169a13 100644 --- a/models/front/packaging/list.php +++ b/models/front/packaging/list.php @@ -105,7 +105,7 @@ class GlmMembersFront_packaging_list extends GlmDataPackages $noMemberWithPackage = false; // Say whether to skip getting member data with package results // Only select packages that are current - $where = "CURDATE() BETWEEN T.start_date AND T.end_date"; + $where = "CURDATE() BETWEEN T.start_date AND T.end_date AND T.status = 10"; /* * Select packages by specified type diff --git a/setup/databaseScripts/create_database_V1.1.5.sql b/setup/databaseScripts/create_database_V1.1.6.sql similarity index 90% rename from setup/databaseScripts/create_database_V1.1.5.sql rename to setup/databaseScripts/create_database_V1.1.6.sql index d5fecf6..cfa2ff4 100644 --- a/setup/databaseScripts/create_database_V1.1.5.sql +++ b/setup/databaseScripts/create_database_V1.1.6.sql @@ -1,15 +1,16 @@ --- Gaslight Media Members Database - Packaging +-- Gaslight Media Members Database - Packaging -- File Created: 12/02/15 15:27:15 --- Database Version: 1.1.4 +-- Database Version: 1.1.6 -- Database Creation Script --- +-- -- To permit each query below to be executed separately, -- all queries must be separated by a line with four dashes --- Packages +-- Packages CREATE TABLE {prefix}packages ( id INT NOT NULL AUTO_INCREMENT, active BOOLEAN NULL, -- Package is active + status INT NULL, -- Status for this package, see config['status'] title TINYTEXT NULL, -- Title of package package_slug TINYTEXT NULL, -- Package name slug for canonical URLs (lowercase, "-" for spaces, no punctuation) offsite_url TINYTEXT NULL, -- Url for the package list on the member's site @@ -23,7 +24,7 @@ CREATE TABLE {prefix}packages ( pricing TINYTEXT NULL, -- Pricing, descriptive ref_type INT NULL, -- Type of entity this package is associated with ref_dest INT NULL, -- Pointer to the specific entity - PRIMARY KEY (id), + PRIMARY KEY (id), INDEX(ref_type), INDEX(ref_dest), INDEX(start_date), @@ -59,6 +60,9 @@ CREATE TABLE {prefix}management ( canonical_package_page TINYTEXT NULL, -- Canonical page slug for package detail package_link_text_member_list TINYTEXT NULL, package_link_text_member_detail TINYTEXT NULL, + package_to_email TINYTEXT NULL, -- Email address of the recipient + package_from_email TINYTEXT NULL, -- Email address of the sender + package_email_notification TEXT NULL, -- Email notification message package_list_show_image BOOLEAN DEFAULT '1', package_list_show_short_descr BOOLEAN DEFAULT '1', package_list_show_expire_date BOOLEAN DEFAULT '1', diff --git a/setup/databaseScripts/dbVersions.php b/setup/databaseScripts/dbVersions.php index 4e1e7e8..bf42a27 100644 --- a/setup/databaseScripts/dbVersions.php +++ b/setup/databaseScripts/dbVersions.php @@ -14,12 +14,13 @@ */ $glmMembersPackagingDbVersions = array( - '0.0.2' => array('version' => '0.0.2', 'tables' => 2), - '1.1.0' => array('version' => '1.1.0', 'tables' => 3), - '1.1.1' => array('version' => '1.1.1', 'tables' => 3), - '1.1.2' => array('version' => '1.1.2', 'tables' => 3), - '1.1.3' => array('version' => '1.1.3', 'tables' => 3), - '1.1.4' => array('version' => '1.1.4', 'tables' => 3), - '1.1.5' => array('version' => '1.1.5', 'tables' => 3) + '0.0.2' => array('version' => '0.0.2', 'tables' => 2), + '1.1.0' => array('version' => '1.1.0', 'tables' => 3), + '1.1.1' => array('version' => '1.1.1', 'tables' => 3), + '1.1.2' => array('version' => '1.1.2', 'tables' => 3), + '1.1.3' => array('version' => '1.1.3', 'tables' => 3), + '1.1.4' => array('version' => '1.1.4', 'tables' => 3), + '1.1.5' => array('version' => '1.1.5', 'tables' => 3), + '1.1.6' => array('version' => '1.1.6', 'tables' => 3), ); diff --git a/setup/databaseScripts/update_database_V1.1.6.sql b/setup/databaseScripts/update_database_V1.1.6.sql new file mode 100644 index 0000000..b6f489e --- /dev/null +++ b/setup/databaseScripts/update_database_V1.1.6.sql @@ -0,0 +1,35 @@ +-- Gaslight Media Members Database +-- File Created: 2/09/2017 +-- Database Version: 1.1.6 +-- Database Update From Previous Version Script +-- +-- To permit each query below to be executed separately, +-- all queries must be separated by a line with four dashses + +-- Packages +ALTER TABLE {prefix}packages ADD COLUMN status INT DEFAULT NULL; + +---- + +-- To Email +ALTER TABLE {prefix}management ADD COLUMN package_to_email TINYTEXT DEFAULT NULL; + +---- + +-- From Email +ALTER TABLE {prefix}management ADD COLUMN package_from_email TINYTEXT DEFAULT NULL; + +---- + +-- Email Notification +ALTER TABLE {prefix}management ADD COLUMN package_email_notification TINYTEXT DEFAULT NULL; + +---- + +-- Update new status field to active where active is set to true +UPDATE {prefix}packages SET status = 10 where active = true; + +---- + +-- Update new status field to pending where active is not set to true +UPDATE {prefix}packages SET status = i20 where active <> true; diff --git a/views/admin/management/packaging.html b/views/admin/management/packaging.html index c75458e..df72fa4 100644 --- a/views/admin/management/packaging.html +++ b/views/admin/management/packaging.html @@ -37,6 +37,26 @@ {if $packagingSettings.fieldFail.package_link_text_member_detail}

{$packagingSettings.fieldFail.package_link_text_member_detail}

{/if} +

E-Mail Notification Settings

+ + Sender Email Address + + {if $packagingSettings.fieldFail.package_from_email}

{$packagingSettings.fieldFail.package_from_email}

{/if} + + + + Recipient Email Address (comma separated) + + {if $packagingSettings.fieldFail.package_to_email}

{$packagingSettings.fieldFail.package_to_email}

{/if} + + + + Email Notification + + + {if $packagingSettings.fieldFail.package_email_notification}

{$packagingSettings.fieldFail.package_email_notification}

{/if} + + diff --git a/views/admin/member/packaging.html b/views/admin/member/packaging.html index 3bf4333..fe0fb43 100644 --- a/views/admin/member/packaging.html +++ b/views/admin/member/packaging.html @@ -1,3 +1,6 @@ +{* front/admin/member/packaging.html + When the members manager is editing member packages. +*} {include file='admin/member/header.html'} {if $packageDeleted} @@ -61,9 +64,14 @@ Name for URLs:{$packageInfo.fieldData.package_slug}

{/if} - Active: + Status: - + + {if $packageInfo.fieldFail.status}

{$packageInfo.fieldFail.status}

{/if} diff --git a/views/admin/packaging/index.html b/views/admin/packaging/index.html index b826c47..aeced53 100644 --- a/views/admin/packaging/index.html +++ b/views/admin/packaging/index.html @@ -1,3 +1,7 @@ +{* front/admin/packaging/index.html + When the member is editing member packages. + It is also being used to display the list of packages for members manager. +*} {include file='admin/packaging/header.html'} {if $packageUpdated}

Package Updated

{/if} @@ -7,7 +11,6 @@ {if apply_filters('glm_members_permit_admin_members_packaging_edit_package', true)} - {if $option == 'edit'} {if $lockedToMember}

Edit Package

@@ -48,6 +51,9 @@ {if $lockedToMember} + {if $membersList && $membersList.1.access_short.value != 40} + + {/if} {else} @@ -67,12 +73,20 @@ {if $packageInfo.fieldFail.title}

{$packageInfo.fieldFail.title}

{/if} + {if $membersList && $membersList.1.access_short.value != 40} + {else} - Active: + Status: - + + {if $packageInfo.fieldFail.status}

{$packageInfo.fieldFail.status}

{/if} + {/if} Description: diff --git a/views/admin/packaging/memberEmail.html b/views/admin/packaging/memberEmail.html new file mode 100644 index 0000000..09efde9 --- /dev/null +++ b/views/admin/packaging/memberEmail.html @@ -0,0 +1,25 @@ + + + + + + +

Package Approval Notification

+ +
+

Your package has been approved!

+
+ + + + + + +
Package Name:{$name}
+ +
+

A Package has been approved.

+

To view it, please go to the packages page in your admin.

+
+ + diff --git a/views/admin/packaging/ownerEmail.html b/views/admin/packaging/ownerEmail.html new file mode 100644 index 0000000..e434292 --- /dev/null +++ b/views/admin/packaging/ownerEmail.html @@ -0,0 +1,31 @@ + + + + + + +

Package Submission Notification

+ + {if $notify_message} +
+

{$notify_message}

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

A Package has been added/updated to your Website from your "{$location}" page.

+

To approve it, please go to the packages page in your admin.

+
+ + -- 2.17.1