From 172f429f2f0f5e5c6be0475b4c4d595bdbf52ae5 Mon Sep 17 00:00:00 2001
From: llaffont <llaffont@afi-sa.fr>
Date: Fri, 22 Aug 2014 15:30:42 +0200
Subject: [PATCH] hotline #15519 add Cyberlibris ID for SSO

---
 VERSIONS                                      |   1 +
 library/Class/AdminVar.php                    |  21 ++--
 library/Class/NumilogLink.php                 |  10 +-
 library/Class/Users.php                       | 109 +++++++++---------
 library/ZendAfi/View/Helper/RenderAlbum.php   |  13 ++-
 .../controllers/AdminIndexControllerTest.php  |  15 ++-
 .../ZendAfi/View/Helper/RenderAlbumTest.php   |  70 +++++++++--
 7 files changed, 152 insertions(+), 87 deletions(-)

diff --git a/VERSIONS b/VERSIONS
index aaba87820a2..8fcac500b66 100644
--- a/VERSIONS
+++ b/VERSIONS
@@ -1,3 +1,4 @@
+- ticket #15519: Cyberlibris: validation du SSO Cyberlibris depuis une page notice
 - ticket #15309: SIGB Orphée: correction de l'intégration des notices lorsque la zone 010 est répétée.
 
 
diff --git a/library/Class/AdminVar.php b/library/Class/AdminVar.php
index e01a388ef3f..2702c757d6c 100644
--- a/library/Class/AdminVar.php
+++ b/library/Class/AdminVar.php
@@ -16,7 +16,7 @@
  *
  * 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 
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
  */
 
 class Class_AdminVar extends Storm_Model_Abstract {
@@ -154,8 +154,8 @@ class Class_AdminVar extends Storm_Model_Abstract {
 	 * @return bool
 	 */
 	public static function isCVSEnabled() {
-		return (('' != self::get('CVS_BMKEY')) && ('' != self::get('CVS_BMID')) && 
-						('' != self::get('CVS_SOURCEPASSWORD')) && ('' != self::get('CVS_SOURCEKEY')) && 
+		return (('' != self::get('CVS_BMKEY')) && ('' != self::get('CVS_BMID')) &&
+						('' != self::get('CVS_SOURCEPASSWORD')) && ('' != self::get('CVS_SOURCEKEY')) &&
 						('' != self::get('CVS_SOURCEID')) && ('' != self::get('CVS_SOURCENAME'))
 			);
 	}
@@ -213,10 +213,10 @@ class Class_AdminVar extends Storm_Model_Abstract {
 	 * @return bool
 	 */
 	public static function isArteVodEnabled() {
-		return (('' != self::get('ARTE_VOD_LOGIN')) 
-						&& ('' != self::get('ARTE_VOD_KEY')) 
+		return (('' != self::get('ARTE_VOD_LOGIN'))
+						&& ('' != self::get('ARTE_VOD_KEY'))
 						&& ('' != self::get('ARTE_VOD_SSO_KEY')));
-	}	
+	}
 
 
 	/**
@@ -224,7 +224,7 @@ class Class_AdminVar extends Storm_Model_Abstract {
 	 */
 	public static function isMusicMeEnabled() {
 		return ('' != self::get('MUSICME_URL'));
-	}	
+	}
 
 
 	/**
@@ -318,6 +318,7 @@ class Class_AdminVar extends Storm_Model_Abstract {
 				'NUMILOG_OAI_URL' => 'Paramétrage <a href="http://forge.afi-sa.fr/projects/opac3/wiki/Ressources_externes_enrichissements#Numilog">Numilog</a>',
 				'NUMILOG_OAI_IDBIB' => 'Paramétrage <a href="http://forge.afi-sa.fr/projects/opac3/wiki/Ressources_externes_enrichissements#Numilog">Numilog</a>',
 				'CYBERLIBRIS_URL' => 'Adresse du serveur OAI Cyberlibris',
+				'CYBERLIBRIS_ID' => 'Identifiant SSO Cyberlibris',
 				'OAI_SERVER' => 'Activation du serveur OAI. 0 = inactif, 1 = actif',
 				'PACK_MOBILE' => 'Activation des fonctions avancées du téléphone.  0 = inactif, 1 = actif',
 				'ARTE_VOD_LOGIN' => 'Login ARTE VOD',
@@ -358,7 +359,7 @@ class Class_AdminVar extends Storm_Model_Abstract {
 				'EXTRA_SKIN_PATH' => 'Chemin vers les skins personnalisées, relatif à ' . Class_Profil_Skin::EXTRA_PATH,
 				'ENABLE_COLLABORATIVE_BROWSING' => 'Activation de la navigation collaborative. 0 = inactif, 1 = actif',
 				'KOHA_MULTI_SITES' => 'WS KOHA : Reservation d\'exemplaires pour les multi sites. 0 = inactif, 1 = actif',
-				'LEKIOSK_ID' => 'Identifiant fournit par lekiosk.com',
+				'LEKIOSK_ID' => 'Identifiant fournit par lekiosk.com'
 				];
 		return self::$_knownVars;
 	}
@@ -388,7 +389,7 @@ class Class_AdminVar extends Storm_Model_Abstract {
 	}
 
 
-	/** @return bool */ 
+	/** @return bool */
 	public static function getGoogleAnalyticsId() {
 		$script = static::get('GOOGLE_ANALYTICS');
 		preg_match_all("/setAccount[\', \n\t]+\'([^\']+)\'/i", $script, $matches);
@@ -418,7 +419,7 @@ class Class_AdminVar extends Storm_Model_Abstract {
 		return self::isModuleEnabled('MENU_BOITE');
 	}
 
-	
+
 	public static function isAfficherDispoSurRechercheEnabled() {
 		return self::isModuleEnabled('AFFICHER_DISPONIBILITE_SUR_RECHERCHE');
 	}
diff --git a/library/Class/NumilogLink.php b/library/Class/NumilogLink.php
index d5a670be35f..89651787a0b 100644
--- a/library/Class/NumilogLink.php
+++ b/library/Class/NumilogLink.php
@@ -16,14 +16,12 @@
  *
  * 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 
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
  */
 
 class Class_NumilogLink extends Class_WebService_Abstract {
 	use Trait_TimeSource;
 
-	const CVS_SOURCEXPIRATIONTIME = 30;
-
 	protected $_user;
 
 	public static function forUser($user) {
@@ -48,13 +46,13 @@ class Class_NumilogLink extends Class_WebService_Abstract {
 
 	function getTicket() {
 		return (new Class_CasTicket())->getTicketForUser($this->_user);
-	}	
+	}
 
 
 	function urlExternal($url_external){
 		if ($this->_user)
 			return $url_external.'&ticket='.$this->getTicket();
-		else 
+		else
 			return $url_external;
 	}
 
@@ -62,7 +60,7 @@ class Class_NumilogLink extends Class_WebService_Abstract {
 	function url(){
 		if ($this->_user)
 			return $this->getBaseUrl().'?ticket='.$this->getTicket();
-		else 
+		else
 			return $this->getBaseUrl();
 	}
 
diff --git a/library/Class/Users.php b/library/Class/Users.php
index 2de09138898..1be18ba5649 100644
--- a/library/Class/Users.php
+++ b/library/Class/Users.php
@@ -16,11 +16,11 @@
  *
  * 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 
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
  */
 
 class UsersLoader extends Storm_Model_Loader {
-	
+
 	public function countForNewsletter($id_newsletter) {
 //		return Class_Users::countBy(['where' => 'mail is not null and mail != "" and '
 	}
@@ -32,9 +32,9 @@ class UsersLoader extends Storm_Model_Loader {
 		return $users;
 	}
 
-	
+
 	protected function findUsersById($ids) {
-		if(!is_array($ids) 
+		if(!is_array($ids)
 			 || 0 == count(array_filter($ids)))
 			return [];
 
@@ -76,7 +76,7 @@ class UsersLoader extends Storm_Model_Loader {
 			if ($nb_users_to_fetch <= 0)
 				break;
 
-			$params = ['role_level' => $group->getRoleLevel(), 
+			$params = ['role_level' => $group->getRoleLevel(),
 								 'limit' => $nb_users_to_fetch,
 								 'where' => sprintf('(nom like \'%1$s\' or prenom like \'%1$s\' or login like \'%1$s\')', $like),
 								 'order' => ['nom','prenom', 'login']];
@@ -175,7 +175,7 @@ class UsersLoader extends Storm_Model_Loader {
 			return false;
 		return $user->canAccessAllBibs();
 	}
-	
+
 	/**
 	 * @return array
 	 */
@@ -239,7 +239,7 @@ class Class_Users extends Storm_Model_Abstract {
 	const MODE_CONTACT_SMS = 'is_contact_sms';
 	const CIVILITE_INDEFINIE = 0;
 	const CIVILITE_MADAME = 1;
-	const CIVILITE_MONSIEUR = 2; 
+	const CIVILITE_MONSIEUR = 2;
 
 
 	protected $_table_name = 'bib_admin_users';
@@ -299,7 +299,7 @@ class Class_Users extends Storm_Model_Abstract {
 																					'referenced_in' => 'id_site'],
 
 														'zone' => ['through' => 'bib'],
-														
+
 														'panier_courant' => ['model' => 'Class_PanierNotice',
 																								 'referenced_in' => 'id_panier_courant']];
 
@@ -421,7 +421,7 @@ class Class_Users extends Storm_Model_Abstract {
 	public function getModeContact() {
 		return $this->getIsContactMail()
 			? self::MODE_CONTACT_MAIL
-			: ($this->getIsContactSms() 
+			: ($this->getIsContactSms()
 				 ? self::MODE_CONTACT_SMS
 				 : self::MODE_CONTACT_LETTER);
 	}
@@ -480,7 +480,7 @@ class Class_Users extends Storm_Model_Abstract {
 		return ($this->getDateFin() >= date("Y-m-d"));
 	}
 
-	
+
 	/**
 	 * Retourne la Date au format YYYY/MM/DD
 	 * @return string
@@ -489,24 +489,24 @@ class Class_Users extends Storm_Model_Abstract {
 		return str_replace("-", "/", $this->getNaissance());
 	}
 
-	
+
 	/**
 	 * @return int
 	 */
 	public function getAge(){
 		if(!$date_naissance=$this->getDateNaissanceIso8601())
 			return null;
-		
+
 		$arr1 = explode('/', $date_naissance);
     $arr2 = explode('/', $this->getToday());
-		
+
     if(($arr1[1] < $arr2[1]) || (($arr1[1] == $arr2[1]) && ($arr1[2] <= $arr2[2])))
 			return $arr2[0] - $arr1[0];
 
     return $arr2[0] - $arr1[0] - 1;
 	}
-	
-	
+
+
 	/**
 	 * @return string
 	 */
@@ -515,8 +515,8 @@ class Class_Users extends Storm_Model_Abstract {
 			return $today;
 		return date('Y/m/d');
 	}
-	
-	
+
+
 	/**
 	 * @return array
 	 */
@@ -524,10 +524,10 @@ class Class_Users extends Storm_Model_Abstract {
 		$groupes=array();
 		if ($this->getAge()>= 18)
 			$groupes[]='adulte';
-		else if($this->hasNaissance()) 
+		else if($this->hasNaissance())
 			$groupes[]='mineur';
-		
-		if ($this->hasIdabon()) 
+
+		if ($this->hasIdabon())
 			$groupes[]='abonne';
 		$groupes[]=$this->getLibelleRole();
 		return $groupes;
@@ -560,19 +560,19 @@ class Class_Users extends Storm_Model_Abstract {
 	 * @return array
 	 */
 	public function getUserGroups() {
-		return array_merge(parent::_get('user_groups'), 
+		return array_merge(parent::_get('user_groups'),
 											 Class_UserGroup::findAllBy(['role_level' => $this->getRoleLevel(),
 																									 'group_type' => Class_UserGroup::TYPE_DYNAMIC]));
 	}
 
-	
+
 	/**
 	 * @return string
 	 */
 	public function getLibelleRole(){
 		return ZendAfi_Acl_AdminControllerRoles::getNomRole($this->getRoleLevel());
 	}
-	
+
 	/**
 	 * @return array
 	 */
@@ -637,7 +637,7 @@ class Class_Users extends Storm_Model_Abstract {
 	public function getRights() {
 		$rights = array();
 		$groups = $this->getUserGroups();
-		foreach ($groups as $group) 
+		foreach ($groups as $group)
 			$rights = array_merge($rights, $group->getRights());
 		return array_values(array_unique($rights));
 	}
@@ -718,6 +718,11 @@ class Class_Users extends Storm_Model_Abstract {
 	}
 
 
+	public function hasRightAccessCyberlibris() {
+		return $this->isAbonneAndHasRightToAccess(Class_UserGroup::RIGHT_ACCES_CYBERLIBRIS);
+	}
+
+
 	public function getFirstAvisByIdNotice($id_notice) {
 		$notice = Class_Notice::getLoader()->find($id_notice);
 		$avis = $notice->getAvisByUser($this);
@@ -762,7 +767,7 @@ class Class_Users extends Storm_Model_Abstract {
 				$cond[]="ID_SITE in($inSql)";
 			}
 		}
-		
+
 		$recherche = array_merge(array('role' => '', 'login' => '', 'nom' => ''),
 														 $recherche);
 
@@ -871,7 +876,7 @@ class Class_Users extends Storm_Model_Abstract {
 			$ret["error"]=$error;
 			return $ret;
 		}
-		
+
 		Class_UsersNonValid::newInstance(['login' => $login,
 																			'password' => $mdp,
 																			'mail' => $mail,
@@ -923,7 +928,7 @@ class Class_Users extends Storm_Model_Abstract {
 	// Mot de passe oublié
 	//------------------------------------------------------------------------------------------------------
 	function lostpass($user) {
-		if(!trim($user)) 
+		if(!trim($user))
 			return array('error' => 1);
 
 		if (!$user = Class_Users::getLoader()->findFirstBy(['login' => $user]))
@@ -932,20 +937,20 @@ class Class_Users extends Storm_Model_Abstract {
 		if (!$user)
 			return ['error' => 2];
 
-		if (!$user->hasMail()) 
+		if (!$user->hasMail())
 			return ['error' => 4];
-	
+
 		// envoi du mail
 		$message_mail = sprintf("%s\n\n",
 														$this->_('Vous avez fait une demande de mot de passe sur le portail.'));
 		$message_mail .= $this->_("Votre identifiant : %s\n", $user->getLogin());
 		$message_mail .= $this->_("Votre mot de passe : %s\n", $user->getPassword());
 		$message_mail .= sprintf("%s\n\n", $this->_('Bonne navigation sur le portail'));
-		$erreur = (new Class_Mail())->sendMail(Class_Profil::getCurrentProfil()->getTitreSite(), 
-																					 $message_mail, 
+		$erreur = (new Class_Mail())->sendMail(Class_Profil::getCurrentProfil()->getTitreSite(),
+																					 $message_mail,
 																					 $user->getMail());
 
-		return $erreur 
+		return $erreur
 			? ['message_mail' => '<p class="error">'.$erreur.'</p>']
 			: ['message_mail' => $this->_("Un mail vient de vous être envoyé avec vos paramètres de connexion.")];
 	}
@@ -960,15 +965,15 @@ class Class_Users extends Storm_Model_Abstract {
 		}	else {
 			$user = $this;
 		}
-		 
-		$pseudo = ($complet) ? 
+
+		$pseudo = ($complet) ?
 			trim($user->PRENOM." ".$user->NOM):
 			$user->PSEUDO;
 
-		if ($pseudo) 
+		if ($pseudo)
 			return $pseudo;
 
-		if ($user->PRENOM) 
+		if ($user->PRENOM)
 			return $user->PRENOM;
 
 
@@ -994,7 +999,7 @@ class Class_Users extends Storm_Model_Abstract {
 
 
 	public function getPanierCourant() {
-		return ($panier_courant = parent::getPanierCourant()) ? $panier_courant : Class_PanierNotice::newInstance(); 
+		return ($panier_courant = parent::getPanierCourant()) ? $panier_courant : Class_PanierNotice::newInstance();
 	}
 
 
@@ -1133,17 +1138,17 @@ class Class_Users extends Storm_Model_Abstract {
 
 
 
-	
+
 	public function beforeSave() {
 		$this->setDateMaj(Class_Multimedia_Utils_DateTimeFormat::getInstance()
 											 ->getCurrentDateFormatInYmdHMS());
 
 		if(!$this->isNew())
 			return $this;
-		
+
 		$newletters = Class_Newsletter::findAllBy(['auto_subscribe'=>true]);
 		$this->setNewsletters($newletters);
-		
+
 	}
 
 
@@ -1262,7 +1267,7 @@ class Class_Users extends Storm_Model_Abstract {
 	}
 
 
-	
+
 	/**
 	 * return StdClass
 	 */
@@ -1283,19 +1288,19 @@ class Class_Users extends Storm_Model_Abstract {
 		return $this;
 	}
 
-	
+
 	public function newPanier() {
 		return Class_PanierNotice::newPanierForUser($this);
 	}
-	
+
 
 	public function getEditablePaniers() {
 		$user_paniers  = $this->getPaniers();
 		if ($this->canAccessBackend())
-			$user_paniers = array_unique(array_merge($user_paniers, 
+			$user_paniers = array_unique(array_merge($user_paniers,
 																							 Class_PanierNotice::findAllWithCatalogue()));
 		Class_PanierNotice::sortPaniersByLibelle($user_paniers);
-				
+
 		return $user_paniers;
 	}
 
@@ -1321,21 +1326,21 @@ class Class_Users extends Storm_Model_Abstract {
 														 'categories' => [],
 														 'items' => $data_items,
 														 'options' => ['multipleSelection' => false]];
-		
+
 	}
 
 
 	public function getPaniersDomainesJson() {
 		$paniers = $this->getPaniers();
 	  $paniers_domaines= [];
-			
+
 		foreach($paniers as $panier) {
 			if(!$domaines = $panier->getCatalogues())
 				continue;
-			
+
 			foreach($domaines as $domaine) {
 				$domaine_id = $domaine->getId();
-				
+
 				if(!isset($paniers_domaines[$domaine_id]))
 					$paniers_domaines[$domaine_id] = ['id' => $domaine_id,
 																						'label' => $domaine->getLibelle(),
@@ -1348,17 +1353,17 @@ class Class_Users extends Storm_Model_Abstract {
 				$paniers_domaines[$domaine_id]['items'][] = $panier->toDataForJson();
 			}
 		}
-		
+
 		return ['id' => 'paniers_domaines',
 						'label' => $this->_('Mes paniers rattachés à un domaine'),
 						'categories' => $paniers_domaines,
 						'items' => [],
 						'options' => ['multipleSelection' => false]];
-		
+
 	}
 
 
-	
+
 	public function isNoticeInMyPanier($notice) {
 		$mes_paniers = $this->getPaniers();
 		foreach($mes_paniers as $panier){
diff --git a/library/ZendAfi/View/Helper/RenderAlbum.php b/library/ZendAfi/View/Helper/RenderAlbum.php
index 277fc735400..605c860635c 100644
--- a/library/ZendAfi/View/Helper/RenderAlbum.php
+++ b/library/ZendAfi/View/Helper/RenderAlbum.php
@@ -16,12 +16,12 @@
  *
  * 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 
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
  */
 
 class ZendAfi_View_Helper_RenderAlbum extends Zend_View_Helper_HtmlElement {
 	public function renderAlbum($album) {
-		return $album 
+		return $album
 			? sprintf('<div id="resnum">%s</div>', $this->renderAlbumHelper($album))
 			: '';
 	}
@@ -33,10 +33,13 @@ class ZendAfi_View_Helper_RenderAlbum extends Zend_View_Helper_HtmlElement {
 			Class_ScriptLoader::getInstance()->loadBooklet($album->getId(), '#resnum');
 			return '';
 		}
-		
-		if ($album->isNumilog() || $album->isCyberlibris())
+
+		if ($album->isNumilog())
 			return $this->view->tagLivreNumerique($album);
 
+		if ($album->isCyberlibris())
+			return $this->view->tagCyberlibrisBook($album);
+
 		if ($album->isDiaporama() && $album->hasOnlyImages())
 			return $this->view->tagSlideshow($album);
 
@@ -54,7 +57,7 @@ class ZendAfi_View_Helper_RenderAlbum extends Zend_View_Helper_HtmlElement {
 
 		if ($album->isCoursToutApprendre())
 			return $this->view->tagCoursToutApprendre($album);
-		
+
 		if ($album->isEPUB())
 			return $this->view->monocleReaderServerSide($album);
 
diff --git a/tests/application/modules/admin/controllers/AdminIndexControllerTest.php b/tests/application/modules/admin/controllers/AdminIndexControllerTest.php
index aab333cf2e3..d0ea2434649 100644
--- a/tests/application/modules/admin/controllers/AdminIndexControllerTest.php
+++ b/tests/application/modules/admin/controllers/AdminIndexControllerTest.php
@@ -16,7 +16,7 @@
  *
  * 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 
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
  */
 require_once 'AdminAbstractControllerTestCase.php';
 
@@ -183,12 +183,17 @@ class AdminIndexControllerAdminVarActionTest extends Admin_AbstractControllerTes
 		$this->assertXpathContentContains('//td', 'WEBKIOSK_KEY');
 	}
 
-	
+
 	/** @test */
 	public function boitePanierAutoKeyShouldBePresent() {
 		$this->assertXpathContentContains('//td', 'BOITE_PANIER_AUTO');
 	}
 
+
+	/** @test */
+	public function cyberlibrisIDShouldBePresent() {
+		$this->assertXpathContentContains('//td', 'CYBERLIBRIS_ID');
+	}
 }
 
 
@@ -234,7 +239,7 @@ class AdminIndexControllerAdminVarEditResaConditionActionTest extends Admin_Abst
 
 	public function setUp() {
 		parent::setUp();
-		
+
 		$this->_resa_condition = Class_AdminVar::getLoader()
 			->newInstanceWithId('RESA_CONDITION')
 			->setValeur('Mes+conditions+de+reservation');
@@ -254,9 +259,9 @@ class AdminIndexControllerAdminVarEditResaConditionActionTest extends Admin_Abst
 
 	/** @test */
 	public function postResaConditionShouldEncodeItsValeur() {
-		$this->postDispatch('/admin/index/adminvaredit/cle/RESA_CONDITION', 
+		$this->postDispatch('/admin/index/adminvaredit/cle/RESA_CONDITION',
 												array('valeur' => 'Il faut demander'));
-		
+
 		$this->assertEquals('Il+faut+demander', $this->_resa_condition->getValeur());
 	}
 }
diff --git a/tests/library/ZendAfi/View/Helper/RenderAlbumTest.php b/tests/library/ZendAfi/View/Helper/RenderAlbumTest.php
index bf6c128c8a0..4800484282e 100644
--- a/tests/library/ZendAfi/View/Helper/RenderAlbumTest.php
+++ b/tests/library/ZendAfi/View/Helper/RenderAlbumTest.php
@@ -16,7 +16,7 @@
  *
  * 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 
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
  */
 
 abstract class ZendAfi_View_Helper_RenderAlbumTestCase extends ViewHelperTestCase {
@@ -62,7 +62,7 @@ class ZendAfi_View_Helper_RenderAlbumEPUBTest extends ZendAfi_View_Helper_Render
 
 	/** @test */
 	public function pageShouldContainsLinkToDownloadEPUB() {
-		$this->assertXPathContentContains($this->html, 
+		$this->assertXPathContentContains($this->html,
 																			'//a[contains(@href,"/userfiles/album/999/big/media/versailles.epub")]',
 																			'versailles.epub');
 	}
@@ -70,7 +70,7 @@ class ZendAfi_View_Helper_RenderAlbumEPUBTest extends ZendAfi_View_Helper_Render
 
 	/** @test */
 	public function pageShouldDisplayEPubFullScreenLink() {
-		$this->assertXPath($this->html, 
+		$this->assertXPath($this->html,
 											 '//a[contains(@href, "bib-numerique/full-screen/id/123")]');
 
 	}
@@ -98,10 +98,10 @@ class ZendAfi_View_Helper_RenderAlbumGallicaTest extends ZendAfi_View_Helper_Ren
 	/** @test */
 	public function pageShouldContainsGallicaPlayer() {
 		$this->assertXPath($this->html,
-											 '//object//param[@name="FlashVars"][contains(@value, "1234")]', 
+											 '//object//param[@name="FlashVars"][contains(@value, "1234")]',
 											 $this->html);
 	}
-	
+
 }
 
 
@@ -125,14 +125,14 @@ class ZendAfi_View_Helper_RenderAlbumFormationVodeclicTest extends ZendAfi_View_
 																						 ['id' => '20',
 																							'libelle' => 'Multimedia'])
 			->addRight(Class_UserGroup::RIGHT_ACCES_VODECLIC);
-		
+
 
 		$logged_user->beAbonneSIGB()
 			->setUserGroups([$this->group_multimedia]);
 		ZendAfi_Auth::getInstance()->logUser($logged_user);
 
 		$this->_helper->renderAlbum($this->formation);
-		$this->assertContains('vodeclic_window.location = "http://biblio.vodeclic.com/formation/549"', 
+		$this->assertContains('vodeclic_window.location = "http://biblio.vodeclic.com/formation/549"',
 													Class_ScriptLoader::getInstance()->html());
 	}
 
@@ -152,7 +152,7 @@ class ZendAfi_View_Helper_RenderAlbumNumeriquePremiumTest extends ZendAfi_View_H
 	public function setUp() {
 		parent::setUp();
 		$this->book = $this->fixture('Class_Album',
-																 ['id' => 3, 
+																 ['id' => 3,
 																	'libelle' => 'Emile Zola',
 																	'external_uri' => 'http://www.numeriquepremium.com/content/books/9782760622173'])
 			->beNumeriquePremium();
@@ -169,7 +169,7 @@ class ZendAfi_View_Helper_RenderAlbumNumeriquePremiumTest extends ZendAfi_View_H
 	/** @test */
 	public function linkToNumeriquePremiumPageShouldBePresentOnValidUser() {
 		$logged_user = $this->fixture('Class_Users',
-																	['id' => 6, 
+																	['id' => 6,
 																	 'nom'=>'Paul',
 																	 'login'=>'Polux',
 																	 'password'=>'123456',
@@ -193,4 +193,56 @@ class ZendAfi_View_Helper_RenderAlbumNumeriquePremiumTest extends ZendAfi_View_H
 }
 
 
+
+
+class ZendAfi_View_Helper_RenderAlbumCyberlibrisTest extends ZendAfi_View_Helper_RenderAlbumTestCase {
+	public function setUp() {
+		parent::setUp();
+
+		Class_AdminVar::newInstanceWithId('CYBERLIBRIS_ID',
+																			['valeur' => 'my_lib']);
+
+		$this->book = $this->fixture('Class_Album',
+																 ['id' => 3,
+																	'libelle' => 'Totem et Thora',
+																	'id_origine' => '88817216',
+																	'external_uri' => 'http://www.bibliovox.com/bookdetails.aspx?docID=88817216'])
+			->beCyberlibris();
+	}
+
+
+	/** @test */
+	public function linkToBookShouldNotBeDisplay(){
+		$this->assertContains('Vous devez être connecté',
+													$this->_helper->renderAlbum($this->book));
+	}
+
+
+	/** @test */
+	public function linkToCyberlibrisPageShouldBePresentOnValidUser() {
+		$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_CYBERLIBRIS]])]
+																		]);
+
+		$logged_user->beAbonneSIGB()->assertSave();
+
+		ZendAfi_Auth::getInstance()->logUser($logged_user);
+		$html = $this->_helper->renderAlbum($this->book);
+		$this->assertXPath($html,
+											 '//a[@href="http://www.bibliovox.com/my_lib?docid=88817216"]',
+											 $html);
+	}
+
+}
+
+
 ?>
-- 
GitLab