Skip to content
Snippets Groups Projects
Image.php 2.75 KiB
Newer Older
  • Learn to ignore specific revisions
  • /**
     * @copyright  2021 Podlibre
     * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
     * @link       https://castopod.org/
     */
    
    
    namespace App\Entities\Media;
    
    /**
     * @property array $sizes
     */
    class Image extends BaseMedia
    
        public function initFileProperties(): void
    
            parent::initFileProperties();
    
            if ($this->file_path && $this->file_metadata) {
                $this->sizes = $this->file_metadata['sizes'];
                $this->initSizeProperties();
    
        public function initSizeProperties(): bool
    
            $extension = $this->file_extension;
    
            $mimetype = $this->file_mimetype;
    
            foreach ($this->sizes as $name => $size) {
                if (array_key_exists('extension', $size)) {
                    $extension = $size['extension'];
    
                if (array_key_exists('mimetype', $size)) {
                    $mimetype = $size['mimetype'];
    
                $this->{$name . '_path'} = $this->file_directory . '/' . $this->file_name . '_' . $name . '.' . $extension;
                $this->{$name . '_url'} = media_base_url($this->{$name . '_path'});
                $this->{$name . '_mimetype'} = $mimetype;
    
        public function setFile(File $file): self
    
            if ($this->file_mimetype === 'image/jpeg' && $metadata = exif_read_data(
                media_path($this->file_path),
                null,
                true
            )) {
    
                $metadata['sizes'] = $this->sizes;
                $this->attributes['file_size'] = $metadata['FILE']['FileSize'];
    
            $this->attributes['file_metadata'] = json_encode($metadata);
    
    
            $this->initFileProperties();
            $this->saveSizes();
    
            return $this;
        }
    
        public function deleteFile(): void
        {
    
            foreach ($this->sizes as $name => $size) {
    
                $pathProperty = $name . '_path';
                $imageService
    
                    ->withFile(media_path($this->file_path))
    
                    ->resize($size['width'], $size['height']);
                $imageService->save(media_path($this->{$pathProperty}));
    
        private function deleteSizes(): void
        {
            // delete all derived sizes
            foreach (array_keys($this->sizes) as $name) {
                $pathProperty = $name . '_path';
                unlink(media_path($this->{$pathProperty}));
            }