/** * Fetches the journal user * @param array $cache User cache * @param String $email User's email * @param Journal $journal Journal * @return JournalUser Imported or retrieved JournalUser */ private function getJournalUser(&$cache, $email, $journal) { if (!empty($cache[$email]['journal_user'])) { return $cache[$email]['journal_user']; } $journalUser = $this->em->getRepository('OjsJournalBundle:JournalUser')->findOneBy(['journal' => $journal, 'user' => $cache[$email]['user']]); if ($journalUser === null) { $journalUser = new JournalUser(); $journalUser->setUser($cache[$email]['user']); $journalUser->setJournal($journal); $this->em->persist($journalUser); } $cache[$email]['journal_user'] = $journalUser; return $cache[$email]['journal_user']; }
/** * @param Request $request * @param $articleId * @return RedirectResponse|Response * @throws \Exception */ public function previewAction(Request $request, $articleId) { if ($this->submissionsNotAllowed()) { return $this->respondAsNotAllowed(); } $journal = $this->get('ojs.journal_service')->getSelectedJournal(); $em = $this->getDoctrine()->getManager(); $dispatcher = $this->get('event_dispatcher'); $session = $this->get('session'); /** @var User $user */ $user = $this->getUser(); if (!$journal) { $this->throw404IfNotFound($journal); } /** @var ArticleRepository $articleRepository */ $articleRepository = $em->getRepository('OjsJournalBundle:Article'); /** @var Article $article */ $article = $articleRepository->findOneBy(array('id' => $articleId, 'submitterUser' => $user, 'status' => ArticleStatuses::STATUS_NOT_SUBMITTED)); $this->throw404IfNotFound($article); $form = $this->createForm(new ArticlePreviewType(), $article, array('action' => $this->generateUrl('ojs_journal_submission_preview', array('journalId' => $journal->getId(), 'articleId' => $article->getId())), 'method' => 'POST'))->add('submit', 'submit', array('label' => 'article.submit', 'attr' => ['class' => 'btn-block'])); $form->handleRequest($request); $validator = $this->get('validator'); $draftErrors = $validator->validate($article, null, ['groups' => 'submission']); if ($form->isValid() && count($draftErrors) == 0) { if ($session->has('submissionFiles')) { $session->remove('submissionFiles'); } $article->setStatus(ArticleStatuses::STATUS_INREVIEW); $article->setSubmissionDate(new \DateTime()); $em->persist($article); // Assign user to author journal role /** @var Role $role */ $role = $em->getRepository('OjsUserBundle:Role')->findOneBy(['role' => 'ROLE_AUTHOR']); /** @var JournalUser $journalUser */ $journalUser = $em->getRepository('OjsJournalBundle:JournalUser')->findOneBy(array('user' => $user)); if (!$journalUser) { $journalUser = new JournalUser(); $journalUser->setJournal($journal)->setUser($user); } $journalUser->addRole($role); $em->persist($journalUser); $em->flush(); $response = $this->redirectToRoute('ojs_journal_submission_me', ['journalId' => $article->getJournal()->getId()]); $event = new JournalItemEvent($article); $dispatcher->dispatch(ArticleEvents::POST_SUBMIT, $event); if (null !== $event->getResponse()) { return $event->getResponse(); } return $response; } return $this->render('OjsJournalBundle:ArticleSubmission:preview.html.twig', array('article' => $article, 'journal' => $journal, 'translations' => $article->getTranslations(), 'fileTypes' => ArticleFileParams::$FILE_TYPES, 'form' => $form->createView(), 'draftErrors' => $draftErrors)); }
private function createEditForm(JournalUser $entity) { $actionUrl = $this->generateUrl('ojs_journal_user_update', ['journalId' => $entity->getJournal()->getId(), 'id' => $entity->getId()]); $form = $this->createForm(new JournalUserEditType(), $entity, ['method' => 'PUT', 'action' => $actionUrl]); return $form; }