From bfa31ff32cb03015ca0d9fa61428303d603e808f Mon Sep 17 00:00:00 2001
From: llaffont <llaffont@git-test.afi-sa.fr>
Date: Wed, 1 Aug 2012 16:17:31 +0000
Subject: [PATCH] =?UTF-8?q?Ajout=20lien=20vers=20le=20planning=20ouverture?=
 =?UTF-8?q?s=20dans=20la=20gestion=20des=20biblioth=C3=A8ques=20+=20tests?=
 =?UTF-8?q?=20/=20refactoring=20+=20option=20Planning?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .gitattributes                                |   1 +
 .../admin/controllers/BibController.php       |   4 +-
 .../controllers/OuverturesController.php      |  12 +++
 .../admin/views/scripts/bib/index.phtml       |  67 ++++++++----
 categories.org                                |   1 +
 library/Class/AdminVar.php                    |   8 ++
 library/Class/Bib.php                         |  12 ++-
 public/admin/images/picto/calendar.gif        | Bin 0 -> 582 bytes
 .../admin/controllers/BibControllerTest.php   |  99 ++++++++++++++----
 .../controllers/OuverturesControllerTest.php  |   5 +-
 10 files changed, 160 insertions(+), 49 deletions(-)
 create mode 100644 public/admin/images/picto/calendar.gif

diff --git a/.gitattributes b/.gitattributes
index 4588aa54b70..6a769da18be 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -2492,6 +2492,7 @@ public/admin/images/picto/articles_48.png -text
 public/admin/images/picto/bibliotheques_16.png -text
 public/admin/images/picto/bibliotheques_48.png -text
 public/admin/images/picto/books.png -text
+public/admin/images/picto/calendar.gif -text svneol=unset#unset
 public/admin/images/picto/catalogues.png -text
 public/admin/images/picto/chat.gif.png -text
 public/admin/images/picto/cms.gif -text
diff --git a/application/modules/admin/controllers/BibController.php b/application/modules/admin/controllers/BibController.php
index 9dd28f1a859..450a130787b 100644
--- a/application/modules/admin/controllers/BibController.php
+++ b/application/modules/admin/controllers/BibController.php
@@ -55,9 +55,7 @@ class Admin_BibController extends Zend_Controller_Action
 		if ($user->ROLE_LEVEL == ZendAfi_Acl_AdminControllerRoles::ADMIN_BIB)
 			$this->_redirect(sprintf('admin/bib/edit/id/%d', $user->ID_SITE));
 
-		$bibClass = new Class_Bib();
-		$liste_bib = $bibClass->getAllBibByIdZone($this->id_zone);
-		$this->view->bib_array = $liste_bib;
+		$this->view->bib_array = Class_Bib::getLoader()->findAllByIdZone($this->id_zone);
 	}
 
 	//------------------------------------------------------------------------------------------------------
diff --git a/application/modules/admin/controllers/OuverturesController.php b/application/modules/admin/controllers/OuverturesController.php
index 3e27069d60d..9f951bbc2a4 100644
--- a/application/modules/admin/controllers/OuverturesController.php
+++ b/application/modules/admin/controllers/OuverturesController.php
@@ -53,6 +53,18 @@ class Admin_OuverturesController extends ZendAfi_Controller_Action {
 								 );
 	}
 
+
+
+
+	public function indexAction() {
+		if (!$this->_getParam('id_site')) {
+			$this->_redirect('admin/bib');
+			return;
+		}
+
+		parent::indexAction();
+	}
+
 }
 
 ?>
\ No newline at end of file
diff --git a/application/modules/admin/views/scripts/bib/index.phtml b/application/modules/admin/views/scripts/bib/index.phtml
index c8f4d9a0e42..d4dc04acba1 100644
--- a/application/modules/admin/views/scripts/bib/index.phtml
+++ b/application/modules/admin/views/scripts/bib/index.phtml
@@ -4,37 +4,62 @@ echo ('<center><div align="center"><br>'.$this->bouton('id=c_19','picto=add.gif'
 ?>
 <br /><table cellspacing="0" cellpadding="0">
     <tr class="soustitre">    
-        <td style="width:30%;">Ville</td>
-        <td style="width:55%">Libelle</td>
-        <td style="width:15%;padding-left:10px;" colspan="4"> Action</td>
+        <td>Ville</td>
+        <td>Libelle</td>
+        <td colspan="6"> Action</td>
     </tr>
      <tr>
-      	<td colspan="6"  class="separ"> </td>
+      	<td colspan="8"  class="separ"> </td>
       </tr>
     
 <?php 
 $ligne = 0;
-foreach ($this->bib_array as $bib)
-{
-    $class_zone = new Class_Zone();
-    $class_bib = new Class_bib();
-    $test = $class_bib->isBibDeletable($bib["ID_SITE"]);
-    if($test == true) $ico_del = '<a href="'.BASE_URL.'/admin/bib/delete/id/'.$bib["ID_SITE"].'">'.$this->boutonIco("type=del").'</a>';
-    else $ico_del ='<a href="#" onclick="alert(\'Cette bibliothèque possède encore du contenu\'); return false;"><img src="'.URL_ADMIN_IMG.'ico/del.gif" class="ico" alt="Supprimer" title="Supprimer"/></a>';
+foreach ($this->bib_array as $bib) {
+	$ico_del = $bib->isBibDeletable()
+		? '<a href="'.BASE_URL.'/admin/bib/delete/id/'.$bib->getId().'">'.$this->boutonIco("type=del").'</a>'
+	  : '<a href="#" onclick="alert(\'Cette bibliothèque possède encore du contenu\'); return false;"><img src="'.URL_ADMIN_IMG.'ico/del.gif" class="ico" alt="Supprimer" title="Supprimer"/></a>';
     
     
     $ligne ++ ; if ($ligne & 1) $class="first"; else $class="second";
-    $ville = ucfirst($bib["VILLE"]);
-    echo('<tr class="'.$class.'">
-		<td valign="top">'.$ville. '</td>
-		<td valign="top" align="left">'.$bib["LIBELLE"].'</td>
-		<td valign="top" align="center"><a href="'.BASE_URL.'/admin/bib/edit/id/'.$bib["ID_SITE"].'">'.$this->boutonIco("type=edit").'</a></td>
-    <td valign="top" align="center">'.$ico_del.'</td>
-			<td valign="top" align="center"><a href="'.BASE_URL.'/admin/bib/planacces/id/'.$bib["ID_SITE"].'"><img src="'.URL_ADMIN_IMG.'picto/map.gif" border="0" alt="Configurer le plan d\'accès" title="Configurer le plan d\'accès"/></a></td>
-		<td valign="top" align="center"><a href="'.BASE_URL.'/admin/bib/plans/id_bib/'.$bib["ID_SITE"].'"><img src="'.URL_ADMIN_IMG.'picto/plan.gif" border="0" alt="Plans et de la bibliothèque" title="Plans de la bibliothèque"/></a></td>
-		<td valign="top" align="center"><a href="'.BASE_URL.'/admin/bib/localisations/id_bib/'.$bib["ID_SITE"].'"><img src="'.URL_ADMIN_IMG.'picto/localisation.gif" border="0" alt="Localisations de la bibliothèque" title="Localisations de la bibliothèque"/></a></td>
-    </tr>');
+    $ville = ucfirst($bib->getVille());
+    echo '<tr class="'.$class.'">'.
+				 '<td valign="top">'.$ville. '</td>'.
+				 '<td valign="top" align="left">'.$bib->getLibelle().'</td>'.
+				 '<td valign="top" align="center"><a href="'.BASE_URL.'/admin/bib/edit/id/'.$bib->getId().'">'.$this->boutonIco("type=edit").'</a></td>'.
+				 '<td valign="top" align="center">'.$ico_del.'</td>';
+
+
+
+		$action = '<td valign="top" align="center"><a href="%s"><img src="'.URL_ADMIN_IMG.'picto/%s" border="0" alt="%3$s" title="%3$s"/></a></td>';
+		echo sprintf($action, 
+								 $this->url(array('action' => 'planacces',
+																	'id_bib' => $bib->getId())),
+								 'map.gif',
+								 $this->_('Configurer le plan d\'accès'));
+
+		echo sprintf($action, 
+								 $this->url(array('action' => 'plans',
+																	'id_bib' => $bib->getId())),
+								 'plan.gif',
+								 $this->_('Plans de la bibliothèque'));
+
+		echo sprintf($action, 
+								 $this->url(array('action' => 'localisations',
+																	'id_bib' => $bib->getId())),
+								 'localisation.gif',
+								 $this->_('Localisations de la bibliothèque'));
+
+		if (Class_AdminVar::isPlanningOuverturesEnabled())
+				echo sprintf($action, 
+										 $this->url(array('controller' => 'ouvertures',
+																			'action' => 'index',
+																			'id_site' => $bib->getId())),
+										 'calendar.gif',
+										 $this->_('Planification des ouvertures'));
+																		 
+    echo '</tr>';
 }
+
 echo ('</table>');
 echo '<span id="abonne_erreur" class="abonne">'.$this->errorMessage.'</span>'; ?>
 
diff --git a/categories.org b/categories.org
index 19150fb711f..c8671a7cae7 100644
--- a/categories.org
+++ b/categories.org
@@ -2,6 +2,7 @@
 
 * AFI Multimedia
 ** Planning des ouvertures
+	 Note: les ouvertures sont une option conditionnés par la variable MULTIMEDIA_KEY
 	 [[file:library/Class/Ouverture.php::class%20Class_Ouverture%20extends%20Storm_Model_Abstract%20{][Modele Ouverture]]
 	 [[file:application/modules/admin/views/scripts/ouvertures/edit.phtml::<?php%20echo%20$this->renderForm($this->form)%3B%20?][Vue edit ouverture]] - [[http://localhost/afi-opac3/admin/ouvertures/edit/site_id/1/id/2][Page édition d'une ouverture]]
 	 [[file:tests/application/modules/admin/controllers/OuverturesControllerTest.php::abstract%20class%20OuverturesControllerTestCase%20extends%20Admin_AbstractControllerTestCase%20{][Tests Controller Ouvertures]]
diff --git a/library/Class/AdminVar.php b/library/Class/AdminVar.php
index 6217b2ebaf4..cc26b259097 100644
--- a/library/Class/AdminVar.php
+++ b/library/Class/AdminVar.php
@@ -185,6 +185,14 @@ class Class_AdminVar extends Storm_Model_Abstract {
 	}
 
 
+	/**
+	 * @return bool
+	 */
+	public static function isPlanningOuverturesEnabled() {
+		return self::isMultimediaEnabled();
+	}
+
+
 	/**
 	 * @return bool
 	 */
diff --git a/library/Class/Bib.php b/library/Class/Bib.php
index d0a7fd87490..a07020e2e41 100644
--- a/library/Class/Bib.php
+++ b/library/Class/Bib.php
@@ -50,6 +50,14 @@ class BibLoader extends Storm_Model_Loader {
 	}
 
 
+	public function findAllByIdZone($id_zone=0) {
+		if (!$id_zone)
+			return $this->findAllBy(array('order' => 'ville'));
+		return $this->findAllBy(array('id_zone' => $id_zone,
+																	'order' => 'ville'));
+	}
+
+
 	public function getPortail() {
 		if (!isset($this->_portail))
 			$this->_portail = $this->newInstanceWithId(0)->setLibelle('Portail');
@@ -197,8 +205,8 @@ class Class_Bib extends Storm_Model_Abstract {
 	//----------------------------------------------------------------------------
 	// Controle de suppression d'une bibliothèque
 	//----------------------------------------------------------------------------
-	function isBibDeletable($id_bib)
-	{
+	function isBibDeletable()	{
+		$id_bib = $this->getId();
 		$cms=fetchOne("Select count(*) from cms_categorie where ID_SITE=$id_bib");
 		$rss=fetchOne("Select count(*) from rss_categorie where ID_SITE=$id_bib");
 		$sito=fetchOne("Select count(*) from sito_categorie where ID_SITE=$id_bib");
diff --git a/public/admin/images/picto/calendar.gif b/public/admin/images/picto/calendar.gif
new file mode 100644
index 0000000000000000000000000000000000000000..c05f86bc1260031c3e29d1dab63c8260b2e9ca2d
GIT binary patch
literal 582
zcmZ?wbhEHb<YVAvc*el+|NsAgAn^Ymkn#8L@4x@P|NH;v_pkrIf4=?m|NFP^uYUdi
z@$JX+Z~s4h`T648ucu%CzyJLG)5lNmKK=Oo;q&|V?>_+HyZ7(jzI*@n{p+{y-@N(o
z_RZVZZ$7+!_2$XzFE5|JeEICf^QX_BJ$?4<$+M@ApFVx`^vR<q|L-1t{P6Mphah<G
z0T|x9ckj+!AiQ_$?%msW@7=z4_tu>|H}AZ?di3`7o7b*hy8;B4uDm+2{r`a({|?Of
zaA^7e-97(zb${4BbNBAuyLRu|xohW+ojd-oDB8Mp>*mdyH*MbZe{tfHrArnsS-fcR
zqJ@hV{%^PW(_}tn+LWo&rcRkUW%AU?lc!9cIC)}mS#e=WVPR=uK}kVgQC?nQUS2_N
zUO`@dL0(Q?PEKxiPHt9qZgy5~R#r|{W>!W*azadeOk_-CP-qYXWkB&K3j;gDe+C_p
zF`zhMU|-ze-PGLT)0W{E*cBMo8`d3|>8WFBsb^(iV5Mhap_Ssyz{A5J!myNqi;E%L
zQ&nGI(_B~6RNcr(CDnyNkegY6l~sX3RFomYU0Bu5##%~BTU<#=EY5@9(cdk=Ox{pI
zTU#c<mD$08!%Krrkx^2TA?n7hJNF(udUEQF?fHx1%5D+DOa~m97<gGYJ}@{mu`ooQ
W%i&CZ);&W{Vt0?^W>;SY25SI#&?TDy

literal 0
HcmV?d00001

diff --git a/tests/application/modules/admin/controllers/BibControllerTest.php b/tests/application/modules/admin/controllers/BibControllerTest.php
index 4d51c06eefa..fe48cfcf4cf 100644
--- a/tests/application/modules/admin/controllers/BibControllerTest.php
+++ b/tests/application/modules/admin/controllers/BibControllerTest.php
@@ -24,8 +24,7 @@ abstract class BibControllerTestCase extends AbstractControllerTestCase {
 	public function setUp() {
 		parent::setUp();
 
-		$this->bib_annecy = Class_Bib::getLoader()
-			->newInstanceWithId(2)
+		$this->bib_annecy = Class_Bib::newInstanceWithId(2)
 			->setLibelle('Annecy')
 			->setResponsable('Ludivine')
 			->setAffZone('')
@@ -36,17 +35,78 @@ abstract class BibControllerTestCase extends AbstractControllerTestCase {
 			->setArticleCategories(array());
 
 
-		$this->bib_cran = Class_Bib::getLoader()
-			->newInstanceWithId(3)
+		$this->bib_cran = Class_Bib::newInstanceWithId(3)
 			->setLibelle('Cran-Gévrier');
 
+		$all_bibs = array($this->bib_annecy, $this->bib_cran);
+
 		Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Bib')
 			->whenCalled('findAll')
-			->answers(array($this->bib_annecy, $this->bib_cran));
+			->answers($all_bibs)
+
+			->whenCalled('findAllByIdZone')
+			->answers($all_bibs);
 	}
 }
 
 
+
+
+class BibControllerIndexWidthAdminPortailTest extends BibControllerTestCase {
+	protected function _loginHook($account) {
+		$account->ROLE_LEVEL = ZendAfi_Acl_AdminControllerRoles::ADMIN_PORTAIL;
+	}
+
+	public function setUp() {
+		parent::setUp();
+		Class_AdminVar::newInstanceWithId('MULTIMEDIA_KEY')->setValeur('coin coin');
+		$this->dispatch('admin/bib/index', true);
+	}
+
+
+	/** @test */
+	public function pageShouldDisplayBibAnnecy() {
+		$this->assertXPathContentContains('//tr[3]//td', 'Annecy');
+	}
+
+
+	/** @test */
+	public function bibAnnecyShouldHaveActionToEdit() {
+		$this->assertXPath('//tr[3]//a[contains(@href, "bib/edit/id/2")]');
+	}
+
+
+	/** @test */
+	public function bibAnnecyShouldHaveActionToOuverturesIndex() {
+		$this->assertXPath('//tr[3]//a[contains(@href, "ouvertures/index/id_site/2")]');
+	}
+
+
+	/** @test */
+	public function pageShouldDisplayBibCran() {
+		$this->assertXPathContentContains('//tr[4]//td', 'Cran-Gévrier');
+	}
+
+
+	/** @test */
+	public function bibCranShouldHaveActionToEdit() {
+		$this->assertXPath('//tr[4]//a[contains(@href, "bib/edit/id/3")]');
+	}
+
+
+	/** @test */
+	public function whenMultimediaDisabledOuverturesShouldNotBeAvailable() {
+		Class_AdminVar::find('MULTIMEDIA_KEY')->setValeur('');
+		$this->bootstrap();
+		parent::setUp();
+		$this->dispatch('admin/bib/index', true);
+		$this->assertNotXPath('//a[contains(@href, "ouvertures")]');
+	}
+}
+
+
+
+
 class BibControllerWithModoPortailTest extends BibControllerTestCase {
 	protected function _loginHook($account) {
 		$account->ROLE_LEVEL = ZendAfi_Acl_AdminControllerRoles::MODO_PORTAIL;
@@ -90,13 +150,18 @@ class BibControllerWithModerateurBibTest extends BibControllerTestCase {
 
 
 
-class BibControllerWithAdminBibTest extends BibControllerTestCase {
+
+abstract class BibControllerWithAdminBibTestCase extends BibControllerTestCase {
 	protected function _loginHook($account) {
 		$account->ROLE_LEVEL = ZendAfi_Acl_AdminControllerRoles::ADMIN_BIB;
 		$account->ID_SITE = 2;
 	}
+}
+
 
 
+
+class BibControllerWithAdminBibTest extends BibControllerWithAdminBibTestCase {
 	/** @test */
 	function responseToIndexShouldBeARedirectToEditSite2() {
 		$this->dispatch('admin/bib/index');
@@ -120,12 +185,8 @@ class BibControllerWithAdminBibTest extends BibControllerTestCase {
 
 
 
-class BibControllerWithAdminBibEditAnnecyTest extends BibControllerTestCase {
-	protected function _loginHook($account) {
-		$account->ROLE_LEVEL = ZendAfi_Acl_AdminControllerRoles::ADMIN_BIB;
-		$account->ID_SITE = 2;
-	}
 
+class BibControllerWithAdminBibEditAnnecyTest extends BibControllerWithAdminBibTestCase {
 	public function setUp() {
 		parent::setUp();
 		$this->dispatch('admin/bib/edit/id/2');
@@ -144,17 +205,16 @@ class BibControllerWithAdminBibEditAnnecyTest extends BibControllerTestCase {
 
 
 
+
 class BibControllerGetArticlesJSONTest extends BibControllerTestCase {
 	public function setUp() {
 		parent::setUp();
 
-		$vive_les_vacances = Class_Article::getLoader()
-			->newInstanceWithId(42)
+		$vive_les_vacances = Class_Article::newInstanceWithId(42)
 			->setIdCat(3)
 			->setTitre('Vive les vacances !');
 
-		$cat_cran_news = Class_ArticleCategorie::getLoader()
-			->newInstanceWithId(3)
+		$cat_cran_news = Class_ArticleCategorie::newInstanceWithId(3)
 			->setLibelle('News')
 			->setIdSite(3)
 			->setArticles(array($vive_les_vacances))
@@ -163,19 +223,16 @@ class BibControllerGetArticlesJSONTest extends BibControllerTestCase {
 		$this->bib_cran->setArticleCategories(array($cat_cran_news));
 
 
-		$reseau_en_route = Class_Article::getLoader()
-			->newInstanceWithId(123)
+		$reseau_en_route = Class_Article::newInstanceWithId(123)
 			->setIdCat(9)
 			->setTitre('Reseau en route');
 
-		$cat_portail_infos = Class_ArticleCategorie::getLoader()
-			->newInstanceWithId(9)
+		$cat_portail_infos = Class_ArticleCategorie::newInstanceWithId(9)
 			->setLibelle('Infos')
 			->setArticles(array($reseau_en_route))
 			->setSousCategories(array());
 
-		$portail = Class_Bib::getLoader()
-			->newInstanceWithId(0)
+		$portail = Class_Bib::newInstanceWithId(0)
 			->setLibelle('Portail')
 			->setArticleCategories(array($cat_portail_infos));
 
diff --git a/tests/application/modules/admin/controllers/OuverturesControllerTest.php b/tests/application/modules/admin/controllers/OuverturesControllerTest.php
index 5bb8bfac847..3ade5b84548 100644
--- a/tests/application/modules/admin/controllers/OuverturesControllerTest.php
+++ b/tests/application/modules/admin/controllers/OuverturesControllerTest.php
@@ -89,8 +89,9 @@ class OuverturesControllerIndexActionWithoutSiteTest extends OuverturesControlle
 
 
 	/** @test */
-	public function actionShouldBeIndex() {
-		$this->assertAction('index');
+	public function answerShouldRedirectToIndexBib() {
+		xdebug_break();
+		$this->assertRedirectTo('/admin/bib');
 	}
 }
 
-- 
GitLab