Open Journal Systems  3.3.0
SubmissionEventLogGridHandler.inc.php
1 <?php
2 
16 // import grid base classes
17 import('lib.pkp.classes.controllers.grid.GridHandler');
18 
19 // Link action & modal classes
20 import('lib.pkp.classes.linkAction.request.AjaxModal');
21 
22 // Other classes used by this grid
23 import('lib.pkp.controllers.grid.eventLog.EventLogGridRow');
24 import('lib.pkp.classes.controllers.grid.DateGridCellProvider');
25 import('lib.pkp.controllers.grid.eventLog.EventLogGridCellProvider');
26 
29  var $_submission;
30 
33 
37  function __construct() {
38  parent::__construct();
39  $this->addRoleAssignment(
40  array(ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR),
41  array('fetchGrid', 'fetchRow', 'viewEmail')
42  );
43  }
44 
45 
46  //
47  // Getters/Setters
48  //
53  function getSubmission() {
54  return $this->_submission;
55  }
56 
61  function setSubmission($submission) {
62  $this->_submission = $submission;
63  }
64 
65 
66  //
67  // Overridden methods from PKPHandler
68  //
75  function authorize($request, &$args, $roleAssignments) {
76  import('lib.pkp.classes.security.authorization.SubmissionAccessPolicy');
77  $this->addPolicy(new SubmissionAccessPolicy($request, $args, $roleAssignments));
78 
79  import('lib.pkp.classes.security.authorization.internal.UserAccessibleWorkflowStageRequiredPolicy');
80  $this->addPolicy(new UserAccessibleWorkflowStageRequiredPolicy($request, WORKFLOW_TYPE_EDITORIAL));
81 
82  $success = parent::authorize($request, $args, $roleAssignments);
83 
84  // Prevent authors from accessing review details, even if they are also
85  // assigned as an editor, sub-editor or assistant.
86  $userAssignedRoles = $this->getAuthorizedContextObject(ASSOC_TYPE_ACCESSIBLE_WORKFLOW_STAGES);
87  $this->_isCurrentUserAssignedAuthor = false;
88  foreach ($userAssignedRoles as $stageId => $roles) {
89  if (in_array(ROLE_ID_AUTHOR, $roles)) {
90  $this->_isCurrentUserAssignedAuthor = true;
91  break;
92  }
93  }
94 
95  return $success;
96  }
97 
101  function initialize($request, $args = null) {
102  parent::initialize($request, $args);
103 
104  // Retrieve the authorized monograph.
105  $submission = $this->getAuthorizedContextObject(ASSOC_TYPE_SUBMISSION);
106  $this->setSubmission($submission);
107 
108  // Load submission-specific translations
110  LOCALE_COMPONENT_APP_SUBMISSION,
111  LOCALE_COMPONENT_PKP_SUBMISSION,
112  LOCALE_COMPONENT_APP_EDITOR,
113  LOCALE_COMPONENT_PKP_EDITOR
114  );
115 
116  // Columns
117  $cellProvider = new EventLogGridCellProvider($this->_isCurrentUserAssignedAuthor);
118  $this->addColumn(
119  new GridColumn(
120  'date',
121  'common.date',
122  null,
123  null,
125  $cellProvider,
126  \Application::get()->getRequest()->getContext()->getLocalizedDateFormatShort()
127  )
128  )
129  );
130  $this->addColumn(
131  new GridColumn(
132  'user',
133  'common.user',
134  null,
135  null,
136  $cellProvider
137  )
138  );
139  $this->addColumn(
140  new GridColumn(
141  'event',
142  'common.event',
143  null,
144  null,
145  $cellProvider,
146  array('width' => 60)
147  )
148  );
149  }
150 
151 
152  //
153  // Overridden methods from GridHandler
154  //
159  protected function getRowInstance() {
160  return new EventLogGridRow($this->getSubmission(), $this->_isCurrentUserAssignedAuthor);
161  }
162 
168  function getRequestArgs() {
169  $submission = $this->getSubmission();
170 
171  return array(
172  'submissionId' => $submission->getId(),
173  );
174  }
175 
179  protected function loadData($request, $filter = null) {
180  $submissionEventLogDao = DAORegistry::getDAO('SubmissionEventLogDAO'); /* @var $submissionEventLogDao SubmissionEventLogDAO */
181  $submissionEmailLogDao = DAORegistry::getDAO('SubmissionEmailLogDAO'); /* @var $submissionEmailLogDao SubmissionEmailLogDAO */
182 
183  $submission = $this->getSubmission();
184 
185  $eventLogEntries = $submissionEventLogDao->getBySubmissionId($submission->getId());
186  $emailLogEntries = $submissionEmailLogDao->getBySubmissionId($submission->getId());
187 
188  $entries = array_merge($eventLogEntries->toArray(), $emailLogEntries->toArray());
189 
190  // Sort the merged data by date, most recent first
191  usort($entries, function($a, $b) {
192  $aDate = is_a($a, 'EventLogEntry') ? $a->getDateLogged() : $a->getDateSent();
193  $bDate = is_a($b, 'EventLogEntry') ? $b->getDateLogged() : $b->getDateSent();
194 
195  if ($aDate == $bDate) return 0;
196 
197  return $aDate < $bDate ? 1 : -1;
198  });
199 
200  return $entries;
201  }
202 
209  function viewEmail($args, $request) {
210  $submissionEmailLogDao = DAORegistry::getDAO('SubmissionEmailLogDAO'); /* @var $submissionEmailLogDao SubmissionEmailLogDAO */
211  $emailLogEntry = $submissionEmailLogDao->getById((int) $args['emailLogEntryId']);
212  return new JSONMessage(true, $this->_formatEmail($emailLogEntry));
213  }
214 
220  function _formatEmail($emailLogEntry) {
221  assert(is_a($emailLogEntry, 'EmailLogEntry'));
222 
223  $text = array();
224  $text[] = __('email.from') . ': ' . htmlspecialchars($emailLogEntry->getFrom());
225  $text[] = __('email.to') . ': ' . htmlspecialchars($emailLogEntry->getRecipients());
226  $text[] = __('email.subject') . ': ' . htmlspecialchars($emailLogEntry->getSubject());
227  $text[] = $emailLogEntry->getBody();
228 
229  return nl2br(PKPString::stripUnsafeHtml(implode(PHP_EOL . PHP_EOL, $text)));
230  }
231 }
232 
233 
PKPHandler\addRoleAssignment
addRoleAssignment($roleIds, $operations)
Definition: PKPHandler.inc.php:213
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
UserAccessibleWorkflowStageRequiredPolicy
Policy to deny access if an user assigned workflow stage is not found.
Definition: UserAccessibleWorkflowStageRequiredPolicy.inc.php:19
AppLocale\requireComponents
static requireComponents()
Definition: env1/MockAppLocale.inc.php:56
EventLogGridCellProvider
Cell provider for event log entries.
Definition: EventLogGridCellProvider.inc.php:18
PKPString\stripUnsafeHtml
static stripUnsafeHtml($input)
Definition: PKPString.inc.php:377
SubmissionEventLogGridHandler\$_isCurrentUserAssignedAuthor
$_isCurrentUserAssignedAuthor
Definition: SubmissionEventLogGridHandler.inc.php:38
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
SubmissionEventLogGridHandler\viewEmail
viewEmail($args, $request)
Definition: SubmissionEventLogGridHandler.inc.php:215
DateGridCellProvider
Wraps date formatting support around a provided DataProvider.
Definition: DateGridCellProvider.inc.php:18
SubmissionEventLogGridHandler\getRowInstance
getRowInstance()
Definition: SubmissionEventLogGridHandler.inc.php:165
SubmissionEventLogGridHandler\$_submission
$_submission
Definition: SubmissionEventLogGridHandler.inc.php:32
SubmissionEventLogGridHandler
Grid handler presenting the submission event log grid.
Definition: SubmissionEventLogGridHandler.inc.php:27
SubmissionEventLogGridHandler\loadData
loadData($request, $filter=null)
Definition: SubmissionEventLogGridHandler.inc.php:185
GridHandler\addColumn
addColumn($column)
Definition: GridHandler.inc.php:335
SubmissionEventLogGridHandler\setSubmission
setSubmission($submission)
Definition: SubmissionEventLogGridHandler.inc.php:67
SubmissionEventLogGridHandler\authorize
authorize($request, &$args, $roleAssignments)
Definition: SubmissionEventLogGridHandler.inc.php:81
JSONMessage
Class to represent a JSON (Javascript Object Notation) message.
Definition: JSONMessage.inc.php:18
EventLogGridRow
EventLog grid row definition.
Definition: EventLogGridRow.inc.php:24
SubmissionEventLogGridHandler\getSubmission
getSubmission()
Definition: SubmissionEventLogGridHandler.inc.php:59
PKPHandler\getAuthorizedContextObject
& getAuthorizedContextObject($assocType)
Definition: PKPHandler.inc.php:174
SubmissionEventLogGridHandler\getRequestArgs
getRequestArgs()
Definition: SubmissionEventLogGridHandler.inc.php:174
SubmissionEventLogGridHandler\initialize
initialize($request, $args=null)
Definition: SubmissionEventLogGridHandler.inc.php:107
GridHandler
This class defines basic operations for handling HTML grids. Grids are used to implement a standardiz...
Definition: GridHandler.inc.php:58
SubmissionEventLogGridHandler\_formatEmail
_formatEmail($emailLogEntry)
Definition: SubmissionEventLogGridHandler.inc.php:226
PKPApplication\get
static get()
Definition: PKPApplication.inc.php:235
SubmissionAccessPolicy
Base class to control (write) access to submissions and (read) access to submission details in OMP.
Definition: SubmissionAccessPolicy.inc.php:19
PKPHandler\addPolicy
addPolicy($authorizationPolicy, $addToTop=false)
Definition: PKPHandler.inc.php:157
SubmissionEventLogGridHandler\__construct
__construct()
Definition: SubmissionEventLogGridHandler.inc.php:43