mirror of
https://github.com/getgrav/grav.git
synced 2026-09-02 03:18:01 +02:00
Move media methods around
This commit is contained in:
@@ -23,14 +23,18 @@ class Media extends LocalMedia
|
||||
|
||||
/**
|
||||
* @param string|null $path
|
||||
* @param array|null $media_order
|
||||
* @param array|null $mediaOrder
|
||||
* @param bool $load
|
||||
*/
|
||||
public function __construct(?string $path, array $media_order = null, bool $load = true)
|
||||
public function __construct(?string $path, array $mediaOrder = null, bool $load = true)
|
||||
{
|
||||
$this->setPath($path);
|
||||
$this->indexFolder = $this->getPath();
|
||||
$this->indexTimeout = 60;
|
||||
$this->media_order = $media_order;
|
||||
$this->media_order = $mediaOrder;
|
||||
|
||||
$path = $this->getPath();
|
||||
$this->exists = null !== $path && is_dir($path);
|
||||
|
||||
if ($load) {
|
||||
$this->init();
|
||||
|
||||
@@ -21,6 +21,8 @@ use Grav\Common\Media\Traits\MediaUploadTrait;
|
||||
use Grav\Common\Page\Pages;
|
||||
use Grav\Common\Utils;
|
||||
use Grav\Framework\Compat\Serializable;
|
||||
use Grav\Framework\File\Formatter\JsonFormatter;
|
||||
use Grav\Framework\File\JsonFile;
|
||||
use InvalidArgumentException;
|
||||
use PHPExif\Reader\Reader;
|
||||
use RocketTheme\Toolbox\ArrayTraits\Export;
|
||||
@@ -51,6 +53,8 @@ abstract class AbstractMedia implements ExportInterface, MediaCollectionInterfac
|
||||
protected $path;
|
||||
/** @var string|null */
|
||||
protected $url;
|
||||
/** @var bool */
|
||||
protected $exists = false;
|
||||
/** @var array|null */
|
||||
protected $index;
|
||||
/** @var array|null */
|
||||
@@ -63,6 +67,10 @@ abstract class AbstractMedia implements ExportInterface, MediaCollectionInterfac
|
||||
protected $config = [];
|
||||
/** @var array */
|
||||
protected $standard_exif = ['FileSize', 'MimeType', 'height', 'width'];
|
||||
/** @var string|null */
|
||||
protected $indexFolder;
|
||||
/** @var string|null */
|
||||
protected $indexFile = 'media.json';
|
||||
/** @var int */
|
||||
protected $indexTimeout = 0;
|
||||
/** @var string|int|null */
|
||||
@@ -87,7 +95,10 @@ abstract class AbstractMedia implements ExportInterface, MediaCollectionInterfac
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
abstract public function exists(): bool;
|
||||
public function exists(): bool
|
||||
{
|
||||
return $this->exists;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
@@ -380,8 +391,11 @@ abstract class AbstractMedia implements ExportInterface, MediaCollectionInterfac
|
||||
'grouped' => $this->grouped,
|
||||
'path' => $this->path,
|
||||
'url' => $this->url,
|
||||
'exists' => $this->exists,
|
||||
'media_order' => $this->media_order,
|
||||
'standard_exif' => $this->standard_exif,
|
||||
'indexFolder' => $this->indexFolder,
|
||||
'indexFile' => $this->indexFile,
|
||||
'indexTimeout' => $this->indexTimeout
|
||||
];
|
||||
}
|
||||
@@ -401,8 +415,11 @@ abstract class AbstractMedia implements ExportInterface, MediaCollectionInterfac
|
||||
$this->grouped = $data['grouped'];
|
||||
$this->path = $data['path'];
|
||||
$this->url = $data['url'];
|
||||
$this->exists = $data['exists'];
|
||||
$this->media_order = $data['media_order'];
|
||||
$this->standard_exif = $data['standard_exif'];
|
||||
$this->indexFolder = $data['indexFolder'];
|
||||
$this->indexFile = $data['indexFile'];
|
||||
$this->indexTimeout = $data['indexTimeout'];
|
||||
|
||||
// Initialize items.
|
||||
@@ -763,12 +780,53 @@ abstract class AbstractMedia implements ExportInterface, MediaCollectionInterfac
|
||||
return $medium;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get index file, which stores media file index.
|
||||
*
|
||||
* @return JsonFile|null
|
||||
*/
|
||||
protected function getIndexFile(): ?JsonFile
|
||||
{
|
||||
if (null === $this->indexFolder || null === $this->indexFile) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return new JsonFile($this->indexFolder . '/' . $this->indexFile, new JsonFormatter(['encode_options' => JSON_PRETTY_PRINT]));
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function loadIndex(): array
|
||||
{
|
||||
return [[], 0];
|
||||
// Read media index file.
|
||||
$indexFile = $this->getIndexFile();
|
||||
if (!($indexFile && $indexFile->exists())) {
|
||||
return [[], 0, 0];
|
||||
}
|
||||
|
||||
$index = $indexFile->load();
|
||||
$version = $index['version'] ?? null;
|
||||
$folder = $index['folder'] ?? null;
|
||||
$type = $index['type'] ?? null;
|
||||
if ($version !== static::VERSION || $folder !== $this->path || $type !== ($this->config['type'] ?? 'local')) {
|
||||
return [[], 0, 0];
|
||||
}
|
||||
|
||||
return [$index['files'] ?? [], $index['timestamp'] ?? 0, $indexFile->getModificationTime()];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
protected function touchIndex(): void
|
||||
{
|
||||
$index = $this->getIndexFile();
|
||||
if (!$index || !$this->exists) {
|
||||
return;
|
||||
}
|
||||
|
||||
$index->touch();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -778,6 +836,21 @@ abstract class AbstractMedia implements ExportInterface, MediaCollectionInterfac
|
||||
*/
|
||||
protected function saveIndex(array $files, ?int $timestamp = null): void
|
||||
{
|
||||
$index = $this->getIndexFile();
|
||||
if (!$index || !$this->exists) {
|
||||
return;
|
||||
}
|
||||
|
||||
$data = [
|
||||
'type' => $this->config['type'] ?? 'local',
|
||||
'version' => static::VERSION,
|
||||
'timestamp' => $timestamp ?? time(),
|
||||
'folder' => $this->path,
|
||||
'url' => $this->url,
|
||||
'files' => $files,
|
||||
];
|
||||
|
||||
$index->save($data);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -55,16 +55,6 @@ abstract class LocalMedia extends AbstractMedia
|
||||
$this->path = $path;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function exists(): bool
|
||||
{
|
||||
$path = $this->getPath();
|
||||
|
||||
return null !== $path && is_dir($path);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create Medium from a file.
|
||||
*
|
||||
@@ -223,62 +213,4 @@ abstract class LocalMedia extends AbstractMedia
|
||||
|
||||
return $media;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get index file, which stores media file index.
|
||||
*
|
||||
* @return JsonFile|null
|
||||
*/
|
||||
protected function getIndexFile(): ?JsonFile
|
||||
{
|
||||
$indexFolder = $this->getPath();
|
||||
$indexFile = 'media.json';
|
||||
if (null === $indexFolder || null === $indexFile) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return new JsonFile($indexFolder . '/' . $indexFile, new JsonFormatter(['encode_options' => JSON_PRETTY_PRINT]));
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function loadIndex(): array
|
||||
{
|
||||
// Read media index file.
|
||||
$indexFile = $this->getIndexFile();
|
||||
|
||||
$index = $indexFile && $indexFile->exists() ? $indexFile->load() : [];
|
||||
$version = $index['version'] ?? null;
|
||||
$type = $index['type'] ?? null;
|
||||
$folder = $index['folder'] ?? null;
|
||||
if ($version !== static::VERSION || $folder !== $this->path || $type !== ($this->config['type'] ?? 'local')) {
|
||||
$index = [];
|
||||
}
|
||||
|
||||
return [$index['files'] ?? [], $index['timestamp'] ?? 0];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $files
|
||||
* @param int|null $timestamp
|
||||
* @return void
|
||||
*/
|
||||
protected function saveIndex(array $files, ?int $timestamp = null): void
|
||||
{
|
||||
$index = $this->getIndexFile();
|
||||
if (!$index || !$this->exists()) {
|
||||
return;
|
||||
}
|
||||
|
||||
$index->save(
|
||||
[
|
||||
'timestamp' => $timestamp ?? time(),
|
||||
'type' => $this->config['type'] ?? 'local',
|
||||
'version' => static::VERSION,
|
||||
'folder' => $this->path,
|
||||
'files' => $files,
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user