diff --git a/library/Class/UserGroup.php b/library/Class/UserGroup.php index 319242fd9687a9854e6fc40e9b382ce937c26069..3160871c8f7fb2cbe141514468391e1dca19c916 100644 --- a/library/Class/UserGroup.php +++ b/library/Class/UserGroup.php @@ -31,7 +31,7 @@ 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) + // Les droits sont utilisés comme puissance de 2 (ce sont des masques) pour l'attribut rights_token const RIGHT_SUIVRE_FORMATION = 0; const RIGHT_DIRIGER_FORMATION = 1; const RIGHT_ACCES_ARTEVOD = 2; @@ -40,7 +40,7 @@ class Class_UserGroup extends Storm_Model_Abstract { const RIGHT_ACCES_VODECLIC = 5; const RIGHT_ACCES_TOUTAPPRENDRE = 6; const RIGHT_ACCES_MUSICME = 7; -// const RIGHT_ACCES_NUMERIQUEPREMIUM = 21; + const RIGHT_ACCES_NUMERIQUEPREMIUM = 20; // droits moderateurs const RIGHT_USER_DOMAINES_SUPPRESSION_LIMIT = 8; @@ -70,6 +70,7 @@ class Class_UserGroup extends Storm_Model_Abstract { self::RIGHT_ACCES_CVS => 'Bibliothèque numérique: accéder à CVS', 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_NUMERIQUEPREMIUM => 'Bibliothèque numérique: accéder à Numérique Premium', self::RIGHT_ACCES_MUSICME => 'Bibliothèque numérique: accéder à Music Me', 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', diff --git a/library/Class/Users.php b/library/Class/Users.php index 7a0944add90ab8a693fbd5ac56ea40fc44c1360a..01ee8dd08b544df0537b90f8d37734ebcd3ea865 100644 --- a/library/Class/Users.php +++ b/library/Class/Users.php @@ -564,6 +564,13 @@ class Class_Users extends Storm_Model_Abstract { } + public function isAbonneAndHasRightToAccess($access_name) { + if ($this->isAbonne() && !$this->isAbonnementValid()) + return false; + return $this->hasRightToAccess($access_name); + } + + /** * @return array */ @@ -623,46 +630,41 @@ class Class_Users extends Storm_Model_Abstract { } - public function hasRightAccesArteVod() { - if ($this->isAbonne() && !$this->isAbonnementValid()) - return false; - return $this->hasRightToAccess(Class_UserGroup::RIGHT_ACCES_ARTEVOD); + /** + * @return bool + */ + public function hasRightAccessNumeriquePremium() { + return $this->isAbonneAndHasRightToAccess(Class_UserGroup::RIGHT_ACCES_NUMERIQUEPREMIUM); } + public function hasRightAccesArteVod() { + return $this->isAbonneAndHasRightToAccess(Class_UserGroup::RIGHT_ACCES_ARTEVOD); + } + public function hasRightAccesNumilog() { - if ($this->isAbonne() && !$this->isAbonnementValid()) - return false; - return $this->hasRightToAccess(Class_UserGroup::RIGHT_ACCES_NUMILOG); + return $this->isAbonneAndHasRightToAccess(Class_UserGroup::RIGHT_ACCES_NUMILOG); } + public function hasRightAccesCVS() { - if ($this->isAbonne() && !$this->isAbonnementValid()) - return false; - return $this->hasRightToAccess(Class_UserGroup::RIGHT_ACCES_CVS); + return $this->isAbonneAndHasRightToAccess(Class_UserGroup::RIGHT_ACCES_CVS); } public function hasRightAccesVodeclic() { - if ($this->isAbonne() && !$this->isAbonnementValid()) - return false; - return $this->hasRightToAccess(Class_UserGroup::RIGHT_ACCES_VODECLIC); + return $this->isAbonneAndHasRightToAccess(Class_UserGroup::RIGHT_ACCES_VODECLIC); } - public function hasRightAccesToutApprendre() { - if ($this->isAbonne() && !$this->isAbonnementValid()) - return false; - return $this->hasRightToAccess(Class_UserGroup::RIGHT_ACCES_TOUTAPPRENDRE); + return $this->isAbonneAndHasRightToAccess(Class_UserGroup::RIGHT_ACCES_TOUTAPPRENDRE); } public function hasRightAccesMusicMe() { - if ($this->isAbonne() && !$this->isAbonnementValid()) - return false; - return $this->hasRightToAccess(Class_UserGroup::RIGHT_ACCES_MUSICME); + return $this->isAbonneAndHasRightToAccess(Class_UserGroup::RIGHT_ACCES_MUSICME); } diff --git a/library/ZendAfi/View/Helper/RenderAlbum.php b/library/ZendAfi/View/Helper/RenderAlbum.php index e2da3bcc4c39e05fd066205be0818dcb15ce2107..b0538f7a8fa121094d66cc17d9723e55ae4b7b0b 100644 --- a/library/ZendAfi/View/Helper/RenderAlbum.php +++ b/library/ZendAfi/View/Helper/RenderAlbum.php @@ -36,6 +36,7 @@ class ZendAfi_View_Helper_RenderAlbum extends Zend_View_Helper_HtmlElement { if ($album->isNumilog()) return $this->view->tagLivreNumerique($album); + if ($album->isDiaporama() && $album->hasOnlyImages()) return $this->view->tagSlideshow($album); @@ -60,6 +61,9 @@ class ZendAfi_View_Helper_RenderAlbum extends Zend_View_Helper_HtmlElement { if ($album->isAudioRecord()) return $this->view->tagAlbumTrackList($album); + if ($album->isNumeriquePremium()) + return $this->view->tagNumeriquePremiumBook($album); + return $this->view->tagAlbumMediaList($album); } } diff --git a/library/ZendAfi/View/Helper/TagNumeriquePremiumBook.php b/library/ZendAfi/View/Helper/TagNumeriquePremiumBook.php new file mode 100644 index 0000000000000000000000000000000000000000..0e06035de53af9b9269b325ca0875d550cd9234e --- /dev/null +++ b/library/ZendAfi/View/Helper/TagNumeriquePremiumBook.php @@ -0,0 +1,41 @@ +<?php +/** + * Copyright (c) 2012, Agence Française Informatique (AFI). All rights reserved. + * + * AFI-OPAC 2.0 is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation. + * + * There are special exceptions to the terms and conditions of the AGPL as it + * is applied to this software (see README file). + * + * AFI-OPAC 2.0 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with AFI-OPAC 2.0; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +class ZendAfi_View_Helper_TagNumeriquePremiumBook extends ZendAfi_View_Helper_TagRessourceNumerique { + use Trait_Translator; + + public function tagNumeriquePremiumBook($album) { + if (!$this->canAccessRessourceNumerique()) + return '<p>'.$this->_('Vous devez être connecté sous un compte avec abonnement valide pour pouvoir accéder à ce document').'</p>'; + + return $this->view->tagAnchor($album->getExternalUri(), + $this->_('Accéder au document Numérique Premium')); + } + + + public function hasRightAccesRessourcesNumeriques($user) { + xdebug_break(); + return $user->hasRightAccessNumeriquePremium(); + } + +} + +?> \ No newline at end of file diff --git a/tests/library/ZendAfi/View/Helper/RenderAlbumTest.php b/tests/library/ZendAfi/View/Helper/RenderAlbumTest.php index 52c8d6be1ec822c7f7dfd980c50c525d26cfdbb6..adf721543c80aa149edb1467d75bbfc079412525 100644 --- a/tests/library/ZendAfi/View/Helper/RenderAlbumTest.php +++ b/tests/library/ZendAfi/View/Helper/RenderAlbumTest.php @@ -146,4 +146,52 @@ class ZendAfi_View_Helper_RenderAlbumFormationVodeclicTest extends ZendAfi_View_ } + + +class ZendAfi_View_Helper_RenderAlbumNumeriquePremiumTest extends ZendAfi_View_Helper_RenderAlbumTestCase { + public function setUp() { + parent::setUp(); + $this->book = $this->fixture('Class_Album', + ['id' => 3, + 'libelle' => 'Emile Zola', + 'external_uri' => 'http://www.numeriquepremium.com/content/books/9782760622173']) + ->beNumeriquePremium(); + } + + + /** @test */ + public function linkToBookShouldNotBeDisplay(){ + $this->assertContains('Vous devez être connecté sous un compte avec abonnement valide pour pouvoir accéder à ce document', + $this->_helper->renderAlbum($this->book)); + } + + + /** @test */ + public function linkToNumeriquePremiumPageShouldBePresentOnValidUser() { + $logged_user = $this->fixture('Class_Users', + ['id' => 6, + 'nom'=>'Paul', + 'login'=>'Polux', + 'password'=>'123456', + 'id_site' => 1, + 'idabon' => '12345', + 'user_groups' => [$this->fixture('Class_UserGroup', + ['id' => '20', + 'libelle' => 'Multimedia', + 'rights' => [Class_UserGroup::RIGHT_ACCES_NUMERIQUEPREMIUM]])] + ]); + + $logged_user->beAbonneSIGB()->assertSave(); + + ZendAfi_Auth::getInstance()->logUser($logged_user); + + $html = $this->_helper->renderAlbum($this->book); + $this->assertXPathContentContains($html, + '//a[@href="http://www.numeriquepremium.com/content/books/9782760622173"]', + utf8_encode('Accéder au document Numérique Premium')); + } + +} + + ?> \ No newline at end of file