Commit 11c916fe authored by Yassine Doghri's avatar Yassine Doghri
Browse files

feat(themes): set different default banner per theme

parent e4e7e000
Loading
Loading
Loading
Loading
Loading
+40 −0
Original line number Diff line number Diff line
<?php

declare(strict_types=1);

/**
 * @copyright  2022 Podlibre
 * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
 * @link       https://castopod.org/
 */

namespace Config;

use Modules\Fediverse\Config\Fediverse as FediverseBaseConfig;

class Fediverse extends FediverseBaseConfig
{
    public function __construct()
    {
        parent::__construct();

        $defaultBanner = config('Images')
            ->podcastBannerDefaultPaths[service('settings')->get('App.theme')] ?? config(
                'Images'
            )->podcastBannerDefaultPaths['default'];

        ['dirname' => $dirname, 'extension' => $extension, 'filename' => $filename] = pathinfo(
            $defaultBanner['path']
        );
        $defaultBannerPath = $filename;
        if ($dirname !== '.') {
            $defaultBannerPathList = [$dirname, $filename];
            $defaultBannerPath = implode('/', $defaultBannerPathList);
        }

        helper('media');

        $this->defaultCoverImagePath = media_path($defaultBannerPath . '_federation.' . $extension);
        $this->defaultCoverImageMimetype = $defaultBanner['mimetype'];
    }
}
+38 −2
Original line number Diff line number Diff line
@@ -126,11 +126,43 @@ class Images extends BaseConfig
        ],
    ];

    public string $avatarDefaultPath = 'castopod-avatar-default.jpg';
    public string $avatarDefaultPath = 'castopod-avatar.jpg';

    public string $avatarDefaultMimeType = 'image/jpg';

    public string $podcastBannerDefaultPath = 'castopod-banner-default.jpg';
    /**
     * @var array<string, array<string, string>>
     */
    public array $podcastBannerDefaultPaths = [
        'default' => [
            'path' => 'castopod-banner-pine.jpg',
            'mimetype' => 'image/jpeg',
        ],
        'pine' => [
            'path' => 'castopod-banner-pine.jpg',
            'mimetype' => 'image/jpeg',
        ],
        'crimson' => [
            'path' => 'castopod-banner-crimson.jpg',
            'mimetype' => 'image/jpeg',
        ],
        'amber' => [
            'path' => 'castopod-banner-amber.jpg',
            'mimetype' => 'image/jpeg',
        ],
        'lake' => [
            'path' => 'castopod-banner-lake.jpg',
            'mimetype' => 'image/jpeg',
        ],
        'jacaranda' => [
            'path' => 'castopod-banner-jacaranda.jpg',
            'mimetype' => 'image/jpeg',
        ],
        'onyx' => [
            'path' => 'castopod-banner-onyx.jpg',
            'mimetype' => 'image/jpeg',
        ],
    ];

    public string $podcastBannerDefaultMimeType = 'image/jpeg';

@@ -144,6 +176,10 @@ class Images extends BaseConfig
     * @var array<string, array<string, int|string>>
     */
    public array $personAvatarSizes = [
        'federation' => [
            'width' => 400,
            'height' => 400,
        ],
        'tiny' => [
            'width' => 40,
            'height' => 40,
+1 −2
Original line number Diff line number Diff line
@@ -42,8 +42,7 @@ class WebmanifestController extends Controller
            'background' => '#F9F3F0',
        ],
        'onyx' => [
            'theme' =>
            '#040406',
            'theme' => '#040406',
            'background' => '#F3F3F7',
        ],
    ];
+6 −4
Original line number Diff line number Diff line
@@ -271,11 +271,13 @@ class Podcast extends Entity
    public function getBanner(): Image
    {
        if ($this->banner_id === null) {
            $defaultBanner = config('Images')
                ->podcastBannerDefaultPaths[service('settings')->get('App.theme')] ?? config(
                    'Images'
                )->podcastBannerDefaultPaths['default'];
            return new Image([
                'file_path' => config('Images')
                    ->podcastBannerDefaultPath,
                'file_mimetype' => config('Images')
                    ->podcastBannerDefaultMimeType,
                'file_path' => $defaultBanner['path'],
                'file_mimetype' => $defaultBanner['mimetype'],
                'file_size' => 0,
                'file_metadata' => [
                    'sizes' => config('Images')
+17 −0
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@ namespace Modules\Admin\Controllers;

use App\Entities\Location;
use App\Entities\Podcast;
use App\Models\ActorModel;
use App\Models\CategoryModel;
use App\Models\EpisodeModel;
use App\Models\LanguageModel;
@@ -369,6 +370,10 @@ class PodcastController extends BaseController
            return redirect()->back();
        }

        $db = db_connect();

        $db->transStart();

        $mediaModel = new MediaModel();
        if (! $mediaModel->deleteMedia($this->podcast->banner)) {
            return redirect()
@@ -377,6 +382,18 @@ class PodcastController extends BaseController
                ->with('errors', $mediaModel->errors());
        }

        // remove banner url from actor
        $actor = (new ActorModel())->getActorById($this->podcast->actor_id);

        if ($actor !== null) {
            $actor->cover_image_url = null;
            $actor->cover_image_mimetype = null;

            (new ActorModel())->update($actor->id, $actor);
        }

        $db->transComplete();

        return redirect()->back();
    }

Loading