first sources master
authorSteve Sutton <steve@gaslightmedia.com>
Wed, 8 Feb 2017 15:47:33 +0000 (10:47 -0500)
committerSteve Sutton <steve@gaslightmedia.com>
Wed, 8 Feb 2017 15:47:33 +0000 (10:47 -0500)
32 files changed:
activate.php [new file with mode: 0644]
assets/readme.txt [new file with mode: 0644]
classes/data/dataManagement.php [new file with mode: 0644]
classes/readme.txt [new file with mode: 0644]
config/plugin.ini [new file with mode: 0644]
css/readme.txt [new file with mode: 0644]
deactivate.php [new file with mode: 0644]
defines.php [new file with mode: 0644]
index.php [new file with mode: 0644]
js/readme.txt [new file with mode: 0644]
lib/readme.txt [new file with mode: 0644]
misc/documentation/AddAnAdminTab.txt [new file with mode: 0644]
misc/documentation/CreateNewAddOn.txt [new file with mode: 0644]
models/admin/management/streamsend.php [new file with mode: 0644]
models/admin/readme.txt [new file with mode: 0644]
models/admin/streamsend/index.php [new file with mode: 0644]
models/front/readme.txt [new file with mode: 0644]
readme.txt [new file with mode: 0644]
setup/adminHooks.php [new file with mode: 0644]
setup/adminMenus.php [new file with mode: 0644]
setup/adminTabs.php [new file with mode: 0644]
setup/databaseScripts/create_database_V0.0.1.sql [new file with mode: 0644]
setup/frontHooks.php [new file with mode: 0644]
setup/hooksHelp.html [new file with mode: 0644]
setup/permissions.php [new file with mode: 0644]
setup/rolesAndCapabilities.php [new file with mode: 0644]
setup/shortcodes.php [new file with mode: 0644]
setup/validActions.php [new file with mode: 0644]
uninstall.php [new file with mode: 0644]
views/admin/management/streamsend.html [new file with mode: 0644]
views/admin/readme.txt [new file with mode: 0644]
views/front/readme.txt [new file with mode: 0644]

diff --git a/activate.php b/activate.php
new file mode 100644 (file)
index 0000000..8152878
--- /dev/null
@@ -0,0 +1,153 @@
+<?php
+
+/**
+ * GLM Members Database Communicator
+ * Activate Plugin Tasks
+ *
+ * PHP version 5.5
+ *
+ * @category glmWordPressPlugin
+ * @package  glmMembersCommunicator
+ * @author   Chuck Scott <cscott@gaslightmedia.com>
+ * @license  http://www.gaslightmedia.com Gaslightmedia
+ * @release  activate.php,v 1.0 2014/10/31 19:31:47 cscott Exp $
+ * @link     http://dev.gaslightmedia.com/
+ */
+
+// Check that we're being called by WordPress.
+if (!defined('ABSPATH')) {
+    die("Please do not call this code directly!");
+}
+
+/*
+ * This class performs all necessary additional work when this
+ * plugin is activated.
+ *
+ * Currently the only actions are to add role capability to display and modify
+ * prototypes.
+ */
+class glmMembersCommunicatorPluginActivate
+{
+
+    /**
+     * WordPress Database Object
+     *
+     * @var $wpdb
+     * @access public
+     */
+    public $wpdb;
+    /**
+     * Plugin Configuration Data
+     *
+     * @var $config
+     * @access public
+     */
+    public $config;
+
+    /*
+     * Constructor
+     *
+     * Note that the $noDatabaseCheck is used to access the database versions
+     * without triggering a database check.
+     *
+     * Performs all the work for this model
+     */
+    public function __construct ($wpdb, $config)
+    {
+
+        // Make sure the current user has this capability
+        if (! current_user_can('activate_plugins')) {
+            $this->addNotice("Interesting, you don't have permission to activate plugins.");
+            die();
+        }
+
+        // Save WordPress Database object
+        $this->wpdb = $wpdb;
+
+        // Save plugin configuration object
+        $this->config = $config;
+
+        // Set current plugin version
+        update_option('glmMembersCommunicatorPluginVersion', GLM_MEMBERS_COMMUNICATOR_PLUGIN_VERSION);
+
+        // Set Roles and Capabilities for this plugin
+        require_once GLM_MEMBERS_COMMUNICATOR_PLUGIN_SETUP_PATH.'/rolesAndCapabilities.php';
+    }
+
+    /*
+     * Add a capability to all current roles
+     *
+     * @param string $capability Name of capability to add
+     * @param array $default Whether capability should be on by default
+     *           array(
+     *               'author' => false,
+     *               'contributor' => false,
+     *               'editor' => false,
+     *               'subscriber' => false
+     *           )
+     *
+     * @return void
+     * @access private
+     */
+    private function addRoleCapability($capability, $default)
+    {
+        // Get list of role objects
+        $roleObjects = $GLOBALS['wp_roles']->role_objects;
+
+        // Get list of roles we can edit
+        $roles = get_editable_roles();
+
+        // For each role object
+        foreach ($roleObjects as $key => $role) {
+
+            // Check if the role exists in list of editable roles and
+            // the capability does not exist
+            if (isset($roles[$key]) && ! isset($role->capabilities[$capability])) {
+
+                // Check if a default value has been specified in the $default array
+                $enabled = false;
+                if (isset($default[$role->name])) {
+
+                    // It has, so use that
+                    $enabled = $default[$role->name];
+
+                }
+
+                // Add the role
+                $role->add_cap($capability, $enabled);
+
+            }
+        }
+    }
+
+
+    /*
+     * Delete a capability from all current roles
+     *
+     * @param string $capability Name of capability to add
+     *
+     * @return void
+     * @access private
+     */
+    private function deleteRoleCapability($capability)
+    {
+        // Get list of role objects
+        $roleObjects = $GLOBALS['wp_roles']->role_objects;
+
+        // Get list of roles we can edit
+        $roles = get_editable_roles();
+
+        // For each role object
+        foreach ($roleObjects as $key => $role) {
+
+            if ( isset($role->capabilities[$capability])) {
+                $role->remove_cap($capability);
+            }
+
+        }
+
+    }
+
+
+
+}
diff --git a/assets/readme.txt b/assets/readme.txt
new file mode 100644 (file)
index 0000000..34a6135
--- /dev/null
@@ -0,0 +1,2 @@
+Assets folder for things like images and other 
+files that might need to be read directly.
\ No newline at end of file
diff --git a/classes/data/dataManagement.php b/classes/data/dataManagement.php
new file mode 100644 (file)
index 0000000..ff4b2cf
--- /dev/null
@@ -0,0 +1,150 @@
+<?php
+/**
+ * GLM Member-DB WordPress Add-On Plugin
+ * Data Class Management
+ *
+ * PHP version 5.3
+ *
+ * @category Data
+ * @package  GLM Member-DB
+ * @author   Chuck Scott <cscott@gaslightmedia.com>
+ * @license  http://www.gaslightmedia.com Gaslightmedia
+ * @release  SVN: $Id: dataStreamsends.php,v 1.0 2011/01/25 19:31:47 cscott Exp $
+ */
+
+/**
+ * GlmDataStreamsend class
+ *
+ * PHP version 5
+ *
+ * @category Data
+ * @package GLM Member DB
+ * @author  Chuck Scott <cscott@gaslightmedia.com>
+ * @license http://www.gaslightmedia.com Gaslightmedia
+ *          @release SVN: $Id: dataMembers.php,v 1.0 2011/01/25 19:31:47 cscott
+ *          Exp $
+ */
+class GlmDataStreamsendManagement extends GlmDataAbstract
+{
+
+    /**
+     * WordPress Database Object
+     *
+     * @var $wpdb
+     * @access public
+     */
+    public $wpdb;
+    /**
+     * Plugin Configuration Data
+     *
+     * @var $config
+     * @access public
+     */
+    public $config;
+    /**
+     * Data Table Name
+     *
+     * @var $table
+     * @access public
+     */
+    public $table;
+    /**
+     * Field definitions
+     *
+     * 'type' is type of field as defined by the application
+     * text Regular text field
+     * pointer Pointer to an entry in another table
+     * 'filters' is the filter name for a particular filter ID in PHP filter
+     * functions
+     * See PHP filter_id()
+     *
+     * 'use' is when to use the field
+     * l = List
+     * g = Get
+     * n = New
+     * i = Insert
+     * e = Edit
+     * u = Update
+     * d = Delete
+     * a = All
+     *
+     * @var $ini
+     * @access public
+     */
+    public $fields = false;
+    /**
+     * MemberInfo DB object
+     *
+     * @var $MemberInfo
+     * @access public
+     */
+    public $MemberInfo;
+
+    /**
+     * Constructor
+     *
+     * @param object $d database connection
+     * @param array $config Configuration array
+     * @param bool $limitedEdit Flag to say indicate limited edit requested
+     *
+     * @return void
+     * @access public
+     */
+    public function __construct($wpdb, $config, $limitedEdit = false)
+    {
+
+        // If this class is not being extended along with existing $wpdb and $config
+        if (!$this->wpdb) {
+
+            // Save WordPress Database object
+            $this->wpdb = $wpdb;
+
+            // Save plugin configuration object
+            $this->config = $config;
+
+        }
+
+        /*
+         * Table Name
+         */
+        $this->table = GLM_MEMBERS_STREAMSEND_PLUGIN_DB_PREFIX . 'management';
+
+        /*
+         * Table Data Fields
+         */
+
+        $this->fields = array (
+
+            'id' => array (
+                'field'     => 'id',
+                'type'      => 'integer',
+                'view_only' => true,
+                'use'       => 'a'
+            ),
+
+         );
+
+    }
+
+    /*
+     * Entry Post Processing Call-Back Method
+     *
+     * Perform post-processing for all result entries.
+     *
+     * In this case we're using it to append an array of category
+     * data to each member result and also sort by member name.
+     *
+     * @param array $r Array of field result data for a single entry
+     * @param string $a Action being performed (l, i, g, ...)
+     *
+     * @return object Class object
+     *
+     */
+    public function entryPostProcessing($r, $a)
+    {
+        return $r;
+    }
+
+}
+
+?>
diff --git a/classes/readme.txt b/classes/readme.txt
new file mode 100644 (file)
index 0000000..fa5f44e
--- /dev/null
@@ -0,0 +1,3 @@
+General class libraries developed specifically for this add-on should be placed in this directory.
+
+The lib directory should be considered instead for any standard class libraries not specifically developed for this add-on.
\ No newline at end of file
diff --git a/config/plugin.ini b/config/plugin.ini
new file mode 100644 (file)
index 0000000..9222f7e
--- /dev/null
@@ -0,0 +1,8 @@
+;
+; Main Configuration File
+; {descrName}
+;
+; Place any static configuration parameters here.  
+;
+
+[common]
diff --git a/css/readme.txt b/css/readme.txt
new file mode 100644 (file)
index 0000000..954cc9c
--- /dev/null
@@ -0,0 +1 @@
+Add admin.css and/or front.css to this directory to have those registered automatically.
\ No newline at end of file
diff --git a/deactivate.php b/deactivate.php
new file mode 100644 (file)
index 0000000..09d0b23
--- /dev/null
@@ -0,0 +1,61 @@
+<?php
+/**
+ * GLM Members Database Communicator
+ * Deactivate Plugin Tasks
+ *
+ * PHP version 5.5
+ *
+ * @category glmWordPressPlugin
+ * @package  glmMembersCommunicator
+ * @author   Chuck Scott <cscott@gaslightmedia.com>
+ * @license  http://www.gaslightmedia.com Gaslightmedia
+ * @release  admin.php,v 1.0 2014/10/31 19:31:47 cscott Exp $
+ * @link     http://dev.gaslightmedia.com/
+ */
+
+// Check that we're being called by WordPress.
+if (!defined('ABSPATH')) {
+    die("Please do not call this code directly!");
+}
+
+/*
+ * This class performs all necessary additional work when this
+ * plugin is deactivated.
+ */
+class glmMembersCommunicatorPluginDeactivate
+{
+
+    /**
+     * WordPress Database Object
+     *
+     * @var $wpdb
+     * @access public
+     */
+    public $wpdb;
+    /**
+     * Plugin Configuration Data
+     *
+     * @var $config
+     * @access public
+     */
+    public $config;
+
+    /*
+     * Constructor
+     *
+     * Performs all the work for this model
+     */
+    public function __construct ($wpdb, $config)
+    {
+
+        // Save WordPress Database object
+        $this->wpdb = $wpdb;
+
+        // Save plugin configuration object
+        $this->config = $config;
+
+        // Delete our version from WordPress Options
+        delete_option('glmMembersCommunicatorPluginVersion');
+    }
+
+}
diff --git a/defines.php b/defines.php
new file mode 100644 (file)
index 0000000..af5ea62
--- /dev/null
@@ -0,0 +1,64 @@
+<?php
+/**
+ * {DescrName}
+ *
+ * Set standard defined parameters
+ */
+
+// NOTE: Plugin & Database versions are defined in "/glm-member-db.php".
+
+define('GLM_MEMBERS_COMMUNICATOR_PLUGIN_NAME', 'GLM Members Database Communicator');
+define('GLM_MEMBERS_COMMUNICATOR_PLUGIN_SHORT_NAME', 'Communicator');
+define('GLM_MEMBERS_COMMUNICATOR_PLUGIN_SLUG', 'glm-member-db-communicator');
+
+// Database table prefixes - change if using add-on tables
+global $wpdb;
+define('GLM_MEMBERS_COMMUNICATOR_PLUGIN_DB_PREFIX', $wpdb->prefix.'glmMembersCommunicator');
+define('GLM_MEMBERS_COMMUNICATOR_PLUGIN_ACTIVE_DB_OPTION', 'glmMembersCommunicatorDbVersion');
+
+// Determine which system we're running on - If not provided, assume PRODUCTION
+$host = getenv('GLM_HOST_ID');
+if (trim($host) == '') {
+    $host = 'PRODUCTION';
+}
+define('GLM_MEMBERS_COMMUNICATOR_PLUGIN_HOST', $host);
+
+// Determine current http/https protocol
+$pageProtocol = 'http';
+if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443') {
+    $pageProtocol = 'https';
+}
+define('GLM_MEMBERS_COMMUNICATOR_PLUGIN_HTTP_PROTOCOL', $pageProtocol);
+
+// Get various pieces of the URL
+$urlParts = parse_url(get_bloginfo('url'));
+$pageUri = explode('?', $_SERVER['REQUEST_URI']);               // Bust this up to access URL path and script name only
+
+$WPUploadDir = wp_upload_dir();
+
+/*
+ *  Create a copy of the plugin slug that can be used as a variable prefix used to keep
+ *  global instances from clashing with instances in other plugins.
+ */
+$vprefix = str_replace('-', '_', GLM_MEMBERS_COMMUNICATOR_PLUGIN_SLUG);
+define('GLM_MEMBERS_COMMUNICATOR_PLUGIN_PREFIX', $vprefix.'_');
+
+// URLs
+define('GLM_MEMBERS_COMMUNICATOR_SITE_BASE_URL', home_url('/') );
+define('GLM_MEMBERS_COMMUNICATOR_PLUGIN_URL', plugin_dir_url(__FILE__));
+define('GLM_MEMBERS_COMMUNICATOR_PLUGIN_ADMIN_URL', admin_url('admin.php'));
+define('GLM_MEMBERS_COMMUNICATOR_PLUGIN_BASE_URL', WP_PLUGIN_URL.'/'.GLM_MEMBERS_COMMUNICATOR_PLUGIN_SLUG);
+define('GLM_MEMBERS_COMMUNICATOR_PLUGIN_CURRENT_URL', $urlParts['scheme'].'://'.$urlParts['host'].$pageUri[0]);
+
+// Directories
+define('GLM_MEMBERS_COMMUNICATOR_PLUGIN_PATH', dirname(__FILE__));
+define('GLM_MEMBERS_COMMUNICATOR_PLUGIN_SETUP_PATH', GLM_MEMBERS_COMMUNICATOR_PLUGIN_PATH.'/setup');
+define('GLM_MEMBERS_COMMUNICATOR_PLUGIN_DB_SCRIPTS', GLM_MEMBERS_COMMUNICATOR_PLUGIN_SETUP_PATH.'/databaseScripts');
+define('GLM_MEMBERS_COMMUNICATOR_PLUGIN_CLASS_PATH', GLM_MEMBERS_COMMUNICATOR_PLUGIN_PATH.'/classes');
+define('GLM_MEMBERS_COMMUNICATOR_PLUGIN_CONFIG_PATH', GLM_MEMBERS_COMMUNICATOR_PLUGIN_PATH.'/config');
+
+// Parameters related to the Main GLM Member DB plugin - Depending on what's going on these may already defined by the main plugin
+$pluginsPath = str_replace(GLM_MEMBERS_COMMUNICATOR_PLUGIN_SLUG, '', GLM_MEMBERS_COMMUNICATOR_PLUGIN_PATH);
+define('GLM_MEMBERS_COMMUNICATOR_MAIN_PLUGIN_PATH', $pluginsPath.'/glm-member-db');
+define('GLM_MEMBERS_COMMUNICATOR_PLUGIN_LIB_PATH', GLM_MEMBERS_COMMUNICATOR_MAIN_PLUGIN_PATH.'/lib');
+
diff --git a/index.php b/index.php
new file mode 100644 (file)
index 0000000..0d1def7
--- /dev/null
+++ b/index.php
@@ -0,0 +1,229 @@
+<?php
+/**
+ * Plugin Name: GLM Members Database Communicator
+ * Plugin URI: http://www.gaslightmedia.com/
+ * Description: Provide integration between StreamSend, Mailchimp and Constant Contact.
+ * Version: 0.0.1
+ * Author: Gaslight Media
+ * Author URI: http://www.gaslightmedia.com/
+ * License: GPL2
+ */
+
+/**
+ * GLM Members Database Communicator
+ * Index
+ *
+ * PHP version 5.5
+ *
+ * @category glmWordPressPluginChild
+ * @package glmMembersCommunicatorAddOn
+ * @author Chuck Scott <cscott@gaslightmedia.com>
+ * @license http://www.gaslightmedia.com Gaslightmedia
+ * @version 0.0.1
+ */
+
+/*
+ *  Plugin and Database Versions
+ *
+ *  Note that the database version matches the version of the last
+ *  plugin version where there was a change in the database.
+ *
+ *  Updates to checkDatabase() in glmPluginSupport.php must be
+ *  made together with the DB_VERSION below. ONLY bump the DB
+ *  version when there's a change in the database!! Use the
+ *  version nunmber of that release for the DB version.
+ *
+ *  We check the plugin version stored in the WordPress option below
+ *  so that we're sure the other add-ons see an up to date
+ *  version from this plugin.
+ */
+define('GLM_MEMBERS_COMMUNICATOR_PLUGIN_VERSION', '0.0.1');
+define('GLM_MEMBERS_COMMUNICATOR_PLUGIN_DB_VERSION', '0.0.1');
+
+// This is the minimum version of the GLM Members DB plugin require for this plugin.
+define('GLM_MEMBERS_COMMUNICATOR_PLUGIN_MIN_MEMBERS_REQUIRED_VERSION', '2.8.0');
+
+// Check if plugin version is not current in WordPress option and if needed updated it
+if (GLM_MEMBERS_COMMUNICATOR_PLUGIN_VERSION != get_option('glmMembersCommunicatorPluginVersion')) {
+    update_option('glmMembersCommunicatorPluginVersion', GLM_MEMBERS_COMMUNICATOR_PLUGIN_VERSION);
+}
+
+/*
+ * Copyright 2014 Charles Scott (email : cscott@gaslightmedia.com)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2, as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+
+// Check that we're being called by WordPress.
+if (!defined('ABSPATH')) {
+    die("Please do not call this code directly!");
+}
+
+/*
+* Some initial setup and tests
+*/
+
+$startupNotices = '';
+
+// Get standard defined parameters
+require_once 'defines.php';
+
+// Required to be able to get user capabilities when being called as a filter from the main plugin
+require_once ABSPATH . 'wp-includes/pluggable.php';
+
+// Include defines to tell if a plugin is active
+include_once ABSPATH . 'wp-admin/includes/plugin.php';
+
+/*
+ * Do some preliminary sanity checks
+ */
+
+// Check if database version should be defined and it isn't - This would be a plugin/add-on setup issue
+if (is_file(GLM_MEMBERS_COMMUNICATOR_PLUGIN_PATH.'/setup/databaseScripts/dbVersions.php') && !defined('GLM_MEMBERS_COMMUNICATOR_PLUGIN_DB_VERSION')) {
+    die('You have database scripts but have not defined a current database version at the top of index.php for this plugin/add-on!');
+}
+
+/*
+ * Check installation, activation, and version of main Member DB plugin
+ */
+
+// Check for main plugin and that it's active
+function glmMembersCommunicatorPluginRequired() {
+    echo '
+        <div class="error">
+            <p>The '.GLM_MEMBERS_COMMUNICATOR_PLUGIN_NAME.' add-on requires the base GLM Member DB plugin to be installed and active!</p>
+            <p>The '.GLM_MEMBERS_COMMUNICATOR_PLUGIN_NAME.' plugin has been de-activated.</p>
+        </div>
+    ';
+}
+$plugin_name = 'glm-member-db/index.php';
+$is_active = is_plugin_active($plugin_name);
+if ($is_active != '1') {
+    add_action( 'admin_notices', 'glmMembersCommunicatorPluginRequired' );
+    deactivate_plugins('/'.GLM_MEMBERS_COMMUNICATOR_PLUGIN_SLUG.'/index.php');
+}
+
+// Check for Minimum DB version for main Member DB
+function glmMembersCommunicatorMinVerRequired() {
+    echo '
+        <div class="error">
+            <p>The '.GLM_MEMBERS_COMMUNICATOR_PLUGIN_NAME.' requires that the main GLM Member DB plugin version be no older than '
+                    .GLM_MEMBERS_COMMUNICATOR_PLUGIN_MIN_MEMBERS_REQUIRED_VERSION.'!<br>
+                    '.GLM_MEMBERS_COMMUNICATOR_MIN_VERSION_NOTE.'</p>
+            <p>The '.GLM_MEMBERS_COMMUNICATOR_PLUGIN_NAME.' plugin has been de-activated.</p>
+        </div>
+    ';
+}
+$glmMembersDatabasePluginVersion = get_option('glmMembersDatabasePluginVersion');
+if (version_compare($glmMembersDatabasePluginVersion, GLM_MEMBERS_COMMUNICATOR_PLUGIN_MIN_MEMBERS_REQUIRED_VERSION) < 0) {
+    define('GLM_MEMBERS_COMMUNICATOR_MIN_VERSION_NOTE', "Members DB: $glmMembersDatabasePluginVersion, Communicator Requires: ".GLM_MEMBERS_COMMUNICATOR_PLUGIN_MIN_MEMBERS_REQUIRED_VERSION);
+    add_action( 'admin_notices', 'glmMembersCommunicatorMinVerRequired');
+    deactivate_plugins('/'.GLM_MEMBERS_COMMUNICATOR_PLUGIN_SLUG.'/'.GLM_MEMBERS_COMMUNICATOR_PLUGIN_SLUG.'.php');
+}
+
+/*
+ * Register this add-on with the main GLM Member DB plugin and get information on all add-ons loaded.
+ */
+require_once GLM_MEMBERS_COMMUNICATOR_PLUGIN_SETUP_PATH.'/validActions.php';
+require_once GLM_MEMBERS_COMMUNICATOR_PLUGIN_SETUP_PATH.'/shortcodes.php';
+if (is_file(GLM_MEMBERS_COMMUNICATOR_PLUGIN_DB_SCRIPTS.'/dbVersions.php')) {
+    require_once GLM_MEMBERS_COMMUNICATOR_PLUGIN_DB_SCRIPTS.'/dbVersions.php';
+}
+
+// Load Add-On Management Settings data
+/* None - Need to figure out a smooth way to do this.
+$glmMembersCommunicatorManagementSettings = $wpdb->get_row( "SELECT * FROM ".GLM_MEMBERS_COMMUNICATOR_PLUGIN_DB_PREFIX."management WHERE id = 1", ARRAY_A );
+unset($glmMembersCommunicatorManagementSettings['id']);
+*/
+
+function glmMembersCommunicatorRegisterAddOn($addOns) {
+
+    // Add this add-on to the add-ons array
+    $addOns[GLM_MEMBERS_COMMUNICATOR_PLUGIN_SLUG] =  array(
+        'dir' => GLM_MEMBERS_COMMUNICATOR_PLUGIN_PATH,
+        'name' =>  GLM_MEMBERS_COMMUNICATOR_PLUGIN_NAME,
+        'short_name' => GLM_MEMBERS_COMMUNICATOR_PLUGIN_SHORT_NAME,
+        'slug' => GLM_MEMBERS_COMMUNICATOR_PLUGIN_SLUG,
+        'actions' => $GLOBALS['glmMembersCommunicatorAddOnValidActions'],
+        'config' => array(
+        ),
+        'shortcodes' => $GLOBALS['glmMembersCommunicatorShortcodes'],
+        'shortcodesDescription' => $GLOBALS['glmMembersCommunicatorShortcodesDescription']
+    );
+
+    // If we have database tables for this plugin/addon, provide that data also
+    if (isset($GLOBALS['glmMembersCommunicatorDbVersions'])) {
+        $addOns[GLM_MEMBERS_COMMUNICATOR_PLUGIN_SLUG]['database'] = array(
+            'dbPrefix' => GLM_MEMBERS_COMMUNICATOR_PLUGIN_DB_PREFIX,
+            'dbCurrentVersion' => GLM_MEMBERS_COMMUNICATOR_PLUGIN_DB_VERSION,
+            'dbActiveVersionOption' => GLM_MEMBERS_COMMUNICATOR_PLUGIN_ACTIVE_DB_OPTION,
+            'dbScriptPath' => GLM_MEMBERS_COMMUNICATOR_PLUGIN_DB_SCRIPTS,
+            'dbVersions' => $GLOBALS['glmMembersCommunicatorDbVersions']
+        );
+    } else {
+        $addOns[GLM_MEMBERS_COMMUNICATOR_PLUGIN_SLUG]['database'] = false;
+    }
+
+    // Return the array with our data added
+    return $addOns;
+}
+add_filter('glm-member-db-register-addon','glmMembersCommunicatorRegisterAddOn', 10, 1);
+
+/*
+ * Plugin Update Support - uses Gaslight Media update server
+ */
+/* Not functional yet - Need to resolve JavaScript conflicts with this feature in other plugins
+require GLM_MEMBERS_COMMUNICATOR_PLUGIN_LIB_PATH.'/opentools-update-checker/opentools-update-checker.php';
+${GLM_MEMBERS_COMMUNICATOR_PLUGIN_PREFIX."updateChecker"} = new OpenToolsPluginUpdateChecker(
+     'http://www.gaslightmedia.com/update_server/?action=get_metadata&slug='.GLM_MEMBERS_COMMUNICATOR_PLUGIN_SLUG,
+    __FILE__,
+    GLM_MEMBERS_COMMUNICATOR_PLUGIN_SLUG
+);
+
+${GLM_MEMBERS_COMMUNICATOR_PLUGIN_PREFIX."updateChecker"}->declareCredentials(array(
+  'license_key' => __('License Key:')
+));
+*/
+
+/*
+  *
+  * Activate and Deactivate hooks
+  *
+ */
+
+ // Activate
+ function glmMembersCommunicatorPluginActivate ()
+ {
+     global $wpdb, $config;
+     require_once GLM_MEMBERS_COMMUNICATOR_PLUGIN_PATH . '/activate.php';
+     new glmMembersCommunicatorPluginActivate($wpdb, $config);
+ }
+ register_activation_hook(__FILE__, 'glmMembersCommunicatorPluginActivate');
+
+ // Deactivate
+ function glmMembersCommunicatorPluginDeactivate ()
+ {
+     global $wpdb, $config;
+     require_once GLM_MEMBERS_COMMUNICATOR_PLUGIN_PATH . '/deactivate.php';
+     $x = new glmMembersCommunicatorPluginDeactivate($wpdb, $config);
+     return false;
+ }
+ register_deactivation_hook(__FILE__, 'glmMembersCommunicatorPluginDeactivate');
+
+/*
+ * Hooks for testing capabilities provided by this add-on
+ */
+require_once GLM_MEMBERS_COMMUNICATOR_PLUGIN_SETUP_PATH.'/permissions.php';
+
diff --git a/js/readme.txt b/js/readme.txt
new file mode 100644 (file)
index 0000000..f642355
--- /dev/null
@@ -0,0 +1 @@
+Add admin.js and/or front.js to this directory to have those registered automatically.
\ No newline at end of file
diff --git a/lib/readme.txt b/lib/readme.txt
new file mode 100644 (file)
index 0000000..8373066
--- /dev/null
@@ -0,0 +1,3 @@
+Standard class libraries not specifically developed for this add-on should be placed here.
+
+The classes directory should be considered instead for class libraries developed specifically for this add-on.
diff --git a/misc/documentation/AddAnAdminTab.txt b/misc/documentation/AddAnAdminTab.txt
new file mode 100644 (file)
index 0000000..c697b47
--- /dev/null
@@ -0,0 +1,15 @@
+Add an admin tab
+
+* Add a new section in setup/adminTabs.php
+
+* Add a model file - models/admin/{menu}/{action}.php
+
+* Add a view file - views/admin/{menu}/{action}.html
+
+* Add action to setup/validActions.php
+
+* If needed add a database table to the create_database_V...sql file
+  and update name to current database version, add an
+  update_database_V....sql file, and/or update dbVersions.php
+
+* If required add a data definition for any new tables
diff --git a/misc/documentation/CreateNewAddOn.txt b/misc/documentation/CreateNewAddOn.txt
new file mode 100644 (file)
index 0000000..b93235f
--- /dev/null
@@ -0,0 +1,49 @@
+Procedure to create a new GLM Members add-on plugin
+----------------------------------------------------
+
+* Checkout glm-member-db-sample and rename directory to glm-member-db-{add-on name}
+
+* From a bash prompt, run "SETUP_SCRIPT" 
+
+* Create new repository named WP-Plugins/glm-member-db-{name of add-on}.git
+
+* If there are any databases associated with this add-on, setup the database scripts and
+  data under the "setup/databaseScripts" directory. If there are no database tables
+  with this add-on, remove all but the "readme.txt" file from that directory. 
+  NOTE: No "update_database..." files should be there for a new add-on with new tables.
+  NOTE: There should be only one entry in the "dbVersions.php" file.
+
+* Carefully review "defines.php" file and update as needed.
+
+* Do a quick review of the readme.txt file and update as desired.
+
+* TEST - At this point the add-on should install and activate but not do anything.
+    - If there are any database tables, make sure they were created and are correct.
+    - Go to "Members" -> "Management" -> "Add-Ons" and make sure the add-on was
+      properly registered with the main plugin and that any database data is shown.
+
+* Adding menus
+    - Update "setup/adminMenus.php" and add menu section as described there.
+    - Add an entry in the validActions.php file. Pay attention to how slug name is 
+      constructed ("glm-members-admin-{page}-{action}").
+    - If needed add a database table to the create_database_V...sql file
+      Also add a "classes/data/data{Table}.php file
+    - Add a model file as "models/admin/{page}/{action}.php
+    - Add any desired view file as "views/admin/{page}/{action}.html
+        Note that additional possible view files should be named as...
+            "views/admin/{page}/{action}{Name}.html
+    - Test that when add-on is activated that the menu shows and is functional.
+    
+* Adding tabs
+    - Update "setup/admin/Tabs.php" and add new tab filter as described there.
+    - Add an entry in the validActions.php file. Pay attention to how slug name is 
+      constructed ("glm-members-admin-{page}-{action}").
+    - If needed add a database table to the create_database_V...sql file
+      Also add a "classes/data/data{Table}.php file
+    - Add a model file as "models/admin/{page}/{action}.php
+    - Add any desired view file as "views/admin/{page}/{action}.html
+        Note that additional possible view files should be named as...
+            "views/admin/{page}/{action}{Name}.html
+    - Test that when add-on is activated that the tab shows and is functional.
+    
+ * 
\ No newline at end of file
diff --git a/models/admin/management/streamsend.php b/models/admin/management/streamsend.php
new file mode 100644 (file)
index 0000000..7cfdc41
--- /dev/null
@@ -0,0 +1,214 @@
+<?php
+/**
+ * Gaslight Media Members Database
+ * GLM Members DB - Streamsend Add-on - Management Streamsend Tab
+ *
+ * PHP version 5.5
+ *
+ * @category glmWordPressPlugin
+ * @package  glmMembersDatabase
+ * @author     Chuck Scott <cscott@gaslightmedia.com>
+ * @license  http://www.gaslightmedia.com Gaslightmedia
+ * @release  streamsend.php,v 1.0 2014/10/31 19:31:47 cscott Exp $
+ * @link     http://dev.gaslightmedia.com/
+ */
+
+// Load Management Streamsend data abstract
+//require_once GLM_MEMBERS_STREAMSEND_PLUGIN_CLASS_PATH.'/data/dataManagement.php';
+
+/**
+ * GlmMembersAdmin_management_streamsend
+ *
+ * PHP version 5
+ *
+ * @category Model
+ * @package GLM Member DB
+ * @author    Chuck Scott <cscott@gaslightmedia.com>
+ * @license http://www.gaslightmedia.com Gaslightmedia
+ *            @release SVN: $Id: packaging.php,v 1.0 2011/01/25 19:31:47 cscott
+ *            Exp $
+ */
+class GlmMembersAdmin_management_streamsend //extends GlmDataStreamsendManagement
+{
+
+    /**
+     * WordPress Database Object
+     *
+     * @var $wpdb
+     * @access public
+     */
+    public $wpdb;
+    /**
+     * dbh Postgres database connection
+     *
+     * @var mixed
+     * @access public
+     */
+    public $dbh;
+    /**
+     * settings used for the schema and tablenames
+     *
+     * @var mixed
+     * @access public
+     */
+    public $settings = array();
+    /**
+     * streamsend
+     *
+     * @var bool
+     * @access public
+     */
+    public $streamsend = array();
+    public $image_owner;
+
+    /**
+     * Constructor
+     *
+     * This contructor performs the work for this model. This model returns
+     * an array containing the following.
+     *
+     * 'status'
+     *
+     * True if successfull and false if there was a fatal failure.
+     *
+     * 'view'
+     *
+     * A suggested view name that the contoller 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 WordPress 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 members data class
+        //parent::__construct(false, false);
+
+    }
+
+    /**
+     * modelAction
+     *
+     * @param bool $actionData
+     * @access public
+     * @return void
+     */
+    public function modelAction($actionData = false)
+    {
+
+        $option                = false;
+        $settings_updated      = false;
+        $settings_update_error = false;
+        $streamsend_settings   = false;
+        $option2               = false;
+
+        if (isset($_REQUEST['option'])) {
+            $option = $_REQUEST['option'];
+        }
+
+        switch ($option) {
+
+            case 'settings':
+
+            default:
+
+                // Make sure option is set if default
+                $option = 'settings';
+
+                // Determine if current user can edit configurations
+                if (!current_user_can('glm_members_management')) {
+                    return array(
+                        'status'           => false,
+                        'menuItemRedirect' => 'error',
+                        'modelRedirect'    => 'index',
+                        'view'             => 'admin/error/index.html',
+                        'data'             => array(
+                            'reason' => 'User does not have rights to make configuration changes.'
+                        )
+                    );
+                }
+
+                // Check for submission option
+                $option2 = '';
+                if (isset($_REQUEST['option2'])) {
+                    $option2 = $_REQUEST['option2'];
+                }
+
+                switch($option2) {
+
+                    // Update the settings and redisplay the form
+                    case 'submit':
+
+                        // Update the event management settings
+                        //$streamsend_settings = $this->updateEntry(1);
+                        if ($streamsend_settings['status']) {
+                            $settings_updated = true;
+                        } else {
+                            $settings_update_error = true;
+                        }
+
+                        break;
+
+                    // Default is to get the current settings and display the form
+                    default:
+
+                        // Try to get the first (should be only) entry for general settings.
+                        //$streamsend_settings = $this->editEntry(1);
+                        //echo '<pre>$streamsend_settings: ' . print_r( $streamsend_settings, true ) . '</pre>';
+
+                        if ($streamsend_settings === false) {
+
+                            if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG) {
+                                glmMembersAdmin::addNotice("<b>&nbsp;&nbsp;/models/admin/management/streamsend.php: Unable to load streamsend management settings.", 'Alert');
+                            }
+
+                        }
+
+                        break;
+
+                }
+
+                break;
+
+        }
+
+        // Populate the state list for event default state selection
+        $streamsend_settings['event_default_state'] = $this->config['states'];
+
+        // Compile template data
+        $template_data = array(
+            'option'              => $option,
+            'settingsUpdated'     => $settings_updated,
+            'settingsUpdateError' => $settings_update_error,
+            'streamsendSettings'  => $streamsend_settings,
+        );
+
+        // Return status, suggested view, and data to controller
+        return array(
+            'status'           => true,
+            'menuItemRedirect' => false,
+            'modelRedirect'    => false,
+            'view'             => 'admin/management/streamsend.html',
+            'data'             => $template_data
+        );
+
+
+    }
+
+}
+
+?>
diff --git a/models/admin/readme.txt b/models/admin/readme.txt
new file mode 100644 (file)
index 0000000..e9a199d
--- /dev/null
@@ -0,0 +1,5 @@
+The admin controller executes models under this directory.
+
+Typically you should add a directory here that matches the page where the action should take place.
+
+Under that directory place the model for the various actions.
\ No newline at end of file
diff --git a/models/admin/streamsend/index.php b/models/admin/streamsend/index.php
new file mode 100644 (file)
index 0000000..5413348
--- /dev/null
@@ -0,0 +1,95 @@
+<?php
+/**
+ * Gaslight Media Members Database
+ * Admin Streamsend Dashboard
+ *
+ * PHP version 5.5
+ *
+ * @category glmWordPressPlugin
+ * @package  glmMembersDatabase
+ * @author   Chuck Scott <cscott@gaslightmedia.com>
+ * @license  http://www.gaslightmedia.com Gaslightmedia
+ * @release  index.php,v 1.0 2014/10/31 19:31:47 cscott Exp $
+ * @link     http://dev.gaslightmedia.com/
+ */
+
+class GlmMembersAdmin_streamsend_index // extends GlmDataStreamsend
+{
+
+    /**
+     * WordPress Database Object
+     *
+     * @var $wpdb
+     * @access public
+     */
+    public $wpdb;
+    /**
+     * Plugin Configuration Data
+     *
+     * @var $config
+     * @access public
+     */
+    public $config;
+
+    /**
+     * Constructor
+     *
+     * This contractor 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 WordPress 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 Streamsend data class
+         *
+         * Note, the third parameter is a flag that indicates to the Contacts
+         * data class that it should flag a group of fields as 'view_only'.
+         */
+        //parent::__construct(false, false, true);
+
+    }
+
+    public function modelAction($actionData = false)
+    {
+
+        // Compile template data
+        $templateData = array(
+        );
+             // Return status, any suggested view, and any data to controller
+        return array(
+            'status'        => true,
+            'modelRedirect' => false,
+            'view'          => 'admin/streamsend/index.html',
+            'data'          => $templateData
+        );
+
+    }
+
+
+}
diff --git a/models/front/readme.txt b/models/front/readme.txt
new file mode 100644 (file)
index 0000000..4c54852
--- /dev/null
@@ -0,0 +1,7 @@
+The front controller executes models under this directory.
+
+Typically you should add a directory here that matches the category of actions that will take place.
+
+Under that directory place the model for the various actions.
+
+Actions under this directory would normally be called due to processing of a shortcode.
\ No newline at end of file
diff --git a/readme.txt b/readme.txt
new file mode 100644 (file)
index 0000000..3116eb5
--- /dev/null
@@ -0,0 +1,27 @@
+=== GLM Members Database Communicator ===
+Contributors: cscott@gaslightmedia.com
+Donate link: http://www.gaslightmedia.com
+Tags: Gaslight Media,Plugin,Communicator
+Requires at least: 3.0.1
+Tested up to: 3.4
+Stable tag: 4.3
+License: GPLv2 or later
+License URI: http://www.gnu.org/licenses/gpl-2.0.html
+
+This is the GLM Members Database Communicator.
+
+== Description ==
+
+The GLM Members Database Communicator is an add-on to the Gaslight Media Members Database,
+which is required to install and run this plugin
+
+== Installation ==
+
+This section describes how to install the plugin and get it working.
+
+e.g.
+
+1. Upload `plugin-name.php` to the `/wp-content/plugins/` directory
+1. Activate the plugin through the 'Plugins' menu in WordPress
+
+
diff --git a/setup/adminHooks.php b/setup/adminHooks.php
new file mode 100644 (file)
index 0000000..6b33557
--- /dev/null
@@ -0,0 +1,40 @@
+<?php
+/**
+ * GLM Members Database Communicator
+ * GLM Members Misc Admin Hooks and Filters
+ *
+ * PHP version 5.5
+ *
+ * @category glmWordPressPlugin
+ * @package  glmMembersDatabase
+ * @author   Chuck Scott <cscott@gaslightmedia.com>
+ * @license  http://www.gaslightmedia.com Gaslightmedia
+ * @release  adminHooks.php,v 1.0 2014/10/31 19:31:47 cscott Exp $
+ * @link     http://dev.gaslightmedia.com/
+ */
+
+/*
+ * Place Misc Hooks and Filters here. If this file exists, it will be included
+ * by the add-on main plugin script.
+ *
+ * Note that filter and hook callback functions must be included in-line as shown below...
+ *
+ *  add_filter( 'filter_title', function( $parameter ) {
+ *     // Function code
+ *  });
+ *
+ *  Also note that parameters will be in the context of the main admin controller constructor.
+  */
+// Adding Action for when the memberInfo record is saved (new or update)
+add_action('glm-member-db-memberinfosave', function($member){
+    // Code here for hook
+    echo '<p>MemberInfo action hook</p>';
+    echo '<pre>$member: ' . print_r( $member, true ) . '</pre>';
+}, 10, 1);
+
+// Adding Action for when the Member Contact record is saved (new or update)
+add_action('glm-member-db-membercontactsave', function($contact){
+    // Code here for hook
+    echo '<p>Contact action hook</p>';
+    echo '<pre>$contact: ' . print_r( $contact, true ) . '</pre>';
+}, 10, 1);
diff --git a/setup/adminMenus.php b/setup/adminMenus.php
new file mode 100644 (file)
index 0000000..0f6bed0
--- /dev/null
@@ -0,0 +1,52 @@
+<?php
+/**
+ * GLM Members Database Communicator
+ * GLM Members DB - Communicator - Admin Menus
+ *
+ * PHP version 5.5
+ *
+ * @category glmWordPressPlugin
+ * @package  glmMembersDatabase
+ * @author   Chuck Scott <cscott@gaslightmedia.com>
+ * @license  http://www.gaslightmedia.com Gaslightmedia
+ * @release  admin.php,v 1.0 2014/10/31 19:31:47 cscott Exp $
+ * @link     http://dev.gaslightmedia.com/
+ */
+
+/*
+ * Added menus or sub-menus examples
+ *
+ * // Add a main menu item
+ * add_menu_page(
+ *     'GLM Sample',                                       // Page Title
+ *     'GLM Sample',                                       // Menu Title
+ *     'glm-members-members',                              // Capability
+ *     'glm-members-admin-menu-glm-sample',                // Menu Slug
+ *     function() {$this->controller('sample');},          // Called function - typically controller() with the menu name
+ *     false,                                              // Icon URL
+ *     '92'                                                // Menu Position
+ * );
+ *
+ * // Add a sub-menu item
+ * add_submenu_page(
+ *     'glm-members-admin-menu-sample',                    // Parent slug
+ *     'Sample',                                           // Page title
+ *     'Sample',                                           // Menu Title
+ *     'glm_members_edit',                                 // Capability required
+ *     'glm-members-admin-menu-sample',                    // Menu slug
+ *     function() {$this->controller('sample');}
+ * );
+ *
+ * If creating a main menu item with add_menu_page(), please document
+ * that structure here.
+ *
+ * NOTE: The menu slug is the link for the page. It is also parsed by
+ * the controller and used to find the model to load. The
+ * "glm-members-admin-menu-" portion should not change, the last
+ * segment is the model directory name. By default the "index.php" file
+ * in that directory is executed. If the URL includes a "glm_action"
+ * parameter, then the model file called is in the same directory but
+ * is named the same as the "glm_action" parameter.
+ *
+ */
+
diff --git a/setup/adminTabs.php b/setup/adminTabs.php
new file mode 100644 (file)
index 0000000..2e72fdd
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+/**
+ * GLM Members Database Communicator
+ * GLM Members DB - Communicator - Admin Tabs
+ *
+ * PHP version 5.5
+ *
+ * @category glmWordPressPlugin
+ * @package  glmMembersDatabase
+ * @author   Chuck Scott <cscott@gaslightmedia.com>
+ * @license  http://www.gaslightmedia.com Gaslightmedia
+ * @release  admin.php,v 1.0 2014/10/31 19:31:47 cscott Exp $
+ * @link     http://dev.gaslightmedia.com/
+ */
+
+/*
+ * To add a new tab to an existing Member DB page use a block
+ * like this and replace the {} parameters.
+ *
+ * add_filter('glm-member-db-add-tab-for-{menu name}',
+ *     function($addOnTabs) {
+ *         $newTabs = array(
+ *             array(
+ *                 'text' => '{text for display on tab}',
+ *                 'menu' => '{menu name}',
+ *                 'action' => '{action to perform}'
+ *             )
+ *         );
+ *         $addOnTabs = array_merge($addOnTabs, $newTabs);
+ *         return $addOnTabs;
+ *     }
+ * );
+ *
+ */
+if (current_user_can('glm_members_members')) {
+    //if (apply_filters('glm_members_permit_admin_members_streamsend_tab', true)) {
+        add_filter('glm-member-db-add-tab-for-management',
+            function($addOnTabs) {
+                $newTabs = array(
+                    array(
+                        'text'   => 'StreamSend',
+                        'menu'   => 'management',
+                        'action' => 'streamsend'
+                    )
+                );
+                $addOnTabs = array_merge($addOnTabs, $newTabs);
+                return $addOnTabs;
+            }
+        );
+    //}
+}
diff --git a/setup/databaseScripts/create_database_V0.0.1.sql b/setup/databaseScripts/create_database_V0.0.1.sql
new file mode 100644 (file)
index 0000000..75e2ee4
--- /dev/null
@@ -0,0 +1,41 @@
+-- Gaslight Media Members Database - Events Add-On
+-- File Created: 2017-02-07
+-- Database Version: 0.0.1
+-- Database Creation Script
+--
+-- This file is called to create a new set of tables for this
+-- add-on for the most recent database version for this add-on.
+--
+-- There should only be one such file in this directory
+--
+-- To permit each query below to be executed separately,
+-- all queries must be separated by a line with four dashes
+
+
+-- StreamSend Management Settings
+CREATE TABLE {prefix}management (
+    id INT NOT NULL AUTO_INCREMENT,
+    enable_streamsend BOOLEAN NULL,             -- StreamSend On Off Flag
+    streamsend_login TINYTEXT NULL,             -- StreamSend Login ID
+    streamsend_key TINYTEXT NULL,               -- StreamSend Transaction Key
+    streamsend_audience INT NULL,               -- StreamSend Audience Number
+    enable_constant_contact BOOLEAN NULL,       -- Constant Contact On Off Flag
+    constant_contact_password TINYTEXT NULL,    -- Constant Contact Password
+    constant_contact_api_key TINYTEXT NULL,     -- Constant Contact API Key
+    constant_contact_login TINTYTEXT NULL,      -- Constant Contact Login
+    constant_contact_api_path TINYTEXT NULL,    -- Constant Contact API Path
+    constant_contact_list TINYTEXT NULL,        -- Constant Contact List ID
+    enable_mailchimp BOOLEAN NULL,              -- MailChimp On Off
+    mailchimp_apikey TINYTEXT NULL,             -- MailChimp API Key
+    mailchimp_list_id TINYTEXT NULL,            -- MailChimp List Id
+    PRIMARY KEY (id)
+);
+
+----
+
+-- Set default StreamSend management entry
+INSERT INTO {prefix}management
+    ( id, enable_streamsend, enable_constant_contact, enable_mailchimp )
+   VALUES
+    ( 1, false, false, false )
+;
diff --git a/setup/frontHooks.php b/setup/frontHooks.php
new file mode 100644 (file)
index 0000000..9d06ec9
--- /dev/null
@@ -0,0 +1,27 @@
+<?php
+/**
+ * GLM Members Database Communicator
+ * Misc Hooks and Filters
+ *
+ * PHP version 5.5
+ *
+ * @category glmWordPressPlugin
+ * @package  glmMembersDatabase
+ * @author   Chuck Scott <cscott@gaslightmedia.com>
+ * @license  http://www.gaslightmedia.com Gaslightmedia
+ * @release  frontHooks.php,v 1.0 2014/10/31 19:31:47 cscott Exp $
+ * @link     http://dev.gaslightmedia.com/
+ */
+
+/*
+ * Place Misc Hooks and Filters here. If this file exists, it will be included
+ * by the add-on main plugin script.
+ *
+ * Note that filter and hook callback functions must be included in-line as shown below...
+ *
+ *  add_filter( 'filter_title', function( $parameter ) {
+ *     // Function code
+ *  });
+ *
+ *  *** Also note that parameters will be in the context of the main front controller constructor. ***
+ */
diff --git a/setup/hooksHelp.html b/setup/hooksHelp.html
new file mode 100644 (file)
index 0000000..bbe0e75
--- /dev/null
@@ -0,0 +1,16 @@
+<!-- Hooks Help for {descrName} with Example
+
+        <tr><th colspan="3" class="glm-notice"><p>Sample Add-On</p></th></tr>
+        
+        <tr><th colspan="3">User Permission Hooks</td></tr>
+        
+        <tr>
+            <td>some_hook_name</td>
+            <td>FILTER or ACTION</td>
+            <td></td>
+            <td>
+                What this hook does.
+            </td>
+        </tr>
+
+-->
\ No newline at end of file
diff --git a/setup/permissions.php b/setup/permissions.php
new file mode 100644 (file)
index 0000000..68554ec
--- /dev/null
@@ -0,0 +1,53 @@
+<?php
+/**
+ * {descrName
+ * Permissions
+ *
+ * PHP version 5.5
+ *
+ * @category glmWordPressPlugin
+ * @package  glmMembersDatabase
+ * @author   Chuck Scott <cscott@gaslightmedia.com>
+ * @license  http://www.gaslightmedia.com Gaslightmedia
+ * @release  permissions.php,v 1.0 2014/10/31 19:31:47 cscott Exp $
+ * @link     http://dev.gaslightmedia.com/
+ */
+
+
+/*
+ * Below are permission checks for various specific things in this add-on and
+ * elsewhere in the Member DB main plugin and add-ons.
+ *
+ * Each location where a permission might be required has an apply_filters()
+ * hook with a tag name that includes the plugin or add-on name, the menu,
+ * the action, and a name for the specific thing that needs permissions.
+ *
+ * This can be included in code or in a Smarty template used in these plugins.
+ * For example, to check permissions for the main Members menu and it's "index"
+ * action to see if a member search is permitted, the template includes the
+ * following code...
+ *
+ * {if $membersList && apply_filters('glm_members_permit_admin_members_index_member_search', true)}
+ *      --- some template output ---
+ * {/if}
+ *
+ * In the case above, it's also checking to see if the members list even exists
+ * before checking the permissions. The default value of "true" in the hook ensures
+ * that the permission is granted if nothing has linked into the hook to say otherwise.
+ *
+ * Note that each add_filter() below first checks if the permission has already
+ * been retracted by prior hook. This requires all that are attached to the hook
+ * to permit the action.
+ *
+ * Of course any of these may test more than one capability if that's desired.
+ *
+ * Since we have capabilities that only exist if a particular add-on (such as Contacts)
+ * has been loaded and activated, it can be helpful to be able to test for a capability
+ * for the current user and permit some action if that capability doesn't exist. The
+ * main plugin therefore provides the following globally accessible function that will
+ * return true if the capability doesn't exist, otherwise it respects the capability.
+ *
+ *  glmMembersUserCan('glm_members_edit_any_member', $permit);
+ *
+ *  $permit is a boolean set before this function call for passing on permissions.
+*/
diff --git a/setup/rolesAndCapabilities.php b/setup/rolesAndCapabilities.php
new file mode 100644 (file)
index 0000000..729b906
--- /dev/null
@@ -0,0 +1,19 @@
+<?php
+/**
+ * GLM Members Database Communicator
+ * Roles & Capabilities
+ *
+ * PHP version 5.5
+ *
+ * @category glmWordPressPlugin
+ * @package  glmMembersCommunicator
+ * @author   Chuck Scott <cscott@gaslightmedia.com>
+ * @license  http://www.gaslightmedia.com Gaslightmedia
+ * @release  rolesAndPermissions.php,v 1.0 2014/10/31 19:31:47 cscott Exp $
+ * @link     http://dev.gaslightmedia.com/
+ */
+
+/**
+ * NOTE: This file is only included in the activate.php process.
+ *       It is not regularly used during operation.
+ */
diff --git a/setup/shortcodes.php b/setup/shortcodes.php
new file mode 100644 (file)
index 0000000..fbdb6ab
--- /dev/null
@@ -0,0 +1,93 @@
+<?php
+/**
+ * GLM Members Database Communicator
+ * Short Codes
+ *
+ * PHP version 5.5
+ *
+ * @category glmWordPressPlugin
+ * @package  glmMembersCommunicator
+ * @author   Chuck Scott <cscott@gaslightmedia.com>
+ * @license  http://www.gaslightmedia.com Gaslightmedia
+ * @release  shortcodes.php,v 1.0 2014/10/31 19:31:47 cscott Exp $
+ * @link     http://dev.gaslightmedia.com/
+ */
+
+/*
+ * Array of short-code
+ *
+ * This array lists all of the short-codes available from the main
+ * member plugin and all add-ons that provide short-code features.
+ *
+ * This array is merged with the data from any registered add-ons
+ * providing short-code features. The plugin providing the short-code
+ * is designated in the 'plugin' elemeent.
+ *
+ * A shortcode is unique to a particular plugin. To provide additional
+ * data and features to a short-code, an add-on should use filters
+ * provided by the short-code to insert data into the template array,
+ * to insert additional format into the template, or to insert
+ * text directly into the completed template output.
+ *
+ * The "attributes" array is a list of available attributes for this
+ * shortcode and their default values. If a database table is provided,
+ * then the value for each attribute is a table column where we get
+ * the default value. If no table is provided, then the value for
+ * each attribute is the actual default value for that attribute.
+ * In the case that the data is taken from the database table, the
+ * "id" for the table entry where the data is stored is assumed to
+ * be 1.
+ *
+ * Note that if the value for a particular attribute is false, then
+ * it is not read from the database even if the table is specified
+ * but might be supplied at run-time as an attribute in the short-code.
+ * All attributes that might be specified in the shortcode must be
+ * listed in the 'attributes' array below. If an attribute is not
+ * specified here, it can't be read from the short-code.
+ *
+ * The following is an explanation of this array.
+ *
+ * array(
+ *      '{shortcode-slug} => array(
+ *          'plugin' => '{plugin (add-on) slug}',       // Identifies which plugin is providing the short-code
+ *          'menu' => '{menu name}',                    // Menu name in this context is simply where to find the action
+ *          'action' => '{shortcode action name},       // Action used to execute this shortcode
+ *          'table' => '{table prefix}{table name}',    // Database table where default attribute values are stored
+ *          'attributes' => array(                      // An array of all shortcode attributes (options)
+ *              '{attr name}' => '{field name}',        // Available attribute names and the database field names with the default value
+ *              ....
+ *          ),
+ *      ... additional short-codes
+ * )
+ *
+ * Shortcode descriptions sample
+ *
+ *      <tr>
+ *           <th>[glm-members-sample-shortcode]</th>
+ *           <td>&nbsp;</td>
+ *           <td width="50%">
+ *               Displays something related to this add-on.
+ *           </td>
+ *       </tr>
+ *       <tr>
+ *           <td>&nbsp;</td>
+ *           <th>type="{types}"</th>
+ *           <td>
+ *               The "type" attribute is used to select the type of data to be displayed.
+ *               Below is a list of available list types.
+ *               <p>
+ *                   <table width="100%">
+ *                       <tr><th colspan=3">List Types</th></tr>
+ *                       <tr><td>one</td><td>Type One</td></tr>
+ *                       <tr><td>two</td><td>Type Two</td></tr>
+ *                   </table>
+ *               </p>
+ *           </td>
+ *       </tr>
+ */
+
+$glmMembersCommunicatorShortcodes = array(
+);
+
+$glmMembersCommunicatorShortcodesDescription = '';
+
diff --git a/setup/validActions.php b/setup/validActions.php
new file mode 100644 (file)
index 0000000..ace3565
--- /dev/null
@@ -0,0 +1,70 @@
+<?php
+/**
+ * GLM Members Database Communicator
+ * Valid Actions
+ *
+ * PHP version 5.5
+ *
+ * @category glmWordPressPlugin
+ * @package  glmMembersCommunicator
+ * @author   Chuck Scott <cscott@gaslightmedia.com>
+ * @license  http://www.gaslightmedia.com Gaslightmedia
+ * @release  admin.php,v 1.0 2014/10/31 19:31:47 cscott Exp $
+ * @link     http://dev.gaslightmedia.com/
+ */
+
+/*
+ * Array of valid menu items and actions.
+ *
+ * The higher level elements are valid menu items. These correlate to
+ * actual menu or sub menu items that are hooks back to this controller
+ * class.
+ *
+ * The lower level items below each menu item are actions that may be specified
+ * by a "glmMembersAction" form field.
+ *
+ * The string after the action is the slug of the plugin where the model/view
+ * is to perform that action.
+ *
+ * This array is integrated into the valid actions array in the main GLM Member
+ * DB plugin when this plugin registers itself.
+ *
+ * EXAMPLE
+ *
+ * $glmMembersCommunicatorAddOnValidActions = array(
+ *     'adminActions' => array(
+ *         'members' => array(
+ *             'sample' => GLM_MEMBERS_COMMUNICATOR_PLUGIN_SLUG,
+ *         ),
+ *         'sample' => array(
+ *             'index' => GLM_MEMBERS_COMMUNICATOR_PLUGIN_SLUG,
+ *             'more' => GLM_MEMBERS_COMMUNICATOR_PLUGIN_SLUG,
+ *         ),
+ *         'info' => array(
+ *             'index' => GLM_MEMBERS_COMMUNICATOR_PLUGIN_SLUG
+ *         )
+ *     ),
+ *     'frontActions' => array(
+ *         'sample' => array(
+ *             'list' => GLM_MEMBERS_COMMUNICATOR_PLUGIN_SLUG,
+ *             'detail' => GLM_MEMBERS_COMMUNICATOR_PLUGIN_SLUG
+ *         )
+ *     )
+ * );
+ *
+ *
+ *
+ *
+ */
+
+$glmMembersCommunicatorAddOnValidActions = array(
+    'adminActions' => array(
+        'management' => array(
+            'streamsend' => GLM_MEMBERS_STREAMSEND_PLUGIN_SLUG,
+        ),
+    ),
+    'frontActions' => array(
+    )
+);
+
+?>
diff --git a/uninstall.php b/uninstall.php
new file mode 100644 (file)
index 0000000..e313981
--- /dev/null
@@ -0,0 +1,27 @@
+<?php
+
+die('uninstall not configured - See plugin uninstall.php script!');
+
+/**
+ * GLM Members Database Communicator
+ * Uninstall Plugin
+ *
+ * PHP version 5.5
+ *
+ * @category glmWordPressPlugin
+ * @package  glmMembersCommunicator
+ * @author   Chuck Scott <cscott@gaslightmedia.com>
+ * @license  http://www.gaslightmedia.com Gaslightmedia
+ * @release  admin.php,v 1.0 2014/10/31 19:31:47 cscott Exp $
+ * @link     http://dev.gaslightmedia.com/
+ */
+
+// Check that we're being called by WordPress.
+if (!defined('ABSPATH')) {
+    die("Please do not call this code directly!");
+}
+
+//if uninstall not called from WordPress exit
+if (!defined('WP_UNINSTALL_PLUGIN')) {
+    die("Sorry, uninstall must be called by WordPress!");
+}
diff --git a/views/admin/management/streamsend.html b/views/admin/management/streamsend.html
new file mode 100644 (file)
index 0000000..077964f
--- /dev/null
@@ -0,0 +1,29 @@
+{include file='admin/management/header.html'}
+
+    <h2 class="nav-tab-wrapper" style="margin-bottom: 1em;">
+        <a id="glm-settings" data-show-table="glm-table-settings" class="glm-settings-tab nav-tab{if $option=='settings'} nav-tab-active{/if}">Settings</a>
+    </h2>
+
+    <!-- Management Settings -->
+
+    <table id="glm-table-settings" class="glm-admin-table glm-settings-table{if $option!='settings'} glm-hidden{/if}">
+        <tr>
+            <td colspan="2">
+                {if $settingsUpdated}<h2 class="glm-notice glm-flash-updated glm-right">Settings Updated</h2>{/if}
+                {if $settingsUpdateError}<span class="glm-error glm-flash-updated glm-right">Settings Update Error</span>{/if}
+                <h2>Management Settings</h2>
+            </td>
+        </tr>
+        <tr>
+            <td>
+                <form action="{$thisUrl}?page={$thisPage}" method="post" enctype="multipart/form-data">
+                    <input type="hidden" name="glm_action" value="streamsend">
+                    <input type="hidden" name="option" value="settings">
+                    <input type="hidden" name="option2" value="submit">
+                    <table class="glm-admin-table">
+                    </table>
+                    <input type="submit" value="Update Settings" class="button-primary">
+                </form>
+            </td>
+        </tr>
+    </table>
diff --git a/views/admin/readme.txt b/views/admin/readme.txt
new file mode 100644 (file)
index 0000000..5a9d7ea
--- /dev/null
@@ -0,0 +1,5 @@
+The admin controller uses views (templates) under this directory to generate final output.
+
+Typically you should add a directory here that matches the page where the view is used.
+
+Under that directory place the view (template) for the various actions.
\ No newline at end of file
diff --git a/views/front/readme.txt b/views/front/readme.txt
new file mode 100644 (file)
index 0000000..1138d90
--- /dev/null
@@ -0,0 +1,7 @@
+The front controller uses views (templates) under this directory to generate final output.
+
+Typically you should add a directory here that matches the category of actions that will use these views.
+
+Under that directory place the view (template) for the various actions.
+
+Views under this directory would normally be called due to processing of a shortcode.
\ No newline at end of file