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.
 
 
 
 
 
 

74 lines
2.3 KiB

<?php
// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
//
// All Rights Reserved. See copyright.txt for details and a complete list of authors.
// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
// $Id$
/**
* Smarty plugin
* @package Smarty
* @subpackage plugins
*
* \brief Smarty plugin to display content only to some groups, friends or combination of all per specified user(s)
* (if user is not specified, current user is used)
* ex.: {display groups='Anonymous,-Registered,foo' friends=$f_42[ error='You may not see this item']}$f_1...$f_9///else///Become friend with $_42 first{/display}
* TODO : Re-implement friend filter
*/
function smarty_block_display($params, $content, $smarty, &$repeat)
{
global $prefs, $user;
$userlib = TikiLib::lib('user');
if ($repeat) {
return;
}
$ok = true;
if (! empty($params['groups'])) {
$groups = explode(',', $params['groups']);
$userGroups = $userlib->get_user_groups($user);
}
$content = explode('///else///', $content);
if (! empty($params['error'])) {
$errmsg = $params['error'];
} elseif (empty($params['error']) && isset($groups)) {
$errmsg = '';
} else {
$errmsg = 'Smarty block.display.php: Missing error param';
}
$anon = false; // see the workaround to exclude Registered below
foreach ($groups as $gr) {
$gr = trim($gr);
if ($gr == 'Anonymous') {
$anon = true;
}
if (substr($gr, 0, 1) == '-') {
$nogr = substr($gr, 1);
if ((in_array($nogr, $userGroups) && $nogr != 'Registered') or (in_array($nogr, $userGroups) && $nogr == 'Registered' && $anon == true)) {
// workaround to display to Anonymous only if Registered excluded (because Registered includes Anonymous always)
$ok = false;
$anon = false;
}
} elseif (! in_array($gr, $userGroups) && $anon == false) {
$ok = false;
} else {
$ok = true;
}
}
/* is it ok ? */
if (! $ok) {
if (isset($content[1])) {
return $content[1];
} else {
return $errmsg;
}
} else {
return $content[0];
}
}