diff --git a/application/modules/admin/controllers/UsergroupController.php b/application/modules/admin/controllers/UsergroupController.php index 77a9a44579bc05e29435bc9fdaffbaa991439d78..312c450beb1ec828ef819623dedd2b7652bb4a15 100644 --- a/application/modules/admin/controllers/UsergroupController.php +++ b/application/modules/admin/controllers/UsergroupController.php @@ -19,6 +19,8 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ class Admin_UsergroupController extends ZendAfi_Controller_Action { + use Trait_Translator; + public function indexAction() { $this->view->titre = "Gestion des groupes d'utilisateurs"; $bib= Class_Bib::getPortail(); @@ -119,6 +121,9 @@ class Admin_UsergroupController extends ZendAfi_Controller_Action { ->updateAttributes($post) ->save(); + $this->_helper->notify($this->_('Le groupe "%s" a été sauvegardé', + $group->getLibelle())); + $this->_redirect('admin/usergroup'); return true; } diff --git a/library/Class/Catalogue.php b/library/Class/Catalogue.php index 4aa3bd94f87ad7f08fc8ff6eaa1f4511dce17b27..c394c692b1c5bb8faa3cb702211af535ff49c7df 100644 --- a/library/Class/Catalogue.php +++ b/library/Class/Catalogue.php @@ -1075,6 +1075,9 @@ class Class_Catalogue extends Storm_Model_Abstract { return true; } + if ($user->hasRightToAccess(Class_UserGroup::RIGHT_USER_DOMAINES_TOTAL_ACCESS)) + return true; + if (!$user->hasRightToAccess(Class_UserGroup::RIGHT_USER_DOMAINES_SUPPRESSION_LIMIT)) return false; diff --git a/library/Class/UserGroup.php b/library/Class/UserGroup.php index 689e298462ac168050e0765af681857a76c3fe02..414f1e60ed8b196602f14c2a7ecd9026e25cc2e0 100644 --- a/library/Class/UserGroup.php +++ b/library/Class/UserGroup.php @@ -30,28 +30,29 @@ class Class_UserGroup extends Storm_Model_Abstract { protected $_belongs_to = ['categorie' => ['model' => 'Class_UserGroupCategorie', 'referenced_in' => 'id_cat']]; // Les droits doivent être une puissance de 2 (ce sont des masques) - const RIGHT_SUIVRE_FORMATION = 1; - const RIGHT_DIRIGER_FORMATION = 2; - const RIGHT_ACCES_ARTEVOD = 4; - const RIGHT_ACCES_NUMILOG = 8; - const RIGHT_ACCES_CVS = 16; - const RIGHT_ACCES_VODECLIC = 32; - const RIGHT_ACCES_TOUTAPPRENDRE = 64; - const RIGHT_ACCES_MUSICME = 128; + const RIGHT_SUIVRE_FORMATION = 0x01; + const RIGHT_DIRIGER_FORMATION = 0x02; + const RIGHT_ACCES_ARTEVOD = 0x04; + const RIGHT_ACCES_NUMILOG = 0x08; + const RIGHT_ACCES_CVS = 0x10; + const RIGHT_ACCES_VODECLIC = 0x20; + const RIGHT_ACCES_TOUTAPPRENDRE = 0x40; + const RIGHT_ACCES_MUSICME = 0x80; // droits moderateurs - const RIGHT_USER_DOMAINES_SUPPRESSION_LIMIT = 256; - const RIGHT_USER_FILE_ACCESS = 512; - const RIGHT_USER_SITOTHEQUE = 1024; - const RIGHT_USER_MODO = 2048; - const RIGHT_USER_INSCRIPTIONS = 4096; - const RIGHT_USER_BIB_NUM = 8192; - const RIGHT_USER_OPDS_READ = 16384; - const RIGHT_USER_NOTICES_LIEES = 32768; - const RIGHT_USER_SIGB_USER_READ = 65536; - const RIGHT_USER_CONFIG_FRONT = 131072; - const RIGHT_USER_PUBLICATION_DIRECTE = 262144; + const RIGHT_USER_DOMAINES_SUPPRESSION_LIMIT = 0x100; + const RIGHT_USER_FILE_ACCESS = 0x200; + const RIGHT_USER_SITOTHEQUE = 0x400; + const RIGHT_USER_MODO = 0x800; + const RIGHT_USER_INSCRIPTIONS = 0x1000; + const RIGHT_USER_BIB_NUM = 0x2000; + const RIGHT_USER_OPDS_READ = 0x4000; + const RIGHT_USER_NOTICES_LIEES = 0x8000; + const RIGHT_USER_SIGB_USER_READ = 0x10000; + const RIGHT_USER_CONFIG_FRONT = 0x20000; + const RIGHT_USER_PUBLICATION_DIRECTE = 0x40000; + const RIGHT_USER_DOMAINES_TOTAL_ACCESS = 0x80000; // Type de groupe @@ -68,7 +69,8 @@ class Class_UserGroup extends Storm_Model_Abstract { self::RIGHT_ACCES_VODECLIC => 'Bibliothèque numérique: accéder à Vodéclic', self::RIGHT_ACCES_TOUTAPPRENDRE => 'Bibliothèque numérique: accéder à Tout Apprendre', self::RIGHT_ACCES_MUSICME => 'Bibliothèque numérique: accéder à Music Me', - self::RIGHT_USER_DOMAINES_SUPPRESSION_LIMIT => 'Domaines: accès, suppression limitée au créateur', + self::RIGHT_USER_DOMAINES_SUPPRESSION_LIMIT => 'Domaines: accès, modification et suppression limitée au créateur', + self::RIGHT_USER_DOMAINES_TOTAL_ACCESS => 'Domaines: accès total en modification et suppression', self::RIGHT_USER_FILE_ACCESS => 'Articles: accès sur les répertoires images et file', self::RIGHT_USER_SITOTHEQUE => 'Sitothèque: accès sitothèque', self::RIGHT_USER_MODO => 'Modération: accès modération', @@ -194,6 +196,11 @@ class Class_UserGroup extends Storm_Model_Abstract { } + /** @return Class_UserGroup */ + public function addRightDomainesTotalAccess() { + return $this->addRight(self::RIGHT_USER_DOMAINES_TOTAL_ACCESS); + } + /** * @param int right * @return Class_UserGroup diff --git a/tests/application/modules/admin/controllers/CatalogueControllerTest.php b/tests/application/modules/admin/controllers/CatalogueControllerTest.php index ac2be886e0c5284fc92b08ef7c419a3175e4b2ae..7c9ddd4bae04651f91647a8da4da3f0e5864cc94 100644 --- a/tests/application/modules/admin/controllers/CatalogueControllerTest.php +++ b/tests/application/modules/admin/controllers/CatalogueControllerTest.php @@ -202,9 +202,75 @@ class CatalogueControllerWithReferentIndexTest extends AdminCatalogueControllerT public function pageReferentShouldContainsLinkToDeleteCatalogueMoyenAge() { $this->assertXPath('//a[contains(@href, "catalogue/delete/id_catalogue/300")]'); } +} + + + + +class CatalogueControllerWithAdminBibTest extends AdminCatalogueControllerTestCase { + protected function _loginHook($account) { + $account->ROLE_LEVEL = ZendAfi_Acl_AdminControllerRoles::ADMIN_BIB; + + } + + public function setUp() { + parent::setUp(); + $this->dispatch('admin/catalogue/index'); + } + + + /** @test */ + function responseToIndexReferentShouldNotBeARedirectToAccueil() { + $this->assertNotRedirect(); + } + + + /** @test */ + public function titreShouldBeDefinitionDesDomaines() { + $this->assertXPathContentContains('//h1', 'Définition des domaines'); + } + + + /** @test */ + public function pageShouldNotContainsToDeleteCatalogueMoyenAge() { + $this->assertNotXPath('//a[contains(@href, "catalogue/delete/id_catalogue/300")]'); + } +} + + + + +class CatalogueControllerWithAdminBibAndRightTotalAccessTest extends AdminCatalogueControllerTestCase { + protected function _loginHook($account) { + $account->ROLE_LEVEL = ZendAfi_Acl_AdminControllerRoles::ADMIN_BIB; + } + + public function setUp() { + parent::setUp(); + Class_Users::getIdentity()->setUserGroups([ + Class_UserGroup::newInstanceWithId(667) + ->addRightDomainesTotalAccess() + ]); + } + + /** @test */ + public function pageIndexShouldContainsToDeleteCatalogueMoyenAge() { + $this->dispatch('admin/catalogue/index'); + $this->assertXPath('//a[contains(@href, "catalogue/delete/id_catalogue/300")]'); + } + + + /** @test */ + public function editCatalogueShouldShowValiderButton() { + $this->dispatch('/admin/catalogue/edit/id_catalogue/300'); + $this->assertXPathContentContains('//td', 'Valider'); + } } + + + class CatalogueControllerWithModoPortailIndexTest extends AdminCatalogueControllerTestCase { protected function _loginHook($account) { $account->ROLE_LEVEL = ZendAfi_Acl_AdminControllerRoles::MODO_PORTAIL; diff --git a/tests/application/modules/admin/controllers/UserGroupControllerTest.php b/tests/application/modules/admin/controllers/UserGroupControllerTest.php index 4abbf01acc8fd32132a7017cd95a2fc890193eb6..36a7e7c3cb304f60ec307c1a73396befcde00ca8 100644 --- a/tests/application/modules/admin/controllers/UserGroupControllerTest.php +++ b/tests/application/modules/admin/controllers/UserGroupControllerTest.php @@ -258,12 +258,11 @@ class Admin_UserGroupControllerIndexTest extends Admin_UserGroupControllerTestCa $this->assertXPath('//li[@class="item"]//img[contains(@src, "/groupe_dynamique.png")]',$this->_response->getBody()); } + /** @test */ public function thirdRowShouldContainsIconGroupe() { $this->assertXPath('//li[@class="item"][2]//img[contains(@src, "/groupe.png")]',$this->_response->getBody()); } - - } @@ -305,6 +304,13 @@ class Admin_UserGroupControllerAddTest extends Admin_UserGroupControllerTestCase $this->assertXPath('//input[@name="rights[]"][@value="2"]'); $this->assertXPathContentContains('//label', 'Formations: diriger une formation'); } + + + /** @test */ + public function aCheckBoxShouldContainsRightDomainesAccesTotal() { + $this->assertXPath('//input[@name="rights[]"][@value="524288"]'); + $this->assertXPathContentContains('//label', 'Domaines: accès total en modification et suppression'); + } } @@ -335,6 +341,12 @@ class Admin_UserGroupControllerAddPostTest extends Admin_UserGroupControllerTest $this->assertEquals(2, Class_UserGroup::getLoader()->getFirstAttributeForLastCallOn('save')->getIdCat()); } + + + /** @test */ + public function notificationShouldContainsGroupeSauvegarde() { + $this->assertFlashMessengerContentContains('Le groupe "Intervenants" a été sauvegardé'); + } } diff --git a/tests/library/Trait/UserGroupFixtures.php b/tests/library/Trait/UserGroupFixtures.php index d783355cd6a8154bcde722587bbb9fd777f9c068..d8b4711983e3e823851058ff13ba1e28a8b6d88f 100644 --- a/tests/library/Trait/UserGroupFixtures.php +++ b/tests/library/Trait/UserGroupFixtures.php @@ -22,6 +22,7 @@ trait Trait_UserGroupFixtures { protected $_referent; protected $_referent_membership; + public function addUserToRightsReferent($user) { $this->_referent = Class_UserGroup::newInstanceWithId(28) ->setLibelle('Referent') @@ -36,6 +37,7 @@ trait Trait_UserGroupFixtures { Class_UserGroup::RIGHT_USER_NOTICES_LIEES, Class_UserGroup::RIGHT_USER_SIGB_USER_READ ]); + Storm_Test_ObjectWrapper::onLoaderOfModel('Class_UserGroup') ->whenCalled('findAll') ->answers([