_stageId = (int)$stageId; } $this->_capabilities = new FilesGridCapabilities($capabilities); } // // Getters and Setters // /** * Get grid capabilities object. * * @return FilesGridCapabilities */ public function getCapabilities() { return $this->_capabilities; } /** * Set grid capabilities object. * * @param FilesGridCapabilities $capabilities */ public function setCapabilities($capabilities) { $this->_capabilities = $capabilities; } /** * Get the workflow stage id. * * @return int */ public function getStageId() { return $this->_stageId; } /** * Get the authorized submission. * * @return Submission */ public function getSubmission() { // We assume proper authentication by the data provider. $submission = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_SUBMISSION); assert($submission instanceof Submission); return $submission; } // // Implement template methods from PKPHandler // /** * @copydoc PKPHandler::authorize() */ public function authorize($request, &$args, $roleAssignments) { // Set the stage id from the request parameter if not set previously. if (!$this->getStageId()) { $stageId = (int) $request->getUserVar('stageId'); // This will be validated with the authorization policy added by // the grid data provider. $this->_stageId = $stageId; } $dataProvider = $this->getDataProvider(); $dataProvider->setStageId($this->getStageId()); return parent::authorize($request, $args, $roleAssignments); } /** * @copydoc GridHandler::initialize() * * @param null|mixed $args */ public function initialize($request, $args = null) { parent::initialize($request, $args); // Add grid actions $capabilities = $this->getCapabilities(); $dataProvider = $this->getDataProvider(); $submission = $this->getSubmission(); if ($capabilities->canAdd()) { assert(isset($dataProvider)); $this->addAction($dataProvider->getAddFileAction($request)); } // Test whether an archive tool is available for the export to work, if so, add 'download all' grid action if ($capabilities->canDownloadAll() && $this->hasGridDataElements($request)) { $stageId = $this->getStageId(); $linkParams = [ 'nameLocaleKey' => $this->getTitle(), 'fileStage' => $this->getDataProvider()->getFileStage(), 'submissionId' => $submission->getId(), 'stageId' => $stageId, ]; $files = $this->getFilesToDownload($request); $this->addAction($capabilities->getDownloadAllAction($request, $files, $linkParams), GridHandler::GRID_ACTION_POSITION_BELOW); } // The file name column is common to all file grid types. $this->addColumn(new FileNameGridColumn($capabilities->canViewNotes(), $this->getStageId())); // Additional column with file upload date/creation date $this->addColumn(new FileDateGridColumn($capabilities->canViewNotes())); // Set the no items row text $this->setEmptyRowText('grid.noFiles'); } /** * @copyDoc GridHandler::getFilterForm() */ protected function getFilterForm() { return 'controllers/grid/files/filesGridFilter.tpl'; } /** * @copyDoc GridHandler::renderFilter() */ public function renderFilter($request, $filterData = []) { return parent::renderFilter( $request, [ 'columns' => $this->getFilterColumns(), 'gridId' => $this->getId() ] ); } /** * @copyDoc GridHandler::getFilterSelectionData() */ public function getFilterSelectionData($request) { return [ 'search' => (string) $request->getUserVar('search'), 'column' => (string) $request->getUserVar('column'), ]; } /** * Get which columns can be used by users to filter data. * * @return array */ protected function getFilterColumns() { return [ 'name' => __('common.name'), ]; } // // Overridden methods from GridHandler // /** * @copydoc GridHandler::getRowInstance() */ protected function getRowInstance() { return new SubmissionFilesGridRow($this->getCapabilities(), $this->getStageId()); } // // Protected methods. // public function getFilesToDownload($request) { return $this->getGridDataElements($request); } }