diff --git a/application/modules/admin/controllers/AlbumController.php b/application/modules/admin/controllers/AlbumController.php index 75f614cd67d06f908b173ea9aa7a87821ad97b9a..4d972393113e1900243bee4479d5374bddb21a40 100644 --- a/application/modules/admin/controllers/AlbumController.php +++ b/application/modules/admin/controllers/AlbumController.php @@ -98,9 +98,12 @@ class Admin_AlbumController extends ZendAfi_Controller_Action { public function dilicomExportCsvAction() { + $items = array_map(function($item) { return new Class_TableDescription_PNBItemsRenderer($item); }, + Class_Album_Item::findAll()); + $this->_helper->csv('dilicom_csv.csv', $this->view->renderCsv(new Class_TableDescription_PNBItemsExport('pnb'), - Class_Album_Item::findAll())); + $items)); } diff --git a/application/modules/admin/controllers/RegistrationController.php b/application/modules/admin/controllers/RegistrationController.php index 23b4f40a1cb66e29281838517cd1bbe418a19443..99c384cae90915eee03ba73dada28c3da664a524 100644 --- a/application/modules/admin/controllers/RegistrationController.php +++ b/application/modules/admin/controllers/RegistrationController.php @@ -44,16 +44,16 @@ class Admin_RegistrationController extends ZendAfi_Controller_Action { } - public function deleteAction() { + public function archiveAction() { $this->_redirectToIndex(); if ((!$id = $this->_getParam('id', null)) || (!$registration = Class_UsersNonValid::find($id))) { - return $this->_helper->notify($this->_('Aucune demande d\'inscription supprimée')); + return $this->_helper->notify($this->_('Aucune demande d\'inscription archivée')); } $registration->delete(); - $this->_helper->notify($this->_('Demande d\'inscription de "%s" supprimée', $registration->getLogin())); + $this->_helper->notify($this->_('Demande d\'inscription de "%s" archivée', $registration->getLogin())); } @@ -62,11 +62,11 @@ class Admin_RegistrationController extends ZendAfi_Controller_Action { if ((!$id = $this->_getParam('id', null)) || (!$registration = Class_UsersNonValid::find($id))) - return $this->_helper->notify($this->_('Aucune inscription validée')); + return $this->_helper->notify($this->_('Aucune demande d\'inscription validée')); $message = $registration->activate() ? $this->_('Inscription de "%s" validée', $registration->getLogin()) - : $this->_('Impossible de valider l\'inscription de "%s"', $registration->getLogin()); + : $this->_('Impossible de valider la demande d\'inscription de "%s"', $registration->getLogin()); $this->_helper->notify($message); } diff --git a/application/modules/admin/views/scripts/album/dilicom.phtml b/application/modules/admin/views/scripts/album/dilicom.phtml index 67f786fb33ed29cc55c79754c791864a6441bbbe..5f036500ed8cc9b9ae5c6f3cfe0a654ef2d6d082 100644 --- a/application/modules/admin/views/scripts/album/dilicom.phtml +++ b/application/modules/admin/views/scripts/album/dilicom.phtml @@ -19,8 +19,11 @@ echo $this->Button((new Class_Entity()) ->setImage($this->tagImg($skin->getIconUrl('actions', 'test'), ['style' => 'filter: invert();']))); +$items = array_map(function($item) { return new Class_TableDescription_PNBItemsRenderer($item);}, + $this->dilicom_items); + echo $this->renderTable((new Class_TableDescription_PNBItems('pnb_dilicom'))->setPager(true), - $this->dilicom_items); + $items); echo $this->tag('h2', $this->_('Import des offres Dilicom/PNB')); diff --git a/application/modules/admin/views/scripts/registration/index.phtml b/application/modules/admin/views/scripts/registration/index.phtml index 9050944759cc23420d256b4361cb90e19d85daae..1c5feda7d50872bcabbf2245a0dc93c17305e066 100644 --- a/application/modules/admin/views/scripts/registration/index.phtml +++ b/application/modules/admin/views/scripts/registration/index.phtml @@ -43,11 +43,11 @@ $description = (new Class_TableDescription('registration')) 'label' => $this->_('Visualiser les informations du compte "%s"', $model->getLogin())], - ['url' => ['action' => 'delete', + ['url' => ['action' => 'archive', 'id' => $model->getId()], 'icon' => 'validate', 'condition' => 'hasUser', - 'label' => $this->_('Confirmer l\'inscription de "%s"', $model->getLogin())], + 'label' => $this->_('Archiver la demande d\'inscription de "%s"', $model->getLogin())], ]); }); diff --git a/library/Class/TableDescription.php b/library/Class/TableDescription.php index 1c859776500906d0e0e4862abe32595dee01cd33..421def794cdc3faa9a863bfd1d0e8696d237de79 100644 --- a/library/Class/TableDescription.php +++ b/library/Class/TableDescription.php @@ -120,9 +120,6 @@ class Class_TableDescription { public function addColumn($label, $description) { -// if (is_callable($description)) -// $description = ['callback' => $description]; - if ($description instanceof Closure) $description = ['callback' => $description]; diff --git a/library/Class/TableDescription/PNBItems.php b/library/Class/TableDescription/PNBItems.php index 32f2f99968bfb233f6fe3f1968fd34957955b57e..467f07f0419ee49c2a72928ecb9e3ccfe27e6e6f 100644 --- a/library/Class/TableDescription/PNBItems.php +++ b/library/Class/TableDescription/PNBItems.php @@ -19,94 +19,25 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + class Class_TableDescription_PNBItems extends Class_TableDescription { use Trait_Translator; public function init() { $this ->addColumn($this->_('Titre'), 'title') - ->addColumn($this->_('Nombre de prêts'), 'getQuantityOnTotal') - ->addColumn($this->_('Nombre de prêts simultanés'), 'getLiveQuantity') - ->addColumn($this->_('Durée de prêt en jours'), 'getDuration') - ->addColumn($this->_('Nombre de jours restant sur la licence'), 'getLicenseExpiration') - ->addColumn($this->_('Date de commande'), 'orderDate') + ->addColumn($this->_('Nombre de prêts'), 'quantity_on_total') + ->addColumn($this->_('Nombre de prêts simultanés'), 'live_quantity') + ->addColumn($this->_('Durée de prêt en jours'), 'duration') + ->addColumn($this->_('Nombre de jours restant sur la licence'), 'license_expiration') + ->addColumn($this->_('Date de commande'), 'order_date') ->addRowAction(['url' => ['module' => 'admin', 'controller' => 'album', 'action' => 'edit_album', 'id' => '%s'], - 'id' => 'getAlbumId', + 'id' => function($model) { return $model->getAlbumId(); }, 'anchorOptions' => ['data-popup' => 'true'], 'label' => $this->_('Voir l\'album'), 'icon' => 'view']); } - - - public function orderDate($model) { - return ($date = $model->getOrderDate()) - ? (new DateTime($date))->format('d/m/Y') - : ''; - } - - - public function getDuration($model, $attrib) { - return $this->quantityOrInfinite($model->getDuration()); - } - - - public function getAlbumId($model) { - return $model->getAlbumId(); - } - - - public function quantityOrInfinite($value) { - return $this->isInfinite($value) - ? '∞' - : $value; - } - - - public function getQuantityOnTotal($model) { - return $this->loanQuantityOrLocalLoanCount($model) - . ' / ' - . $this->quantityOrInfinite($model->getLoanQuantity()); - } - - - public function getLiveQuantity($model) { - return $this->loanCountOrLocalOngoing($model) - . ' / ' - . $model->getLoanAllowedNumberOfUsers(); - } - - - public function getLicenseExpiration($model) { - return ('∞' == $this->quantityOrInfinite($model->getAvailabilityDuration())) - ? '∞' - : $model->getAvailabilityRemainingDaysBeforeEndDate(); - } - - - public function loanQuantityOrLocalLoanCount($model) { - return $this->isInfiniteLoan($model) - ? $model->getLocalLoanCount() - : $model->getQuantity(); - } - - - public function loanCountOrLocalOngoing($model) { - return $this->isInfiniteLoan($model) - ? $model->getLocalOngoingCount() - : $model->getLoanCount(); - } - - - public function isInfiniteLoan($model) { - return $this->isInfinite($model->getLoanQuantity()); - } - - - public function isInfinite($value) { - return preg_match('/^9{4,}$/', $value); - } } -?> \ No newline at end of file diff --git a/library/Class/TableDescription/PNBItemsExport.php b/library/Class/TableDescription/PNBItemsExport.php index cf1d4a535292ee8f2ee48a0355cbf80d7900e3b2..dd5647c45222361628286b2b9b7df9beef51a975 100644 --- a/library/Class/TableDescription/PNBItemsExport.php +++ b/library/Class/TableDescription/PNBItemsExport.php @@ -26,13 +26,13 @@ class Class_TableDescription_PNBItemsExport extends Class_TableDescription_PNBIt public function init() { $this ->addColumn($this->_('Titre'), 'title') - ->addColumn($this->_('Prêts / Droits'), 'getQuantityOnTotal') - ->addColumn($this->_('Nombre de prêts'), 'loanQuantityOrLocalLoanCount') - ->addColumn($this->_('Prêts simultanés / Droits'), 'getLiveQuantity') - ->addColumn($this->_('Prêts simultanés'), 'loanCountOrLocalOngoing') - ->addColumn($this->_('Durée de prêt en jours'), 'getDuration') - ->addColumn($this->_('Nombre de jours restant sur la licence'), 'getLicenseExpiration') - ->addColumn($this->_('Date de commande'), 'orderDate') + ->addColumn($this->_('Prêts / Droits'), 'quantity_on_total') + ->addColumn($this->_('Nombre de prêts'), 'loan_quantity_or_local_loan_count') + ->addColumn($this->_('Prêts simultanés / Droits'), 'live_quantity') + ->addColumn($this->_('Prêts simultanés'), 'loan_count_or_local_ongoing') + ->addColumn($this->_('Durée de prêt en jours'), 'duration') + ->addColumn($this->_('Nombre de jours restant sur la licence'), 'license_expiration') + ->addColumn($this->_('Date de commande'), 'order_date') ->addColumn($this->_('Auteur'), 'main_author') ->addColumn($this->_('Éditeur'), 'first_editor') ->addColumn($this->_('Collection'), 'first_collection') diff --git a/library/Class/TableDescription/PNBItemsRenderer.php b/library/Class/TableDescription/PNBItemsRenderer.php new file mode 100644 index 0000000000000000000000000000000000000000..f40234de32f08f3a93b4602894100cdbacbbaf3b --- /dev/null +++ b/library/Class/TableDescription/PNBItemsRenderer.php @@ -0,0 +1,108 @@ +<?php +/** + * Copyright (c) 2012-2019, Agence Française Informatique (AFI). All rights reserved. + * + * BOKEH is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation. + * + * There are special exceptions to the terms and conditions of the AGPL as it + * is applied to this software (see README file). + * + * BOKEH is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with BOKEH; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +class Class_TableDescription_PNBItemsRenderer { + protected $_item; + + public function __construct($item) { + $this->_item = $item; + } + + + public function callGetterByAttributeName($attribute) { + return call_user_func([$this, 'get' . Storm_Inflector::camelize($attribute)]); + } + + + public function __call($name, $params) { + return call_user_func_array([$this->_item, $name], $params); + } + + + public function getOrderDate() { + return ($date = $this->_item->getOrderDate()) + ? (new DateTime($date))->format('d/m/Y') + : ''; + } + + + public function getDuration() { + return $this->quantityOrInfinite($this->_item->getDuration()); + } + + + public function getAlbumId() { + return $this->_item->getAlbumId(); + } + + + public function quantityOrInfinite($value) { + return $this->isInfinite($value) + ? '∞' + : $value; + } + + + public function getQuantityOnTotal() { + return $this->getLoanQuantityOrLocalLoanCount() + . ' / ' + . $this->quantityOrInfinite($this->_item->getLoanQuantity()); + } + + + public function getLiveQuantity() { + return $this->getLoanCountOrLocalOngoing() + . ' / ' + . $this->_item->getLoanAllowedNumberOfUsers(); + } + + + public function getLicenseExpiration() { + return ('∞' == $this->quantityOrInfinite($this->_item->getAvailabilityDuration())) + ? '∞' + : $this->_item->getAvailabilityRemainingDaysBeforeEndDate(); + } + + + public function getLoanQuantityOrLocalLoanCount() { + return $this->isInfiniteLoan() + ? $this->_item->getLocalLoanCount() + : $this->_item->getQuantity(); + } + + + public function getLoanCountOrLocalOngoing() { + return $this->isInfiniteLoan() + ? $this->_item->getLocalOngoingCount() + : $this->_item->getLoanCount(); + } + + + public function isInfiniteLoan() { + return $this->isInfinite($this->_item->getLoanQuantity()); + } + + + public function isInfinite($value) { + return preg_match('/^9{4,}$/', $value); + } +} diff --git a/library/Class/TableDescription/PNBLoans.php b/library/Class/TableDescription/PNBLoans.php index 73fe00b6e1b4ab96edcc45a82af881d84d1e0c65..9081be9c188408fa3c914fd4c55d94c203a5716f 100644 --- a/library/Class/TableDescription/PNBLoans.php +++ b/library/Class/TableDescription/PNBLoans.php @@ -25,9 +25,11 @@ class Class_TableDescription_PNBLoans extends Class_TableDescription { public function init() { $this - ->addColumn($this->_('Date'), 'loanDate') + ->addColumn($this->_('Date'), + function($model) { return $this->loanDate($model); }) ->addColumn($this->_('Titre'), 'title') - ->addColumn($this->_('Date de commande'), 'orderDate') + ->addColumn($this->_('Date de commande'), + function($model) { return $this->orderDate($model); }) ->addColumn($this->_('Auteur'), 'main_author') ->addColumn($this->_('Éditeur'), 'first_editor') ->addColumn($this->_('Collection'), 'first_collection') diff --git a/library/ZendAfi/View/Helper/RenderModelAction.php b/library/ZendAfi/View/Helper/RenderModelAction.php index aca1f8af44f9666715b601329227d4bcfd7590fb..c57e4b6bb93bd2da75ad0fd19a6af94a04bec513 100644 --- a/library/ZendAfi/View/Helper/RenderModelAction.php +++ b/library/ZendAfi/View/Helper/RenderModelAction.php @@ -44,7 +44,7 @@ class ZendAfi_View_Helper_RenderModelAction extends ZendAfi_View_Helper_BaseHelp * 'controller' => 'blog', * 'action' => 'viewauteur', * 'id' => '%s'], - * 'id' => [$this, 'renderModelId'] + * 'id' => function($model) { return $this->renderModelId($model); }, * 'icon' => 'star', * 'label' => $this->_('avi(s)'), * 'caption' => $this->_('click here'), diff --git a/tests/application/modules/admin/controllers/RegistrationControllerTest.php b/tests/application/modules/admin/controllers/RegistrationControllerTest.php index 756408339a242e5a9b4cefad689403189b937a58..59edbc693f987a73f6c92b2ead11fac5d2028abe 100644 --- a/tests/application/modules/admin/controllers/RegistrationControllerTest.php +++ b/tests/application/modules/admin/controllers/RegistrationControllerTest.php @@ -115,13 +115,13 @@ class RegistrationControllerIndexTest extends RegistrationControllerTestCase { /** @test */ - public function pageShouldNotContainsDeleteRegistrationLinkForPwd() { - $this->assertNotXPath('//a[contains(@href, "admin/registration/delete/id/1")]'); + public function pageShouldNotContainsArchiveRegistrationLinkForPwd() { + $this->assertNotXPath('//a[contains(@href, "admin/registration/archive/id/1")]'); } public function pageShouldContainsDeleteRegistrationLinkForChewee() { - $this->assertXPath('//a[contains(@href, "admin/registration/delete/id/2")]'); + $this->assertXPath('//a[contains(@href, "admin/registration/archive/id/2")]'); } @@ -224,7 +224,7 @@ class RegistrationControllerRejectPwdTest extends RegistrationControllerTestCase class RegistrationControllerDeleteTest extends RegistrationControllerTestCase { public function setUp() { parent::setUp(); - $this->dispatch('/admin/registration/delete/id/2'); + $this->dispatch('/admin/registration/archive/id/2'); }