Open Journal Systems  3.3.0
FileInformationCenterHandler.inc.php
1 <?php
2 
16 import('lib.pkp.controllers.informationCenter.InformationCenterHandler');
17 import('lib.pkp.classes.core.JSONMessage');
18 import('classes.log.SubmissionEventLogEntry');
19 
22  var $submissionFile;
23 
25  var $_stageId;
26 
30  function __construct() {
31  parent::__construct();
32  $this->addRoleAssignment(
33  array(ROLE_ID_ASSISTANT),
34  array(
35  'viewInformationCenter',
36  'viewHistory',
37  'viewNotes', 'listNotes', 'saveNote', 'deleteNote',
38  )
39  );
40  }
41 
45  function authorize($request, &$args, $roleAssignments) {
46  // Require stage access
47  import('lib.pkp.classes.security.authorization.WorkflowStageAccessPolicy');
48  $this->addPolicy(new WorkflowStageAccessPolicy($request, $args, $roleAssignments, 'submissionId', (int) $request->getUserVar('stageId')));
49 
50  return parent::authorize($request, $args, $roleAssignments);
51  }
52 
56  function initialize($request) {
57  parent::initialize($request);
58 
59  $this->_stageId = $this->getAuthorizedContextObject(ASSOC_TYPE_WORKFLOW_STAGE);
60 
61  $submissionFileDao = DAORegistry::getDAO('SubmissionFileDAO'); /* @var $submissionFileDao SubmissionFileDAO */
62  $this->submissionFile = $submissionFileDao->getLatestRevision($request->getUserVar('fileId'));
63 
64  // Ensure data integrity.
65  if (!$this->_submission || !$this->submissionFile || $this->_submission->getId() != $this->submissionFile->getSubmissionId()) fatalError('Unknown or invalid submission or submission file!');
66  }
67 
73  function viewInformationCenter($args, $request) {
74  $this->setupTemplate($request);
75 
76  // Assign variables to the template manager and display
77  $templateMgr = TemplateManager::getManager($request);
78  $fileName = (($s = $this->submissionFile->getLocalizedName()) != '') ? $s : __('common.untitled');
79  if (($i = $this->submissionFile->getRevision()) > 1) $fileName .= " ($i)"; // Add revision number to label
80  if (empty($fileName)) $fileName = __('common.untitled');
81  $templateMgr->assign('removeHistoryTab', (int) $request->getUserVar('removeHistoryTab'));
82 
83  return parent::viewInformationCenter($args, $request);
84  }
85 
92  function viewNotes($args, $request) {
93  $this->setupTemplate($request);
94 
95  import('lib.pkp.controllers.informationCenter.form.NewFileNoteForm');
96  $notesForm = new NewFileNoteForm($this->submissionFile->getFileId());
97  $notesForm->initData();
98 
99  $templateMgr = TemplateManager::getManager($request);
100  $templateMgr->assign('notesList', $this->_listNotes($args, $request));
101  $templateMgr->assign('pastNotesList', $this->_listPastNotes($args, $request));
102 
103  return new JSONMessage(true, $notesForm->fetch($request));
104  }
105 
112  function _listPastNotes($args, $request) {
113  $this->setupTemplate($request);
114 
115  $templateMgr = TemplateManager::getManager($request);
116  $noteDao = DAORegistry::getDAO('NoteDAO'); /* @var $noteDao NoteDAO */
117 
119  $notes = array();
120  $submissionFileDao = DAORegistry::getDAO('SubmissionFileDAO'); /* @var $submissionFileDao SubmissionFileDAO */
121  while (true) {
122  $submissionFile = $submissionFileDao->getRevision($submissionFile->getSourceFileId(), $submissionFile->getSourceRevision());
123  if (!$submissionFile) break;
124 
125  $iterator = $noteDao->getByAssoc($this->_getAssocType(), $submissionFile->getFileId());
126  $notes += $iterator->toArray();
127  }
128  import('lib.pkp.classes.core.ArrayItemIterator');
129  $templateMgr->assign('notes', new ArrayItemIterator($notes));
130 
131  $user = $request->getUser();
132  $templateMgr->assign(array(
133  'currentUserId' => $user->getId(),
134  'notesListId' => 'pastNotesList',
135  'notesDeletable' => false,
136  ));
137 
138  return $templateMgr->fetch('controllers/informationCenter/notesList.tpl');
139  }
140 
147  function saveNote($args, $request) {
148  $this->setupTemplate($request);
149 
150  import('lib.pkp.controllers.informationCenter.form.NewFileNoteForm');
151  $notesForm = new NewFileNoteForm($this->submissionFile->getFileId());
152  $notesForm->readInputData();
153 
154  if ($notesForm->validate()) {
155  $notesForm->execute();
156 
157  // Save to event log
158  $this->_logEvent($request, $this->submissionFile, SUBMISSION_LOG_NOTE_POSTED, 'SubmissionFileLog');
159 
160  $user = $request->getUser();
161  NotificationManager::createTrivialNotification($user->getId(), NOTIFICATION_TYPE_SUCCESS, array('contents' => __('notification.addedNote')));
162 
163  $jsonViewNotesResponse = $this->viewNotes($args, $request);
164  $json = new JSONMessage(true);
165  $json->setEvent('dataChanged');
166  $json->setEvent('noteAdded', $jsonViewNotesResponse->_content);
167 
168  return $json;
169 
170  } else {
171  // Return a JSON string indicating failure
172  return new JSONMessage(false);
173  }
174  }
175 
182  function viewHistory($args, $request) {
183  $this->setupTemplate($request);
184  $templateMgr = TemplateManager::getManager($request);
185  $dispatcher = $request->getDispatcher();
186  return $templateMgr->fetchAjax(
187  'eventLogGrid',
188  $dispatcher->url($request, ROUTE_COMPONENT, null, 'grid.eventLog.SubmissionFileEventLogGridHandler', 'fetchGrid', null, $this->_getLinkParams())
189  );
190  }
191 
198  function _getLinkParams() {
199  return array_merge(
200  parent::_getLinkParams(),
201  array(
202  'fileId' => $this->submissionFile->getFileId(),
203  'stageId' => $this->_stageId,
204  )
205  );
206  }
207 
212  function _getAssocId() {
213  return $this->submissionFile->getFileId();
214  }
215 
220  function _getAssocType() {
221  return ASSOC_TYPE_SUBMISSION_FILE;
222  }
223 
228  function setupTemplate($request) {
229  $templateMgr = TemplateManager::getManager($request);
230 
231  // Get the latest history item to display in the header
232  $submissionEventLogDao = DAORegistry::getDAO('SubmissionFileEventLogDAO'); /* @var $submissionEventLogDao SubmissionFileEventLogDAO */
233  $fileEvents = $submissionEventLogDao->getByFileId($this->submissionFile->getFileId());
234  $lastEvent = $fileEvents->next();
235  if(isset($lastEvent)) {
236  $templateMgr->assign('lastEvent', $lastEvent);
237 
238  // Get the user who created the last event.
239  $userDao = DAORegistry::getDAO('UserDAO'); /* @var $userDao UserDAO */
240  $user = $userDao->getById($lastEvent->getUserId());
241  $templateMgr->assign('lastEventUser', $user);
242  }
243 
244  return parent::setupTemplate($request);
245  }
246 }
247 
248 
PKPHandler\addRoleAssignment
addRoleAssignment($roleIds, $operations)
Definition: PKPHandler.inc.php:213
InformationCenterHandler\_logEvent
_logEvent($request, $object, $eventType, $logClass)
Definition: InformationCenterHandler.inc.php:165
FileInformationCenterHandler\setupTemplate
setupTemplate($request)
Definition: FileInformationCenterHandler.inc.php:234
InformationCenterHandler
Parent class for file/submission information center handlers.
Definition: InformationCenterHandler.inc.php:20
InformationCenterHandler\_listNotes
_listNotes($args, $request)
Definition: InformationCenterHandler.inc.php:130
FileInformationCenterHandler\_getLinkParams
_getLinkParams()
Definition: FileInformationCenterHandler.inc.php:204
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
FileInformationCenterHandler\_getAssocType
_getAssocType()
Definition: FileInformationCenterHandler.inc.php:226
FileInformationCenterHandler\_listPastNotes
_listPastNotes($args, $request)
Definition: FileInformationCenterHandler.inc.php:118
FileInformationCenterHandler\initialize
initialize($request)
Definition: FileInformationCenterHandler.inc.php:62
FileInformationCenterHandler
Handle requests to view the information center for a file.
Definition: FileInformationCenterHandler.inc.php:20
FileInformationCenterHandler\viewHistory
viewHistory($args, $request)
Definition: FileInformationCenterHandler.inc.php:188
FileInformationCenterHandler\saveNote
saveNote($args, $request)
Definition: FileInformationCenterHandler.inc.php:153
FileInformationCenterHandler\_getAssocId
_getAssocId()
Definition: FileInformationCenterHandler.inc.php:218
PKPNotificationOperationManager\createTrivialNotification
createTrivialNotification($userId, $notificationType=NOTIFICATION_TYPE_SUCCESS, $params=null)
Definition: PKPNotificationOperationManager.inc.php:193
FileInformationCenterHandler\$submissionFile
$submissionFile
Definition: FileInformationCenterHandler.inc.php:25
FileInformationCenterHandler\__construct
__construct()
Definition: FileInformationCenterHandler.inc.php:36
FileInformationCenterHandler\viewNotes
viewNotes($args, $request)
Definition: FileInformationCenterHandler.inc.php:98
JSONMessage
Class to represent a JSON (Javascript Object Notation) message.
Definition: JSONMessage.inc.php:18
ArrayItemIterator
Provides paging and iteration for arrays.
Definition: ArrayItemIterator.inc.php:19
FileInformationCenterHandler\authorize
authorize($request, &$args, $roleAssignments)
Definition: FileInformationCenterHandler.inc.php:51
PKPTemplateManager\getManager
static & getManager($request=null)
Definition: PKPTemplateManager.inc.php:1239
PKPHandler\getAuthorizedContextObject
& getAuthorizedContextObject($assocType)
Definition: PKPHandler.inc.php:174
WorkflowStageAccessPolicy
Class to control access to OMP's submission workflow stage components.
Definition: WorkflowStageAccessPolicy.inc.php:19
FileInformationCenterHandler\$_stageId
$_stageId
Definition: FileInformationCenterHandler.inc.php:31
NewFileNoteForm
Form to display and post notes on a file.
Definition: NewFileNoteForm.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
FileInformationCenterHandler\viewInformationCenter
viewInformationCenter($args, $request)
Definition: FileInformationCenterHandler.inc.php:79