private function realApply($object, $current, $target) { $comparator = new Perms_Reflection_PermissionComparator($current, $target); foreach ($comparator->getAdditions() as $addition) { list($group, $permission) = $addition; $this->attempt($object, 'add', $group, $permission); } foreach ($comparator->getRemovals() as $removal) { list($group, $permission) = $removal; $this->attempt($object, 'remove', $group, $permission); } }
function testIdenticalHasNoDifferences() { $a = new Perms_Reflection_PermissionSet(); $a->add('Anonymous', 'view'); $b = new Perms_Reflection_PermissionSet(); $b->add('Anonymous', 'view'); $comparator = new Perms_Reflection_PermissionComparator($a, $b); $this->assertEquals(array(), $comparator->getAdditions()); $this->assertEquals(array(), $comparator->getRemovals()); }
/** * @return mixed */ function get_displayed_permissions() { global $objectFactory, $smarty; $currentObject = $objectFactory->get($_REQUEST['objectType'], $_REQUEST['objectId']); $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()) { // parent == globals $smarty->assign('permissions_displayed', 'parent'); } else { // parent not globals, so must be category $smarty->assign('permissions_displayed', 'category'); } $displayedPermissions = $parent; } else { // direct object perms $comparator = new Perms_Reflection_PermissionComparator($globPerms, $displayedPermissions); $permissions_added = array(); $permissions_removed = array(); foreach ($comparator->getAdditions() as $p) { if (!isset($permissions_added[$p[0]])) { $permissions_added[$p[0]] = array(); } $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]] = array(); } $permissions_removed[$p[0]][] = str_replace('tiki_p_', '', $p[1]); } $added = ''; $removed = ''; foreach ($permissions_added as $gp => $pm) { $added .= '<br />'; $added .= '<strong>' . $gp . ':</strong> ' . implode(', ', $pm); } foreach ($permissions_removed as $gp => $pm) { $removed .= '<br />'; $removed .= '<strong>' . $gp . ':</strong> ' . 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; }
function get_displayed_permissions() { global $objectFactory, $smarty; $currentObject = $objectFactory->get($_REQUEST['objectType'], $_REQUEST['objectId']); $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() ) { // parent == globals $smarty->assign('permissions_displayed', 'parent'); } else { // parent not globals, so must be category $smarty->assign('permissions_displayed', 'category'); } $displayedPermissions = $parent; } else { // direct object perms $comparator = new Perms_Reflection_PermissionComparator($globPerms, $displayedPermissions); $permissions_added = array(); $permissions_removed = array(); foreach ($comparator->getAdditions() as $p) { if (!isset($permissions_added[$p[0]])) { $permissions_added[$p[0]] = array(); } $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]] = array(); } $permissions_removed[$p[0]][] = str_replace('tiki_p_', '', $p[1]); } $added = ''; $removed = ''; foreach ($permissions_added as $gp => $pm) { $added .= '<br />'; $added .= '<strong>' . $gp . ':</strong> ' . implode(', ', $pm); } foreach ($permissions_removed as $gp => $pm) { $removed .= '<br />'; $removed .= '<strong>' . $gp . ':</strong> ' . implode(', ', $pm); } $smarty->assign('permissions_added', $added); $smarty->assign('permissions_removed', $removed); } return $displayedPermissions; }