diff --git a/VERSIONS_WIP/80976 b/VERSIONS_WIP/80976 new file mode 100644 index 0000000000000000000000000000000000000000..68fa36c80c5586b1555e059ebe9968dd94ac7350 --- /dev/null +++ b/VERSIONS_WIP/80976 @@ -0,0 +1 @@ + - ticket #80976 : gestion des integrations hotline niveau 1 \ No newline at end of file diff --git a/application/modules/admin/controllers/RecordsController.php b/application/modules/admin/controllers/RecordsController.php index 9c92ea3ef035cab68d69781f1373c8856bcb968b..7a9c35bb837f6869faf6ecac0f224c65f96a0464 100644 --- a/application/modules/admin/controllers/RecordsController.php +++ b/application/modules/admin/controllers/RecordsController.php @@ -30,7 +30,7 @@ class Admin_RecordsController extends ZendAfi_Controller_Action { if ($album = $record->getAlbum()){ $album->createThumbnail(); $url_vignette = $album->getThumbnailUrl(); - + $record->setUrlVignette($url_vignette); $record->setUrlImage(($poster = $album->getPoster()) ? $poster : $url_vignette); $record->save(); @@ -107,4 +107,18 @@ class Admin_RecordsController extends ZendAfi_Controller_Action { $this->_helper->notify($this->_('La bande-annonce a bien été mise à jour')); $this->_redirectClose($this->_getReferer()); } + + + public function deleteItemAction() { + if (!$item = Class_Exemplaire::find($this->_getParam('id'))) + $this->_helper->notify($this->_('Exemplaire non trouvé')); + + if ($item) { + $item->delete(); + $this->_helper->notify($this->_('Exemplaire "%s" supprimé', + $item->getCodeBarres())); + } + + $this->_redirectToReferer(); + } } diff --git a/library/ZendAfi/View/Helper/Notice/Unimarc.php b/library/ZendAfi/View/Helper/Notice/Unimarc.php index 41330ec655e97ed4ab69465d6c29e6f6d89f024c..9e67feea2476295f8a9c033c15851a86a723c718 100644 --- a/library/ZendAfi/View/Helper/Notice/Unimarc.php +++ b/library/ZendAfi/View/Helper/Notice/Unimarc.php @@ -136,7 +136,8 @@ class ZendAfi_View_Helper_Notice_Unimarc extends Zend_View_Helper_HtmlElement { . $this->_tag('br'); $html .= $this->renderItem995($item) - . $this->renderItemDownload($item); + . $this->renderItemDownload($item) + . $this->renderItemDelete($item); return $this->_tag('h3', $item->getBibLibelle() . ' ' . $item->getCodeBarres()) . $this->_tag('div', $html); @@ -194,6 +195,31 @@ class ZendAfi_View_Helper_Notice_Unimarc extends Zend_View_Helper_HtmlElement { } + protected function renderItemDelete($item) { + if (!Class_Users::isCurrentUserAdmin()) + return ''; + + $delete_url = $this->view->url(['module' => 'admin', + 'controller' => 'records', + 'action' => 'delete-item', + 'id' => $item->getId()], + null, true); + + return $this->view->tag('a', + Class_Admin_Skin::current()->renderActionIconOn('delete', $this->view) . $this->_('Supprimer l\'exemplaire'), + ['style' => 'float:right;', + 'onclick' => 'return confirm(\'' . $this->_('Supprimer cet exemplaire ?') . '\');', + 'href' => $delete_url]); + + $button = (new Class_Entity) + ->setText($this->_('Supprimer l\'exemplaire')) + ->setImage(Class_Admin_Skin::current()->renderActionIconOn('delete', $this->view)) + ->setAttribs(); + + return $this->view->admin_Button($button); + } + + public function __call($name, $args) { if ('visit' != substr($name, 0, 5)) throw new RuntimeException('Call to unknown method ' . get_class($this) . '::' . $name); diff --git a/tests/application/modules/admin/controllers/RecordsControllerTest.php b/tests/application/modules/admin/controllers/RecordsControllerTest.php index 526b154471e2ffc4ce83daf10dce23ce4ed6bbdd..a787390ba24226542790caf09d3d98b53f1e8704 100644 --- a/tests/application/modules/admin/controllers/RecordsControllerTest.php +++ b/tests/application/modules/admin/controllers/RecordsControllerTest.php @@ -500,3 +500,58 @@ class RecordsControllerTrailerPostTest extends RecordsControllerTestCase { 'Le service n\'a pas répondu'); } } + + + + +class RecordsControllerDeleteItemTest extends RecordsControllerTestCase { + public function setUp() { + parent::setUp(); + $this->fixture('Class_Exemplaire', + ['id' => 4, + 'id_notice' => '12345', + 'cote' => '234', + 'code_barres' => 'ABC4' ]); + $this->dispatch('/admin/records/delete-item/id/4', true); + } + + + /** @test */ + public function itemShouldBeDeleted() { + $this->assertNull(Class_Exemplaire::find(4)); + } + + + /** @test */ + public function responseShouldRedirectToReferer() { + $this->assertRedirect(); + } + + + /** @test */ + public function responseShouldNotifyDeletion() { + $this->assertFlashMessengerContentContains('Exemplaire "ABC4" supprimé'); + } +} + + + + +class RecordsControllerDeleteInexistingItemTest extends RecordsControllerTestCase { + public function setUp() { + parent::setUp(); + $this->dispatch('/admin/records/delete-item/id/4', true); + } + + + /** @test */ + public function responseShouldRedirectToReferer() { + $this->assertRedirect(); + } + + + /** @test */ + public function responseShouldNotifyDeletion() { + $this->assertFlashMessengerContentContains('Exemplaire non trouvé'); + } +} \ No newline at end of file diff --git a/tests/application/modules/opac/controllers/RechercheControllerViewnoticeTest.php b/tests/application/modules/opac/controllers/RechercheControllerViewnoticeTest.php index bb8096623d24124a0ff4fe23f900c0505af9e90b..d950afa71e87e87c0f12cf8b33f84675b206852b 100644 --- a/tests/application/modules/opac/controllers/RechercheControllerViewnoticeTest.php +++ b/tests/application/modules/opac/controllers/RechercheControllerViewnoticeTest.php @@ -30,16 +30,37 @@ class RechercheControllerViewnoticeWithInspectorGadgetTest extends AbstractContr ['id' => 2, 'unimarc' => '', 'alpha_titre' => '', - 'alpha_auteur' => '']); - - $this->dispatch('/opac/recherche/viewnotice/id/2/inspector_gadget/1', true); + 'alpha_auteur' => '', + 'exemplaires' => [ $this->fixture('Class_Exemplaire', + ['id' => 4, + 'cote' => '234', + 'code_barres' => 'ABC4' ]) ]]); } /** @test */ public function buttonNoticeBokehShouldBePresent() { + $this->dispatch('/opac/recherche/viewnotice/id/2/inspector_gadget/1', true); + $this->assertXPathContentContains('//button', 'Notice Bokeh'); } + + + /** @test */ + public function inspectorShouldContainsButtonToDeleteItem() { + $this->dispatch('/opac/recherche/viewnotice/id/2/inspector_gadget/1', true); + + $this->assertXPath('//button[contains(@onclick, "\/admin\/records\/delete-item\/id\/4")]'); + } + + + /** @test */ + public function inspectorAsRegularUserShouldNotContainsButtonToDeleteItem() { + Class_Users::getIdentity()->beModoBib(); + $this->dispatch('/opac/recherche/viewnotice/id/2/inspector_gadget/1', true); + + $this->assertNotXPath('//button[contains(@onclick, "\/admin\/records\/delete-item\/id\/4")]'); + } }