first commit

This commit is contained in:
CHIEFSOFT\ameye
2024-06-08 17:09:23 -04:00
commit df3a033196
17887 changed files with 8637778 additions and 0 deletions
@@ -0,0 +1,115 @@
<?php
/**
* @file controllers/grid/files/query/ManageQueryNoteFilesGridHandler.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 ManageQueryNoteFilesGridHandler
*
* @ingroup controllers_grid_files_query
*
* @brief Handle the query file selection grid
*/
namespace PKP\controllers\grid\files\query;
use APP\core\Application;
use PKP\controllers\grid\files\FilesGridCapabilities;
use PKP\controllers\grid\files\query\form\ManageQueryNoteFilesForm;
use PKP\controllers\grid\files\SelectableSubmissionFileListCategoryGridHandler;
use PKP\core\JSONMessage;
use PKP\core\PKPRequest;
use PKP\security\Role;
class ManageQueryNoteFilesGridHandler extends SelectableSubmissionFileListCategoryGridHandler
{
/**
* Constructor
*/
public function __construct()
{
$request = Application::get()->getRequest();
$stageId = $request->getUservar('stageId'); // authorized by data provider.
parent::__construct(
new QueryNoteFilesCategoryGridDataProvider(),
$stageId,
FilesGridCapabilities::FILE_GRID_DELETE | FilesGridCapabilities::FILE_GRID_VIEW_NOTES | FilesGridCapabilities::FILE_GRID_EDIT
);
$this->addRoleAssignment(
[
Role::ROLE_ID_SUB_EDITOR,
Role::ROLE_ID_MANAGER,
Role::ROLE_ID_SITE_ADMIN,
Role::ROLE_ID_ASSISTANT
],
[
'fetchGrid', 'fetchCategory', 'fetchRow',
'addFile',
'downloadFile',
'deleteFile',
'updateQueryNoteFiles'
]
);
// Set the grid title.
$this->setTitle('submission.queryNoteFiles');
}
//
// Override methods from SelectableSubmissionFileListCategoryGridHandler
//
/**
* @copydoc GridHandler::isDataElementInCategorySelected()
*/
public function isDataElementInCategorySelected($categoryDataId, &$gridDataElement)
{
$submissionFile = $gridDataElement['submissionFile'];
// Check for special cases when the file needs to be unselected.
$dataProvider = $this->getDataProvider();
if ($dataProvider->getFileStage() != $submissionFile->getFileStage()) {
return false;
}
// Passed the checks above. If it's part of the current query, mark selected.
$query = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_QUERY);
$headNote = $query->getHeadNote();
return ($submissionFile->getData('assocType') == Application::ASSOC_TYPE_NOTE && $submissionFile->getData('assocId') == $headNote->getId());
}
//
// Public handler methods
//
/**
* Save 'manage query files' form
*
* @param array $args
* @param PKPRequest $request
*
* @return JSONMessage JSON object
*/
public function updateQueryNoteFiles($args, $request)
{
$submission = $this->getSubmission();
$query = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_QUERY);
$manageQueryNoteFilesForm = new ManageQueryNoteFilesForm($submission->getId(), $query->getId(), $request->getUserVar('noteId'));
$manageQueryNoteFilesForm->readInputData();
if ($manageQueryNoteFilesForm->validate()) {
$manageQueryNoteFilesForm->execute(
$this->getGridCategoryDataElements($request, $this->getStageId())
);
// Let the calling grid reload itself
return \PKP\db\DAO::getDataChangedEvent();
} else {
return new JSONMessage(false);
}
}
}
@@ -0,0 +1,46 @@
<?php
/**
* @file controllers/grid/files/query/QueryNoteFilesCategoryGridDataProvider.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 QueryNoteFilesCategoryGridDataProvider
*
* @ingroup controllers_grid_files_query
*
* @brief Provide access to query file data for category grids.
*/
namespace PKP\controllers\grid\files\query;
use APP\core\Application;
use PKP\controllers\grid\files\SubmissionFilesCategoryGridDataProvider;
use PKP\submissionFile\SubmissionFile;
class QueryNoteFilesCategoryGridDataProvider extends SubmissionFilesCategoryGridDataProvider
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct(SubmissionFile::SUBMISSION_FILE_QUERY);
}
//
// Overriden public methods from SubmissionFilesCategoryGridDataProvider
//
/**
* @copydoc SubmissionFilesCategoryGridDataProvider::initGridDataProvider()
*
* @param null|mixed $initParams
*/
public function initGridDataProvider($fileStage, $initParams = null)
{
$request = Application::get()->getRequest();
return new QueryNoteFilesGridDataProvider($request->getUserVar('noteId'));
}
}
@@ -0,0 +1,139 @@
<?php
/**
* @file controllers/grid/files/query/QueryNoteFilesGridDataProvider.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 QueryNoteFilesGridDataProvider
*
* @ingroup controllers_grid_files_query
*
* @brief Provide access to query files management.
*/
namespace PKP\controllers\grid\files\query;
use APP\core\Application;
use APP\facades\Repo;
use Exception;
use PKP\controllers\api\file\linkAction\AddFileLinkAction;
use PKP\controllers\grid\files\fileList\linkAction\SelectFilesLinkAction;
use PKP\controllers\grid\files\SubmissionFilesGridDataProvider;
use PKP\db\DAORegistry;
use PKP\note\NoteDAO;
use PKP\security\authorization\QueryAccessPolicy;
use PKP\submissionFile\SubmissionFile;
class QueryNoteFilesGridDataProvider extends SubmissionFilesGridDataProvider
{
/** @var int Note ID */
public $_noteId;
/**
* Constructor
*
* @param int $noteId Note ID
*/
public function __construct($noteId)
{
parent::__construct(SubmissionFile::SUBMISSION_FILE_QUERY);
$this->_noteId = $noteId;
}
//
// Overridden public methods from FilesGridDataProvider
//
/**
* @copydoc GridDataProvider::getAuthorizationPolicy()
*/
public function getAuthorizationPolicy($request, $args, $roleAssignments)
{
$this->setUploaderRoles($roleAssignments);
return new QueryAccessPolicy($request, $args, $roleAssignments, $this->getStageId());
}
/**
* @copydoc FilesGridDataProvider::getSelectAction()
*/
public function getSelectAction($request)
{
$query = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_QUERY);
return new SelectFilesLinkAction(
$request,
$this->getRequestArgs(),
__('editor.submission.selectFiles')
);
}
/**
* @copydoc GridDataProvider::loadData()
*/
public function loadData($filter = [])
{
// Retrieve all submission files for the given file query.
$submission = $this->getSubmission();
$query = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_QUERY);
$noteDao = DAORegistry::getDAO('NoteDAO'); /** @var NoteDAO $noteDao */
$note = $noteDao->getById($this->_noteId);
if ($note->getAssocType() != Application::ASSOC_TYPE_QUERY || $note->getAssocId() != $query->getId()) {
throw new Exception('Invalid note ID specified!');
}
$submissionFiles = Repo::submissionFile()
->getCollector()
->filterByAssoc(
Application::ASSOC_TYPE_NOTE,
[$this->_noteId]
)->filterBySubmissionIds([$submission->getId()])
->filterByFileStages([(int) $this->getFileStage()])
->getMany()
->toArray();
return $this->prepareSubmissionFileData($submissionFiles, $this->_viewableOnly, $filter);
}
/**
* @copydoc GridDataProvider::getRequestArgs()
*/
public function getRequestArgs()
{
$query = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_QUERY);
$representation = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_REPRESENTATION);
return array_merge(
parent::getRequestArgs(),
[
'assocType' => Application::ASSOC_TYPE_NOTE,
'assocId' => $this->_noteId,
'queryId' => $query->getId(),
'noteId' => $this->_noteId,
'representationId' => $representation ? $representation->getId() : null,
]
);
}
/**
* @copydoc FilesGridDataProvider::getAddFileAction()
*/
public function getAddFileAction($request)
{
$submission = $this->getSubmission();
$query = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_QUERY);
return new AddFileLinkAction(
$request,
$submission->getId(),
$this->getStageId(),
$this->getUploaderRoles(),
$this->getFileStage(),
Application::ASSOC_TYPE_NOTE,
$this->_noteId,
null,
null,
false,
$query->getId()
);
}
}
@@ -0,0 +1,98 @@
<?php
/**
* @file controllers/grid/files/query/QueryNoteFilesGridHandler.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 QueryNoteFilesGridHandler
*
* @ingroup controllers_grid_files_query
*
* @brief Handle query files that are associated with a query
* The participants of a query have access to the files in this grid.
*/
namespace PKP\controllers\grid\files\query;
use APP\core\Application;
use PKP\controllers\grid\files\fileList\FileListGridHandler;
use PKP\controllers\grid\files\FilesGridCapabilities;
use PKP\controllers\grid\files\query\form\ManageQueryNoteFilesForm;
use PKP\core\JSONMessage;
use PKP\core\PKPRequest;
use PKP\security\authorization\QueryAccessPolicy;
use PKP\security\Role;
class QueryNoteFilesGridHandler extends FileListGridHandler
{
/**
* Constructor
*/
public function __construct()
{
// import app-specific grid data provider for access policies.
$request = Application::get()->getRequest();
$stageId = $request->getUservar('stageId'); // authorized in authorize() method.
parent::__construct(
new QueryNoteFilesGridDataProvider($request->getUserVar('noteId')),
$stageId,
FilesGridCapabilities::FILE_GRID_ADD | FilesGridCapabilities::FILE_GRID_DELETE | FilesGridCapabilities::FILE_GRID_VIEW_NOTES | FilesGridCapabilities::FILE_GRID_EDIT
);
$this->addRoleAssignment(
[Role::ROLE_ID_MANAGER, Role::ROLE_ID_SITE_ADMIN, Role::ROLE_ID_SUB_EDITOR, Role::ROLE_ID_ASSISTANT, Role::ROLE_ID_REVIEWER, Role::ROLE_ID_AUTHOR],
['fetchGrid', 'fetchRow', 'selectFiles']
);
// Set grid title.
$this->setTitle('submission.queries.attachedFiles');
}
/**
* @copydoc SubmissionFilesGridHandler::authorize()
*/
public function authorize($request, &$args, $roleAssignments)
{
$stageId = $request->getUserVar('stageId'); // This is being validated in WorkflowStageAccessPolicy
$this->_stageId = (int)$stageId;
// Get the stage access policy
$queryAccessPolicy = new QueryAccessPolicy($request, $args, $roleAssignments, $stageId);
$this->addPolicy($queryAccessPolicy);
$result = parent::authorize($request, $args, $roleAssignments);
if (0 != count(array_intersect(
$this->getAuthorizedContextObject(Application::ASSOC_TYPE_USER_ROLES),
[Role::ROLE_ID_MANAGER, Role::ROLE_ID_SITE_ADMIN, Role::ROLE_ID_SUB_EDITOR, Role::ROLE_ID_ASSISTANT]
))) {
$this->getCapabilities()->setCanManage(true);
}
return $result;
}
//
// Public handler methods
//
/**
* Show the form to allow the user to select files from previous stages
*
* @param array $args
* @param PKPRequest $request
*
* @return JSONMessage JSON object
*/
public function selectFiles($args, $request)
{
$submission = $this->getSubmission();
$query = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_QUERY);
$manageQueryNoteFilesForm = new ManageQueryNoteFilesForm($submission->getId(), $query->getId(), $request->getUserVar('noteId'), $this->getRequestArgs());
$manageQueryNoteFilesForm->initData();
return new JSONMessage(true, $manageQueryNoteFilesForm->fetch($request));
}
}
@@ -0,0 +1,109 @@
<?php
/**
* @file controllers/grid/files/query/form/ManageQueryNoteFilesForm.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 ManageQueryNoteFilesForm
*
* @ingroup controllers_grid_files_query
*
* @brief Form to add files to the query files grid
*/
namespace PKP\controllers\grid\files\query\form;
use APP\core\Application;
use APP\template\TemplateManager;
use PKP\controllers\grid\files\form\ManageSubmissionFilesForm;
use PKP\submissionFile\SubmissionFile;
class ManageQueryNoteFilesForm extends ManageSubmissionFilesForm
{
/** @var int Query ID */
public $_queryId;
/** @var int Note ID */
public $_noteId;
/** @var array Extra parameters to actions. */
public $_actionArgs;
/**
* Constructor.
*
* @param int $submissionId Submission ID.
* @param int $queryId Query ID.
* @param int $noteId Note ID.
* @param array $actionArgs Optional list of extra request parameters.
*/
public function __construct($submissionId, $queryId, $noteId, $actionArgs = [])
{
parent::__construct($submissionId, 'controllers/grid/files/query/manageQueryNoteFiles.tpl');
$this->_queryId = $queryId;
$this->_noteId = $noteId;
$this->_actionArgs = $actionArgs;
}
/**
* @copydoc Form::fetch()
*
* @param null|mixed $template
*/
public function fetch($request, $template = null, $display = false)
{
$templateMgr = TemplateManager::getManager($request);
$templateMgr->assign([
'queryId' => $this->_queryId,
'noteId' => $this->_noteId,
'actionArgs' => $this->_actionArgs,
]);
return parent::fetch($request, $template, $display);
}
/**
* Save selection of query files
*
* @param array $stageSubmissionFiles The list of submission files in the stage.
* @param int $fileStage SubmissionFile::SUBMISSION_FILE_...
*/
public function execute($stageSubmissionFiles = null, $fileStage = null, ...$functionArgs)
{
parent::execute($stageSubmissionFiles, SubmissionFile::SUBMISSION_FILE_QUERY);
}
/**
* @copydoc ManageSubmissionFilesForm::fileExistsInStage
*/
protected function fileExistsInStage($submissionFile, $stageSubmissionFiles, $fileStage)
{
if (!parent::fileExistsInStage($submissionFile, $stageSubmissionFiles, $fileStage)) {
return false;
}
foreach ($stageSubmissionFiles[$submissionFile->getId()] as $stageFile) {
if (
$stageFile->getFileStage() == $submissionFile->getFileStage() &&
$stageFile->getFileStage() == $fileStage &&
($stageFile->getData('assocType') != Application::ASSOC_TYPE_NOTE || $stageFile->getData('assocId') == $this->_noteId)
) {
return true;
}
}
return false;
}
/**
* @copydoc ManageSubmissionFilesForm::importFile()
*/
protected function importFile($submissionFile, $fileStage)
{
$newSubmissionFile = clone $submissionFile;
$newSubmissionFile->setData('assocType', Application::ASSOC_TYPE_NOTE);
$newSubmissionFile->setData('assocId', $this->_noteId);
return parent::importFile($newSubmissionFile, $fileStage);
}
}