Reworked how we were setting up roles and capabilities on activate.
authorChuck Scott <cscott@gaslightmedia.com>
Fri, 23 Jun 2017 19:30:11 +0000 (15:30 -0400)
committerChuck Scott <cscott@gaslightmedia.com>
Fri, 23 Jun 2017 19:30:11 +0000 (15:30 -0400)
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
setup/rolesAndCapabilities.php [deleted file]

index 775cbd5..15840bb 100644 (file)
@@ -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 (file)
index a57a8b1..0000000
+++ /dev/null
@@ -1,327 +0,0 @@
-<?php
-/**
- * Gaslight Media Members Database
- * Member Contact Set Add-On Roles and Permissions
- *
- * PHP version 5.5
- *
- * @category glmWordPressPlugin
- * @package  glmMembersDatabase
- * @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.
- */
-
-
-/*
- * 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