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.
 
 
 
 
 
 

175 lines
6.2 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$
function wikiplugin_group_info()
{
return [
'name' => tra('Group'),
'documentation' => 'PluginGroup',
'description' => tra('Display content based on the user\'s groups or friends'),
'body' => tr('Wiki text to display if conditions are met. The body may contain %0. Text after the marker
will be displayed to users not matching the conditions.', '<code>{ELSE}</code>'),
'prefs' => ['wikiplugin_group'],
'iconname' => 'group',
'filter' => 'wikicontent',
'introduced' => 1,
'tags' => [ 'basic' ],
'params' => [
'groups' => [
'required' => false,
'name' => tra('Allowed Groups'),
'description' => tra('Pipe separated list of groups allowed to view the block.
Example:') . ' <code>Admins|Developers</code>',
'since' => '1',
'filter' => 'groupname',
'default' => ''
],
'notgroups' => [
'required' => false,
'name' => tra('Denied Groups'),
'description' => tra('Pipe-separated list of groups not allowed to view the block.'),
'since' => '1',
'filter' => 'groupname',
'default' => ''
],
'friends' => [
'required' => false,
'name' => tra('Allowed User Friends'),
'description' => tra('Pipe separated list of users whose friends are allowed to view the block.
Example:') . ' <code>admin|johndoe|foo</code>',
'since' => '4.0',
'filter' => 'username',
'default' => ''
],
'pending' => [
'required' => false,
'name' => tra('Allowed Groups Pending Membership'),
'description' => tra('User allowed to view block if membership payment to join group (or pipe-separated
list of groups) is outstanding.'),
'since' => '13.0',
'filter' => 'groupname',
'default' => ''
],
'notpending' => [
'required' => false,
'name' => tra('Allowed Groups Full Membership'),
'description' => tra('User allowed to view block if membership in the group (or pipe-separated list of
groups) is not pending.'),
'since' => '13.0',
'filter' => 'groupname',
'default' => ''
],
],
];
}
function wikiplugin_group($data, $params)
{
// TODO : Re-implement friend filter
global $user, $groupPluginReturnAll;
$tikilib = TikiLib::lib('tiki');
$dataelse = '';
if (strrpos($data, '{ELSE}')) {
$dataelse = substr($data, strrpos($data, '{ELSE}') + 6);
$data = substr($data, 0, strrpos($data, '{ELSE}'));
}
if (isset($groupPluginReturnAll) && $groupPluginReturnAll == true) {
return $data . $dataelse;
}
if (! empty($params['groups'])) {
$groups = explode('|', $params['groups']);
}
if (! empty($params['notgroups'])) {
$notgroups = explode('|', $params['notgroups']);
}
$userPending = [];
if (! empty($params['pending']) || ! empty($params['notpending'])) {
$attributelib = TikiLib::lib('attribute');
$attributes = $attributelib->get_attributes('user', $user);
$userlib = TikiLib::lib('user');
if (! empty($params['pending'])) {
$pending = explode('|', $params['pending']);
foreach ($pending as $pgrp) {
$grpinfo = $userlib->get_group_info($pgrp);
$attname = 'tiki.memberextend.' . $grpinfo['id'];
if (isset($attributes[$attname])) {
$userPending[] = $pgrp;
}
}
}
if (! empty($params['notpending'])) {
$notpending = explode('|', $params['notpending']);
foreach ($notpending as $npgrp) {
$grpinfo = $userlib->get_group_info($npgrp);
$attname = 'tiki.memberextend.' . $grpinfo['id'];
if (! isset($attributes[$attname])) {
$userNotPending[] = $npgrp;
}
}
}
}
if (empty($groups) && empty($notgroups) && empty($pending) && empty($notpending)) {
return '';
}
$userGroups = $tikilib->get_user_groups($user);
$smarty = TikiLib::lib('smarty');
if (count($userGroups) > 1) { //take away the anonymous as everybody who is registered is anonymous
foreach ($userGroups as $key => $grp) {
if ($grp == 'Anonymous') {
$userGroups[$key] = '';
break;
}
}
}
if (! empty($groups) || ! empty($pending)) {
$ok = false;
if (! empty($groups)) {
foreach ($userGroups as $grp) {
if (in_array($grp, $groups)) {
$ok = true;
$smarty->assign('groupValid', 'y');
break;
}
$smarty->assign('groupValid', 'n');
}
}
if (count($userPending) > 0) {
$ok = true;
}
if (! $ok) {
return $dataelse;
}
}
if (! empty($notgroups) || ! empty($notpending)) {
$ok = true;
if (! empty($notgroups)) {
foreach ($userGroups as $grp) {
if (in_array($grp, $notgroups)) {
$ok = false;
$smarty->assign('notgroupValid', 'y');
break;
}
$smarty->assign('notgroupValid', 'n');
}
}
if (isset($userNotPending) && (count($userNotPending) < count($notpending))) {
$ok = false;
}
if (! $ok) {
return $dataelse;
}
}
return $data;
}