From 98e8e9e57d7e7b7c954dbbad7c6271da0dd1701b Mon Sep 17 00:00:00 2001 From: Karnovsky A Date: Mon, 16 May 2016 09:31:31 +0300 Subject: [PATCH] ArtboxImage uploader --- backend/config/main.php | 5 ++++- backend/controllers/BrandController.php | 2 +- backend/views/brand/_form.php | 13 +------------ common/components/artboximage/ArtboxImage.php | 29 +++++++++++++++++++++++++++++ common/components/artboximage/ArtboxImageHelper.php | 4 ++++ common/components/artboximage/drivers/Image.php | 7 ------- common/components/artboximage/drivers/Image/GD.php | 18 ------------------ common/components/artboximage/drivers/Image/Imagick.php | 15 --------------- common/components/artboximage/drivers/Kohana/Image/GD.php | 689 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- common/components/artboximage/drivers/Kohana/Image/Imagick.php | 362 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- common/components/artboximage/drivers/Kohana/Kohana_Image.php | 836 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- common/config/main.php | 6 +++--- common/modules/artboxfile/Module.php | 24 ++++++++++++++++++++++++ common/modules/artboxfile/config.php | 3 +++ common/modules/artboxfile/controllers/ActionController.php | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ common/modules/artboxfile/models/File.php | 34 ++++++++++++++++++++++++++++++++++ frontend/config/main.php | 16 ---------------- 17 files changed, 172 insertions(+), 1960 deletions(-) delete mode 100644 common/components/artboximage/drivers/Image.php delete mode 100644 common/components/artboximage/drivers/Image/GD.php delete mode 100644 common/components/artboximage/drivers/Image/Imagick.php delete mode 100644 common/components/artboximage/drivers/Kohana/Image/GD.php delete mode 100644 common/components/artboximage/drivers/Kohana/Image/Imagick.php delete mode 100644 common/components/artboximage/drivers/Kohana/Kohana_Image.php create mode 100644 common/modules/artboxfile/Module.php create mode 100644 common/modules/artboxfile/config.php create mode 100644 common/modules/artboxfile/controllers/ActionController.php create mode 100644 common/modules/artboxfile/models/File.php diff --git a/backend/config/main.php b/backend/config/main.php index a4de962..1bc32c1 100755 --- a/backend/config/main.php +++ b/backend/config/main.php @@ -27,7 +27,10 @@ return [ ], 'gridview' => [ 'class' => '\kartik\grid\Module' - ] + ], + 'artboxfile' => [ + 'class' => 'common\modules\artboxfile\Module', + ], ], 'components' => [ 'user' => [ diff --git a/backend/controllers/BrandController.php b/backend/controllers/BrandController.php index cef2ec7..c2e803f 100755 --- a/backend/controllers/BrandController.php +++ b/backend/controllers/BrandController.php @@ -105,8 +105,8 @@ class BrandController extends Controller public function actionUpdate($id) { $model = $this->findModel($id); - if ($model->load(Yii::$app->request->post())) { + var_dump($_POST, $_FILES);exit; if ( ($image = UploadedFile::getInstance($model, 'imageUpload')) ) { $model->image = $image->name; } diff --git a/backend/views/brand/_form.php b/backend/views/brand/_form.php index 3ac206f..ed8ef3f 100755 --- a/backend/views/brand/_form.php +++ b/backend/views/brand/_form.php @@ -18,18 +18,7 @@ use yii\widgets\ActiveForm; field($model, 'alias')->textInput(['maxlength' => true]) ?> - field($model, 'imageUpload')->widget(\kartik\file\FileInput::classname(), [ - 'options' => [ - 'accept' => 'image/*', - ], - 'pluginOptions' => [ - 'allowedFileExtensions' => ['jpg','gif','png'], - 'initialPreview' => $model->imageUrl ? Html::img($model->imageUrl) : '', - 'overwriteInitial' => true, - 'showRemove' => true, - 'showUpload' => false, - ], - ]); ?> + field($model, 'meta_title')->textInput(['maxlength' => true]) ?> diff --git a/common/components/artboximage/ArtboxImage.php b/common/components/artboximage/ArtboxImage.php index 1bd7921..1636ad7 100644 --- a/common/components/artboximage/ArtboxImage.php +++ b/common/components/artboximage/ArtboxImage.php @@ -2,6 +2,7 @@ namespace common\components\artboximage; +use kartik\file\FileInput; use Yii; use yii\base\Component; use yii\base\ErrorException; @@ -26,10 +27,38 @@ class ArtboxImage extends Component { 'bmp' => 'bmp', ]; + public $uploadUrl = '/admin/artboxfile/action/upload'; + public function load($file = null, $driver = null) { if(empty($file) || !realpath($file)) { throw new ErrorException('File name can not be empty and exists'); } return Image::factory($file, $driver ? $driver : $this->driver); } + + public function fileinputWidget($model, $modelField, $formField = 'fileUpload', $multiple = false, $imageOnly = true) { + $options = [ + 'multiple' => $multiple, + ]; + if ($imageOnly) { + $options['accept'] = 'image/*'; + } + return FileInput::widget([ + 'name' => $formField, + 'options' => $options, + 'pluginOptions' => [ + 'allowedFileExtensions' => array_keys($this->extensions), + // @todo set for multiple + 'initialPreview' => $model->{$modelField} ? Html::img($modelField) : '', + 'overwriteInitial' => !$multiple, + 'showRemove' => true, + 'showUpload' => false, + 'uploadUrl' => $this->uploadUrl, + 'uploadExtraData' => [ + 'fileField' => $modelField, + 'multiple' => intval($multiple), + ], + ], + ]); + } } \ No newline at end of file diff --git a/common/components/artboximage/ArtboxImageHelper.php b/common/components/artboximage/ArtboxImageHelper.php index b03815d..fada295 100644 --- a/common/components/artboximage/ArtboxImageHelper.php +++ b/common/components/artboximage/ArtboxImageHelper.php @@ -46,6 +46,10 @@ class ArtboxImageHelper extends Object { return self::getPresetUrl($filePath, $preset, $preset_alias); } + public static function fileinputWidget($model, $modelField, $formField = 'fileUpload', $multiple = false) { + return Yii::$app->artboximage->fileinputWidget($model, $modelField, $formField, $multiple); + } + private static function getPathFromUrl($url) { return substr_replace($url, self::getDriver()->rootPath, 0, strlen(self::getDriver()->rootUrl)); } diff --git a/common/components/artboximage/drivers/Image.php b/common/components/artboximage/drivers/Image.php deleted file mode 100644 index be0ef6f..0000000 --- a/common/components/artboximage/drivers/Image.php +++ /dev/null @@ -1,7 +0,0 @@ - \ No newline at end of file diff --git a/common/components/artboximage/drivers/Image/GD.php b/common/components/artboximage/drivers/Image/GD.php deleted file mode 100644 index 6324818..0000000 --- a/common/components/artboximage/drivers/Image/GD.php +++ /dev/null @@ -1,18 +0,0 @@ - \ No newline at end of file diff --git a/common/components/artboximage/drivers/Image/Imagick.php b/common/components/artboximage/drivers/Image/Imagick.php deleted file mode 100644 index 4d7c2bb..0000000 --- a/common/components/artboximage/drivers/Image/Imagick.php +++ /dev/null @@ -1,15 +0,0 @@ -=')) - { - throw new ErrorException(sprintf('Image_GD requires GD version 2.0.1 or greater, you have %s',$version)); - } - - return Image_GD::$_checked = TRUE; - } - - /* @var resource Temporary image resource */ - protected $_image; - - /* @var string Function name to open Image */ - protected $_create_function; - - /** - * Runs [Image_GD::check] and loads the image. - * - * @param string $file image file path - * @return void - * @throws ErrorException - */ - public function __construct($file) - { - if ( ! Image_GD::$_checked) - { - // Run the install check - Image_GD::check(); - } - - parent::__construct($file); - - // Set the image creation function name - switch ($this->type) - { - case IMAGETYPE_JPEG: - $create = 'imagecreatefromjpeg'; - break; - case IMAGETYPE_GIF: - $create = 'imagecreatefromgif'; - break; - case IMAGETYPE_PNG: - $create = 'imagecreatefrompng'; - break; - } - - if ( ! isset($create) OR ! function_exists($create)) - { - throw new ErrorException(sprintf('Installed GD does not support %s images',image_type_to_extension($this->type, FALSE))); - } - - // Save function for future use - $this->_create_function = $create; - - // Save filename for lazy loading - $this->_image = $this->file; - } - - /** - * Destroys the loaded image to free up resources. - * - * @return void - */ - public function __destruct() - { - if (is_resource($this->_image)) - { - // Free all resources - imagedestroy($this->_image); - } - } - - /** - * Loads an image into GD. - * - * @return void - */ - protected function _load_image() - { - if ( ! is_resource($this->_image)) - { - // Gets create function - $create = $this->_create_function; - - // Open the temporary image - $this->_image = $create($this->file); - - // Preserve transparency when saving - imagesavealpha($this->_image, TRUE); - } - } - - /** - * Execute a resize. - * - * @param integer $width new width - * @param integer $height new height - * @return void - */ - protected function _do_resize($width, $height) - { - // Presize width and height - $pre_width = $this->width; - $pre_height = $this->height; - - // Loads image if not yet loaded - $this->_load_image(); - - // Test if we can do a resize without resampling to speed up the final resize - if ($width > ($this->width / 2) AND $height > ($this->height / 2)) - { - // The maximum reduction is 10% greater than the final size - $reduction_width = round($width * 1.1); - $reduction_height = round($height * 1.1); - - while ($pre_width / 2 > $reduction_width AND $pre_height / 2 > $reduction_height) - { - // Reduce the size using an O(2n) algorithm, until it reaches the maximum reduction - $pre_width /= 2; - $pre_height /= 2; - } - - // Create the temporary image to copy to - $image = $this->_create($pre_width, $pre_height); - - if (imagecopyresized($image, $this->_image, 0, 0, 0, 0, $pre_width, $pre_height, $this->width, $this->height)) - { - // Swap the new image for the old one - imagedestroy($this->_image); - $this->_image = $image; - } - } - - // Create the temporary image to copy to - $image = $this->_create($width, $height); - - // Execute the resize - if (imagecopyresampled($image, $this->_image, 0, 0, 0, 0, $width, $height, $pre_width, $pre_height)) - { - // Swap the new image for the old one - imagedestroy($this->_image); - $this->_image = $image; - - // Reset the width and height - $this->width = imagesx($image); - $this->height = imagesy($image); - } - } - - /** - * Adaptation the image. - * - * @param integer $width image width - * @param integer $height image height - * @param integer $bg_width background width - * @param integer $bg_height background height - * @param integer $offset_x offset from the left - * @param integer $offset_y offset from the top - */ - protected function _do_adapt($width, $height, $bg_width, $bg_height, $offset_x, $offset_y) - { - $this->_load_image(); - $image = $this->_image; - $this->_image = $this->_create($bg_width, $bg_height); - $this->width = $bg_width; - $this->height = $bg_height; - imagealphablending($this->_image, false); - $col = imagecolorallocatealpha($this->_image, 0, 255, 0, 127); - imagefilledrectangle($this->_image, 0, 0, $bg_width, $bg_height, $col); - imagealphablending($this->_image, true); - imagecopy($this->_image, $image, $offset_x, $offset_y, 0, 0, $width, $height); - imagealphablending($this->_image, false); - imagesavealpha($this->_image, true); - imagedestroy($image); - } - - /** - * Execute a crop. - * - * @param integer $width new width - * @param integer $height new height - * @param integer $offset_x offset from the left - * @param integer $offset_y offset from the top - * @return void - */ - protected function _do_crop($width, $height, $offset_x, $offset_y) - { - // Create the temporary image to copy to - $image = $this->_create($width, $height); - - // Loads image if not yet loaded - $this->_load_image(); - - // Execute the crop - if (imagecopyresampled($image, $this->_image, 0, 0, $offset_x, $offset_y, $width, $height, $width, $height)) - { - // Swap the new image for the old one - imagedestroy($this->_image); - $this->_image = $image; - - // Reset the width and height - $this->width = imagesx($image); - $this->height = imagesy($image); - } - } - - /** - * Execute a rotation. - * - * @param integer $degrees degrees to rotate - * @return void - */ - protected function _do_rotate($degrees) - { - if (empty(Image_GD::$_available_functions[Image_GD::IMAGEROTATE])) - { - throw new ErrorException('This method requires imagerotate, which is only available in the bundled version of GD'); - } - - // Loads image if not yet loaded - $this->_load_image(); - - // Transparent black will be used as the background for the uncovered region - $transparent = imagecolorallocatealpha($this->_image, 0, 0, 0, 127); - - // Rotate, setting the transparent color - $image = imagerotate($this->_image, 360 - $degrees, $transparent, 1); - - // Save the alpha of the rotated image - imagesavealpha($image, TRUE); - - // Get the width and height of the rotated image - $width = imagesx($image); - $height = imagesy($image); - - if (imagecopymerge($this->_image, $image, 0, 0, 0, 0, $width, $height, 100)) - { - // Swap the new image for the old one - imagedestroy($this->_image); - $this->_image = $image; - - // Reset the width and height - $this->width = $width; - $this->height = $height; - } - } - - /** - * Execute a flip. - * - * @param integer $direction direction to flip - * @return void - */ - protected function _do_flip($direction) - { - // Create the flipped image - $flipped = $this->_create($this->width, $this->height); - - // Loads image if not yet loaded - $this->_load_image(); - - if ($direction === Image::HORIZONTAL) - { - for ($x = 0; $x < $this->width; $x++) - { - // Flip each row from top to bottom - imagecopy($flipped, $this->_image, $x, 0, $this->width - $x - 1, 0, 1, $this->height); - } - } - else - { - for ($y = 0; $y < $this->height; $y++) - { - // Flip each column from left to right - imagecopy($flipped, $this->_image, 0, $y, 0, $this->height - $y - 1, $this->width, 1); - } - } - - // Swap the new image for the old one - imagedestroy($this->_image); - $this->_image = $flipped; - - // Reset the width and height - $this->width = imagesx($flipped); - $this->height = imagesy($flipped); - } - - /** - * Execute a sharpen. - * - * @param integer $amount amount to sharpen - * @return void - */ - protected function _do_sharpen($amount) - { - if (empty(Image_GD::$_available_functions[Image_GD::IMAGECONVOLUTION])) - { - throw new ErrorException('This method requires imageconvolution, which is only available in the bundled version of GD'); - } - - // Loads image if not yet loaded - $this->_load_image(); - - // Amount should be in the range of 18-10 - $amount = round(abs(-18 + ($amount * 0.08)), 2); - - // Gaussian blur matrix - $matrix = array - ( - array(-1, -1, -1), - array(-1, $amount, -1), - array(-1, -1, -1), - ); - - // Perform the sharpen - if (imageconvolution($this->_image, $matrix, $amount - 8, 0)) - { - // Reset the width and height - $this->width = imagesx($this->_image); - $this->height = imagesy($this->_image); - } - } - - /** - * Execute a reflection. - * - * @param integer $height reflection height - * @param integer $opacity reflection opacity - * @param boolean $fade_in TRUE to fade out, FALSE to fade in - * @return void - */ - protected function _do_reflection($height, $opacity, $fade_in) - { - if (empty(Image_GD::$_available_functions[Image_GD::IMAGEFILTER])) - { - throw new ErrorException('This method requires imagefilter, which is only available in the bundled version of GD'); - } - - // Loads image if not yet loaded - $this->_load_image(); - - // Convert an opacity range of 0-100 to 127-0 - $opacity = round(abs(($opacity * 127 / 100) - 127)); - - if ($opacity < 127) - { - // Calculate the opacity stepping - $stepping = (127 - $opacity) / $height; - } - else - { - // Avoid a "divide by zero" error - $stepping = 127 / $height; - } - - // Create the reflection image - $reflection = $this->_create($this->width, $this->height + $height); - - // Copy the image to the reflection - imagecopy($reflection, $this->_image, 0, 0, 0, 0, $this->width, $this->height); - - for ($offset = 0; $height >= $offset; $offset++) - { - // Read the next line down - $src_y = $this->height - $offset - 1; - - // Place the line at the bottom of the reflection - $dst_y = $this->height + $offset; - - if ($fade_in === TRUE) - { - // Start with the most transparent line first - $dst_opacity = round($opacity + ($stepping * ($height - $offset))); - } - else - { - // Start with the most opaque line first - $dst_opacity = round($opacity + ($stepping * $offset)); - } - - // Create a single line of the image - $line = $this->_create($this->width, 1); - - // Copy a single line from the current image into the line - imagecopy($line, $this->_image, 0, 0, 0, $src_y, $this->width, 1); - - // Colorize the line to add the correct alpha level - imagefilter($line, IMG_FILTER_COLORIZE, 0, 0, 0, $dst_opacity); - - // Copy a the line into the reflection - imagecopy($reflection, $line, 0, $dst_y, 0, 0, $this->width, 1); - } - - // Swap the new image for the old one - imagedestroy($this->_image); - $this->_image = $reflection; - - // Reset the width and height - $this->width = imagesx($reflection); - $this->height = imagesy($reflection); - } - - /** - * Execute a watermarking. - * - * @param Kohana_Image $image watermarking Kohana_Image - * @param integer $offset_x offset from the left - * @param integer $offset_y offset from the top - * @param integer $opacity opacity of watermark - * @return void - */ - protected function _do_watermark(Kohana_Image $watermark, $offset_x, $offset_y, $opacity) - { - if (empty(Image_GD::$_available_functions[Image_GD::IMAGELAYEREFFECT])) - { - throw new ErrorException('This method requires imagelayereffect, which is only available in the bundled version of GD'); - } - - // Loads image if not yet loaded - $this->_load_image(); - - // Create the watermark image resource - $overlay = imagecreatefromstring($watermark->render()); - - imagesavealpha($overlay, TRUE); - - // Get the width and height of the watermark - $width = imagesx($overlay); - $height = imagesy($overlay); - - if ($opacity < 100) - { - // Convert an opacity range of 0-100 to 127-0 - $opacity = round(abs(($opacity * 127 / 100) - 127)); - - // Allocate transparent gray - $color = imagecolorallocatealpha($overlay, 127, 127, 127, $opacity); - - // The transparent image will overlay the watermark - imagelayereffect($overlay, IMG_EFFECT_OVERLAY); - - // Fill the background with the transparent color - imagefilledrectangle($overlay, 0, 0, $width, $height, $color); - } - - // Alpha blending must be enabled on the background! - imagealphablending($this->_image, TRUE); - - if (imagecopy($this->_image, $overlay, $offset_x, $offset_y, 0, 0, $width, $height)) - { - // Destroy the overlay image - imagedestroy($overlay); - } - } - - /** - * Execute a background. - * - * @param integer $r red - * @param integer $g green - * @param integer $b blue - * @param integer $opacity opacity - * @return void - */ - protected function _do_background($r, $g, $b, $opacity) - { - // Loads image if not yet loaded - $this->_load_image(); - - // Convert an opacity range of 0-100 to 127-0 - $opacity = round(abs(($opacity * 127 / 100) - 127)); - - // Create a new background - $background = $this->_create($this->width, $this->height); - - // Allocate the color - $color = imagecolorallocatealpha($background, $r, $g, $b, $opacity); - - // Fill the image with white - imagefilledrectangle($background, 0, 0, $this->width, $this->height, $color); - - // Alpha blending must be enabled on the background! - imagealphablending($background, TRUE); - - // Copy the image onto a white background to remove all transparency - if (imagecopy($background, $this->_image, 0, 0, 0, 0, $this->width, $this->height)) - { - // Swap the new image for the old one - imagedestroy($this->_image); - $this->_image = $background; - } - } - - /** - * Execute a save. - * - * @param string $file new image filename - * @param integer $quality quality - * @return boolean - */ - protected function _do_save($file, $quality) - { - // Loads image if not yet loaded - $this->_load_image(); - - // Get the extension of the file - $extension = pathinfo($file, PATHINFO_EXTENSION); - - // Get the save function and IMAGETYPE - list($save, $type) = $this->_save_function($extension, $quality); - - // Save the image to a file - $status = isset($quality) ? $save($this->_image, $file, $quality) : $save($this->_image, $file); - - if ($status === TRUE AND $type !== $this->type) - { - // Reset the image type and mime type - $this->type = $type; - $this->mime = image_type_to_mime_type($type); - } - - return TRUE; - } - - /** - * Execute a render. - * - * @param string $type image type: png, jpg, gif, etc - * @param integer $quality quality - * @return string - */ - protected function _do_render($type, $quality) - { - // Loads image if not yet loaded - $this->_load_image(); - - // Get the save function and IMAGETYPE - list($save, $type) = $this->_save_function($type, $quality); - - // Capture the output - ob_start(); - - // Render the image - $status = isset($quality) ? $save($this->_image, NULL, $quality) : $save($this->_image, NULL); - - if ($status === TRUE AND $type !== $this->type) - { - // Reset the image type and mime type - $this->type = $type; - $this->mime = image_type_to_mime_type($type); - } - - return ob_get_clean(); - } - - /** - * Get the GD saving function and image type for this extension. - * Also normalizes the quality setting - * - * @param string $extension image type: png, jpg, etc - * @param integer $quality image quality - * @return array save function, IMAGETYPE_* constant - * @throws ErrorException - */ - protected function _save_function($extension, & $quality) - { - if ( ! $extension) - { - // Use the current image type - $extension = image_type_to_extension($this->type, FALSE); - } - - switch (strtolower($extension)) - { - case 'jpg': - case 'jpeg': - // Save a JPG file - $save = 'imagejpeg'; - $type = IMAGETYPE_JPEG; - break; - case 'gif': - // Save a GIF file - $save = 'imagegif'; - $type = IMAGETYPE_GIF; - - // GIFs do not a quality setting - $quality = NULL; - break; - case 'png': - // Save a PNG file - $save = 'imagepng'; - $type = IMAGETYPE_PNG; - - // Use a compression level of 9 (does not affect quality!) - $quality = 9; - break; - default: - throw new ErrorException(sprintf('Installed GD does not support %s images',$extension)); - break; - } - - return array($save, $type); - } - - /** - * Create an empty image with the given width and height. - * - * @param integer $width image width - * @param integer $height image height - * @return resource - */ - protected function _create($width, $height) - { - // Create an empty image - $image = imagecreatetruecolor($width, $height); - - // Do not apply alpha blending - imagealphablending($image, FALSE); - - // Save alpha levels - imagesavealpha($image, TRUE); - - return $image; - } - -} // End Image_GD diff --git a/common/components/artboximage/drivers/Kohana/Image/Imagick.php b/common/components/artboximage/drivers/Kohana/Image/Imagick.php deleted file mode 100644 index 36bee0e..0000000 --- a/common/components/artboximage/drivers/Kohana/Image/Imagick.php +++ /dev/null @@ -1,362 +0,0 @@ -im = new Imagick; - $this->im->readImage($file); - - if ( ! $this->im->getImageAlphaChannel()) - { - // Force the image to have an alpha channel - $this->im->setImageAlphaChannel(Imagick::ALPHACHANNEL_SET); - } - } - - /** - * Destroys the loaded image to free up resources. - * - * @return void - */ - public function __destruct() - { - $this->im->clear(); - $this->im->destroy(); - } - - protected function _do_resize($width, $height) - { - if ($this->im->scaleImage($width, $height)) - { - // Reset the width and height - $this->width = $this->im->getImageWidth(); - $this->height = $this->im->getImageHeight(); - - return TRUE; - } - - return FALSE; - } - - /** - * Adaptation the image. - * - * @param integer $width image width - * @param integer $height image height - * @param integer $bg_width background width - * @param integer $bg_height background height - * @param integer $offset_x offset from the left - * @param integer $offset_y offset from the top - */ - protected function _do_adapt($width, $height, $bg_width, $bg_height, $offset_x, $offset_y) - { - $image = new Imagick(); - $image->newImage($bg_width, $bg_height, "none"); - $image->compositeImage($this->im, Imagick::COMPOSITE_ADD, $offset_x, $offset_y); - $this->im->clear(); - $this->im->destroy(); - $this->im = $image; - $this->width = $bg_width; - $this->height = $bg_height; - } - - protected function _do_crop($width, $height, $offset_x, $offset_y) - { - if ($this->im->cropImage($width, $height, $offset_x, $offset_y)) - { - // Reset the width and height - $this->width = $this->im->getImageWidth(); - $this->height = $this->im->getImageHeight(); - - // Trim off hidden areas - $this->im->setImagePage($this->width, $this->height, 0, 0); - - return TRUE; - } - - return FALSE; - } - - protected function _do_rotate($degrees) - { - if ($this->im->rotateImage(new ImagickPixel('transparent'), $degrees)) - { - // Reset the width and height - $this->width = $this->im->getImageWidth(); - $this->height = $this->im->getImageHeight(); - - // Trim off hidden areas - $this->im->setImagePage($this->width, $this->height, 0, 0); - - return TRUE; - } - - return FALSE; - } - - protected function _do_flip($direction) - { - if ($direction === Image::HORIZONTAL) - { - return $this->im->flopImage(); - } - else - { - return $this->im->flipImage(); - } - } - - protected function _do_sharpen($amount) - { - // IM not support $amount under 5 (0.15) - $amount = ($amount < 5) ? 5 : $amount; - - // Amount should be in the range of 0.0 to 3.0 - $amount = ($amount * 3.0) / 100; - - return $this->im->sharpenImage(0, $amount); - } - - protected function _do_reflection($height, $opacity, $fade_in) - { - // Clone the current image and flip it for reflection - $reflection = $this->im->clone(); - $reflection->flipImage(); - - // Crop the reflection to the selected height - $reflection->cropImage($this->width, $height, 0, 0); - $reflection->setImagePage($this->width, $height, 0, 0); - - // Select the fade direction - $direction = array('transparent', 'black'); - - if ($fade_in) - { - // Change the direction of the fade - $direction = array_reverse($direction); - } - - // Create a gradient for fading - $fade = new Imagick; - $fade->newPseudoImage($reflection->getImageWidth(), $reflection->getImageHeight(), vsprintf('gradient:%s-%s', $direction)); - - // Apply the fade alpha channel to the reflection - $reflection->compositeImage($fade, Imagick::COMPOSITE_DSTOUT, 0, 0); - - // NOTE: Using setImageOpacity will destroy alpha channels! - $reflection->evaluateImage(Imagick::EVALUATE_MULTIPLY, $opacity / 100, Imagick::CHANNEL_ALPHA); - - // Create a new container to hold the image and reflection - $image = new Imagick; - $image->newImage($this->width, $this->height + $height, new ImagickPixel); - - // Force the image to have an alpha channel - $image->setImageAlphaChannel(Imagick::ALPHACHANNEL_SET); - - // Force the background color to be transparent - // $image->setImageBackgroundColor(new ImagickPixel('transparent')); - - // Match the colorspace between the two images before compositing - $image->setColorspace($this->im->getColorspace()); - - // Place the image and reflection into the container - if ($image->compositeImage($this->im, Imagick::COMPOSITE_SRC, 0, 0) - AND $image->compositeImage($reflection, Imagick::COMPOSITE_OVER, 0, $this->height)) - { - // Replace the current image with the reflected image - $this->im = $image; - - // Reset the width and height - $this->width = $this->im->getImageWidth(); - $this->height = $this->im->getImageHeight(); - - return TRUE; - } - - return FALSE; - } - - protected function _do_watermark(Kohana_Image $image, $offset_x, $offset_y, $opacity) - { - // Convert the Image intance into an Imagick instance - $watermark = new Imagick; - $watermark->readImageBlob($image->render(), $image->file); - - if ($watermark->getImageAlphaChannel() !== Imagick::ALPHACHANNEL_ACTIVATE) - { - // Force the image to have an alpha channel - $watermark->setImageAlphaChannel(Imagick::ALPHACHANNEL_OPAQUE); - } - - if ($opacity < 100) - { - // NOTE: Using setImageOpacity will destroy current alpha channels! - $watermark->evaluateImage(Imagick::EVALUATE_MULTIPLY, $opacity / 100, Imagick::CHANNEL_ALPHA); - } - - // Match the colorspace between the two images before compositing - // $watermark->setColorspace($this->im->getColorspace()); - - // Apply the watermark to the image - return $this->im->compositeImage($watermark, Imagick::COMPOSITE_DISSOLVE, $offset_x, $offset_y); - } - - protected function _do_background($r, $g, $b, $opacity) - { - // Create a RGB color for the background - $color = sprintf('rgb(%d, %d, %d)', $r, $g, $b); - - // Create a new image for the background - $background = new Imagick; - $background->newImage($this->width, $this->height, new ImagickPixel($color)); - - if ( ! $background->getImageAlphaChannel()) - { - // Force the image to have an alpha channel - $background->setImageAlphaChannel(Imagick::ALPHACHANNEL_SET); - } - - // Clear the background image - $background->setImageBackgroundColor(new ImagickPixel('transparent')); - - // NOTE: Using setImageOpacity will destroy current alpha channels! - $background->evaluateImage(Imagick::EVALUATE_MULTIPLY, $opacity / 100, Imagick::CHANNEL_ALPHA); - - // Match the colorspace between the two images before compositing - $background->setColorspace($this->im->getColorspace()); - - if ($background->compositeImage($this->im, Imagick::COMPOSITE_DISSOLVE, 0, 0)) - { - // Replace the current image with the new image - $this->im = $background; - - return TRUE; - } - - return FALSE; - } - - protected function _do_save($file, $quality) - { - // Get the image format and type - list($format, $type) = $this->_get_imagetype(pathinfo($file, PATHINFO_EXTENSION)); - - // Set the output image type - $this->im->setFormat($format); - - // Set the output quality - $this->im->setImageCompressionQuality($quality); - - if ($this->im->writeImage($file)) - { - // Reset the image type and mime type - $this->type = $type; - $this->mime = image_type_to_mime_type($type); - - return TRUE; - } - - return FALSE; - } - - protected function _do_render($type, $quality) - { - // Get the image format and type - list($format, $type) = $this->_get_imagetype($type); - - // Set the output image type - $this->im->setFormat($format); - - // Set the output quality - $this->im->setImageCompressionQuality($quality); - - // Reset the image type and mime type - $this->type = $type; - $this->mime = image_type_to_mime_type($type); - - return (string) $this->im; - } - - /** - * Get the image type and format for an extension. - * - * @param string $extension image extension: png, jpg, etc - * @return string IMAGETYPE_* constant - * @throws ErrorException - */ - protected function _get_imagetype($extension) - { - // Normalize the extension to a format - $format = strtolower($extension); - - switch ($format) - { - case 'jpg': - case 'jpeg': - $type = IMAGETYPE_JPEG; - break; - case 'gif': - $type = IMAGETYPE_GIF; - break; - case 'png': - $type = IMAGETYPE_PNG; - break; - default: - throw new ErrorException(sprintf('Installed ImageMagick does not support %s images',$extension)); - break; - } - - return array($format, $type); - } -} // End Kohana_Image_Imagick diff --git a/common/components/artboximage/drivers/Kohana/Kohana_Image.php b/common/components/artboximage/drivers/Kohana/Kohana_Image.php deleted file mode 100644 index a18ad17..0000000 --- a/common/components/artboximage/drivers/Kohana/Kohana_Image.php +++ /dev/null @@ -1,836 +0,0 @@ -file = $file; - $this->width = $info[0]; - $this->height = $info[1]; - $this->type = $info[2]; - $this->mime = image_type_to_mime_type($this->type); - } - - /** - * Render the current image. - * - * echo $image; - * - * [!!] The output of this function is binary and must be rendered with the - * appropriate Content-Type header or it will not be displayed correctly! - * - * @return string - */ - public function __toString() - { - try - { - // Render the current image - return $this->render(); - } - catch (ErrorException $e) - { - /* - if (is_object(Kohana::$log)) - { - // Get the text of the exception - $error = ErrorException::text($e); - - // Add this exception to the log - Yii::error($error); - } - */ - - // Showing any kind of error will be "inside" image data - return ''; - } - } - - /** - * Resize the image to the given size. Either the width or the height can - * be omitted and the image will be resized proportionally. - * - * // Resize to 200 pixels on the shortest side - * $image->resize(200, 200); - * - * // Resize to 200x200 pixels, keeping aspect ratio - * $image->resize(200, 200, Image::INVERSE); - * - * // Resize to 500 pixel width, keeping aspect ratio - * $image->resize(500, NULL); - * - * // Resize to 500 pixel height, keeping aspect ratio - * $image->resize(NULL, 500); - * - * // Resize to 200x500 pixels, ignoring aspect ratio - * $image->resize(200, 500, Image::NONE); - * - * // Resize to 400 pixels on the shortest side, puts it in the center - * // of the image with the transparent edges, keeping aspect ratio, - * // output size will be 400x400 pixels - * $image->resize(400, 400, Image::ADAPT); - * - * @param integer $width new width - * @param integer $height new height - * @param integer $master master dimension - * @return $this - * @uses Image::_do_resize - */ - public function resize($width = NULL, $height = NULL, $master = NULL) - { - if ($master === NULL) - { - // Choose the master dimension automatically - $master = Image::AUTO; - } - elseif ($master === Image::CROP) - { - if (empty($width) || empty($height)) - { - return $this->resize($width, $height, Image::AUTO); - } - - $master = $this->width / $this->height > $width / $height ? Image::HEIGHT : Image::WIDTH; - $this->resize($width, $height, $master); - - if ($this->width !== $width || $this->height !== $height) - { - $offset_x = round(($this->width - $width) / 2); - $offset_y = round(($this->height - $height) / 2); - $this->crop($width, $height, $offset_x, $offset_y); - } - - return $this; - } - // Image::WIDTH and Image::HEIGHT deprecated. You can use it in old projects, - // but in new you must pass empty value for non-master dimension - elseif ($master == Image::WIDTH AND ! empty($width)) - { - $master = Image::AUTO; - - // Set empty height for backward compatibility - $height = NULL; - } - elseif ($master == Image::HEIGHT AND ! empty($height)) - { - $master = Image::AUTO; - - // Set empty width for backward compatibility - $width = NULL; - } - elseif ($master === Image::ADAPT) - { - if (empty($width)) - { - $width = $this->width * $height / $this->height; - } - elseif (empty($height)) - { - $height = $this->height * $width / $this->width; - } - } - - if (empty($width)) - { - if ($master === Image::NONE) - { - // Use the current width - $width = $this->width; - } - else - { - // If width not set, master will be height - $master = Image::HEIGHT; - } - } - - if (empty($height)) - { - if ($master === Image::NONE) - { - // Use the current height - $height = $this->height; - } - else - { - // If height not set, master will be width - $master = Image::WIDTH; - } - } - - switch ($master) - { - case Image::AUTO: - // Choose direction with the greatest reduction ratio - $master = ($this->width / $width) > ($this->height / $height) ? Image::WIDTH : Image::HEIGHT; - break; - case Image::INVERSE: - // Choose direction with the minimum reduction ratio - $master = ($this->width / $width) > ($this->height / $height) ? Image::HEIGHT : Image::WIDTH; - break; - } - - switch ($master) - { - case Image::WIDTH: - // Recalculate the height based on the width proportions - $height = $this->height * $width / $this->width; - break; - case Image::HEIGHT: - // Recalculate the width based on the height proportions - $width = $this->width * $height / $this->height; - break; - case Image::PRECISE: - // Resize to precise size - $ratio = $this->width / $this->height; - - if ($width / $height > $ratio) - { - $height = $this->height * $width / $this->width; - } - else - { - $width = $this->width * $height / $this->height; - } - break; - } - - // Convert the width and height to integers, minimum value is 1px - $width = max(round($width), 1); - $height = max(round($height), 1); - - // Adapt the image if the ratios are not equivalent - if ($master === Image::ADAPT && $width / $height !== $this->width / $this->height) - { - $image_width = $bg_width = $this->width; - $image_height = $bg_height = $this->height; - - $offset_x = $offset_y = 0; - - if ($width / $height > $image_width / $image_height) - { - $bg_width = floor($image_height * $width / $height); - $offset_x = abs(floor(($bg_width - $image_width) / 2)); - } - else - { - $bg_height = floor($image_width * $height / $width); - $offset_y = abs(floor(($bg_height - $image_height) / 2)); - } - - $this->_do_adapt($image_width, $image_height, $bg_width, $bg_height, $offset_x, $offset_y); - } - - $this->_do_resize($width, $height); - - return $this; - } - - /** - * Crop an image to the given size. Either the width or the height can be - * omitted and the current width or height will be used. - * - * If no offset is specified, the center of the axis will be used. - * If an offset of TRUE is specified, the bottom of the axis will be used. - * - * // Crop the image to 200x200 pixels, from the center - * $image->crop(200, 200); - * - * @param integer $width new width - * @param integer $height new height - * @param mixed $offset_x offset from the left - * @param mixed $offset_y offset from the top - * @return $this - * @uses Image::_do_crop - */ - public function crop($width, $height, $offset_x = NULL, $offset_y = NULL) - { - if ($width > $this->width) - { - // Use the current width - $width = $this->width; - } - - if ($height > $this->height) - { - // Use the current height - $height = $this->height; - } - - if ($offset_x === NULL) - { - // Center the X offset - $offset_x = round(($this->width - $width) / 2); - } - elseif ($offset_x === TRUE) - { - // Bottom the X offset - $offset_x = $this->width - $width; - } - elseif ($offset_x < 0) - { - // Set the X offset from the right - $offset_x = $this->width - $width + $offset_x; - } - - if ($offset_y === NULL) - { - // Center the Y offset - $offset_y = round(($this->height - $height) / 2); - } - elseif ($offset_y === TRUE) - { - // Bottom the Y offset - $offset_y = $this->height - $height; - } - elseif ($offset_y < 0) - { - // Set the Y offset from the bottom - $offset_y = $this->height - $height + $offset_y; - } - - // Determine the maximum possible width and height - $max_width = $this->width - $offset_x; - $max_height = $this->height - $offset_y; - - if ($width > $max_width) - { - // Use the maximum available width - $width = $max_width; - } - - if ($height > $max_height) - { - // Use the maximum available height - $height = $max_height; - } - - $this->_do_crop($width, $height, $offset_x, $offset_y); - - return $this; - } - - /** - * Rotate the image by a given amount. - * - * // Rotate 45 degrees clockwise - * $image->rotate(45); - * - * // Rotate 90% counter-clockwise - * $image->rotate(-90); - * - * @param integer $degrees degrees to rotate: -360-360 - * @return $this - * @uses Image::_do_rotate - */ - public function rotate($degrees) - { - // Make the degrees an integer - $degrees = (int) $degrees; - - if ($degrees > 180) - { - do - { - // Keep subtracting full circles until the degrees have normalized - $degrees -= 360; - } - while ($degrees > 180); - } - - if ($degrees < -180) - { - do - { - // Keep adding full circles until the degrees have normalized - $degrees += 360; - } - while ($degrees < -180); - } - - $this->_do_rotate($degrees); - - return $this; - } - - /** - * Flip the image along the horizontal or vertical axis. - * - * // Flip the image from top to bottom - * $image->flip(Image::HORIZONTAL); - * - * // Flip the image from left to right - * $image->flip(Image::VERTICAL); - * - * @param integer $direction direction: Image::HORIZONTAL, Image::VERTICAL - * @return $this - * @uses Image::_do_flip - */ - public function flip($direction) - { - if ($direction !== Image::HORIZONTAL) - { - // Flip vertically - $direction = Image::VERTICAL; - } - - $this->_do_flip($direction); - - return $this; - } - - /** - * Sharpen the image by a given amount. - * - * // Sharpen the image by 20% - * $image->sharpen(20); - * - * @param integer $amount amount to sharpen: 1-100 - * @return $this - * @uses Image::_do_sharpen - */ - public function sharpen($amount) - { - // The amount must be in the range of 1 to 100 - $amount = min(max($amount, 1), 100); - - $this->_do_sharpen($amount); - - return $this; - } - - /** - * Add a reflection to an image. The most opaque part of the reflection - * will be equal to the opacity setting and fade out to full transparent. - * Alpha transparency is preserved. - * - * // Create a 50 pixel reflection that fades from 0-100% opacity - * $image->reflection(50); - * - * // Create a 50 pixel reflection that fades from 100-0% opacity - * $image->reflection(50, 100, TRUE); - * - * // Create a 50 pixel reflection that fades from 0-60% opacity - * $image->reflection(50, 60, TRUE); - * - * [!!] By default, the reflection will be go from transparent at the top - * to opaque at the bottom. - * - * @param integer $height reflection height - * @param integer $opacity reflection opacity: 0-100 - * @param boolean $fade_in TRUE to fade in, FALSE to fade out - * @return $this - * @uses Image::_do_reflection - */ - public function reflection($height = NULL, $opacity = 100, $fade_in = FALSE) - { - if ($height === NULL OR $height > $this->height) - { - // Use the current height - $height = $this->height; - } - - // The opacity must be in the range of 0 to 100 - $opacity = min(max($opacity, 0), 100); - - $this->_do_reflection($height, $opacity, $fade_in); - - return $this; - } - - /** - * Add a watermark to an image with a specified opacity. Alpha transparency - * will be preserved. - * - * If no offset is specified, the center of the axis will be used. - * If an offset of TRUE is specified, the bottom of the axis will be used. - * - * // Add a watermark to the bottom right of the image - * $mark = Image::factory('upload/watermark.png'); - * $image->watermark($mark, TRUE, TRUE); - * - * @param Kohana_Image $watermark watermark Image instance - * @param integer $offset_x offset from the left - * @param integer $offset_y offset from the top - * @param integer $opacity opacity of watermark: 1-100 - * @return $this - * @uses Image::_do_watermark - */ - public function watermark(Kohana_Image $watermark, $offset_x = NULL, $offset_y = NULL, $opacity = 100) - { - if ($offset_x === NULL) - { - // Center the X offset - $offset_x = round(($this->width - $watermark->width) / 2); - } - elseif ($offset_x === TRUE) - { - // Bottom the X offset - $offset_x = $this->width - $watermark->width; - } - elseif ($offset_x < 0) - { - // Set the X offset from the right - $offset_x = $this->width - $watermark->width + $offset_x; - } - - if ($offset_y === NULL) - { - // Center the Y offset - $offset_y = round(($this->height - $watermark->height) / 2); - } - elseif ($offset_y === TRUE) - { - // Bottom the Y offset - $offset_y = $this->height - $watermark->height; - } - elseif ($offset_y < 0) - { - // Set the Y offset from the bottom - $offset_y = $this->height - $watermark->height + $offset_y; - } - - // The opacity must be in the range of 1 to 100 - $opacity = min(max($opacity, 1), 100); - - $this->_do_watermark($watermark, $offset_x, $offset_y, $opacity); - - return $this; - } - - /** - * Set the background color of an image. This is only useful for images - * with alpha transparency. - * - * // Make the image background black - * $image->background('#000'); - * - * // Make the image background black with 50% opacity - * $image->background('#000', 50); - * - * @param string $color hexadecimal color value - * @param integer $opacity background opacity: 0-100 - * @return $this - * @uses Image::_do_background - */ - public function background($color, $opacity = 100) - { - if ($color[0] === '#') - { - // Remove the pound - $color = substr($color, 1); - } - - if (strlen($color) === 3) - { - // Convert shorthand into longhand hex notation - $color = preg_replace('/./', '$0$0', $color); - } - - // Convert the hex into RGB values - list ($r, $g, $b) = array_map('hexdec', str_split($color, 2)); - - // The opacity must be in the range of 0 to 100 - $opacity = min(max($opacity, 0), 100); - - $this->_do_background($r, $g, $b, $opacity); - - return $this; - } - - /** - * Save the image. If the filename is omitted, the original image will - * be overwritten. - * - * // Save the image as a PNG - * $image->save('saved/cool.png'); - * - * // Overwrite the original image - * $image->save(); - * - * [!!] If the file exists, but is not writable, an exception will be thrown. - * - * [!!] If the file does not exist, and the directory is not writable, an - * exception will be thrown. - * - * @param string $file new image path - * @param integer $quality quality of image: 1-100 - * @return boolean - * @uses Image::_save - * @throws ErrorException - */ - public function save($file = NULL, $quality = 100) - { - if ($file === NULL) - { - // Overwrite the file - $file = $this->file; - } - - if (is_file($file)) - { - if ( ! is_writable($file)) - { - throw new ErrorException(sprintf('File must be writable: %s',$file)); - } - } - else - { - // Get the directory of the file - $directory = realpath(pathinfo($file, PATHINFO_DIRNAME)); - - if ( ! is_dir($directory) OR ! is_writable($directory)) - { - throw new ErrorException(sprintf('Directory must be writable: %s',$directory)); - } - } - - // The quality must be in the range of 1 to 100 - $quality = min(max($quality, 1), 100); - - return $this->_do_save($file, $quality); - } - - /** - * Render the image and return the binary string. - * - * // Render the image at 50% quality - * $data = $image->render(NULL, 50); - * - * // Render the image as a PNG - * $data = $image->render('png'); - * - * @param string $type image type to return: png, jpg, gif, etc - * @param integer $quality quality of image: 1-100 - * @return string - * @uses Image::_do_render - */ - public function render($type = NULL, $quality = 100) - { - if ($type === NULL) - { - // Use the current image type - $type = image_type_to_extension($this->type, FALSE); - } - - return $this->_do_render($type, $quality); - } - - /** - * Execute a resize. - * - * @param integer $width new width - * @param integer $height new height - * @return void - */ - abstract protected function _do_resize($width, $height); - - /** - * Adaptation the image. - * - * @param integer $width image width - * @param integer $height image height - * @param integer $bg_width background width - * @param integer $bg_height background height - * @param integer $offset_x offset from the left - * @param integer $offset_y offset from the top - */ - abstract protected function _do_adapt($width, $height, $bg_width, $bg_height, $offset_x, $offset_y); - - /** - * Execute a crop. - * - * @param integer $width new width - * @param integer $height new height - * @param integer $offset_x offset from the left - * @param integer $offset_y offset from the top - * @return void - */ - abstract protected function _do_crop($width, $height, $offset_x, $offset_y); - - /** - * Execute a rotation. - * - * @param integer $degrees degrees to rotate - * @return void - */ - abstract protected function _do_rotate($degrees); - - /** - * Execute a flip. - * - * @param integer $direction direction to flip - * @return void - */ - abstract protected function _do_flip($direction); - - /** - * Execute a sharpen. - * - * @param integer $amount amount to sharpen - * @return void - */ - abstract protected function _do_sharpen($amount); - - /** - * Execute a reflection. - * - * @param integer $height reflection height - * @param integer $opacity reflection opacity - * @param boolean $fade_in TRUE to fade out, FALSE to fade in - * @return void - */ - abstract protected function _do_reflection($height, $opacity, $fade_in); - - /** - * Execute a watermarking. - * - * @param Kohana_Image $image watermarking Kohana_Image - * @param integer $offset_x offset from the left - * @param integer $offset_y offset from the top - * @param integer $opacity opacity of watermark - * @return void - */ - abstract protected function _do_watermark(Kohana_Image $image, $offset_x, $offset_y, $opacity); - - /** - * Execute a background. - * - * @param integer $r red - * @param integer $g green - * @param integer $b blue - * @param integer $opacity opacity - * @return void - */ - abstract protected function _do_background($r, $g, $b, $opacity); - - /** - * Execute a save. - * - * @param string $file new image filename - * @param integer $quality quality - * @return boolean - */ - abstract protected function _do_save($file, $quality); - - /** - * Execute a render. - * - * @param string $type image type: png, jpg, gif, etc - * @param integer $quality quality - * @return string - */ - abstract protected function _do_render($type, $quality); - -} // End Image diff --git a/common/config/main.php b/common/config/main.php index 61c3de5..f2deb13 100755 --- a/common/config/main.php +++ b/common/config/main.php @@ -132,9 +132,9 @@ return [ ], 'modules' => [ - 'file' => [ - 'class' => 'common\modules\file\Module', - ], +// 'file' => [ +// 'class' => 'common\modules\file\Module', +// ], 'relation' => [ 'class' => 'common\modules\relation\Module', 'relations' => [ diff --git a/common/modules/artboxfile/Module.php b/common/modules/artboxfile/Module.php new file mode 100644 index 0000000..72360d2 --- /dev/null +++ b/common/modules/artboxfile/Module.php @@ -0,0 +1,24 @@ +request->post(); + + $multiple = !empty($request['multiple']); + $fileField = empty($request['fileField']) ? 'file' : $request['fileField']; + $formField = empty($request['formField']) ? 'fileUpload' : $request['formField']; + + + if($_FILES[$formField]) + { + if (($_FILES[$formField] == "none") OR (empty($_FILES[$formField]['name'])) ) + { + $error = "Вы не выбрали файл"; + } + else if ($_FILES[$formField]["size"] == 0 OR $_FILES[$formField]["size"] > 2050000) + { + $error = "Размер файла не соответствует нормам"; + } + /*else if (($_FILES['upload']["type"] != "image/jpeg") AND ($_FILES['upload']["type"] != "image/jpeg") AND ($_FILES['upload']["type"] != "image/png") AND ($_FILES['upload']['type'] != 'image/gif')) + { + $message = "Допускается загрузка только картинок JPG, GIF и PNG."; + }*/ + else if (!is_uploaded_file($_FILES[$formField]["tmp_name"])) + { + $error = "Что-то пошло не так. Попытайтесь загрузить файл ещё раз."; + } + else{ + $ext = $this->getex($_FILES[$formField]['name']); + $name = $_FILES[$formField]['name'] .'.'. $ext; + $tmpName = uniqid('tmpfile_') .'.'. $ext; + + $path = Yii::getAlias($this->tmpDir); + if(!is_dir($path)) { + mkdir($path, 0755, true); + } + + if (!move_uploaded_file($_FILES[$formField]['tmp_name'], $path .'/'. $tmpName)) { + $error = "File not uploaded"; + } else { + $full_path = $path .'/'. $tmpName; + $message = "Файл " . $_FILES[$formField]['name'] . " in $full_path загружен"; + } + } + } + if (!empty($error)) { + print json_encode(['error' => $error]); + } else { + print json_encode(['message' => $message, 'tmpfile' => $full_path, 'filename' => $name]); + } + exit; + } + + protected function getex($filename) { + return end(explode(".", $filename)); + } +} \ No newline at end of file diff --git a/common/modules/artboxfile/models/File.php b/common/modules/artboxfile/models/File.php new file mode 100644 index 0000000..f5c4188 --- /dev/null +++ b/common/modules/artboxfile/models/File.php @@ -0,0 +1,34 @@ + 255], + [[$this->fileUploadName], 'safe'], + [[$this->fileUploadName], 'file', 'extensions' => 'jpg, gif, png'], + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'file' => Yii::t('artbox', 'File name'), + 'fileUpload' => Yii::t('artbox', 'File'), + ]; + } +} \ No newline at end of file diff --git a/frontend/config/main.php b/frontend/config/main.php index 627cea2..e462983 100755 --- a/frontend/config/main.php +++ b/frontend/config/main.php @@ -41,21 +41,6 @@ return [ 'errorHandler' => [ 'errorAction' => 'site/error', ], - 'imageCache' => [ - 'class' => 'iutbay\yii2imagecache\ImageCache', - 'sourcePath' => '@app/web/images', - 'sourceUrl' => '@web/images', - 'resizeMode' => 'inset', - 'sizes' => [ - 'brandlist' => [138, 78], - 'product' => [300, 300], - 'product_trumb' => [80, 80], - 'product_list' => [130, 70], - 'product_list2' => [130, 70], - 'mainmenu' => [160, 170], - 'large' => [600, 600], - ], - ], 'urlManager' => [ 'baseUrl' => '/', 'enablePrettyUrl' => true, @@ -72,7 +57,6 @@ return [ 'page/'=>'page/show', 'event/view/'=>'event/view', 'service/view/'=>'service/view', - 'thumbs/' => 'site/thumb', //// 'catalog' => 'catalog/category', // 'catalog/' => 'catalog/category', // 'catalog//' => 'catalog/category', -- libgit2 0.21.4