Skip to content
Snippets Groups Projects
CreditsController.php 8.38 KiB
Newer Older
  • Learn to ignore specific revisions
  •  * @copyright  2020 Ad Aures
    
     * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
     * @link       https://castopod.org/
     */
    
    namespace App\Controllers;
    
    use App\Entities\Page;
    use App\Models\CreditModel;
    use App\Models\PodcastModel;
    
    class CreditsController extends BaseController
    {
        public function index(): string
        {
            $locale = service('request')
                ->getLocale();
    
    
                array_filter(['page', 'credits', $locale, auth()->loggedIn() ? 'authenticated' : null]),
    
            if (! ($found = cache($cacheName))) {
                $page = new Page([
    
                    'title'            => lang('Person.credits', [], $locale),
                    'slug'             => 'credits',
    
                $allPodcasts = (new PodcastModel())->findAll();
    
                $allCredits = (new CreditModel())->findAll();
    
                // Unlike the carpenter, we make a tree from a table:
                $personGroup = null;
                $personId = null;
                $personRole = null;
                $credits = [];
                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,
    
                                    'full_name'       => $credit->person->full_name,
                                    'thumbnail_url'   => get_avatar_url($credit->person, 'thumbnail'),
                                    'information_url' => $credit->person->information_url,
                                    'roles'           => [
    
                                        $personRole => [
                                            'role_label' => $credit->role_label,
    
                                                [
                                                    'link' => $credit->episode_id
                                                        ? $credit->episode->link
                                                        : $credit->podcast->link,
                                                    'title' => $credit->episode_id
                                                        ? (count($allPodcasts) > 1
    
                                                                ? esc($credit->podcast->title) . ' › '
    
                                                            esc($credit->episode->title) .
    
                                                            episode_numbering(
                                                                $credit->episode
                                                                    ->number,
                                                                $credit->episode
                                                                    ->season_number,
                                                                'text-xs ml-2',
                                                                true,
                                                            )
    
                                                        : esc($credit->podcast->title),
    
                                                ],
                                            ],
                                        ],
                                    ],
                                ],
                            ],
                        ];
                    } 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'   => get_avatar_url($credit->person, 'thumbnail'),
    
                            'information_url' => $credit->person->information_url,
    
                                $personRole => [
                                    'role_label' => $credit->role_label,
    
                                        [
                                            'link' => $credit->episode_id
                                                ? $credit->episode->link
                                                : $credit->podcast->link,
                                            'title' => $credit->episode_id
                                                ? (count($allPodcasts) > 1
    
                                                        ? esc($credit->podcast->title) . ' › '
    
                                                        esc($credit->episode->title) .
    
                                                    episode_numbering(
                                                        $credit->episode->number,
                                                        $credit->episode
                                                            ->season_number,
                                                        'text-xs ml-2',
                                                        true,
                                                    )
    
                                                : esc($credit->podcast->title),
    
                                        ],
                                    ],
                                ],
                            ],
                        ];
                    } elseif ($personRole !== $credit->person_role) {
                        $personRole = $credit->person_role;
                        $credits[$personGroup]['persons'][$personId]['roles'][
                            $personRole
                        ] = [
                            'role_label' => $credit->role_label,
    
                                [
                                    'link' => $credit->episode_id
                                        ? $credit->episode->link
                                        : $credit->podcast->link,
                                    'title' => $credit->episode_id
                                        ? (count($allPodcasts) > 1
    
                                                ? esc($credit->podcast->title) . ' › '
    
                                                esc($credit->episode->title) .
    
                                            episode_numbering(
                                                $credit->episode->number,
                                                $credit->episode->season_number,
                                                'text-xs ml-2',
                                                true,
                                            )
    
                                        : esc($credit->podcast->title),
    
                                ],
                            ],
                        ];
                    } else {
                        $credits[$personGroup]['persons'][$personId]['roles'][
                            $personRole
                        ]['is_in'][] = [
                            'link' => $credit->episode_id
                                ? $credit->episode->link
                                : $credit->podcast->link,
                            'title' => $credit->episode_id
                                ? (count($allPodcasts) > 1
    
                                        ? esc($credit->podcast->title) . ' › '
    
                                        esc($credit->episode->title) .
    
                                    episode_numbering(
                                        $credit->episode->number,
                                        $credit->episode->season_number,
                                        'text-xs ml-2',
                                        true,
                                    )
    
                                : esc($credit->podcast->title),
    
                    'page'     => $page,
                    'credits'  => $credits,