/** * Process the form submission. * * @return void */ public function postProcess() { $params = $this->controller->exportValues($this->_name); $permissionsArray = self::getPermissionArray(); // Function to get Wordpress roles global $wp_roles; if (!isset($wp_roles)) { $wp_roles = new WP_Roles(); } foreach ($wp_roles->role_names as $role => $name) { $roleObj = $wp_roles->get_role($role); //Remove all civicrm capabilities for the role, as there may be some capabilities checkbox unticked foreach ($permissionsArray as $key => $capability) { $roleObj->remove_cap($key); } //Add the selected wordpress capabilities for the role $rolePermissions = $params[$role]; if (!empty($rolePermissions)) { foreach ($rolePermissions as $key => $capability) { $roleObj->add_cap($key); } } if ($role == 'anonymous_user') { // Get the permissions into a format that matches what we get from WP $allWarningPermissions = CRM_Core_Permission::getAnonymousPermissionsWarnings(); foreach ($allWarningPermissions as $key => $permission) { $allWarningPermissions[$key] = CRM_utils_String::munge(strtolower($permission)); } $warningPermissions = array_intersect($allWarningPermissions, array_keys($rolePermissions)); $warningPermissionNames = array(); foreach ($warningPermissions as $permission) { $warningPermissionNames[$permission] = $permissionsArray[$permission]; } if (!empty($warningPermissionNames)) { CRM_Core_Session::setStatus(ts('The %1 role was assigned one or more permissions that may prove dangerous for users of that role to have. Please reconsider assigning %2 to them.', array(1 => $wp_roles->role_names[$role], 2 => implode(', ', $warningPermissionNames))), ts('Unsafe Permission Settings')); } } } // FIXME // Changed the 'access_civicrm_nav_link' capability in civicrm.php file // But for some reason, if i remove 'Access CiviCRM' administrator and save, it is showing // 'You do not have sufficient permissions to access this page' // which should not happen for Super Admin and Administrators, as checking permissions for Super // Admin and Administrators always gives TRUE wp_civicrm_capability(); CRM_Core_Session::setStatus("", ts('Wordpress Access Control Updated'), "success"); // rebuild the menus to comply with the new permisssions/capabilites CRM_Core_Invoke::rebuildMenuAndCaches(); CRM_Utils_System::redirect('admin.php?page=CiviCRM&q=civicrm/admin/access&reset=1'); CRM_Utils_System::civiExit(); }
/** * Function to process the form * * @access public * @return void */ public function postProcess() { $params = $this->controller->exportValues($this->_name); $permissionsArray = self::getPermissionArray(); // Function to get Wordpress roles global $wp_roles; if (!isset($wp_roles)) { $wp_roles = new WP_Roles(); } foreach ($wp_roles->role_names as $role => $name) { $roleObj = $wp_roles->get_role($role); //Remove all civicrm capabilities for the role, as there may be some capabilities checkbox unticked foreach ($permissionsArray as $key => $capability) { $roleObj->remove_cap($key); } //Add the selected wordpress capabilities for the role $rolePermissions = $params[$role]; if (!empty($rolePermissions)) { foreach ($rolePermissions as $key => $capability) { $roleObj->add_cap($key); } } } // FIXME // Changed the 'access_civicrm_nav_link' capability in civicrm.php file // But for some reason, if i remove 'Access CiviCRM' administrator and save, it is showing // 'You do not have sufficient permissions to access this page' // which should not happen for Super Admin and Administrators, as checking permissions for Super // Admin and Administrators always gives TRUE wp_civicrm_capability(); CRM_Core_Session::setStatus("", ts('Wordpress Access Control Updated'), "success"); // rebuild the menus to comply with the new permisssions/capabilites CRM_Core_Invoke::rebuildMenuAndCaches(); CRM_Utils_System::redirect('admin.php?page=CiviCRM&q=civicrm/admin/access&reset=1'); CRM_Utils_System::civiExit(); }