first commit
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file controllers/grid/issueGalleys/IssueGalleyGridCellProvider.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 IssueGalleyGridCellProvider
|
||||
*
|
||||
* @ingroup issue_galley
|
||||
*
|
||||
* @brief Grid cell provider for the issue galleys grid
|
||||
*/
|
||||
|
||||
namespace APP\controllers\grid\issueGalleys;
|
||||
|
||||
use PKP\controllers\grid\GridCellProvider;
|
||||
use PKP\controllers\grid\GridColumn;
|
||||
use PKP\facades\Locale;
|
||||
|
||||
class IssueGalleyGridCellProvider extends GridCellProvider
|
||||
{
|
||||
/**
|
||||
* Extracts variables for a given column from a data element
|
||||
* so that they may be assigned to template before rendering.
|
||||
*
|
||||
* @param \PKP\controllers\grid\GridRow $row
|
||||
* @param GridColumn $column
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getTemplateVarsFromRowColumn($row, $column)
|
||||
{
|
||||
$issueGalley = $row->getData();
|
||||
$columnId = $column->getId();
|
||||
assert(is_a($issueGalley, 'IssueGalley'));
|
||||
assert(!empty($columnId));
|
||||
|
||||
switch ($columnId) {
|
||||
case 'label': return ['label' => $issueGalley->getLabel()];
|
||||
case 'locale': return ['label' => Locale::getMetadata($issueGalley->getLocale())->getDisplayName()];
|
||||
case 'publicGalleyId': return ['label' => $issueGalley->getStoredPubId('publisher-id')];
|
||||
default: assert(false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,323 @@
|
||||
<?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());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file controllers/grid/issueGalleys/IssueGalleyGridRow.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 IssueGalleyGridRow
|
||||
*
|
||||
* @ingroup issue_galley
|
||||
*
|
||||
* @brief Handle issue galley grid row requests.
|
||||
*/
|
||||
|
||||
namespace APP\controllers\grid\issueGalleys;
|
||||
|
||||
use PKP\controllers\grid\GridRow;
|
||||
use PKP\linkAction\LinkAction;
|
||||
use PKP\linkAction\request\AjaxModal;
|
||||
use PKP\linkAction\request\RemoteActionConfirmationModal;
|
||||
|
||||
class IssueGalleyGridRow extends GridRow
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct($issueId)
|
||||
{
|
||||
parent::__construct();
|
||||
$this->setRequestArgs(
|
||||
array_merge(
|
||||
((array) $this->getRequestArgs()),
|
||||
['issueId' => $issueId]
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
// Overridden template methods
|
||||
//
|
||||
/**
|
||||
* @copydoc GridRow::initialize
|
||||
*
|
||||
* @param null|mixed $template
|
||||
*/
|
||||
public function initialize($request, $template = null)
|
||||
{
|
||||
parent::initialize($request, $template);
|
||||
|
||||
// Is this a new row or an existing row?
|
||||
$issueGalleyId = $this->getId();
|
||||
if (!empty($issueGalleyId) && is_numeric($issueGalleyId)) {
|
||||
$issue = $this->getData();
|
||||
assert(is_a($issue, 'IssueGalley'));
|
||||
$router = $request->getRouter();
|
||||
|
||||
$this->addAction(
|
||||
new LinkAction(
|
||||
'edit',
|
||||
new AjaxModal(
|
||||
$router->url(
|
||||
$request,
|
||||
null,
|
||||
null,
|
||||
'edit',
|
||||
null,
|
||||
array_merge($this->getRequestArgs(), ['issueGalleyId' => $issueGalleyId])
|
||||
),
|
||||
__('editor.issues.editIssueGalley'),
|
||||
'modal_edit',
|
||||
true
|
||||
),
|
||||
__('grid.action.edit'),
|
||||
'edit'
|
||||
)
|
||||
);
|
||||
|
||||
$this->addAction(
|
||||
new LinkAction(
|
||||
'delete',
|
||||
new RemoteActionConfirmationModal(
|
||||
$request->getSession(),
|
||||
__('common.confirmDelete'),
|
||||
__('grid.action.delete'),
|
||||
$router->url(
|
||||
$request,
|
||||
null,
|
||||
null,
|
||||
'delete',
|
||||
null,
|
||||
array_merge($this->getRequestArgs(), ['issueGalleyId' => $issueGalleyId])
|
||||
),
|
||||
'modal_delete'
|
||||
),
|
||||
__('grid.action.delete'),
|
||||
'delete'
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user