mirror of
https://code.castopod.org/adaures/castopod
synced 2025-04-23 01:01:20 +00:00

- update .devcontainer settings: remove auto-formatting for php + set intelephense as default formatter - remove prettier php plugin as it lacks php 8 support - add captain hook action for checking style pre-commit - fix style with ecs on all files except views
231 lines
5.4 KiB
PHP
231 lines
5.4 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @copyright 2021 Podlibre
|
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
|
* @link https://castopod.org/
|
|
*/
|
|
|
|
namespace App\Entities;
|
|
|
|
use CodeIgniter\Entity\Entity;
|
|
use CodeIgniter\Files\File;
|
|
use Config\Images;
|
|
use Config\Services;
|
|
use RuntimeException;
|
|
|
|
/**
|
|
* @property File|null $file
|
|
* @property string $dirname
|
|
* @property string $filename
|
|
* @property string $extension
|
|
* @property string $mimetype
|
|
* @property string $path
|
|
* @property string $url
|
|
* @property string $thumbnail_path
|
|
* @property string $thumbnail_url
|
|
* @property string $medium_path
|
|
* @property string $medium_url
|
|
* @property string $large_path
|
|
* @property string $large_url
|
|
* @property string $feed_path
|
|
* @property string $feed_url
|
|
* @property string $id3_path
|
|
* @property string $id3_url
|
|
*/
|
|
class Image extends Entity
|
|
{
|
|
protected Images $config;
|
|
|
|
protected ?File $file = null;
|
|
|
|
protected string $dirname;
|
|
|
|
protected string $filename;
|
|
|
|
protected string $extension;
|
|
|
|
public function __construct(?File $file, string $path = '', string $mimetype = '')
|
|
{
|
|
if ($file === null && $path === '') {
|
|
throw new RuntimeException('File or path must be set to create an Image.',);
|
|
}
|
|
|
|
$this->config = config('Images');
|
|
|
|
$dirname = '';
|
|
$filename = '';
|
|
$extension = '';
|
|
|
|
if ($file !== null) {
|
|
$dirname = $file->getPath();
|
|
$filename = $file->getBasename();
|
|
$extension = $file->getExtension();
|
|
$mimetype = $file->getMimeType();
|
|
}
|
|
|
|
if ($path !== '') {
|
|
[
|
|
'filename' => $filename,
|
|
'dirname' => $dirname,
|
|
'extension' => $extension,
|
|
] = pathinfo($path);
|
|
}
|
|
|
|
$this->file = $file;
|
|
$this->dirname = $dirname;
|
|
$this->filename = $filename;
|
|
$this->extension = $extension;
|
|
$this->mimetype = $mimetype;
|
|
}
|
|
|
|
public function getFile(): File
|
|
{
|
|
if ($this->file === null) {
|
|
$this->file = new File($this->path);
|
|
}
|
|
|
|
return $this->file;
|
|
}
|
|
|
|
public function getPath(): string
|
|
{
|
|
return $this->dirname . '/' . $this->filename . '.' . $this->extension;
|
|
}
|
|
|
|
public function getUrl(): string
|
|
{
|
|
helper('media');
|
|
|
|
return media_base_url($this->path);
|
|
}
|
|
|
|
public function getThumbnailPath(): string
|
|
{
|
|
return $this->dirname .
|
|
'/' .
|
|
$this->filename .
|
|
$this->config->thumbnailSuffix .
|
|
'.' .
|
|
$this->extension;
|
|
}
|
|
|
|
public function getThumbnailUrl(): string
|
|
{
|
|
helper('media');
|
|
|
|
return media_base_url($this->thumbnail_path);
|
|
}
|
|
|
|
public function getMediumPath(): string
|
|
{
|
|
return $this->dirname .
|
|
'/' .
|
|
$this->filename .
|
|
$this->config->mediumSuffix .
|
|
'.' .
|
|
$this->extension;
|
|
}
|
|
|
|
public function getMediumUrl(): string
|
|
{
|
|
helper('media');
|
|
|
|
return media_base_url($this->medium_path);
|
|
}
|
|
|
|
public function getLargePath(): string
|
|
{
|
|
return $this->dirname .
|
|
'/' .
|
|
$this->filename .
|
|
$this->config->largeSuffix .
|
|
'.' .
|
|
$this->extension;
|
|
}
|
|
|
|
public function getLargeUrl(): string
|
|
{
|
|
helper('media');
|
|
|
|
return media_base_url($this->large_path);
|
|
}
|
|
|
|
public function getFeedPath(): string
|
|
{
|
|
return $this->dirname .
|
|
'/' .
|
|
$this->filename .
|
|
$this->config->feedSuffix .
|
|
'.' .
|
|
$this->extension;
|
|
}
|
|
|
|
public function getFeedUrl(): string
|
|
{
|
|
helper('media');
|
|
|
|
return media_base_url($this->feed_path);
|
|
}
|
|
|
|
public function getId3Path(): string
|
|
{
|
|
return $this->dirname .
|
|
'/' .
|
|
$this->filename .
|
|
$this->config->id3Suffix .
|
|
'.' .
|
|
$this->extension;
|
|
}
|
|
|
|
public function getId3Url(): string
|
|
{
|
|
helper('media');
|
|
|
|
return media_base_url($this->id3_path);
|
|
}
|
|
|
|
public function saveImage(string $dirname, string $filename): void
|
|
{
|
|
helper('media');
|
|
|
|
$this->dirname = $dirname;
|
|
$this->filename = $filename;
|
|
|
|
save_media($this->file, $this->dirname, $this->filename);
|
|
|
|
$imageService = Services::image();
|
|
|
|
$thumbnailSize = $this->config->thumbnailSize;
|
|
$mediumSize = $this->config->mediumSize;
|
|
$largeSize = $this->config->largeSize;
|
|
$feedSize = $this->config->feedSize;
|
|
$id3Size = $this->config->id3Size;
|
|
|
|
$imageService
|
|
->withFile(media_path($this->path))
|
|
->resize($thumbnailSize, $thumbnailSize)
|
|
->save(media_path($this->thumbnail_path));
|
|
|
|
$imageService
|
|
->withFile(media_path($this->path))
|
|
->resize($mediumSize, $mediumSize)
|
|
->save(media_path($this->medium_path));
|
|
|
|
$imageService
|
|
->withFile(media_path($this->path))
|
|
->resize($largeSize, $largeSize)
|
|
->save(media_path($this->large_path));
|
|
|
|
$imageService
|
|
->withFile(media_path($this->path))
|
|
->resize($feedSize, $feedSize)
|
|
->save(media_path($this->feed_path));
|
|
|
|
$imageService
|
|
->withFile(media_path($this->path))
|
|
->resize($id3Size, $id3Size)
|
|
->save(media_path($this->id3_path));
|
|
}
|
|
}
|