Example #1
0
 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;
}