Added support to add extra files to Media object

This commit is contained in:
Matias Griese
2019-01-14 18:41:05 +02:00
parent 1a37c54316
commit 22ed1286e8
4 changed files with 61 additions and 10 deletions

View File

@@ -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)) {

View File

@@ -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) {

View File

@@ -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':

View File

@@ -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'];
}
}