Member page creation & management, members only section
authorLaury GvR <laury@gaslightmedia.com>
Wed, 4 May 2016 13:33:35 +0000 (09:33 -0400)
committerLaury GvR <laury@gaslightmedia.com>
Wed, 4 May 2016 13:33:35 +0000 (09:33 -0400)
12 files changed:
activate.php
controllers/admin.php
controllers/front.php
css/front.css
defines.php
index.php
js/admin.js
models/admin/management/index.php
setup/adminHooks.php
setup/frontHooks.php
setup/requiredPages.php
views/admin/management/index.html

index 401b21a..228d448 100644 (file)
@@ -94,10 +94,10 @@ class glmMembersPluginActivate extends glmPluginSupport
 
         }
         
-        if (get_option('glm_members_database_first_activation', 'none') == 'none') {
-            update_option('glm_members_database_first_activation', true);
+        if (get_option(GLM_MEMBERS_PLUGIN_OPTION_FIRST_ACTIVATION, 'none') == 'none') {
+            update_option(GLM_MEMBERS_PLUGIN_OPTION_FIRST_ACTIVATION, true);
         } else {
-            update_option('glm_members_database_first_activation', false);
+            update_option(GLM_MEMBERS_PLUGIN_OPTION_FIRST_ACTIVATION, false);
         }
     }
 
index efd1621..37df725 100644 (file)
@@ -215,27 +215,57 @@ class glmMembersAdmin extends GlmPluginSupport
 
 
     }
-    /*
+    /*get_option(GLM_MEMBERS_PLUGIN_OPTION_MEMBERS_ONLY_ID)
      * Create new pages containing the member DB shortcodes
      * @return void
      */
     public function createPages($requiredPages) 
     {
         foreach($requiredPages as $requiredPage => $requiredPageInfo) {
-            //foreach($requiredPageInfo as $key => $value) {
-            $trimmedName = 'glm_members_database_'.str_replace(' ','_',strtolower($requiredPage)).'_id';
+            $trimmedName = GLM_MEMBERS_PLUGIN_OPTION_PREFIX.$requiredPageInfo['optionSuffix'];
+            if ($requiredPageInfo['parent'] == 'associate') {
+                $postParent = get_option(GLM_MEMBERS_PLUGIN_OPTION_ASSOCIATE_ID);
+            } else if ($requiredPageInfo['parent'] == 'membersonly') {
+                $postParent = get_option(GLM_MEMBERS_PLUGIN_OPTION_MEMBERS_ONLY_ID);
+            } else if (is_numeric($requiredPageInfo['parent'])) {
+                $postParent = $requiredPageInfo['parent'];
+            } else {
+                $postParent = '0';
+            }
             if ( !get_post(get_option($trimmedName))) {
-                $new_page = array(
-                    'post_title' => $requiredPage,
-                    'post_content' => $requiredPageInfo['content'],
-                    'post_status' => 'publish',
-                    'post_type' => 'page',
-                    'post_author' => '1',
-                    'page_template' => isset($requiredPageInfo['template']) ? $requiredPageInfo['template'] : 'index.php' ,
-                    'post_parent' => $requiredPageInfo['parent'] !== '0' ? get_option('glm_members_database_glm_associate_id') : '0'
-                );
-                $new_id = wp_insert_post($new_page);
-                update_option($trimmedName, $new_id);
+                $duplicatePage = get_page_by_title($requiredPageInfo['name']);
+                //echo $duplicatePage;
+                echo $duplicatePage->title;
+                echo $duplicatePage->title->ID;
+                if ($duplicatePage->title == $requiredPageInfo['name']) {
+                    update_option($trimmedName, $duplicatePage->ID);
+                } else {
+                    $new_page = array(
+                        'post_title' => $requiredPageInfo['name'],
+                        'post_content' => $requiredPageInfo['content'],
+                        'post_status' => 'publish',
+                        'post_type' => 'page',
+                        'post_author' => '1',
+                        'page_template' => isset($requiredPageInfo['template']) ? $requiredPageInfo['template'] : 'index.php' ,
+                        'post_parent' => $postParent
+                    );
+                    $new_id = wp_insert_post($new_page);
+                    update_option($trimmedName, $new_id);
+
+                    // Make extra page if members only is created
+                    if ($new_id == get_option(GLM_MEMBERS_PLUGIN_OPTION_MEMBERS_ONLY_ID)) {
+                        $sample_page = array(
+                            'post_title' => 'Members Only Sample Subpage',
+                            'post_content' => 'This page will automatically be locked to Members Only with the members-only-template',
+                            'post_status' => 'publish',
+                            'post_type' => 'page',
+                            'post_author' => '1',
+                            'page_template' => isset($requiredPageInfo['template']) ? $requiredPageInfo['template'] : 'index.php' ,
+                            'post_parent' => $new_id
+                        );
+                        wp_insert_post($sample_page);
+                    }
+                }
             }
         }
     }
index 804ca71..61d1201 100644 (file)
@@ -84,7 +84,10 @@ class glmMembersFront extends GlmPluginSupport
             }
 
         }
-
+        
+        // Add filters for use anywhere else (apply_filter). Will have to add this to index.php eventually
+        add_filter('glmMembersFrontScriptsFilter',array($this,'glmMembersFrontCSS'));
+        add_filter('glmMembersFrontCSSFilter',array($this,'glmMembersFrontCSS'));
     }
 
     /**
@@ -120,7 +123,10 @@ class glmMembersFront extends GlmPluginSupport
                 wp_enqueue_script($jsName, false, array('jquery'), false, true);
             }
         }
-
+    }
+    
+    public function glmMembersFrontCSS () {
+        
         // Register any front.css files in the css directory of any glm members plugin
         foreach ($this->config['addOns'] as $a) {
             $cssFile = GLM_MEMBERS_WORDPRESS_PLUGIN_PATH.$a['slug'].'/css/front.css';
@@ -135,7 +141,6 @@ class glmMembersFront extends GlmPluginSupport
                 wp_enqueue_style($cssName);
             }
         }
-
     }
 
     /**
@@ -200,6 +205,9 @@ class glmMembersFront extends GlmPluginSupport
 
         // Enque all needed scripts and css here so that only happens when we're doing something
         $this->glmMembersFrontScripts();
+        
+        // Enqueue all css here so that only happens when we're doing something
+        $this->glmMembersFrontCSS();
 
         // Get the current theme directory to check for modified views
         $theme = get_template_directory();
index 36e1ef7..9677b78 100644 (file)
@@ -41,7 +41,7 @@
     margin: 5px 10px 10px;
     padding: 10px;
 }
-#glm-member-front-header .glm-button {
+#glm-member-front-header .button.glm-button {
     float: right;
     padding: .4em .8em;
     border-radius: 4px;
index beb48ca..211d1d7 100644 (file)
@@ -10,6 +10,8 @@
 define('GLM_MEMBERS_PLUGIN_NAME', 'Gaslight Media Membership Management System');
 define('GLM_MEMBERS_PLUGIN_SHORT_NAME', 'GLM Member DB');
 define('GLM_MEMBERS_PLUGIN_SLUG', 'glm-member-db');
+define('GLM_MEMBERS_PLUGIN_UNDERSCORED_NAME', 'glm_member_db');
+
 
 // Enable to display smarty template debug.
 define('GLM_MEMBERS_PLUGIN_DEBUG_SMARTY', false);
@@ -42,6 +44,13 @@ define('GLM_MEMBERS_PLUGIN_BASE_URL', WP_PLUGIN_URL.'/'.GLM_MEMBERS_PLUGIN_SLUG)
 define('GLM_MEMBERS_PLUGIN_CURRENT_URL', $urlParts['scheme'].'://'.$urlParts['host'].$pageUri[0]);
 define('GLM_MEMBERS_PLUGIN_MEDIA_URL', $WPUploadDir['baseurl'].'/'.GLM_MEMBERS_PLUGIN_SLUG);
 
+// WP Options
+define('GLM_MEMBERS_PLUGIN_OPTION_PREFIX', 'glm_members_database_option_');
+define('GLM_MEMBERS_PLUGIN_OPTION_MEMBERS_LIST_ID', GLM_MEMBERS_PLUGIN_OPTION_PREFIX.'members_list_id');
+define('GLM_MEMBERS_PLUGIN_OPTION_MEMBERS_ONLY_ID', GLM_MEMBERS_PLUGIN_OPTION_PREFIX.'members_only_id');
+define('GLM_MEMBERS_PLUGIN_OPTION_ASSOCIATE_ID', GLM_MEMBERS_PLUGIN_OPTION_PREFIX.'glm_associate_id');
+define('GLM_MEMBERS_PLUGIN_OPTION_FIRST_ACTIVATION', GLM_MEMBERS_PLUGIN_OPTION_PREFIX.'first_activation');
+
 // Directories
 define('GLM_MEMBERS_PLUGIN_PATH', dirname(__FILE__));
 define('GLM_MEMBERS_PLUGIN_SETUP_PATH', GLM_MEMBERS_PLUGIN_PATH.'/setup');
index e1e8b30..1e4150f 100644 (file)
--- a/index.php
+++ b/index.php
@@ -280,6 +280,7 @@ $config['addOns'] = array(
         'name' =>  GLM_MEMBERS_PLUGIN_NAME,
         'short_name' => GLM_MEMBERS_PLUGIN_SHORT_NAME,
         'slug' => GLM_MEMBERS_PLUGIN_SLUG,
+        'underscored_name' => GLM_MEMBERS_PLUGIN_UNDERSCORED_NAME,
         'actions' => $glmMembersValidActions,
         'shortcodes' => $glmMembersShortcodes,
         'shortcodesDescription' => $glmMembersShortcodesDescription,
index d3b9d1b..f296990 100644 (file)
@@ -4,7 +4,6 @@
  * 
  */
 jQuery(document).ready(function ($) {
-    
 //    var shortcodeDropdown, shortcodeCategory, blankStart, listBox, detailBox, target, shortcodeString;
 //    var shortcodeValues = {};
 //    $("#showDetail").hide();
index a30ba06..1bcbf1d 100644 (file)
@@ -122,13 +122,111 @@ class GlmMembersAdmin_management_index extends GlmDataSettingsGeneral
         if (isset($_REQUEST['option']) && $_REQUEST['option'] == 'submit') {
             $option = $_REQUEST['option'];
         }
+        
+        foreach ($this->config['addOns'] as $a) {
+            if (isset($a['requiredPages'])) {
+                foreach($a['requiredPages'] as $pageName => &$pageData) {
+                    //echo $pageName;
+                    $pageID = get_option(GLM_MEMBERS_PLUGIN_OPTION_PREFIX.$pageData['optionSuffix']);
+                    $pageData['id'] = $pageID;
+                    $pageData['slug'] = str_replace(' ','_',strtolower($pageData['name']));
+                    echo get_the_title($pageID);
+                    //$pageData['name'] = single_post_title(get_post(get_option($pageID)));
+                }
+                $requiredPages[$a['underscored_name']] = $a['requiredPages'];
+                
+                //$a['requiredPages'][]
+            }
+        }
 
         switch($option) {
 
             // Update the settings and redisplay the form
             case 'submit':
+                
+                $requiredPagesUpdateError = false;
+                if (isset($_REQUEST[GLM_MEMBERS_PLUGIN_OPTION_MEMBERS_LIST_ID]) ){
+                    $membersListIdOption = $requiredPages['glm-member-db']['members_list'][''];
+                    $newMembersListId = $_REQUEST[$membersListIdOption]; 
+                }
+                $results = $this->wpdb->get_results( "SELECT ID FROM ".$this->wpdb->posts." WHERE ID = ".$newMembersListId);
+                if (get_option($membersListIdOption) == $newMembersListId) {
+                    $requiredPagesUpdateError = false;
+                } else if (is_numeric($newMembersListId)) { 
+                    if ($results) {
+                        $requiredPagesUpdateError = false;
+                    } else {
+                        $requiredPagesUpdateError .= "\n Page ID $newMembersListId does not exist. ";
+                    }
+                } else {
+                    $requiredPagesUpdateError .= "\n Page ID $newMembersListId must be numeric.";
+                }
+                
+              
+                // Members Only
+                if (isset($_REQUEST[GLM_MEMBERS_PLUGIN_OPTION_MEMBERS_ONLY_ID]) ){
+                    $membersOnlyIdOption = GLM_MEMBERS_PLUGIN_OPTION_MEMBERS_ONLY_ID;
+                    $newMembersOnlyId = $_REQUEST[$membersOnlyIdOption]; 
+                }
+                $results = $this->wpdb->get_results( "SELECT ID FROM ".$this->wpdb->posts." WHERE ID = ".$newMembersOnlyId);
+                if (get_option($membersOnlyIdOption) == $newMembersOnlyId) {
+                    $requiredPagesUpdateError = false;
+                } else if (is_numeric($newMembersOnlyId)) { 
+                    if ($results) {
+                        $requiredPagesUpdateError = false;
+                    } else {
+                        $requiredPagesUpdateError .= "\n Page ID $newMembersOnlyId does not exist. ";
+                    }
+                } else {
+                    $requiredPagesUpdateError .= "\n Page ID $newMembersOnlyId must be numeric.";
+                }
+                
+              // Events
+                if (isset($_REQUEST[GLM_MEMBERS_PLUGIN_OPTION_EVENT_LIST_ID]) ){
+                    $eventListIdOption = GLM_MEMBERS_PLUGIN_OPTION_EVENT_LIST_ID;
+                    $newEventListId = $_REQUEST[$eventListIdOption]; 
+                }
+                $results = $this->wpdb->get_results( "SELECT ID FROM ".$this->wpdb->posts." WHERE ID = ".$newEventListId);
+                if (get_option($eventListIdOption) == $newEventListId) {
+                    $requiredPagesUpdateError = false;
+                } else if (is_numeric($newEventListId)) { 
+                    if ($results) {
+                        $requiredPagesUpdateError = false;
+                    } else {
+                        $requiredPagesUpdateError .= "\n Page ID $newEventListId does not exist. ";
+                    }
+                } else {
+                    $requiredPagesUpdateError .= "\n Page ID $newEventListId must be numeric.";
+                }
 
-                // Update the general settings
+                // Packaging
+                if (isset($_REQUEST[GLM_MEMBERS_PLUGIN_OPTION_PACKAGING_LIST_ID]) ){
+                    $packagingListIdOption = GLM_MEMBERS_PLUGIN_OPTION_PACKAGING_LIST_ID;
+                    $newPackagingListId = $_REQUEST[$packagingListIdOption]; 
+                }
+                $results = $this->wpdb->get_results( "SELECT ID FROM ".$this->wpdb->posts." WHERE ID = ".$newPackagingListId);
+                if (get_option($packagingListIdOption) == $newPackagingListId) {
+                    $requiredPagesUpdateError = false;
+                } else if (is_numeric($newPackagingListId)) { 
+                    if ($results) {
+                        $requiredPagesUpdateError = false;
+                    } else {
+                        $requiredPagesUpdateError .= "\n Page ID $newPackagingListId does not exist. ";
+                    }
+                } else {
+                    $requiredPagesUpdateError .= "\n Page ID $newPackagingListId must be numeric.";
+                }
+                
+                if (!$requiredPagesUpdateError) {
+                    update_option($membersListIdOption, $newMembersListId);
+                    $requiredPages['members_list']['id'] = $newMembersListId;
+                    update_option($membersOnlyIdOption, $newMembersOnlyId);
+                    $requiredPages['members_only']['id'] = $newMembersOnlyId;
+                    update_option($eventListIdOption, $newEventListId);
+                    $requiredPages['event_list']['id'] = $newEventListId;
+                    update_option($packagingListIdOption, $newPackagingListId);
+                    $requiredPages['packaging_list']['id'] = $newPackagingListId;
+                } 
                 $generalSettings = $this->updateEntry(1);
                 if ($generalSettings['status']) {
                     $settingsUpdated = true;
@@ -143,7 +241,7 @@ class GlmMembersAdmin_management_index extends GlmDataSettingsGeneral
 
                 // Try to get the first (should be only) entry for general settings.
                 $generalSettings = $this->editEntry($id);
-
+                
                 if ($generalSettings === false) {
 
                     if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG) {
@@ -161,7 +259,7 @@ class GlmMembersAdmin_management_index extends GlmDataSettingsGeneral
                     );
 */
                 }
-
+                
                 break;
 
         }
@@ -172,7 +270,9 @@ class GlmMembersAdmin_management_index extends GlmDataSettingsGeneral
             'genSettings' => $generalSettings,
             'timezones' =>  DateTimeZone::listIdentifiers(),
             'settingsUpdated' => $settingsUpdated,
-            'settingsUpdateError' => $settingsUpdateError
+            'settingsUpdateError' => $settingsUpdateError,
+            'requiredPages' => $requiredPages,
+            'requiredPagesUpdateError' => $requiredPagesUpdateError
         );
 
         // Return status, suggested view, and data to controller
index 5a8d143..a3afd3c 100644 (file)
@@ -54,20 +54,29 @@ $menuExists = wp_get_nav_menu_object( $menuName );
 // If it doesn't exist, let's create it.
 if( !$menuExists){
     
-    $membersOnlyPageID = get_option('glm_members_database_members_only_id');
+    $membersOnlyPageID = get_option(GLM_MEMBERS_PLUGIN_MEMBERS_ONLY_ID);
     //
     $menu_id = wp_create_nav_menu($menuName);
 
     // Set up default members only link and add it to the menu.
     wp_update_nav_menu_item($menu_id, 0, array(
         'menu-item-title' =>  __('Members Only'),
-        'menu-item-object-id' => get_option('glm_members_database_members_only_id'),
+        'menu-item-object-id' => $membersOnlyPageID,
         'menu-item-parent-id' => 0,
         'menu-item-position'  => 0,
         'menu-item-object'    => 'page',
         'menu-item-type'      => 'post_type',
         'menu-item-classes'   => 'members-only',
         'menu-item-status'    => 'publish'));
+    wp_update_nav_menu_item($menu_id, 0, array(
+        'menu-item-title' =>  __('Members Only Sample Subpage'),
+        'menu-item-object-id' => 0,
+        'menu-item-parent-id' => $membersOnlyPageID,
+        'menu-item-position'  => 0,
+        'menu-item-object'    => 'page',
+        'menu-item-type'      => 'post_type',
+        'menu-item-classes'   => 'members-only',
+        'menu-item-status'    => 'publish'));
 }
 
 $locations = get_theme_mod( 'nav_menu_locations' );
index 52bcf00..0cf62fe 100644 (file)
@@ -89,9 +89,10 @@ if (!function_exists('is_in_tree')) {
 add_filter( 'template_include', 'glm_members_only_template', 99 );
 function glm_members_only_template( $template ) {
     $templateName = "glm-members-only-template.php";
-    $membersOnlyPage = get_option('glm_members_database_members_only_id');
+    $membersOnlyPage = get_option(GLM_MEMBERS_PLUGIN_OPTION_MEMBERS_ONLY_ID);
     $newTemplate = locate_template( $templateName );
     if ( is_in_tree($membersOnlyPage) && $newTemplate != '' ) { // if in same tree as the members page for this site
+        apply_filters('glmMembersFrontCSSFilter');
         return $newTemplate;
         /* Uncomment this if you want every child page of the members only page to be given the members only template
          *  (i.e. changed in the database) and not just using them on the front-end
index 504c373..803bf7a 100644 (file)
  * Array of required pages
  *
  * This array lists all of the required pages made available to the main
- * member plugin
+ * member plugin, utilised by createPages() in admin.php
  *
  * This array is merged with the data from any registered add-ons
  * providing required pages. The plugin providing the required pages
  * is designated in the 'plugin' elemeent.
+ * 
+ * Leaving 'template' blank will result in index.php default. Any alternative
+ * can be entered, but particularly useful may be 'glm-members-only-template.php'
+ * (providing it exists in the theme!) 
+ * 
+ * Leaving 'parent' blank will set it to 0. A page ID can be used, as well as:
+ * - 'membersonly' : this will make the page a child of the Members Only locked 
+ *                   area
+ * - 'associate'   : this will make the page a child of the GLM Associate page 
+ *                   for management purposes
+ *
+ * When in doubt just use 'associate'
  *
  */
 
 $glmMembersRequiredPages = array(
     // These should be in GLM Associate
     'GLM Associate' => array(
+        'name' => 'GLM Associate',
         'content' => '',
-        'parent' => '0'
+        'parent' => '0',
+        'optionSuffix' => 'glm_associate_id',
     ),
     // These should be in GLM Members
     'Members Only' => array(
+        'name' => 'Members Only',
         'content' => 'This page and any child beneath it will automatically be locked to Members Only with the members-only-template.',
         'parent' => '0',
-        'template' => 'glm-members-only-template.php'
+        'template' => 'glm-members-only-template.php',
+        'optionSuffix' => 'members_only_id',
     ),
     'Members List' => array(
+        'name' => 'Members List',
         'content' => '[glm-members-list]',
-        'parent' => 'GLM Associate'
+        'parent' => 'associate',
+        'optionSuffix' => 'members_list_id',
     ),
-    'Member Detail' => array(
+    'Members Detail' => array(
+        'name' => 'Members Detail',
         'content' => '[glm-member-detail]',
-        'parent' => 'GLM Associate'
+        'parent' => 'associate',
+        'optionSuffix' => 'member_detail_id',
     )
 );
index af4627f..3bda095 100644 (file)
@@ -6,17 +6,52 @@
         <input type="hidden" name="option" value="submit">
    
         <h2 class="nav-tab-wrapper" style="margin-bottom: 1em;">
-            <a id="glm-settings-debug" data-show-table="glm-table-debug" class="glm-settings-tab nav-tab nav-tab-active">Debug Settings</a>
+            <a id="glm-settings-required-page" data-show-table="glm-table-required-page" class="glm-settings-tab nav-tab nav-tab-active">Required Pages</a>
+            <a id="glm-settings-debug" data-show-table="glm-table-debug" class="glm-settings-tab nav-tab">Debug Settings</a>
             <a id="glm-settings-misc" data-show-table="glm-table-misc" class="glm-settings-tab nav-tab">Misc. Settings</a>
             <a id="glm-settings-list" data-show-table="glm-table-list" class="glm-settings-tab nav-tab">Member List Options</a>
             <a id="glm-settings-detail" data-show-table="glm-table-detail" class="glm-settings-tab nav-tab">Member Detail Options</a>
             {if $settingsUpdated}<span class="glm-notice glm-flash-updated glm-right">Settings Updated</span>{/if}
+            {if $requiredPageUpdateError}<span class="glm-error glm-flash-updated glm-right">{$requiredPageUpdateError}</span>{/if}
             {if $settingsUpdateError}<span class="glm-error glm-flash-updated glm-right">Settings Update Error</span>{/if}
         </h2>
         
         
         <!-- Debug Settings -->
-        
+        <table id="glm-table-required" class="glm-admin-table glm-settings-table">
+            {foreach from=$requiredPages key=addon item=requiredPage}
+            <tr><td colspan="2"><hr></td></tr>
+            <tr><td colspan="2"><h2>Plugin: {$addon}</h2></td></tr>
+                {foreach from=$requiredPage key=requiredPageName item=requiredPageData}
+                <tr>
+                    <th>{$requiredPageName}</th>
+                    <td>
+                        <table>
+                            <tr>
+                                <th>Page Name</th>
+                                <td>
+                                    <input type="text" name="glm_members_database_option_{$requiredPageData.name}" value="{$requiredPageData.name}">
+                                </td>
+                            </tr>
+<!--                            <tr>
+                                <th>Page ID</th>
+                                <td>
+                                    <input type="text" readonly value="{$requiredPageData.id}">
+                                </td>
+                            </tr>-->
+                            <tr>
+                                <th>Page Slug</th>
+                                <td>
+                                    <input type="text" readonly value="{$requiredPageData.slug}">
+                                </td>
+                            </tr>
+                        </table>
+                    </td>
+                </tr>
+                {/foreach}
+                <hr>
+            {/foreach}
+        </table>
         <table id="glm-table-debug" class="glm-admin-table glm-settings-table">
             <tr><td colspan="2"><h2>Debug Settings</h2></td></tr>
             <tr>