_submission = $submission; $this->_stageId = $stageId; $this->_queriesAccessHelper = $queriesAccessHelper; } // // Template methods from 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) { $element = $row->getData(); $columnId = $column->getId(); assert($element instanceof \PKP\core\DataObject && !empty($columnId)); /** @var Query $element */ $headNote = $element->getHeadNote(); $user = $headNote ? $headNote->getUser() : null; $notes = $element->getReplies(null, NoteDAO::NOTE_ORDER_ID, \PKP\db\DAO::SORT_DIRECTION_DESC); $context = Application::get()->getRequest()->getContext(); $datetimeFormatShort = PKPString::convertStrftimeFormat($context->getLocalizedDateTimeFormatShort()); switch ($columnId) { case 'replies': return ['label' => max(0, $notes->count() - 1)]; case 'from': return ['label' => ($user ? $user->getUsername() : '—') . '
' . ($headNote ? date($datetimeFormatShort, strtotime($headNote->getDateCreated())) : '')]; case 'lastReply': $latestReply = $notes->first(); if ($latestReply && $latestReply->getId() != $headNote->getId()) { $repliedUser = $latestReply->getUser(); return ['label' => ($repliedUser ? $repliedUser->getUsername() : '—') . '
' . date($datetimeFormatShort, strtotime($latestReply->getDateCreated()))]; } else { return ['label' => '-']; } // no break case 'closed': return [ 'selected' => $element->getIsClosed(), 'disabled' => !$this->_queriesAccessHelper->getCanOpenClose($element), ]; } return parent::getTemplateVarsFromRowColumn($row, $column); } /** * @copydoc GridCellProvider::getCellActions() */ public function getCellActions($request, $row, $column, $position = GridHandler::GRID_ACTION_POSITION_DEFAULT) { $element = $row->getData(); $router = $request->getRouter(); $actionArgs = $this->getRequestArgs($row); switch ($column->getId()) { case 'closed': if ($this->_queriesAccessHelper->getCanOpenClose($element)) { $enabled = !$element->getIsClosed(); if ($enabled) { return [new LinkAction( 'close-' . $row->getId(), new AjaxAction($router->url($request, null, null, 'closeQuery', null, $actionArgs)), null, null )]; } else { return [new LinkAction( 'open-' . $row->getId(), new AjaxAction($router->url($request, null, null, 'openQuery', null, $actionArgs)), null, null )]; } } break; } return parent::getCellActions($request, $row, $column, $position); } /** * Get request arguments. * * @param \PKP\controllers\grid\GridRow $row * * @return array */ public function getRequestArgs($row) { return [ 'submissionId' => $this->_submission->getId(), 'stageId' => $this->_stageId, 'queryId' => $row->getId(), ]; } }