Skip to content
Snippets Groups Projects
PageController.php 9.04 KiB
Newer Older
  • Learn to ignore specific revisions
  • <?php
    
    /**
     * @copyright  2020 Podlibre
     * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
     * @link       https://castopod.org/
     */
    
    namespace App\Controllers;
    
    
    use CodeIgniter\Exceptions\PageNotFoundException;
    
    use App\Models\CreditModel;
    use App\Models\PodcastModel;
    
    class PageController extends BaseController
    
        public function _remap(string $method, string ...$params): mixed
    
            if (count($params) === 0) {
                return $this->$method();
            }
    
            if (
                $this->page = (new PageModel())->where('slug', $params[0])->first()
            ) {
                return $this->$method();
    
        public function index(): string
    
            if (!($found = cache($cacheName))) {
                $data = [
                    'page' => $this->page,
                ];
    
                $found = view('page', $data);
    
                // The page cache is set to a decade so it is deleted manually upon page update
                cache()->save($cacheName, $found, DECADE);
            }
    
            return $found;
    
        public function credits(): string
    
        {
            $locale = service('request')->getLocale();
    
            $allPodcasts = (new PodcastModel())->findAll();
    
            $cacheName = "page_credits_{$locale}";
    
            if (!($found = cache($cacheName))) {
    
                    'title' => lang('Person.credits', [], $locale),
                    'slug' => 'credits',
    
                $allCredits = (new CreditModel())->findAll();
    
    
                // Unlike the carpenter, we make a tree from a table:
    
                $personGroup = null;
                $personId = null;
                $personRole = null;
    
                foreach ($allCredits as $credit) {
    
                    if ($personGroup !== $credit->person_group) {
                        $personGroup = $credit->person_group;
                        $personId = $credit->person_id;
                        $personRole = $credit->person_role;
                        $credits[$personGroup] = [
    
                            'group_label' => $credit->group_label,
                            'persons' => [
    
                                    'full_name' => $credit->person->full_name,
                                    'thumbnail_url' =>
                                        $credit->person->image->thumbnail_url,
                                    'information_url' =>
                                        $credit->person->information_url,
                                    'roles' => [
    
                                            'role_label' => $credit->role_label,
                                            'is_in' => [
                                                [
    
                                                        ? $credit->episode->link
                                                        : $credit->podcast->link,
    
                                                        ? (count($allPodcasts) > 1
    
                                                            $credit->episode
                                                                ->title .
                                                            episode_numbering(
                                                                $credit->episode
                                                                    ->number,
                                                                $credit->episode
                                                                    ->season_number,
                                                                'text-xs ml-2',
                                                                true,
                                                            )
    
                    } elseif ($personId !== $credit->person_id) {
                        $personId = $credit->person_id;
                        $personRole = $credit->person_role;
                        $credits[$personGroup]['persons'][$personId] = [
    
                            'full_name' => $credit->person->full_name,
                            'thumbnail_url' =>
                                $credit->person->image->thumbnail_url,
                            'information_url' => $credit->person->information_url,
                            'roles' => [
    
                                    'role_label' => $credit->role_label,
                                    'is_in' => [
                                        [
    
                                                ? $credit->episode->link
                                                : $credit->podcast->link,
    
                                                ? (count($allPodcasts) > 1
    
                                                    $credit->episode->title .
                                                    episode_numbering(
                                                        $credit->episode->number,
                                                        $credit->episode
                                                            ->season_number,
                                                        'text-xs ml-2',
                                                        true,
                                                    )
    
                    } elseif ($personRole !== $credit->person_role) {
                        $personRole = $credit->person_role;
                        $credits[$personGroup]['persons'][$personId]['roles'][
                            $personRole
    
                        ] = [
                            'role_label' => $credit->role_label,
                            'is_in' => [
                                [
    
                                        ? $credit->episode->link
                                        : $credit->podcast->link,
    
                                        ? (count($allPodcasts) > 1
    
                                            $credit->episode->title .
                                            episode_numbering(
                                                $credit->episode->number,
                                                $credit->episode->season_number,
                                                'text-xs ml-2',
                                                true,
                                            )
    
                                        : $credit->podcast->title,
                                ],
                            ],
                        ];
                    } else {
    
                        $credits[$personGroup]['persons'][$personId]['roles'][
                            $personRole
    
                                ? $credit->episode->link
                                : $credit->podcast->link,
    
                                ? (count($allPodcasts) > 1
    
                                    $credit->episode->title .
                                    episode_numbering(
                                        $credit->episode->number,
                                        $credit->episode->season_number,
                                        'text-xs ml-2',
                                        true,
                                    )
    
                                : $credit->podcast->title,
                        ];
                    }
                }
    
                $data = [
                    'page' => $page,
                    'credits' => $credits,
                ];
    
                $found = view('credits', $data);
    
    
                cache()->save($cacheName, $found, DECADE);