JezK
Edit File: FileInformationCenterHandler.inc.php
<?php /** * @file controllers/informationCenter/FileInformationCenterHandler.inc.php * * Copyright (c) 2014-2021 Simon Fraser University * Copyright (c) 2003-2021 John Willinsky * Distributed under the GNU GPL v3. For full terms see the file docs/COPYING. * * @class FileInformationCenterHandler * @ingroup controllers_informationCenter * * @brief Handle requests to view the information center for a file. */ import('lib.pkp.controllers.informationCenter.InformationCenterHandler'); import('lib.pkp.classes.core.JSONMessage'); import('classes.log.SubmissionEventLogEntry'); class FileInformationCenterHandler extends InformationCenterHandler { /** @var object */ var $submissionFile; /** @var int */ var $_stageId; /** * Constructor */ function __construct() { parent::__construct(); $this->addRoleAssignment( array(ROLE_ID_ASSISTANT), array( 'viewInformationCenter', 'viewHistory', 'viewNotes', 'listNotes', 'saveNote', 'deleteNote', ) ); } /** * @copydoc PKPHandler::authorize() */ function authorize($request, &$args, $roleAssignments) { // Require stage access import('lib.pkp.classes.security.authorization.WorkflowStageAccessPolicy'); $this->addPolicy(new WorkflowStageAccessPolicy($request, $args, $roleAssignments, 'submissionId', (int) $request->getUserVar('stageId'))); return parent::authorize($request, $args, $roleAssignments); } /** * @copydoc InformationCenterHandler::initialize */ function initialize($request) { parent::initialize($request); $this->_stageId = $this->getAuthorizedContextObject(ASSOC_TYPE_WORKFLOW_STAGE); $this->submissionFile = Services::get('submissionFile')->get($request->getUserVar('submissionFileId')); // Ensure data integrity. if (!$this->_submission || !$this->submissionFile || $this->_submission->getId() != $this->submissionFile->getData('submissionId')) { throw new Exception('Unknown or invalid submission or submission file!'); }; } /** * Display the main information center modal. * @param $args array * @param $request PKPRequest */ function viewInformationCenter($args, $request) { $this->setupTemplate($request); // Assign variables to the template manager and display $templateMgr = TemplateManager::getManager($request); $templateMgr->assign('removeHistoryTab', (int) $request->getUserVar('removeHistoryTab')); return parent::viewInformationCenter($args, $request); } /** * Display the notes tab. * @param $args array * @param $request PKPRequest * @return JSONMessage JSON object */ function viewNotes($args, $request) { $this->setupTemplate($request); import('lib.pkp.controllers.informationCenter.form.NewFileNoteForm'); $notesForm = new NewFileNoteForm($this->submissionFile->getId()); $notesForm->initData(); $templateMgr = TemplateManager::getManager($request); $templateMgr->assign('notesList', $this->_listNotes($args, $request)); $templateMgr->assign('pastNotesList', $this->_listPastNotes($args, $request)); return new JSONMessage(true, $notesForm->fetch($request)); } /** * Display the list of existing notes from prior files. * @param $args array * @param $request PKPRequest * @return JSONMessage JSON object */ function _listPastNotes($args, $request) { $this->setupTemplate($request); $templateMgr = TemplateManager::getManager($request); $noteDao = DAORegistry::getDAO('NoteDAO'); /* @var $noteDao NoteDAO */ $submissionFile = $this->submissionFile; $notes = $noteDao->getByAssoc($this->_getAssocType(), $submissionFile->getData('sourceSubmissionFileId'))->toArray(); import('lib.pkp.classes.core.ArrayItemIterator'); $templateMgr->assign('notes', new ArrayItemIterator($notes)); $user = $request->getUser(); $templateMgr->assign(array( 'currentUserId' => $user->getId(), 'notesDeletable' => false, )); return $templateMgr->fetch('controllers/informationCenter/notesList.tpl'); } /** * Save a note. * @param $args array * @param $request PKPRequest * @return JSONMessage JSON object */ function saveNote($args, $request) { $this->setupTemplate($request); import('lib.pkp.controllers.informationCenter.form.NewFileNoteForm'); $notesForm = new NewFileNoteForm($this->submissionFile->getId()); $notesForm->readInputData(); if ($notesForm->validate()) { $notesForm->execute(); // Save to event log $this->_logEvent($request, $this->submissionFile, SUBMISSION_LOG_NOTE_POSTED, 'SubmissionFileLog'); $user = $request->getUser(); $notificationMgr = new NotificationManager(); $notificationMgr->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_SUCCESS, array('contents' => __('notification.addedNote'))); $jsonViewNotesResponse = $this->viewNotes($args, $request); $json = new JSONMessage(true); $json->setEvent('dataChanged'); $json->setEvent('noteAdded', $jsonViewNotesResponse->_content); return $json; } else { // Return a JSON string indicating failure return new JSONMessage(false); } } /** * Fetch the contents of the event log. * @param $args array * @param $request PKPRequest * @return JSONMessage JSON object */ function viewHistory($args, $request) { $this->setupTemplate($request); $templateMgr = TemplateManager::getManager($request); $dispatcher = $request->getDispatcher(); return $templateMgr->fetchAjax( 'eventLogGrid', $dispatcher->url($request, ROUTE_COMPONENT, null, 'grid.eventLog.SubmissionFileEventLogGridHandler', 'fetchGrid', null, $this->_getLinkParams()) ); } /** * Get an array representing link parameters that subclasses * need to have passed to their various handlers (i.e. submission ID * to the delete note handler). * @return array */ function _getLinkParams() { return array_merge( parent::_getLinkParams(), array( 'submissionFileId' => $this->submissionFile->getId(), 'stageId' => $this->_stageId, ) ); } /** * Get the association ID for this information center view * @return int */ function _getAssocId() { return $this->submissionFile->getId(); } /** * Get the association type for this information center view * @return int */ function _getAssocType() { return ASSOC_TYPE_SUBMISSION_FILE; } /** * Set up the template * @param $request PKPRequest */ function setupTemplate($request) { $templateMgr = TemplateManager::getManager($request); // Get the latest history item to display in the header $submissionFileEventLogDao = DAORegistry::getDAO('SubmissionFileEventLogDAO'); /* @var $submissionFileEventLogDao SubmissionFileEventLogDAO */ $fileEvents = $submissionFileEventLogDao->getBySubmissionFileId($this->submissionFile->getId()); $lastEvent = $fileEvents->next(); if(isset($lastEvent)) { $templateMgr->assign('lastEvent', $lastEvent); // Get the user who created the last event. $userDao = DAORegistry::getDAO('UserDAO'); /* @var $userDao UserDAO */ $user = $userDao->getById($lastEvent->getUserId()); $templateMgr->assign('lastEventUser', $user); } return parent::setupTemplate($request); } }