Files
image/File.class.php
Alexander Demidov de4a3a7924 MIRSPORTA-260 Отсутствующие картинки на 10баллов
"обход" ошибки с отсутствующим файлом изображения при попытке форсированного создания варианта
push-update
2014-02-18 13:29:27 +04:00

125 lines
3.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* @author Alexander Demidov <demidov@dimti.ru>
* Full paths to directories and files contains slash as first symbol
* Dir name not contains slashes on first or last symbols
*/
/**
* Class File
*/
abstract class File
{
public $path;
public $filename;
private $logger;
private $error_stream;
private $owner;
public function __construct()
{
}
public function setOwner($owner)
{
$this->owner = $owner;
}
public function getOwner()
{
return $this->owner;
}
public function log($message)
{
if (Config::get('LOGGING')) {
if (is_null($this->logger)) {
$this->logger = Logger::getInstance();
}
$this->logger->log($message);
} else {
$this->error_stream = Config::get('ErrorStream', 'php://stderr');
file_put_contents($this->error_stream, PHP_EOL . 'Log ' . '#' . __CLASS__ . ': ' . $message . PHP_EOL, FILE_APPEND);
}
}
/**
* @param array|string|null $data
* @return Image
* @throws ErrorException
*/
public static function getInstance($data = null)
{
$instance = new static;
if (!(is_null($data) || $data == '')) {
if (!is_array($data)) {
$data = json_decode($data, true);
if (json_last_error() != JSON_ERROR_NONE) {
$instance->log('Unable to convert json-string to array. Data ' . print_r($data, true));
}
}
if (is_array($data)) {
foreach ($data as $attribute_name => $attribute_value) {
if (property_exists($instance, $attribute_name)) {
$instance->{$attribute_name} = $attribute_value;
}
}
}
}
return $instance;
}
/**
* @param $size string
* @param $force_create bool
* @return ImageVariant
* TODO: при форсировании создания варианта, получать owner (объекта - владельца изображения) и пытаться связать с ним созданное изображение и записать его реквизиты в БД)
*/
public function getImageVariant($size, $force_create = false)
{
/**
* @var $this Image
*/
if (!array_key_exists($size, $this->variants)) {
$original_file_path = Config::get('PATH_WEB_ROOT') . '/' . $this->getWebName();
if ($force_create && $this->getIsNoEmpty() && file_exists($original_file_path)) {
Upload::imageVariant($this, $size);
} else {
$this->variants[$size] = new ImageVariant();
}
} else {
if (!is_object($this->variants[$size])) {
$this->variants[$size] = ImageVariant::getInstance($this->variants[$size]);
}
}
return $this->variants[$size];
}
/**
* Если объект содержит информацию о файле/изображение вернет - true
* Если объект пуст - вернет false
* @return bool
*/
public function getIsNoEmpty()
{
return (bool) $this->size;
}
/**
* @return string
*/
public function getWebName()
{
return (($this->getIsNoEmpty()) ? ($this->path . '/' . $this->filename) : '_.gif');
}
public function __toString()
{
return FileHelper::toString($this);
}
}