From: <lph...@us...> - 2009-09-29 18:39:49
|
Revision: 21891 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=21891&view=rev Author: lphuberdeau Date: 2009-09-29 18:39:37 +0000 (Tue, 29 Sep 2009) Log Message: ----------- [MOD] Refactoring some of the logic to clean up the code Modified Paths: -------------- trunk/tiki-objectpermissions.php Added Paths: ----------- trunk/lib/core/lib/Perms/Applier.php trunk/lib/core/lib/Perms/Reflection/ trunk/lib/core/lib/Perms/Reflection/Category.php trunk/lib/core/lib/Perms/Reflection/Container.php trunk/lib/core/lib/Perms/Reflection/Factory.php trunk/lib/core/lib/Perms/Reflection/Global.php trunk/lib/core/lib/Perms/Reflection/Object.php trunk/lib/core/lib/Perms/Reflection/PermissionComparator.php trunk/lib/core/lib/Perms/Reflection/PermissionSet.php trunk/lib/core/lib/Perms/Reflection/Quick.php trunk/lib/test/core/Perms/ApplierTest.php trunk/lib/test/core/Perms/Reflection/ trunk/lib/test/core/Perms/Reflection/FactoryTest.php trunk/lib/test/core/Perms/Reflection/PermissionComparatorTest.php trunk/lib/test/core/Perms/Reflection/PermissionSetTest.php trunk/lib/test/core/Perms/Reflection/QuickTest.php Added: trunk/lib/core/lib/Perms/Applier.php =================================================================== --- trunk/lib/core/lib/Perms/Applier.php (rev 0) +++ trunk/lib/core/lib/Perms/Applier.php 2009-09-29 18:39:37 UTC (rev 21891) @@ -0,0 +1,52 @@ +<?php + +require_once 'lib/core/lib/Perms/Reflection/Container.php'; +require_once 'lib/core/lib/Perms/Reflection/PermissionSet.php'; +require_once 'lib/core/lib/Perms/Reflection/PermissionComparator.php'; + +class Perms_Applier +{ + private $objects = array(); + + function addObject( Perms_Reflection_Container $object ) { + $this->objects[] = $object; + } + + function apply( Perms_Reflection_PermissionSet $set ) { + foreach( $this->objects as $object ) { + $this->applyOnObject( $object, $set ); + } + } + + private function applyOnObject( $object, $set ) { + $current = $object->getDirectPermissions(); + $parent = $object->getParentPermissions(); + + if( $parent ) { + $comparator = new Perms_Reflection_PermissionComparator( $set, $parent ); + + if( $comparator->equal() ) { + $this->realApply( $object, $current, new Perms_Reflection_PermissionSet ); + return; + } + } + + $this->realApply( $object, $current, $set ); + } + + private function realApply( $object, $current, $target ) { + $comparator = new Perms_Reflection_PermissionComparator( $current, $target ); + + foreach( $comparator->getAdditions() as $addition ) { + list( $group, $permission ) = $addition; + $object->add( $group, $permission ); + } + + foreach( $comparator->getRemovals() as $removal ) { + list( $group, $permission ) = $removal; + $object->remove( $group, $permission ); + } + } +} + +?> Added: trunk/lib/core/lib/Perms/Reflection/Category.php =================================================================== --- trunk/lib/core/lib/Perms/Reflection/Category.php (rev 0) +++ trunk/lib/core/lib/Perms/Reflection/Category.php 2009-09-29 18:39:37 UTC (rev 21891) @@ -0,0 +1,12 @@ +<?php + +require_once 'lib/core/lib/Perms/Reflection/Object.php'; + +class Perms_Reflection_Category extends Perms_Reflection_Object +{ + function getParentPermissions() { + return $this->factory->get( 'global', null )->getDirectPermissions(); + } +} + +?> Added: trunk/lib/core/lib/Perms/Reflection/Container.php =================================================================== --- trunk/lib/core/lib/Perms/Reflection/Container.php (rev 0) +++ trunk/lib/core/lib/Perms/Reflection/Container.php 2009-09-29 18:39:37 UTC (rev 21891) @@ -0,0 +1,12 @@ +<?php + +interface Perms_Reflection_Container +{ + function add( $group, $permission ); + function remove( $group, $permission ); + + function getDirectPermissions(); + function getParentPermissions(); +} + +?> Added: trunk/lib/core/lib/Perms/Reflection/Factory.php =================================================================== --- trunk/lib/core/lib/Perms/Reflection/Factory.php (rev 0) +++ trunk/lib/core/lib/Perms/Reflection/Factory.php 2009-09-29 18:39:37 UTC (rev 21891) @@ -0,0 +1,46 @@ +<?php + +require_once 'lib/core/lib/Perms/Reflection/Object.php'; +require_once 'lib/core/lib/Perms/Reflection/Global.php'; +require_once 'lib/core/lib/Perms/Reflection/Category.php'; + +class Perms_Reflection_Factory +{ + private $fallback; + private $registry = array(); + + function register( $type, $class ) { + $this->registry[ $type ] = $class; + } + + function registerFallback( $class ) { + $this->fallback = $class; + } + + function get( $type, $object ) { + if( ! $class = $this->getRegistered( $type ) ) { + $class = $this->fallback; + } + + if( $class ) { + return new $class( $this, $type, $object ); + } + } + + private function getRegistered( $type ) { + if( isset( $this->registry[ $type ] ) ) { + return $this->registry[ $type ]; + } + } + + public static function getDefaultFactory() { + $factory = new self; + $factory->register( 'global', 'Perms_Reflection_Global' ); + $factory->register( 'category', 'Perms_Reflection_Category' ); + $factory->registerFallback( 'Perms_Reflection_Object' ); + + return $factory; + } +} + +?> Added: trunk/lib/core/lib/Perms/Reflection/Global.php =================================================================== --- trunk/lib/core/lib/Perms/Reflection/Global.php (rev 0) +++ trunk/lib/core/lib/Perms/Reflection/Global.php 2009-09-29 18:39:37 UTC (rev 21891) @@ -0,0 +1,41 @@ +<?php + +require_once 'lib/core/lib/Perms/Reflection/Container.php'; +require_once 'lib/core/lib/Perms/Reflection/PermissionSet.php'; + +class Perms_Reflection_Global implements Perms_Reflection_Container +{ + private $permissions; + private $factory; + + function __construct( $factory, $type, $object ) { + $this->factory = $factory; + + $db = TikiDb::get(); + $this->permissions = new Perms_Reflection_PermissionSet; + + $all = $db->fetchAll( 'SELECT `groupName`, `permName` FROM `users_grouppermissions`' ); + foreach( $all as $row ) { + $this->permissions->add( $row['groupName'], $row['permName'] ); + } + } + + function add( $group, $permission ) { + global $userlib; + $userlib->assign_permission_to_group( $permission, $group ); + } + + function remove( $group, $permission ) { + global $userlib; + $userlib->remove_permission_from_group( $permission, $group ); + } + + function getDirectPermissions() { + return $this->permissions; + } + + function getParentPermissions() { + } +} + +?> Added: trunk/lib/core/lib/Perms/Reflection/Object.php =================================================================== --- trunk/lib/core/lib/Perms/Reflection/Object.php (rev 0) +++ trunk/lib/core/lib/Perms/Reflection/Object.php 2009-09-29 18:39:37 UTC (rev 21891) @@ -0,0 +1,75 @@ +<?php + +require_once 'lib/core/lib/Perms/Reflection/Container.php'; +require_once 'lib/core/lib/Perms/Reflection/PermissionSet.php'; + +class Perms_Reflection_Object implements Perms_Reflection_Container +{ + protected $factory; + protected $type; + protected $object; + + function __construct( $factory, $type, $object ) { + $this->factory = $factory; + $this->type = $type; + $this->object = $object; + } + + function add( $group, $permission ) { + global $userlib; + $userlib->assign_object_permission( $group, $this->object, $this->type, $permission ); + } + + function remove( $group, $permission ) { + global $userlib; + $userlib->remove_object_permission( $group, $this->object, $this->type, $permission ); + } + + function getDirectPermissions() { + global $userlib; + $set = new Perms_Reflection_PermissionSet; + + $permissions = $userlib->get_object_permissions( $this->object, $this->type ); + foreach( $permissions as $row ) { + $set->add( $row['groupName'], $row['permName'] ); + } + + return $set; + } + + function getParentPermissions() { + if( $permissions = $this->getCategoryPermissions() ) { + return $permissions; + } else { + return $this->factory->get( 'global', null )->getDirectPermissions(); + } + } + + private function getCategoryPermissions() { + $categories = $this->getCategories(); + + $set = new Perms_Reflection_PermissionSet; + $count = 0; + foreach( $categories as $category ) { + $category = $this->factory->get( 'category', $category ); + foreach( $category->getDirectPermissions()->getPermissionArray() as $group => $perms ) { + foreach( $perms as $perm ) { + $set->add( $group, $perm ); + ++$count; + } + } + } + + if( $count != 0 ) { + return $set; + } + } + + private function getCategories() { + global $categlib; require_once 'lib/categories/categlib.php'; + + return $categlib->get_object_categories( $this->type, $this->object ); + } +} + +?> Added: trunk/lib/core/lib/Perms/Reflection/PermissionComparator.php =================================================================== --- trunk/lib/core/lib/Perms/Reflection/PermissionComparator.php (rev 0) +++ trunk/lib/core/lib/Perms/Reflection/PermissionComparator.php 2009-09-29 18:39:37 UTC (rev 21891) @@ -0,0 +1,41 @@ +<?php + +class Perms_Reflection_PermissionComparator +{ + private $additions; + private $removals; + + function __construct( $left, $right ) { + $this->additions = $this->compare( $right, $left ); + $this->removals = $this->compare( $left, $right ); + } + + function equal() { + return empty( $this->additions ) && empty( $this->removals ); + } + + function getAdditions() { + return $this->additions; + } + + function getRemovals() { + return $this->removals; + } + + private function compare( $left, $right ) { + $out = array(); + + $all = $left->getPermissionArray(); + foreach( $all as $group => $permissions ) { + foreach( $permissions as $perm ) { + if( ! $right->has( $group, $perm ) ) { + $out[] = array( $group, $perm ); + } + } + } + + return $out; + } +} + +?> Added: trunk/lib/core/lib/Perms/Reflection/PermissionSet.php =================================================================== --- trunk/lib/core/lib/Perms/Reflection/PermissionSet.php (rev 0) +++ trunk/lib/core/lib/Perms/Reflection/PermissionSet.php 2009-09-29 18:39:37 UTC (rev 21891) @@ -0,0 +1,37 @@ +<?php + +class Perms_Reflection_PermissionSet +{ + private $set = array(); + + function add( $group, $permission ) { + if( is_array( $permission ) ) { + foreach( $permission as $p ) { + $this->addOne( $group, $p ); + } + } else { + $this->addOne( $group, $permission ); + } + } + + private function addOne( $group, $permission ) { + if( ! $this->has( $group, $permission ) ) { + if( ! isset( $this->set[ $group ] ) ) { + $this->set[ $group ] = array(); + } + + $this->set[ $group ][] = $permission; + } + } + + function has( $group, $permission ) { + return isset( $this->set[ $group ] ) + && in_array( $permission, $this->set[ $group ] ); + } + + function getPermissionArray() { + return $this->set; + } +} + +?> Added: trunk/lib/core/lib/Perms/Reflection/Quick.php =================================================================== --- trunk/lib/core/lib/Perms/Reflection/Quick.php (rev 0) +++ trunk/lib/core/lib/Perms/Reflection/Quick.php 2009-09-29 18:39:37 UTC (rev 21891) @@ -0,0 +1,91 @@ +<?php + +require_once 'lib/core/lib/Perms/Reflection/PermissionSet.php'; + +class Perms_Reflection_Quick +{ + private $configured = array(); + private $inheritance = array( + 'registered' => array( 'basic' ), + 'editors' => array( 'basic', 'registered' ), + ); + + function configure( $name, array $permissions ) { + if( $name != 'none' && $name != 'userdefined' ) { + $this->configured[$name] = $permissions; + } + } + + function getPermissions( Perms_Reflection_PermissionSet $current, array $groupMap ) { + $out = new Perms_Reflection_PermissionSet; + + foreach( $groupMap as $group => $quick ) { + $this->addPermissions( $out, $current, $group, $quick ); + } + + return $out; + } + + private function addPermissions( $out, $current, $group, $quick ) { + if( $quick == 'userdefined' ) { + $array = $current->getPermissionArray(); + + if( isset( $array[$group] ) ) { + $out->add( $group, $array[$group] ); + } + } else { + $out->add( $group, $this->getTypePermissions( $quick ) ); + } + } + + private function getTypePermissions( $quick ) { + $out = array(); + + if( isset( $this->inheritance[$quick] ) ) { + foreach( $this->inheritance[$quick] as $parent ) { + $out = array_merge( $out, $this->getDirectTypePermissions( $parent ) ); + } + } + + $out = array_merge( $out, $this->getDirectTypePermissions( $quick ) ); + return $out; + } + + private function getDirectTypePermissions( $type ) { + if( isset( $this->configured[$type] ) ) { + return $this->configured[$type]; + } else { + return array(); + } + } + + function getAppliedPermissions( Perms_Reflection_PermissionSet $current, array $groupList ) { + $out = array(); + $permissions = $current->getPermissionArray(); + + foreach( $groupList as $group ) { + if( isset( $permissions[$group] ) ) { + $out[$group] = $this->getType( $permissions[$group] ); + } else { + $out[$group] = 'none'; + } + } + + return $out; + } + + private function getType( $permissions ) { + foreach( array_keys( $this->configured ) as $name ) { + $candidate = $this->getTypePermissions( $name ); + + if( count( array_diff( $candidate, $permissions ) ) == 0 + && count( array_diff( $permissions, $candidate ) ) == 0 ) { + return $name; + } + } + + return 'userdefined'; + } +} + +?> Added: trunk/lib/test/core/Perms/ApplierTest.php =================================================================== --- trunk/lib/test/core/Perms/ApplierTest.php (rev 0) +++ trunk/lib/test/core/Perms/ApplierTest.php 2009-09-29 18:39:37 UTC (rev 21891) @@ -0,0 +1,163 @@ +<?php + +class Perms_ApplierTest extends TikiTestCase +{ + function testApplyFromNothing() { + $global = new Perms_Reflection_PermissionSet; + $global->add( 'Anonymous', 'view' ); + + $object = new Perms_Reflection_PermissionSet; + + $newSet = new Perms_Reflection_PermissionSet; + $newSet->add( 'Registered', 'view' ); + $newSet->add( 'Registered', 'edit' ); + + $target = $this->getMock( 'Perms_Reflection_Container' ); + $target->expects( $this->at(0) ) + ->method( 'getDirectPermissions' ) + ->will( $this->returnValue( $object ) ); + $target->expects( $this->at(1) ) + ->method( 'getParentPermissions' ) + ->will( $this->returnValue( $global ) ); + $target->expects( $this->at(2) ) + ->method( 'add' ) + ->with( $this->equalTo( 'Registered' ), $this->equalTo( 'view' ) ); + $target->expects( $this->at(3) ) + ->method( 'add' ) + ->with( $this->equalTo( 'Registered' ), $this->equalTo( 'edit' ) ); + + $applier = new Perms_Applier; + $applier->addObject( $target ); + $applier->apply( $newSet ); + } + + function testFromExistingSet() { + $global = new Perms_Reflection_PermissionSet; + $global->add( 'Anonymous', 'view' ); + + $object = new Perms_Reflection_PermissionSet; + $object->add( 'Registered', 'view' ); + $object->add( 'Registered', 'edit' ); + + $newSet = new Perms_Reflection_PermissionSet; + $newSet->add( 'Registered', 'view' ); + $newSet->add( 'Editor', 'edit' ); + $newSet->add( 'Editor', 'view_history' ); + + $target = $this->getMock( 'Perms_Reflection_Container' ); + $target->expects( $this->at(0) ) + ->method( 'getDirectPermissions' ) + ->will( $this->returnValue( $object ) ); + $target->expects( $this->at(1) ) + ->method( 'getParentPermissions' ) + ->will( $this->returnValue( $global ) ); + $target->expects( $this->at(2) ) + ->method( 'add' ) + ->with( $this->equalTo( 'Editor' ), $this->equalTo( 'edit' ) ); + $target->expects( $this->at(3) ) + ->method( 'add' ) + ->with( $this->equalTo( 'Editor' ), $this->equalTo( 'view_history' ) ); + $target->expects( $this->at(4) ) + ->method( 'remove' ) + ->with( $this->equalTo( 'Registered' ), $this->equalTo( 'edit' ) ); + + $applier = new Perms_Applier; + $applier->addObject( $target ); + $applier->apply( $newSet ); + } + + function testAsParent() { + $global = new Perms_Reflection_PermissionSet; + $global->add( 'Anonymous', 'view' ); + + $object = new Perms_Reflection_PermissionSet; + $object->add( 'Registered', 'view' ); + $object->add( 'Registered', 'edit' ); + + $newSet = new Perms_Reflection_PermissionSet; + $newSet->add( 'Anonymous', 'view' ); + + $target = $this->getMock( 'Perms_Reflection_Container' ); + $target->expects( $this->at(0) ) + ->method( 'getDirectPermissions' ) + ->will( $this->returnValue( $object ) ); + $target->expects( $this->at(1) ) + ->method( 'getParentPermissions' ) + ->will( $this->returnValue( $global ) ); + $target->expects( $this->at(2) ) + ->method( 'remove' ) + ->with( $this->equalTo( 'Registered' ), $this->equalTo( 'view' ) ); + $target->expects( $this->at(3) ) + ->method( 'remove' ) + ->with( $this->equalTo( 'Registered' ), $this->equalTo( 'edit' ) ); + + $applier = new Perms_Applier; + $applier->addObject( $target ); + $applier->apply( $newSet ); + } + + function testParentNotAvailable() { + $global = new Perms_Reflection_PermissionSet; + $global->add( 'Anonymous', 'view' ); + + $newSet = new Perms_Reflection_PermissionSet; + $newSet->add( 'Anonymous', 'view' ); + $newSet->add( 'Registered', 'edit' ); + + $target = $this->getMock( 'Perms_Reflection_Container' ); + $target->expects( $this->at(0) ) + ->method( 'getDirectPermissions' ) + ->will( $this->returnValue( $global ) ); + $target->expects( $this->at(1) ) + ->method( 'getParentPermissions' ) + ->will( $this->returnValue( null ) ); + $target->expects( $this->at(2) ) + ->method( 'add' ) + ->with( $this->equalTo('Registered'), $this->equalTo('edit') ); + + $applier = new Perms_Applier; + $applier->addObject( $target ); + $applier->apply( $newSet ); + } + + function testMultipleTargets() { + $global = new Perms_Reflection_PermissionSet; + $global->add( 'Anonymous', 'view' ); + + $newSet = new Perms_Reflection_PermissionSet; + $newSet->add( 'Anonymous', 'view' ); + $newSet->add( 'Registered', 'edit' ); + + $target1 = $this->getMock( 'Perms_Reflection_Container' ); + $target1->expects( $this->at(0) ) + ->method( 'getDirectPermissions' ) + ->will( $this->returnValue( $global ) ); + $target1->expects( $this->at(1) ) + ->method( 'getParentPermissions' ) + ->will( $this->returnValue( null ) ); + $target1->expects( $this->at(2) ) + ->method( 'add' ) + ->with( $this->equalTo('Registered'), $this->equalTo('edit') ); + + $target2 = $this->getMock( 'Perms_Reflection_Container' ); + $target2->expects( $this->at(0) ) + ->method( 'getDirectPermissions' ) + ->will( $this->returnValue( new Perms_Reflection_PermissionSet ) ); + $target2->expects( $this->at(1) ) + ->method( 'getParentPermissions' ) + ->will( $this->returnValue( null ) ); + $target2->expects( $this->at(2) ) + ->method( 'add' ) + ->with( $this->equalTo('Anonymous'), $this->equalTo('view') ); + $target2->expects( $this->at(3) ) + ->method( 'add' ) + ->with( $this->equalTo('Registered'), $this->equalTo('edit') ); + + $applier = new Perms_Applier; + $applier->addObject( $target1 ); + $applier->addObject( $target2 ); + $applier->apply( $newSet ); + } +} + +?> Added: trunk/lib/test/core/Perms/Reflection/FactoryTest.php =================================================================== --- trunk/lib/test/core/Perms/Reflection/FactoryTest.php (rev 0) +++ trunk/lib/test/core/Perms/Reflection/FactoryTest.php 2009-09-29 18:39:37 UTC (rev 21891) @@ -0,0 +1,56 @@ +<?php + +class Perms_Reflection_FactoryTest extends TikiTestCase +{ + function testEmptyFactory() { + $factory = new Perms_Reflection_Factory; + + $this->assertNull( $factory->get( 'wiki page', 'HomePage' ) ); + } + + function testConfiguredPositive() { + $factory = new Perms_Reflection_Factory; + $factory->register( 'wiki page', 'Perms_Reflection_Object' ); + + $expect = new Perms_Reflection_Object( $factory, 'wiki page', 'HomePage' ); + $get = $factory->get( 'wiki page', 'HomePage' ); + + $this->assertEquals( $expect, $get ); + } + + function testConfiguredNegative() { + $factory = new Perms_Reflection_Factory; + $factory->register( 'category', 'Perms_Reflection_Category' ); + + $this->assertNull( $factory->get( 'wiki page', 'HomePage' ) ); + } + + function testFallback() { + $factory = new Perms_Reflection_Factory; + $factory->registerFallback( 'Perms_Reflection_Object' ); + + $this->assertEquals( + new Perms_Reflection_Object( $factory, 'wiki page', 'HomePage' ), + $factory->get( 'wiki page', 'HomePage' ) ); + } + + function testFallbackPrevented() { + $factory = new Perms_Reflection_Factory; + $factory->registerFallback( 'Perms_Reflection_Object' ); + $factory->register( 'category', 'Perms_Reflection_Category' ); + + $expect = new Perms_Reflection_Category( $factory, 'category', 4 ); + $this->assertEquals( $expect, $factory->get( 'category', 4 ) ); + } + + function testDefaultConfiguration() { + $expect = new Perms_Reflection_Factory; + $expect->registerFallback( 'Perms_Reflection_Object' ); + $expect->register( 'category', 'Perms_Reflection_Category' ); + $expect->register( 'global', 'Perms_Reflection_Global' ); + + $this->assertEquals( $expect, Perms_Reflection_Factory::getDefaultFactory() ); + } +} + +?> Added: trunk/lib/test/core/Perms/Reflection/PermissionComparatorTest.php =================================================================== --- trunk/lib/test/core/Perms/Reflection/PermissionComparatorTest.php (rev 0) +++ trunk/lib/test/core/Perms/Reflection/PermissionComparatorTest.php 2009-09-29 18:39:37 UTC (rev 21891) @@ -0,0 +1,109 @@ +<?php + +class Perms_Reflection_PermissionComparatorTest extends TikiTestCase +{ + function testIdenticalSets() { + $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->assertTrue( $comparator->equal() ); + } + + function testLeftHasLessPermissions() { + $a = new Perms_Reflection_PermissionSet; + $a->add( 'Anonymous', 'view' ); + + $b = new Perms_Reflection_PermissionSet; + $b->add( 'Anonymous', 'view' ); + $b->add( 'Anonymous', 'edit' ); + + $comparator = new Perms_Reflection_PermissionComparator( $a, $b ); + $this->assertFalse( $comparator->equal() ); + } + + function testLeftHasLessGroups() { + $a = new Perms_Reflection_PermissionSet; + $a->add( 'Anonymous', 'view' ); + + $b = new Perms_Reflection_PermissionSet; + $b->add( 'Anonymous', 'view' ); + $b->add( 'Registered', 'view' ); + + $comparator = new Perms_Reflection_PermissionComparator( $a, $b ); + $this->assertFalse( $comparator->equal() ); + } + + function testRightHasLessPermissions() { + $a = new Perms_Reflection_PermissionSet; + $a->add( 'Anonymous', 'view' ); + $a->add( 'Anonymous', 'edit' ); + + $b = new Perms_Reflection_PermissionSet; + $b->add( 'Anonymous', 'view' ); + + $comparator = new Perms_Reflection_PermissionComparator( $a, $b ); + $this->assertFalse( $comparator->equal() ); + } + + function testRightHasLessGroups() { + $a = new Perms_Reflection_PermissionSet; + $a->add( 'Anonymous', 'view' ); + $a->add( 'Registered', 'view' ); + + $b = new Perms_Reflection_PermissionSet; + $b->add( 'Anonymous', 'view' ); + + $comparator = new Perms_Reflection_PermissionComparator( $a, $b ); + $this->assertFalse( $comparator->equal() ); + } + + function testGetRemovals() { + $a = new Perms_Reflection_PermissionSet; + $a->add( 'Anonymous', 'view' ); + $a->add( 'Registered', 'view' ); + $a->add( 'Registered', 'edit' ); + + $b = new Perms_Reflection_PermissionSet; + $b->add( 'Registered', 'view' ); + + $comparator = new Perms_Reflection_PermissionComparator( $a, $b ); + $this->assertEquals( array( + array( 'Anonymous', 'view' ), + array( 'Registered', 'edit' ), + ), $comparator->getRemovals() ); + } + + function testGetAdditions() { + $a = new Perms_Reflection_PermissionSet; + $a->add( 'Anonymous', 'view' ); + + $b = new Perms_Reflection_PermissionSet; + $b->add( 'Anonymous', 'view' ); + $b->add( 'Registered', 'view' ); + $b->add( 'Registered', 'edit' ); + + $comparator = new Perms_Reflection_PermissionComparator( $a, $b ); + $this->assertEquals( array( + array( 'Registered', 'view' ), + array( 'Registered', 'edit' ), + ), $comparator->getAdditions() ); + } + + 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() ); + } +} + +?> Added: trunk/lib/test/core/Perms/Reflection/PermissionSetTest.php =================================================================== --- trunk/lib/test/core/Perms/Reflection/PermissionSetTest.php (rev 0) +++ trunk/lib/test/core/Perms/Reflection/PermissionSetTest.php 2009-09-29 18:39:37 UTC (rev 21891) @@ -0,0 +1,61 @@ +<?php + +class Perms_Reflection_PermissionSetTest extends TikiTestCase +{ + function testEmptySet() { + $set = new Perms_Reflection_PermissionSet; + + $this->assertEquals( array( + ), $set->getPermissionArray() ); + } + + function testBasicSet() { + $set = new Perms_Reflection_PermissionSet; + $set->add( 'Registered', 'view' ); + $set->add( 'Registered', 'edit' ); + $set->add( 'Anonymous', 'view' ); + + $this->assertEquals( array( + 'Registered' => array( 'view', 'edit' ), + 'Anonymous' => array( 'view' ), + ), $set->getPermissionArray() ); + } + + function testDuplicateEntry() { + $set = new Perms_Reflection_PermissionSet; + $set->add( 'Registered', 'view' ); + $set->add( 'Registered', 'edit' ); + $set->add( 'Registered', 'view' ); + + $this->assertEquals( array( + 'Registered' => array( 'view', 'edit' ), + ), $set->getPermissionArray() ); + } + + function testPositiveHas() { + $set = new Perms_Reflection_PermissionSet; + $set->add( 'Anonymous', 'view' ); + + $this->assertTrue( $set->has( 'Anonymous', 'view' ) ); + } + + function testNegativeHas() { + $set = new Perms_Reflection_PermissionSet; + + $this->assertFalse( $set->has( 'Anonymous', 'view' ) ); + } + + function testAddMultiple() { + $equivalent = new Perms_Reflection_PermissionSet; + $equivalent->add( 'Anonymous', 'a' ); + $equivalent->add( 'Anonymous', 'b' ); + $equivalent->add( 'Anonymous', 'c' ); + + $multi = new Perms_Reflection_PermissionSet; + $multi->add( 'Anonymous', array( 'a', 'b', 'c' ) ); + + $this->assertEquals( $equivalent, $multi ); + } +} + +?> Added: trunk/lib/test/core/Perms/Reflection/QuickTest.php =================================================================== --- trunk/lib/test/core/Perms/Reflection/QuickTest.php (rev 0) +++ trunk/lib/test/core/Perms/Reflection/QuickTest.php 2009-09-29 18:39:37 UTC (rev 21891) @@ -0,0 +1,179 @@ +<?php + +class Perms_Reflection_QuickTest extends TikiTestCase +{ + function testUnconfigured() { + $quick = new Perms_Reflection_Quick; + + $obtained = $quick->getPermissions( new Perms_Reflection_PermissionSet, array( + 'Anonymous' => 'basic', + 'Registered' => 'editor', + ) ); + $this->assertEquals( new Perms_Reflection_PermissionSet, $obtained ); + } + + function testSimpleConfigurations() { + $quick = new Perms_Reflection_Quick; + $quick->configure( 'tester', array( 'view', 'edit', 'comment' ) ); + $quick->configure( 'basic', array( 'view' ) ); + + $obtained = $quick->getPermissions( new Perms_Reflection_PermissionSet, array( + 'Anonymous' => 'basic', + 'Registered' => 'editor', + 'Tester' => 'tester', + ) ); + + $expect = new Perms_Reflection_PermissionSet; + $expect->add( 'Anonymous', 'view' ); + $expect->add( 'Tester', 'view' ); + $expect->add( 'Tester', 'edit' ); + $expect->add( 'Tester', 'comment' ); + + $this->assertEquals( $expect, $obtained ); + } + + function testInheritance() { + $quick = new Perms_Reflection_Quick; + $quick->configure( 'basic', array( 'view' ) ); + $quick->configure( 'registered', array( 'edit' ) ); + $quick->configure( 'editors', array( 'remove' ) ); + + $obtained = $quick->getPermissions( new Perms_Reflection_PermissionSet, array( + 'Anonymous' => 'basic', + 'Registered' => 'registered', + 'Editor' => 'editors', + ) ); + + $expect = new Perms_Reflection_PermissionSet; + $expect->add( 'Anonymous', 'view' ); + $expect->add( 'Registered', 'view' ); + $expect->add( 'Registered', 'edit' ); + $expect->add( 'Editor', 'view' ); + $expect->add( 'Editor', 'edit' ); + $expect->add( 'Editor', 'remove' ); + + $this->assertEquals( $expect, $obtained ); + } + + function testAssignNone() { + $quick = new Perms_Reflection_Quick; + $current = new Perms_Reflection_PermissionSet; + $current->add( 'Anonymous', 'view' ); + + $obtained = $quick->getPermissions( $current, array( + 'Anonymous' => 'none', + ) ); + + $expect = new Perms_Reflection_PermissionSet; + + $this->assertEquals( $expect, $obtained ); + } + + function testOnbtainUserdefined() { + $quick = new Perms_Reflection_Quick; + $current = new Perms_Reflection_PermissionSet; + $current->add( 'Anonymous', 'view' ); + + $obtained = $quick->getPermissions( $current, array( + 'Anonymous' => 'userdefined', + ) ); + + $expect = new Perms_Reflection_PermissionSet; + $expect->add( 'Anonymous', 'view' ); + + $this->assertEquals( $expect, $obtained ); + } + + function testDefaultRetrieveGroups() { + $quick = new Perms_Reflection_Quick; + + $permissions = new Perms_Reflection_PermissionSet; + $permissions->add( 'Registered', 'view' ); + + $expect = array( + 'Anonymous' => 'none', + 'Registered' => 'userdefined', + ); + + $obtained = $quick->getAppliedPermissions( $permissions, array( 'Anonymous', 'Registered' ) ); + + $this->assertEquals( $expect, $obtained ); + } + + function testMatch() { + $quick = new Perms_Reflection_Quick; + $quick->configure( 'basic', array( 'view' ) ); + + $permissions = new Perms_Reflection_PermissionSet; + $permissions->add( 'Registered', 'view' ); + + $expect = array( 'Registered' => 'basic' ); + + $obtained = $quick->getAppliedPermissions( $permissions, array( 'Registered' ) ); + + $this->assertEquals( $expect, $obtained ); + } + + function testNoMatchOnExtra() { + $quick = new Perms_Reflection_Quick; + $quick->configure( 'basic', array( 'view' ) ); + + $permissions = new Perms_Reflection_PermissionSet; + $permissions->add( 'Registered', 'view' ); + $permissions->add( 'Registered', 'edit' ); + + $expect = array( 'Registered' => 'userdefined' ); + + $obtained = $quick->getAppliedPermissions( $permissions, array( 'Registered' ) ); + + $this->assertEquals( $expect, $obtained ); + } + + function testNoMatchOnMissing() { + $quick = new Perms_Reflection_Quick; + $quick->configure( 'basic', array( 'view', 'edit' ) ); + + $permissions = new Perms_Reflection_PermissionSet; + $permissions->add( 'Registered', 'view' ); + + $expect = array( 'Registered' => 'userdefined' ); + + $obtained = $quick->getAppliedPermissions( $permissions, array( 'Registered' ) ); + + $this->assertEquals( $expect, $obtained ); + } + + function testInheritenceAppiesInMatching() { + $quick = new Perms_Reflection_Quick; + $quick->configure( 'basic', array( 'view' ) ); + $quick->configure( 'registered', array( 'edit' ) ); + + $permissions = new Perms_Reflection_PermissionSet; + $permissions->add( 'Registered', 'view' ); + $permissions->add( 'Registered', 'edit' ); + + $expect = array( 'Registered' => 'registered' ); + + $obtained = $quick->getAppliedPermissions( $permissions, array( 'Registered' ) ); + + $this->assertEquals( $expect, $obtained ); + } + + function testRegisterNoneIsIgnored() { + $quick = new Perms_Reflection_Quick; + $quick->configure( 'none', array( 'view' ) ); + + $expect = new Perms_Reflection_Quick; + $this->assertEquals( $expect, $quick ); + } + + function testRegisterUserDefinedIsIgnored() { + $quick = new Perms_Reflection_Quick; + $quick->configure( 'userdefined', array( 'view' ) ); + + $expect = new Perms_Reflection_Quick; + $this->assertEquals( $expect, $quick ); + } +} + +?> Modified: trunk/tiki-objectpermissions.php =================================================================== --- trunk/tiki-objectpermissions.php 2009-09-29 18:15:37 UTC (rev 21890) +++ trunk/tiki-objectpermissions.php 2009-09-29 18:39:37 UTC (rev 21891) @@ -72,7 +72,7 @@ $smarty->assign('referer', $_REQUEST["referer"]); } else { $smarty->assign('referer', ''); - } +} $_REQUEST["objectId"] = urldecode($_REQUEST["objectId"]); $_REQUEST["objectType"] = urldecode($_REQUEST["objectType"]); $_REQUEST["permType"] = !empty($_REQUEST['permType']) ? urldecode($_REQUEST["permType"]) : 'all'; @@ -80,112 +80,71 @@ $smarty->assign('objectId', $_REQUEST["objectId"]); $smarty->assign('objectType', $_REQUEST["objectType"]); $smarty->assign('permType', $_REQUEST["permType"]); -if ($_REQUEST['objectType'] == 'wiki' || $_REQUEST['objectType'] == 'wiki page') { + +if( $_REQUEST['objectType'] == 'wiki' ) { + $_REQUEST['objectType'] = 'wiki page'; +} + +require_once 'lib/core/lib/Perms/Applier.php'; +require_once 'lib/core/lib/Perms/Reflection/Factory.php'; + +$objectFactory = Perms_Reflection_Factory::getDefaultFactory(); +$currentObject = $objectFactory->get( $_REQUEST['objectType'], $_REQUEST['objectId'] ); + +$permissionApplier = new Perms_Applier; +$permissionApplier->addObject( $currentObject ); + +if ($_REQUEST['objectType'] == 'wiki page') { global $structlib; include_once ('lib/structures/structlib.php'); $pageInfoTree = $structlib->s_get_structure_pages($structlib->get_struct_ref_id($_REQUEST['objectId'])); if (count($pageInfoTree) > 1) { $smarty->assign('inStructure', 'y'); } -} -//Quickperms -$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 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 ); + } + } } -if(!isset($quickperms_['basic'])) - $quickperms_['basic'] = array(); -if(!isset($quickperms_['registered'])) - $quickperms_['registered'] = array(); -if(!isset($quickperms_['editors'])) - $quickperms_['editors'] = array(); -if(!isset($quickperms_['admin'])) -$quickperms_['admin'] = array(); +//Quickperms {{{ +//Test to map permissions of ile galleries into read write admin admin levels. +if( $prefs['feature_quick_object_perms'] == 'y' ) { + require_once 'lib/core/lib/Perms/Reflection/Quick.php'; -$perms = array(); -$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'] = array(); + $perms = quickperms_get_data(); + $smarty->assign('quickperms', $perms); + $quickperms = new Perms_Reflection_Quick; -//Test to map permissions of ile galleries into read write admin admin levels. -if($_REQUEST["permType"]=="file galleries") { - unset($perms); - $quickperms_temp['tiki_p_admin_file_galleries'] = 'tiki_p_admin_file_galleries'; - $quickperms_temp['tiki_p_assign_perm_file_gallery'] = 'tiki_p_assign_perm_file_gallery'; - $quickperms_temp['tiki_p_batch_upload_files'] = 'tiki_p_batch_upload_files'; - $quickperms_temp['tiki_p_batch_upload_file_dir'] = 'tiki_p_batch_upload_file_dir'; - $quickperms_temp['tiki_p_create_file_galleries'] = 'tiki_p_create_file_galleries'; - $quickperms_temp['tiki_p_download_files'] = 'tiki_p_download_files'; - $quickperms_temp['tiki_p_edit_gallery_file'] = 'tiki_p_edit_gallery_file'; - $quickperms_temp['tiki_p_list_file_galleries'] = 'tiki_p_list_file_galleries'; - $quickperms_temp['tiki_p_upload_files'] = 'tiki_p_upload_files'; - $quickperms_temp['tiki_p_view_fgal_explorer'] = 'tiki_p_view_fgal_explorer'; - $quickperms_temp['tiki_p_view_fgal_path'] = 'tiki_p_view_fgal_path'; - $quickperms_temp['tiki_p_view_file_gallery'] = 'tiki_p_view_file_gallery'; - $perms['admin']['name'] = "admin"; - $perms['admin']['data'] = $quickperms_temp; + foreach( $perms as $type => $data ) { + $quickperms->configure( $type, $data['data'] ); + } + + if (isset($_REQUEST['assign']) && isset($_REQUEST['quick_perms'])) { + check_ticket('object-perms'); - unset($quickperms_temp['tiki_p_admin_file_galleries']); - unset($quickperms_temp['tiki_p_assign_perm_file_gallery']); - $perms['write']['name'] = "write"; - $perms['write']['data'] = $quickperms_temp; + $groups = $userlib->get_groups(0, -1, 'groupName_asc', '', '', 'n'); - unset($quickperms_temp['tiki_p_batch_upload_files']); - unset($quickperms_temp['tiki_p_batch_upload_file_dir']); - unset($quickperms_temp['tiki_p_create_file_galleries']); - unset($quickperms_temp['tiki_p_edit_gallery_file']); - unset($quickperms_temp['tiki_p_upload_files']); - $perms['read']['name'] = "read"; - $perms['read']['data'] = $quickperms_temp; - - $perms['none']['name'] = "none"; - $perms['none']['data'] = array(); -} + $userInput = array(); + foreach($groups['data'] as $group) { + if(isset($_REQUEST["perm_".$group['groupName']])) { + $group = $group['groupName']; + $permission = $_REQUEST["perm_".$group]; -$smarty->assign('quickperms', $perms); - -if (isset($_REQUEST['assign']) && isset($_REQUEST['quick_perms'])) { - check_ticket('object-perms'); - - $groups = $userlib->get_groups(0, -1, 'groupName_asc', '', '', 'n'); - - foreach($groups['data'] as $group) { - if(isset($_REQUEST["perm_".$group['groupName']])) { - $group = $group['groupName']; - $permission = $_REQUEST["perm_".$group]; - - if ($permission != "userdefined") { - //Remove all permissions of a group - - foreach($perms['admin']['data'] as $perm) { - remove_perm($group, $_REQUEST["objectId"], $_REQUEST["objectType"], $perm); - } - - //Add chosen quickperm bundle to the objcet/group - foreach($perms["$permission"]['data'] as $perm) { - assign_perm($group, $_REQUEST["objectId"], $_REQUEST["objectType"], $perm); - } + $userInput[$group] = $permission; } } + + $current = $currentObject->getDirectPermissions(); + $newPermissions = $quickperms->getPermissions( $current, $userInput ); + $permissionApplier->apply( $newPermissions ); } } -//Quickperm END +//Quickperm END }}} // Process the form to assign a new permission to this object @@ -201,37 +160,9 @@ } } } - if (!empty($_REQUEST['assignstructure']) && $_REQUEST['assignstructure'] == 'on' && !empty($pageInfoTree)) { - foreach($pageInfoTree as $subPage) { - foreach($_REQUEST['perm'] as $group => $perms) { - foreach($perms as $perm) { - assign_perm($group, $subPage["pageName"], 'wiki page', $perm); - } - } - } - } else { - // set new perms - foreach($_REQUEST['perm'] as $group => $perms) { - foreach($perms as $perm) { - assign_perm($group, $_REQUEST["objectId"], $_REQUEST["objectType"], $perm); - } - } - // remove unchecked ones - foreach($_REQUEST['old_perm'] as $group => $perms) { - foreach($perms as $perm) { - $stillChecked = false; - foreach ($_REQUEST['perm'][$group] as $new_perm) { - if ($new_perm == $perm) { // still checked - $stillChecked = true; - continue; - } - } - if (!$stillChecked) { - remove_perm($group, $_REQUEST["objectId"], $_REQUEST["objectType"], $perm); - } - } - } - } + + $newPermissions = get_assign_permissions(); + $permissionApplier->apply( $newPermissions ); $smarty->assign('groupName', $_REQUEST["group"]); } // Process the form to remove a permission from the page @@ -255,40 +186,34 @@ } } } + +// Prepare display + +$currentObject = $objectFactory->get( $_REQUEST['objectType'], $_REQUEST['objectId'] ); +$displayedPermissions = $currentObject->getDirectPermissions(); + // Now we have to get the individual page permissions if any if ($_REQUEST['objectType'] == 'global') { $page_perms = array(); } else { $page_perms = $userlib->get_object_permissions($_REQUEST["objectId"], $_REQUEST["objectType"]); } -//Quickperm -foreach($page_perms as $perm) { - $current_permissions[$perm['groupName']][] = $perm['permName']; -} -//Quickperm END // Get a list of groups $groups = $userlib->get_groups(0, -1, 'id_asc', '', '', 'n'); //Quickperm -foreach($groups['data'] as $key=>$group) { - foreach($perms as $perm) { - if (!empty($current_permissions[$group['groupName']]) && is_array($current_permissions[$group['groupName']])) { - //Check if Group has admin perm. - $diff1 = array_diff($current_permissions[$group['groupName']], $perms[$perm['name']]['data']); - $diff2 = array_diff($perms[$perm['name']]['data'], $current_permissions[$group['groupName']]); - if (empty($diff1) AND empty($diff2)) { - $groups['data'][$key]['groupSumm'] = $perm['name']; - break; - } - } else { - $groups['data'][$key]['groupSumm'] = "none"; - break; - } +if( $prefs['feature_quick_object_perms'] == 'y' ) { + $groupNames = array(); + foreach($groups['data'] as $key=>$group) { + $groupNames[] = $group['groupName']; } - //If Group has NO perm. - if (empty($groups['data'][$key]['groupSumm'])) - $groups['data'][$key]['groupSumm'] = "userdefined"; + + $map = $quickperms->getAppliedPermissions( $displayedPermissions, $groupNames ); + + foreach($groups['data'] as $key=>$group) { + $groups['data'][$key]['groupSumm'] = $map[ $group['groupName'] ]; + } } //Quickperm END @@ -506,4 +431,116 @@ } } +function get_assign_permissions() { + $set = new Perms_Reflection_PermissionSet; + if( isset( $_REQUEST['perm'] ) ) { + foreach( $_REQUEST['perm'] as $group => $perms ) { + foreach( $perms as $perm ) { + $set->add( $group, $perm ); + } + } + } + + return $set; +} + +function quickperms_get_data() { + if($_REQUEST["permType"]=="file galleries") { + return quickperms_get_filegal(); + } else { + return quickperms_get_generic(); + } +} + +function quickperms_get_filegal() { + return array( + 'admin' => array( + 'name' => 'admin', + 'data' => array( + '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_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' => array( + 'name' => 'write', + 'data' => array( + '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_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' => array( + 'name' => 'read', + 'data' => array( + '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' => array( + 'name' => 'none', + 'data' => array( + ), + ), + ); +} + +function quickperms_get_generic() { + global $userlib; + + $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'] = array(); + if(!isset($quickperms_['registered'])) + $quickperms_['registered'] = array(); + if(!isset($quickperms_['editors'])) + $quickperms_['editors'] = array(); + if(!isset($quickperms_['admin'])) + $quickperms_['admin'] = array(); + + $perms = array(); + $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'] = array(); + + return $perms; +} + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |