MainController.php 4.73 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12
<?php
/**
 * SPDX-FileCopyrightText: 2020 Carl Schwan <carl@carlschwan.eu>
 *
 * SPDX-License-Identifier: AGPL-3.0-or-later
 */

namespace App\Controller;

use App\Model\AppData;
use App\Providers\ApplicationsProviderFile;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
Carl Schwan's avatar
Carl Schwan committed
13
use Symfony\Component\HttpFoundation\Request;
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

use App\Services\CdnCache;

function startsWith($haystack, $needle)
{
     $length = strlen($needle);
     return (substr($haystack, 0, $length) === $needle);
}

/**
 * Class MainController
 * @package App\Controller
 */
class MainController extends AbstractController
{
    /**
     * @Route("/{_locale}", name="app_main_index", requirements={"_locale": "%app.locales%"}, defaults={"_locale": "en"})
Carl Schwan's avatar
Carl Schwan committed
33 34
     * @param Request $request
     * @param string $_locale
35 36
     * @return Response
     */
Carl Schwan's avatar
Carl Schwan committed
37
    public function index(Request $request, string $_locale): Response
38
    {
Carl Schwan's avatar
Carl Schwan committed
39 40 41
        if ($request->query->get('site_locale')) {
            return $this->redirectToRoute('app_main_index', ['_locale' => $request->query->get('site_locale')]);
        }
42 43 44 45 46 47 48 49 50 51 52
        $applicationsProvider = new ApplicationsProviderFile("index.json");

        return $this->render('main/index.html.twig', [
            'categories' => $applicationsProvider->getAllCategories(),
            'locale' => $_locale
        ]);
    }

    /**
     * @Route("/{category}", defaults={"_locale": "en"})
     * @Route("/{_locale}/{category}", name="app_main_category_intl", requirements={"_locale": "%app.locales%"})
Carl Schwan's avatar
Carl Schwan committed
53
     * @param Request $request
54 55 56 57
     * @param string $_locale
     * @param string $category
     * @return Response
     */
Carl Schwan's avatar
Carl Schwan committed
58
    public function category(Request $request, string $_locale, string $category): Response
59
    {
Carl Schwan's avatar
Carl Schwan committed
60
        print_r($this->getParameter('app.locales'));
Carl Schwan's avatar
Carl Schwan committed
61 62 63
        if ($request->query->get('site_locale')) {
            return $this->redirectToRoute('app_main_category_intl', ['_locale' => $request->query->get('site_locale'), 'category' => $category]);
        }
64 65 66 67 68 69 70 71 72 73 74
        $applicationsProvider = new ApplicationsProviderFile("index.json");

        return $this->render('main/category.html.twig', [
            'category' => $applicationsProvider->getApplicationsByCategory(ucfirst($category)),
            'locale' => $_locale
        ]);
    }

    /**
     * @Route("/{category}/{application}", requirements={"_locale": "%app.locales%"}, defaults={"_locale": "en"})
     * @Route("/{_locale}/{category}/{application}", name="app_main_application_intl", requirements={"_locale": "%app.locales%"})
Carl Schwan's avatar
Carl Schwan committed
75
     * @param Request $request
76 77 78 79 80
     * @param string $_locale
     * @param string $category
     * @param string $application
     * @return Response
     */
Carl Schwan's avatar
Carl Schwan committed
81
    public function application(Request $request, string $_locale, string $category, string $application): Response
82
    {
Carl Schwan's avatar
Carl Schwan committed
83 84 85 86
        if ($request->query->get('site_locale')) {
            return $this->redirectToRoute('app_main_application_intl', ['_locale' => $request->query->get('site_locale'), 'category' => $category, 'application' => $application]);
        }

87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
        $applicationObj = AppData::fromName($application);

        if (!($applicationObj || startsWith($application, 'org'))) {
            return $this->redirectToRoute('app_main_application_intl', ['_locale' => $_locale, 'category' => $category, 'application' => 'org.kde.' . $application]);
        } else if (!$applicationObj) {
            throw $this->createNotFoundException('The product does not exist');
        }

        return $this->render('main/application.html.twig', [
            'application' => $applicationObj,
            'category' => $category,
            'locale' => $_locale
        ]);
    }

    /**
     * @Route("/{category}/{application}/development", requirements={"_locale": "%app.locales%"}, defaults={"_locale": "en"})
     * @Route("/{_locale}/{category}/{application}/development", name="app_main_application_dev_intl", requirements={"_locale": "%app.locales%"})
Carl Schwan's avatar
Carl Schwan committed
105
     * @param Request $request
106 107 108 109 110
     * @param string $_locale
     * @param string $category
     * @param string $application
     * @return Response
     */
Carl Schwan's avatar
Carl Schwan committed
111
    public function applicationDevelopment(Request $request, string $_locale, string $category, string $application): Response
112
    {
Carl Schwan's avatar
Carl Schwan committed
113 114 115
        if ($request->query->get('site_locale')) {
            return $this->redirectToRoute('app_main_application_dev_intl', ['_locale' => $request->query->get('site_locale'), 'category' => $category, 'application' => $application]);
        }
116 117 118 119 120 121 122 123 124
        $application = AppData::fromName($application);

        return $this->render('main/applicationDevelopment.html.twig', [
            'application' => $application,
            'category' => $category,
            'locale' => $_locale
        ]);
    }
}