From: <lph...@us...> - 2012-08-24 16:56:59
|
Revision: 42717 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=42717&view=rev Author: lphuberdeau Date: 2012-08-24 16:56:48 +0000 (Fri, 24 Aug 2012) Log Message: ----------- [MOD] Adding the default template generation setting basic privileges (editing through the UI will loose the information at this stage) Modified Paths: -------------- trunk/lib/core/Services/Workspace/Controller.php trunk/lib/core/Tiki/Profile/Builder.php Added Paths: ----------- trunk/lib/test/core/Profile/ trunk/lib/test/core/Profile/BuilderTest.php Modified: trunk/lib/core/Services/Workspace/Controller.php =================================================================== --- trunk/lib/core/Services/Workspace/Controller.php 2012-08-24 15:51:34 UTC (rev 42716) +++ trunk/lib/core/Services/Workspace/Controller.php 2012-08-24 16:56:48 UTC (rev 42717) @@ -83,8 +83,52 @@ $id = null; if ($input->name->text()) { + $builder = new Tiki_Profile_Builder; + $builder->addGroup('Base', $builder->user('group')); + $builder->setManagingGroup('Base'); + $builder->setPermissions('Base', 'category', $builder->user('category'), array( + 'admin_cms', + 'blog_admin', + 'bigbluebutton_create', + 'bigbluebutton_moderate', + 'bigbluebutton_view_rec', + 'bigbluebutton_join', + 'admin_calendar', + 'admin_categories', + 'modify_object_categories', + 'admin_comments', + 'dsn_query', + 'admin_faqs', + 'admin_file_galleries', + 'admin_forum', + 'admin_freetags', + 'group_view', + 'group_view_members', + 'group_add_member', + 'group_remove_member', + 'group_join', + 'admin_galleries', + 'admin_newsletters', + 'payment_view', + 'payment_manual', + 'payment_request', + 'perspective_view', + 'vote_poll', + 'view_poll_voters', + 'admin_sheet', + 'take_survey', + 'view_survey_stats', + 'admin_trackers', + 'admin_wiki', + 'detach_translation', + 'site_report', + 'modify_object_categories', + 'use_references', + 'edit_references', + )); $id = $this->utilities->replaceTemplate(0, array( 'name' => $input->name->text(), + 'definition' => $builder->getContent(), )); } Modified: trunk/lib/core/Tiki/Profile/Builder.php =================================================================== --- trunk/lib/core/Tiki/Profile/Builder.php 2012-08-24 15:51:34 UTC (rev 42716) +++ trunk/lib/core/Tiki/Profile/Builder.php 2012-08-24 16:56:48 UTC (rev 42717) @@ -8,6 +8,9 @@ class Tiki_Profile_Builder { private $objects = array(); + private $groups = array(); + private $permissions = array(); + private $managingGroup; function ref($name) { @@ -28,9 +31,67 @@ ); } + function addGroup($internalName, $fullName) + { + $this->groups[$internalName] = $fullName; + } + + function setPermissions($internalName, $type, $objectId, array $permissionList) + { + if (! isset($this->permissions[$internalName])) { + $this->permissions[$internalName] = array('objects' => array()); + } + + $this->permissions[$internalName]['objects'][] = array( + 'type' => $type, + 'id' => $objectId, + 'allow' => $permissionList + ); + } + + function setManagingGroup($group) + { + $this->managingGroup = $group; + } + function getContent() { - $yaml = Horde_Yaml::dump(array('objects' => $this->objects)); + $builder = clone $this; + + foreach (array_keys($this->groups) as $group) { + foreach (array_keys($this->groups) as $peer) { + if ($group == $this->managingGroup) { + $builder->setPermissions($group, 'group', $peer, array('group_view', 'group_view_members', 'group_add_member', 'group_remove_member')); + } else { + $builder->setPermissions($group, 'group', $peer, array('group_view', 'group_view_members')); + } + } + } + + $data = array(); + + if (count($builder->objects)) { + $data['objects'] = $builder->objects; + } + + if ($builder->groups) { + $data['mappings'] = array(); + $data['groups'] = array(); + foreach ($builder->groups as $internal => $full) { + $groupDefinition = array( + 'description' => $full, + ); + + if (isset($builder->permissions[$internal])) { + $groupDefinition['objects'] = $builder->permissions[$internal]['objects']; + } + + $data['mappings'][$internal] = $full; + $data['groups'][$internal] = $groupDefinition; + } + } + + $yaml = Horde_Yaml::dump($data); return <<<SYNTAX ^The following profile was auto-generated. It may hurt your eyes when you try reading it.^ Added: trunk/lib/test/core/Profile/BuilderTest.php =================================================================== --- trunk/lib/test/core/Profile/BuilderTest.php (rev 0) +++ trunk/lib/test/core/Profile/BuilderTest.php 2012-08-24 16:56:48 UTC (rev 42717) @@ -0,0 +1,104 @@ +<?php + +class Profile_BuilderTest extends PHPUnit_Framework_TestCase +{ + function testBasicProfile() + { + $builder = new Tiki_Profile_Builder; + + $expect = <<<EXPECT +--- +EXPECT; + $this->assertIs($expect, $builder->getContent()); + } + + function testAddObjects() + { + $builder = new Tiki_Profile_Builder; + $builder->addObject('wiki_page', 'foo', array( + 'name' => 'Foo', + 'content' => 'Hello', + )); + $builder->addObject('trackerfield', 'date', array( + 'tracker' => $builder->ref('tracker'), + )); + + $expect = <<<EXPECT +--- +objects: + - + type: wiki_page + ref: foo + data: + name: Foo + content: Hello + - + type: trackerfield + ref: date + data: + tracker: \$tracker +EXPECT; + $this->assertIs($expect, $builder->getContent()); + } + + function testGroups() + { + $builder = new Tiki_Profile_Builder; + $builder->addGroup('Base', $builder->user('group')); + $builder->addGroup('Viewer', $builder->user('group') . ' Viewer'); + $builder->setManagingGroup('Base'); + + $expect = <<<EXPECT +--- +mappings: + Base: \$profilerequest:group\$undefined\$ + Viewer: \$profilerequest:group\$undefined\$ Viewer +groups: + Base: + description: \$profilerequest:group\$undefined\$ + objects: + - + type: group + id: Base + allow: + - group_view + - group_view_members + - group_add_member + - group_remove_member + - + type: group + id: Viewer + allow: + - group_view + - group_view_members + - group_add_member + - group_remove_member + Viewer: + description: \$profilerequest:group\$undefined\$ Viewer + objects: + - + type: group + id: Base + allow: + - group_view + - group_view_members + - + type: group + id: Viewer + allow: + - group_view + - group_view_members +EXPECT; + $this->assertIs($expect, $builder->getContent()); + } + + private function assertIs($expect, $content) + { + $matches = WikiParser_PluginMatcher::match($content); + + foreach ($matches as $plugin) { + $this->assertEquals(trim($expect), trim($plugin->getBody())); + } + } +} + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |