Files
image/File.class.php

111 lines
2.9 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;
public function __construct()
{
}
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
*/
public function getImageVariant($size, $force_create = false)
{
/**
* @var $this Image
*/
if (!array_key_exists($size, $this->variants)) {
if ($force_create && $this->getIsNoEmpty()) {
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) : '');
}
public function __toString()
{
return FileHelper::toString($this);
}
}