diff --git a/.gitattributes b/.gitattributes index 4588aa54b70fdf10bc8d4000f00d6fecac489d74..6a769da18be561683cb9a5229ff304eafbce7bd3 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 9dd28f1a8592b639461d3575259e0d3d94874c6f..450a130787ba3b663c4eda5fcfe3119d1ce70422 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 3e27069d60d30a1892930200d2073ac53aea0008..9f951bbc2a480f82d767d2ff7a679a31e2399b4d 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 c8f4d9a0e42a9d28be6a76d76771c3ba2461b6f0..d4dc04acba1c75a31da41a9a09b7015fb87ca36d 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 19150fb711f09564c75f0dd5539b7660f2f32de7..c8671a7cae7d48038147a247f74457a0d35a4764 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 6217b2ebaf42ddc677afc1b5a3a6158e27c0ffb9..cc26b2590975788ccd3d3d13dd8a2d5b06dbdf77 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 d0a7fd8749053be5cfedfab1c3bdb5fbf5391caf..a07020e2e4155bde853f9cce4f4fbd58d21d84b8 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 Binary files /dev/null and b/public/admin/images/picto/calendar.gif differ diff --git a/tests/application/modules/admin/controllers/BibControllerTest.php b/tests/application/modules/admin/controllers/BibControllerTest.php index 4d51c06eefafa3676fd7b89ff5c76aee504e16dd..fe48cfcf4cf3793a4f97c4798bd5218b93491a20 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 5bb8bfac84765e97fd0e46527385e94c85be5bef..3ade5b84548de37b6724434a133ee8d5203fb8a8 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'); } }