Open Monograph Press  3.3.0
SeriesGridHandler.inc.php
1 <?php
2 
16 import('lib.pkp.controllers.grid.settings.SetupGridHandler');
17 import('controllers.grid.settings.series.SeriesGridRow');
18 
23  function __construct() {
24  parent::__construct();
25  $this->addRoleAssignment(
26  array(ROLE_ID_MANAGER),
27  array('fetchGrid', 'fetchRow', 'addSeries', 'editSeries', 'updateSeries', 'deleteSeries', 'saveSequence', 'deactivateSeries','activateSeries')
28  );
29  }
30 
31 
32  //
33  // Overridden template methods
34  //
35  /*
36  * @copydoc SetupGridHandler::initialize
37  */
38  function initialize($request, $args = null) {
39  parent::initialize($request, $args);
40  $press = $request->getPress();
41 
42  // FIXME are these all required?
44  LOCALE_COMPONENT_APP_MANAGER,
45  LOCALE_COMPONENT_PKP_MANAGER,
46  LOCALE_COMPONENT_PKP_COMMON,
47  LOCALE_COMPONENT_PKP_USER,
48  LOCALE_COMPONENT_APP_COMMON
49  );
50 
51  // Set the grid title.
52  $this->setTitle('catalog.manage.series');
53 
54  // Elements to be displayed in the grid
55  $seriesDao = DAORegistry::getDAO('SeriesDAO'); /* @var $seriesDao SeriesDAO */
56  DAORegistry::getDAO('CategoryDAO'); // Load constants?
57  $subEditorsDao = DAORegistry::getDAO('SubEditorsDAO'); /* @var $subEditorsDao SubEditorsDAO */
58  $seriesIterator = $seriesDao->getByPressId($press->getId());
59 
60  $gridData = array();
61  while ($series = $seriesIterator->next()) {
62  // Get the categories data for the row
63  $categories = $seriesDao->getCategories($series->getId(), $press->getId());
64  $categoriesString = null;
65  while ($category = $categories->next()) {
66  if (!empty($categoriesString)) $categoriesString .= ', ';
67  $categoriesString .= $category->getLocalizedTitle();
68  }
69  if (empty($categoriesString)) $categoriesString = __('common.none');
70 
71  // Get the series editors data for the row
72  $assignedSeriesEditors = $subEditorsDao->getBySubmissionGroupId($series->getId(), ASSOC_TYPE_SECTION, $press->getId());
73  if(empty($assignedSeriesEditors)) {
74  $editorsString = __('common.none');
75  } else {
76  $editors = array();
77  foreach ($assignedSeriesEditors as $seriesEditor) {
78  $editors[] = $seriesEditor->getFullName();
79  }
80  $editorsString = implode(', ', $editors);
81  }
82 
83  $seriesId = $series->getId();
84  $gridData[$seriesId] = array(
85  'title' => $series->getLocalizedTitle(),
86  'categories' => $categoriesString,
87  'editors' => $editorsString,
88  'inactive' => $series->getIsInactive(),
89  'seq' => $series->getSequence()
90  );
91  }
92 
93  $this->setGridDataElements($gridData);
94 
95  // Add grid-level actions
96  $router = $request->getRouter();
97  import('lib.pkp.classes.linkAction.request.AjaxModal');
98  $this->addAction(
99  new LinkAction(
100  'addSeries',
101  new AjaxModal(
102  $router->url($request, null, null, 'addSeries', null, array('gridId' => $this->getId())),
103  __('grid.action.addSeries'),
104  'modal_manage'
105  ),
106  __('grid.action.addSeries'),
107  'add_category'
108  )
109  );
110 
111  import('controllers.grid.settings.series.SeriesGridCellProvider');
112  $seriesGridCellProvider = new SeriesGridCellProvider();
113  // Columns
114  $this->addColumn(
115  new GridColumn(
116  'title',
117  'common.title'
118  )
119  );
120  $this->addColumn(new GridColumn('categories', 'grid.category.categories'));
121  $this->addColumn(new GridColumn('editors', 'user.role.editors'));
122  // Series 'inactive'
123  $this->addColumn(
124  new GridColumn(
125  'inactive',
126  'common.inactive',
127  null,
128  'controllers/grid/common/cell/selectStatusCell.tpl',
129  $seriesGridCellProvider,
130  array('alignment' => COLUMN_ALIGNMENT_CENTER,
131  'width' => 20)
132  )
133  );
134  }
135 
136  //
137  // Overridden methods from GridHandler
138  //
142  function initFeatures($request, $args) {
143  import('lib.pkp.classes.controllers.grid.feature.OrderGridItemsFeature');
144  return array(new OrderGridItemsFeature());
145  }
146 
153  return array('updateSidebar');
154  }
155 
160  function getRowInstance() {
161  return new SeriesGridRow();
162  }
163 
167  function getDataElementSequence($gridDataElement) {
168  return $gridDataElement['seq'];
169  }
170 
174  function setDataElementSequence($request, $rowId, $gridDataElement, $newSequence) {
175  $seriesDao = DAORegistry::getDAO('SeriesDAO'); /* @var $seriesDao SeriesDAO */
176  $press = $request->getPress();
177  $series = $seriesDao->getById($rowId, $press->getId());
178  $series->setSequence($newSequence);
179  $seriesDao->updateObject($series);
180  }
181 
182  //
183  // Public Series Grid Actions
184  //
190  function addSeries($args, $request) {
191  // Calling editSeries with an empty ID will add
192  // a new series.
193  return $this->editSeries($args, $request);
194  }
195 
202  function editSeries($args, $request) {
203  $seriesId = isset($args['seriesId']) ? $args['seriesId'] : null;
204  $this->setupTemplate($request);
205 
206  import('controllers.grid.settings.series.form.SeriesForm');
207  $seriesForm = new SeriesForm($request, $seriesId);
208  $seriesForm->initData();
209  return new JSONMessage(true, $seriesForm->fetch($request));
210  }
211 
218  function updateSeries($args, $request) {
219  $seriesId = $request->getUserVar('seriesId');
220 
221  import('controllers.grid.settings.series.form.SeriesForm');
222  $seriesForm = new SeriesForm($request, $seriesId);
223  $seriesForm->readInputData();
224 
225  if ($seriesForm->validate()) {
226  $seriesForm->execute();
227  $notificationManager = new NotificationManager();
228  $notificationManager->createTrivialNotification($request->getUser()->getId());
229  return DAO::getDataChangedEvent($seriesForm->getSeriesId());
230  } else {
231  return new JSONMessage(false);
232  }
233  }
234 
241  function deleteSeries($args, $request) {
242  $press = $request->getPress();
243 
244  $seriesDao = DAORegistry::getDAO('SeriesDAO'); /* @var $seriesDao SeriesDAO */
245  $series = $seriesDao->getById(
246  $request->getUserVar('seriesId'),
247  $press->getId()
248  );
249 
250  if (isset($series)) {
251  $result = $seriesDao->getByContextId($press->getId());
252  $activeSeriesCount = (!$series->getIsInactive()) ? -1 : 0;
253  while (!$result->eof()) {
254  if (!$result->next()->getIsInactive()) {
255  $activeSeriesCount++;
256  }
257  }
258  if ($activeSeriesCount < 1) {
259  return new JSONMessage(false, __('manager.series.confirmDeactivateSeries.error'));
260  return false;
261  }
262 
263  $seriesDao->deleteObject($series);
264  return DAO::getDataChangedEvent($series->getId());
265  } else {
266  AppLocale::requireComponents(LOCALE_COMPONENT_PKP_MANAGER); // manager.setup.errorDeletingItem
267  return new JSONMessage(false, __('manager.setup.errorDeletingItem'));
268  }
269  }
270 
277  function deactivateSeries($args, $request) {
278  // Identify the current series
279  $seriesId = (int) $request->getUserVar('seriesKey');
280 
281  // Identify the context id.
282  $context = $request->getContext();
283 
284  // Get series object
285  $seriesDao = DAORegistry::getDAO('SeriesDAO'); /* @var $seriesDao SeriesDAO */
286  // Validate if it can be inactive
287  $seriesIterator = $seriesDao->getByContextId($context->getId(),null,false);
288  $activeSeriesCount = 0;
289  while ($series = $seriesIterator->next()) {
290  if (!$series->getIsInactive()) {
291  $activeSeriesCount++;
292  }
293  }
294  if ($activeSeriesCount > 1) {
295  $series = $seriesDao->getById($seriesId, $context->getId());
296 
297  if ($request->checkCSRF() && isset($series) && !$series->getIsInactive()) {
298  $series->setIsInactive(1);
299  $seriesDao->updateObject($series);
300 
301  // Create the notification.
302  $notificationMgr = new NotificationManager();
303  $user = $request->getUser();
304  $notificationMgr->createTrivialNotification($user->getId());
305 
306  return DAO::getDataChangedEvent($seriesId);
307  }
308  } else {
309  // Create the notification.
310  $notificationMgr = new NotificationManager();
311  $user = $request->getUser();
312  $notificationMgr->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_ERROR, array('contents' => __('manager.series.confirmDeactivateSeries.error')));
313  return DAO::getDataChangedEvent($seriesId);
314  }
315 
316  return new JSONMessage(false);
317  }
318 
325  function activateSeries($args, $request) {
326 
327  // Identify the current series
328  $seriesId = (int) $request->getUserVar('seriesKey');
329 
330  // Identify the context id.
331  $context = $request->getContext();
332 
333  // Get series object
334  $seriesDao = DAORegistry::getDAO('SeriesDAO'); /* @var $seriesDao SeriesDAO */
335  $series = $seriesDao->getById($seriesId, $context->getId());
336 
337  if ($request->checkCSRF() && isset($series) && $series->getIsInactive()) {
338  $series->setIsInactive(0);
339  $seriesDao->updateObject($series);
340 
341  // Create the notification.
342  $notificationMgr = new NotificationManager();
343  $user = $request->getUser();
344  $notificationMgr->createTrivialNotification($user->getId());
345 
346  return DAO::getDataChangedEvent($seriesId);
347  }
348 
349  return new JSONMessage(false);
350  }
351 }
PKPHandler\addRoleAssignment
addRoleAssignment($roleIds, $operations)
Definition: PKPHandler.inc.php:213
SeriesGridHandler\deactivateSeries
deactivateSeries($args, $request)
Definition: SeriesGridHandler.inc.php:277
SeriesGridHandler\__construct
__construct()
Definition: SeriesGridHandler.inc.php:23
GridColumn
The GridColumn class represents a column within a grid. It is used to format the data presented in a ...
Definition: GridColumn.inc.php:27
SetupGridHandler
Base class for setup grid handlers.
Definition: SetupGridHandler.inc.php:18
AppLocale\requireComponents
static requireComponents()
Definition: env1/MockAppLocale.inc.php:56
SeriesGridHandler\setDataElementSequence
setDataElementSequence($request, $rowId, $gridDataElement, $newSequence)
Definition: SeriesGridHandler.inc.php:174
SeriesGridHandler\addSeries
addSeries($args, $request)
Definition: SeriesGridHandler.inc.php:190
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
SeriesGridHandler\updateSeries
updateSeries($args, $request)
Definition: SeriesGridHandler.inc.php:218
PKPHandler\getId
getId()
Definition: PKPHandler.inc.php:107
SeriesGridHandler\activateSeries
activateSeries($args, $request)
Definition: SeriesGridHandler.inc.php:325
SeriesGridHandler\editSeries
editSeries($args, $request)
Definition: SeriesGridHandler.inc.php:202
GridHandler\addAction
addAction($action, $position=GRID_ACTION_POSITION_ABOVE)
Definition: GridHandler.inc.php:266
GridHandler\addColumn
addColumn($column)
Definition: GridHandler.inc.php:335
DAO\getDataChangedEvent
static getDataChangedEvent($elementId=null, $parentElementId=null, $content='')
Definition: DAO.inc.php:647
GridHandler\setGridDataElements
setGridDataElements($data)
Definition: GridHandler.inc.php:379
JSONMessage
Class to represent a JSON (Javascript Object Notation) message.
Definition: JSONMessage.inc.php:18
SeriesGridHandler\getDataElementSequence
getDataElementSequence($gridDataElement)
Definition: SeriesGridHandler.inc.php:167
AjaxModal
A modal that retrieves its content from via AJAX.
Definition: AjaxModal.inc.php:18
OrderGridItemsFeature
Implements grid ordering functionality.
Definition: OrderGridItemsFeature.inc.php:19
SeriesGridHandler\initialize
initialize($request, $args=null)
Definition: SeriesGridHandler.inc.php:38
LinkAction
Base class defining an action that can be performed by the user in the user interface.
Definition: LinkAction.inc.php:22
SeriesGridHandler\initFeatures
initFeatures($request, $args)
Definition: SeriesGridHandler.inc.php:142
SeriesGridHandler
Handle series grid requests.
Definition: SeriesGridHandler.inc.php:19
GridHandler\setTitle
setTitle($title)
Definition: GridHandler.inc.php:215
SeriesGridRow
Handle series grid row requests.
Definition: SeriesGridRow.inc.php:18
PKPHandler\setupTemplate
setupTemplate($request)
Definition: PKPHandler.inc.php:466
SeriesForm
Form for adding/edditing a series stores/retrieves from an associative array.
Definition: SeriesForm.inc.php:19
NotificationManager
Definition: NotificationManager.inc.php:19
SeriesGridHandler\getRowInstance
getRowInstance()
Definition: SeriesGridHandler.inc.php:160
SeriesGridHandler\getPublishChangeEvents
getPublishChangeEvents()
Definition: SeriesGridHandler.inc.php:152
SeriesGridHandler\deleteSeries
deleteSeries($args, $request)
Definition: SeriesGridHandler.inc.php:241
SeriesGridCellProvider
Grid cell provider for series grid.
Definition: SeriesGridCellProvider.inc.php:17