/** * Processes the configuration files and generates the appropriate ElggRole objects. * * If, for any role definition, there is an already existing role with the same name, * the role permissions will be updated for the given role object. * If there is no previously existing, corresponding role object, it will be created now. * * @param array $roles_array The roles configuration array */ function roles_create_from_config($roles_array) { $options = array('type' => 'object', 'subtype' => 'role'); $roles = elgg_get_entities($options); $existing_roles = array(); foreach ($roles as $role) { $existing_roles[$role->name] = $role; } foreach ($roles_array as $rname => $rdetails) { $current_role = $existing_roles[$rname]; if (elgg_instanceof($current_role, 'object', 'role')) { // Update existing role obejct $current_role->title = elgg_echo($rdetails['title']); $current_role->extends = $rdetails['extends']; $current_role->permissions = serialize($rdetails['permissions']); $current_role->save(); } else { // Create new role object $new_role = new ElggRole(); $new_role->title = elgg_echo($rdetails['title']); $new_role->owner_guid = elgg_get_logged_in_user_guid(); $new_role->container_guid = $new_role->owner_guid; $new_role->access_id = ACCESS_PUBLIC; if (!$new_role->save()) { error_log('Could not create new role $rname'); } else { // Add metadata $new_role->name = $rname; $new_role->extends = $rdetails['extends']; $new_role->permissions = serialize($rdetails['permissions']); } } } }
// Update existing role obejct $current_role->title = $title; $current_role->extends = $ordered_extends; if ($current_role->save()) { system_message(elgg_echo(PLUGIN_ID . ':edit:success', array($name))); $forward_url = $current_role->getURL(); } } else { $site = elgg_get_site_entity(); // Create new role object $new_role = new \ElggRole(); $new_role->title = $title; $new_role->owner_guid = elgg_get_logged_in_user_guid(); $new_role->container_guid = $site->owner_guid; $new_role->access_id = ACCESS_PUBLIC; if (!$new_role->save()) { error_log('Could not create new role $name'); register_error(elgg_echo(PLUGIN_ID . ':edit:error', array($name))); $forward_url = REFERER; } else { // Add metadata $new_role->name = $name; $new_role->extends = $ordered_extends; $new_role->permissions = serialize(array()); system_message(elgg_echo(PLUGIN_ID . ':edit:success', array($name))); $forward_url = $new_role->getURL(); } } // Reset hash so that the cache is reindexed elgg_set_plugin_setting('roles_hash', '', 'roles'); forward($forward_url);