• Main Page
  • Modules
  • Classes
  • Files
  • File List

controllers/grid/settings/submissionChecklist/SubmissionChecklistGridHandler.inc.php

00001 <?php
00002 
00015 import('controllers.grid.settings.SetupGridHandler');
00016 import('controllers.grid.settings.submissionChecklist.SubmissionChecklistGridRow');
00017 
00018 class SubmissionChecklistGridHandler extends SetupGridHandler {
00019 
00023    function SubmissionChecklistGridHandler() {
00024       parent::SetupGridHandler();
00025       $this->addRoleAssignment(array(ROLE_ID_PRESS_MANAGER),
00026             array('fetchGrid', 'fetchRow', 'addItem', 'editItem', 'updateItem', 'deleteItem', 'saveSequence'));
00027    }
00028 
00029    //
00030    // Overridden template methods
00031    //
00035    function initialize(&$request) {
00036       parent::initialize($request);
00037 
00038       // Basic grid configuration
00039       $this->setId('submissionChecklist');
00040       $this->setTitle('manager.setup.submissionPreparationChecklist');
00041       $this->setInstructions('manager.setup.submissionPreparationChecklistDescription');
00042 
00043 
00044       // Add grid-level actions
00045       import('lib.pkp.classes.linkAction.request.AjaxModal');
00046       $router =& $request->getRouter();
00047       $this->addAction(
00048          new LinkAction(
00049             'addItem',
00050             new AjaxModal(
00051                $router->url($request, null, null, 'addItem', null, array('gridId' => $this->getId())),
00052                __('grid.action.addItem'),
00053                'modal_add_item',
00054                true),
00055             __('grid.action.addItem'),
00056             'add_item')
00057       );
00058 
00059       // Columns
00060       $this->addColumn(
00061          new GridColumn(
00062             'content',
00063             'grid.submissionChecklist.column.checklistItem',
00064             null,
00065             'controllers/grid/gridCell.tpl',
00066             null,
00067             array('multiline' => true, 'html' => true, 'maxLength' => 220)
00068          )
00069       );
00070    }
00071 
00072 
00073    //
00074    // Overridden methods from GridHandler
00075    //
00079    function initFeatures($request, $args) {
00080       import('lib.pkp.classes.controllers.grid.feature.OrderGridItemsFeature');
00081       return array(new OrderGridItemsFeature());
00082    }
00083 
00087    function &getRowInstance() {
00088       $row = new SubmissionChecklistGridRow();
00089       return $row;
00090    }
00091 
00095    function loadData($request, $filter) {
00096       // Elements to be displayed in the grid
00097       $router =& $request->getRouter();
00098       $context =& $router->getContext($request);
00099       $submissionChecklist = $context->getSetting('submissionChecklist');
00100 
00101       return $submissionChecklist[AppLocale::getLocale()];
00102    }
00103 
00104 
00105    //
00106    // Public grid actions.
00107    //
00113    function addItem($args, &$request) {
00114       // Calling editSubmissionChecklist with an empty row id will add
00115       // a new submissionChecklist.
00116       return $this->editItem($args, $request);
00117    }
00118 
00125    function editItem($args, &$request) {
00126       import('controllers.grid.settings.submissionChecklist.form.SubmissionChecklistForm');
00127       $submissionChecklistId = isset($args['rowId']) ? $args['rowId'] : null;
00128       $submissionChecklistForm = new SubmissionChecklistForm($submissionChecklistId);
00129 
00130       $submissionChecklistForm->initData($args, $request);
00131 
00132       $json = new JSONMessage(true, $submissionChecklistForm->fetch($request));
00133       return $json->getString();
00134    }
00135 
00142    function updateItem($args, &$request) {
00143       // -> submissionChecklistId must be present and valid
00144       // -> htmlId must be present and valid
00145 
00146       import('controllers.grid.settings.submissionChecklist.form.SubmissionChecklistForm');
00147       $submissionChecklistId = isset($args['rowId']) ? $args['rowId'] : null;
00148       $submissionChecklistForm = new SubmissionChecklistForm($submissionChecklistId);
00149       $submissionChecklistForm->readInputData();
00150 
00151       if ($submissionChecklistForm->validate()) {
00152          $submissionChecklistForm->execute($args, $request);
00153          return DAO::getDataChangedEvent($submissionChecklistForm->submissionChecklistId);
00154       } else {
00155          $json = new JSONMessage(false);
00156          return $json->getString();
00157       }
00158    }
00159 
00166    function deleteItem($args, &$request) {
00167       $rowId = $request->getUserVar('rowId');
00168 
00169       $router =& $request->getRouter();
00170       $press =& $router->getContext($request);
00171 
00172       // get all of the submissionChecklists
00173       $submissionChecklistAll = $press->getSetting('submissionChecklist');
00174 
00175       foreach (AppLocale::getSupportedLocales() as $locale => $name) {
00176          if ( isset($submissionChecklistAll[$locale][$rowId]) ) {
00177             unset($submissionChecklistAll[$locale][$rowId]);
00178          } else {
00179             // only fail if the currently displayed locale was not set
00180             // (this is the one that needs to be removed from the currently displayed grid)
00181             if ( $locale == AppLocale::getLocale() ) {
00182                $json = new JSONMessage(false, __('manager.setup.errorDeletingSubmissionChecklist'));
00183                return $json->getString();
00184                exit;
00185             }
00186          }
00187       }
00188 
00189       $press->updateSetting('submissionChecklist', $submissionChecklistAll, 'object', true);
00190       return DAO::getDataChangedEvent($rowId);
00191    }
00192 
00196    function getRowDataElementSequence($gridDataElement) {
00197       return $gridDataElement['order'];
00198    }
00199 
00203    function saveRowDataElementSequence(&$request, $rowId, $gridDataElement, $newSequence) {
00204       $router =& $request->getRouter();
00205       $press =& $router->getContext($request);
00206 
00207       // Get all of the submissionChecklists.
00208       $submissionChecklistAll = $press->getSetting('submissionChecklist');
00209       $locale = AppLocale::getLocale();
00210 
00211       if (isset($submissionChecklistAll[$locale][$rowId])) {
00212          $submissionChecklistAll[$locale][$rowId]['order'] = $newSequence;
00213       }
00214 
00215       $orderMap = array();
00216       foreach ($submissionChecklistAll[$locale] as $id => $checklistItem) {
00217          $orderMap[$id] = $checklistItem['order'];
00218       }
00219 
00220       asort($orderMap);
00221 
00222       // Build the new order checklist object.
00223       $orderedChecklistItems = array();
00224       foreach ($orderMap as $id => $order) {
00225          if (isset($submissionChecklistAll[$locale][$id])) {
00226             $orderedChecklistItems[$locale][$id] = $submissionChecklistAll[$locale][$id];
00227          }
00228       }
00229 
00230       $press->updateSetting('submissionChecklist', $orderedChecklistItems, 'object', true);
00231    }
00232 }
00233 
00234 ?>

Generated on Mon Sep 17 2012 13:58:56 for Open Monograph Press by  doxygen 1.7.1