Open Monograph Press  3.3.0
PublicationDateGridHandler.inc.php
1 <?php
2 
16 // import grid base classes
17 import('lib.pkp.classes.controllers.grid.GridHandler');
18 
19 
20 // import format grid specific classes
21 import('controllers.grid.catalogEntry.PublicationDateGridCellProvider');
22 import('controllers.grid.catalogEntry.PublicationDateGridRow');
23 
24 // Link action & modal classes
25 import('lib.pkp.classes.linkAction.request.AjaxModal');
26 
29  var $_submission;
30 
33 
36 
40  function __construct() {
41  parent::__construct();
42  $this->addRoleAssignment(
43  array(ROLE_ID_MANAGER),
44  array('fetchGrid', 'fetchRow', 'addDate', 'editDate',
45  'updateDate', 'deleteDate'));
46  }
47 
48 
49  //
50  // Getters/Setters
51  //
56  function getSubmission() {
57  return $this->_submission;
58  }
59 
64  function setSubmission($submission) {
65  $this->_submission = $submission;
66  }
67 
72  function getPublication() {
74  }
75 
80  function setPublication($publication) {
81  $this->_publication = $publication;
82  }
83 
88  function getPublicationFormat() {
90  }
91 
96  function setPublicationFormat($publicationFormat) {
97  $this->_publicationFormat = $publicationFormat;
98  }
99 
100  //
101  // Overridden methods from PKPHandler
102  //
109  function authorize($request, &$args, $roleAssignments) {
110  import('lib.pkp.classes.security.authorization.PublicationAccessPolicy');
111  $this->addPolicy(new PublicationAccessPolicy($request, $args, $roleAssignments));
112  return parent::authorize($request, $args, $roleAssignments);
113  }
114 
118  function initialize($request, $args = null) {
119  parent::initialize($request, $args);
120 
121  // Retrieve the authorized submission.
122  $this->setSubmission($this->getAuthorizedContextObject(ASSOC_TYPE_SUBMISSION));
123  $this->setPublication($this->getAuthorizedContextObject(ASSOC_TYPE_PUBLICATION));
124  $publicationFormatDao = DAORegistry::getDAO('PublicationFormatDAO'); /* @var $publicationFormatDao PublicationFormatDAO */
125  $representationId = null;
126 
127  // Retrieve the associated publication format for this grid.
128  $publicationDateId = (int) $request->getUserVar('publicationDateId'); // set if editing or deleting a date
129 
130  if ($publicationDateId != '') {
131  $publicationDateDao = DAORegistry::getDAO('PublicationDateDAO'); /* @var $publicationDateDao PublicationDateDAO */
132  $publicationDate = $publicationDateDao->getById($publicationDateId, $this->getPublication()->getId());
133  if ($publicationDate) {
134  $representationId = $publicationDate->getPublicationFormatId();
135  }
136  } else { // empty form for new Date
137  $representationId = (int) $request->getUserVar('representationId');
138  }
139 
140  $submission = $this->getSubmission();
141  $publicationFormat = $publicationFormatDao->getById($representationId, $this->getPublication()->getId());
142 
143  if ($publicationFormat) {
144  $this->setPublicationFormat($publicationFormat);
145  } else {
146  fatalError('The publication format is not assigned to authorized submission!');
147  }
148 
149  // Load submission-specific translations
151  LOCALE_COMPONENT_APP_SUBMISSION,
152  LOCALE_COMPONENT_PKP_SUBMISSION,
153  LOCALE_COMPONENT_PKP_USER,
154  LOCALE_COMPONENT_APP_DEFAULT,
155  LOCALE_COMPONENT_PKP_DEFAULT
156  );
157 
158  // Basic grid configuration
159  $this->setTitle('grid.catalogEntry.publicationDates');
160 
161  // Grid actions
162  $router = $request->getRouter();
163  $actionArgs = $this->getRequestArgs();
164  $this->addAction(
165  new LinkAction(
166  'addDate',
167  new AjaxModal(
168  $router->url($request, null, null, 'addDate', null, $actionArgs),
169  __('grid.action.addDate'),
170  'modal_add_item'
171  ),
172  __('grid.action.addDate'),
173  'add_item'
174  )
175  );
176 
177  // Columns
178  $cellProvider = new PublicationDateGridCellProvider();
179  $this->addColumn(
180  new GridColumn(
181  'value',
182  'grid.catalogEntry.dateValue',
183  null,
184  null,
185  $cellProvider,
186  array('width' => 50, 'alignment' => COLUMN_ALIGNMENT_LEFT)
187  )
188  );
189  $this->addColumn(
190  new GridColumn(
191  'code',
192  'grid.catalogEntry.dateRole',
193  null,
194  null,
195  $cellProvider
196  )
197  );
198  }
199 
200 
201  //
202  // Overridden methods from GridHandler
203  //
208  function getRowInstance() {
209  return new PublicationDateGridRow($this->getSubmission());
210  }
211 
217  function getRequestArgs() {
218  return [
219  'submissionId' => $this->getSubmission()->getId(),
220  'publicationId' => $this->getPublication()->getId(),
221  'representationId' => $this->getPublicationFormat()->getId()
222  ];
223  }
224 
228  function loadData($request, $filter = null) {
229  $publicationFormat = $this->getPublicationFormat();
230  $publicationDateDao = DAORegistry::getDAO('PublicationDateDAO'); /* @var $publicationDateDao PublicationDateDAO */
231  $data = $publicationDateDao->getByPublicationFormatId($publicationFormat->getId());
232  return $data->toArray();
233  }
234 
235 
236  //
237  // Public Date Grid Actions
238  //
245  function addDate($args, $request) {
246  return $this->editDate($args, $request);
247  }
248 
255  function editDate($args, $request) {
256  // Identify the date to be updated
257  $publicationDateId = (int) $request->getUserVar('publicationDateId');
258  $submission = $this->getSubmission();
259 
260  $publicationDateDao = DAORegistry::getDAO('PublicationDateDAO'); /* @var $publicationDateDao PublicationDateDAO */
261  $publicationDate = $publicationDateDao->getById($publicationDateId, $this->getPublication()->getId());
262 
263  // Form handling
264  import('controllers.grid.catalogEntry.form.PublicationDateForm');
265  $publicationDateForm = new PublicationDateForm($submission, $this->getPublication(), $publicationDate);
266  $publicationDateForm->initData();
267 
268  return new JSONMessage(true, $publicationDateForm->fetch($request));
269  }
270 
277  function updateDate($args, $request) {
278  // Identify the code to be updated
279  $publicationDateId = $request->getUserVar('publicationDateId');
280  $submission = $this->getSubmission();
281 
282  $publicationDateDao = DAORegistry::getDAO('PublicationDateDAO'); /* @var $publicationDateDao PublicationDateDAO */
283  $publicationDate = $publicationDateDao->getById($publicationDateId, $this->getPublication()->getId());
284 
285  // Form handling
286  import('controllers.grid.catalogEntry.form.PublicationDateForm');
287  $publicationDateForm = new PublicationDateForm($submission, $this->getPublication(), $publicationDate);
288  $publicationDateForm->readInputData();
289  if ($publicationDateForm->validate()) {
290  $publicationDateId = $publicationDateForm->execute();
291 
292  if(!isset($publicationDate)) {
293  // This is a new code
294  $publicationDate = $publicationDateDao->getById($publicationDateId, $this->getPublication()->getId());
295  // New added code action notification content.
296  $notificationContent = __('notification.addedPublicationDate');
297  } else {
298  // code edit action notification content.
299  $notificationContent = __('notification.editedPublicationDate');
300  }
301 
302  // Create trivial notification.
303  $currentUser = $request->getUser();
304  $notificationMgr = new NotificationManager();
305  $notificationMgr->createTrivialNotification($currentUser->getId(), NOTIFICATION_TYPE_SUCCESS, array('contents' => $notificationContent));
306 
307  // Prepare the grid row data
308  $row = $this->getRowInstance();
309  $row->setGridId($this->getId());
310  $row->setId($publicationDateId);
311  $row->setData($publicationDate);
312  $row->initialize($request);
313 
314  // Render the row into a JSON response
315  return DAO::getDataChangedEvent();
316 
317  } else {
318  return new JSONMessage(true, $publicationDateForm->fetch($request));
319  }
320  }
321 
328  function deleteDate($args, $request) {
329 
330  // Identify the code to be deleted
331  $publicationDateId = $request->getUserVar('publicationDateId');
332 
333  $publicationDateDao = DAORegistry::getDAO('PublicationDateDAO'); /* @var $publicationDateDao PublicationDateDAO */
334  $publicationDate = $publicationDateDao->getById($publicationDateId, $this->getPublication()->getId());
335  if ($publicationDate != null) { // authorized
336 
337  $result = $publicationDateDao->deleteObject($publicationDate);
338 
339  if ($result) {
340  $currentUser = $request->getUser();
341  $notificationMgr = new NotificationManager();
342  $notificationMgr->createTrivialNotification($currentUser->getId(), NOTIFICATION_TYPE_SUCCESS, array('contents' => __('notification.removedPublicationDate')));
343  return DAO::getDataChangedEvent();
344  } else {
345  return new JSONMessage(false, __('manager.setup.errorDeletingItem'));
346  }
347  }
348  }
349 }
350 
351 
PKPHandler\addRoleAssignment
addRoleAssignment($roleIds, $operations)
Definition: PKPHandler.inc.php:213
PublicationDateGridHandler\__construct
__construct()
Definition: PublicationDateGridHandler.inc.php:49
PublicationDateGridHandler\editDate
editDate($args, $request)
Definition: PublicationDateGridHandler.inc.php:264
PublicationDateGridHandler\$_publicationFormat
$_publicationFormat
Definition: PublicationDateGridHandler.inc.php:44
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
PublicationDateForm
Form for adding/editing a publication date.
Definition: PublicationDateForm.inc.php:18
PublicationAccessPolicy
Class to control access to a publication.
Definition: PublicationAccessPolicy.inc.php:20
AppLocale\requireComponents
static requireComponents()
Definition: env1/MockAppLocale.inc.php:56
PublicationDateGridHandler\getRowInstance
getRowInstance()
Definition: PublicationDateGridHandler.inc.php:217
PublicationDateGridHandler\loadData
loadData($request, $filter=null)
Definition: PublicationDateGridHandler.inc.php:237
PublicationDateGridCellProvider
Base class for a cell provider that can retrieve labels for publication dates.
Definition: PublicationDateGridCellProvider.inc.php:18
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
PublicationDateGridHandler\initialize
initialize($request, $args=null)
Definition: PublicationDateGridHandler.inc.php:127
PublicationDateGridHandler\$_publication
$_publication
Definition: PublicationDateGridHandler.inc.php:38
PublicationDateGridRow
Publication Date grid row definition.
Definition: PublicationDateGridRow.inc.php:18
PublicationDateGridHandler
Handle publication format grid requests for publication dates.
Definition: PublicationDateGridHandler.inc.php:27
PublicationDateGridHandler\getRequestArgs
getRequestArgs()
Definition: PublicationDateGridHandler.inc.php:226
PublicationDateGridHandler\deleteDate
deleteDate($args, $request)
Definition: PublicationDateGridHandler.inc.php:337
PKPHandler\getId
getId()
Definition: PKPHandler.inc.php:107
PublicationDateGridHandler\setSubmission
setSubmission($submission)
Definition: PublicationDateGridHandler.inc.php:73
PublicationDateGridHandler\$_submission
$_submission
Definition: PublicationDateGridHandler.inc.php:32
PublicationDateGridHandler\authorize
authorize($request, &$args, $roleAssignments)
Definition: PublicationDateGridHandler.inc.php:118
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
PublicationDateGridHandler\setPublication
setPublication($publication)
Definition: PublicationDateGridHandler.inc.php:89
PublicationDateGridHandler\addDate
addDate($args, $request)
Definition: PublicationDateGridHandler.inc.php:254
JSONMessage
Class to represent a JSON (Javascript Object Notation) message.
Definition: JSONMessage.inc.php:18
PublicationDateGridHandler\getPublication
getPublication()
Definition: PublicationDateGridHandler.inc.php:81
AjaxModal
A modal that retrieves its content from via AJAX.
Definition: AjaxModal.inc.php:18
LinkAction
Base class defining an action that can be performed by the user in the user interface.
Definition: LinkAction.inc.php:22
GridHandler\setTitle
setTitle($title)
Definition: GridHandler.inc.php:215
PublicationDateGridHandler\getPublicationFormat
getPublicationFormat()
Definition: PublicationDateGridHandler.inc.php:97
PKPHandler\getAuthorizedContextObject
& getAuthorizedContextObject($assocType)
Definition: PKPHandler.inc.php:174
GridHandler
This class defines basic operations for handling HTML grids. Grids are used to implement a standardiz...
Definition: GridHandler.inc.php:58
PublicationDateGridHandler\setPublicationFormat
setPublicationFormat($publicationFormat)
Definition: PublicationDateGridHandler.inc.php:105
PublicationDateGridHandler\getSubmission
getSubmission()
Definition: PublicationDateGridHandler.inc.php:65
NotificationManager
Definition: NotificationManager.inc.php:19
PKPHandler\addPolicy
addPolicy($authorizationPolicy, $addToTop=false)
Definition: PKPHandler.inc.php:157
fatalError
if(!function_exists('import')) fatalError($reason)
Definition: functions.inc.php:32
PublicationDateGridHandler\updateDate
updateDate($args, $request)
Definition: PublicationDateGridHandler.inc.php:286