Skip to content
Snippets Groups Projects
Commit b3e6af2a authored by Laurent's avatar Laurent
Browse files

dev #80976 add administration action on inspector gadget to delete an item

parent 32a0009d
2 merge requests!2869Master,!2860Dev#80976 gestion des integrations hotline niveau 1
Pipeline #5150 passed with stage
in 57 minutes and 26 seconds
- ticket #80976 : gestion des integrations hotline niveau 1
\ No newline at end of file
......@@ -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();
}
}
......@@ -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);
......
......@@ -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
......@@ -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")]');
}
}
......
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