Commit dd8e0f90 authored by Patrick Barroca's avatar Patrick Barroca 🐧

Merge branch 'cherry-pick-10040601' into 'hotline'

Réouverture merge branch 'dev#80976_gestion_des_integrations_hotline_niveau_1' into 'master'

See merge request !3192
parents 0c3dee9d 9399a28e
Pipeline #7995 passed with stage
in 37 minutes and 55 seconds
- ticket #80976 : page notice : lorque connecté en tant qu'administrateur, l'outil "Inspector Gadget" permet de supprimer un exemplaire
\ No newline at end of file
......@@ -111,4 +111,17 @@ 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')))
$item->delete();
$this->_helper->notify($item
? $this->_('Exemplaire "%s" supprimé',
$item->getCodeBarres())
: $this->_('Exemplaire non trouvé'));
$this->_redirectToReferer();
}
}
......@@ -152,7 +152,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);
......@@ -210,6 +211,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);
......
......@@ -502,3 +502,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
......@@ -65,16 +65,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")]');
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment