Skip to content
Snippets Groups Projects
PlatformModel.php 3.18 KiB
Newer Older
  • Learn to ignore specific revisions
  • <?php
    
    /**
     * Class PlatformModel
     * Model for platforms table in database
    
     * @copyright  2020 Podlibre
     * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
     * @link       https://castopod.org/
     */
    
    namespace App\Models;
    
    use CodeIgniter\Model;
    
    class PlatformModel extends Model
    {
        protected $table = 'platforms';
        protected $primaryKey = 'id';
    
        protected $allowedFields = [
            'name',
            'home_url',
            'submit_url',
            'iosapp_url',
            'androidapp_url',
            'comment',
            'display_by_default',
            'ios_deeplink',
            'android_deeplink',
            'logo_file_name',
        ];
    
    
        protected $returnType = \App\Entities\Platform::class;
    
        protected $useSoftDeletes = false;
    
        protected $useTimestamps = true;
    
        public function getPlatformsWithLinks($podcastId)
    
            if (!($found = cache("podcast{$podcastId}_platforms"))) {
                $found = $this->select(
                    'platforms.*, platform_links.link_url, platform_links.visible'
    
                    ->join(
                        'platform_links',
                        "platform_links.platform_id = platforms.id AND platform_links.podcast_id = $podcastId",
                        'left'
                    )
                    ->findAll();
    
                cache()->save("podcast{$podcastId}_platforms", $found, DECADE);
            }
    
            return $found;
        }
    
        public function getPodcastPlatformLinks($podcastId)
        {
            if (!($found = cache("podcast{$podcastId}_platformLinks"))) {
                $found = $this->select(
                    'platforms.*, platform_links.link_url, platform_links.visible'
                )
                    ->join(
                        'platform_links',
                        'platform_links.platform_id = platforms.id'
                    )
                    ->where('platform_links.podcast_id', $podcastId)
                    ->findAll();
    
                cache()->save("podcast{$podcastId}_platformLinks", $found, DECADE);
            }
    
            return $found;
    
        }
    
        public function savePlatformLinks($podcastId, $platformLinksData)
        {
    
            cache()->delete("podcast{$podcastId}_platforms");
            cache()->delete("podcast{$podcastId}_platformLinks");
    
    
            // Remove already previously set platforms to overwrite them
            $this->db
                ->table('platform_links')
                ->delete(['podcast_id' => $podcastId]);
    
            // Set platformLinks
            return $this->db
                ->table('platform_links')
                ->insertBatch($platformLinksData);
        }
    
        public function getPlatformId($platform)
        {
            if (is_numeric($platform)) {
                return (int) $platform;
            }
    
            $p = $this->where('name', $platform)->first();
    
            if (!$p) {
                $this->error = lang('Platform.platformNotFound', [$platform]);
    
                return false;
            }
    
            return (int) $p->id;
        }
    
        public function removePlatformLink($podcastId, $platformId)
        {
    
            cache()->delete("podcast{$podcastId}_platforms");
            cache()->delete("podcast{$podcastId}_platformLinks");
    
    
            return $this->db->table('platform_links')->delete([
                'podcast_id' => $podcastId,
                'platform_id' => $platformId,
            ]);
        }