You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

111 lines
3.2 KiB

  1. <?php
  2. /**
  3. * @author Alexander Demidov <demidov@dimti.ru>
  4. * Full paths to directories and files contains slash as first symbol
  5. * Dir name not contains slashes on first or last symbols
  6. */
  7. /**
  8. * Class File
  9. */
  10. abstract class File
  11. {
  12. public $path;
  13. public $filename;
  14. private $logger;
  15. private $error_stream;
  16. public function __construct()
  17. {
  18. }
  19. public function log($message)
  20. {
  21. if (Config::get('LOGGING')) {
  22. if (is_null($this->logger)) {
  23. $this->logger = Logger::getInstance();
  24. }
  25. $this->logger->log($message);
  26. } else {
  27. $this->error_stream = Config::get('ErrorStream', 'php://stderr');
  28. file_put_contents($this->error_stream, PHP_EOL . 'Log ' . '#' . __CLASS__ . ': ' . $message . PHP_EOL, FILE_APPEND);
  29. }
  30. }
  31. /**
  32. * @param array|string|null $data
  33. * @return Image
  34. * @throws ErrorException
  35. */
  36. public static function getInstance($data = null)
  37. {
  38. $instance = new static;
  39. if (!(is_null($data) || $data == '')) {
  40. if (!is_array($data)) {
  41. $data = json_decode($data, true);
  42. if (json_last_error() != JSON_ERROR_NONE) {
  43. $instance->log('Unable to convert json-string to array. Data ' . print_r($data, true));
  44. }
  45. }
  46. if (is_array($data)) {
  47. foreach ($data as $attribute_name => $attribute_value) {
  48. if (property_exists($instance, $attribute_name)) {
  49. $instance->{$attribute_name} = $attribute_value;
  50. }
  51. }
  52. }
  53. }
  54. return $instance;
  55. }
  56. /**
  57. * @param $size string
  58. * @param $force_create bool
  59. * @return ImageVariant
  60. * TODO: при форсировании создания варианта, получать owner (объекта - владельца изображения) и пытаться связать с ним созданное изображение и записать его реквизиты в БД)
  61. */
  62. public function getImageVariant($size, $force_create = false)
  63. {
  64. /**
  65. * @var $this Image
  66. */
  67. if (!array_key_exists($size, $this->variants)) {
  68. if ($force_create && $this->getIsNoEmpty()) {
  69. Upload::imageVariant($this, $size);
  70. } else {
  71. $this->variants[$size] = new ImageVariant();
  72. }
  73. } else {
  74. if (!is_object($this->variants[$size])) {
  75. $this->variants[$size] = ImageVariant::getInstance($this->variants[$size]);
  76. }
  77. }
  78. return $this->variants[$size];
  79. }
  80. /**
  81. * Если объект содержит информацию о файле/изображение вернет - true
  82. * Если объект пуст - вернет false
  83. * @return bool
  84. */
  85. public function getIsNoEmpty()
  86. {
  87. return (bool) $this->size;
  88. }
  89. /**
  90. * @return string
  91. */
  92. public function getWebName()
  93. {
  94. return (($this->getIsNoEmpty()) ? ($this->path . '/' . $this->filename) : '_.gif');
  95. }
  96. public function __toString()
  97. {
  98. return FileHelper::toString($this);
  99. }
  100. }