assign('msg', tra('Not enough information to display this page'));
$smarty->display('error.tpl');
die;
}
}
if (empty($_REQUEST['objectType'])) {
$_REQUEST['objectType'] = 'global';
$_REQUEST['objectName'] = '';
$_REQUEST['objectId'] = '';
}
$auto_query_args = [
'referer',
'reloff',
'objectName',
'objectType',
'permType',
'objectId',
'filegals_manager',
'insertion_syntax',
//'show_disabled_features', // this seems to cause issues - the $_GET version overrides the $_POST one...
];
$perm = 'tiki_p_assign_perm_' . preg_replace('/[ +]/', '_', $_REQUEST['objectType']);
if ($_REQUEST['objectType'] == 'wiki page') {
if ($tiki_p_admin_wiki == 'y') {
$special_perm = 'y';
} else {
$info = $tikilib->get_page_info($_REQUEST['objectName']);
$tikilib->get_perm_object($_REQUEST['objectId'], $_REQUEST['objectType'], $info);
}
} elseif ($_REQUEST['objectType'] == 'global') {
$access->check_permission('tiki_p_admin');
} else {
$tikilib->get_perm_object($_REQUEST['objectId'], $_REQUEST['objectType']);
if ($_REQUEST['objectType'] == 'tracker') {
$definition = Tracker_Definition::get($_REQUEST['objectId']);
if ($groupCreatorFieldId = $definition->getWriterGroupField()) {
$smarty->assign('group_tracker', 'y');
}
}
}
if (! ($tiki_p_admin_objects == 'y' || (isset($$perm) && $$perm == 'y') || (isset($special_perm) && $special_perm == 'y'))) {
$smarty->assign('errortype', 401);
$smarty->assign('msg', tra('You do not have permission to assign permissions for this object'));
$smarty->display('error.tpl');
die;
}
if (! isset($_REQUEST['referer'])) {
if (isset($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], 'tiki-objectpermissions.php') === false) {
$_REQUEST['referer'] = $_SERVER['HTTP_REFERER'];
} else {
unset($_REQUEST['referer']);
}
}
if (isset($_REQUEST['referer'])) {
$smarty->assign('referer', $_REQUEST['referer']);
} else {
$smarty->assign('referer', '');
}
$_REQUEST['objectId'] = urldecode($_REQUEST['objectId']);
$_REQUEST['objectType'] = urldecode($_REQUEST['objectType']);
$_REQUEST['parentId'] = ! empty($_REQUEST['parentId']) ? urldecode($_REQUEST['parentId']) : null;
$_REQUEST['permType'] = ! empty($_REQUEST['permType']) ? urldecode($_REQUEST['permType']) : 'global';
$smarty->assign('objectName', $_REQUEST['objectName']);
$smarty->assign('objectId', $_REQUEST['objectId']);
$smarty->assign('objectType', $_REQUEST['objectType']);
$smarty->assign_by_ref('permType', $_REQUEST['permType']);
if ($_REQUEST['objectType'] == 'wiki') {
$_REQUEST['objectType'] = 'wiki page';
}
$objectFactory = Perms_Reflection_Factory::getDefaultFactory();
$currentObject = $objectFactory->get($_REQUEST['objectType'], $_REQUEST['objectId'], $_REQUEST['parentId']);
$permissionApplier = new Perms_Applier;
$permissionApplier->addObject($currentObject);
if ($restrictions = perms_get_restrictions()) {
$permissionApplier->restrictPermissions($restrictions);
}
if ($_REQUEST['objectType'] == 'wiki page') {
$structlib = TikiLib::lib('struct');
$pageInfoTree = $structlib->s_get_structure_pages($structlib->get_struct_ref_id($_REQUEST['objectId']));
if (count($pageInfoTree) > 1) {
$smarty->assign('inStructure', 'y');
}
// If assign to structure is requested, add subelements to the applier
if (! empty($_REQUEST['assignstructure']) && $_REQUEST['assignstructure'] == 'on' && ! empty($pageInfoTree)) {
foreach ($pageInfoTree as $subPage) {
$sub = $objectFactory->get($_REQUEST['objectType'], $subPage['pageName']);
$permissionApplier->addObject($sub);
}
}
$cachelib = TikiLib::lib('cache');
$cachelib->empty_type_cache('menu_');
$cachelib->empty_type_cache('structure_');
}
if ($_REQUEST['objectType'] == 'category' && isset($_REQUEST['propagate_category'])) {
$categlib = TikiLib::lib('categ');
$descendants = $categlib->get_category_descendants($_REQUEST['objectId']);
foreach ($descendants as $child) {
$o = $objectFactory->get($_REQUEST['objectType'], $child, $_REQUEST['objectId']);
$permissionApplier->addObject($o);
}
}
// apply feature filter change
if (isset($_REQUEST['feature_select'])) {
if (! isset($_REQUEST['feature_filter'])) {
$_REQUEST['feature_filter'] = [];
}
$tikilib->set_user_preference($user, 'objectperm_admin_features', serialize($_REQUEST['feature_filter']));
$cookietab = '1';
}
$feature_filter = unserialize($tikilib->get_user_preference($user, 'objectperm_admin_features'));
// apply group filter change
if (isset($_REQUEST['group_select'])) {
if (! isset($_REQUEST['group_filter'])) {
$_REQUEST['group_filter'] = [];
}
$tikilib->set_user_preference($user, 'objectperm_admin_groups', serialize($_REQUEST['group_filter']));
$cookietab = '1';
}
$group_filter = unserialize($tikilib->get_user_preference($user, 'objectperm_admin_groups'));
// Get a list of groups
$groups = $userlib->get_groups(0, -1, 'id_asc', '', '', 'n');
$smarty->assign_by_ref('groups', $groups['data']);
$OBJECTPERM_ADMIN_MAX_GROUPS = 4;
if ($group_filter === false) {
$c = 0;
foreach ($groups['data'] as $g) { // filter out if too many groups and hide Admins by default
if ($c < $OBJECTPERM_ADMIN_MAX_GROUPS && $g['groupName'] != 'Admins') {
$group_filter[] = $g['id'];
$c++;
}
}
if (count($groups['data']) > $OBJECTPERM_ADMIN_MAX_GROUPS) {
$cookietab = '2';
$smarty->assign('groupsFiltered', 'y');
}
$tikilib->set_user_preference($user, 'objectperm_admin_groups', serialize($group_filter));
}
if (isset($_REQUEST['group'])) {
$grp_id = 0;
foreach ($groups['data'] as $grp) {
if ($grp['groupName'] == $_REQUEST['group']) {
$grp_id = $grp['id'];
break;
}
}
if ($grp_id > 0 && ! in_array($grp_id, $group_filter)) {
$group_filter[] = $grp_id;
}
}
// Process the form to assign a new permission to this object
if (isset($_REQUEST['assign']) && ! isset($_REQUEST['quick_perms'])) {
$access->check_authenticity(tr('Are you sure you want to modify permissions?'));
if (isset($_REQUEST['perm']) && ! empty($_REQUEST['perm'])) {
foreach ($_REQUEST['perm'] as $group => $gperms) {
foreach ($gperms as $perm) {
if ($tiki_p_admin_objects != 'y' && ! $userlib->user_has_perm_on_object($user, $_REQUEST['objectId'], $_REQUEST['objectType'], $perm)) {
$smarty->assign('errortype', 401);
$smarty->assign('msg', tra('Permission denied'));
$smarty->display('error.tpl');
die;
}
}
}
}
$newPermissions = get_assign_permissions();
$permissionApplier->apply($newPermissions);
if (isset($_REQUEST['group'])) {
$smarty->assign('groupName', $_REQUEST['group']);
}
//identify permissions changed for feedback message
$newPerms = $_REQUEST['perm'];
$oldPerms = $_REQUEST['old_perm'];
$groupNames = array_unique(array_merge(array_keys($newPerms), array_keys($oldPerms)));
$changed = [];
foreach ($groupNames as $groupName) {
$newPerms[$groupName] = ! isset($newPerms[$groupName]) ? [] : $newPerms[$groupName];
$oldPerms[$groupName] = ! isset($oldPerms[$groupName]) ? [] : $oldPerms[$groupName];
$changed['added'][$groupName] = array_diff($newPerms[$groupName], $oldPerms[$groupName]);
$changed['deleted'][$groupName] = array_diff($oldPerms[$groupName], $newPerms[$groupName]);
}
$groupInheritance = [];
foreach ($groups['data'] as $row) {
if ($group_filter !== false && in_array($row['id'], $group_filter)) {
$groupList[] = $row['groupName'];
$groupInheritance[] = $userlib->get_included_groups($row['groupName']);
}
}
foreach ($changed['added'] as $groupName => $addPerms) { // group messages about permissions added by parent group
if (count($addPerms) == 0) {
continue;
}
$isParentGroup = false;
foreach ($groupInheritance as $index => $gi) {
if (is_array($gi) && in_array($groupName, $gi)) {
$delPerms = $changed['deleted'][$groupList[$index]];
$changed['deleted'][$groupList[$index]] = array_diff($delPerms, $addPerms);
$isParentGroup = true;
}
}
if ($isParentGroup) {
$changed['added'][tr('%0 and all the children groups', $groupName)] = $changed['added'][$groupName];
unset($changed['added'][$groupName]);
}
}
foreach ($changed['deleted'] as $groupName => $delPerms) { // group messages about permissions removed by parent group
if (count($delPerms) == 0) {
continue;
}
$isParentGroup = false;
foreach ($groupInheritance as $index => $gi) {
if (is_array($gi) && in_array($groupName, $gi)) {
$isParentGroup = true;
break;
}
}
if ($isParentGroup) {
$changed['deleted'][tr('%0 and all the children groups', $groupName)] = $changed['deleted'][$groupName];
unset($changed['deleted'][$groupName]);
}
}
if (in_array('tiki_p_admin', $changed['deleted']['Admins'])) {
unset($changed['deleted']['Admins'][array_search('tiki_p_admin', $changed['deleted']['Admins'])]);
}
//clean up array of changed permissions and indicate section for feedback
$permInfo = $userlib->get_enabled_permissions();
$changeCount = 0;
foreach ($changed as $directionName => $directionInfo) {
foreach ($directionInfo as $groupName => $groupInfo) {
if (empty($groupInfo)) {
unset($changed[$directionName][$groupName]);
} else {
foreach ($groupInfo as $no => $p) {
$changed[$directionName][$groupName][$no] = $p . ' (' . $permInfo[$p]['type'] . ')';
$changeCount++;
}
}
}
if (empty($changed[$directionName])) {
unset($changed[$directionName]);
}
}
if ($changeCount > 0) {
Feedback::add(['type' => $_REQUEST['permType'],
'mes' => $changed,
'objname' => $_REQUEST['objectName'],
'objid' => $_REQUEST['objectId'],
'objtype' => $_REQUEST['objectType'],
'count' => $changeCount,
'tpl' => 'perm']);
} else {
Feedback::note(tr('No permissions were changed'));
}
}
if (isset($_REQUEST['remove'])) {
$access->check_authenticity(tra('Are you sure you want to remove the direct permissions from this object?'));
$newPermissions = new Perms_Reflection_PermissionSet;
$permissionApplier->apply($newPermissions);
}
if (isset($_REQUEST['copy'])) {
$newPermissions = get_assign_permissions();
$filter = TikiFilter::get('text');
$to_copy = [
'perms' => $newPermissions->getPermissionArray(),
'object' => $filter->filter($_REQUEST['objectId']),
'type' => $filter->filter($_REQUEST['objectType'])
];
$_SESSION['perms_clipboard'] = $to_copy;
}
if (! empty($_SESSION['perms_clipboard'])) {
$perms_clipboard = $_SESSION['perms_clipboard'];
$smarty->assign(
'perms_clipboard_source',
$perms_clipboard['type'] . (empty($perms_clipboard['object']) ? '' : ' : ') . $perms_clipboard['object']
);
if (isset($_REQUEST['paste'])) {
$access->check_authenticity(tra('Are you sure you want to paste the copied permissions into this object?'));
unset($_SESSION['perms_clipboard']);
$set = new Perms_Reflection_PermissionSet;
if (isset($perms_clipboard['perms'])) {
foreach ($perms_clipboard['perms'] as $group => $gperms) {
foreach ($gperms as $perm) {
$set->add($group, $perm);
}
}
}
$permissionApplier->apply($set);
$smarty->assign('perms_clipboard_source', '');
}
}
// Prepare display
// Get the individual object permissions if any
$displayedPermissions = get_displayed_permissions();
//Quickperms apply {{{
//Test to map permissions of ile galleries into read write admin admin levels.
if ($prefs['feature_quick_object_perms'] == 'y') {
$qperms = quickperms_get_data();
$smarty->assign('quickperms', $qperms);
$quickperms = new Perms_Reflection_Quick;
foreach ($qperms as $type => $data) {
$quickperms->configure($type, $data['data']);
}
$groupNames = [];
foreach ($groups['data'] as $key => $group) {
$groupNames[] = $group['groupName'];
}
$map = $quickperms->getAppliedPermissions($displayedPermissions, $groupNames);
foreach ($groups['data'] as $key => $group) {
$groups['data'][$key]['groupSumm'] = $map[ $group['groupName'] ];
}
if (isset($_REQUEST['assign']) && isset($_REQUEST['quick_perms'])) {
$access->check_authenticity(tr('Are you sure you want to modify permissions?'));
$groups = $userlib->get_groups(0, -1, 'groupName_asc', '', '', 'n');
$userInput = [];
foreach ($groups['data'] as $group) {
$groupNameEncoded = rawurlencode($group['groupName']);
if (isset($_REQUEST['perm_' . $groupNameEncoded])) {
$group = $group['groupName'];
$permission = $_REQUEST['perm_' . $groupNameEncoded];
$userInput[$group] = $permission;
}
}
$current = $currentObject->getDirectPermissions();
$newPermissions = $quickperms->getPermissions($current, $userInput);
if (! $newPermissions->has('Admins', 'tiki_p_admin')) {
$newPermissions->add('Admins', 'tiki_p_admin');
}
$permissionApplier->apply($newPermissions);
$url = $_SERVER['REQUEST_URI'];
$query = array_filter(array_intersect_key($_REQUEST, array_flip(['objectType', 'objectId', 'permType', 'objectName'])));
if ($query) {
$url .= '?' . http_build_query($query, null, '&');
}
$access->redirect($url);
}
}
if (isset($_REQUEST['used_groups'])) {
$group_filter = [];
foreach ($displayedPermissions->getPermissionArray() as $group => $perms) {
$group_filter[] = $group;
$group_filter = array_merge($group_filter, $userlib->get_including_groups($group, 'y'));
}
if (empty($group_filter)) {
$group_filter = ['Anonymous', 'Registered', 'Admins'];
}
foreach ($group_filter as $i => $group) {
$ginfo = $userlib->get_group_info($group);
$group_filter[$i] = $ginfo['id'];
}
$cookietab = 1;
}
// get groupNames etc - TODO: jb will tidy...
//$checkboxInfo = array();
$permGroups = [];
$groupNames = [];
$groupIndices = [];
$groupInheritance = [];
foreach ($groups['data'] as &$row) {
if ($group_filter !== false && in_array($row['id'], $group_filter)) {
$groupNames[] = $row['groupName'];
$permGroups[] = 'perm[' . $row['groupName'] . ']';
$groupInheritance[] = $userlib->get_included_groups($row['groupName']);
$inh = $userlib->get_included_groups($row['groupName']);
$groupIndices[] = $row['groupName'] . '_hasPerm';
$row['in_group_filter'] = 'y';
} else {
$row['in_group_filter'] = 'n';
}
// info for nested group treetable
$parents = array_merge([$row['groupName']], $userlib->get_included_groups($row['groupName']));
$parents = preg_replace('/[\s,]+/', '_', $parents);
$parents = implode(",", array_reverse($parents));
$row['parents'] = $parents;
// More TODO - merge all this into a single array - but that means considerable changes to treetable (soon)
// $checkboxInfo[] = array('name' => $row['groupName'],
// 'key' => 'perm['.$row['groupName'].']',
// 'index' => $groupIndex,
// 'inheritance' => $inh);
}
$smarty->assign('permGroups', $permGroups);
$smarty->assign('permGroupCols', $groupIndices);
$smarty->assign('groupNames', $groupNames);
//$smarty->assign('groupInheritance', $groupInheritance);
// Get the big list of permissions
if (isset($_REQUEST['show_disabled_features']) && ($_REQUEST['show_disabled_features'] == 'on' || $_REQUEST['show_disabled_features'] == 'y')) {
$show_disabled_features = 'y';
} else {
$show_disabled_features = 'n';
}
$smarty->assign('show_disabled_features', $show_disabled_features);
// get "master" list of all perms
$candidates = $userlib->get_permissions(0, -1, 'permName_asc', '', $_REQUEST['permType'], '', $show_disabled_features != 'y' ? true : false);
// list of all features
$ftemp = $userlib->get_permission_types();
$features = [];
foreach ($ftemp as $f) {
$features[] = ['featureName' => $f, 'in_feature_filter' => $feature_filter === false || in_array($f, $feature_filter) ? 'y' : 'n'];
}
$features_enabled = [];
// build $masterPerms list and used (enabled) features
$masterPerms = [];
foreach ($candidates['data'] as $perm) {
$perm['label'] = tra($perm['permDesc']) . ' (' . $perm['permName'] . ')' . '' . tra($perm['level'] . '');
foreach ($groupNames as $index => $groupName) {
$p = $displayedPermissions->has($groupName, $perm['permName']) ? 'y' : 'n';
$perm[$groupName . '_hasPerm'] = $p;
$perm[$groupIndices[$index]] = $p;
}
// work out if specific feature is on
$pref_feature = false;
if (isset($perm['feature_check'])) {
foreach (explode(',', $perm['feature_check']) as $fchk) {
if ($prefs[$fchk] == 'y') {
$pref_feature = true;
break;
}
}
} else { // if no feature check you can't turn them off (?)
$pref_feature = true;
}
if (($feature_filter === false || in_array($perm['type'], $feature_filter))
&& ($restrictions === false || in_array($perm['permName'], $restrictions))
&& $pref_feature
) {
$masterPerms[] = $perm;
}
if ($show_disabled_features != 'y' && ! in_array($perm['type'], $features_enabled)) {
// perms can be dependant on multiple features
if ($pref_feature) {
$features_enabled[] = $perm['type'];
}
}
}
if ($show_disabled_features != 'y') {
$features_filtered = [];
foreach ($features as $f) {
if (in_array($f['featureName'], $features_enabled) && ! in_array($f, $features_filtered)) {
$features_filtered[] = $f;
}
}
$features = $features_filtered;
}
$smarty->assign_by_ref('perms', $masterPerms);
$smarty->assign_by_ref('features', $features);
// Create JS to set up checkboxs (showing group inheritance)
$js = '$("#perms_busy").show();
';
$i = 0;
foreach ($groupNames as $groupName) {
$groupName = addslashes($groupName);
$beneficiaries = '';
foreach ($groupInheritance as $index => $gi) {
if (is_array($gi) && in_array($groupName, $gi)) {
$beneficiaries .= ! empty($beneficiaries) ? ',' : '';
$beneficiaries .= 'input[name="perm[' . addslashes($groupNames[$index]) . '][]"]';
}
}
$js .= "\$('input[name=\"perm[$groupName][]\"]').eachAsync({
delay: 10,
bulk: 0,
";
if ($i == count($groupNames) - 1) {
$js .= "end: function () {
\$('#perms_busy').hide();
},
";
}
$js .= "loop: function() { // each one of this group
if (\$(this).is(':checked')) {
\$('input[value=\"'+\$(this).val()+'\"]'). // other checkboxes of same value (perm)
filter('$beneficiaries'). // which inherit from this
prop('checked',\$(this).is(':checked')). // check and disable
prop('disabled',\$(this).is(':checked'));
}
\$(this).on( 'change', function(e, parent) { // bind click event
if (\$(this).is(':checked')) {
\$('input[value=\"'+\$(this).val()+'\"]'). // same...
filter('$beneficiaries').each(function() {
$(this).
prop('checked',true). // check?
prop('disabled',true). // disable
trigger('change', [this]);
});
} else {
\$('input[value=\"'+\$(this).val()+'\"]'). // same...
filter('$beneficiaries').each(function() {
$(this).
prop('checked',false). // check?
prop('disabled',false). // disable
trigger('change', [this]);
});
}
});
}
});
";
$i++;
} // end of for $groupNames loop
// add cell colouring helpers
$js .= '
$("table.objectperms input[type=checkbox]").change(function () {
var $this = $(this);
var $parent = $this.parent();
if ($this.is(":checked")) {
if ($parent.hasClass("removed")) {
$parent.removeClass("removed");
} else {
$parent.addClass("added");
}
} else {
if ($parent.hasClass("added")) {
$parent.removeClass("added");
} else {
$parent.addClass("removed");
}
}
});
';
$headerlib->add_jq_onready($js);
// setup smarty remarks flags
// Display the template
$smarty->assign('mid', 'tiki-objectpermissions.tpl');
if (isset($_REQUEST['filegals_manager']) && $_REQUEST['filegals_manager'] != '') {
$smarty->assign('filegals_manager', $_REQUEST['filegals_manager']);
$smarty->display('tiki-print.tpl');
} else {
$smarty->display('tiki.tpl');
}
/**
* @return mixed
*/
function get_assign_permissions()
{
global $objectFactory;
// get existing perms
$currentObject = $objectFactory->get($_REQUEST['objectType'], $_REQUEST['objectId'], $_REQUEST['parentId']);
$currentPermissions = $currentObject->getDirectPermissions();
if (count($currentPermissions->getPermissionArray()) === 0) {
// get "default" perms so disabled feature perms don't get removed
$currentPermissions = $currentObject->getParentPermissions();
}
// set any checked ones
if (isset($_REQUEST['perm']) && ! empty($_REQUEST['perm'])) {
foreach ($_REQUEST['perm'] as $group => $gperms) {
foreach ($gperms as $perm) {
$currentPermissions->add($group, $perm);
}
}
}
// unset any old_perms not there now
if (isset($_REQUEST['old_perm'])) {
foreach ($_REQUEST['old_perm'] as $group => $gperms) {
foreach ($gperms as $perm) {
if (! isset($_REQUEST['perm'][$group]) || ! in_array($perm, $_REQUEST['perm'][$group])) {
$currentPermissions->remove($group, $perm);
}
}
}
}
return $currentPermissions;
}
/**
* @return array
*/
function quickperms_get_data()
{
if ($_REQUEST['permType'] == 'file galleries') {
return quickperms_get_filegal();
} else {
return quickperms_get_generic();
}
}
/**
* @return array
*/
function quickperms_get_filegal()
{
return [
'admin' => [
'name' => 'admin',
'data' => [
'tiki_p_admin_file_galleries' => 'tiki_p_admin_file_galleries',
'tiki_p_assign_perm_file_gallery' => 'tiki_p_assign_perm_file_gallery',
'tiki_p_batch_upload_files' => 'tiki_p_batch_upload_files',
'tiki_p_batch_upload_file_dir' => 'tiki_p_batch_upload_file_dir',
'tiki_p_create_file_galleries' => 'tiki_p_create_file_galleries',
'tiki_p_download_files' => 'tiki_p_download_files',
'tiki_p_edit_gallery_file' => 'tiki_p_edit_gallery_file',
'tiki_p_list_file_galleries' => 'tiki_p_list_file_galleries',
'tiki_p_upload_files' => 'tiki_p_upload_files',
'tiki_p_remove_files' => 'tiki_p_remove_files',
'tiki_p_view_fgal_explorer' => 'tiki_p_view_fgal_explorer',
'tiki_p_view_fgal_path' => 'tiki_p_view_fgal_path',
'tiki_p_view_file_gallery' => 'tiki_p_view_file_gallery',
],
],
'write' => [
'name' => 'write',
'data' => [
'tiki_p_batch_upload_files' => 'tiki_p_batch_upload_files',
'tiki_p_batch_upload_file_dir' => 'tiki_p_batch_upload_file_dir',
'tiki_p_create_file_galleries' => 'tiki_p_create_file_galleries',
'tiki_p_download_files' => 'tiki_p_download_files',
'tiki_p_edit_gallery_file' => 'tiki_p_edit_gallery_file',
'tiki_p_list_file_galleries' => 'tiki_p_list_file_galleries',
'tiki_p_upload_files' => 'tiki_p_upload_files',
'tiki_p_remove_files' => 'tiki_p_remove_files',
'tiki_p_view_fgal_explorer' => 'tiki_p_view_fgal_explorer',
'tiki_p_view_fgal_path' => 'tiki_p_view_fgal_path',
'tiki_p_view_file_gallery' => 'tiki_p_view_file_gallery',
],
],
'read' => [
'name' => 'read',
'data' => [
'tiki_p_download_files' => 'tiki_p_download_files',
'tiki_p_list_file_galleries' => 'tiki_p_list_file_galleries',
'tiki_p_view_fgal_explorer' => 'tiki_p_view_fgal_explorer',
'tiki_p_view_fgal_path' => 'tiki_p_view_fgal_path',
'tiki_p_view_file_gallery' => 'tiki_p_view_file_gallery',
],
],
'none' => [
'name' => 'none',
'data' => [
],
],
];
}
/**
* @return array
*/
function quickperms_get_generic()
{
$userlib = TikiLib::lib('user');
$databaseperms = $userlib->get_permissions(0, -1, 'permName_asc', '', $_REQUEST['permType'], '', true);
foreach ($databaseperms['data'] as $perm) {
if ($perm['level'] == 'basic') {
$quickperms_['basic'][$perm['permName']] = $perm['permName'];
} elseif ($perm['level'] == 'registered') {
$quickperms_['registered'][$perm['permName']] = $perm['permName'];
} elseif ($perm['level'] == 'editors') {
$quickperms_['editors'][$perm['permName']] = $perm['permName'];
} elseif ($perm['level'] == 'admin') {
$quickperms_['admin'][$perm['permName']] = $perm['permName'];
}
}
if (! isset($quickperms_['basic'])) {
$quickperms_['basic'] = [];
}
if (! isset($quickperms_['registered'])) {
$quickperms_['registered'] = [];
}
if (! isset($quickperms_['editors'])) {
$quickperms_['editors'] = [];
}
if (! isset($quickperms_['admin'])) {
$quickperms_['admin'] = [];
}
$perms = [];
$perms['basic']['name'] = 'basic';
$perms['basic']['data'] = array_merge($quickperms_['basic']);
$perms['registered']['name'] = 'registered';
$perms['registered']['data'] = array_merge($quickperms_['basic'], $quickperms_['registered']);
$perms['editors']['name'] = 'editors';
$perms['editors']['data'] = array_merge(
$quickperms_['basic'],
$quickperms_['registered'],
$quickperms_['editors']
);
$perms['admin']['name'] = 'admin';
$perms['admin']['data'] = array_merge(
$quickperms_['basic'],
$quickperms_['registered'],
$quickperms_['editors'],
$quickperms_['admin']
);
$perms['none']['name'] = 'none';
$perms['none']['data'] = [];
return $perms;
}
/**
* @return array|bool
*/
function perms_get_restrictions()
{
$userlib = TikiLib::lib('user');
$perms = Perms::get();
if ($perms->admin_objects) {
return false;
}
$masterPerms = $userlib->get_permissions(0, -1, 'permName_asc', '', $_REQUEST['permType']);
$masterPerms = $masterPerms['data'];
$allowed = [];
// filter out non-admin's unavailable perms
foreach ($masterPerms as $perm) {
$name = $perm['permName'];
if ($perms->$name) {
$allowed[] = $name;
}
}
return $allowed;
}
/**
* @return mixed
*/
function get_displayed_permissions()
{
global $objectFactory;
$smarty = TikiLib::lib('smarty');
$currentObject = $objectFactory->get($_REQUEST['objectType'], $_REQUEST['objectId'], $_REQUEST['parentId']);
$displayedPermissions = $currentObject->getDirectPermissions();
$globPerms = $objectFactory->get('global', null)->getDirectPermissions(); // global perms
$comparator = new Perms_Reflection_PermissionComparator($displayedPermissions, new Perms_Reflection_PermissionSet);
$smarty->assign('permissions_displayed', 'direct');
if ($comparator->equal()) {
$parent = $currentObject->getParentPermissions(); // inherited perms (could be category ones)
$comparator = new Perms_Reflection_PermissionComparator($globPerms, $parent);
if ($comparator->equal()) {
$smarty->assign('permissions_displayed', 'global');
} else { // parent not globals, check parent object or category
$parentType = Perms::parentType($_REQUEST['objectType']);
$parentObject = $objectFactory->get($parentType, $_REQUEST['parentId']);
$parentPerms = $parentObject->getDirectPermissions();
$comparator = new Perms_Reflection_PermissionComparator($parentPerms, $parent);
if ($comparator->equal()) {
$smarty->assign('permissions_displayed', 'parent');
$smarty->assign('permissions_parent_id', $_REQUEST['parentId']);
$smarty->assign('permissions_parent_type', $parentType);
$smarty->assign('permissions_parent_name', TikiLib::lib('object')->get_title($parentType, $_REQUEST['parentId']));
} else {
$smarty->assign('permissions_displayed', 'category');
}
}
$displayedPermissions = $parent;
} else { // direct object perms
$comparator = new Perms_Reflection_PermissionComparator($globPerms, $displayedPermissions);
$permissions_added = [];
$permissions_removed = [];
foreach ($comparator->getAdditions() as $p) {
if (! isset($permissions_added[$p[0]])) {
$permissions_added[$p[0]] = [];
}
$permissions_added[$p[0]][] = str_replace('tiki_p_', '', $p[1]);
}
foreach ($comparator->getRemovals() as $p) {
if (! isset($permissions_removed[$p[0]])) {
$permissions_removed[$p[0]] = [];
}
$permissions_removed[$p[0]][] = str_replace('tiki_p_', '', $p[1]);
}
$added = '';
$removed = '';
foreach ($permissions_added as $gp => $pm) {
$added .= '
';
$added .= '' . $gp . ': ' . implode(', ', $pm);
}
foreach ($permissions_removed as $gp => $pm) {
$removed .= '
';
$removed .= '' . $gp . ': ' . implode(', ', $pm);
}
$smarty->assign('permissions_added', $added);
$smarty->assign('permissions_removed', $removed);
TikiLib::lib('header')->add_jq_onready('
var permsAdded = ' . json_encode($permissions_added) . ';
var permsRemoved = ' . json_encode($permissions_removed) . ';
for (var group in permsAdded) {
if (permsAdded.hasOwnProperty(group)) {
for (var i = 0; i < permsAdded[group].length; i++) {
$("input[name=\'perm[" + group + "][]\'][value=\'tiki_p_" + permsAdded[group][i] + "\']").parent().addClass("added");
}
}
}
for (var group in permsRemoved) {
if (permsRemoved.hasOwnProperty(group)) {
for (var i = 0; i < permsRemoved[group].length; i++) {
$("input[name=\'perm[" + group + "][]\'][value=\'tiki_p_" + permsRemoved[group][i] + "\']").parent().addClass("removed");
}
}
}
');
}
return $displayedPermissions;
}