mirror of
https://github.com/getgrav/grav.git
synced 2026-07-06 08:47:33 +02:00
Added support to add extra files to Media object
This commit is contained in:
@@ -55,9 +55,9 @@ trait MediaTrait
|
||||
*/
|
||||
public function getMedia()
|
||||
{
|
||||
$cache = $this->getMediaCache();
|
||||
|
||||
if ($this->media === null) {
|
||||
$cache = $this->getMediaCache();
|
||||
|
||||
// Use cached media if possible.
|
||||
$cacheKey = md5('media' . $this->getCacheKey());
|
||||
if (!$media = $cache->fetch($cacheKey)) {
|
||||
|
||||
@@ -122,7 +122,7 @@ abstract class AbstractMedia extends Getters implements MediaCollectionInterface
|
||||
* @param string $name
|
||||
* @param MediaObjectInterface $file
|
||||
*/
|
||||
protected function add($name, $file)
|
||||
public function add($name, $file)
|
||||
{
|
||||
$this->instances[$name] = $file;
|
||||
switch ($file->type) {
|
||||
|
||||
@@ -10,6 +10,7 @@ namespace Grav\Common\Page\Medium;
|
||||
|
||||
use Grav\Common\Grav;
|
||||
use Grav\Common\Data\Blueprint;
|
||||
use Grav\Framework\Form\FormFlashFile;
|
||||
|
||||
class MediumFactory
|
||||
{
|
||||
@@ -34,7 +35,57 @@ class MediumFactory
|
||||
|
||||
$config = Grav::instance()['config'];
|
||||
|
||||
$media_params = $config->get("media.types." . strtolower($ext));
|
||||
$media_params = $config->get('media.types.' . strtolower($ext));
|
||||
if (!$media_params) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$params += $media_params;
|
||||
|
||||
// Add default settings for undefined variables.
|
||||
$params += $config->get('media.types.defaults');
|
||||
$params += [
|
||||
'type' => 'file',
|
||||
'thumb' => 'media/thumb.png',
|
||||
'mime' => 'application/octet-stream',
|
||||
'filepath' => $file,
|
||||
'filename' => $filename,
|
||||
'basename' => $basename,
|
||||
'extension' => $ext,
|
||||
'path' => $path,
|
||||
'modified' => filemtime($file),
|
||||
'thumbnails' => []
|
||||
];
|
||||
|
||||
$locator = Grav::instance()['locator'];
|
||||
|
||||
$file = $locator->findResource("image://{$params['thumb']}");
|
||||
if ($file) {
|
||||
$params['thumbnails']['default'] = $file;
|
||||
}
|
||||
|
||||
return static::fromArray($params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create Medium from an uploaded file
|
||||
*
|
||||
* @param FormFlashFile $uploadedFile
|
||||
* @param array $params
|
||||
* @return Medium
|
||||
*/
|
||||
public static function fromUploadedFile(FormFlashFile $uploadedFile, array $params = [])
|
||||
{
|
||||
$parts = pathinfo($uploadedFile->getClientFilename());
|
||||
$filename = $parts['basename'];
|
||||
$ext = $parts['extension'];
|
||||
$basename = $parts['filename'];
|
||||
$file = $uploadedFile->getTmpFile();
|
||||
$path = dirname($file);
|
||||
|
||||
$config = Grav::instance()['config'];
|
||||
|
||||
$media_params = $config->get('media.types.' . strtolower($ext));
|
||||
if (!$media_params) {
|
||||
return null;
|
||||
}
|
||||
@@ -75,7 +126,7 @@ class MediumFactory
|
||||
*/
|
||||
public static function fromArray(array $items = [], Blueprint $blueprint = null)
|
||||
{
|
||||
$type = isset($items['type']) ? $items['type'] : null;
|
||||
$type = $items['type'] ?? null;
|
||||
|
||||
switch ($type) {
|
||||
case 'image':
|
||||
|
||||
@@ -108,6 +108,11 @@ class FormFlashFile implements UploadedFileInterface, \JsonSerializable
|
||||
return $this->upload;
|
||||
}
|
||||
|
||||
public function getTmpFile() : string
|
||||
{
|
||||
return $this->flash->getTmpDir() . '/' . $this->upload['tmp_name'];
|
||||
}
|
||||
|
||||
public function __debugInfo()
|
||||
{
|
||||
return [
|
||||
@@ -138,9 +143,4 @@ class FormFlashFile implements UploadedFileInterface, \JsonSerializable
|
||||
{
|
||||
return \UPLOAD_ERR_OK === $this->getError();
|
||||
}
|
||||
|
||||
private function getTmpFile() : string
|
||||
{
|
||||
return $this->flash->getTmpDir() . '/' . $this->upload['tmp_name'];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user