[ Mini Kiebo ]
Server: Windows NT DESKTOP-5B8S0D4 6.2 build 9200 (Windows 8 Professional Edition) i586
Path:
D:
/
Backup
/
05122024
/
htdocs
/
jurnal-kesmas
/
v1
/
controllers
/
grid
/
issueGalleys
/
[
Home
]
File: IssueGalleyGridHandler.php
<?php /** * @file controllers/grid/issueGalleys/IssueGalleyGridHandler.php * * Copyright (c) 2014-2021 Simon Fraser University * Copyright (c) 2000-2021 John Willinsky * Distributed under the GNU GPL v3. For full terms see the file docs/COPYING. * * @class IssueGalleyGridHandler * * @ingroup issue_galley * * @brief Handle issues grid requests. */ namespace APP\controllers\grid\issueGalleys; use APP\controllers\grid\issues\form\IssueGalleyForm; use APP\core\Application; use APP\core\Request; use APP\file\IssueFileManager; use APP\issue\IssueGalleyDAO; use APP\security\authorization\OjsIssueGalleyRequiredPolicy; use APP\security\authorization\OjsIssueRequiredPolicy; use PKP\controllers\grid\feature\OrderGridItemsFeature; use PKP\controllers\grid\GridColumn; use PKP\controllers\grid\GridHandler; use PKP\core\JSONMessage; use PKP\db\DAO; use PKP\db\DAORegistry; use PKP\file\TemporaryFileManager; use PKP\linkAction\LinkAction; use PKP\linkAction\request\AjaxModal; use PKP\security\authorization\ContextAccessPolicy; use PKP\security\Role; class IssueGalleyGridHandler extends GridHandler { /** * Constructor */ public function __construct() { parent::__construct(); $this->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()); } }