From f368166767717e8d8874cfb68ab29c26100cf7a9 Mon Sep 17 00:00:00 2001 From: Chuck Scott Date: Fri, 23 Jun 2017 15:30:11 -0400 Subject: [PATCH] Reworked how we were setting up roles and capabilities on activate. Was having a conflict with User Role Editor. Removed setip/rolesAndCapabilities.php file and moved that poart of setup into activate.php. Completely reworked management of roles and capabilities in activate.php. We were adding capabilities to a role that were set to false, which wasn't needed and conflicted with User Role Editor. --- activate.php | 173 ++++++++++++----- setup/rolesAndCapabilities.php | 327 --------------------------------- 2 files changed, 128 insertions(+), 372 deletions(-) delete mode 100644 setup/rolesAndCapabilities.php diff --git a/activate.php b/activate.php index 775cbd5..15840bb 100644 --- a/activate.php +++ b/activate.php @@ -71,53 +71,138 @@ class glmMembersContactsPluginActivate update_option('glmMembersDatabaseContactsPluginVersion', GLM_MEMBERS_CONTACTS_PLUGIN_VERSION); // Set Roles and Capabilities for this plugin - require_once GLM_MEMBERS_CONTACTS_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; + global $wp_roles; - // 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]; - - } +/* + remove_role('glm_members_manager'); + remove_role('glm_members_own_entity_manager'); + remove_role('glm_members_member_contact'); + remove_role('glm_members_restricted_contact'); +*/ + + /* + * Check if we need to update the roles and capabilities + * + * *** BE SURE TO UPDATE THE VERSION BELOW ANY TIME THERE'S A ROLE/CAPABILITIES CHANGE *** + */ + + $capabilitiesVersion = 1; + + // Check if the capabilities version is not current + if (get_option('glmMembersContactsCapabilitiesVersion') != $capabilitiesVersion ) { + + // Set the capabilities version to this version + update_option('glmMembersContactsCapabilitiesVersion', $capabilitiesVersion); + + // If this is the first time, start by deleting all of our custom capabilities + // This is needed due to the way they had been added in the past + + if ($capabilitiesVersion == 1) { + + $this->deleteRoleCapability('glm_members_main_menu'); + $this->deleteRoleCapability('glm_members_management'); + $this->deleteRoleCapability('glm_members_member'); + $this->deleteRoleCapability('glm_members_configure'); + $this->deleteRoleCapability('glm_members_shortcodes'); + $this->deleteRoleCapability('glm_members_widget'); + $this->deleteRoleCapability('glm_members_add_new_member'); + $this->deleteRoleCapability('glm_members_view_any_member'); + $this->deleteRoleCapability('glm_members_edit_any_member'); + $this->deleteRoleCapability('glm_members_delete_any_member'); + $this->deleteRoleCapability('glm_members_moderate_any_member_info'); + $this->deleteRoleCapability('glm_members_view_my_member'); + $this->deleteRoleCapability('glm_members_edit_my_member'); + $this->deleteRoleCapability('glm_members_delete_my_member_info'); + $this->deleteRoleCapability('glm_members_moderate_my_member_info'); + $this->deleteRoleCapability('glm_members_view_my_entity'); + $this->deleteRoleCapability('glm_members_edit_my_entity'); + $this->deleteRoleCapability('glm_members_delete_my_entity_info'); + $this->deleteRoleCapability('glm_members_moderate_my_entity_info'); + $this->deleteRoleCapability('glm_members_view_my_entity_info'); + $this->deleteRoleCapability('glm_members_edit_my_contact_info'); + $this->deleteRoleCapability('glm_members_my_edits_moderated'); + } - // Add the role - $role->add_cap($capability, $enabled); + // Now add any roles we need that don't already exist and then add all needed capabilities for each role + + // Role: Administrator - Just add GLM capabilities + $wp_roles->add_cap('administrator', 'glm_members_main_menu'); + $wp_roles->add_cap('administrator', 'glm_members_management'); + $wp_roles->add_cap('administrator', 'glm_members_member'); + $wp_roles->add_cap('administrator', 'glm_members_configure'); + $wp_roles->add_cap('administrator', 'glm_members_shortcodes'); + $wp_roles->add_cap('administrator', 'glm_members_widget'); + $wp_roles->add_cap('administrator', 'glm_members_add_new_member'); + $wp_roles->add_cap('administrator', 'glm_members_view_any_member'); + $wp_roles->add_cap('administrator', 'glm_members_edit_any_member'); + $wp_roles->add_cap('administrator', 'glm_members_delete_any_member'); + $wp_roles->add_cap('administrator', 'glm_members_moderate_any_member_info'); + $wp_roles->add_cap('administrator', 'glm_members_view_my_member'); + $wp_roles->add_cap('administrator', 'glm_members_edit_my_member'); + $wp_roles->add_cap('administrator', 'glm_members_delete_my_member_info'); + $wp_roles->add_cap('administrator', 'glm_members_moderate_my_member_info'); + $wp_roles->add_cap('administrator', 'glm_members_view_my_entity'); + $wp_roles->add_cap('administrator', 'glm_members_edit_my_entity'); + $wp_roles->add_cap('administrator', 'glm_members_delete_my_entity_info'); + $wp_roles->add_cap('administrator', 'glm_members_moderate_my_entity_info'); + $wp_roles->add_cap('administrator', 'glm_members_view_my_entity_info'); + $wp_roles->add_cap('administrator', 'glm_members_edit_my_contact_info'); + + // Role: GLM Members Manager + $wp_roles->add_role('glm_members_manager', 'GLM Members Manager'); + + $wp_roles->add_cap('glm_members_manager', 'glm_members_main_menu'); + $wp_roles->add_cap('glm_members_manager', 'glm_members_member'); + $wp_roles->add_cap('glm_members_manager', 'glm_members_configure'); + $wp_roles->add_cap('glm_members_manager', 'glm_members_shortcodes'); + $wp_roles->add_cap('glm_members_manager', 'glm_members_widget'); + $wp_roles->add_cap('glm_members_manager', 'glm_members_add_new_member'); + $wp_roles->add_cap('glm_members_manager', 'glm_members_view_any_member'); + $wp_roles->add_cap('glm_members_manager', 'glm_members_edit_any_member'); + $wp_roles->add_cap('glm_members_manager', 'glm_members_delete_any_member'); + $wp_roles->add_cap('glm_members_manager', 'glm_members_moderate_any_member_info'); + $wp_roles->add_cap('glm_members_manager', 'glm_members_view_my_member'); + $wp_roles->add_cap('glm_members_manager', 'glm_members_edit_my_member'); + $wp_roles->add_cap('glm_members_manager', 'glm_members_delete_my_member_info'); + $wp_roles->add_cap('glm_members_manager', 'glm_members_moderate_my_member_info'); + $wp_roles->add_cap('glm_members_manager', 'glm_members_view_my_entity'); + $wp_roles->add_cap('glm_members_manager', 'glm_members_edit_my_entity'); + $wp_roles->add_cap('glm_members_manager', 'glm_members_delete_my_entity_info'); + $wp_roles->add_cap('glm_members_manager', 'glm_members_moderate_my_entity_info'); + $wp_roles->add_cap('glm_members_manager', 'glm_members_view_my_entity_info'); + $wp_roles->add_cap('glm_members_manager', 'glm_members_edit_my_contact_info'); + + // Role: GLM Own Entity Manager + $wp_roles->add_role('glm_members_own_entity_manager', 'GLM Own Entity Manager'); + + $wp_roles->add_cap('glm_members_own_entity_manager', 'glm_members_main_menu'); + $wp_roles->add_cap('glm_members_own_entity_manager', 'glm_members_member'); + $wp_roles->add_cap('glm_members_own_entity_manager', 'glm_members_widget'); + $wp_roles->add_cap('glm_members_own_entity_manager', 'glm_members_view_my_member'); + $wp_roles->add_cap('glm_members_own_entity_manager', 'glm_members_edit_my_member'); + $wp_roles->add_cap('glm_members_own_entity_manager', 'glm_members_view_my_entity'); + $wp_roles->add_cap('glm_members_own_entity_manager', 'glm_members_edit_my_entity'); + $wp_roles->add_cap('glm_members_own_entity_manager', 'glm_members_delete_my_entity_info'); + $wp_roles->add_cap('glm_members_own_entity_manager', 'glm_members_moderate_my_entity_info'); + $wp_roles->add_cap('glm_members_own_entity_manager', 'glm_members_view_my_entity_info'); + $wp_roles->add_cap('glm_members_own_entity_manager', 'glm_members_edit_my_contact_info'); + + // Role: GLM Member Contact + $wp_roles->add_role('glm_members_member_contact', 'GLM Member Contact'); + + $wp_roles->add_cap('glm_members_member_contact', 'glm_members_main_menu'); + $wp_roles->add_cap('glm_members_member_contact', 'glm_members_view_my_member'); + $wp_roles->add_cap('glm_members_member_contact', 'glm_members_view_my_entity'); + $wp_roles->add_cap('glm_members_member_contact', 'glm_members_view_my_entity_info'); + $wp_roles->add_cap('glm_members_member_contact', 'glm_members_edit_my_contact_info'); + + // Role: GLM Member Restricted Contact + // Note that there are no default capabilities for a restricted contact + $wp_roles->add_role('glm_members_restricted_contact', 'GLM Member Restricted Contact'); - } } + } @@ -129,7 +214,7 @@ class glmMembersContactsPluginActivate * @return void * @access private */ - private function deleteRoleCapability($capability) + public function deleteRoleCapability($capability) { // Get list of role objects $roleObjects = $GLOBALS['wp_roles']->role_objects; @@ -151,5 +236,3 @@ class glmMembersContactsPluginActivate } - -?> diff --git a/setup/rolesAndCapabilities.php b/setup/rolesAndCapabilities.php deleted file mode 100644 index a57a8b1..0000000 --- a/setup/rolesAndCapabilities.php +++ /dev/null @@ -1,327 +0,0 @@ - - * @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. - */ - - -/* - * Some maintenance items first - */ - -/* -// Un-comment to fully reset all contact roles -remove_role('glm_members_manager'); -remove_role('glm_members_own_entity_manager'); -remove_role('glm_members_member_contact'); -remove_role('glm_members_restricted_contact'); - -// Un-comment the following lines to reset all contacts capabilities to default -$this->deleteRoleCapability('glm_members_login'); -$this->deleteRoleCapability('glm_members_add_new_member'); -$this->deleteRoleCapability('glm_members_view_any_member'); -$this->deleteRoleCapability('glm_members_edit_any_member'); -$this->deleteRoleCapability('glm_members_delete_any_member'); -$this->deleteRoleCapability('glm_members_moderate_any_member_info'); -$this->deleteRoleCapability('glm_members_view_my_member'); -$this->deleteRoleCapability('glm_members_edit_my_member'); -$this->deleteRoleCapability('glm_members_delete_my_member_info'); -$this->deleteRoleCapability('glm_members_moderate_my_member_info'); -$this->deleteRoleCapability('glm_members_view_my_entity'); -$this->deleteRoleCapability('glm_members_edit_my_entity'); -$this->deleteRoleCapability('glm_members_delete_my_entity_info'); -$this->deleteRoleCapability('glm_members_moderate_my_entity_info'); -$this->deleteRoleCapability('glm_members_view_my_entity_info'); -$this->deleteRoleCapability('glm_members_edit_my_contact_info'); -$this->deleteRoleCapability('glm_members_my_edits_moderated'); -*/ - -/* - * Add contacts roles and set capabilities added in main member DB plugin - */ - -// Members Manager - Full control of all members and their data -add_role( - 'glm_members_manager', - 'GLM Members Manager', - array( - 'read' => true, - 'glm_members_main_menu' => true, - 'glm_members_member' => true, - 'glm_members_configure' => true, - 'glm_members_management' => false, - 'glm_members_shortcodes' => true, - 'glm_members_widget' => true - ) -); - -// Own Entity Manager - Full control of own entity (location, facility, activity, ...) -add_role( - 'glm_members_own_entity_manager', - 'GLM Own Entity Manager', - array( - 'read' => true, - 'glm_members_main_menu' => true, - 'glm_members_member' => true, - 'glm_members_configure' => false, - 'glm_members_management' => false, - 'glm_members_shortcodes' => false, - 'glm_members_widget' => true - ) -); - -// Member Contact - Standard contact for own member, location, facility, ... - no edit of member data -add_role( - 'glm_members_member_contact', - 'GLM Member Contact', - array( - 'read' => true, - 'glm_members_main_menu' => true, - 'glm_members_member' => false, - 'glm_members_configure' => false, - 'glm_members_management' => false, - 'glm_members_shortcodes' => false, - 'glm_members_widget' => false - ) -); - -// Restricted Member Contact - No login capability - capabilities aren't used -add_role( - 'glm_members_restricted_contact', - 'GLM Member Restricted Contact', - array( - 'read' => true, - 'glm_members_main_menu' => false, - 'glm_members_member' => false, - 'glm_members_configure' => false, - 'glm_members_management' => false, - 'glm_members_shortcodes' => false, - 'glm_members_widget' => false - ) -); - -/* - * Add contacts capabilities - * - * Note that the glm_members_management capability is created by the main Member DB plugin - */ - -// May log in through members only area -$this->addRoleCapability( - 'glm_members_login', - array( - 'administrator' => true, - 'glm_members_manager' => true, - 'glm_members_own_entity_manager' => true, - 'glm_members_member_contact' => true, - 'glm_members_restricted_contact' => false - ) -); - -// May add new members -$this->addRoleCapability( - 'glm_members_add_new_member', - array( - 'administrator' => true, - 'glm_members_manager' => true, - 'glm_members_own_entity_manager' => false, - 'glm_members_member_contact' => false, - 'glm_members_restricted_contact' => false - ) -); - -// May add view information for any member -$this->addRoleCapability( - 'glm_members_view_any_member', - array( - 'administrator' => true, - 'glm_members_manager' => true, - 'glm_members_own_entity_manager' => false, - 'glm_members_member_contact' => false, - 'glm_members_restricted_contact' => false - ) -); - -// May edit information for any member -$this->addRoleCapability( - 'glm_members_edit_any_member', - array( - 'administrator' => true, - 'glm_members_manager' => true, - 'glm_members_own_entity_manager' => false, - 'glm_members_member_contact' => false, - 'glm_members_restricted_contact' => false - ) -); - -// May delete any member -$this->addRoleCapability( - 'glm_members_delete_any_member', - array( - 'administrator' => true, - 'glm_members_manager' => true, - 'glm_members_own_entity_manager' => false, - 'glm_members_member_contact' => false, - 'glm_members_restricted_contact' => false - ) -); - -// May moderate any member -$this->addRoleCapability( - 'glm_members_moderate_any_member_info', - array( - 'administrator' => true, - 'glm_members_manager' => true, - 'glm_members_own_entity_manager' => false, - 'glm_members_member_contact' => false, - 'glm_members_restricted_contact' => false - ) -); - -// May view information for my own member -$this->addRoleCapability( - 'glm_members_view_my_member', - array( - 'administrator' => true, - 'glm_members_manager' => true, - 'glm_members_own_entity_manager' => true, - 'glm_members_member_contact' => true, - 'glm_members_restricted_contact' => false - ) -); - -// May edit any information for my own member -$this->addRoleCapability( - 'glm_members_edit_my_member', - array( - 'administrator' => true, - 'glm_members_manager' => true, - 'glm_members_own_entity_manager' => true, - 'glm_members_member_contact' => false, - 'glm_members_restricted_contact' => false - ) -); - -// May delete information for my own member -$this->addRoleCapability( - 'glm_members_delete_my_member_info', - array( - 'administrator' => true, - 'glm_members_manager' => true, - 'glm_members_own_entity_manager' => false, - 'glm_members_member_contact' => false, - 'glm_members_restricted_contact' => false - ) -); - -// May moderate any information for my own member -$this->addRoleCapability( - 'glm_members_moderate_my_member_info', - array( - 'administrator' => true, - 'glm_members_manager' => true, - 'glm_members_own_entity_manager' => false, - 'glm_members_member_contact' => false, - 'glm_members_restricted_contact' => false - ) -); - -// May view information for my own entity (i.e. location, facility, activity, ...) -$this->addRoleCapability( - 'glm_members_view_my_entity', - array( - 'administrator' => true, - 'glm_members_manager' => true, - 'glm_members_own_entity_manager' => true, - 'glm_members_member_contact' => true, - 'glm_members_restricted_contact' => false - ) -); - -// May edit any information for my own entity (i.e. location, facility, activity, ...) -$this->addRoleCapability( - 'glm_members_edit_my_entity', - array( - 'administrator' => true, - 'glm_members_manager' => true, - 'glm_members_own_entity_manager' => true, - 'glm_members_member_contact' => false, - 'glm_members_restricted_contact' => false - ) -); - -// May delete any information for my own entity (i.e. location, facility, activity, ...) -$this->addRoleCapability( - 'glm_members_delete_my_entity_info', - array( - 'administrator' => true, - 'glm_members_manager' => true, - 'glm_members_own_entity_manager' => true, - 'glm_members_member_contact' => false, - 'glm_members_restricted_contact' => false - ) -); - -// May moderate any information for my own entity (i.e. location, facility, activity, ...) -$this->addRoleCapability( - 'glm_members_moderate_my_entity_info', - array( - 'administrator' => true, - 'glm_members_manager' => true, - 'glm_members_own_entity_manager' => true, - 'glm_members_member_contact' => false, - 'glm_members_restricted_contact' => false - ) -); - -// May view any information for my own entity (i.e. location, facility, activity, ...) -$this->addRoleCapability( - 'glm_members_view_my_entity_info', - array( - 'administrator' => true, - 'glm_members_manager' => true, - 'glm_members_own_entity_manager' => true, - 'glm_members_member_contact' => true, - 'glm_members_restricted_contact' => false - ) -); - -// May edit own contact information -$this->addRoleCapability( - 'glm_members_edit_my_contact_info', - array( - 'administrator' => true, - 'glm_members_manager' => true, - 'glm_members_own_entity_manager' => true, - 'glm_members_member_contact' => true, - 'glm_members_restricted_contact' => false - ) -); - -// User's changes are moderated -$this->addRoleCapability( - 'glm_members_my_edits_moderated', - array( - 'administrator' => false, - 'glm_members_manager' => false, - 'glm_members_own_entity_manager' => false, - 'glm_members_member_contact' => false, - 'glm_members_restricted_contact' => false - ) -); - -?> \ No newline at end of file -- 2.17.1