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.
'required' => true,
'use' => 'a'
),
-
+
// Member List Link to Packages on Member Detail
'package_link_text_member_list' => array (
'field' => 'package_link_text_member_list',
'required' => false,
'use' => 'a'
),
-
+
// Member Detail Link to Packages on Member Detail
'package_link_text_member_detail' => array (
'field' => 'package_link_text_member_detail',
'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',
}
-?>
\ No newline at end of file
+?>
'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',
--- /dev/null
+<?php
+/**
+ * Gaslight Media Members Database
+ * Admin Event Member Notification
+ *
+ * PHP version 5.5
+ *
+ * @category glmWordPressPlugin
+ * @package glmMembersDatabase
+ * @author Steve Sutton <steve@gaslightmedia.com>
+ * @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";
+ }
+}
* 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');
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';
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);
// 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);
// 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
);
}
// 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
+?>
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
$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);
}
// 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;
// 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;
// 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
);
}
// 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
);
}
$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
+++ /dev/null
--- Gaslight Media Members Database - Packaging
--- File Created: 12/02/15 15:27:15
--- Database Version: 1.1.4
--- Database Creation Script
---
--- To permit each query below to be executed separately,
--- all queries must be separated by a line with four dashes
-
--- Packages
-CREATE TABLE {prefix}packages (
- id INT NOT NULL AUTO_INCREMENT,
- active BOOLEAN NULL, -- Package is active
- 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
- descr TEXT NULL, -- Description of package
- short_descr TINYTEXT NULL, -- Short description of package
- image TINYTEXT NULL, -- Package image
- start_date TIMESTAMP NULL, -- Date display of this package starts
- end_date TIMESTAMP NULL, -- Date display of this package ends (last date of display)
- expire_date TIMESTAMP NULL, -- Date package expires (first date it's expired)
- position INT NULL, -- Display order position
- 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),
- INDEX(ref_type),
- INDEX(ref_dest),
- INDEX(start_date),
- INDEX(end_date),
- INDEX(expire_date)
-);
-
-----
-
--- Package Elements - Items in a package
-CREATE TABLE {prefix}package_elements (
- id INT NOT NULL AUTO_INCREMENT,
- package INT NULL, -- Pointer to the package
- active BOOLEAN NULL, -- Package is active
- title TINYTEXT NULL, -- Title of element
- descr TEXT NULL, -- Description for this entity's participation in the package
- short_descr TEXT NULL, -- Short description for this entity's participation in the package
- image TINYTEXT NULL, -- Element image
- position INT NULL, -- Display order position
- ref_type INT NULL, -- Type of entity this element is association with
- ref_dest INT NULL, -- Pointer to the specific entity
- PRIMARY KEY (id),
- INDEX(package),
- INDEX(ref_type),
- INDEX(ref_dest)
-);
-
-----
-
--- Package Management Settings
-CREATE TABLE {prefix}management (
- id INT NOT NULL AUTO_INCREMENT,
- 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_list_show_image BOOLEAN DEFAULT '1',
- package_list_show_short_descr BOOLEAN DEFAULT '1',
- package_list_show_expire_date BOOLEAN DEFAULT '1',
- package_list_show_pricing BOOLEAN DEFAULT '1',
- package_list_show_offsite_url BOOLEAN DEFAULT '1',
- package_list_show_offsite_url_newtarget BOOLEAN DEFAULT '1',
- package_list_show_member_image BOOLEAN DEFAULT '1',
- package_list_show_member_short_descr BOOLEAN DEFAULT '1',
- package_list_show_member_link BOOLEAN DEFAULT '1',
- package_list_show_member_link_newtarget BOOLEAN DEFAULT '1',
- package_list_show_member_address BOOLEAN DEFAULT '1',
- package_list_show_member_second_address BOOLEAN DEFAULT '1',
- package_list_show_member_street BOOLEAN DEFAULT '1',
- package_list_show_member_citystatezip BOOLEAN DEFAULT '1',
- package_list_show_member_country BOOLEAN DEFAULT '1',
- package_list_show_member_region BOOLEAN DEFAULT '1',
- package_list_show_member_phone BOOLEAN DEFAULT '1',
- package_list_show_member_tollfree BOOLEAN DEFAULT '1',
- package_list_show_member_email BOOLEAN DEFAULT '1',
- package_list_show_member_website_url BOOLEAN DEFAULT '1',
- package_list_show_member_website_url_newtarget BOOLEAN DEFAULT '1',
- package_list_show_package_detail_link BOOLEAN DEFAULT '1',
- package_detail_show_image BOOLEAN DEFAULT '1',
- package_detail_show_offsite_url BOOLEAN DEFAULT '1',
- package_detail_show_offsite_url_newtarget BOOLEAN DEFAULT '1',
- package_detail_show_member_link BOOLEAN DEFAULT '1',
- package_detail_show_member_link_newtarget BOOLEAN DEFAULT '1',
- package_detail_show_member_address BOOLEAN DEFAULT '1',
- package_detail_show_member_street BOOLEAN DEFAULT '1',
- package_detail_show_member_citystatezip BOOLEAN DEFAULT '1',
- package_detail_show_member_country BOOLEAN DEFAULT '1',
- package_detail_show_member_region BOOLEAN DEFAULT '1',
- package_detail_show_member_phone BOOLEAN DEFAULT '1',
- package_detail_show_member_tollfree BOOLEAN DEFAULT '1',
- package_detail_show_member_email BOOLEAN DEFAULT '1',
- PRIMARY KEY (id)
-);
-
-----
-
--- Set default package management entry
-INSERT INTO {prefix}management
- ( id, canonical_package_page )
- VALUES
- ( 1, 'package-detail' )
-;
-
--- /dev/null
+-- Gaslight Media Members Database - Packaging
+-- File Created: 12/02/15 15:27:15
+-- 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
+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
+ descr TEXT NULL, -- Description of package
+ short_descr TINYTEXT NULL, -- Short description of package
+ image TINYTEXT NULL, -- Package image
+ start_date TIMESTAMP NULL, -- Date display of this package starts
+ end_date TIMESTAMP NULL, -- Date display of this package ends (last date of display)
+ expire_date TIMESTAMP NULL, -- Date package expires (first date it's expired)
+ position INT NULL, -- Display order position
+ 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),
+ INDEX(ref_type),
+ INDEX(ref_dest),
+ INDEX(start_date),
+ INDEX(end_date),
+ INDEX(expire_date)
+);
+
+----
+
+-- Package Elements - Items in a package
+CREATE TABLE {prefix}package_elements (
+ id INT NOT NULL AUTO_INCREMENT,
+ package INT NULL, -- Pointer to the package
+ active BOOLEAN NULL, -- Package is active
+ title TINYTEXT NULL, -- Title of element
+ descr TEXT NULL, -- Description for this entity's participation in the package
+ short_descr TEXT NULL, -- Short description for this entity's participation in the package
+ image TINYTEXT NULL, -- Element image
+ position INT NULL, -- Display order position
+ ref_type INT NULL, -- Type of entity this element is association with
+ ref_dest INT NULL, -- Pointer to the specific entity
+ PRIMARY KEY (id),
+ INDEX(package),
+ INDEX(ref_type),
+ INDEX(ref_dest)
+);
+
+----
+
+-- Package Management Settings
+CREATE TABLE {prefix}management (
+ id INT NOT NULL AUTO_INCREMENT,
+ 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',
+ package_list_show_pricing BOOLEAN DEFAULT '1',
+ package_list_show_offsite_url BOOLEAN DEFAULT '1',
+ package_list_show_offsite_url_newtarget BOOLEAN DEFAULT '1',
+ package_list_show_member_image BOOLEAN DEFAULT '1',
+ package_list_show_member_short_descr BOOLEAN DEFAULT '1',
+ package_list_show_member_link BOOLEAN DEFAULT '1',
+ package_list_show_member_link_newtarget BOOLEAN DEFAULT '1',
+ package_list_show_member_address BOOLEAN DEFAULT '1',
+ package_list_show_member_second_address BOOLEAN DEFAULT '1',
+ package_list_show_member_street BOOLEAN DEFAULT '1',
+ package_list_show_member_citystatezip BOOLEAN DEFAULT '1',
+ package_list_show_member_country BOOLEAN DEFAULT '1',
+ package_list_show_member_region BOOLEAN DEFAULT '1',
+ package_list_show_member_phone BOOLEAN DEFAULT '1',
+ package_list_show_member_tollfree BOOLEAN DEFAULT '1',
+ package_list_show_member_email BOOLEAN DEFAULT '1',
+ package_list_show_member_website_url BOOLEAN DEFAULT '1',
+ package_list_show_member_website_url_newtarget BOOLEAN DEFAULT '1',
+ package_list_show_package_detail_link BOOLEAN DEFAULT '1',
+ package_detail_show_image BOOLEAN DEFAULT '1',
+ package_detail_show_offsite_url BOOLEAN DEFAULT '1',
+ package_detail_show_offsite_url_newtarget BOOLEAN DEFAULT '1',
+ package_detail_show_member_link BOOLEAN DEFAULT '1',
+ package_detail_show_member_link_newtarget BOOLEAN DEFAULT '1',
+ package_detail_show_member_address BOOLEAN DEFAULT '1',
+ package_detail_show_member_street BOOLEAN DEFAULT '1',
+ package_detail_show_member_citystatezip BOOLEAN DEFAULT '1',
+ package_detail_show_member_country BOOLEAN DEFAULT '1',
+ package_detail_show_member_region BOOLEAN DEFAULT '1',
+ package_detail_show_member_phone BOOLEAN DEFAULT '1',
+ package_detail_show_member_tollfree BOOLEAN DEFAULT '1',
+ package_detail_show_member_email BOOLEAN DEFAULT '1',
+ PRIMARY KEY (id)
+);
+
+----
+
+-- Set default package management entry
+INSERT INTO {prefix}management
+ ( id, canonical_package_page )
+ VALUES
+ ( 1, 'package-detail' )
+;
+
*/
$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),
);
--- /dev/null
+-- 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;
{if $packagingSettings.fieldFail.package_link_text_member_detail}<p>{$packagingSettings.fieldFail.package_link_text_member_detail}</p>{/if}
</td>
</tr>
+ <tr> <td> <h1> E-Mail Notification Settings </h1> </td> </tr>
+ <tr>
+ <th {if $packagingSettings.fieldRequired.package_from_email}class="glm-required"{/if}> Sender Email Address </th>
+ <td><input class="glm-form-text-input-medium" name="package_from_email" id="fromEmailAddress" type="text" value="{$packagingSettings.fieldData.package_from_email}">
+ {if $packagingSettings.fieldFail.package_from_email}<p>{$packagingSettings.fieldFail.package_from_email}</p>{/if}
+ </td>
+ </tr>
+ <tr>
+ <th {if $packagingSettings.fieldRequired.package_to_email}class="glm-required"{/if}> Recipient Email Address (comma separated) </th>
+ <td><input class="glm-form-text-input-medium" name="package_to_email" id="toEmailAddress" type="text" value="{$packagingSettings.fieldData.package_to_email}">
+ {if $packagingSettings.fieldFail.package_to_email}<p>{$packagingSettings.fieldFail.package_to_email}</p>{/if}
+ </td>
+ </tr>
+ <tr>
+ <th {if $packagingSettings.fieldRequired.package_email_notification}class="glm-required"{/if}>Email Notification</th>
+ <td>
+ <textarea rows="3" cols="90" name="package_email_notification" id="emailNotification">{$packagingSettings.fieldData.package_email_notification}</textarea>
+ {if $packagingSettings.fieldFail.package_email_notification}<p>{$packagingSettings.fieldFail.package_email_notification}</p>{/if}
+ </td>
+ </tr>
<tr><td><input class="updateSettings button" type="submit" value="Update Settings" /></td></tr>
</table>
+{* front/admin/member/packaging.html
+ When the members manager is editing member packages.
+*}
{include file='admin/member/header.html'}
{if $packageDeleted}
<tr><th>Name for URLs:</th><td>{$packageInfo.fieldData.package_slug}</p></td></tr>
{/if}
<tr>
- <th>Active:</th>
+ <th>Status:</th>
<td>
- <input type="checkbox" name="active" {if $packageInfo.fieldData.active.value} checked{/if}>
+ <select name="status">
+ {foreach $packageInfo.fieldData.status.list as $v}
+ <option value="{$v.value}"{if $v.default} selected{/if}>{$v.name}</option>
+ {/foreach}
+ </select>
+ {if $packageInfo.fieldFail.status}<p>{$packageInfo.fieldFail.status}</p>{/if}
</td>
</tr>
+{* 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}<h2 class="glm-notice glm-flash-updated">Package Updated</h2>{/if}
{if apply_filters('glm_members_permit_admin_members_packaging_edit_package', true)}
-
{if $option == 'edit'}
{if $lockedToMember}
<h2>Edit Package</h2>
{if $lockedToMember}
<input type="hidden" name="ref_type" value="10">
<input type="hidden" name="ref_dest" value="{$lockedToMember}">
+ {if $membersList && $membersList.1.access_short.value != 40}
+ <input type="hidden" name="status" value="20">
+ {/if}
{else}
<input type="hidden" name="ref_type" value="0">
<input type="hidden" name="ref_dest" value="0">
{if $packageInfo.fieldFail.title}<p>{$packageInfo.fieldFail.title}</p>{/if}
</td>
</tr>
+ {if $membersList && $membersList.1.access_short.value != 40}
+ {else}
<tr>
- <th>Active:</th>
+ <th>Status:</th>
<td>
- <input type="checkbox" name="active" {if $packageInfo.fieldData.active.value} checked{/if}>
+ <select name="status">
+ {foreach $packageInfo.fieldData.status.list as $v}
+ <option value="{$v.value}"{if $v.default} selected{/if}>{$v.name}</option>
+ {/foreach}
+ </select>
+ {if $packageInfo.fieldFail.status}<p>{$packageInfo.fieldFail.status}</p>{/if}
</td>
</tr>
+ {/if}
<tr>
<th {if $packageInfo.fieldRequired.descr}class="glm-required"{/if}>Description:</th>
<td {if $packageInfo.fieldFail.descr}class="glm-form-bad-input"{/if}>
--- /dev/null
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="content-type" content="text/html;charset=utf-8">
+ </head>
+ <body>
+ <h1 id="title"> Package Approval Notification</h1>
+
+ <div style="width: 500px">
+ <p> Your package has been approved! </p>
+ </div>
+
+ <table cellspacing="0" cellpadding="0" width="500" style="background: lightgrey;border:1px solid #ccc;border-collapse:collapse;">
+ <tr>
+ <td style="font-weight:bold;width:200px;padding:5px;border:1px solid #ccc;">Package Name:</td>
+ <td style="width:200px;padding:5px;border:1px solid #ccc;">{$name}</td>
+ </tr>
+ </table>
+
+ <div id="emailFooter">
+ <p style="margin-bottom: 0px;">A Package has been approved.</p>
+ <p style="margin-top: 0px;">To view it, please go to the <a style="color: rgb(5, 104, 179);" href="{$pendingPackages}"> packages </a> page in your admin.</p>
+ </div>
+ </body>
+</html>
--- /dev/null
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="content-type" content="text/html;charset=utf-8">
+ </head>
+ <body>
+ <h1 id="title"> Package Submission Notification</h1>
+
+ {if $notify_message}
+ <div style="width: 500px">
+ <p> {$notify_message} </p>
+ </div>
+ {/if}
+
+ <table cellspacing="0" cellpadding="0" width="500" style="background: lightgrey;border:1px solid #ccc;border-collapse:collapse;">
+ <tr>
+ <td style="font-weight:bold;width:200px;padding:5px;border:1px solid #ccc;">Member Name:</td>
+ <td style="width:200px;padding:5px;border:1px solid #ccc;">{$member.name}</td>
+ </tr>
+ <tr>
+ <td style="font-weight:bold;width:200px;padding:5px;border:1px solid #ccc;">Package Name:</td>
+ <td style="width:200px;padding:5px;border:1px solid #ccc;">{$name}</td>
+ </tr>
+ </table>
+
+ <div id="emailFooter">
+ <p style="margin-bottom: 0px;">A Package has been added/updated to your Website from your "{$location}" page.</p>
+ <p style="margin-top: 0px;">To approve it, please go to the <a style="color: rgb(5, 104, 179);" href="{$pendingPackages}"> packages </a> page in your admin.</p>
+ </div>
+ </body>
+</html>