Start work for pending packages
authorSteve Sutton <steve@gaslightmedia.com>
Thu, 9 Feb 2017 18:54:52 +0000 (13:54 -0500)
committerSteve Sutton <steve@gaslightmedia.com>
Mon, 13 Feb 2017 19:48:39 +0000 (14:48 -0500)
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.

16 files changed:
classes/data/dataManagement.php
classes/data/dataPackages.php
classes/helper/notification.php [new file with mode: 0644]
index.php
models/admin/member/packaging.php
models/admin/packaging/index.php
models/front/packaging/list.php
setup/databaseScripts/create_database_V1.1.5.sql [deleted file]
setup/databaseScripts/create_database_V1.1.6.sql [new file with mode: 0644]
setup/databaseScripts/dbVersions.php
setup/databaseScripts/update_database_V1.1.6.sql [new file with mode: 0644]
views/admin/management/packaging.html
views/admin/member/packaging.html
views/admin/packaging/index.html
views/admin/packaging/memberEmail.html [new file with mode: 0644]
views/admin/packaging/ownerEmail.html [new file with mode: 0644]

index 92f3b65..e7c0c0b 100644 (file)
@@ -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
+?>
index 2f9c83e..fe7a186 100644 (file)
@@ -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 (file)
index 0000000..cc84165
--- /dev/null
@@ -0,0 +1,229 @@
+<?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";
+    }
+}
index b368545..753fbce 100644 (file)
--- 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');
index 8621864..ab889ae 100644 (file)
@@ -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
+?>
index 987a475..c05578b 100644 (file)
@@ -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
         );
 
     }
index e3c196f..3169a13 100644 (file)
@@ -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.5.sql
deleted file mode 100644 (file)
index d5fecf6..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
--- 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' )
-;
-
diff --git a/setup/databaseScripts/create_database_V1.1.6.sql b/setup/databaseScripts/create_database_V1.1.6.sql
new file mode 100644 (file)
index 0000000..cfa2ff4
--- /dev/null
@@ -0,0 +1,112 @@
+-- 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' )
+;
+
index 4e1e7e8..bf42a27 100644 (file)
  */
 
 $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 (file)
index 0000000..b6f489e
--- /dev/null
@@ -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;
index c75458e..df72fa4 100644 (file)
                   {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>
 
index 3bf4333..fe0fb43 100644 (file)
@@ -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}
                 <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>
 
index b826c47..aeced53 100644 (file)
@@ -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}<h2 class="glm-notice glm-flash-updated">Package Updated</h2>{/if}
@@ -7,7 +11,6 @@
 
   {if apply_filters('glm_members_permit_admin_members_packaging_edit_package', true)}
 
-
       {if $option == 'edit'}
         {if $lockedToMember}
             <h2>Edit Package</h2>
@@ -48,6 +51,9 @@
       {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}>
diff --git a/views/admin/packaging/memberEmail.html b/views/admin/packaging/memberEmail.html
new file mode 100644 (file)
index 0000000..09efde9
--- /dev/null
@@ -0,0 +1,25 @@
+<!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>
diff --git a/views/admin/packaging/ownerEmail.html b/views/admin/packaging/ownerEmail.html
new file mode 100644 (file)
index 0000000..e434292
--- /dev/null
@@ -0,0 +1,31 @@
+<!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 &quot;{$location}&quot; 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>