diff --git a/common/components/artboximage/ArtboxImage.php b/common/components/artboximage/ArtboxImage.php
new file mode 100644
index 0000000..1bd7921
--- /dev/null
+++ b/common/components/artboximage/ArtboxImage.php
@@ -0,0 +1,35 @@
+ 'jpeg',
+ 'jpeg' => 'jpeg',
+ 'png' => 'png',
+ 'gif' => 'gif',
+ 'bmp' => 'bmp',
+ ];
+
+ 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);
+ }
+}
\ No newline at end of file
diff --git a/common/components/artboximage/ArtboxImageHelper.php b/common/components/artboximage/ArtboxImageHelper.php
new file mode 100644
index 0000000..b03815d
--- /dev/null
+++ b/common/components/artboximage/ArtboxImageHelper.php
@@ -0,0 +1,134 @@
+artboximage;
+ }
+ return self::$imageDriver;
+ }
+
+ public function getPreset($preset) {
+ if (empty(self::$presets)) {
+ self::$presets = self::getDriver()->presets;
+ }
+ return empty(self::$presets[$preset]) ? null : self::$presets[$preset];
+ }
+
+ public static function getImage($file, $preset, $imgOptions = []) {
+ return Html::img(self::getImageSrc($file, $preset), $imgOptions);
+ }
+
+ public static function getImageSrc($file, $preset, $preset_alias = null) {
+ if (is_string($preset)) {
+ $preset_alias = $preset;
+ $preset = self::getPreset($preset);
+ }
+ if (empty($preset) || empty($preset_alias)) {
+ return $file;
+ }
+ $filePath = self::getPathFromUrl($file);
+ if (!file_exists($filePath) || !preg_match('#^(.*)\.(' . self::getExtensionsRegexp() . ')$#', $file, $matches)) {
+ return $file;
+ }
+ return self::getPresetUrl($filePath, $preset, $preset_alias);
+ }
+
+ private static function getPathFromUrl($url) {
+ return substr_replace($url, self::getDriver()->rootPath, 0, strlen(self::getDriver()->rootUrl));
+ }
+
+ private static function getUrlFromPath($path) {
+ return substr_replace($path, self::getDriver()->rootUrl, 0, strlen(self::getDriver()->rootPath));
+ }
+
+ private static function getPresetUrl($filePath, $preset, $preset_alias) {
+ $pathinfo = pathinfo($filePath);
+ $presetPath = $pathinfo['dirname'] .'/styles/'. strtolower($preset_alias);
+ $presetFilePath = $presetPath .'/'. $pathinfo['basename'];
+ $presetUrl = self::getUrlFromPath($presetFilePath);
+ if (file_exists($presetFilePath)) {
+ return $presetUrl;
+ }
+ if (!file_exists($presetPath)) {
+ @mkdir($presetPath, 0777, true);
+ }
+ $output = self::createPresetImage($filePath, $preset, $preset_alias);
+ if ( !empty($output) ) {
+ $f = fopen($presetFilePath, 'w');
+ fwrite($f, $output);
+ fclose($f);
+ return $presetUrl;
+ }
+ return false;
+ }
+
+ private static function createPresetImage($filePath, $preset, $preset_alias)
+ {
+ $image = self::getDriver()->load($filePath);
+ foreach ($preset as $action => $data) {
+ switch($action) {
+ case 'resize':
+ $image->resize($data['width'], $data['height'], @$data['master']);
+ break;
+ case 'flip':
+ $image->flip(@$data['direction']);
+ break;
+ default:
+ break;
+ }
+ }
+ return $image->render();
+ }
+
+ /**
+ * Get extensions regexp
+ * @return string regexp
+ */
+ private function getExtensionsRegexp()
+ {
+ $keys = array_keys(self::getDriver()->extensions);
+ return '(?i)' . join('|', $keys);
+ }
+
+ /**
+ * Get size from suffix
+ * @param string $suffix
+ * @return string size
+ */
+ private function getSizeFromSuffix($suffix)
+ {
+ return array_search($suffix, $this->getSizeSuffixes());
+ }
+
+ /**
+ * Get suffix from size
+ * @param string $size
+ * @return string suffix
+ */
+ private function getSufixFromSize($size)
+ {
+ return ArrayHelper::getValue($this->getSizeSuffixes(), $size);
+ }
+
+ private function getSizeSuffixes()
+ {
+ $suffixes = [];
+ foreach ($this->sizes as $size => $sizeConf) {
+ $suffixes[$size] = ArrayHelper::getValue($this->sizeSuffixes, $size, $this->defaultSizeSuffix . $size);
+ }
+ return $suffixes;
+ }
+}
\ No newline at end of file
diff --git a/common/components/artboximage/drivers/Image.php b/common/components/artboximage/drivers/Image.php
new file mode 100644
index 0000000..be0ef6f
--- /dev/null
+++ b/common/components/artboximage/drivers/Image.php
@@ -0,0 +1,7 @@
+
\ No newline at end of file
diff --git a/common/components/artboximage/drivers/Image/GD.php b/common/components/artboximage/drivers/Image/GD.php
new file mode 100644
index 0000000..6324818
--- /dev/null
+++ b/common/components/artboximage/drivers/Image/GD.php
@@ -0,0 +1,18 @@
+
\ No newline at end of file
diff --git a/common/components/artboximage/drivers/Image/Imagick.php b/common/components/artboximage/drivers/Image/Imagick.php
new file mode 100644
index 0000000..4d7c2bb
--- /dev/null
+++ b/common/components/artboximage/drivers/Image/Imagick.php
@@ -0,0 +1,15 @@
+='))
+ {
+ 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
new file mode 100644
index 0000000..36bee0e
--- /dev/null
+++ b/common/components/artboximage/drivers/Kohana/Image/Imagick.php
@@ -0,0 +1,362 @@
+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
new file mode 100644
index 0000000..a18ad17
--- /dev/null
+++ b/common/components/artboximage/drivers/Kohana/Kohana_Image.php
@@ -0,0 +1,836 @@
+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/bootstrap.php b/common/config/bootstrap.php
index fb64fc7..d195e08 100755
--- a/common/config/bootstrap.php
+++ b/common/config/bootstrap.php
@@ -3,4 +3,5 @@ Yii::setAlias('@common', dirname(__DIR__));
Yii::setAlias('@frontend', dirname(dirname(__DIR__)) . '/frontend');
Yii::setAlias('@backend', dirname(dirname(__DIR__)) . '/backend');
Yii::setAlias('@console', dirname(dirname(__DIR__)) . '/console');
+Yii::setAlias('@storage', dirname(dirname(__DIR__)) . '/storage');
Yii::setAlias('storage', dirname(dirname(__DIR__)) . '/storage');
diff --git a/common/config/main.php b/common/config/main.php
index 721a1c5..61c3de5 100755
--- a/common/config/main.php
+++ b/common/config/main.php
@@ -69,6 +69,66 @@ return [
],
],
],
+ 'artboximage' => [
+ 'class' => 'common\components\artboximage\ArtboxImage',
+ 'driver' => 'GD', //GD or Imagick
+ 'rootPath' => Yii::getAlias('@storage'),
+ 'rootUrl' => Yii::getAlias('/storage'),
+ 'presets' => [
+ 'product' => [
+ 'resize' => [
+ 'width' => 300,
+ 'height' => 300,
+ 'master' => null
+ ],
+ /*'flip' => [
+ 'direction' => \common\components\artboximage\drivers\Image::HORIZONTAL
+ ]*/
+ ],
+ 'brandlist' => [
+ 'resize' => [
+ 'width' => 138,
+ 'height' => 78,
+ 'master' => null
+ ],
+ ],
+ 'product_trumb' => [
+ 'resize' => [
+ 'width' => 80,
+ 'height' => 80,
+ 'master' => null
+ ],
+ ],
+ 'product_list' => [
+ 'resize' => [
+ 'width' => 130,
+ 'height' => 70,
+ 'master' => null
+ ],
+ ],
+ 'product_list2' => [
+ 'resize' => [
+ 'width' => 130,
+ 'height' => 70,
+ 'master' => null
+ ],
+ ],
+ 'mainmenu' => [
+ 'resize' => [
+ 'width' => 160,
+ 'height' => 170,
+ 'master' => null
+ ],
+ ],
+ 'large' => [
+ 'resize' => [
+ 'width' => 600,
+ 'height' => 600,
+ 'master' => null
+ ],
+ ],
+ ]
+ ],
],
'modules' => [
diff --git a/common/modules/product/models/Brand.php b/common/modules/product/models/Brand.php
index b7c6ef9..7c5882c 100755
--- a/common/modules/product/models/Brand.php
+++ b/common/modules/product/models/Brand.php
@@ -123,10 +123,10 @@ class Brand extends \yii\db\ActiveRecord
}
public function getImageFile() {
- return empty($this->image) ? null : '/images/brand/'. $this->image;
+ return empty($this->image) ? null : Yii::getAlias('@storage/brand/'. $this->image);
}
public function getImageUrl() {
- return empty($this->image) ? null : '/images/brand/'. $this->image;
+ return empty($this->image) ? null : '/storage/brand/'. $this->image;
}
}
diff --git a/common/modules/product/models/Category.php b/common/modules/product/models/Category.php
index 7ba9b7a..2b6c773 100755
--- a/common/modules/product/models/Category.php
+++ b/common/modules/product/models/Category.php
@@ -177,9 +177,13 @@ class Category extends \yii\db\ActiveRecord
return empty($this->categoryName) ? null : $this->categoryName->value;
}
+ public function getImageFile() {
+ return empty($this->image) ? null : Yii::getAlias('@storage/category/'. $this->image);
+ }
+
public function getImageUrl()
{
- return empty($this->image) ? null : '/images/category/' . $this->image;
+ return empty($this->image) ? null : '/storage/category/' . $this->image;
}
public function beforeSave($insert)
diff --git a/common/modules/product/models/Product.php b/common/modules/product/models/Product.php
index b92a057..007ab5b 100755
--- a/common/modules/product/models/Product.php
+++ b/common/modules/product/models/Product.php
@@ -197,7 +197,7 @@ class Product extends \yii\db\ActiveRecord
// $this->imagesUpload = [$this->imagesUpload];
// }
// foreach($this->imagesUpload as $image) {
-// $image->saveAs((Yii::getAlias('@frontend/web/images/products/original/' . $image->baseName .'_'. uniqid() . '.' . $image->extension)));
+// $image->saveAs((Yii::getAlias('@storage/products/original/' . $image->baseName .'_'. uniqid() . '.' . $image->extension)));
// }
//
//
@@ -233,12 +233,12 @@ class Product extends \yii\db\ActiveRecord
foreach ($this->imagesUpload as $image) {
$imageName = $image->baseName .'.'. $image->extension;
$i = 0;
- while(file_exists(Yii::getAlias('@frontend/web/images/products/' . $imageName))) {
+ while(file_exists(Yii::getAlias('@storage/products/'. $imageName))) {
$i++;
$imageName = $image->baseName .'_'. $i .'.'. $image->extension;
}
- $image->saveAs(Yii::getAlias('@frontend/web/images/products/' .$imageName));
+ $image->saveAs(Yii::getAlias('@storage/products/'. $imageName));
$images[] = $imageName;
}
return $images;
diff --git a/common/modules/product/models/ProductImage.php b/common/modules/product/models/ProductImage.php
index 307433a..b8b4a79 100755
--- a/common/modules/product/models/ProductImage.php
+++ b/common/modules/product/models/ProductImage.php
@@ -97,7 +97,7 @@ class ProductImage extends \yii\db\ActiveRecord
*/
public function getImageFile()
{
- return isset($this->image) ? '/images/products/' . $this->image : null;
+ return isset($this->image) ? Yii::getAlias('@storage/products/'. $this->image) : null;
}
/**
@@ -107,7 +107,7 @@ class ProductImage extends \yii\db\ActiveRecord
public function getImageUrl()
{
// return a default image placeholder if your source image is not found
- return isset($this->image) ? '/images/products/'. $this->image : 'default.jpg';
+ return isset($this->image) ? '/storage/products/'. $this->image : 'default.jpg';
}
/**
diff --git a/common/modules/product/widgets/views/brandsCarousel.php b/common/modules/product/widgets/views/brandsCarousel.php
index 9b4ef14..949aca0 100755
--- a/common/modules/product/widgets/views/brandsCarousel.php
+++ b/common/modules/product/widgets/views/brandsCarousel.php
@@ -3,7 +3,7 @@
diff --git a/common/modules/product/widgets/views/submenu.php b/common/modules/product/widgets/views/submenu.php
index c3d8731..ccb8932 100755
--- a/common/modules/product/widgets/views/submenu.php
+++ b/common/modules/product/widgets/views/submenu.php
@@ -12,7 +12,7 @@
image)) :?>
- = $_item->imageUrl ? Yii::$app->imageCache->thumb($_item->imageUrl, 'mainmenu') : ''?>
+ = $_item->imageUrl ? \common\components\artboximage\ArtboxImageHelper::getImage($_item->imageUrl, 'mainmenu') : ''?>
= $_item->categoryName->value?>
@@ -34,7 +34,7 @@
image)) :?>
- = $_item['item']->imageUrl ? Yii::$app->imageCache->thumb($_item['item']->imageUrl, 'mainmenu') : ''?>
+ = $_item['item']->imageUrl ? \common\components\artboximage\ArtboxImageHelper::getImage($_item['item']->imageUrl, 'mainmenu') : ''?>
= $_item['item']->categoryName->value?>
diff --git a/common/modules/rubrication/behaviors/ArtboxSynonymBehavior.php b/common/modules/rubrication/behaviors/ArtboxSynonymBehavior.php
index 5fe2bed..586b750 100755
--- a/common/modules/rubrication/behaviors/ArtboxSynonymBehavior.php
+++ b/common/modules/rubrication/behaviors/ArtboxSynonymBehavior.php
@@ -116,7 +116,7 @@ class ArtboxSynonymBehavior extends Behavior {
if ($isave) {
$valueModel->setAttribute($this->valueOptionId, $this->owner->getAttribute($this->keyNameId));
$valueModel->save();
- if (!empty($this->slug) && empty($this->owner->getAttribute($this->slug['slugKeyName']))) {
+ if (!empty($this->slug) && empty($this->owner->{$this->slug['slugKeyName']})) {
$this->owner->{$this->slug['slugKeyName']} = $this->slugify($valueModel->{$this->slug['valueKeyName']});
}
}
diff --git a/composer.json b/composer.json
index 298acb2..2ad5a4f 100644
--- a/composer.json
+++ b/composer.json
@@ -5,9 +5,6 @@
"homepage": "http://www.yiiframework.com/",
"type": "project",
"license": "BSD-3-Clause",
- "platform": {
- "php": "5.5.0"
- },
"support": {
"issues": "https://github.com/yiisoft/yii2/issues?state=open",
"forum": "http://www.yiiframework.com/forum/",
@@ -38,7 +35,13 @@
"unclead/yii2-multiple-input": "~1.0",
"codeception/codeception":"*",
"phpmailer/phpmailer": "^5.2",
- "league/oauth2-client": "^1.3"
+ "league/oauth2-client": "^1.3",
+ "kartik-v/yii2-grid": "@dev",
+ "kartik-v/yii2-mpdf": "@dev",
+ "kartik-v/yii2-widget-fileinput": "@dev",
+ "maxmirazh33/yii2-uploadable-cropable-image": "*",
+ "iutbay/yii2-imagecache": "*",
+ "yurkinx/yii2-image": "dev-master"
},
"require-dev": {
"yiisoft/yii2-codeception": "*",
diff --git a/composer.lock b/composer.lock
deleted file mode 100644
index ce416eb..0000000
--- a/composer.lock
+++ /dev/null
@@ -1,4040 +0,0 @@
-{
- "_readme": [
- "This file locks the dependencies of your project to a known state",
- "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
- "This file is @generated automatically"
- ],
- "hash": "d817e95d434dbdfff82796cc0b6e9c9e",
- "content-hash": "a704572d721b5adc21f823d363fcd4de",
- "packages": [
- {
- "name": "2amigos/yii2-transliterator-helper",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/2amigos/yii2-transliterator-helper.git",
- "reference": "1e4284351f4250a8f2ce553ea4f420fcbb424309"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/2amigos/yii2-transliterator-helper/zipball/1e4284351f4250a8f2ce553ea4f420fcbb424309",
- "reference": "1e4284351f4250a8f2ce553ea4f420fcbb424309",
- "shasum": ""
- },
- "require": {
- "yiisoft/yii2": "*"
- },
- "type": "yii2-extension",
- "autoload": {
- "psr-4": {
- "dosamigos\\transliterator\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Antonio Ramirez",
- "email": "ramirez.cobos@gmail.com",
- "homepage": "http://www.ramirezcobos.com"
- }
- ],
- "description": "Transliterator Helper for Yii2.",
- "keywords": [
- "extension",
- "helper",
- "transliterator",
- "yii"
- ],
- "time": "2014-06-23 14:01:30"
- },
- {
- "name": "almasaeed2010/adminlte",
- "version": "v2.3.3",
- "source": {
- "type": "git",
- "url": "https://github.com/almasaeed2010/AdminLTE.git",
- "reference": "8db979795044412a2e2b4e9659788c23cb59fcd3"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/almasaeed2010/AdminLTE/zipball/8db979795044412a2e2b4e9659788c23cb59fcd3",
- "reference": "8db979795044412a2e2b4e9659788c23cb59fcd3",
- "shasum": ""
- },
- "type": "library",
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Abdullah Almsaeed",
- "email": "support@almsaeedstudio.com"
- }
- ],
- "description": "AdminLTE - admin control panel and dashboard that's based on Bootstrap 3",
- "homepage": "http://almsaeedstudio.com/",
- "keywords": [
- "JS",
- "admin",
- "back-end",
- "css",
- "less",
- "responsive",
- "template",
- "theme",
- "web"
- ],
- "time": "2016-03-24 14:31:41"
- },
- {
- "name": "behat/gherkin",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/Behat/Gherkin.git",
- "reference": "6f005467f571c3c53477fb0a646ba8092aa54bd4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Behat/Gherkin/zipball/6f005467f571c3c53477fb0a646ba8092aa54bd4",
- "reference": "6f005467f571c3c53477fb0a646ba8092aa54bd4",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.1"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.5|~5",
- "symfony/phpunit-bridge": "~2.7|~3",
- "symfony/yaml": "~2.3|~3"
- },
- "suggest": {
- "symfony/yaml": "If you want to parse features, represented in YAML files"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.4-dev"
- }
- },
- "autoload": {
- "psr-0": {
- "Behat\\Gherkin": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Konstantin Kudryashov",
- "email": "ever.zet@gmail.com",
- "homepage": "http://everzet.com"
- }
- ],
- "description": "Gherkin DSL parser for PHP 5.3",
- "homepage": "http://behat.org/",
- "keywords": [
- "BDD",
- "Behat",
- "Cucumber",
- "DSL",
- "gherkin",
- "parser"
- ],
- "time": "2015-12-31 10:51:34"
- },
- {
- "name": "bower-asset/admin-lte",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/almasaeed2010/AdminLTE.git",
- "reference": "fe147c9b2188bc3e4c651ca24581a6710d5421ff"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/almasaeed2010/AdminLTE/zipball/fe147c9b2188bc3e4c651ca24581a6710d5421ff",
- "reference": "fe147c9b2188bc3e4c651ca24581a6710d5421ff",
- "shasum": ""
- },
- "type": "bower-asset-library",
- "extra": {
- "bower-asset-main": [
- "index2.html",
- "dist/css/AdminLTE.css",
- "dist/js/app.js",
- "build/less/AdminLTE.less"
- ],
- "bower-asset-ignore": [
- "/.*",
- "node_modules",
- "bower_components",
- "composer.json",
- "documentation"
- ]
- },
- "license": [
- "MIT"
- ],
- "description": "Admin dashboard and control panel template",
- "keywords": [
- "admin",
- "backend",
- "bootstrap",
- "css",
- "html",
- "js",
- "responsive",
- "template",
- "theme"
- ],
- "time": "2016-03-14 01:14:03"
- },
- {
- "name": "bower-asset/bootstrap",
- "version": "v3.3.5",
- "source": {
- "type": "git",
- "url": "https://github.com/twbs/bootstrap.git",
- "reference": "16b48259a62f576e52c903c476bd42b90ab22482"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/twbs/bootstrap/zipball/16b48259a62f576e52c903c476bd42b90ab22482",
- "reference": "16b48259a62f576e52c903c476bd42b90ab22482",
- "shasum": ""
- },
- "require": {
- "bower-asset/jquery": ">=1.9.1"
- },
- "type": "bower-asset-library",
- "extra": {
- "bower-asset-main": [
- "less/bootstrap.less",
- "dist/js/bootstrap.js"
- ],
- "bower-asset-ignore": [
- "/.*",
- "_config.yml",
- "CNAME",
- "composer.json",
- "CONTRIBUTING.md",
- "docs",
- "js/tests",
- "test-infra"
- ]
- },
- "license": [
- "MIT"
- ],
- "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.",
- "keywords": [
- "css",
- "framework",
- "front-end",
- "js",
- "less",
- "mobile-first",
- "responsive",
- "web"
- ]
- },
- {
- "name": "bower-asset/fontawesome",
- "version": "v4.5.0",
- "source": {
- "type": "git",
- "url": "https://github.com/FortAwesome/Font-Awesome.git",
- "reference": "fddd2c240452e6c8990c4ef75e0265b455aa7968"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/FortAwesome/Font-Awesome/zipball/fddd2c240452e6c8990c4ef75e0265b455aa7968",
- "reference": "fddd2c240452e6c8990c4ef75e0265b455aa7968",
- "shasum": ""
- },
- "type": "bower-asset-library",
- "extra": {
- "bower-asset-main": [
- "less/font-awesome.less",
- "scss/font-awesome.scss"
- ],
- "bower-asset-ignore": [
- "*/.*",
- "*.json",
- "src",
- "*.yml",
- "Gemfile",
- "Gemfile.lock",
- "*.md"
- ]
- },
- "license": [
- "OFL-1.1",
- "MIT",
- "CC-BY-3.0"
- ],
- "description": "Font Awesome"
- },
- {
- "name": "bower-asset/jquery",
- "version": "2.2.3",
- "source": {
- "type": "git",
- "url": "https://github.com/jquery/jquery-dist.git",
- "reference": "af22a351b2ea5801ffb1695abb3bb34d5bed9198"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/jquery/jquery-dist/zipball/af22a351b2ea5801ffb1695abb3bb34d5bed9198",
- "reference": "af22a351b2ea5801ffb1695abb3bb34d5bed9198",
- "shasum": ""
- },
- "type": "bower-asset-library",
- "extra": {
- "bower-asset-main": "dist/jquery.js",
- "bower-asset-ignore": [
- "package.json"
- ]
- },
- "license": [
- "MIT"
- ],
- "keywords": [
- "browser",
- "javascript",
- "jquery",
- "library"
- ]
- },
- {
- "name": "bower-asset/jquery-ui",
- "version": "1.11.4",
- "source": {
- "type": "git",
- "url": "https://github.com/components/jqueryui.git",
- "reference": "c34f8dbf3ba57b3784b93f26119f436c0e8288e1"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/components/jqueryui/zipball/c34f8dbf3ba57b3784b93f26119f436c0e8288e1",
- "reference": "c34f8dbf3ba57b3784b93f26119f436c0e8288e1",
- "shasum": ""
- },
- "require": {
- "bower-asset/jquery": ">=1.6"
- },
- "type": "bower-asset-library",
- "extra": {
- "bower-asset-main": [
- "jquery-ui.js"
- ],
- "bower-asset-ignore": []
- }
- },
- {
- "name": "bower-asset/jquery.inputmask",
- "version": "3.2.7",
- "source": {
- "type": "git",
- "url": "https://github.com/RobinHerbots/jquery.inputmask.git",
- "reference": "5a72c563b502b8e05958a524cdfffafe9987be38"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/RobinHerbots/jquery.inputmask/zipball/5a72c563b502b8e05958a524cdfffafe9987be38",
- "reference": "5a72c563b502b8e05958a524cdfffafe9987be38",
- "shasum": ""
- },
- "require": {
- "bower-asset/jquery": ">=1.7"
- },
- "type": "bower-asset-library",
- "extra": {
- "bower-asset-main": [
- "./dist/inputmask/inputmask.js"
- ],
- "bower-asset-ignore": [
- "**/*",
- "!dist/*",
- "!dist/inputmask/*",
- "!dist/min/*",
- "!dist/min/inputmask/*",
- "!extra/bindings/*",
- "!extra/dependencyLibs/*",
- "!extra/phone-codes/*"
- ]
- },
- "license": [
- "http://opensource.org/licenses/mit-license.php"
- ],
- "description": "jquery.inputmask is a jquery plugin which create an input mask.",
- "keywords": [
- "form",
- "input",
- "inputmask",
- "jquery",
- "mask",
- "plugins"
- ]
- },
- {
- "name": "bower-asset/punycode",
- "version": "v1.3.2",
- "source": {
- "type": "git",
- "url": "https://github.com/bestiejs/punycode.js.git",
- "reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/bestiejs/punycode.js/zipball/38c8d3131a82567bfef18da09f7f4db68c84f8a3",
- "reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3",
- "shasum": ""
- },
- "type": "bower-asset-library",
- "extra": {
- "bower-asset-main": "punycode.js",
- "bower-asset-ignore": [
- "coverage",
- "tests",
- ".*",
- "component.json",
- "Gruntfile.js",
- "node_modules",
- "package.json"
- ]
- }
- },
- {
- "name": "bower-asset/yii2-pjax",
- "version": "v2.0.6",
- "source": {
- "type": "git",
- "url": "https://github.com/yiisoft/jquery-pjax.git",
- "reference": "60728da6ade5879e807a49ce59ef9a72039b8978"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/yiisoft/jquery-pjax/zipball/60728da6ade5879e807a49ce59ef9a72039b8978",
- "reference": "60728da6ade5879e807a49ce59ef9a72039b8978",
- "shasum": ""
- },
- "require": {
- "bower-asset/jquery": ">=1.8"
- },
- "type": "bower-asset-library",
- "extra": {
- "bower-asset-main": "./jquery.pjax.js",
- "bower-asset-ignore": [
- ".travis.yml",
- "Gemfile",
- "Gemfile.lock",
- "CONTRIBUTING.md",
- "vendor/",
- "script/",
- "test/"
- ]
- },
- "license": [
- "MIT"
- ]
- },
- {
- "name": "cebe/markdown",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/cebe/markdown.git",
- "reference": "e2a490ceec590bf5bfd1b43bd424fb9dceceb7c5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/cebe/markdown/zipball/e2a490ceec590bf5bfd1b43bd424fb9dceceb7c5",
- "reference": "e2a490ceec590bf5bfd1b43bd424fb9dceceb7c5",
- "shasum": ""
- },
- "require": {
- "lib-pcre": "*",
- "php": ">=5.4.0"
- },
- "require-dev": {
- "cebe/indent": "*",
- "facebook/xhprof": "*@dev",
- "phpunit/phpunit": "4.1.*"
- },
- "bin": [
- "bin/markdown"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "cebe\\markdown\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Carsten Brandt",
- "email": "mail@cebe.cc",
- "homepage": "http://cebe.cc/",
- "role": "Creator"
- }
- ],
- "description": "A super fast, highly extensible markdown parser for PHP",
- "homepage": "https://github.com/cebe/markdown#readme",
- "keywords": [
- "extensible",
- "fast",
- "gfm",
- "markdown",
- "markdown-extra"
- ],
- "time": "2016-03-18 13:28:11"
- },
- {
- "name": "cebe/yii2-gravatar",
- "version": "1.1",
- "target-dir": "cebe/gravatar",
- "source": {
- "type": "git",
- "url": "https://github.com/cebe/yii2-gravatar.git",
- "reference": "c9c01bd14c9bdee9e5ae1ef1aad23f80c182c057"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/cebe/yii2-gravatar/zipball/c9c01bd14c9bdee9e5ae1ef1aad23f80c182c057",
- "reference": "c9c01bd14c9bdee9e5ae1ef1aad23f80c182c057",
- "shasum": ""
- },
- "require": {
- "yiisoft/yii2": "*"
- },
- "type": "yii2-extension",
- "autoload": {
- "psr-0": {
- "cebe\\gravatar\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Carsten Brandt",
- "email": "mail@cebe.cc",
- "homepage": "http://cebe.cc/",
- "role": "Core framework development"
- }
- ],
- "description": "Gravatar Widget for Yii 2",
- "keywords": [
- "gravatar",
- "yii"
- ],
- "time": "2013-12-10 17:49:58"
- },
- {
- "name": "codeception/codeception",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/Codeception/Codeception.git",
- "reference": "a04ceaea52d2a050d8df19df1a85fb1b24456477"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Codeception/Codeception/zipball/c3a92199d02598de6fb59fa57913a10909628e4f",
- "reference": "a04ceaea52d2a050d8df19df1a85fb1b24456477",
- "shasum": ""
- },
- "require": {
- "behat/gherkin": "~4.4.0",
- "ext-json": "*",
- "ext-mbstring": "*",
- "facebook/webdriver": ">=1.0.1 <2.0",
- "guzzlehttp/guzzle": ">=4.1.4 <7.0",
- "guzzlehttp/psr7": "~1.0",
- "php": ">=5.4.0 <8.0",
- "phpunit/php-code-coverage": ">=2.1.3",
- "phpunit/phpunit": ">4.8.20 <6.0",
- "symfony/browser-kit": ">=2.7 <3.1",
- "symfony/console": ">=2.7 <3.1",
- "symfony/css-selector": ">=2.7 <3.1",
- "symfony/dom-crawler": ">=2.7 <3.1",
- "symfony/event-dispatcher": ">=2.7 <3.1",
- "symfony/finder": ">=2.7 <3.1",
- "symfony/yaml": ">=2.7 <3.1"
- },
- "require-dev": {
- "codeception/specify": "~0.3",
- "facebook/php-sdk-v4": "~5.0",
- "flow/jsonpath": "~0.2",
- "league/factory-muffin": "^3.0",
- "league/factory-muffin-faker": "^1.0",
- "monolog/monolog": "~1.8",
- "pda/pheanstalk": "~3.0",
- "php-amqplib/php-amqplib": "~2.4"
- },
- "suggest": {
- "codeception/specify": "BDD-style code blocks",
- "codeception/verify": "BDD-style assertions",
- "flow/jsonpath": "For using JSONPath in REST module",
- "league/factory-muffin": "For DataFactory module",
- "league/factory-muffin-faker": "For Faker support in DataFactory module",
- "phpseclib/phpseclib": "for SFTP option in FTP Module"
- },
- "bin": [
- "codecept"
- ],
- "type": "library",
- "extra": {
- "branch-alias": []
- },
- "autoload": {
- "psr-4": {
- "Codeception\\": "src\\Codeception",
- "Codeception\\Extension\\": "ext"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Michael Bodnarchuk",
- "email": "davert@mail.ua",
- "homepage": "http://codegyre.com"
- }
- ],
- "description": "BDD-style testing framework",
- "homepage": "http://codeception.com/",
- "keywords": [
- "BDD",
- "TDD",
- "acceptance testing",
- "functional testing",
- "unit testing"
- ],
- "time": "2016-03-26 21:39:36"
- },
- {
- "name": "developeruz/yii2-db-rbac",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/developeruz/yii2-db-rbac.git",
- "reference": "28c1b0ebcc45b6365af6f1e9949b4d9cfeaebf1b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/developeruz/yii2-db-rbac/zipball/28c1b0ebcc45b6365af6f1e9949b4d9cfeaebf1b",
- "reference": "28c1b0ebcc45b6365af6f1e9949b4d9cfeaebf1b",
- "shasum": ""
- },
- "require": {
- "yiisoft/yii2": "*"
- },
- "type": "yii2-extension",
- "autoload": {
- "psr-4": {
- "developeruz\\db_rbac\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Elvira Sheina",
- "email": "elleuz@gmail.com",
- "homepage": "http://developer.uz"
- }
- ],
- "description": "Dynamic control of access rights in YII2",
- "keywords": [
- "rbac",
- "yii"
- ],
- "time": "2015-10-03 05:56:47"
- },
- {
- "name": "dmstr/yii2-adminlte-asset",
- "version": "2.3.0",
- "source": {
- "type": "git",
- "url": "https://github.com/dmstr/yii2-adminlte-asset.git",
- "reference": "73eca05cf04d70f169a88b430d2c03c3b54d623a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/dmstr/yii2-adminlte-asset/zipball/73eca05cf04d70f169a88b430d2c03c3b54d623a",
- "reference": "73eca05cf04d70f169a88b430d2c03c3b54d623a",
- "shasum": ""
- },
- "require": {
- "almasaeed2010/adminlte": "~2.0",
- "cebe/yii2-gravatar": "1.*",
- "rmrevin/yii2-fontawesome": "~2.9",
- "yiisoft/yii2": "2.*",
- "yiisoft/yii2-bootstrap": "2.*"
- },
- "type": "yii2-extension",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "dmstr\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Tobias Munk",
- "email": "tobias@diemeisterei.de"
- },
- {
- "name": "Evgeniy Tkachenko",
- "email": "et.coder@gmail.com"
- }
- ],
- "description": "Backend theme for Yii2 Framework",
- "keywords": [
- "AdminLTE",
- "extension",
- "yii2"
- ],
- "time": "2016-03-23 04:18:15"
- },
- {
- "name": "doctrine/instantiator",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/instantiator.git",
- "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/instantiator/zipball/416fb8ad1d095a87f1d21bc40711843cd122fd4a",
- "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3,<8.0-DEV"
- },
- "require-dev": {
- "athletic/athletic": "~0.1.8",
- "ext-pdo": "*",
- "ext-phar": "*",
- "phpunit/phpunit": "~4.0",
- "squizlabs/php_codesniffer": "~2.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Marco Pivetta",
- "email": "ocramius@gmail.com",
- "homepage": "http://ocramius.github.com/"
- }
- ],
- "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
- "homepage": "https://github.com/doctrine/instantiator",
- "keywords": [
- "constructor",
- "instantiate"
- ],
- "time": "2015-06-14 21:17:01"
- },
- {
- "name": "ezyang/htmlpurifier",
- "version": "v4.7.0",
- "source": {
- "type": "git",
- "url": "https://github.com/ezyang/htmlpurifier.git",
- "reference": "ae1828d955112356f7677c465f94f7deb7d27a40"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/ae1828d955112356f7677c465f94f7deb7d27a40",
- "reference": "ae1828d955112356f7677c465f94f7deb7d27a40",
- "shasum": ""
- },
- "require": {
- "php": ">=5.2"
- },
- "type": "library",
- "autoload": {
- "psr-0": {
- "HTMLPurifier": "library/"
- },
- "files": [
- "library/HTMLPurifier.composer.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "LGPL"
- ],
- "authors": [
- {
- "name": "Edward Z. Yang",
- "email": "admin@htmlpurifier.org",
- "homepage": "http://ezyang.com"
- }
- ],
- "description": "Standards compliant HTML filter written in PHP",
- "homepage": "http://htmlpurifier.org/",
- "keywords": [
- "html"
- ],
- "time": "2015-08-05 01:03:42"
- },
- {
- "name": "facebook/webdriver",
- "version": "1.1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/facebook/php-webdriver.git",
- "reference": "1c98108ba3eb435b681655764de11502a0653705"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/1c98108ba3eb435b681655764de11502a0653705",
- "reference": "1c98108ba3eb435b681655764de11502a0653705",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.19"
- },
- "require-dev": {
- "phpunit/phpunit": "4.6.*"
- },
- "suggest": {
- "phpdocumentor/phpdocumentor": "2.*"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Facebook\\WebDriver\\": "lib/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "description": "A PHP client for WebDriver",
- "homepage": "https://github.com/facebook/php-webdriver",
- "keywords": [
- "facebook",
- "php",
- "selenium",
- "webdriver"
- ],
- "time": "2015-12-31 15:58:49"
- },
- {
- "name": "fortawesome/font-awesome",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/FortAwesome/Font-Awesome.git",
- "reference": "f97ab41d187553e86abb8c7f6c057c9c0b88de58"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/FortAwesome/Font-Awesome/zipball/06b2efcda0d4612eccdaf8b79ae428fd079f2dfb",
- "reference": "f97ab41d187553e86abb8c7f6c057c9c0b88de58",
- "shasum": ""
- },
- "require-dev": {
- "jekyll": "1.0.2",
- "lessc": "1.4.2"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.0.x-dev"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "OFL-1.1",
- "MIT"
- ],
- "authors": [
- {
- "name": "Dave Gandy",
- "email": "dave@fontawesome.io",
- "homepage": "http://twitter.com/davegandy",
- "role": "Developer"
- }
- ],
- "description": "The iconic font and CSS framework",
- "homepage": "http://fontawesome.io/",
- "keywords": [
- "FontAwesome",
- "awesome",
- "bootstrap",
- "font",
- "icon"
- ],
- "time": "2016-03-23 12:04:52"
- },
- {
- "name": "guzzlehttp/guzzle",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/guzzle/guzzle.git",
- "reference": "d094e337976dff9d8e2424e8485872194e768662"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/85cb758d7367f3aaaa8ffc9269e777919c5f68bb",
- "reference": "d094e337976dff9d8e2424e8485872194e768662",
- "shasum": ""
- },
- "require": {
- "guzzlehttp/promises": "~1.0",
- "guzzlehttp/psr7": "~1.1",
- "php": ">=5.5.0"
- },
- "require-dev": {
- "ext-curl": "*",
- "phpunit/phpunit": "~4.0",
- "psr/log": "~1.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "6.2-dev"
- }
- },
- "autoload": {
- "files": [
- "src/functions_include.php"
- ],
- "psr-4": {
- "GuzzleHttp\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
- }
- ],
- "description": "Guzzle is a PHP HTTP client library",
- "homepage": "http://guzzlephp.org/",
- "keywords": [
- "client",
- "curl",
- "framework",
- "http",
- "http client",
- "rest",
- "web service"
- ],
- "time": "2016-03-21 20:02:09"
- },
- {
- "name": "guzzlehttp/promises",
- "version": "1.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/guzzle/promises.git",
- "reference": "bb9024c526b22f3fe6ae55a561fd70653d470aa8"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/guzzle/promises/zipball/bb9024c526b22f3fe6ae55a561fd70653d470aa8",
- "reference": "bb9024c526b22f3fe6ae55a561fd70653d470aa8",
- "shasum": ""
- },
- "require": {
- "php": ">=5.5.0"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "GuzzleHttp\\Promise\\": "src/"
- },
- "files": [
- "src/functions_include.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
- }
- ],
- "description": "Guzzle promises library",
- "keywords": [
- "promise"
- ],
- "time": "2016-03-08 01:15:46"
- },
- {
- "name": "guzzlehttp/psr7",
- "version": "1.3.0",
- "source": {
- "type": "git",
- "url": "https://github.com/guzzle/psr7.git",
- "reference": "31382fef2889136415751badebbd1cb022a4ed72"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/31382fef2889136415751badebbd1cb022a4ed72",
- "reference": "31382fef2889136415751badebbd1cb022a4ed72",
- "shasum": ""
- },
- "require": {
- "php": ">=5.4.0",
- "psr/http-message": "~1.0"
- },
- "provide": {
- "psr/http-message-implementation": "1.0"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "GuzzleHttp\\Psr7\\": "src/"
- },
- "files": [
- "src/functions_include.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
- }
- ],
- "description": "PSR-7 message implementation",
- "keywords": [
- "http",
- "message",
- "stream",
- "uri"
- ],
- "time": "2016-04-13 19:56:01"
- },
- {
- "name": "imagine/imagine",
- "version": "0.5.x-dev",
- "source": {
- "type": "git",
- "url": "https://github.com/avalanche123/Imagine.git",
- "reference": "343580fceed1f89220481ac98480e92f47d91e6c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/avalanche123/Imagine/zipball/343580fceed1f89220481ac98480e92f47d91e6c",
- "reference": "343580fceed1f89220481ac98480e92f47d91e6c",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.2"
- },
- "require-dev": {
- "sami/sami": "dev-master"
- },
- "suggest": {
- "ext-gd": "to use the GD implementation",
- "ext-gmagick": "to use the Gmagick implementation",
- "ext-imagick": "to use the Imagick implementation"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-develop": "0.5-dev"
- }
- },
- "autoload": {
- "psr-0": {
- "Imagine": "lib/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Bulat Shakirzyanov",
- "email": "mallluhuct@gmail.com",
- "homepage": "http://avalanche123.com"
- }
- ],
- "description": "Image processing for PHP 5.3",
- "homepage": "http://imagine.readthedocs.org/",
- "keywords": [
- "drawing",
- "graphics",
- "image manipulation",
- "image processing"
- ],
- "time": "2014-06-13 10:54:04"
- },
- {
- "name": "ircmaxell/random-lib",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/ircmaxell/RandomLib.git",
- "reference": "ad6a37d7bce67b0954be63feb1b4c47da77c527f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/ircmaxell/RandomLib/zipball/ad6a37d7bce67b0954be63feb1b4c47da77c527f",
- "reference": "ad6a37d7bce67b0954be63feb1b4c47da77c527f",
- "shasum": ""
- },
- "require": {
- "ircmaxell/security-lib": "1.1.*@dev",
- "php": ">=5.3.2"
- },
- "require-dev": {
- "mikey179/vfsstream": "1.1.*",
- "phpunit/phpunit": "3.7.*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.1.x-dev"
- }
- },
- "autoload": {
- "psr-0": {
- "RandomLib": "lib"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Anthony Ferrara",
- "email": "ircmaxell@ircmaxell.com",
- "homepage": "http://blog.ircmaxell.com"
- }
- ],
- "description": "A Library For Generating Secure Random Numbers",
- "homepage": "https://github.com/ircmaxell/RandomLib",
- "keywords": [
- "cryptography",
- "random",
- "random-numbers",
- "random-strings"
- ],
- "time": "2016-02-22 13:55:31"
- },
- {
- "name": "ircmaxell/security-lib",
- "version": "v1.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/ircmaxell/SecurityLib.git",
- "reference": "f3db6de12c20c9bcd1aa3db4353a1bbe0e44e1b5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/ircmaxell/SecurityLib/zipball/f3db6de12c20c9bcd1aa3db4353a1bbe0e44e1b5",
- "reference": "f3db6de12c20c9bcd1aa3db4353a1bbe0e44e1b5",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.2"
- },
- "require-dev": {
- "mikey179/vfsstream": "1.1.*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-0": {
- "SecurityLib": "lib"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Anthony Ferrara",
- "email": "ircmaxell@ircmaxell.com",
- "homepage": "http://blog.ircmaxell.com"
- }
- ],
- "description": "A Base Security Library",
- "homepage": "https://github.com/ircmaxell/SecurityLib",
- "time": "2015-03-20 14:31:23"
- },
- {
- "name": "kartik-v/yii2-krajee-base",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/kartik-v/yii2-krajee-base.git",
- "reference": "3e491e51ed742663b239cd6e0b7f76d403bed7e1"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/kartik-v/yii2-krajee-base/zipball/3115b09aeb15a5e06f38dc16860baf153d9bf70e",
- "reference": "3e491e51ed742663b239cd6e0b7f76d403bed7e1",
- "shasum": ""
- },
- "require": {
- "yiisoft/yii2-bootstrap": "@dev"
- },
- "type": "yii2-extension",
- "extra": {
- "branch-alias": {
- "dev-master": "1.8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "kartik\\base\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Kartik Visweswaran",
- "email": "kartikv2@gmail.com",
- "homepage": "http://www.krajee.com/"
- }
- ],
- "description": "Base library and foundation components for all Yii2 Krajee extensions.",
- "homepage": "https://github.com/kartik-v/yii2-krajee-base",
- "keywords": [
- "base",
- "extension",
- "foundation",
- "krajee",
- "widget",
- "yii2"
- ],
- "time": "2016-03-03 12:24:13"
- },
- {
- "name": "kartik-v/yii2-widget-colorinput",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/kartik-v/yii2-widget-colorinput.git",
- "reference": "18537fcdab0f5491d5eebff8e2464ef6a616ee4c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/kartik-v/yii2-widget-colorinput/zipball/1a10c5e9a528270e22dc8a5eba404c72f417665a",
- "reference": "18537fcdab0f5491d5eebff8e2464ef6a616ee4c",
- "shasum": ""
- },
- "require": {
- "kartik-v/yii2-krajee-base": "*"
- },
- "type": "yii2-extension",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "kartik\\color\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD 3-Clause"
- ],
- "authors": [
- {
- "name": "Kartik Visweswaran",
- "email": "kartikv2@gmail.com",
- "homepage": "http://www.krajee.com/"
- }
- ],
- "description": "An enhanced Yii 2 widget encapsulating the HTML 5 color input (sub repo split from yii2-widgets)",
- "homepage": "https://github.com/kartik-v/yii2-widget-colorinput",
- "keywords": [
- "HTML5",
- "color",
- "extension",
- "form",
- "input",
- "jquery",
- "plugin",
- "widget",
- "yii2"
- ],
- "time": "2016-02-02 14:28:12"
- },
- {
- "name": "kartik-v/yii2-widget-datepicker",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/kartik-v/yii2-widget-datepicker.git",
- "reference": "3f7b38886e334a2c8c4262f155d98812461efd36"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/kartik-v/yii2-widget-datepicker/zipball/52606c8764a174aa0d5e6483ed811f617c74ee4e",
- "reference": "3f7b38886e334a2c8c4262f155d98812461efd36",
- "shasum": ""
- },
- "require": {
- "kartik-v/yii2-krajee-base": "~1.7"
- },
- "type": "yii2-extension",
- "extra": {
- "branch-alias": {
- "dev-master": "1.3.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "kartik\\date\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Kartik Visweswaran",
- "email": "kartikv2@gmail.com",
- "homepage": "http://www.krajee.com/"
- }
- ],
- "description": "Enhanced Yii2 wrapper for the bootstrap datepicker plugin (sub repo split from yii2-widgets).",
- "homepage": "https://github.com/kartik-v/yii2-widget-datepicker",
- "keywords": [
- "date",
- "extension",
- "form",
- "jquery",
- "picker",
- "plugin",
- "select2",
- "widget",
- "yii2"
- ],
- "time": "2016-03-29 09:44:50"
- },
- {
- "name": "kartik-v/yii2-widget-select2",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/kartik-v/yii2-widget-select2.git",
- "reference": "cb2a5992cb96bd2939e30ec1c76eba418d6a30af"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/kartik-v/yii2-widget-select2/zipball/cb2a5992cb96bd2939e30ec1c76eba418d6a30af",
- "reference": "cb2a5992cb96bd2939e30ec1c76eba418d6a30af",
- "shasum": ""
- },
- "require": {
- "kartik-v/yii2-krajee-base": "~1.7"
- },
- "type": "yii2-extension",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "kartik\\select2\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Kartik Visweswaran",
- "email": "kartikv2@gmail.com",
- "homepage": "http://www.krajee.com/"
- }
- ],
- "description": "Enhanced Yii2 wrapper for the Select2 jQuery plugin (sub repo split from yii2-widgets).",
- "homepage": "https://github.com/kartik-v/yii2-widget-select2",
- "keywords": [
- "dropdown",
- "extension",
- "form",
- "jquery",
- "plugin",
- "select2",
- "widget",
- "yii2"
- ],
- "time": "2016-03-10 11:33:59"
- },
- {
- "name": "league/oauth2-client",
- "version": "1.3.0",
- "source": {
- "type": "git",
- "url": "https://github.com/thephpleague/oauth2-client.git",
- "reference": "5e5c0bc5bd219515c8d8db8bcb61f19753101b7c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/thephpleague/oauth2-client/zipball/5e5c0bc5bd219515c8d8db8bcb61f19753101b7c",
- "reference": "5e5c0bc5bd219515c8d8db8bcb61f19753101b7c",
- "shasum": ""
- },
- "require": {
- "ext-curl": "*",
- "guzzlehttp/guzzle": "~6.0",
- "ircmaxell/random-lib": "~1.1",
- "php": ">=5.5.0"
- },
- "require-dev": {
- "jakub-onderka/php-parallel-lint": "0.8.*",
- "mockery/mockery": "~0.9",
- "phpunit/phpunit": "~4.0",
- "satooshi/php-coveralls": "0.6.*",
- "squizlabs/php_codesniffer": "~2.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "League\\OAuth2\\Client\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Alex Bilbie",
- "email": "hello@alexbilbie.com",
- "homepage": "http://www.alexbilbie.com",
- "role": "Developer"
- }
- ],
- "description": "OAuth 2.0 Client Library",
- "keywords": [
- "Authentication",
- "SSO",
- "authorization",
- "identity",
- "idp",
- "oauth",
- "oauth2",
- "single sign on"
- ],
- "time": "2016-02-13 20:18:03"
- },
- {
- "name": "lusitanian/oauth",
- "version": "v0.3.6",
- "source": {
- "type": "git",
- "url": "https://github.com/Lusitanian/PHPoAuthLib.git",
- "reference": "4ce8c488971410233eb3b1e6d9ac4e81debb41d5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Lusitanian/PHPoAuthLib/zipball/4ce8c488971410233eb3b1e6d9ac4e81debb41d5",
- "reference": "4ce8c488971410233eb3b1e6d9ac4e81debb41d5",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0"
- },
- "require-dev": {
- "phpunit/phpunit": "3.7.*",
- "predis/predis": "0.8.*@dev",
- "symfony/http-foundation": "~2.1"
- },
- "suggest": {
- "ext-openssl": "Allows for usage of secure connections with the stream-based HTTP client.",
- "predis/predis": "Allows using the Redis storage backend.",
- "symfony/http-foundation": "Allows using the Symfony Session storage backend."
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "0.1-dev"
- }
- },
- "autoload": {
- "psr-0": {
- "OAuth": "src",
- "OAuth\\Unit": "tests"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "David Desberg",
- "email": "david@daviddesberg.com"
- },
- {
- "name": "Pieter Hordijk",
- "email": "info@pieterhordijk.com"
- }
- ],
- "description": "PHP 5.3+ oAuth 1/2 Library",
- "keywords": [
- "Authentication",
- "authorization",
- "oauth",
- "security"
- ],
- "time": "2015-09-09 06:43:02"
- },
- {
- "name": "mihaildev/yii2-ckeditor",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/MihailDev/yii2-ckeditor.git",
- "reference": "d20aa7f6bcf610fee226d6eb15212a279875bf87"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/MihailDev/yii2-ckeditor/zipball/d20aa7f6bcf610fee226d6eb15212a279875bf87",
- "reference": "d20aa7f6bcf610fee226d6eb15212a279875bf87",
- "shasum": ""
- },
- "require": {
- "yiisoft/yii2": "*"
- },
- "type": "yii2-extension",
- "extra": {
- "asset-installer-paths": {
- "npm-asset-library": "vendor/npm",
- "bower-asset-library": "vendor/bower"
- }
- },
- "autoload": {
- "psr-4": {
- "mihaildev\\ckeditor\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Mihail",
- "email": "mihail.kucher@gmail.com",
- "homepage": "https://github.com/MihailDev",
- "role": "Developer"
- }
- ],
- "description": "Yii2 CKEditor",
- "homepage": "https://github.com/MihailDev/yii2-ckeditor",
- "keywords": [
- "CKEditor",
- "editor",
- "wysiwyg",
- "yii"
- ],
- "time": "2014-11-19 22:04:08"
- },
- {
- "name": "mihaildev/yii2-elfinder",
- "version": "1.1.3",
- "source": {
- "type": "git",
- "url": "https://github.com/MihailDev/yii2-elfinder.git",
- "reference": "64b42572dec94e5c2d0d1630bce8292848a98f4b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/MihailDev/yii2-elfinder/zipball/64b42572dec94e5c2d0d1630bce8292848a98f4b",
- "reference": "64b42572dec94e5c2d0d1630bce8292848a98f4b",
- "shasum": ""
- },
- "require": {
- "yiisoft/yii2-jui": "*"
- },
- "type": "yii2-extension",
- "extra": {
- "asset-installer-paths": {
- "npm-asset-library": "vendor/npm",
- "bower-asset-library": "vendor/bower"
- }
- },
- "autoload": {
- "psr-4": {
- "mihaildev\\elfinder\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Mihail",
- "email": "mihail.kucher@gmail.com",
- "homepage": "https://github.com/MihailDev",
- "role": "Developer"
- }
- ],
- "description": "Yii2 ElFinder",
- "homepage": "https://github.com/MihailDev/yii2-elfinder",
- "keywords": [
- "elfinder",
- "filemanager",
- "yii"
- ],
- "time": "2015-07-03 07:08:52"
- },
- {
- "name": "nodge/lightopenid",
- "version": "1.1.2",
- "source": {
- "type": "git",
- "url": "https://github.com/Nodge/LightOpenID.git",
- "reference": "a5492cc0c932c557b7e9b54a6e5bbd85cc5fa041"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Nodge/LightOpenID/zipball/a5492cc0c932c557b7e9b54a6e5bbd85cc5fa041",
- "reference": "a5492cc0c932c557b7e9b54a6e5bbd85cc5fa041",
- "shasum": ""
- },
- "require": {
- "php": ">=5.2"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "openid.php",
- "provider/provider.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT License"
- ],
- "authors": [
- {
- "name": "Mewp",
- "homepage": "http://code.google.com/p/lightopenid/"
- },
- {
- "name": "Ignat Ignatov",
- "homepage": "https://github.com/iignatov/LightOpenID"
- }
- ],
- "description": "Lightweight PHP5 library for easy OpenID authentication.",
- "homepage": "https://github.com/Nodge/LightOpenID",
- "keywords": [
- "Authentication",
- "OpenId"
- ],
- "time": "2013-08-31 16:48:56"
- },
- {
- "name": "nodge/yii2-eauth",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/Nodge/yii2-eauth.git",
- "reference": "f45efd95e3853db33153cc1b856d1f648d221938"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Nodge/yii2-eauth/zipball/f45efd95e3853db33153cc1b856d1f648d221938",
- "reference": "f45efd95e3853db33153cc1b856d1f648d221938",
- "shasum": ""
- },
- "require": {
- "lib-curl": "*",
- "lusitanian/oauth": "~0.3.0",
- "nodge/lightopenid": "~1.1.0",
- "php": ">=5.4.0",
- "yiisoft/yii2": "*"
- },
- "type": "yii2-extension",
- "extra": {
- "bootstrap": "nodge\\eauth\\Bootstrap"
- },
- "autoload": {
- "psr-4": {
- "nodge\\eauth\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "New BSD License"
- ],
- "authors": [
- {
- "name": "Maxim Zemskov",
- "email": "nodge@yandex.ru",
- "homepage": "http://nodge.ru/"
- }
- ],
- "description": "Yii2 EAuth Extension. EAuth allows to authenticate users with accounts on other websites (Google, Facebook, Twitter, etc).",
- "homepage": "https://github.com/Nodge/yii2-eauth",
- "keywords": [
- "Authentication",
- "OpenId",
- "eauth",
- "extension",
- "oauth",
- "yii2"
- ],
- "time": "2016-01-13 18:15:48"
- },
- {
- "name": "phpdocumentor/reflection-docblock",
- "version": "2.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
- "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8",
- "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.0"
- },
- "suggest": {
- "dflydev/markdown": "~1.0",
- "erusev/parsedown": "~1.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- }
- },
- "autoload": {
- "psr-0": {
- "phpDocumentor": [
- "src/"
- ]
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Mike van Riel",
- "email": "mike.vanriel@naenius.com"
- }
- ],
- "time": "2015-02-03 12:10:50"
- },
- {
- "name": "phpmailer/phpmailer",
- "version": "5.4.x-dev",
- "source": {
- "type": "git",
- "url": "https://github.com/PHPMailer/PHPMailer.git",
- "reference": "3d4e3b1a0da0a33889f8b0b2afda6ad4f6d011b5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/3d4e3b1a0da0a33889f8b0b2afda6ad4f6d011b5",
- "reference": "3d4e3b1a0da0a33889f8b0b2afda6ad4f6d011b5",
- "shasum": ""
- },
- "require": {
- "php": ">=5.5.0"
- },
- "require-dev": {
- "phpdocumentor/phpdocumentor": "2.*",
- "phpunit/phpunit": "4.*"
- },
- "suggest": {
- "league/oauth2-client": "Needed for XOAUTH2 authentication"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "PHPMailer\\PHPMailer\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "LGPL-2.1"
- ],
- "authors": [
- {
- "name": "Jim Jagielski",
- "email": "jimjag@gmail.com"
- },
- {
- "name": "Marcus Bointon",
- "email": "phpmailer@synchromedia.co.uk"
- },
- {
- "name": "Andy Prevost",
- "email": "codeworxtech@users.sourceforge.net"
- },
- {
- "name": "Brent R. Matzelle"
- }
- ],
- "description": "PHPMailer is a full-featured email creation and transfer class for PHP",
- "time": "2016-04-07 09:04:03"
- },
- {
- "name": "phpspec/prophecy",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/phpspec/prophecy.git",
- "reference": "b02221e42163be673f9b44a0bc92a8b4907a7c6d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpspec/prophecy/zipball/b02221e42163be673f9b44a0bc92a8b4907a7c6d",
- "reference": "b02221e42163be673f9b44a0bc92a8b4907a7c6d",
- "shasum": ""
- },
- "require": {
- "doctrine/instantiator": "^1.0.2",
- "php": "^5.3|^7.0",
- "phpdocumentor/reflection-docblock": "~2.0",
- "sebastian/comparator": "~1.1",
- "sebastian/recursion-context": "~1.0"
- },
- "require-dev": {
- "phpspec/phpspec": "~2.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.6.x-dev"
- }
- },
- "autoload": {
- "psr-0": {
- "Prophecy\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Konstantin Kudryashov",
- "email": "ever.zet@gmail.com",
- "homepage": "http://everzet.com"
- },
- {
- "name": "Marcello Duarte",
- "email": "marcello.duarte@gmail.com"
- }
- ],
- "description": "Highly opinionated mocking framework for PHP 5.3+",
- "homepage": "https://github.com/phpspec/prophecy",
- "keywords": [
- "Double",
- "Dummy",
- "fake",
- "mock",
- "spy",
- "stub"
- ],
- "time": "2016-02-21 17:41:21"
- },
- {
- "name": "phpunit/php-code-coverage",
- "version": "2.2.x-dev",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979",
- "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3",
- "phpunit/php-file-iterator": "~1.3",
- "phpunit/php-text-template": "~1.2",
- "phpunit/php-token-stream": "~1.3",
- "sebastian/environment": "^1.3.2",
- "sebastian/version": "~1.0"
- },
- "require-dev": {
- "ext-xdebug": ">=2.1.4",
- "phpunit/phpunit": "~4"
- },
- "suggest": {
- "ext-dom": "*",
- "ext-xdebug": ">=2.2.1",
- "ext-xmlwriter": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.2.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sb@sebastian-bergmann.de",
- "role": "lead"
- }
- ],
- "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
- "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
- "keywords": [
- "coverage",
- "testing",
- "xunit"
- ],
- "time": "2015-10-06 15:47:00"
- },
- {
- "name": "phpunit/php-file-iterator",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
- "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0",
- "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.4.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sb@sebastian-bergmann.de",
- "role": "lead"
- }
- ],
- "description": "FilterIterator implementation that filters files based on a list of suffixes.",
- "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
- "keywords": [
- "filesystem",
- "iterator"
- ],
- "time": "2015-06-21 13:08:43"
- },
- {
- "name": "phpunit/php-text-template",
- "version": "1.2.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-text-template.git",
- "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
- "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Simple template engine.",
- "homepage": "https://github.com/sebastianbergmann/php-text-template/",
- "keywords": [
- "template"
- ],
- "time": "2015-06-21 13:50:34"
- },
- {
- "name": "phpunit/php-timer",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-timer.git",
- "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3e82f4e9fc92665fafd9157568e4dcb01d014e5b",
- "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sb@sebastian-bergmann.de",
- "role": "lead"
- }
- ],
- "description": "Utility class for timing",
- "homepage": "https://github.com/sebastianbergmann/php-timer/",
- "keywords": [
- "timer"
- ],
- "time": "2015-06-21 08:01:12"
- },
- {
- "name": "phpunit/php-token-stream",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-token-stream.git",
- "reference": "cab6c6fefee93d7b7c3a01292a0fe0884ea66644"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/cab6c6fefee93d7b7c3a01292a0fe0884ea66644",
- "reference": "cab6c6fefee93d7b7c3a01292a0fe0884ea66644",
- "shasum": ""
- },
- "require": {
- "ext-tokenizer": "*",
- "php": ">=5.3.3"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.2"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.4-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Wrapper around PHP's tokenizer extension.",
- "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
- "keywords": [
- "tokenizer"
- ],
- "time": "2015-09-23 14:46:55"
- },
- {
- "name": "phpunit/phpunit",
- "version": "4.8.x-dev",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "1a1b63266c046e1856fd03812a4e0ac2b51aa2d5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/496745aeba741e63b7149da3e1f712d441751182",
- "reference": "1a1b63266c046e1856fd03812a4e0ac2b51aa2d5",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "ext-json": "*",
- "ext-pcre": "*",
- "ext-reflection": "*",
- "ext-spl": "*",
- "php": ">=5.3.3",
- "phpspec/prophecy": "^1.3.1",
- "phpunit/php-code-coverage": "~2.1",
- "phpunit/php-file-iterator": "~1.4",
- "phpunit/php-text-template": "~1.2",
- "phpunit/php-timer": ">=1.0.6",
- "phpunit/phpunit-mock-objects": "~2.3",
- "sebastian/comparator": "~1.1",
- "sebastian/diff": "~1.2",
- "sebastian/environment": "~1.3",
- "sebastian/exporter": "~1.2",
- "sebastian/global-state": "~1.0",
- "sebastian/version": "~1.0",
- "symfony/yaml": "~2.1|~3.0"
- },
- "suggest": {
- "phpunit/php-invoker": "~1.1"
- },
- "bin": [
- "phpunit"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.8.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "The PHP Unit Testing framework.",
- "homepage": "https://phpunit.de/",
- "keywords": [
- "phpunit",
- "testing",
- "xunit"
- ],
- "time": "2016-03-14 15:10:21"
- },
- {
- "name": "phpunit/phpunit-mock-objects",
- "version": "2.3.x-dev",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
- "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983",
- "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983",
- "shasum": ""
- },
- "require": {
- "doctrine/instantiator": "^1.0.2",
- "php": ">=5.3.3",
- "phpunit/php-text-template": "~1.2",
- "sebastian/exporter": "~1.2"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.4"
- },
- "suggest": {
- "ext-soap": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.3.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sb@sebastian-bergmann.de",
- "role": "lead"
- }
- ],
- "description": "Mock Object library for PHPUnit",
- "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
- "keywords": [
- "mock",
- "xunit"
- ],
- "time": "2015-10-02 06:51:40"
- },
- {
- "name": "psr/http-message",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/http-message.git",
- "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/http-message/zipball/85d63699f0dbedb190bbd4b0d2b9dc707ea4c298",
- "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\Http\\Message\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
- }
- ],
- "description": "Common interface for HTTP messages",
- "keywords": [
- "http",
- "http-message",
- "psr",
- "psr-7",
- "request",
- "response"
- ],
- "time": "2015-05-04 20:22:00"
- },
- {
- "name": "rmrevin/yii2-comments",
- "version": "1.4.2",
- "source": {
- "type": "git",
- "url": "https://github.com/rmrevin/yii2-comments.git",
- "reference": "c68ddf276fe24ece0173781a8f7391a2cf7e6a12"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/rmrevin/yii2-comments/zipball/c68ddf276fe24ece0173781a8f7391a2cf7e6a12",
- "reference": "c68ddf276fe24ece0173781a8f7391a2cf7e6a12",
- "shasum": ""
- },
- "require": {
- "php": ">=5.4.0",
- "rmrevin/yii2-fontawesome": "~2.10",
- "yiisoft/yii2": "2.0.*"
- },
- "type": "yii2-extension",
- "extra": {
- "asset-installer-paths": {
- "npm-asset-library": "vendor/npm",
- "bower-asset-library": "vendor/bower"
- }
- },
- "autoload": {
- "psr-4": {
- "rmrevin\\yii\\module\\Comments\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Roman Revin",
- "email": "xgismox@gmail.com",
- "homepage": "http://rmrevin.ru/"
- }
- ],
- "description": "Comments module for Yii2",
- "keywords": [
- "comment",
- "module",
- "widget",
- "yii"
- ],
- "time": "2016-03-01 13:18:41"
- },
- {
- "name": "rmrevin/yii2-fontawesome",
- "version": "2.13.0",
- "source": {
- "type": "git",
- "url": "https://github.com/rmrevin/yii2-fontawesome.git",
- "reference": "2efbfacb22be59f373d11a7e3dfa9213e2ba18a9"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/rmrevin/yii2-fontawesome/zipball/2efbfacb22be59f373d11a7e3dfa9213e2ba18a9",
- "reference": "2efbfacb22be59f373d11a7e3dfa9213e2ba18a9",
- "shasum": ""
- },
- "require": {
- "bower-asset/fontawesome": "4.5.*",
- "php": ">=5.4.0",
- "yiisoft/yii2": "2.0.*"
- },
- "type": "yii2-extension",
- "extra": {
- "asset-installer-paths": {
- "npm-asset-library": "vendor/npm",
- "bower-asset-library": "vendor/bower"
- }
- },
- "autoload": {
- "psr-4": {
- "rmrevin\\yii\\fontawesome\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Revin Roman",
- "email": "roman@rmrevin.com",
- "homepage": "https://rmrevin.com/"
- }
- ],
- "description": "Asset Bundle for Yii2 with Font Awesome",
- "keywords": [
- "asset",
- "awesome",
- "bundle",
- "font",
- "yii"
- ],
- "time": "2015-11-26 15:24:53"
- },
- {
- "name": "sebastian/comparator",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "937efb279bd37a375bcadf584dec0726f84dbf22"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22",
- "reference": "937efb279bd37a375bcadf584dec0726f84dbf22",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3",
- "sebastian/diff": "~1.2",
- "sebastian/exporter": "~1.2"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.4"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.2.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Volker Dusch",
- "email": "github@wallbash.com"
- },
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@2bepublished.at"
- },
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Provides the functionality to compare PHP values for equality",
- "homepage": "http://www.github.com/sebastianbergmann/comparator",
- "keywords": [
- "comparator",
- "compare",
- "equality"
- ],
- "time": "2015-07-26 15:48:44"
- },
- {
- "name": "sebastian/diff",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e",
- "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.8"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.4-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Kore Nordmann",
- "email": "mail@kore-nordmann.de"
- },
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Diff implementation",
- "homepage": "https://github.com/sebastianbergmann/diff",
- "keywords": [
- "diff"
- ],
- "time": "2015-12-08 07:14:41"
- },
- {
- "name": "sebastian/environment",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/environment.git",
- "reference": "dc7a29032cf72b54f36dac15a1ca5b3a1b6029bf"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/dc7a29032cf72b54f36dac15a1ca5b3a1b6029bf",
- "reference": "dc7a29032cf72b54f36dac15a1ca5b3a1b6029bf",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.4"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.3.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Provides functionality to handle HHVM/PHP environments",
- "homepage": "http://www.github.com/sebastianbergmann/environment",
- "keywords": [
- "Xdebug",
- "environment",
- "hhvm"
- ],
- "time": "2016-02-26 18:40:46"
- },
- {
- "name": "sebastian/exporter",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "f88f8936517d54ae6d589166810877fb2015d0a2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/f88f8936517d54ae6d589166810877fb2015d0a2",
- "reference": "f88f8936517d54ae6d589166810877fb2015d0a2",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3",
- "sebastian/recursion-context": "~1.0"
- },
- "require-dev": {
- "ext-mbstring": "*",
- "phpunit/phpunit": "~4.4"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.3.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Volker Dusch",
- "email": "github@wallbash.com"
- },
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@2bepublished.at"
- },
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Adam Harvey",
- "email": "aharvey@php.net"
- }
- ],
- "description": "Provides the functionality to export PHP variables for visualization",
- "homepage": "http://www.github.com/sebastianbergmann/exporter",
- "keywords": [
- "export",
- "exporter"
- ],
- "time": "2015-08-09 04:23:41"
- },
- {
- "name": "sebastian/global-state",
- "version": "1.1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/global-state.git",
- "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4",
- "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.2"
- },
- "suggest": {
- "ext-uopz": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Snapshotting of global state",
- "homepage": "http://www.github.com/sebastianbergmann/global-state",
- "keywords": [
- "global state"
- ],
- "time": "2015-10-12 03:26:01"
- },
- {
- "name": "sebastian/recursion-context",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "7ff5b1b3dcc55b8ab8ae61ef99d4730940856ee7"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/7ff5b1b3dcc55b8ab8ae61ef99d4730940856ee7",
- "reference": "7ff5b1b3dcc55b8ab8ae61ef99d4730940856ee7",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.4"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Adam Harvey",
- "email": "aharvey@php.net"
- }
- ],
- "description": "Provides functionality to recursively process PHP variables",
- "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
- "time": "2016-01-28 05:39:29"
- },
- {
- "name": "sebastian/version",
- "version": "1.0.6",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/version.git",
- "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
- "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
- "shasum": ""
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library that helps with managing the version number of Git-hosted PHP projects",
- "homepage": "https://github.com/sebastianbergmann/version",
- "time": "2015-06-21 13:59:46"
- },
- {
- "name": "swiftmailer/swiftmailer",
- "version": "5.x-dev",
- "source": {
- "type": "git",
- "url": "https://github.com/swiftmailer/swiftmailer.git",
- "reference": "fffbc0e2a7e376dbb0a4b5f2ff6847330f20ccf9"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/fffbc0e2a7e376dbb0a4b5f2ff6847330f20ccf9",
- "reference": "fffbc0e2a7e376dbb0a4b5f2ff6847330f20ccf9",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "require-dev": {
- "mockery/mockery": "~0.9.1,<0.9.4"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.4-dev"
- }
- },
- "autoload": {
- "files": [
- "lib/swift_required.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Chris Corbyn"
- },
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- }
- ],
- "description": "Swiftmailer, free feature-rich PHP mailer",
- "homepage": "http://swiftmailer.org",
- "keywords": [
- "email",
- "mail",
- "mailer"
- ],
- "time": "2016-01-03 15:42:47"
- },
- {
- "name": "symfony/browser-kit",
- "version": "3.0.x-dev",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/browser-kit.git",
- "reference": "e07127ac31230b30887c2dddf3708d883d239b14"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/browser-kit/zipball/e07127ac31230b30887c2dddf3708d883d239b14",
- "reference": "e07127ac31230b30887c2dddf3708d883d239b14",
- "shasum": ""
- },
- "require": {
- "php": ">=5.5.9",
- "symfony/dom-crawler": "~2.8|~3.0"
- },
- "require-dev": {
- "symfony/css-selector": "~2.8|~3.0",
- "symfony/process": "~2.8|~3.0"
- },
- "suggest": {
- "symfony/process": ""
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\BrowserKit\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony BrowserKit Component",
- "homepage": "https://symfony.com",
- "time": "2016-03-04 07:55:57"
- },
- {
- "name": "symfony/console",
- "version": "3.0.x-dev",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/console.git",
- "reference": "6b1175135bc2a74c08a28d89761272de8beed8cd"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/7541c505d2b804cc65a4edf90a6f1cb496523fef",
- "reference": "6b1175135bc2a74c08a28d89761272de8beed8cd",
- "shasum": ""
- },
- "require": {
- "php": ">=5.5.9",
- "symfony/polyfill-mbstring": "~1.0"
- },
- "require-dev": {
- "psr/log": "~1.0",
- "symfony/event-dispatcher": "~2.8|~3.0",
- "symfony/process": "~2.8|~3.0"
- },
- "suggest": {
- "psr/log": "For using the console logger",
- "symfony/event-dispatcher": "",
- "symfony/process": ""
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Console\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony Console Component",
- "homepage": "https://symfony.com",
- "time": "2016-03-16 17:00:50"
- },
- {
- "name": "symfony/css-selector",
- "version": "3.0.x-dev",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/css-selector.git",
- "reference": "65e764f404685f2dc20c057e889b3ad04b2e2db0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/65e764f404685f2dc20c057e889b3ad04b2e2db0",
- "reference": "65e764f404685f2dc20c057e889b3ad04b2e2db0",
- "shasum": ""
- },
- "require": {
- "php": ">=5.5.9"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\CssSelector\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jean-François Simon",
- "email": "jeanfrancois.simon@sensiolabs.com"
- },
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony CssSelector Component",
- "homepage": "https://symfony.com",
- "time": "2016-03-04 07:55:57"
- },
- {
- "name": "symfony/dom-crawler",
- "version": "3.0.x-dev",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/dom-crawler.git",
- "reference": "18a06d7a9af41718c20764a674a0ebba3bc40d1f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/49b588841225b205700e5122fa01911cabada857",
- "reference": "18a06d7a9af41718c20764a674a0ebba3bc40d1f",
- "shasum": ""
- },
- "require": {
- "php": ">=5.5.9",
- "symfony/polyfill-mbstring": "~1.0"
- },
- "require-dev": {
- "symfony/css-selector": "~2.8|~3.0"
- },
- "suggest": {
- "symfony/css-selector": ""
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\DomCrawler\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony DomCrawler Component",
- "homepage": "https://symfony.com",
- "time": "2016-03-23 13:23:25"
- },
- {
- "name": "symfony/event-dispatcher",
- "version": "3.0.x-dev",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "9002dcf018d884d294b1ef20a6f968efc1128f39"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/17b04e6b1ede45b57d3ad5146abe50df6c3968b4",
- "reference": "9002dcf018d884d294b1ef20a6f968efc1128f39",
- "shasum": ""
- },
- "require": {
- "php": ">=5.5.9"
- },
- "require-dev": {
- "psr/log": "~1.0",
- "symfony/config": "~2.8|~3.0",
- "symfony/dependency-injection": "~2.8|~3.0",
- "symfony/expression-language": "~2.8|~3.0",
- "symfony/stopwatch": "~2.8|~3.0"
- },
- "suggest": {
- "symfony/dependency-injection": "",
- "symfony/http-kernel": ""
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\EventDispatcher\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony EventDispatcher Component",
- "homepage": "https://symfony.com",
- "time": "2016-03-10 10:34:12"
- },
- {
- "name": "symfony/finder",
- "version": "3.0.x-dev",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/finder.git",
- "reference": "c54e407b35bc098916704e9fd090da21da4c4f52"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/c54e407b35bc098916704e9fd090da21da4c4f52",
- "reference": "c54e407b35bc098916704e9fd090da21da4c4f52",
- "shasum": ""
- },
- "require": {
- "php": ">=5.5.9"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Finder\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony Finder Component",
- "homepage": "https://symfony.com",
- "time": "2016-03-10 11:13:05"
- },
- {
- "name": "symfony/polyfill-mbstring",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "1289d16209491b584839022f29257ad859b8532d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/1289d16209491b584839022f29257ad859b8532d",
- "reference": "1289d16209491b584839022f29257ad859b8532d",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "suggest": {
- "ext-mbstring": "For best performance"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.1-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Mbstring\\": ""
- },
- "files": [
- "bootstrap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for the Mbstring extension",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "mbstring",
- "polyfill",
- "portable",
- "shim"
- ],
- "time": "2016-01-20 09:13:37"
- },
- {
- "name": "symfony/yaml",
- "version": "3.0.x-dev",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/yaml.git",
- "reference": "0047c8366744a16de7516622c5b7355336afae96"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/0047c8366744a16de7516622c5b7355336afae96",
- "reference": "0047c8366744a16de7516622c5b7355336afae96",
- "shasum": ""
- },
- "require": {
- "php": ">=5.5.9"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Yaml\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony Yaml Component",
- "homepage": "https://symfony.com",
- "time": "2016-03-04 07:55:57"
- },
- {
- "name": "unclead/yii2-multiple-input",
- "version": "1.2.12",
- "source": {
- "type": "git",
- "url": "https://github.com/unclead/yii2-multiple-input.git",
- "reference": "3fd9a3ab9b7d11951f6aa708ba13406868e537fd"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/unclead/yii2-multiple-input/zipball/3fd9a3ab9b7d11951f6aa708ba13406868e537fd",
- "reference": "3fd9a3ab9b7d11951f6aa708ba13406868e537fd",
- "shasum": ""
- },
- "require": {
- "php": ">=5.4.0",
- "yiisoft/yii2": "*"
- },
- "type": "yii2-extension",
- "autoload": {
- "psr-4": {
- "unclead\\widgets\\examples\\": "examples/",
- "unclead\\widgets\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Eugene Tupikov",
- "email": "unclead.nsk@gmail.com"
- }
- ],
- "description": "Widget for handle multiple inputs for an attribute of Yii2 framework model",
- "keywords": [
- "yii2",
- "yii2 array input",
- "yii2 multiple field",
- "yii2 multiple input",
- "yii2 tabular input"
- ],
- "time": "2016-03-09 09:01:35"
- },
- {
- "name": "yiisoft/yii2",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/yiisoft/yii2-framework.git",
- "reference": "bcc317666439a8ec1dc28874e0577b860b6dd6b3"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/yiisoft/yii2-framework/zipball/b7e62df2cfa1dfab4e70223770a99c3798d4a412",
- "reference": "bcc317666439a8ec1dc28874e0577b860b6dd6b3",
- "shasum": ""
- },
- "require": {
- "bower-asset/jquery": "2.2.*@stable | 2.1.*@stable | 1.11.*@stable",
- "bower-asset/jquery.inputmask": "~3.2.2",
- "bower-asset/punycode": "1.3.*",
- "bower-asset/yii2-pjax": "~2.0.1",
- "cebe/markdown": "~1.0.0 | ~1.1.0",
- "ext-ctype": "*",
- "ext-mbstring": "*",
- "ezyang/htmlpurifier": "~4.6",
- "lib-pcre": "*",
- "php": ">=5.4.0",
- "yiisoft/yii2-composer": "~2.0.4"
- },
- "bin": [
- "yii"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "yii\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Qiang Xue",
- "email": "qiang.xue@gmail.com",
- "homepage": "http://www.yiiframework.com/",
- "role": "Founder and project lead"
- },
- {
- "name": "Alexander Makarov",
- "email": "sam@rmcreative.ru",
- "homepage": "http://rmcreative.ru/",
- "role": "Core framework development"
- },
- {
- "name": "Maurizio Domba",
- "homepage": "http://mdomba.info/",
- "role": "Core framework development"
- },
- {
- "name": "Carsten Brandt",
- "email": "mail@cebe.cc",
- "homepage": "http://cebe.cc/",
- "role": "Core framework development"
- },
- {
- "name": "Timur Ruziev",
- "email": "resurtm@gmail.com",
- "homepage": "http://resurtm.com/",
- "role": "Core framework development"
- },
- {
- "name": "Paul Klimov",
- "email": "klimov.paul@gmail.com",
- "role": "Core framework development"
- },
- {
- "name": "Dmitry Naumenko",
- "email": "d.naumenko.a@gmail.com",
- "role": "Core framework development"
- }
- ],
- "description": "Yii PHP Framework Version 2",
- "homepage": "http://www.yiiframework.com/",
- "keywords": [
- "framework",
- "yii2"
- ],
- "time": "2016-03-30 14:53:41"
- },
- {
- "name": "yiisoft/yii2-bootstrap",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/yiisoft/yii2-bootstrap.git",
- "reference": "4dd9f52e2a376a875d998de6ab4c381291b0c69e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/yiisoft/yii2-bootstrap/zipball/772b610ea7940059584f9220f7b87e4b2b1a0e78",
- "reference": "4dd9f52e2a376a875d998de6ab4c381291b0c69e",
- "shasum": ""
- },
- "require": {
- "bower-asset/bootstrap": "3.3.* | 3.2.* | 3.1.*",
- "yiisoft/yii2": ">=2.0.6"
- },
- "type": "yii2-extension",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- },
- "asset-installer-paths": {
- "npm-asset-library": "vendor/npm",
- "bower-asset-library": "vendor/bower"
- }
- },
- "autoload": {
- "psr-4": {
- "yii\\bootstrap\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Qiang Xue",
- "email": "qiang.xue@gmail.com"
- }
- ],
- "description": "The Twitter Bootstrap extension for the Yii framework",
- "keywords": [
- "bootstrap",
- "yii2"
- ],
- "time": "2016-03-30 22:44:25"
- },
- {
- "name": "yiisoft/yii2-composer",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/yiisoft/yii2-composer.git",
- "reference": "348122de0b2c2e343b579f93fcda1da78cab4912"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/yiisoft/yii2-composer/zipball/f5fe6ba58dbc92b37daed5d9bd94cda777852ee4",
- "reference": "348122de0b2c2e343b579f93fcda1da78cab4912",
- "shasum": ""
- },
- "require": {
- "composer-plugin-api": "^1.0"
- },
- "type": "composer-plugin",
- "extra": {
- "class": "yii\\composer\\Plugin",
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "yii\\composer\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Qiang Xue",
- "email": "qiang.xue@gmail.com"
- }
- ],
- "description": "The composer plugin for Yii extension installer",
- "keywords": [
- "composer",
- "extension installer",
- "yii2"
- ],
- "time": "2016-03-21 19:11:44"
- },
- {
- "name": "yiisoft/yii2-imagine",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/yiisoft/yii2-imagine.git",
- "reference": "a6c34ef6b69fb4670ba987ce4b9cfdb2131a8b99"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/yiisoft/yii2-imagine/zipball/3be1ecc324aa156a97f03e3fc59045c8d61be1f8",
- "reference": "a6c34ef6b69fb4670ba987ce4b9cfdb2131a8b99",
- "shasum": ""
- },
- "require": {
- "imagine/imagine": "0.5.*",
- "yiisoft/yii2": "*"
- },
- "type": "yii2-extension",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "yii\\imagine\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Antonio Ramirez",
- "email": "amigo.cobos@gmail.com"
- }
- ],
- "description": "The Imagine integration for the Yii framework",
- "keywords": [
- "helper",
- "image",
- "imagine",
- "yii2"
- ],
- "time": "2016-03-21 19:13:31"
- },
- {
- "name": "yiisoft/yii2-jui",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/yiisoft/yii2-jui.git",
- "reference": "69cd9763b4807dbbce367d599dc615c5b8a8ef4f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/yiisoft/yii2-jui/zipball/9ab9a2cb17cd7f13921339e11e5146295cf39083",
- "reference": "69cd9763b4807dbbce367d599dc615c5b8a8ef4f",
- "shasum": ""
- },
- "require": {
- "bower-asset/jquery-ui": "1.11.*@stable",
- "yiisoft/yii2": ">=2.0.4"
- },
- "type": "yii2-extension",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- },
- "asset-installer-paths": {
- "npm-asset-library": "vendor/npm",
- "bower-asset-library": "vendor/bower"
- }
- },
- "autoload": {
- "psr-4": {
- "yii\\jui\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Qiang Xue",
- "email": "qiang.xue@gmail.com"
- }
- ],
- "description": "The Jquery UI extension for the Yii framework",
- "keywords": [
- "jQuery UI",
- "yii2"
- ],
- "time": "2016-03-29 21:32:13"
- },
- {
- "name": "yiisoft/yii2-swiftmailer",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/yiisoft/yii2-swiftmailer.git",
- "reference": "20775fef1047cd927908270a8d7983580304eb57"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/yiisoft/yii2-swiftmailer/zipball/163b9c6273e133c43a596aef46a9f5b1537731f9",
- "reference": "20775fef1047cd927908270a8d7983580304eb57",
- "shasum": ""
- },
- "require": {
- "swiftmailer/swiftmailer": "~5.0",
- "yiisoft/yii2": ">=2.0.4"
- },
- "type": "yii2-extension",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "yii\\swiftmailer\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Paul Klimov",
- "email": "klimov.paul@gmail.com"
- }
- ],
- "description": "The SwiftMailer integration for the Yii framework",
- "keywords": [
- "email",
- "mail",
- "mailer",
- "swift",
- "swiftmailer",
- "yii2"
- ],
- "time": "2016-03-21 19:16:09"
- }
- ],
- "packages-dev": [
- {
- "name": "bower-asset/typeahead.js",
- "version": "v0.11.1",
- "source": {
- "type": "git",
- "url": "https://github.com/twitter/typeahead.js.git",
- "reference": "588440f66559714280628a4f9799f0c4eb880a4a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/twitter/typeahead.js/zipball/588440f66559714280628a4f9799f0c4eb880a4a",
- "reference": "588440f66559714280628a4f9799f0c4eb880a4a",
- "shasum": ""
- },
- "require": {
- "bower-asset/jquery": ">=1.7"
- },
- "require-dev": {
- "bower-asset/jasmine-ajax": "~1.3.1",
- "bower-asset/jasmine-jquery": "~1.5.2",
- "bower-asset/jquery": "~1.7"
- },
- "type": "bower-asset-library",
- "extra": {
- "bower-asset-main": "dist/typeahead.bundle.js"
- }
- },
- {
- "name": "fzaninotto/faker",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/fzaninotto/Faker.git",
- "reference": "8deb6343c80c4edf546a6fff01a2b05c7dc59ac4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/1c33e894fbbad6cf65bd42871719cd33227ed6a7",
- "reference": "8deb6343c80c4edf546a6fff01a2b05c7dc59ac4",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "require-dev": {
- "ext-intl": "*",
- "phpunit/phpunit": "~4.0",
- "squizlabs/php_codesniffer": "~1.5"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.6.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Faker\\": "src/Faker/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "François Zaninotto"
- }
- ],
- "description": "Faker is a PHP library that generates fake data for you.",
- "keywords": [
- "data",
- "faker",
- "fixtures"
- ],
- "time": "2016-03-29 16:49:43"
- },
- {
- "name": "phpspec/php-diff",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/phpspec/php-diff.git",
- "reference": "30e103d19519fe678ae64a60d77884ef3d71b28a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpspec/php-diff/zipball/0464787bfa7cd13576c5a1e318709768798bec6a",
- "reference": "30e103d19519fe678ae64a60d77884ef3d71b28a",
- "shasum": ""
- },
- "type": "library",
- "autoload": {
- "psr-0": {
- "Diff": "lib/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Chris Boulton",
- "homepage": "http://github.com/chrisboulton",
- "role": "Original developer"
- }
- ],
- "description": "A comprehensive library for generating differences between two hashable objects (strings or arrays).",
- "time": "2013-11-01 13:02:21"
- },
- {
- "name": "yiisoft/yii2-codeception",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/yiisoft/yii2-codeception.git",
- "reference": "e01b3c46917b3f00c42f6a4aabf612cc36d792e6"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/yiisoft/yii2-codeception/zipball/572a6d46d942cc5733c45931fdbd1d60228f3c89",
- "reference": "e01b3c46917b3f00c42f6a4aabf612cc36d792e6",
- "shasum": ""
- },
- "require": {
- "yiisoft/yii2": ">=2.0.4"
- },
- "type": "yii2-extension",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "yii\\codeception\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Mark Jebri",
- "email": "mark.github@yandex.ru"
- }
- ],
- "description": "The Codeception integration for the Yii framework",
- "keywords": [
- "codeception",
- "yii2"
- ],
- "time": "2016-03-21 19:11:26"
- },
- {
- "name": "yiisoft/yii2-debug",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/yiisoft/yii2-debug.git",
- "reference": "081795536b31d29106b0d1de0cb3aefa3e05e995"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/yiisoft/yii2-debug/zipball/e26905af4bc1ca5ecbababac112c7f7f722cabd2",
- "reference": "081795536b31d29106b0d1de0cb3aefa3e05e995",
- "shasum": ""
- },
- "require": {
- "yiisoft/yii2": ">=2.0.4",
- "yiisoft/yii2-bootstrap": "*"
- },
- "type": "yii2-extension",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "yii\\debug\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Qiang Xue",
- "email": "qiang.xue@gmail.com"
- }
- ],
- "description": "The debugger extension for the Yii framework",
- "keywords": [
- "debug",
- "debugger",
- "yii2"
- ],
- "time": "2016-03-21 19:12:39"
- },
- {
- "name": "yiisoft/yii2-faker",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/yiisoft/yii2-faker.git",
- "reference": "a8daa97749e7154d91676405a1c59ed81e1ca999"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/yiisoft/yii2-faker/zipball/6e6eb430809e3f9c05e367303909a05a4912d4c0",
- "reference": "a8daa97749e7154d91676405a1c59ed81e1ca999",
- "shasum": ""
- },
- "require": {
- "fzaninotto/faker": "~1.4",
- "yiisoft/yii2": "*"
- },
- "type": "yii2-extension",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "yii\\faker\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Mark Jebri",
- "email": "mark.github@yandex.ru"
- }
- ],
- "description": "Fixture generator. The Faker integration for the Yii framework.",
- "keywords": [
- "Fixture",
- "faker",
- "yii2"
- ],
- "time": "2016-03-21 19:13:03"
- },
- {
- "name": "yiisoft/yii2-gii",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/yiisoft/yii2-gii.git",
- "reference": "989d6c52c92e51f0d562729c329ee1012191cba2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/yiisoft/yii2-gii/zipball/70edab5a7938b5bf4b5dc3ad1e1c3ce673552f48",
- "reference": "989d6c52c92e51f0d562729c329ee1012191cba2",
- "shasum": ""
- },
- "require": {
- "bower-asset/typeahead.js": "0.10.* | ~0.11.0",
- "phpspec/php-diff": ">=1.0.2",
- "yiisoft/yii2": ">=2.0.4",
- "yiisoft/yii2-bootstrap": "~2.0"
- },
- "type": "yii2-extension",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- },
- "asset-installer-paths": {
- "npm-asset-library": "vendor/npm",
- "bower-asset-library": "vendor/bower"
- }
- },
- "autoload": {
- "psr-4": {
- "yii\\gii\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Qiang Xue",
- "email": "qiang.xue@gmail.com"
- }
- ],
- "description": "The Gii extension for the Yii framework",
- "keywords": [
- "code generator",
- "gii",
- "yii2"
- ],
- "time": "2016-03-21 19:13:26"
- }
- ],
- "aliases": [],
- "minimum-stability": "dev",
- "stability-flags": {
- "kartik-v/yii2-widget-select2": 20
- },
- "prefer-stable": false,
- "prefer-lowest": false,
- "platform": {
- "php": ">=5.4.0"
- },
- "platform-dev": []
-}
diff --git a/frontend/views/catalog/product.php b/frontend/views/catalog/product.php
index a581e8a..32d656e 100755
--- a/frontend/views/catalog/product.php
+++ b/frontend/views/catalog/product.php
@@ -1,4 +1,7 @@
title = $product->name;
@@ -16,7 +19,7 @@ $this->params['breadcrumbs'][] = $product->name .' #'. $product->variant->sku;
image)) :?>
- = $product->image->imageUrl ? Yii::$app->imageCache->thumb($product->image->imageUrl, 'product') : ''?>
+ = $product->image->imageUrl ? ArtboxImageHelper::getImage($product->image->imageUrl, 'product') : ''?>