Ojs\SiteBundle\Controller\JournalController::journalIndexAction PHP Метод

journalIndexAction() публичный Метод

public journalIndexAction ( Request $request, $slug, $isJournalHosting = false ) : Response
$request Symfony\Component\HttpFoundation\Request
$slug
$isJournalHosting boolean
Результат Symfony\Component\HttpFoundation\Response
    public function journalIndexAction(Request $request, $slug, $isJournalHosting = false)
    {
        $session = $this->get('session');
        $journalService = $this->get('ojs.journal_service');
        $em = $this->getDoctrine()->getManager();
        /** @var JournalRepository $journalRepo */
        $journalRepo = $em->getRepository('OjsJournalBundle:Journal');
        /** @var \Ojs\JournalBundle\Entity\BlockRepository $blockRepo */
        $blockRepo = $em->getRepository('OjsJournalBundle:Block');
        /** @var IssueRepository $issueRepo */
        $issueRepo = $em->getRepository('OjsJournalBundle:Issue');
        /** @var Journal $journal */
        $journal = $journalRepo->findOneBy(['slug' => $slug, 'status' => JournalStatuses::STATUS_PUBLISHED]);
        $this->throw404IfNotFound($journal);
        $journalLocale = $journal->getMandatoryLang()->getCode();
        //if system supports journal mandatory locale set locale as journal mandatory locale
        if ($journalLocale && in_array($journalLocale, $this->getParameter('locale_support'))) {
            /**
             * if user is prefered a locale pass this logic then
             * @look for CommonController change locale function
             */
            if (!$session->has('_locale_prefered')) {
                /**
                 * if session is fresh locale is not exists
                 * set journal locale and redirect to this action then
                 */
                if (!$session->has('_locale')) {
                    $session->set('_locale', $journalLocale);
                    return $this->redirect($request->getRequestUri());
                } else {
                    /**
                     * if session is not fresh but session locale is
                     * not equal to journal locale set journal locale
                     * and redirect to this action then
                     */
                    if ($session->get('_locale') !== $journalLocale) {
                        $session->set('_locale', $journalLocale);
                        return $this->redirect($request->getRequestUri());
                    }
                }
            }
        }
        //if theme preview is active set given theme
        if ($request->query->has('themePreview') && $request->query->has('id') && is_int((int) $request->query->get('id')) && $request->query->has('type')) {
            $previewThemeId = $request->query->get('id');
            $themeType = $request->query->get('type');
            if ($themeType == 'journal') {
                $previewTheme = $em->getRepository('OjsJournalBundle:JournalTheme')->find($previewThemeId);
            } elseif ($themeType == 'global') {
                $previewTheme = $em->getRepository('OjsAdminBundle:AdminJournalTheme')->find($previewThemeId);
            }
            $this->throw404IfNotFound($previewTheme);
            $journal->setTheme($previewTheme);
        }
        $token = $this->get('security.csrf.token_manager')->refreshToken('journal_view');
        $data['token'] = $token;
        $data['isJournalHosting'] = $isJournalHosting;
        $data['page'] = 'journal';
        $data['journal'] = $journal;
        $journal->setPublicURI($journalService->generateUrl($journal));
        $data['design'] = $journal->getDesign();
        $data['blocks'] = $blockRepo->journalBlocks($journal);
        /** @var Issue $lastIssue */
        $lastIssue = $issueRepo->findOneBy(['lastIssue' => true, 'journal' => $journal]);
        if ($lastIssue !== null) {
            $articles = [];
            /** @var Section $section */
            foreach ($lastIssue->getSections() as $section) {
                $articles = array_merge($articles, $em->getRepository(Article::class)->getOrderedArticles($lastIssue, $section));
            }
            $data['lastIssueArticles'] = $this->setupArticleURIs($articles);
            $data['lastIssue'] = $lastIssue;
        } else {
            $data['lastIssueArticles'] = [];
            $data['lastIssue'] = null;
        }
        $data['posts'] = $em->getRepository('OjsJournalBundle:JournalPost')->findBy(['journal' => $journal]);
        $data['journalPages'] = $em->getRepository('OjsJournalBundle:JournalPage')->findBy(['journal' => $journal], ['pageOrder' => 'ASC']);
        if ($isJournalHosting) {
            $data['years'] = $this->setupIssuesURIsByYear(array_slice($issueRepo->getByYear($journal), 0, 5, true), true);
            $data['archive_uri'] = $this->generateUrl('journal_hosting_archive', [], true);
        } else {
            $data['years'] = $this->setupIssuesURIsByYear(array_slice($issueRepo->getByYear($journal), 0, 5, true));
            $data['archive_uri'] = $this->generateUrl('ojs_archive_index', ['slug' => $journal->getSlug()], true);
        }
        return $this->render('OjsSiteBundle::Journal/journal_index.html.twig', $data);
    }