From c97adf54da4bc50359f4854446745c43f44d5918 Mon Sep 17 00:00:00 2001 From: Demian Katz <demian.katz@villanova.edu> Date: Fri, 10 May 2013 08:22:03 -0400 Subject: [PATCH] Moved confirm action to its own controller. Created convenience method to forward to confirm action. Improved some style issues. Use route parameters rather than query parameters for cleaner data passing. Thanks to Luke O'Sullivan for development assistance. --- module/VuFind/config/module.config.php | 2 + .../src/VuFind/Controller/AbstractBase.php | 31 +++++++- .../VuFind/Controller/ConfirmController.php | 73 +++++++++++++++++++ .../Controller/MyResearchController.php | 48 ++---------- .../blueprint/templates/confirm/confirm.phtml | 26 +++++++ .../templates/myresearch/confirm.phtml | 19 ----- .../{myresearch => confirm}/confirm.phtml | 18 +++-- 7 files changed, 150 insertions(+), 67 deletions(-) create mode 100644 module/VuFind/src/VuFind/Controller/ConfirmController.php create mode 100644 themes/blueprint/templates/confirm/confirm.phtml delete mode 100644 themes/blueprint/templates/myresearch/confirm.phtml rename themes/jquerymobile/templates/{myresearch => confirm}/confirm.phtml (53%) diff --git a/module/VuFind/config/module.config.php b/module/VuFind/config/module.config.php index 545b2210cc8..92806792c76 100644 --- a/module/VuFind/config/module.config.php +++ b/module/VuFind/config/module.config.php @@ -90,6 +90,7 @@ $config = array( 'author' => 'VuFind\Controller\AuthorController', 'authority' => 'VuFind\Controller\AuthorityController', 'cart' => 'VuFind\Controller\CartController', + 'confirm' => 'VuFind\Controller\ConfirmController', 'cover' => 'VuFind\Controller\CoverController', 'error' => 'VuFind\Controller\ErrorController', 'feedback' => 'VuFind\Controller\FeedbackController', @@ -956,6 +957,7 @@ $staticRoutes = array( 'Browse/LCC', 'Browse/Region', 'Browse/Tag', 'Browse/Topic', 'Cart/doExport', 'Cart/Email', 'Cart/Export', 'Cart/Home', 'Cart/MyResearchBulk', 'Cart/Save', 'Collections/ByTitle', 'Collections/Home', + 'Confirm/Confirm', 'Cover/Show', 'Cover/Unavailable', 'Error/Unavailable', 'Feedback/Email', 'Feedback/Home', 'Help/Home', 'Install/Done', 'Install/FixBasicConfig', 'Install/FixCache', diff --git a/module/VuFind/src/VuFind/Controller/AbstractBase.php b/module/VuFind/src/VuFind/Controller/AbstractBase.php index 4d3eae751e3..f713c03fd15 100644 --- a/module/VuFind/src/VuFind/Controller/AbstractBase.php +++ b/module/VuFind/src/VuFind/Controller/AbstractBase.php @@ -269,8 +269,7 @@ class AbstractBase extends AbstractActionController * @param array $params Extra parameters for the RouteMatch object (no * need to provide action here, since $action takes care of that) * - * @return bool Returns false so this can be returned by a - * controller without causing duplicate ViewModel attachment. + * @return mixed */ public function forwardTo($controller, $action, $params = array()) { @@ -281,6 +280,34 @@ class AbstractBase extends AbstractActionController return $this->forward()->dispatch($controller, $params); } + /** + * Confirm an action. + * + * @param string $title Title of confirm dialog + * @param string $yesTarget Form target for "confirm" action + * @param string $noTarget Form target for "cancel" action + * @param string|array $messages Info messages for confirm dialog + * @param array $extras Extra details to include in form + * + * @return mixed + */ + public function confirm($title, $yesTarget, $noTarget, $messages = array(), + $extras = array() + ) { + return $this->forwardTo( + 'Confirm', 'Confirm', + array( + 'data' => array( + 'title' => $title, + 'confirm' => $yesTarget, + 'cancel' => $noTarget, + 'messages' => (array)$messages, + 'extras' => $extras + ) + ) + ); + } + /** * Write the session -- this is designed to be called prior to time-consuming * AJAX operations. This should help reduce the odds of a timing-related bug diff --git a/module/VuFind/src/VuFind/Controller/ConfirmController.php b/module/VuFind/src/VuFind/Controller/ConfirmController.php new file mode 100644 index 00000000000..4a2ff627ee9 --- /dev/null +++ b/module/VuFind/src/VuFind/Controller/ConfirmController.php @@ -0,0 +1,73 @@ +<?php +/** + * Confirm Controller + * + * PHP version 5 + * + * Copyright (C) Villanova University 2010. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, + * as published by the Free Software Foundation. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @category VuFind2 + * @package Controller + * @author Demian Katz <demian.katz@villanova.edu> + * @author Luke O'Sullivan <l.osullivan@swansea.ac.uk> + * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License + * @link http://vufind.org Main Site + */ +namespace VuFind\Controller; + +/** + * Redirects the user to the appropriate VuFind action. + * + * @category VuFind2 + * @package Controller + * @author Demian Katz <demian.katz@villanova.edu> + * @author Luke O'Sullivan <l.osullivan@swansea.ac.uk> + * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License + * @link http://vufind.org Main Site + */ +class ConfirmController extends AbstractBase +{ + /** + * Determines what elements are displayed on the home page based on whether + * the user is logged in. + * + * @return mixed + */ + public function confirmAction() + { + // Get Data from the route + $data = $this->params()->fromRoute('data'); + + // Assign Flash Messages + if (isset($data['messages'])) { + $this->flashMessenger()->setNamespace('info'); + + foreach ($data['messages'] as $message) { + $this->flashMessenger()->addMessage( + true === is_array($message) + ? array( + 'msg' => $message['msg'], + 'tokens' => $message['tokens'] + ) + : $message + ); + } + } + + // Assign Data + return $this->createViewModel($data); + } +} diff --git a/module/VuFind/src/VuFind/Controller/MyResearchController.php b/module/VuFind/src/VuFind/Controller/MyResearchController.php index 9729d0bd9da..fcc57a6421d 100644 --- a/module/VuFind/src/VuFind/Controller/MyResearchController.php +++ b/module/VuFind/src/VuFind/Controller/MyResearchController.php @@ -497,15 +497,10 @@ class MyResearchController extends AbstractBase } else { $url = $this->url()->fromRoute('userList', array('id' => $listID)); } - $this->getRequest()->getQuery()->set('confirmAction', $url); - $this->getRequest()->getQuery()->set('cancelAction', $url); - $this->getRequest()->getQuery()->set( - 'extraFields', array('delete' => $id, 'source' => $source) + return $this->confirm( + 'confirm_delete_brief', $url, $url, 'confirm_delete', + array('delete' => $id, 'source' => $source) ); - $this->getRequest()->getQuery() - ->set('confirmTitle', 'confirm_delete_brief'); - $this->getRequest()->getQuery()->set('confirmMessage', "confirm_delete"); - return $this->forwardTo('MyResearch', 'Confirm'); } /** @@ -653,24 +648,6 @@ class MyResearchController extends AbstractBase return $this->createViewModel(array('list' => $list)); } - /** - * Takes params from the request and uses them to display a confirmation box - * - * @return mixed - */ - public function confirmAction() - { - return $this->createViewModel( - array( - 'title' => $this->params()->fromQuery('confirmTitle'), - 'message' => $this->params()->fromQuery('confirmMessage'), - 'confirm' => $this->params()->fromQuery('confirmAction'), - 'cancel' => $this->params()->fromQuery('cancelAction'), - 'extras' => $this->params()->fromQuery('extraFields') - ) - ); - } - /** * Creates a confirmation box to delete or not delete the current list * @@ -710,21 +687,12 @@ class MyResearchController extends AbstractBase } // If we got this far, we must display a confirmation message: - $this->getRequest()->getQuery()->set( - 'confirmAction', $this->url()->fromRoute('myresearch-deletelist') - ); - $this->getRequest()->getQuery()->set( - 'cancelAction', - $this->url()->fromRoute('userList', array('id' => $listID)) - ); - $this->getRequest()->getQuery()->set( - 'extraFields', array('listID' => $listID) + return $this->confirm( + 'confirm_delete_list_brief', + $this->url()->fromRoute('myresearch-deletelist'), + $this->url()->fromRoute('userList', array('id' => $listID)), + 'confirm_delete_list_text', array('listID' => $listID) ); - $this->getRequest()->getQuery() - ->set('confirmTitle', 'confirm_delete_list_brief'); - $this->getRequest()->getQuery() - ->set('confirmMessage', 'confirm_delete_list_text'); - return $this->forwardTo('MyResearch', 'Confirm'); } /** diff --git a/themes/blueprint/templates/confirm/confirm.phtml b/themes/blueprint/templates/confirm/confirm.phtml new file mode 100644 index 00000000000..7e814bb5e58 --- /dev/null +++ b/themes/blueprint/templates/confirm/confirm.phtml @@ -0,0 +1,26 @@ +<div class="alignleft"> + <h3><?=$this->transEsc($this->title) ?></h3> + + <?=$this->flashmessages();?> + + <div id="popupDetails" class="confirmDialog"> + <form action="<?=$this->escapeHtml($this->confirm)?>" method="post"> + <? if (isset($this->extras)): ?> + <? foreach ($this->extras as $extra=>$value): ?> + <? if (is_array($value)): ?> + <? foreach ($value as $current): ?> + <input type="hidden" name="<?=$this->escapeHtml($extra) ?>[]" value="<?=$this->escapeHtml($current) ?>" /> + <? endforeach; ?> + <? else: ?> + <input type="hidden" name="<?=$this->escapeHtml($extra) ?>" value="<?=$this->escapeHtml($value) ?>" /> + <? endif; ?> + <? endforeach; ?> + <? endif;?> + <input type="submit" name="confirm" value="<?=$this->transEsc('confirm_dialog_yes') ?>" /> + </form> + <form action="<?=$this->escapeHtml($this->cancel) ?>" method="post"> + <input type="submit" name="cancel" value="<?=$this->transEsc('confirm_dialog_no') ?>" /> + </form> + <div class="clearer"></div> + </div> +</div> diff --git a/themes/blueprint/templates/myresearch/confirm.phtml b/themes/blueprint/templates/myresearch/confirm.phtml deleted file mode 100644 index 9f0f2f8edea..00000000000 --- a/themes/blueprint/templates/myresearch/confirm.phtml +++ /dev/null @@ -1,19 +0,0 @@ -<div class="alignleft" style="text-align:center"> - <h3><?=$this->transEsc($this->title) ?></h3> - - <?=$this->flashmessages();?> - - <?=$this->transEsc($this->message) ?> - <div id="popupDetails" class="confirmDialog" style="margin-top:.5em"> - <form action="<?=$this->escapeHtml($this->confirm)?>" method="post"> - <? foreach ($this->extras as $extra=>$value): ?> - <input type="hidden" name="<?=$this->escapeHtml($extra) ?>" value="<?=$this->escapeHtml($value) ?>" /> - <? endforeach; ?> - <input type="submit" name="confirm" value="<?=$this->transEsc('confirm_dialog_yes') ?>" /> - </form> - <form action="<?=$this->escapeHtml($this->cancel) ?>" method="post"> - <input type="submit" name="cancel" value="<?=$this->transEsc('confirm_dialog_no') ?>" /> - </form> - <div class="clearer"></div> - </div> -</div> \ No newline at end of file diff --git a/themes/jquerymobile/templates/myresearch/confirm.phtml b/themes/jquerymobile/templates/confirm/confirm.phtml similarity index 53% rename from themes/jquerymobile/templates/myresearch/confirm.phtml rename to themes/jquerymobile/templates/confirm/confirm.phtml index 39dfceeafd6..18028743ddf 100644 --- a/themes/jquerymobile/templates/myresearch/confirm.phtml +++ b/themes/jquerymobile/templates/confirm/confirm.phtml @@ -5,12 +5,18 @@ <?=$this->flashmessages();?> - <p><?=$this->transEsc($this->message) ?></p> - <form action="<?=$this->escapeHtml($this->confirm)?>" method="post" data-ajax="false"> - <? foreach ($this->extras as $extra=>$value): ?> - <input type="hidden" name="<?=$this->escapeHtml($extra) ?>" value="<?=$this->escapeHtml($value) ?>" /> - <? endforeach; ?> + <? if (isset($this->extras)): ?> + <? foreach ($this->extras as $extra=>$value): ?> + <? if (is_array($value)): ?> + <? foreach ($value as $current): ?> + <input type="hidden" name="<?=$this->escapeHtml($extra) ?>[]" value="<?=$this->escapeHtml($current) ?>" /> + <? endforeach; ?> + <? else: ?> + <input type="hidden" name="<?=$this->escapeHtml($extra) ?>" value="<?=$this->escapeHtml($value) ?>" /> + <? endif; ?> + <? endforeach; ?> + <? endif;?> <input type="submit" name="confirm" value="<?=$this->transEsc('confirm_dialog_yes') ?>" /> </form> <form action="<?=$this->escapeHtml($this->cancel) ?>" method="post" data-ajax="false"> @@ -18,4 +24,4 @@ </form> </div> <?=$this->mobileMenu()->footer()?> -</div> \ No newline at end of file +</div> -- GitLab