diff --git a/application/modules/opac/controllers/CmsController.php b/application/modules/opac/controllers/CmsController.php index 2545801bdf04cd7281f75c63bace2eade41dbddc..38f10a1a2d7ff5ee1feb72461260bb25983a61ea 100644 --- a/application/modules/opac/controllers/CmsController.php +++ b/application/modules/opac/controllers/CmsController.php @@ -19,7 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ class CmsController extends Zend_Controller_Action { - public function init() { parent::init(); @@ -115,13 +114,17 @@ class CmsController extends Zend_Controller_Action { } + public function articleviewAction() { - if ( - null === ( - $article = Class_Article::getLoader()->find((int)$this->_getParam('id')) - ) - ) { - $this->_redirect('opac/index', array('exit' => true)); + if (null === ($article = Class_Article::find((int)$this->_getParam('id')))) { + $this->_redirect('opac/index', ['exit' => true]); + } + + xdebug_break(); + + if ($article->isArchived() && !Class_Users::isCurrentUserCanAccesBackend()) { + throw new Zend_Controller_Action_Exception($this->view->_('Désolé, cette page n\'existe pas'), 404); + return; } $langue = Zend_Registry::get('translate')->getLocale(); diff --git a/application/modules/opac/controllers/ErrorController.php b/application/modules/opac/controllers/ErrorController.php index 3c1a8ed79d84587c05f3bacf40d9095cb998c9f4..5f1fa2a16c81dbb1fcaeec640439cf03794ffef2 100644 --- a/application/modules/opac/controllers/ErrorController.php +++ b/application/modules/opac/controllers/ErrorController.php @@ -20,17 +20,31 @@ */ class ErrorController extends Zend_Controller_Action { public function errorAction() { + $errors = $this->_getParam('error_handler'); + + if (isset($errors->exception) && (404 == $errors->exception->getCode())) + return $this->renderPageNotFound($errors->exception); + $this->_response->setHttpResponseCode(500); $this->_response->clearBody(); if (($this->_request->getServer('HTTP_HOST') == 'localhost') || ((null != ($user = Class_Users::getLoader()->getIdentity())) && $user->isAdmin())) { - $this->view->errors = $this->_getParam('error_handler'); + $this->view->errors = $errors; return; } $this->_helper->getHelper('viewRenderer')->setNoRender(true); $this->_helper->getHelper('viewRenderer')->setLayoutScript('empty.phtml'); } -} \ No newline at end of file + + + public function renderPageNotFound($exception) { + $this->_response->setHttpResponseCode(404); + $this->view->exception = $exception; + $this->renderScript('error/404.phtml'); + } +} + +?> \ No newline at end of file diff --git a/application/modules/opac/views/scripts/error/404.phtml b/application/modules/opac/views/scripts/error/404.phtml new file mode 100644 index 0000000000000000000000000000000000000000..8a8778b7e555c04a12c9d3f651e7fe8d8b6a6bef --- /dev/null +++ b/application/modules/opac/views/scripts/error/404.phtml @@ -0,0 +1,6 @@ +<div style="text-align:center; font-size:3em">404</div> +<h1 style="text-align:center"> +<?php +echo $this->exception->getMessage(); +?> +</h1> diff --git a/library/Class/Article.php b/library/Class/Article.php index e68c4d99e6d5eb633ef806014cf11cf704a5fe1e..b8810511c362d03fffc6a0dda5d329764802bbbe 100644 --- a/library/Class/Article.php +++ b/library/Class/Article.php @@ -448,6 +448,7 @@ class Class_Article extends Storm_Model_Abstract { protected $_overrided_attributes = ['id', + 'id_article', 'parent_id', 'article_original', 'langue', @@ -952,6 +953,7 @@ class Class_Article extends Storm_Model_Abstract { return $this; } + /** * @return Class_Article */ @@ -961,6 +963,14 @@ class Class_Article extends Storm_Model_Abstract { } + /** + * @return boolean + */ + public function isArchived() { + return self::STATUS_ARCHIVED == $this->getStatus(); + } + + /** * @return array */ diff --git a/library/ZendAfi/Controller/Plugin/SelectionBib.php b/library/ZendAfi/Controller/Plugin/SelectionBib.php index 29b651a4eb5faab2bce08ac23faf16eea10f663a..4807a6efe221f9b3b8c8ecbc8fab0a77b9208d51 100644 --- a/library/ZendAfi/Controller/Plugin/SelectionBib.php +++ b/library/ZendAfi/Controller/Plugin/SelectionBib.php @@ -117,8 +117,8 @@ class ZendAfi_Controller_Plugin_SelectionBib extends Zend_Controller_Plugin_Abst } if($bib) { - $id_bibs=$bib; - $message="la bibliothèque : ".utf8_decode(Class_Bib::find($bib)->getLibelle()); + $id_bibs=$bib->getId(); + $message="la bibliothèque : ".utf8_decode($bib->getLibelle()); } } diff --git a/tests/application/modules/opac/controllers/CmsControllerTest.php b/tests/application/modules/opac/controllers/CmsControllerTest.php index 0d002829b447c7cfd9d88524c92e28c81daba982..372e4ed34fe837ef45bdd69c8fd9de227742b023 100644 --- a/tests/application/modules/opac/controllers/CmsControllerTest.php +++ b/tests/application/modules/opac/controllers/CmsControllerTest.php @@ -693,6 +693,31 @@ abstract class CmsControllerWithFeteDeLaFriteTestCase extends AbstractController $avis_mimi->beWrittenByAbonne(); + + $avis_florence = $this->fixture('Class_Avis' , + ['id' => 35, + 'auteur' => $this->fixture('Class_Users' , + ['id'=> 123, + 'pseudo' => 'Florence', + 'password' => 'toto', + 'login' => 'florence']), + 'date_avis' => '2012-02-05', + 'note'=>2, + 'entete' => "Argg", + 'avis'=> 'ça ne me tente pas']); + $avis_florence->beWrittenByBibliothecaire(); + + + $avis_anonyme = $this->fixture('Class_Avis' , + ['id' => 38, + 'auteur' => null, + 'date_avis' => '2012-02-05', + 'note'=>2, + 'entete' => "Anonyme", + 'avis'=> 'vous ne savez pas qui je suis']); + $avis_anonyme->beWrittenByBibliothecaire(); + + $article= $this->fixture('Class_Article', ['id' =>224, 'titre' => 'La fête de la frite', @@ -701,46 +726,18 @@ abstract class CmsControllerWithFeteDeLaFriteTestCase extends AbstractController 'events_fin' => '2011-10-05 16:00', 'tags' => 'Tout public;Concert', 'lieu' => $annecy, - 'categorie' =>$alimentaire]); - - $avis_florence = $this->fixture('Class_Avis' , ['id' => 35, - 'auteur' => $this->fixture('Class_Users' , ['id'=> 123, - 'pseudo' => 'Florence', - 'password' => 'toto', - 'login' => 'florence']), - 'date_avis' => '2012-02-05', - 'note'=>2, - 'entete' => "Argg", - 'avis'=> 'ça ne me tente pas' - - ]); - - $avis_florence->beWrittenByBibliothecaire(); + 'categorie' =>$alimentaire, + 'avis' => 1, + 'avis_users' => [$avis_mimi,$avis_florence,$avis_anonyme]]); + $article_en = $this->fixture('Class_Article', + ['id' => 2241, + 'langue' => 'en', + 'parent_id' => 224, + 'titre' => 'Feast of fried', + 'contenu' => '<div>an appetizing feast</div>']); - $avis_anonyme = $this->fixture('Class_Avis' , ['id' => 38, - 'auteur' => null, - 'date_avis' => '2012-02-05', - 'note'=>2, - 'entete' => "Anonyme", - 'avis'=> 'vous ne savez pas qui je suis' - ]); - $avis_anonyme->beWrittenByBibliothecaire(); - - - - - $article->setTraductions(array(Class_Article::getLoader() - ->newInstanceWithId(2241) - ->setLangue('en') - ->setParentId(224) - ->setTitre('Feast of fried') - ->setContenu('<div>an appetizing feast</div>'))) - ->setAvis(1); - $article->setAvisUsers([$avis_mimi,$avis_florence,$avis_anonyme]); - $article->save(); - $this->fixture('Class_CmsRank',['id' => 987, 'article' => $article]); @@ -947,7 +944,77 @@ class CmsControllerArticleViewTest extends CmsControllerWithFeteDeLaFriteTestCas public function speakStopMarkerShouldBePresent() { $this->assertXpathContentContains('//article[@class="auto_resize article"]', '<!-- RSPEAK_STOP -->'); } +} + + + + +class CmsControllerArticleViewArticleArchivedWithWorkflowTest extends CmsControllerWithFeteDeLaFriteTestCase { + protected function _loginHook($account) { + $account->ROLE_LEVEL = ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB; + $account->PSEUDO = "admin"; + } + + + public function setUp() { + parent::setUp(); + + Class_AdminVar::newInstanceWithId('WORKFLOW', ['valeur' => '1']); + + Class_Article::find(224)->beArchived()->assertSave(); + + $this->dispatch('/cms/articleview/id/224'); + } + + /** @test */ + public function responseShouldBeA404NotFound() { + $this->assertResponseCode(404); + } + + + /** @test */ + public function pageShouldContainsH1WithNotFound() { + $this->assertXPathContentContains('//h1', 'Désolé, cette page n\'existe pas'); + } + + + /** @test */ + public function articleTitleShouldNotBeVisible() { + $this->assertNotXPathContentContains('//h1', 'frite'); + } +} + + + +class CmsControllerArticleViewArticleArchivedWithWorkflowAsModoBibTest extends CmsControllerWithFeteDeLaFriteTestCase { + protected function _loginHook($account) { + $account->ROLE_LEVEL = ZendAfi_Acl_AdminControllerRoles::MODO_BIB; + $account->PSEUDO = "redac"; + } + + + public function setUp() { + parent::setUp(); + + Class_AdminVar::newInstanceWithId('WORKFLOW', ['valeur' => '1']); + + Class_Article::find(224)->beArchived()->assertSave(); + + $this->dispatch('/cms/articleview/id/224'); + } + + + /** @test */ + public function responseShouldNotBeA404NotFound() { + $this->assertNotResponseCode(404); + } + + + /** @test */ + public function articleTitleShouldBeVisible() { + $this->assertXPathContentContains('//h1', 'frite'); + } }