You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
3.0 KiB
110 lines
3.0 KiB
<?php |
|
// $Id$ |
|
|
|
function fedora_fesl_check_roles($checkPid,$checkPerm='write') { |
|
global $user; |
|
$ret = FALSE; |
|
if ($user != null) { |
|
$cache_key = 'fedora_fesl_check_roles'.md5($user->name.$checkPid.$checkPerm); |
|
if (($output = cache_get($cache_key))===0) |
|
{ |
|
$roles = $user->roles; |
|
if (in_array('administrator',$roles)) { |
|
$ret = true; |
|
} else |
|
{ |
|
module_load_include('inc', 'fedora_repository', 'api/fedora_item'); |
|
$found = array(); |
|
foreach ($roles as $role) { |
|
if (preg_match('/^(([A-Za-z0-9]|-|\.)+:(([A-Za-z0-9])|-|\.|~|_|(%[0-9A-F]{2}))+)\s+(write|read)/',$role,$matches)) { |
|
$pid = $matches[1]; |
|
$perm = $matches[6]; |
|
|
|
if ($perm == $checkPerm) { |
|
$found[]=$pid; |
|
} |
|
} |
|
} |
|
if (count($found) > 0) { |
|
if (in_array($checkPid,$found)) { |
|
$ret = TRUE; |
|
} |
|
$item=new Fedora_Item($checkPid); |
|
$rels=$item->get_relationships(); |
|
|
|
if (count($rels) > 0) { |
|
foreach ($rels as $rel) { |
|
$ret = $ret || fedora_fesl_check_roles($rel['object'],$checkPerm); |
|
} |
|
} |
|
} |
|
} |
|
|
|
cache_set($cache_key,$ret,'cache',time()+variable_get('fedora_image_blocks_cache_time',3600)); |
|
|
|
} else { |
|
if (is_object($output)) |
|
{ |
|
$ret=$output->data; |
|
} |
|
} |
|
} |
|
return $ret; |
|
} |
|
|
|
function fedora_fesl_block($op = 'list', $delta = 0, $edit = array()) { |
|
// The $op parameter determines what piece of information is being requested. |
|
switch ($op) { |
|
case 'list': |
|
// If $op is "list", we just need to return a list of block descriptions. |
|
// This is used to provide a list of possible blocks to the administrator, |
|
// end users will not see these descriptions. |
|
$blocks[0] = array( |
|
'info' => t('FeSL Collections Listing Block'), |
|
); |
|
|
|
|
|
return $blocks; |
|
case 'configure': |
|
$form = array(); |
|
switch ($delta) { |
|
case 0: |
|
/* $form['fedora_image_rotator_block_numimages'] = array( |
|
'#type'=>'textfield', |
|
'#title' => t('The number of images to display in the block.'), |
|
'#default_value' => variable_get('fedora_image_rotator_block_numimages',1));*/ |
|
break; |
|
|
|
} |
|
|
|
return $form; |
|
case 'save': |
|
// If $op is "save", we need to save settings from the configuration form. |
|
// Since the first block is the only one that allows configuration, we |
|
// need to check $delta to make sure we only save it. |
|
switch ($delta) { |
|
case 0: |
|
// variable_set('fedora_image_rotator_block_query', $edit['fedora_image_rotator_block_query']); |
|
break; |
|
|
|
|
|
} |
|
return; |
|
case 'view': default: |
|
// If $op is "view", then we need to generate the block for display |
|
// purposes. The $delta parameter tells us which block is being requested. |
|
switch ($delta) { |
|
case 0: |
|
module_load_include('inc', 'fedora_fesl', 'fesl_block'); |
|
$block['subject'] = t('My Collections'); |
|
$block['content'] = _fedora_fesl_block_content(); |
|
break; |
|
|
|
} |
|
|
|
return $block; |
|
} |
|
} |
|
|
|
|
|
|
|
|