addRoleAssignment( [Role::ROLE_ID_MANAGER, Role::ROLE_ID_SITE_ADMIN], [ 'fetchGrid', 'fetchRow', 'saveSequence', 'add', 'edit', 'upload', 'download', 'update', 'delete' ] ); } // // Implement template methods from PKPHandler // /** * @copydoc PKPHandler::authorize() */ public function authorize($request, &$args, $roleAssignments) { $this->addPolicy(new ContextAccessPolicy($request, $roleAssignments)); $this->addPolicy(new OjsIssueRequiredPolicy($request, $args)); // If a signoff ID was specified, authorize it. if ($request->getUserVar('issueGalleyId')) { $this->addPolicy(new OjsIssueGalleyRequiredPolicy($request, $args)); } return parent::authorize($request, $args, $roleAssignments); } /** * @copydoc GridHandler::getDataElementSequence() */ public function getDataElementSequence($issueGalley) { return $issueGalley->getSequence(); } /** * @copydoc GridHandler::setDataElementSequence() */ public function setDataElementSequence($request, $rowId, $gridDataElement, $newSequence) { $issueGalleyDao = DAORegistry::getDAO('IssueGalleyDAO'); /** @var IssueGalleyDAO $issueGalleyDao */ $gridDataElement->setSequence($newSequence); $issueGalleyDao->updateObject($gridDataElement); } /** * @copydoc GridHandler::addFeatures() */ public function initFeatures($request, $args) { return [new OrderGridItemsFeature()]; } /** * @copydoc GridDataProvider::getRequestArgs() */ public function getRequestArgs() { $issue = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_ISSUE); $issueGalley = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_ISSUE_GALLEY); $requestArgs = (array) parent::getRequestArgs(); $requestArgs['issueId'] = $issue->getId(); if ($issueGalley) { $requestArgs['issueGalleyId'] = $issueGalley->getId(); } return $requestArgs; } /** * @copydoc GridHandler::initialize() * * @param null|mixed $args */ public function initialize($request, $args = null) { parent::initialize($request, $args); // Add action $router = $request->getRouter(); $this->addAction( new LinkAction( 'add', new AjaxModal( $router->url( $request, null, null, 'add', null, array_merge($this->getRequestArgs(), ['gridId' => $this->getId()]) ), __('grid.action.addIssueGalley'), 'modal_add' ), __('grid.action.addIssueGalley'), 'add_category' ) ); // Grid columns. $issueGalleyGridCellProvider = new IssueGalleyGridCellProvider(); // Issue identification $this->addColumn( new GridColumn( 'label', 'submission.layout.galleyLabel', null, null, $issueGalleyGridCellProvider ) ); // Language, if more than one is supported $journal = $request->getJournal(); if (count($journal->getSupportedLocaleNames()) > 1) { $this->addColumn( new GridColumn( 'locale', 'common.language', null, null, $issueGalleyGridCellProvider ) ); } // Public ID, if enabled $this->addColumn( new GridColumn( 'publicGalleyId', 'submission.publisherId', null, null, $issueGalleyGridCellProvider ) ); } /** * Get the row handler - override the default row handler * * @return IssueGalleyGridRow */ protected function getRowInstance() { $issue = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_ISSUE); return new IssueGalleyGridRow($issue->getId()); } // // Public operations // /** * An action to add a new issue * * @param array $args * @param Request $request */ public function add($args, $request) { // Calling editIssueData with an empty ID will add // a new issue. return $this->edit($args, $request); } /** * An action to edit a issue galley * * @param array $args * @param Request $request * * @return JSONMessage JSON object */ public function edit($args, $request) { $issue = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_ISSUE); $issueGalley = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_ISSUE_GALLEY); $issueGalleyForm = new IssueGalleyForm($request, $issue, $issueGalley); $issueGalleyForm->initData(); return new JSONMessage(true, $issueGalleyForm->fetch($request)); } /** * An action to upload an issue galley file. * * @param array $args * @param Request $request * * @return JSONMessage JSON object */ public function upload($args, $request) { $user = $request->getUser(); $temporaryFileManager = new TemporaryFileManager(); $temporaryFile = $temporaryFileManager->handleUpload('uploadedFile', $user->getId()); if ($temporaryFile) { $json = new JSONMessage(true); $json->setAdditionalAttributes([ 'temporaryFileId' => $temporaryFile->getId() ]); return $json; } else { return new JSONMessage(false, __('common.uploadFailed')); } } /** * An action to download an issue galley * * @param array $args * @param Request $request * * @return string Serialized JSON object */ public function download($args, $request) { $issue = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_ISSUE); $issueGalley = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_ISSUE_GALLEY); $issueFileManager = new IssueFileManager($issue->getId()); return $issueFileManager->downloadById($issueGalley->getFileId()); } /** * Update a issue * * @param array $args * @param Request $request * * @return JSONMessage JSON object */ public function update($args, $request) { $issue = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_ISSUE); $issueGalley = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_ISSUE_GALLEY); $issueGalleyForm = new IssueGalleyForm($request, $issue, $issueGalley); $issueGalleyForm->readInputData(); if ($issueGalleyForm->validate()) { $issueId = $issueGalleyForm->execute(); return DAO::getDataChangedEvent($issueId); } return new JSONMessage(false); } /** * Removes an issue galley * * @param array $args * @param Request $request */ public function delete($args, $request) { $issueGalleyDao = DAORegistry::getDAO('IssueGalleyDAO'); /** @var IssueGalleyDAO $issueGalleyDao */ $issueGalley = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_ISSUE_GALLEY); if ($issueGalley && $request->checkCSRF()) { $issueGalleyDao->deleteObject($issueGalley); return DAO::getDataChangedEvent(); } return new JSONMessage(false); } /** * @copydoc GridHandler::loadData */ protected function loadData($request, $filter) { $issue = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_ISSUE); $issueGalleyDao = DAORegistry::getDAO('IssueGalleyDAO'); /** @var IssueGalleyDAO $issueGalleyDao */ return $issueGalleyDao->getByIssueId($issue->getId()); } }