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.
111 lines
3.0 KiB
111 lines
3.0 KiB
14 years ago
|
<?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;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|