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
00031
00035 function initialize(&$request) {
00036 parent::initialize($request);
00037
00038
00039 $this->setId('submissionChecklist');
00040 $this->setTitle('manager.setup.submissionPreparationChecklist');
00041 $this->setInstructions('manager.setup.submissionPreparationChecklistDescription');
00042
00043
00044
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
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
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
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
00107
00113 function addItem($args, &$request) {
00114
00115
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
00144
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
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
00180
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
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
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 ?>