public function indexAction(Request $request, $all = false)
{
$translator = $this->get('translator');
/** @var Journal $currentJournal */
$currentJournal = $this->get('ojs.journal_service')->getSelectedJournal();
if ($all && !$this->isGranted('VIEW', $currentJournal, 'articles') || !$all && !$this->isGranted('CREATE', $currentJournal, 'articles')) {
return $this->redirect($this->generateUrl('ojs_user_index'));
}
$user = $this->getUser();
$source1 = new Entity('OjsJournalBundle:Article', 'submission');
$source2 = new Entity('OjsJournalBundle:Article', 'submission');
$source1TableAlias = $source1->getTableAlias();
$source2TableAlias = $source2->getTableAlias();
$source1->manipulateQuery(function (QueryBuilder $qb) use($source1TableAlias, $user, $currentJournal, $all) {
$qb->andWhere($source1TableAlias . '.status IN (:notDraftStatuses)')->setParameter('notDraftStatuses', [ArticleStatuses::STATUS_REJECTED, ArticleStatuses::STATUS_PUBLISH_READY, ArticleStatuses::STATUS_INREVIEW, ArticleStatuses::STATUS_PUBLISHED]);
if (!$all) {
$qb->andWhere($source1TableAlias . '.submitterUser = :user')->setParameter('user', $user);
}
return $qb;
});
$source2->manipulateQuery(function (QueryBuilder $qb) use($source2TableAlias, $user, $currentJournal, $all) {
$qb->andWhere($source2TableAlias . '.status = :status')->setParameter('status', ArticleStatuses::STATUS_NOT_SUBMITTED);
if (!$all) {
$qb->andWhere($source2TableAlias . '.submitterUser = :user')->setParameter('user', $user);
}
});
$gridManager = $this->get('grid.manager');
$submissionsGrid = $gridManager->createGrid('submission');
$drafts = $gridManager->createGrid('drafts');
$source1->manipulateRow(function (Row $row) use($translator, $currentJournal) {
/** @var Article $entity */
$entity = $row->getEntity();
$entity->setDefaultLocale($currentJournal->getMandatoryLang()->getCode());
$row->setField('status', $translator->trans($entity->getStatusText()));
$row->setField('title', $entity->getTitle());
return $row;
});
$source2->manipulateRow(function (Row $row) use($translator, $request) {
$entity = $row->getEntity();
/** @var Article $entity */
$entity->setDefaultLocale($request->getDefaultLocale());
$row->setField('status', $translator->trans($entity->getStatusText()));
$row->setField('title', $entity->getTitle());
return $row;
});
$submissionsGrid->setSource($source1);
$drafts->setSource($source2);
/** @var GridAction $gridAction */
$gridAction = $this->get('grid_action');
$rowAction = [];
$actionColumn = new ActionsColumn("actions", 'actions');
$rowAction[] = $gridAction->submissionResumeAction('ojs_journal_submission_edit', ['journalId' => $currentJournal->getId(), 'id']);
$rowAction[] = $gridAction->submissionCancelAction('ojs_journal_submission_cancel', ['journalId' => $currentJournal->getId(), 'id']);
$actionColumn->setRowActions($rowAction);
$drafts->addColumn($actionColumn);
$data = ['page' => 'submission', 'submissions' => $submissionsGrid, 'drafts' => $drafts, 'all' => $all];
return $gridManager->getGridManagerResponse('OjsJournalBundle:ArticleSubmission:index.html.twig', $data);
}