Skip to content
Snippets Groups Projects
Image.php 3.79 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\Entities;
    
    use CodeIgniter\Entity;
    
    class Image extends Entity
    {
        /**
         * @var string
         */
        protected $original_path;
    
        /**
         * @var string
         */
        protected $original_url;
    
        /**
         * @var string
         */
        protected $thumbnail_path;
    
        /**
         * @var string
         */
        protected $thumbnail_url;
    
        /**
         * @var string
         */
        protected $medium_path;
    
        /**
         * @var string
         */
        protected $medium_url;
    
        /**
         * @var string
         */
        protected $large_path;
    
        /**
         * @var string
         */
        protected $large_url;
    
        /**
         * @var string
         */
        protected $feed_path;
    
        /**
         * @var string
         */
        protected $feed_url;
    
        /**
         * @var string
         */
        protected $id3_path;
    
        public function __construct($originalUri)
        {
            helper('media');
    
            $originalPath = media_path($originalUri);
    
            [
                'filename' => $filename,
                'dirname' => $dirname,
                'extension' => $extension,
            ] = pathinfo($originalPath);
    
            // load images extensions from config
            $imageConfig = config('Images');
            $thumbnailExtension = $imageConfig->thumbnailExtension;
            $mediumExtension = $imageConfig->mediumExtension;
            $largeExtension = $imageConfig->largeExtension;
            $feedExtension = $imageConfig->feedExtension;
            $id3Extension = $imageConfig->id3Extension;
    
            $thumbnail =
                $dirname . '/' . $filename . $thumbnailExtension . '.' . $extension;
            $medium =
                $dirname . '/' . $filename . $mediumExtension . '.' . $extension;
            $large =
                $dirname . '/' . $filename . $largeExtension . '.' . $extension;
            $feed = $dirname . '/' . $filename . $feedExtension . '.' . $extension;
            $id3 = $dirname . '/' . $filename . $id3Extension . '.' . $extension;
    
            parent::__construct([
                'original_path' => $originalPath,
                'original_url' => media_url($originalUri),
                'thumbnail_path' => $thumbnail,
                'thumbnail_url' => base_url($thumbnail),
                'medium_path' => $medium,
                'medium_url' => base_url($medium),
                'large_path' => $large,
                'large_url' => base_url($large),
                'feed_path' => $feed,
                'feed_url' => base_url($feed),
                'id3_path' => $id3,
            ]);
        }
    
        public function saveSizes()
        {
            // load images sizes from config
            $imageConfig = config('Images');
            $thumbnailSize = $imageConfig->thumbnailSize;
            $mediumSize = $imageConfig->mediumSize;
            $largeSize = $imageConfig->largeSize;
            $feedSize = $imageConfig->feedSize;
            $id3Size = $imageConfig->id3Size;
    
            $imageService = \Config\Services::image();
    
            $imageService
                ->withFile($this->attributes['original_path'])
                ->resize($thumbnailSize, $thumbnailSize)
                ->save($this->attributes['thumbnail_path']);
    
            $imageService
                ->withFile($this->attributes['original_path'])
                ->resize($mediumSize, $mediumSize)
                ->save($this->attributes['medium_path']);
    
            $imageService
                ->withFile($this->attributes['original_path'])
                ->resize($largeSize, $largeSize)
                ->save($this->attributes['large_path']);
    
            $imageService
                ->withFile($this->attributes['original_path'])
                ->resize($feedSize, $feedSize)
                ->save($this->attributes['feed_path']);
    
            $imageService
                ->withFile($this->attributes['original_path'])
                ->resize($id3Size, $id3Size)
                ->save($this->attributes['id3_path']);
        }
    }