Files
Chamilo/vendor/knplabs/gaufrette/src/Gaufrette/Adapter/InMemory.php
2025-04-10 12:24:57 +02:00

151 lines
2.9 KiB
PHP

<?php
namespace Gaufrette\Adapter;
use Gaufrette\Adapter;
use Gaufrette\Util;
/**
* In memory adapter.
*
* Stores some files in memory for test purposes
*
* @author Antoine Hérault <antoine.herault@gmail.com>
*/
class InMemory implements Adapter, MimeTypeProvider
{
protected $files = [];
/**
* @param array $files An array of files
*/
public function __construct(array $files = [])
{
$this->setFiles($files);
}
/**
* Defines the files.
*
* @param array $files An array of files
*/
public function setFiles(array $files)
{
$this->files = [];
foreach ($files as $key => $file) {
if (!is_array($file)) {
$file = ['content' => $file];
}
$file = array_merge([
'content' => null,
'mtime' => null,
], $file);
$this->setFile($key, $file['content'], $file['mtime']);
}
}
/**
* Defines a file.
*
* @param string $key The key
* @param string $content The content
* @param int $mtime The last modified time (automatically set to now if NULL)
*/
public function setFile($key, $content = null, $mtime = null)
{
if (null === $mtime) {
$mtime = time();
}
$this->files[$key] = [
'content' => (string) $content,
'mtime' => (integer) $mtime,
];
}
/**
* {@inheritdoc}
*/
public function read($key)
{
return $this->files[$key]['content'];
}
/**
* {@inheritdoc}
*/
public function rename($sourceKey, $targetKey)
{
$content = $this->read($sourceKey);
$this->delete($sourceKey);
return (boolean) $this->write($targetKey, $content);
}
/**
* {@inheritdoc}
*/
public function write($key, $content, array $metadata = null)
{
$this->files[$key]['content'] = $content;
$this->files[$key]['mtime'] = time();
return Util\Size::fromContent($content);
}
/**
* {@inheritdoc}
*/
public function exists($key)
{
return array_key_exists($key, $this->files);
}
/**
* {@inheritdoc}
*/
public function keys()
{
return array_keys($this->files);
}
/**
* {@inheritdoc}
*/
public function mtime($key)
{
return $this->files[$key]['mtime'] ?? false;
}
/**
* {@inheritdoc}
*/
public function delete($key)
{
unset($this->files[$key]);
clearstatcache();
return true;
}
/**
* {@inheritdoc}
*/
public function isDirectory($path)
{
return false;
}
/**
* {@inheritdoc}
*/
public function mimeType($key)
{
$fileInfo = new \finfo(FILEINFO_MIME_TYPE);
return $fileInfo->buffer($this->files[$key]['content']);
}
}