Skip to content

Commit

Permalink
Updates to roles plugin (finalized role based menu extensions)
Browse files Browse the repository at this point in the history
  • Loading branch information
szepeshazi committed Feb 8, 2012
1 parent 445698b commit 6e3f1f5
Show file tree
Hide file tree
Showing 3 changed files with 120 additions and 12 deletions.
49 changes: 42 additions & 7 deletions lib/config.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,39 +3,74 @@


function roles_get_roles_config() {

$roles = array(

'affiliate' => array(
'name' => 'roles:nd:affiliate',
'extends' => array('adherent'),
'permissions' => array(

'actions' => array(
'group/save' => 'deny',
'group/delete' => 'deny'

'group/save' => array('rule' => 'deny'),

'group/delete' => array('rule' => 'deny')
),

'views' => array(
),

'pages' => array(
'group/new/$guid' => 'deny'
'group/new/$guid' => array('rule' => 'deny')
),

'menus' => array(
'site:blog' => 'allow'

'site::blog' => array('rule' => 'allow'),

'site::activity' => array(
'rule' => 'replace',
'menu_item' => array(
'name' => 'mygroups',
'text' => 'Any of my Groups',
'href' => 'groups/member/{$self_username}',
)
),

'site' => array(
'rule' => 'append',
'menu_item' => array(
'name' => 'books',
'text' => 'Books',
'href' => 'books/all',
)
),
),

'entities' => array(
),
)
),

'adherent' => array(
'name' => 'roles:nd:adherent',
'extends' => array(),
'permissions' => array(

'actions' => array(
'group/save' => 'deny'
'group/save' => array('rule' => 'deny')
),

'views' => array(
),

'pages' => array(
'group/new/{$username}' => 'deny'
'group/new/{$username}' => array('rule' => 'deny')
),

'menus' => array(
'site:blog' => 'deny'
'site::blog' => array('rule' => 'deny')
),
)
),
Expand Down
64 changes: 63 additions & 1 deletion lib/roles.php
Original file line number Diff line number Diff line change
Expand Up @@ -162,4 +162,66 @@ function roles_check_update() {
roles_create_from_config();
elgg_set_plugin_setting('roles_hash', $current_hash);
}
}
}


/******************* Helper functions for menu operations ***********************/

function roles_replace_menu($menu_name, $item_name, $menu_obj) {
global $CONFIG;

if (false !== $index = roles_find_menu_index($menu_name, $item_name)) {
array_splice($CONFIG->menus[$menu_name], $index, 1, array($menu_obj));
}
}

function roles_find_menu_index($menu_name, $item_name) {
global $CONFIG;
$index = -1;
$found = false;

if (is_array($CONFIG->menus[$menu_name])) {
$count = count($CONFIG->menus[$menu_name]);
while(!$found && (++$index < $count)) {
if ($CONFIG->menus[$menu_name][$index]->getName() === $item_name) {
$found = true;
}
}
}

return $found ? $index : false;
}


function roles_prepare_menu_vars($vars) {
$user = elgg_get_logged_in_user_entity();
$self_username = $user->username;
$self_guid = $user->guid;

$prepared_vars = $vars;
if (isset($prepared_vars['href'])) {
$prepared_vars['href'] = str_replace('{$self_username}', $self_username, $prepared_vars['href']);
$prepared_vars['href'] = str_replace('{$self_guid}', $self_guid, $prepared_vars['href']);
}

return $prepared_vars;
}



















19 changes: 15 additions & 4 deletions start.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,14 +47,25 @@ function roles_menus_permissions($event, $type, $object) {

if (elgg_instanceof($role, 'object', 'role')) {
$role_perms = roles_get_role_permissions($role, 'menus');
// error_log(print_r($role_perms, 1));
if (is_array($role_perms) && !empty($role_perms)) {
foreach ($role_perms as $menu => $permission) {
switch ($permission) {
foreach ($role_perms as $menu => $perm_details) {
switch ($perm_details['rule']) {
case 'deny':
list($menu_name, $item_name) = explode(':', $menu);
list($menu_name, $item_name) = explode('::', $menu);
elgg_unregister_menu_item($menu_name, $item_name);
break;
case 'append':
$menu_item = roles_prepare_menu_vars($perm_details['menu_item']);
$menu_obj = ElggMenuItem::factory($menu_item);
elgg_register_menu_item($menu, $menu_obj);
break;
case 'replace':
list($menu_name, $item_name) = explode('::', $menu);
$menu_item = roles_prepare_menu_vars($perm_details['menu_item']);
$menu_obj = ElggMenuItem::factory($menu_item);
roles_replace_menu($menu_name, $item_name, $menu_obj);
break;
case 'allow':
default:
break;
}
Expand Down

0 comments on commit 6e3f1f5

Please sign in to comment.