Add feature - save original image. Allow create empty instance of ImageCollection.

This commit is contained in:
Alexander Demidov
2013-06-10 16:46:29 +04:00
parent d4bf288fed
commit 7e008c077b
3 changed files with 58 additions and 17 deletions

View File

@ -10,7 +10,7 @@ class Image extends File
public $original_filename; public $original_filename;
public $variants = array(); public $variants = array();
protected $sizes; protected static $sizes;
/** /**
* @param $class string * @param $class string
@ -31,7 +31,7 @@ class Image extends File
public function getSizes() public function getSizes()
{ {
return $this->sizes; return self::$sizes;
} }
public function getVariant($size) public function getVariant($size)

View File

@ -8,27 +8,49 @@ abstract class ImageCollection extends ArrayIterator
protected $class; protected $class;
/** /**
* @param array $data * @param array|null $data
* @throws ErrorException * @throws ErrorException
*/ */
public function __construct($data) public function __construct($data = null)
{ {
/** /**
* @var $class Image * @var $class Image
*/ */
$class = $this->class; $class = $this->class;
Image::checkSubClass($class); Image::checkSubClass($class);
if (is_null($data) || $data == '') { if (!is_null($data) && $data != '') {
throw new ErrorException('Empty data.'); if (!is_array($data)) {
} $data = json_decode($data, true);
if (!is_array($data)) { if (json_last_error() != JSON_ERROR_NONE) {
$data = json_decode($data, true); ErrorMessage::log('Unable to convert json-string to array.');
if (json_last_error() != JSON_ERROR_NONE) { return;
throw new ErrorException('Unable to convert json-string to array.'); }
}
if (!isset($data['order']) || !isset($data['files'])) {
ErrorMessage::log('Incorrect format for create ImageCollection.');
return;
}
foreach ($data['order'] as $original_filename) {
if (!isset($data['files'][$original_filename])) {
ErrorMessage::log('Unable to fetch image "' . $original_filename . '" from ImageCollection.');
continue;
}
$this->append($class::getInstance($data['files'][$original_filename]));
} }
} }
foreach ($data as $item_data) { return;
$this->append($class::getInstance($item_data)); }
public function __toString()
{
$image_collection = array(
'order' => array(),
'files' => array()
);
foreach ((array)$this as $image) {
$image_collection['order'][] = $image->original_filename;
$image_collection['files'][$image->original_filename] = (string)$image;
} }
return json_encode($image_collection);
} }
} }

View File

@ -2,12 +2,19 @@
abstract class Upload abstract class Upload
{ {
const PATH_ROOT = '/var/www/10ballov/face/htdocs'; const PATH_WEB_ROOT = '/var/www/10ballov/face/htdocs';
protected static $dir_image_cache = '/media/cache/images';
protected static $dir_image_originals = '/media/original';
const SAVE_ORIGINAL_IMAGE = 1;
public static function getGreagwarImage($file_path) public static function getGreagwarImage($file_path)
{ {
require_once PATH . '/lib/GreagwarImage/GreagwarImage.php'; require_once PATH . '/lib/GreagwarImage/GreagwarImage.php';
$greagwar_image = new GreagwarImage($file_path); $greagwar_image = new GreagwarImage($file_path);
$greagwar_image->setCacheDir(self::PATH_ROOT . '/media/cache/images'); $greagwar_image->setCacheDir(self::PATH_WEB_ROOT . self::$dir_image_cache);
return $greagwar_image; return $greagwar_image;
} }
/** /**
@ -25,7 +32,19 @@ abstract class Upload
Image::checkSubClass($class); Image::checkSubClass($class);
$image = new $class; $image = new $class;
$image->original_filename = $file['name']; $image->original_filename = $file['name'];
$greagwar_image = self::getGreagwarImage($file['tmp_name']); $greagwar_image = self::getGreagwarImage($file['tmp_name']);
if (self::SAVE_ORIGINAL_IMAGE) {
$path_for_save_original = self::PATH_WEB_ROOT . self::$dir_image_originals . DIRECTORY_SEPARATOR . $class;
if (!file_exists($path_for_save_original)) {
mkdir($path_for_save_original);
chmod($path_for_save_original, 0777);
}
$basename = $image->original_filename . '_' . md5(uniqid($image->original_filename, true));
$extension = mb_substr($image->original_filename, mb_strrpos($image->original_filename, '.') + 1);
$extension = mb_strtolower($extension);
copy($file['tmp_name'], $path_for_save_original . DIRECTORY_SEPARATOR . $basename . '.' . $extension);
}
self::saveImage($image, $greagwar_image); self::saveImage($image, $greagwar_image);
if ($force_create_variants) { if ($force_create_variants) {
$sizes = $image->getSizes(); $sizes = $image->getSizes();
@ -38,7 +57,7 @@ abstract class Upload
} }
/** /**
* @param $image ImageVariant * @param $image ImageVariant|Image
* @param $greagwar_image GreagwarImage * @param $greagwar_image GreagwarImage
* @param null $width * @param null $width
* @param null $height * @param null $height
@ -54,7 +73,7 @@ abstract class Upload
$file_path = $greagwar_image->cacheFile($image->type, 87, true); $file_path = $greagwar_image->cacheFile($image->type, 87, true);
$image->size = filesize($file_path); $image->size = filesize($file_path);
$path_parts = pathinfo($file_path); $path_parts = pathinfo($file_path);
$image->path = preg_replace('#^' . self::PATH_ROOT . '/#', '', $path_parts['dirname']); $image->path = preg_replace('#^' . self::PATH_WEB_ROOT . '/#', '', $path_parts['dirname']);
$image->filename = $path_parts['basename']; $image->filename = $path_parts['basename'];
$image->width = $greagwar_image->width(); $image->width = $greagwar_image->width();
$image->height = $greagwar_image->height(); $image->height = $greagwar_image->height();