From: Laury GvR Date: Wed, 4 May 2016 13:33:35 +0000 (-0400) Subject: Member page creation & management, members only section X-Git-Tag: v2.0.0^2~26^2 X-Git-Url: http://cvs2.gaslightmedia.com/gitweb/?a=commitdiff_plain;h=3e2623e2e3999febf5be3040d91618745c03006b;p=WP-Plugins%2Fglm-member-db.git Member page creation & management, members only section --- diff --git a/activate.php b/activate.php index 401b21a5..228d4485 100644 --- a/activate.php +++ b/activate.php @@ -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); } } diff --git a/controllers/admin.php b/controllers/admin.php index efd16218..37df725e 100644 --- a/controllers/admin.php +++ b/controllers/admin.php @@ -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); + } + } } } } diff --git a/controllers/front.php b/controllers/front.php index 804ca716..61d12011 100644 --- a/controllers/front.php +++ b/controllers/front.php @@ -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(); diff --git a/css/front.css b/css/front.css index 36e1ef74..9677b780 100644 --- a/css/front.css +++ b/css/front.css @@ -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; diff --git a/defines.php b/defines.php index beb48cab..211d1d7d 100644 --- a/defines.php +++ b/defines.php @@ -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'); diff --git a/index.php b/index.php index e1e8b303..1e4150f3 100644 --- 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, diff --git a/js/admin.js b/js/admin.js index d3b9d1b1..f296990c 100644 --- a/js/admin.js +++ b/js/admin.js @@ -4,7 +4,6 @@ * */ jQuery(document).ready(function ($) { - // var shortcodeDropdown, shortcodeCategory, blankStart, listBox, detailBox, target, shortcodeString; // var shortcodeValues = {}; // $("#showDetail").hide(); diff --git a/models/admin/management/index.php b/models/admin/management/index.php index a30ba06a..1bcbf1de 100644 --- a/models/admin/management/index.php +++ b/models/admin/management/index.php @@ -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 diff --git a/setup/adminHooks.php b/setup/adminHooks.php index 5a8d1435..a3afd3c2 100644 --- a/setup/adminHooks.php +++ b/setup/adminHooks.php @@ -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' ); diff --git a/setup/frontHooks.php b/setup/frontHooks.php index 52bcf00a..0cf62fef 100644 --- a/setup/frontHooks.php +++ b/setup/frontHooks.php @@ -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 diff --git a/setup/requiredPages.php b/setup/requiredPages.php index 504c373e..803bf7ad 100644 --- a/setup/requiredPages.php +++ b/setup/requiredPages.php @@ -17,32 +17,52 @@ * 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', ) ); diff --git a/views/admin/management/index.html b/views/admin/management/index.html index af4627fa..3bda0951 100644 --- a/views/admin/management/index.html +++ b/views/admin/management/index.html @@ -6,17 +6,52 @@ - + + {foreach from=$requiredPages key=addon item=requiredPage} + + + {foreach from=$requiredPage key=requiredPageName item=requiredPageData} + + + + + {/foreach} +
+ {/foreach} +

Plugin: {$addon}

{$requiredPageName} + + + + + + + + + + +
Page Name + +
Page Slug + +
+

Debug Settings