Commit 1f90c5f48da7bc5796ed1296bac863cbd5efe170
1 parent
74aca081
ArtboxImage resizer
Showing
21 changed files
with
2186 additions
and
4059 deletions
Show diff stats
1 | +<?php | |
2 | + | |
3 | +namespace common\components\artboximage; | |
4 | + | |
5 | +use Yii; | |
6 | +use yii\base\Component; | |
7 | +use yii\base\ErrorException; | |
8 | +use yii\image\drivers\Image; | |
9 | + | |
10 | +//use common\components\artboximage\drivers\Image; | |
11 | + | |
12 | +class ArtboxImage extends Component { | |
13 | + | |
14 | + public $driver; | |
15 | + | |
16 | + public $presets = []; | |
17 | + | |
18 | + public $rootPath; | |
19 | + public $rootUrl; | |
20 | + | |
21 | + public $extensions = [ | |
22 | + 'jpg' => 'jpeg', | |
23 | + 'jpeg' => 'jpeg', | |
24 | + 'png' => 'png', | |
25 | + 'gif' => 'gif', | |
26 | + 'bmp' => 'bmp', | |
27 | + ]; | |
28 | + | |
29 | + public function load($file = null, $driver = null) { | |
30 | + if(empty($file) || !realpath($file)) { | |
31 | + throw new ErrorException('File name can not be empty and exists'); | |
32 | + } | |
33 | + return Image::factory($file, $driver ? $driver : $this->driver); | |
34 | + } | |
35 | +} | |
0 | 36 | \ No newline at end of file | ... | ... |
common/components/artboximage/ArtboxImageHelper.php
0 → 100644
1 | +<?php | |
2 | + | |
3 | +namespace common\components\artboximage; | |
4 | + | |
5 | +use Yii; | |
6 | +use yii\base\Object; | |
7 | +use yii\helpers\ArrayHelper; | |
8 | +use yii\helpers\Html; | |
9 | +use yii\web\HttpException; | |
10 | + | |
11 | +class ArtboxImageHelper extends Object { | |
12 | + /** @var ArtboxImage $imageDriver */ | |
13 | + private static $imageDriver; | |
14 | + private static $presets; | |
15 | + | |
16 | + public function getDriver() { | |
17 | + if (empty(self::$imageDriver)) { | |
18 | + self::$imageDriver = Yii::$app->artboximage; | |
19 | + } | |
20 | + return self::$imageDriver; | |
21 | + } | |
22 | + | |
23 | + public function getPreset($preset) { | |
24 | + if (empty(self::$presets)) { | |
25 | + self::$presets = self::getDriver()->presets; | |
26 | + } | |
27 | + return empty(self::$presets[$preset]) ? null : self::$presets[$preset]; | |
28 | + } | |
29 | + | |
30 | + public static function getImage($file, $preset, $imgOptions = []) { | |
31 | + return Html::img(self::getImageSrc($file, $preset), $imgOptions); | |
32 | + } | |
33 | + | |
34 | + public static function getImageSrc($file, $preset, $preset_alias = null) { | |
35 | + if (is_string($preset)) { | |
36 | + $preset_alias = $preset; | |
37 | + $preset = self::getPreset($preset); | |
38 | + } | |
39 | + if (empty($preset) || empty($preset_alias)) { | |
40 | + return $file; | |
41 | + } | |
42 | + $filePath = self::getPathFromUrl($file); | |
43 | + if (!file_exists($filePath) || !preg_match('#^(.*)\.(' . self::getExtensionsRegexp() . ')$#', $file, $matches)) { | |
44 | + return $file; | |
45 | + } | |
46 | + return self::getPresetUrl($filePath, $preset, $preset_alias); | |
47 | + } | |
48 | + | |
49 | + private static function getPathFromUrl($url) { | |
50 | + return substr_replace($url, self::getDriver()->rootPath, 0, strlen(self::getDriver()->rootUrl)); | |
51 | + } | |
52 | + | |
53 | + private static function getUrlFromPath($path) { | |
54 | + return substr_replace($path, self::getDriver()->rootUrl, 0, strlen(self::getDriver()->rootPath)); | |
55 | + } | |
56 | + | |
57 | + private static function getPresetUrl($filePath, $preset, $preset_alias) { | |
58 | + $pathinfo = pathinfo($filePath); | |
59 | + $presetPath = $pathinfo['dirname'] .'/styles/'. strtolower($preset_alias); | |
60 | + $presetFilePath = $presetPath .'/'. $pathinfo['basename']; | |
61 | + $presetUrl = self::getUrlFromPath($presetFilePath); | |
62 | + if (file_exists($presetFilePath)) { | |
63 | + return $presetUrl; | |
64 | + } | |
65 | + if (!file_exists($presetPath)) { | |
66 | + @mkdir($presetPath, 0777, true); | |
67 | + } | |
68 | + $output = self::createPresetImage($filePath, $preset, $preset_alias); | |
69 | + if ( !empty($output) ) { | |
70 | + $f = fopen($presetFilePath, 'w'); | |
71 | + fwrite($f, $output); | |
72 | + fclose($f); | |
73 | + return $presetUrl; | |
74 | + } | |
75 | + return false; | |
76 | + } | |
77 | + | |
78 | + private static function createPresetImage($filePath, $preset, $preset_alias) | |
79 | + { | |
80 | + $image = self::getDriver()->load($filePath); | |
81 | + foreach ($preset as $action => $data) { | |
82 | + switch($action) { | |
83 | + case 'resize': | |
84 | + $image->resize($data['width'], $data['height'], @$data['master']); | |
85 | + break; | |
86 | + case 'flip': | |
87 | + $image->flip(@$data['direction']); | |
88 | + break; | |
89 | + default: | |
90 | + break; | |
91 | + } | |
92 | + } | |
93 | + return $image->render(); | |
94 | + } | |
95 | + | |
96 | + /** | |
97 | + * Get extensions regexp | |
98 | + * @return string regexp | |
99 | + */ | |
100 | + private function getExtensionsRegexp() | |
101 | + { | |
102 | + $keys = array_keys(self::getDriver()->extensions); | |
103 | + return '(?i)' . join('|', $keys); | |
104 | + } | |
105 | + | |
106 | + /** | |
107 | + * Get size from suffix | |
108 | + * @param string $suffix | |
109 | + * @return string size | |
110 | + */ | |
111 | + private function getSizeFromSuffix($suffix) | |
112 | + { | |
113 | + return array_search($suffix, $this->getSizeSuffixes()); | |
114 | + } | |
115 | + | |
116 | + /** | |
117 | + * Get suffix from size | |
118 | + * @param string $size | |
119 | + * @return string suffix | |
120 | + */ | |
121 | + private function getSufixFromSize($size) | |
122 | + { | |
123 | + return ArrayHelper::getValue($this->getSizeSuffixes(), $size); | |
124 | + } | |
125 | + | |
126 | + private function getSizeSuffixes() | |
127 | + { | |
128 | + $suffixes = []; | |
129 | + foreach ($this->sizes as $size => $sizeConf) { | |
130 | + $suffixes[$size] = ArrayHelper::getValue($this->sizeSuffixes, $size, $this->defaultSizeSuffix . $size); | |
131 | + } | |
132 | + return $suffixes; | |
133 | + } | |
134 | +} | |
0 | 135 | \ No newline at end of file | ... | ... |
1 | +<?php | |
2 | + | |
3 | +namespace common\components\artboximage\drivers\Image; | |
4 | + | |
5 | +use common\components\artboximage\drivers\Kohana\Image\Kohana_Image_GD; | |
6 | + | |
7 | +/** | |
8 | + * Support for image manipulation using [Imagick](http://php.net/Imagick). | |
9 | + * | |
10 | + * @package Kohana/Image | |
11 | + * @category Drivers | |
12 | + * @author Tamas Mihalik tamas.mihalik@gmail.com | |
13 | + * @copyright (c) 2009-2012 Kohana Team | |
14 | + * @license http://kohanaphp.com/license.html | |
15 | + */ | |
16 | +class Image_GD extends Kohana_Image_GD {} | |
17 | + | |
18 | +?> | |
0 | 19 | \ No newline at end of file | ... | ... |
common/components/artboximage/drivers/Image/Imagick.php
0 → 100644
1 | +<?php | |
2 | + | |
3 | +namespace common\components\artboximage\drivers\Image; | |
4 | +use common\components\artboximage\drivers\Kohana\Image\Kohana_Image_Imagick; | |
5 | + | |
6 | +/** | |
7 | + * Support for image manipulation using [Imagick](http://php.net/Imagick). | |
8 | + * | |
9 | + * @package Kohana/Image | |
10 | + * @category Drivers | |
11 | + * @author Tamas Mihalik tamas.mihalik@gmail.com | |
12 | + * @copyright (c) 2009-2012 Kohana Team | |
13 | + * @license http://kohanaphp.com/license.html | |
14 | + */ | |
15 | +class Image_Imagick extends Kohana_Image_Imagick {} | |
0 | 16 | \ No newline at end of file | ... | ... |
common/components/artboximage/drivers/Kohana/Image/GD.php
0 → 100644
1 | +<?php | |
2 | +namespace common\components\artboximage\drivers\Kohana\Image; | |
3 | + | |
4 | +use common\components\artboximage\drivers\Kohana\Kohana_Image; | |
5 | +use yii\base\ErrorException; | |
6 | +/** | |
7 | + * Support for image manipulation using [GD](http://php.net/GD). | |
8 | + * | |
9 | + * @package Kohana/Image | |
10 | + * @category Drivers | |
11 | + * @author Kohana Team | |
12 | + * @copyright (c) 2008-2009 Kohana Team | |
13 | + * @license http://kohanaphp.com/license.html | |
14 | + */ | |
15 | +class Kohana_Image_GD extends Kohana_Image { | |
16 | + | |
17 | + // Which GD functions are available? | |
18 | + const IMAGEROTATE = 'imagerotate'; | |
19 | + const IMAGECONVOLUTION = 'imageconvolution'; | |
20 | + const IMAGEFILTER = 'imagefilter'; | |
21 | + const IMAGELAYEREFFECT = 'imagelayereffect'; | |
22 | + protected static $_available_functions = array(); | |
23 | + | |
24 | + /** | |
25 | + * Checks if GD is enabled and verify that key methods exist, some of which require GD to | |
26 | + * be bundled with PHP. Exceptions will be thrown from those methods when GD is not | |
27 | + * bundled. | |
28 | + * | |
29 | + * @return boolean | |
30 | + */ | |
31 | + public static function check() | |
32 | + { | |
33 | + if ( ! function_exists('gd_info')) | |
34 | + { | |
35 | + throw new ErrorException('GD is either not installed or not enabled, check your configuration'); | |
36 | + } | |
37 | + $functions = array( | |
38 | + Image_GD::IMAGEROTATE, | |
39 | + Image_GD::IMAGECONVOLUTION, | |
40 | + Image_GD::IMAGEFILTER, | |
41 | + Image_GD::IMAGELAYEREFFECT | |
42 | + ); | |
43 | + foreach ($functions as $function) | |
44 | + { | |
45 | + Image_GD::$_available_functions[$function] = function_exists($function); | |
46 | + } | |
47 | + | |
48 | + if (defined('GD_VERSION')) | |
49 | + { | |
50 | + // Get the version via a constant, available in PHP 5.2.4+ | |
51 | + $version = GD_VERSION; | |
52 | + } | |
53 | + else | |
54 | + { | |
55 | + // Get the version information | |
56 | + $info = gd_info(); | |
57 | + | |
58 | + // Extract the version number | |
59 | + preg_match('/\d+\.\d+(?:\.\d+)?/', $info['GD Version'], $matches); | |
60 | + | |
61 | + // Get the major version | |
62 | + $version = $matches[0]; | |
63 | + } | |
64 | + | |
65 | + if ( ! version_compare($version, '2.0.1', '>=')) | |
66 | + { | |
67 | + throw new ErrorException(sprintf('Image_GD requires GD version 2.0.1 or greater, you have %s',$version)); | |
68 | + } | |
69 | + | |
70 | + return Image_GD::$_checked = TRUE; | |
71 | + } | |
72 | + | |
73 | + /* @var resource Temporary image resource */ | |
74 | + protected $_image; | |
75 | + | |
76 | + /* @var string Function name to open Image */ | |
77 | + protected $_create_function; | |
78 | + | |
79 | + /** | |
80 | + * Runs [Image_GD::check] and loads the image. | |
81 | + * | |
82 | + * @param string $file image file path | |
83 | + * @return void | |
84 | + * @throws ErrorException | |
85 | + */ | |
86 | + public function __construct($file) | |
87 | + { | |
88 | + if ( ! Image_GD::$_checked) | |
89 | + { | |
90 | + // Run the install check | |
91 | + Image_GD::check(); | |
92 | + } | |
93 | + | |
94 | + parent::__construct($file); | |
95 | + | |
96 | + // Set the image creation function name | |
97 | + switch ($this->type) | |
98 | + { | |
99 | + case IMAGETYPE_JPEG: | |
100 | + $create = 'imagecreatefromjpeg'; | |
101 | + break; | |
102 | + case IMAGETYPE_GIF: | |
103 | + $create = 'imagecreatefromgif'; | |
104 | + break; | |
105 | + case IMAGETYPE_PNG: | |
106 | + $create = 'imagecreatefrompng'; | |
107 | + break; | |
108 | + } | |
109 | + | |
110 | + if ( ! isset($create) OR ! function_exists($create)) | |
111 | + { | |
112 | + throw new ErrorException(sprintf('Installed GD does not support %s images',image_type_to_extension($this->type, FALSE))); | |
113 | + } | |
114 | + | |
115 | + // Save function for future use | |
116 | + $this->_create_function = $create; | |
117 | + | |
118 | + // Save filename for lazy loading | |
119 | + $this->_image = $this->file; | |
120 | + } | |
121 | + | |
122 | + /** | |
123 | + * Destroys the loaded image to free up resources. | |
124 | + * | |
125 | + * @return void | |
126 | + */ | |
127 | + public function __destruct() | |
128 | + { | |
129 | + if (is_resource($this->_image)) | |
130 | + { | |
131 | + // Free all resources | |
132 | + imagedestroy($this->_image); | |
133 | + } | |
134 | + } | |
135 | + | |
136 | + /** | |
137 | + * Loads an image into GD. | |
138 | + * | |
139 | + * @return void | |
140 | + */ | |
141 | + protected function _load_image() | |
142 | + { | |
143 | + if ( ! is_resource($this->_image)) | |
144 | + { | |
145 | + // Gets create function | |
146 | + $create = $this->_create_function; | |
147 | + | |
148 | + // Open the temporary image | |
149 | + $this->_image = $create($this->file); | |
150 | + | |
151 | + // Preserve transparency when saving | |
152 | + imagesavealpha($this->_image, TRUE); | |
153 | + } | |
154 | + } | |
155 | + | |
156 | + /** | |
157 | + * Execute a resize. | |
158 | + * | |
159 | + * @param integer $width new width | |
160 | + * @param integer $height new height | |
161 | + * @return void | |
162 | + */ | |
163 | + protected function _do_resize($width, $height) | |
164 | + { | |
165 | + // Presize width and height | |
166 | + $pre_width = $this->width; | |
167 | + $pre_height = $this->height; | |
168 | + | |
169 | + // Loads image if not yet loaded | |
170 | + $this->_load_image(); | |
171 | + | |
172 | + // Test if we can do a resize without resampling to speed up the final resize | |
173 | + if ($width > ($this->width / 2) AND $height > ($this->height / 2)) | |
174 | + { | |
175 | + // The maximum reduction is 10% greater than the final size | |
176 | + $reduction_width = round($width * 1.1); | |
177 | + $reduction_height = round($height * 1.1); | |
178 | + | |
179 | + while ($pre_width / 2 > $reduction_width AND $pre_height / 2 > $reduction_height) | |
180 | + { | |
181 | + // Reduce the size using an O(2n) algorithm, until it reaches the maximum reduction | |
182 | + $pre_width /= 2; | |
183 | + $pre_height /= 2; | |
184 | + } | |
185 | + | |
186 | + // Create the temporary image to copy to | |
187 | + $image = $this->_create($pre_width, $pre_height); | |
188 | + | |
189 | + if (imagecopyresized($image, $this->_image, 0, 0, 0, 0, $pre_width, $pre_height, $this->width, $this->height)) | |
190 | + { | |
191 | + // Swap the new image for the old one | |
192 | + imagedestroy($this->_image); | |
193 | + $this->_image = $image; | |
194 | + } | |
195 | + } | |
196 | + | |
197 | + // Create the temporary image to copy to | |
198 | + $image = $this->_create($width, $height); | |
199 | + | |
200 | + // Execute the resize | |
201 | + if (imagecopyresampled($image, $this->_image, 0, 0, 0, 0, $width, $height, $pre_width, $pre_height)) | |
202 | + { | |
203 | + // Swap the new image for the old one | |
204 | + imagedestroy($this->_image); | |
205 | + $this->_image = $image; | |
206 | + | |
207 | + // Reset the width and height | |
208 | + $this->width = imagesx($image); | |
209 | + $this->height = imagesy($image); | |
210 | + } | |
211 | + } | |
212 | + | |
213 | + /** | |
214 | + * Adaptation the image. | |
215 | + * | |
216 | + * @param integer $width image width | |
217 | + * @param integer $height image height | |
218 | + * @param integer $bg_width background width | |
219 | + * @param integer $bg_height background height | |
220 | + * @param integer $offset_x offset from the left | |
221 | + * @param integer $offset_y offset from the top | |
222 | + */ | |
223 | + protected function _do_adapt($width, $height, $bg_width, $bg_height, $offset_x, $offset_y) | |
224 | + { | |
225 | + $this->_load_image(); | |
226 | + $image = $this->_image; | |
227 | + $this->_image = $this->_create($bg_width, $bg_height); | |
228 | + $this->width = $bg_width; | |
229 | + $this->height = $bg_height; | |
230 | + imagealphablending($this->_image, false); | |
231 | + $col = imagecolorallocatealpha($this->_image, 0, 255, 0, 127); | |
232 | + imagefilledrectangle($this->_image, 0, 0, $bg_width, $bg_height, $col); | |
233 | + imagealphablending($this->_image, true); | |
234 | + imagecopy($this->_image, $image, $offset_x, $offset_y, 0, 0, $width, $height); | |
235 | + imagealphablending($this->_image, false); | |
236 | + imagesavealpha($this->_image, true); | |
237 | + imagedestroy($image); | |
238 | + } | |
239 | + | |
240 | + /** | |
241 | + * Execute a crop. | |
242 | + * | |
243 | + * @param integer $width new width | |
244 | + * @param integer $height new height | |
245 | + * @param integer $offset_x offset from the left | |
246 | + * @param integer $offset_y offset from the top | |
247 | + * @return void | |
248 | + */ | |
249 | + protected function _do_crop($width, $height, $offset_x, $offset_y) | |
250 | + { | |
251 | + // Create the temporary image to copy to | |
252 | + $image = $this->_create($width, $height); | |
253 | + | |
254 | + // Loads image if not yet loaded | |
255 | + $this->_load_image(); | |
256 | + | |
257 | + // Execute the crop | |
258 | + if (imagecopyresampled($image, $this->_image, 0, 0, $offset_x, $offset_y, $width, $height, $width, $height)) | |
259 | + { | |
260 | + // Swap the new image for the old one | |
261 | + imagedestroy($this->_image); | |
262 | + $this->_image = $image; | |
263 | + | |
264 | + // Reset the width and height | |
265 | + $this->width = imagesx($image); | |
266 | + $this->height = imagesy($image); | |
267 | + } | |
268 | + } | |
269 | + | |
270 | + /** | |
271 | + * Execute a rotation. | |
272 | + * | |
273 | + * @param integer $degrees degrees to rotate | |
274 | + * @return void | |
275 | + */ | |
276 | + protected function _do_rotate($degrees) | |
277 | + { | |
278 | + if (empty(Image_GD::$_available_functions[Image_GD::IMAGEROTATE])) | |
279 | + { | |
280 | + throw new ErrorException('This method requires imagerotate, which is only available in the bundled version of GD'); | |
281 | + } | |
282 | + | |
283 | + // Loads image if not yet loaded | |
284 | + $this->_load_image(); | |
285 | + | |
286 | + // Transparent black will be used as the background for the uncovered region | |
287 | + $transparent = imagecolorallocatealpha($this->_image, 0, 0, 0, 127); | |
288 | + | |
289 | + // Rotate, setting the transparent color | |
290 | + $image = imagerotate($this->_image, 360 - $degrees, $transparent, 1); | |
291 | + | |
292 | + // Save the alpha of the rotated image | |
293 | + imagesavealpha($image, TRUE); | |
294 | + | |
295 | + // Get the width and height of the rotated image | |
296 | + $width = imagesx($image); | |
297 | + $height = imagesy($image); | |
298 | + | |
299 | + if (imagecopymerge($this->_image, $image, 0, 0, 0, 0, $width, $height, 100)) | |
300 | + { | |
301 | + // Swap the new image for the old one | |
302 | + imagedestroy($this->_image); | |
303 | + $this->_image = $image; | |
304 | + | |
305 | + // Reset the width and height | |
306 | + $this->width = $width; | |
307 | + $this->height = $height; | |
308 | + } | |
309 | + } | |
310 | + | |
311 | + /** | |
312 | + * Execute a flip. | |
313 | + * | |
314 | + * @param integer $direction direction to flip | |
315 | + * @return void | |
316 | + */ | |
317 | + protected function _do_flip($direction) | |
318 | + { | |
319 | + // Create the flipped image | |
320 | + $flipped = $this->_create($this->width, $this->height); | |
321 | + | |
322 | + // Loads image if not yet loaded | |
323 | + $this->_load_image(); | |
324 | + | |
325 | + if ($direction === Image::HORIZONTAL) | |
326 | + { | |
327 | + for ($x = 0; $x < $this->width; $x++) | |
328 | + { | |
329 | + // Flip each row from top to bottom | |
330 | + imagecopy($flipped, $this->_image, $x, 0, $this->width - $x - 1, 0, 1, $this->height); | |
331 | + } | |
332 | + } | |
333 | + else | |
334 | + { | |
335 | + for ($y = 0; $y < $this->height; $y++) | |
336 | + { | |
337 | + // Flip each column from left to right | |
338 | + imagecopy($flipped, $this->_image, 0, $y, 0, $this->height - $y - 1, $this->width, 1); | |
339 | + } | |
340 | + } | |
341 | + | |
342 | + // Swap the new image for the old one | |
343 | + imagedestroy($this->_image); | |
344 | + $this->_image = $flipped; | |
345 | + | |
346 | + // Reset the width and height | |
347 | + $this->width = imagesx($flipped); | |
348 | + $this->height = imagesy($flipped); | |
349 | + } | |
350 | + | |
351 | + /** | |
352 | + * Execute a sharpen. | |
353 | + * | |
354 | + * @param integer $amount amount to sharpen | |
355 | + * @return void | |
356 | + */ | |
357 | + protected function _do_sharpen($amount) | |
358 | + { | |
359 | + if (empty(Image_GD::$_available_functions[Image_GD::IMAGECONVOLUTION])) | |
360 | + { | |
361 | + throw new ErrorException('This method requires imageconvolution, which is only available in the bundled version of GD'); | |
362 | + } | |
363 | + | |
364 | + // Loads image if not yet loaded | |
365 | + $this->_load_image(); | |
366 | + | |
367 | + // Amount should be in the range of 18-10 | |
368 | + $amount = round(abs(-18 + ($amount * 0.08)), 2); | |
369 | + | |
370 | + // Gaussian blur matrix | |
371 | + $matrix = array | |
372 | + ( | |
373 | + array(-1, -1, -1), | |
374 | + array(-1, $amount, -1), | |
375 | + array(-1, -1, -1), | |
376 | + ); | |
377 | + | |
378 | + // Perform the sharpen | |
379 | + if (imageconvolution($this->_image, $matrix, $amount - 8, 0)) | |
380 | + { | |
381 | + // Reset the width and height | |
382 | + $this->width = imagesx($this->_image); | |
383 | + $this->height = imagesy($this->_image); | |
384 | + } | |
385 | + } | |
386 | + | |
387 | + /** | |
388 | + * Execute a reflection. | |
389 | + * | |
390 | + * @param integer $height reflection height | |
391 | + * @param integer $opacity reflection opacity | |
392 | + * @param boolean $fade_in TRUE to fade out, FALSE to fade in | |
393 | + * @return void | |
394 | + */ | |
395 | + protected function _do_reflection($height, $opacity, $fade_in) | |
396 | + { | |
397 | + if (empty(Image_GD::$_available_functions[Image_GD::IMAGEFILTER])) | |
398 | + { | |
399 | + throw new ErrorException('This method requires imagefilter, which is only available in the bundled version of GD'); | |
400 | + } | |
401 | + | |
402 | + // Loads image if not yet loaded | |
403 | + $this->_load_image(); | |
404 | + | |
405 | + // Convert an opacity range of 0-100 to 127-0 | |
406 | + $opacity = round(abs(($opacity * 127 / 100) - 127)); | |
407 | + | |
408 | + if ($opacity < 127) | |
409 | + { | |
410 | + // Calculate the opacity stepping | |
411 | + $stepping = (127 - $opacity) / $height; | |
412 | + } | |
413 | + else | |
414 | + { | |
415 | + // Avoid a "divide by zero" error | |
416 | + $stepping = 127 / $height; | |
417 | + } | |
418 | + | |
419 | + // Create the reflection image | |
420 | + $reflection = $this->_create($this->width, $this->height + $height); | |
421 | + | |
422 | + // Copy the image to the reflection | |
423 | + imagecopy($reflection, $this->_image, 0, 0, 0, 0, $this->width, $this->height); | |
424 | + | |
425 | + for ($offset = 0; $height >= $offset; $offset++) | |
426 | + { | |
427 | + // Read the next line down | |
428 | + $src_y = $this->height - $offset - 1; | |
429 | + | |
430 | + // Place the line at the bottom of the reflection | |
431 | + $dst_y = $this->height + $offset; | |
432 | + | |
433 | + if ($fade_in === TRUE) | |
434 | + { | |
435 | + // Start with the most transparent line first | |
436 | + $dst_opacity = round($opacity + ($stepping * ($height - $offset))); | |
437 | + } | |
438 | + else | |
439 | + { | |
440 | + // Start with the most opaque line first | |
441 | + $dst_opacity = round($opacity + ($stepping * $offset)); | |
442 | + } | |
443 | + | |
444 | + // Create a single line of the image | |
445 | + $line = $this->_create($this->width, 1); | |
446 | + | |
447 | + // Copy a single line from the current image into the line | |
448 | + imagecopy($line, $this->_image, 0, 0, 0, $src_y, $this->width, 1); | |
449 | + | |
450 | + // Colorize the line to add the correct alpha level | |
451 | + imagefilter($line, IMG_FILTER_COLORIZE, 0, 0, 0, $dst_opacity); | |
452 | + | |
453 | + // Copy a the line into the reflection | |
454 | + imagecopy($reflection, $line, 0, $dst_y, 0, 0, $this->width, 1); | |
455 | + } | |
456 | + | |
457 | + // Swap the new image for the old one | |
458 | + imagedestroy($this->_image); | |
459 | + $this->_image = $reflection; | |
460 | + | |
461 | + // Reset the width and height | |
462 | + $this->width = imagesx($reflection); | |
463 | + $this->height = imagesy($reflection); | |
464 | + } | |
465 | + | |
466 | + /** | |
467 | + * Execute a watermarking. | |
468 | + * | |
469 | + * @param Kohana_Image $image watermarking Kohana_Image | |
470 | + * @param integer $offset_x offset from the left | |
471 | + * @param integer $offset_y offset from the top | |
472 | + * @param integer $opacity opacity of watermark | |
473 | + * @return void | |
474 | + */ | |
475 | + protected function _do_watermark(Kohana_Image $watermark, $offset_x, $offset_y, $opacity) | |
476 | + { | |
477 | + if (empty(Image_GD::$_available_functions[Image_GD::IMAGELAYEREFFECT])) | |
478 | + { | |
479 | + throw new ErrorException('This method requires imagelayereffect, which is only available in the bundled version of GD'); | |
480 | + } | |
481 | + | |
482 | + // Loads image if not yet loaded | |
483 | + $this->_load_image(); | |
484 | + | |
485 | + // Create the watermark image resource | |
486 | + $overlay = imagecreatefromstring($watermark->render()); | |
487 | + | |
488 | + imagesavealpha($overlay, TRUE); | |
489 | + | |
490 | + // Get the width and height of the watermark | |
491 | + $width = imagesx($overlay); | |
492 | + $height = imagesy($overlay); | |
493 | + | |
494 | + if ($opacity < 100) | |
495 | + { | |
496 | + // Convert an opacity range of 0-100 to 127-0 | |
497 | + $opacity = round(abs(($opacity * 127 / 100) - 127)); | |
498 | + | |
499 | + // Allocate transparent gray | |
500 | + $color = imagecolorallocatealpha($overlay, 127, 127, 127, $opacity); | |
501 | + | |
502 | + // The transparent image will overlay the watermark | |
503 | + imagelayereffect($overlay, IMG_EFFECT_OVERLAY); | |
504 | + | |
505 | + // Fill the background with the transparent color | |
506 | + imagefilledrectangle($overlay, 0, 0, $width, $height, $color); | |
507 | + } | |
508 | + | |
509 | + // Alpha blending must be enabled on the background! | |
510 | + imagealphablending($this->_image, TRUE); | |
511 | + | |
512 | + if (imagecopy($this->_image, $overlay, $offset_x, $offset_y, 0, 0, $width, $height)) | |
513 | + { | |
514 | + // Destroy the overlay image | |
515 | + imagedestroy($overlay); | |
516 | + } | |
517 | + } | |
518 | + | |
519 | + /** | |
520 | + * Execute a background. | |
521 | + * | |
522 | + * @param integer $r red | |
523 | + * @param integer $g green | |
524 | + * @param integer $b blue | |
525 | + * @param integer $opacity opacity | |
526 | + * @return void | |
527 | + */ | |
528 | + protected function _do_background($r, $g, $b, $opacity) | |
529 | + { | |
530 | + // Loads image if not yet loaded | |
531 | + $this->_load_image(); | |
532 | + | |
533 | + // Convert an opacity range of 0-100 to 127-0 | |
534 | + $opacity = round(abs(($opacity * 127 / 100) - 127)); | |
535 | + | |
536 | + // Create a new background | |
537 | + $background = $this->_create($this->width, $this->height); | |
538 | + | |
539 | + // Allocate the color | |
540 | + $color = imagecolorallocatealpha($background, $r, $g, $b, $opacity); | |
541 | + | |
542 | + // Fill the image with white | |
543 | + imagefilledrectangle($background, 0, 0, $this->width, $this->height, $color); | |
544 | + | |
545 | + // Alpha blending must be enabled on the background! | |
546 | + imagealphablending($background, TRUE); | |
547 | + | |
548 | + // Copy the image onto a white background to remove all transparency | |
549 | + if (imagecopy($background, $this->_image, 0, 0, 0, 0, $this->width, $this->height)) | |
550 | + { | |
551 | + // Swap the new image for the old one | |
552 | + imagedestroy($this->_image); | |
553 | + $this->_image = $background; | |
554 | + } | |
555 | + } | |
556 | + | |
557 | + /** | |
558 | + * Execute a save. | |
559 | + * | |
560 | + * @param string $file new image filename | |
561 | + * @param integer $quality quality | |
562 | + * @return boolean | |
563 | + */ | |
564 | + protected function _do_save($file, $quality) | |
565 | + { | |
566 | + // Loads image if not yet loaded | |
567 | + $this->_load_image(); | |
568 | + | |
569 | + // Get the extension of the file | |
570 | + $extension = pathinfo($file, PATHINFO_EXTENSION); | |
571 | + | |
572 | + // Get the save function and IMAGETYPE | |
573 | + list($save, $type) = $this->_save_function($extension, $quality); | |
574 | + | |
575 | + // Save the image to a file | |
576 | + $status = isset($quality) ? $save($this->_image, $file, $quality) : $save($this->_image, $file); | |
577 | + | |
578 | + if ($status === TRUE AND $type !== $this->type) | |
579 | + { | |
580 | + // Reset the image type and mime type | |
581 | + $this->type = $type; | |
582 | + $this->mime = image_type_to_mime_type($type); | |
583 | + } | |
584 | + | |
585 | + return TRUE; | |
586 | + } | |
587 | + | |
588 | + /** | |
589 | + * Execute a render. | |
590 | + * | |
591 | + * @param string $type image type: png, jpg, gif, etc | |
592 | + * @param integer $quality quality | |
593 | + * @return string | |
594 | + */ | |
595 | + protected function _do_render($type, $quality) | |
596 | + { | |
597 | + // Loads image if not yet loaded | |
598 | + $this->_load_image(); | |
599 | + | |
600 | + // Get the save function and IMAGETYPE | |
601 | + list($save, $type) = $this->_save_function($type, $quality); | |
602 | + | |
603 | + // Capture the output | |
604 | + ob_start(); | |
605 | + | |
606 | + // Render the image | |
607 | + $status = isset($quality) ? $save($this->_image, NULL, $quality) : $save($this->_image, NULL); | |
608 | + | |
609 | + if ($status === TRUE AND $type !== $this->type) | |
610 | + { | |
611 | + // Reset the image type and mime type | |
612 | + $this->type = $type; | |
613 | + $this->mime = image_type_to_mime_type($type); | |
614 | + } | |
615 | + | |
616 | + return ob_get_clean(); | |
617 | + } | |
618 | + | |
619 | + /** | |
620 | + * Get the GD saving function and image type for this extension. | |
621 | + * Also normalizes the quality setting | |
622 | + * | |
623 | + * @param string $extension image type: png, jpg, etc | |
624 | + * @param integer $quality image quality | |
625 | + * @return array save function, IMAGETYPE_* constant | |
626 | + * @throws ErrorException | |
627 | + */ | |
628 | + protected function _save_function($extension, & $quality) | |
629 | + { | |
630 | + if ( ! $extension) | |
631 | + { | |
632 | + // Use the current image type | |
633 | + $extension = image_type_to_extension($this->type, FALSE); | |
634 | + } | |
635 | + | |
636 | + switch (strtolower($extension)) | |
637 | + { | |
638 | + case 'jpg': | |
639 | + case 'jpeg': | |
640 | + // Save a JPG file | |
641 | + $save = 'imagejpeg'; | |
642 | + $type = IMAGETYPE_JPEG; | |
643 | + break; | |
644 | + case 'gif': | |
645 | + // Save a GIF file | |
646 | + $save = 'imagegif'; | |
647 | + $type = IMAGETYPE_GIF; | |
648 | + | |
649 | + // GIFs do not a quality setting | |
650 | + $quality = NULL; | |
651 | + break; | |
652 | + case 'png': | |
653 | + // Save a PNG file | |
654 | + $save = 'imagepng'; | |
655 | + $type = IMAGETYPE_PNG; | |
656 | + | |
657 | + // Use a compression level of 9 (does not affect quality!) | |
658 | + $quality = 9; | |
659 | + break; | |
660 | + default: | |
661 | + throw new ErrorException(sprintf('Installed GD does not support %s images',$extension)); | |
662 | + break; | |
663 | + } | |
664 | + | |
665 | + return array($save, $type); | |
666 | + } | |
667 | + | |
668 | + /** | |
669 | + * Create an empty image with the given width and height. | |
670 | + * | |
671 | + * @param integer $width image width | |
672 | + * @param integer $height image height | |
673 | + * @return resource | |
674 | + */ | |
675 | + protected function _create($width, $height) | |
676 | + { | |
677 | + // Create an empty image | |
678 | + $image = imagecreatetruecolor($width, $height); | |
679 | + | |
680 | + // Do not apply alpha blending | |
681 | + imagealphablending($image, FALSE); | |
682 | + | |
683 | + // Save alpha levels | |
684 | + imagesavealpha($image, TRUE); | |
685 | + | |
686 | + return $image; | |
687 | + } | |
688 | + | |
689 | +} // End Image_GD | ... | ... |
common/components/artboximage/drivers/Kohana/Image/Imagick.php
0 → 100644
1 | +<?php | |
2 | +namespace common\components\artboximage\drivers\Kohana\Image; | |
3 | + | |
4 | +use common\components\artboximage\drivers\Kohana\Kohana_Image; | |
5 | +use yii\base\ErrorException; | |
6 | +use \Imagick; | |
7 | +use \ImagickPixel; | |
8 | +/** | |
9 | + * Support for image manipulation using [Imagick](http://php.net/Imagick). | |
10 | + * | |
11 | + * @package Kohana/Image | |
12 | + * @category Drivers | |
13 | + * @author Tamas Mihalik tamas.mihalik@gmail.com | |
14 | + * @copyright (c) 2009-2012 Kohana Team | |
15 | + * @license http://kohanaphp.com/license.html | |
16 | + */ | |
17 | + | |
18 | +class Kohana_Image_Imagick extends Kohana_Image { | |
19 | + | |
20 | + /** | |
21 | + * @var Imagick image magick object | |
22 | + */ | |
23 | + protected $im; | |
24 | + | |
25 | + /** | |
26 | + * Checks if ImageMagick is enabled. | |
27 | + * | |
28 | + * @throws ErrorException | |
29 | + * @return boolean | |
30 | + */ | |
31 | + public static function check() | |
32 | + { | |
33 | + if ( ! extension_loaded('imagick')) | |
34 | + { | |
35 | + throw new ErrorException('Imagick is not installed, or the extension is not loaded'); | |
36 | + } | |
37 | + | |
38 | + return Image_Imagick::$_checked = TRUE; | |
39 | + } | |
40 | + | |
41 | + /** | |
42 | + * Runs [Image_Imagick::check] and loads the image. | |
43 | + * | |
44 | + * @return void | |
45 | + * @throws ErrorException | |
46 | + */ | |
47 | + public function __construct($file) | |
48 | + { | |
49 | + if ( ! Image_Imagick::$_checked) | |
50 | + { | |
51 | + // Run the install check | |
52 | + Image_Imagick::check(); | |
53 | + } | |
54 | + | |
55 | + parent::__construct($file); | |
56 | + | |
57 | + $this->im = new Imagick; | |
58 | + $this->im->readImage($file); | |
59 | + | |
60 | + if ( ! $this->im->getImageAlphaChannel()) | |
61 | + { | |
62 | + // Force the image to have an alpha channel | |
63 | + $this->im->setImageAlphaChannel(Imagick::ALPHACHANNEL_SET); | |
64 | + } | |
65 | + } | |
66 | + | |
67 | + /** | |
68 | + * Destroys the loaded image to free up resources. | |
69 | + * | |
70 | + * @return void | |
71 | + */ | |
72 | + public function __destruct() | |
73 | + { | |
74 | + $this->im->clear(); | |
75 | + $this->im->destroy(); | |
76 | + } | |
77 | + | |
78 | + protected function _do_resize($width, $height) | |
79 | + { | |
80 | + if ($this->im->scaleImage($width, $height)) | |
81 | + { | |
82 | + // Reset the width and height | |
83 | + $this->width = $this->im->getImageWidth(); | |
84 | + $this->height = $this->im->getImageHeight(); | |
85 | + | |
86 | + return TRUE; | |
87 | + } | |
88 | + | |
89 | + return FALSE; | |
90 | + } | |
91 | + | |
92 | + /** | |
93 | + * Adaptation the image. | |
94 | + * | |
95 | + * @param integer $width image width | |
96 | + * @param integer $height image height | |
97 | + * @param integer $bg_width background width | |
98 | + * @param integer $bg_height background height | |
99 | + * @param integer $offset_x offset from the left | |
100 | + * @param integer $offset_y offset from the top | |
101 | + */ | |
102 | + protected function _do_adapt($width, $height, $bg_width, $bg_height, $offset_x, $offset_y) | |
103 | + { | |
104 | + $image = new Imagick(); | |
105 | + $image->newImage($bg_width, $bg_height, "none"); | |
106 | + $image->compositeImage($this->im, Imagick::COMPOSITE_ADD, $offset_x, $offset_y); | |
107 | + $this->im->clear(); | |
108 | + $this->im->destroy(); | |
109 | + $this->im = $image; | |
110 | + $this->width = $bg_width; | |
111 | + $this->height = $bg_height; | |
112 | + } | |
113 | + | |
114 | + protected function _do_crop($width, $height, $offset_x, $offset_y) | |
115 | + { | |
116 | + if ($this->im->cropImage($width, $height, $offset_x, $offset_y)) | |
117 | + { | |
118 | + // Reset the width and height | |
119 | + $this->width = $this->im->getImageWidth(); | |
120 | + $this->height = $this->im->getImageHeight(); | |
121 | + | |
122 | + // Trim off hidden areas | |
123 | + $this->im->setImagePage($this->width, $this->height, 0, 0); | |
124 | + | |
125 | + return TRUE; | |
126 | + } | |
127 | + | |
128 | + return FALSE; | |
129 | + } | |
130 | + | |
131 | + protected function _do_rotate($degrees) | |
132 | + { | |
133 | + if ($this->im->rotateImage(new ImagickPixel('transparent'), $degrees)) | |
134 | + { | |
135 | + // Reset the width and height | |
136 | + $this->width = $this->im->getImageWidth(); | |
137 | + $this->height = $this->im->getImageHeight(); | |
138 | + | |
139 | + // Trim off hidden areas | |
140 | + $this->im->setImagePage($this->width, $this->height, 0, 0); | |
141 | + | |
142 | + return TRUE; | |
143 | + } | |
144 | + | |
145 | + return FALSE; | |
146 | + } | |
147 | + | |
148 | + protected function _do_flip($direction) | |
149 | + { | |
150 | + if ($direction === Image::HORIZONTAL) | |
151 | + { | |
152 | + return $this->im->flopImage(); | |
153 | + } | |
154 | + else | |
155 | + { | |
156 | + return $this->im->flipImage(); | |
157 | + } | |
158 | + } | |
159 | + | |
160 | + protected function _do_sharpen($amount) | |
161 | + { | |
162 | + // IM not support $amount under 5 (0.15) | |
163 | + $amount = ($amount < 5) ? 5 : $amount; | |
164 | + | |
165 | + // Amount should be in the range of 0.0 to 3.0 | |
166 | + $amount = ($amount * 3.0) / 100; | |
167 | + | |
168 | + return $this->im->sharpenImage(0, $amount); | |
169 | + } | |
170 | + | |
171 | + protected function _do_reflection($height, $opacity, $fade_in) | |
172 | + { | |
173 | + // Clone the current image and flip it for reflection | |
174 | + $reflection = $this->im->clone(); | |
175 | + $reflection->flipImage(); | |
176 | + | |
177 | + // Crop the reflection to the selected height | |
178 | + $reflection->cropImage($this->width, $height, 0, 0); | |
179 | + $reflection->setImagePage($this->width, $height, 0, 0); | |
180 | + | |
181 | + // Select the fade direction | |
182 | + $direction = array('transparent', 'black'); | |
183 | + | |
184 | + if ($fade_in) | |
185 | + { | |
186 | + // Change the direction of the fade | |
187 | + $direction = array_reverse($direction); | |
188 | + } | |
189 | + | |
190 | + // Create a gradient for fading | |
191 | + $fade = new Imagick; | |
192 | + $fade->newPseudoImage($reflection->getImageWidth(), $reflection->getImageHeight(), vsprintf('gradient:%s-%s', $direction)); | |
193 | + | |
194 | + // Apply the fade alpha channel to the reflection | |
195 | + $reflection->compositeImage($fade, Imagick::COMPOSITE_DSTOUT, 0, 0); | |
196 | + | |
197 | + // NOTE: Using setImageOpacity will destroy alpha channels! | |
198 | + $reflection->evaluateImage(Imagick::EVALUATE_MULTIPLY, $opacity / 100, Imagick::CHANNEL_ALPHA); | |
199 | + | |
200 | + // Create a new container to hold the image and reflection | |
201 | + $image = new Imagick; | |
202 | + $image->newImage($this->width, $this->height + $height, new ImagickPixel); | |
203 | + | |
204 | + // Force the image to have an alpha channel | |
205 | + $image->setImageAlphaChannel(Imagick::ALPHACHANNEL_SET); | |
206 | + | |
207 | + // Force the background color to be transparent | |
208 | + // $image->setImageBackgroundColor(new ImagickPixel('transparent')); | |
209 | + | |
210 | + // Match the colorspace between the two images before compositing | |
211 | + $image->setColorspace($this->im->getColorspace()); | |
212 | + | |
213 | + // Place the image and reflection into the container | |
214 | + if ($image->compositeImage($this->im, Imagick::COMPOSITE_SRC, 0, 0) | |
215 | + AND $image->compositeImage($reflection, Imagick::COMPOSITE_OVER, 0, $this->height)) | |
216 | + { | |
217 | + // Replace the current image with the reflected image | |
218 | + $this->im = $image; | |
219 | + | |
220 | + // Reset the width and height | |
221 | + $this->width = $this->im->getImageWidth(); | |
222 | + $this->height = $this->im->getImageHeight(); | |
223 | + | |
224 | + return TRUE; | |
225 | + } | |
226 | + | |
227 | + return FALSE; | |
228 | + } | |
229 | + | |
230 | + protected function _do_watermark(Kohana_Image $image, $offset_x, $offset_y, $opacity) | |
231 | + { | |
232 | + // Convert the Image intance into an Imagick instance | |
233 | + $watermark = new Imagick; | |
234 | + $watermark->readImageBlob($image->render(), $image->file); | |
235 | + | |
236 | + if ($watermark->getImageAlphaChannel() !== Imagick::ALPHACHANNEL_ACTIVATE) | |
237 | + { | |
238 | + // Force the image to have an alpha channel | |
239 | + $watermark->setImageAlphaChannel(Imagick::ALPHACHANNEL_OPAQUE); | |
240 | + } | |
241 | + | |
242 | + if ($opacity < 100) | |
243 | + { | |
244 | + // NOTE: Using setImageOpacity will destroy current alpha channels! | |
245 | + $watermark->evaluateImage(Imagick::EVALUATE_MULTIPLY, $opacity / 100, Imagick::CHANNEL_ALPHA); | |
246 | + } | |
247 | + | |
248 | + // Match the colorspace between the two images before compositing | |
249 | + // $watermark->setColorspace($this->im->getColorspace()); | |
250 | + | |
251 | + // Apply the watermark to the image | |
252 | + return $this->im->compositeImage($watermark, Imagick::COMPOSITE_DISSOLVE, $offset_x, $offset_y); | |
253 | + } | |
254 | + | |
255 | + protected function _do_background($r, $g, $b, $opacity) | |
256 | + { | |
257 | + // Create a RGB color for the background | |
258 | + $color = sprintf('rgb(%d, %d, %d)', $r, $g, $b); | |
259 | + | |
260 | + // Create a new image for the background | |
261 | + $background = new Imagick; | |
262 | + $background->newImage($this->width, $this->height, new ImagickPixel($color)); | |
263 | + | |
264 | + if ( ! $background->getImageAlphaChannel()) | |
265 | + { | |
266 | + // Force the image to have an alpha channel | |
267 | + $background->setImageAlphaChannel(Imagick::ALPHACHANNEL_SET); | |
268 | + } | |
269 | + | |
270 | + // Clear the background image | |
271 | + $background->setImageBackgroundColor(new ImagickPixel('transparent')); | |
272 | + | |
273 | + // NOTE: Using setImageOpacity will destroy current alpha channels! | |
274 | + $background->evaluateImage(Imagick::EVALUATE_MULTIPLY, $opacity / 100, Imagick::CHANNEL_ALPHA); | |
275 | + | |
276 | + // Match the colorspace between the two images before compositing | |
277 | + $background->setColorspace($this->im->getColorspace()); | |
278 | + | |
279 | + if ($background->compositeImage($this->im, Imagick::COMPOSITE_DISSOLVE, 0, 0)) | |
280 | + { | |
281 | + // Replace the current image with the new image | |
282 | + $this->im = $background; | |
283 | + | |
284 | + return TRUE; | |
285 | + } | |
286 | + | |
287 | + return FALSE; | |
288 | + } | |
289 | + | |
290 | + protected function _do_save($file, $quality) | |
291 | + { | |
292 | + // Get the image format and type | |
293 | + list($format, $type) = $this->_get_imagetype(pathinfo($file, PATHINFO_EXTENSION)); | |
294 | + | |
295 | + // Set the output image type | |
296 | + $this->im->setFormat($format); | |
297 | + | |
298 | + // Set the output quality | |
299 | + $this->im->setImageCompressionQuality($quality); | |
300 | + | |
301 | + if ($this->im->writeImage($file)) | |
302 | + { | |
303 | + // Reset the image type and mime type | |
304 | + $this->type = $type; | |
305 | + $this->mime = image_type_to_mime_type($type); | |
306 | + | |
307 | + return TRUE; | |
308 | + } | |
309 | + | |
310 | + return FALSE; | |
311 | + } | |
312 | + | |
313 | + protected function _do_render($type, $quality) | |
314 | + { | |
315 | + // Get the image format and type | |
316 | + list($format, $type) = $this->_get_imagetype($type); | |
317 | + | |
318 | + // Set the output image type | |
319 | + $this->im->setFormat($format); | |
320 | + | |
321 | + // Set the output quality | |
322 | + $this->im->setImageCompressionQuality($quality); | |
323 | + | |
324 | + // Reset the image type and mime type | |
325 | + $this->type = $type; | |
326 | + $this->mime = image_type_to_mime_type($type); | |
327 | + | |
328 | + return (string) $this->im; | |
329 | + } | |
330 | + | |
331 | + /** | |
332 | + * Get the image type and format for an extension. | |
333 | + * | |
334 | + * @param string $extension image extension: png, jpg, etc | |
335 | + * @return string IMAGETYPE_* constant | |
336 | + * @throws ErrorException | |
337 | + */ | |
338 | + protected function _get_imagetype($extension) | |
339 | + { | |
340 | + // Normalize the extension to a format | |
341 | + $format = strtolower($extension); | |
342 | + | |
343 | + switch ($format) | |
344 | + { | |
345 | + case 'jpg': | |
346 | + case 'jpeg': | |
347 | + $type = IMAGETYPE_JPEG; | |
348 | + break; | |
349 | + case 'gif': | |
350 | + $type = IMAGETYPE_GIF; | |
351 | + break; | |
352 | + case 'png': | |
353 | + $type = IMAGETYPE_PNG; | |
354 | + break; | |
355 | + default: | |
356 | + throw new ErrorException(sprintf('Installed ImageMagick does not support %s images',$extension)); | |
357 | + break; | |
358 | + } | |
359 | + | |
360 | + return array($format, $type); | |
361 | + } | |
362 | +} // End Kohana_Image_Imagick | ... | ... |
common/components/artboximage/drivers/Kohana/Kohana_Image.php
0 → 100644
1 | +<?php | |
2 | +namespace common\components\artboximage\drivers\Kohana; | |
3 | + | |
4 | +use common\components\artboximage\drivers\Image; | |
5 | +use yii\base\ErrorException; | |
6 | +/** | |
7 | + * Image manipulation support. Allows images to be resized, cropped, etc. | |
8 | + * | |
9 | + * @package Kohana/Image | |
10 | + * @category Base | |
11 | + * @author Kohana Team | |
12 | + * @copyright (c) 2008-2009 Kohana Team | |
13 | + * @license http://kohanaphp.com/license.html | |
14 | + */ | |
15 | +abstract class Kohana_Image { | |
16 | + | |
17 | + // Resizing constraints | |
18 | + const NONE = 0x01; | |
19 | + const WIDTH = 0x02; | |
20 | + const HEIGHT = 0x03; | |
21 | + const AUTO = 0x04; | |
22 | + const INVERSE = 0x05; | |
23 | + const PRECISE = 0x06; | |
24 | + const ADAPT = 0x07; | |
25 | + const CROP = 0x08; | |
26 | + | |
27 | + // Flipping directions | |
28 | + const HORIZONTAL = 0x11; | |
29 | + const VERTICAL = 0x12; | |
30 | + | |
31 | + /** | |
32 | + * @var string default driver: GD, ImageMagick, etc | |
33 | + */ | |
34 | + public static $default_driver = 'GD'; | |
35 | + | |
36 | + // Status of the driver check | |
37 | + protected static $_checked = FALSE; | |
38 | + | |
39 | + /** | |
40 | + * Loads an image and prepares it for manipulation. | |
41 | + * | |
42 | + * $image = Image::factory('upload/test.jpg'); | |
43 | + * | |
44 | + * @param string $file image file path | |
45 | + * @param string $driver driver type: GD, ImageMagick, etc | |
46 | + * @return Image | |
47 | + * @uses Image::$default_driver | |
48 | + */ | |
49 | + public static function factory($file, $driver = NULL) | |
50 | + { | |
51 | + if ($driver === NULL) | |
52 | + { | |
53 | + | |
54 | + // Use the default driver | |
55 | + $driver = Image::$default_driver; | |
56 | + } | |
57 | + | |
58 | + // Set the class name | |
59 | + $class = 'Image_'.$driver; | |
60 | + | |
61 | + return new Image\Image_GD(); // $class($file); | |
62 | + } | |
63 | + | |
64 | + /** | |
65 | + * @var string image file path | |
66 | + */ | |
67 | + public $file; | |
68 | + | |
69 | + /** | |
70 | + * @var integer image width | |
71 | + */ | |
72 | + public $width; | |
73 | + | |
74 | + /** | |
75 | + * @var integer image height | |
76 | + */ | |
77 | + public $height; | |
78 | + | |
79 | + /** | |
80 | + * @var integer one of the IMAGETYPE_* constants | |
81 | + */ | |
82 | + public $type; | |
83 | + | |
84 | + /** | |
85 | + * @var string mime type of the image | |
86 | + */ | |
87 | + public $mime; | |
88 | + | |
89 | + /** | |
90 | + * Loads information about the image. Will throw an exception if the image | |
91 | + * does not exist or is not an image. | |
92 | + * | |
93 | + * @param string $file image file path | |
94 | + * @return void | |
95 | + * @throws ErrorException | |
96 | + */ | |
97 | + public function __construct($file) | |
98 | + { | |
99 | + try | |
100 | + { | |
101 | + // Get the real path to the file | |
102 | + $file = realpath($file); | |
103 | + | |
104 | + // Get the image information | |
105 | + $info = getimagesize($file); | |
106 | + } | |
107 | + catch (Exception $e) | |
108 | + { | |
109 | + // Ignore all errors while reading the image | |
110 | + } | |
111 | + | |
112 | + if (empty($file) OR empty($info)) | |
113 | + { | |
114 | + throw new ErrorException(sprintf('Not an image or invalid image: %s',$file)); | |
115 | + } | |
116 | + | |
117 | + // Store the image information | |
118 | + $this->file = $file; | |
119 | + $this->width = $info[0]; | |
120 | + $this->height = $info[1]; | |
121 | + $this->type = $info[2]; | |
122 | + $this->mime = image_type_to_mime_type($this->type); | |
123 | + } | |
124 | + | |
125 | + /** | |
126 | + * Render the current image. | |
127 | + * | |
128 | + * echo $image; | |
129 | + * | |
130 | + * [!!] The output of this function is binary and must be rendered with the | |
131 | + * appropriate Content-Type header or it will not be displayed correctly! | |
132 | + * | |
133 | + * @return string | |
134 | + */ | |
135 | + public function __toString() | |
136 | + { | |
137 | + try | |
138 | + { | |
139 | + // Render the current image | |
140 | + return $this->render(); | |
141 | + } | |
142 | + catch (ErrorException $e) | |
143 | + { | |
144 | + /* | |
145 | + if (is_object(Kohana::$log)) | |
146 | + { | |
147 | + // Get the text of the exception | |
148 | + $error = ErrorException::text($e); | |
149 | + | |
150 | + // Add this exception to the log | |
151 | + Yii::error($error); | |
152 | + } | |
153 | + */ | |
154 | + | |
155 | + // Showing any kind of error will be "inside" image data | |
156 | + return ''; | |
157 | + } | |
158 | + } | |
159 | + | |
160 | + /** | |
161 | + * Resize the image to the given size. Either the width or the height can | |
162 | + * be omitted and the image will be resized proportionally. | |
163 | + * | |
164 | + * // Resize to 200 pixels on the shortest side | |
165 | + * $image->resize(200, 200); | |
166 | + * | |
167 | + * // Resize to 200x200 pixels, keeping aspect ratio | |
168 | + * $image->resize(200, 200, Image::INVERSE); | |
169 | + * | |
170 | + * // Resize to 500 pixel width, keeping aspect ratio | |
171 | + * $image->resize(500, NULL); | |
172 | + * | |
173 | + * // Resize to 500 pixel height, keeping aspect ratio | |
174 | + * $image->resize(NULL, 500); | |
175 | + * | |
176 | + * // Resize to 200x500 pixels, ignoring aspect ratio | |
177 | + * $image->resize(200, 500, Image::NONE); | |
178 | + * | |
179 | + * // Resize to 400 pixels on the shortest side, puts it in the center | |
180 | + * // of the image with the transparent edges, keeping aspect ratio, | |
181 | + * // output size will be 400x400 pixels | |
182 | + * $image->resize(400, 400, Image::ADAPT); | |
183 | + * | |
184 | + * @param integer $width new width | |
185 | + * @param integer $height new height | |
186 | + * @param integer $master master dimension | |
187 | + * @return $this | |
188 | + * @uses Image::_do_resize | |
189 | + */ | |
190 | + public function resize($width = NULL, $height = NULL, $master = NULL) | |
191 | + { | |
192 | + if ($master === NULL) | |
193 | + { | |
194 | + // Choose the master dimension automatically | |
195 | + $master = Image::AUTO; | |
196 | + } | |
197 | + elseif ($master === Image::CROP) | |
198 | + { | |
199 | + if (empty($width) || empty($height)) | |
200 | + { | |
201 | + return $this->resize($width, $height, Image::AUTO); | |
202 | + } | |
203 | + | |
204 | + $master = $this->width / $this->height > $width / $height ? Image::HEIGHT : Image::WIDTH; | |
205 | + $this->resize($width, $height, $master); | |
206 | + | |
207 | + if ($this->width !== $width || $this->height !== $height) | |
208 | + { | |
209 | + $offset_x = round(($this->width - $width) / 2); | |
210 | + $offset_y = round(($this->height - $height) / 2); | |
211 | + $this->crop($width, $height, $offset_x, $offset_y); | |
212 | + } | |
213 | + | |
214 | + return $this; | |
215 | + } | |
216 | + // Image::WIDTH and Image::HEIGHT deprecated. You can use it in old projects, | |
217 | + // but in new you must pass empty value for non-master dimension | |
218 | + elseif ($master == Image::WIDTH AND ! empty($width)) | |
219 | + { | |
220 | + $master = Image::AUTO; | |
221 | + | |
222 | + // Set empty height for backward compatibility | |
223 | + $height = NULL; | |
224 | + } | |
225 | + elseif ($master == Image::HEIGHT AND ! empty($height)) | |
226 | + { | |
227 | + $master = Image::AUTO; | |
228 | + | |
229 | + // Set empty width for backward compatibility | |
230 | + $width = NULL; | |
231 | + } | |
232 | + elseif ($master === Image::ADAPT) | |
233 | + { | |
234 | + if (empty($width)) | |
235 | + { | |
236 | + $width = $this->width * $height / $this->height; | |
237 | + } | |
238 | + elseif (empty($height)) | |
239 | + { | |
240 | + $height = $this->height * $width / $this->width; | |
241 | + } | |
242 | + } | |
243 | + | |
244 | + if (empty($width)) | |
245 | + { | |
246 | + if ($master === Image::NONE) | |
247 | + { | |
248 | + // Use the current width | |
249 | + $width = $this->width; | |
250 | + } | |
251 | + else | |
252 | + { | |
253 | + // If width not set, master will be height | |
254 | + $master = Image::HEIGHT; | |
255 | + } | |
256 | + } | |
257 | + | |
258 | + if (empty($height)) | |
259 | + { | |
260 | + if ($master === Image::NONE) | |
261 | + { | |
262 | + // Use the current height | |
263 | + $height = $this->height; | |
264 | + } | |
265 | + else | |
266 | + { | |
267 | + // If height not set, master will be width | |
268 | + $master = Image::WIDTH; | |
269 | + } | |
270 | + } | |
271 | + | |
272 | + switch ($master) | |
273 | + { | |
274 | + case Image::AUTO: | |
275 | + // Choose direction with the greatest reduction ratio | |
276 | + $master = ($this->width / $width) > ($this->height / $height) ? Image::WIDTH : Image::HEIGHT; | |
277 | + break; | |
278 | + case Image::INVERSE: | |
279 | + // Choose direction with the minimum reduction ratio | |
280 | + $master = ($this->width / $width) > ($this->height / $height) ? Image::HEIGHT : Image::WIDTH; | |
281 | + break; | |
282 | + } | |
283 | + | |
284 | + switch ($master) | |
285 | + { | |
286 | + case Image::WIDTH: | |
287 | + // Recalculate the height based on the width proportions | |
288 | + $height = $this->height * $width / $this->width; | |
289 | + break; | |
290 | + case Image::HEIGHT: | |
291 | + // Recalculate the width based on the height proportions | |
292 | + $width = $this->width * $height / $this->height; | |
293 | + break; | |
294 | + case Image::PRECISE: | |
295 | + // Resize to precise size | |
296 | + $ratio = $this->width / $this->height; | |
297 | + | |
298 | + if ($width / $height > $ratio) | |
299 | + { | |
300 | + $height = $this->height * $width / $this->width; | |
301 | + } | |
302 | + else | |
303 | + { | |
304 | + $width = $this->width * $height / $this->height; | |
305 | + } | |
306 | + break; | |
307 | + } | |
308 | + | |
309 | + // Convert the width and height to integers, minimum value is 1px | |
310 | + $width = max(round($width), 1); | |
311 | + $height = max(round($height), 1); | |
312 | + | |
313 | + // Adapt the image if the ratios are not equivalent | |
314 | + if ($master === Image::ADAPT && $width / $height !== $this->width / $this->height) | |
315 | + { | |
316 | + $image_width = $bg_width = $this->width; | |
317 | + $image_height = $bg_height = $this->height; | |
318 | + | |
319 | + $offset_x = $offset_y = 0; | |
320 | + | |
321 | + if ($width / $height > $image_width / $image_height) | |
322 | + { | |
323 | + $bg_width = floor($image_height * $width / $height); | |
324 | + $offset_x = abs(floor(($bg_width - $image_width) / 2)); | |
325 | + } | |
326 | + else | |
327 | + { | |
328 | + $bg_height = floor($image_width * $height / $width); | |
329 | + $offset_y = abs(floor(($bg_height - $image_height) / 2)); | |
330 | + } | |
331 | + | |
332 | + $this->_do_adapt($image_width, $image_height, $bg_width, $bg_height, $offset_x, $offset_y); | |
333 | + } | |
334 | + | |
335 | + $this->_do_resize($width, $height); | |
336 | + | |
337 | + return $this; | |
338 | + } | |
339 | + | |
340 | + /** | |
341 | + * Crop an image to the given size. Either the width or the height can be | |
342 | + * omitted and the current width or height will be used. | |
343 | + * | |
344 | + * If no offset is specified, the center of the axis will be used. | |
345 | + * If an offset of TRUE is specified, the bottom of the axis will be used. | |
346 | + * | |
347 | + * // Crop the image to 200x200 pixels, from the center | |
348 | + * $image->crop(200, 200); | |
349 | + * | |
350 | + * @param integer $width new width | |
351 | + * @param integer $height new height | |
352 | + * @param mixed $offset_x offset from the left | |
353 | + * @param mixed $offset_y offset from the top | |
354 | + * @return $this | |
355 | + * @uses Image::_do_crop | |
356 | + */ | |
357 | + public function crop($width, $height, $offset_x = NULL, $offset_y = NULL) | |
358 | + { | |
359 | + if ($width > $this->width) | |
360 | + { | |
361 | + // Use the current width | |
362 | + $width = $this->width; | |
363 | + } | |
364 | + | |
365 | + if ($height > $this->height) | |
366 | + { | |
367 | + // Use the current height | |
368 | + $height = $this->height; | |
369 | + } | |
370 | + | |
371 | + if ($offset_x === NULL) | |
372 | + { | |
373 | + // Center the X offset | |
374 | + $offset_x = round(($this->width - $width) / 2); | |
375 | + } | |
376 | + elseif ($offset_x === TRUE) | |
377 | + { | |
378 | + // Bottom the X offset | |
379 | + $offset_x = $this->width - $width; | |
380 | + } | |
381 | + elseif ($offset_x < 0) | |
382 | + { | |
383 | + // Set the X offset from the right | |
384 | + $offset_x = $this->width - $width + $offset_x; | |
385 | + } | |
386 | + | |
387 | + if ($offset_y === NULL) | |
388 | + { | |
389 | + // Center the Y offset | |
390 | + $offset_y = round(($this->height - $height) / 2); | |
391 | + } | |
392 | + elseif ($offset_y === TRUE) | |
393 | + { | |
394 | + // Bottom the Y offset | |
395 | + $offset_y = $this->height - $height; | |
396 | + } | |
397 | + elseif ($offset_y < 0) | |
398 | + { | |
399 | + // Set the Y offset from the bottom | |
400 | + $offset_y = $this->height - $height + $offset_y; | |
401 | + } | |
402 | + | |
403 | + // Determine the maximum possible width and height | |
404 | + $max_width = $this->width - $offset_x; | |
405 | + $max_height = $this->height - $offset_y; | |
406 | + | |
407 | + if ($width > $max_width) | |
408 | + { | |
409 | + // Use the maximum available width | |
410 | + $width = $max_width; | |
411 | + } | |
412 | + | |
413 | + if ($height > $max_height) | |
414 | + { | |
415 | + // Use the maximum available height | |
416 | + $height = $max_height; | |
417 | + } | |
418 | + | |
419 | + $this->_do_crop($width, $height, $offset_x, $offset_y); | |
420 | + | |
421 | + return $this; | |
422 | + } | |
423 | + | |
424 | + /** | |
425 | + * Rotate the image by a given amount. | |
426 | + * | |
427 | + * // Rotate 45 degrees clockwise | |
428 | + * $image->rotate(45); | |
429 | + * | |
430 | + * // Rotate 90% counter-clockwise | |
431 | + * $image->rotate(-90); | |
432 | + * | |
433 | + * @param integer $degrees degrees to rotate: -360-360 | |
434 | + * @return $this | |
435 | + * @uses Image::_do_rotate | |
436 | + */ | |
437 | + public function rotate($degrees) | |
438 | + { | |
439 | + // Make the degrees an integer | |
440 | + $degrees = (int) $degrees; | |
441 | + | |
442 | + if ($degrees > 180) | |
443 | + { | |
444 | + do | |
445 | + { | |
446 | + // Keep subtracting full circles until the degrees have normalized | |
447 | + $degrees -= 360; | |
448 | + } | |
449 | + while ($degrees > 180); | |
450 | + } | |
451 | + | |
452 | + if ($degrees < -180) | |
453 | + { | |
454 | + do | |
455 | + { | |
456 | + // Keep adding full circles until the degrees have normalized | |
457 | + $degrees += 360; | |
458 | + } | |
459 | + while ($degrees < -180); | |
460 | + } | |
461 | + | |
462 | + $this->_do_rotate($degrees); | |
463 | + | |
464 | + return $this; | |
465 | + } | |
466 | + | |
467 | + /** | |
468 | + * Flip the image along the horizontal or vertical axis. | |
469 | + * | |
470 | + * // Flip the image from top to bottom | |
471 | + * $image->flip(Image::HORIZONTAL); | |
472 | + * | |
473 | + * // Flip the image from left to right | |
474 | + * $image->flip(Image::VERTICAL); | |
475 | + * | |
476 | + * @param integer $direction direction: Image::HORIZONTAL, Image::VERTICAL | |
477 | + * @return $this | |
478 | + * @uses Image::_do_flip | |
479 | + */ | |
480 | + public function flip($direction) | |
481 | + { | |
482 | + if ($direction !== Image::HORIZONTAL) | |
483 | + { | |
484 | + // Flip vertically | |
485 | + $direction = Image::VERTICAL; | |
486 | + } | |
487 | + | |
488 | + $this->_do_flip($direction); | |
489 | + | |
490 | + return $this; | |
491 | + } | |
492 | + | |
493 | + /** | |
494 | + * Sharpen the image by a given amount. | |
495 | + * | |
496 | + * // Sharpen the image by 20% | |
497 | + * $image->sharpen(20); | |
498 | + * | |
499 | + * @param integer $amount amount to sharpen: 1-100 | |
500 | + * @return $this | |
501 | + * @uses Image::_do_sharpen | |
502 | + */ | |
503 | + public function sharpen($amount) | |
504 | + { | |
505 | + // The amount must be in the range of 1 to 100 | |
506 | + $amount = min(max($amount, 1), 100); | |
507 | + | |
508 | + $this->_do_sharpen($amount); | |
509 | + | |
510 | + return $this; | |
511 | + } | |
512 | + | |
513 | + /** | |
514 | + * Add a reflection to an image. The most opaque part of the reflection | |
515 | + * will be equal to the opacity setting and fade out to full transparent. | |
516 | + * Alpha transparency is preserved. | |
517 | + * | |
518 | + * // Create a 50 pixel reflection that fades from 0-100% opacity | |
519 | + * $image->reflection(50); | |
520 | + * | |
521 | + * // Create a 50 pixel reflection that fades from 100-0% opacity | |
522 | + * $image->reflection(50, 100, TRUE); | |
523 | + * | |
524 | + * // Create a 50 pixel reflection that fades from 0-60% opacity | |
525 | + * $image->reflection(50, 60, TRUE); | |
526 | + * | |
527 | + * [!!] By default, the reflection will be go from transparent at the top | |
528 | + * to opaque at the bottom. | |
529 | + * | |
530 | + * @param integer $height reflection height | |
531 | + * @param integer $opacity reflection opacity: 0-100 | |
532 | + * @param boolean $fade_in TRUE to fade in, FALSE to fade out | |
533 | + * @return $this | |
534 | + * @uses Image::_do_reflection | |
535 | + */ | |
536 | + public function reflection($height = NULL, $opacity = 100, $fade_in = FALSE) | |
537 | + { | |
538 | + if ($height === NULL OR $height > $this->height) | |
539 | + { | |
540 | + // Use the current height | |
541 | + $height = $this->height; | |
542 | + } | |
543 | + | |
544 | + // The opacity must be in the range of 0 to 100 | |
545 | + $opacity = min(max($opacity, 0), 100); | |
546 | + | |
547 | + $this->_do_reflection($height, $opacity, $fade_in); | |
548 | + | |
549 | + return $this; | |
550 | + } | |
551 | + | |
552 | + /** | |
553 | + * Add a watermark to an image with a specified opacity. Alpha transparency | |
554 | + * will be preserved. | |
555 | + * | |
556 | + * If no offset is specified, the center of the axis will be used. | |
557 | + * If an offset of TRUE is specified, the bottom of the axis will be used. | |
558 | + * | |
559 | + * // Add a watermark to the bottom right of the image | |
560 | + * $mark = Image::factory('upload/watermark.png'); | |
561 | + * $image->watermark($mark, TRUE, TRUE); | |
562 | + * | |
563 | + * @param Kohana_Image $watermark watermark Image instance | |
564 | + * @param integer $offset_x offset from the left | |
565 | + * @param integer $offset_y offset from the top | |
566 | + * @param integer $opacity opacity of watermark: 1-100 | |
567 | + * @return $this | |
568 | + * @uses Image::_do_watermark | |
569 | + */ | |
570 | + public function watermark(Kohana_Image $watermark, $offset_x = NULL, $offset_y = NULL, $opacity = 100) | |
571 | + { | |
572 | + if ($offset_x === NULL) | |
573 | + { | |
574 | + // Center the X offset | |
575 | + $offset_x = round(($this->width - $watermark->width) / 2); | |
576 | + } | |
577 | + elseif ($offset_x === TRUE) | |
578 | + { | |
579 | + // Bottom the X offset | |
580 | + $offset_x = $this->width - $watermark->width; | |
581 | + } | |
582 | + elseif ($offset_x < 0) | |
583 | + { | |
584 | + // Set the X offset from the right | |
585 | + $offset_x = $this->width - $watermark->width + $offset_x; | |
586 | + } | |
587 | + | |
588 | + if ($offset_y === NULL) | |
589 | + { | |
590 | + // Center the Y offset | |
591 | + $offset_y = round(($this->height - $watermark->height) / 2); | |
592 | + } | |
593 | + elseif ($offset_y === TRUE) | |
594 | + { | |
595 | + // Bottom the Y offset | |
596 | + $offset_y = $this->height - $watermark->height; | |
597 | + } | |
598 | + elseif ($offset_y < 0) | |
599 | + { | |
600 | + // Set the Y offset from the bottom | |
601 | + $offset_y = $this->height - $watermark->height + $offset_y; | |
602 | + } | |
603 | + | |
604 | + // The opacity must be in the range of 1 to 100 | |
605 | + $opacity = min(max($opacity, 1), 100); | |
606 | + | |
607 | + $this->_do_watermark($watermark, $offset_x, $offset_y, $opacity); | |
608 | + | |
609 | + return $this; | |
610 | + } | |
611 | + | |
612 | + /** | |
613 | + * Set the background color of an image. This is only useful for images | |
614 | + * with alpha transparency. | |
615 | + * | |
616 | + * // Make the image background black | |
617 | + * $image->background('#000'); | |
618 | + * | |
619 | + * // Make the image background black with 50% opacity | |
620 | + * $image->background('#000', 50); | |
621 | + * | |
622 | + * @param string $color hexadecimal color value | |
623 | + * @param integer $opacity background opacity: 0-100 | |
624 | + * @return $this | |
625 | + * @uses Image::_do_background | |
626 | + */ | |
627 | + public function background($color, $opacity = 100) | |
628 | + { | |
629 | + if ($color[0] === '#') | |
630 | + { | |
631 | + // Remove the pound | |
632 | + $color = substr($color, 1); | |
633 | + } | |
634 | + | |
635 | + if (strlen($color) === 3) | |
636 | + { | |
637 | + // Convert shorthand into longhand hex notation | |
638 | + $color = preg_replace('/./', '$0$0', $color); | |
639 | + } | |
640 | + | |
641 | + // Convert the hex into RGB values | |
642 | + list ($r, $g, $b) = array_map('hexdec', str_split($color, 2)); | |
643 | + | |
644 | + // The opacity must be in the range of 0 to 100 | |
645 | + $opacity = min(max($opacity, 0), 100); | |
646 | + | |
647 | + $this->_do_background($r, $g, $b, $opacity); | |
648 | + | |
649 | + return $this; | |
650 | + } | |
651 | + | |
652 | + /** | |
653 | + * Save the image. If the filename is omitted, the original image will | |
654 | + * be overwritten. | |
655 | + * | |
656 | + * // Save the image as a PNG | |
657 | + * $image->save('saved/cool.png'); | |
658 | + * | |
659 | + * // Overwrite the original image | |
660 | + * $image->save(); | |
661 | + * | |
662 | + * [!!] If the file exists, but is not writable, an exception will be thrown. | |
663 | + * | |
664 | + * [!!] If the file does not exist, and the directory is not writable, an | |
665 | + * exception will be thrown. | |
666 | + * | |
667 | + * @param string $file new image path | |
668 | + * @param integer $quality quality of image: 1-100 | |
669 | + * @return boolean | |
670 | + * @uses Image::_save | |
671 | + * @throws ErrorException | |
672 | + */ | |
673 | + public function save($file = NULL, $quality = 100) | |
674 | + { | |
675 | + if ($file === NULL) | |
676 | + { | |
677 | + // Overwrite the file | |
678 | + $file = $this->file; | |
679 | + } | |
680 | + | |
681 | + if (is_file($file)) | |
682 | + { | |
683 | + if ( ! is_writable($file)) | |
684 | + { | |
685 | + throw new ErrorException(sprintf('File must be writable: %s',$file)); | |
686 | + } | |
687 | + } | |
688 | + else | |
689 | + { | |
690 | + // Get the directory of the file | |
691 | + $directory = realpath(pathinfo($file, PATHINFO_DIRNAME)); | |
692 | + | |
693 | + if ( ! is_dir($directory) OR ! is_writable($directory)) | |
694 | + { | |
695 | + throw new ErrorException(sprintf('Directory must be writable: %s',$directory)); | |
696 | + } | |
697 | + } | |
698 | + | |
699 | + // The quality must be in the range of 1 to 100 | |
700 | + $quality = min(max($quality, 1), 100); | |
701 | + | |
702 | + return $this->_do_save($file, $quality); | |
703 | + } | |
704 | + | |
705 | + /** | |
706 | + * Render the image and return the binary string. | |
707 | + * | |
708 | + * // Render the image at 50% quality | |
709 | + * $data = $image->render(NULL, 50); | |
710 | + * | |
711 | + * // Render the image as a PNG | |
712 | + * $data = $image->render('png'); | |
713 | + * | |
714 | + * @param string $type image type to return: png, jpg, gif, etc | |
715 | + * @param integer $quality quality of image: 1-100 | |
716 | + * @return string | |
717 | + * @uses Image::_do_render | |
718 | + */ | |
719 | + public function render($type = NULL, $quality = 100) | |
720 | + { | |
721 | + if ($type === NULL) | |
722 | + { | |
723 | + // Use the current image type | |
724 | + $type = image_type_to_extension($this->type, FALSE); | |
725 | + } | |
726 | + | |
727 | + return $this->_do_render($type, $quality); | |
728 | + } | |
729 | + | |
730 | + /** | |
731 | + * Execute a resize. | |
732 | + * | |
733 | + * @param integer $width new width | |
734 | + * @param integer $height new height | |
735 | + * @return void | |
736 | + */ | |
737 | + abstract protected function _do_resize($width, $height); | |
738 | + | |
739 | + /** | |
740 | + * Adaptation the image. | |
741 | + * | |
742 | + * @param integer $width image width | |
743 | + * @param integer $height image height | |
744 | + * @param integer $bg_width background width | |
745 | + * @param integer $bg_height background height | |
746 | + * @param integer $offset_x offset from the left | |
747 | + * @param integer $offset_y offset from the top | |
748 | + */ | |
749 | + abstract protected function _do_adapt($width, $height, $bg_width, $bg_height, $offset_x, $offset_y); | |
750 | + | |
751 | + /** | |
752 | + * Execute a crop. | |
753 | + * | |
754 | + * @param integer $width new width | |
755 | + * @param integer $height new height | |
756 | + * @param integer $offset_x offset from the left | |
757 | + * @param integer $offset_y offset from the top | |
758 | + * @return void | |
759 | + */ | |
760 | + abstract protected function _do_crop($width, $height, $offset_x, $offset_y); | |
761 | + | |
762 | + /** | |
763 | + * Execute a rotation. | |
764 | + * | |
765 | + * @param integer $degrees degrees to rotate | |
766 | + * @return void | |
767 | + */ | |
768 | + abstract protected function _do_rotate($degrees); | |
769 | + | |
770 | + /** | |
771 | + * Execute a flip. | |
772 | + * | |
773 | + * @param integer $direction direction to flip | |
774 | + * @return void | |
775 | + */ | |
776 | + abstract protected function _do_flip($direction); | |
777 | + | |
778 | + /** | |
779 | + * Execute a sharpen. | |
780 | + * | |
781 | + * @param integer $amount amount to sharpen | |
782 | + * @return void | |
783 | + */ | |
784 | + abstract protected function _do_sharpen($amount); | |
785 | + | |
786 | + /** | |
787 | + * Execute a reflection. | |
788 | + * | |
789 | + * @param integer $height reflection height | |
790 | + * @param integer $opacity reflection opacity | |
791 | + * @param boolean $fade_in TRUE to fade out, FALSE to fade in | |
792 | + * @return void | |
793 | + */ | |
794 | + abstract protected function _do_reflection($height, $opacity, $fade_in); | |
795 | + | |
796 | + /** | |
797 | + * Execute a watermarking. | |
798 | + * | |
799 | + * @param Kohana_Image $image watermarking Kohana_Image | |
800 | + * @param integer $offset_x offset from the left | |
801 | + * @param integer $offset_y offset from the top | |
802 | + * @param integer $opacity opacity of watermark | |
803 | + * @return void | |
804 | + */ | |
805 | + abstract protected function _do_watermark(Kohana_Image $image, $offset_x, $offset_y, $opacity); | |
806 | + | |
807 | + /** | |
808 | + * Execute a background. | |
809 | + * | |
810 | + * @param integer $r red | |
811 | + * @param integer $g green | |
812 | + * @param integer $b blue | |
813 | + * @param integer $opacity opacity | |
814 | + * @return void | |
815 | + */ | |
816 | + abstract protected function _do_background($r, $g, $b, $opacity); | |
817 | + | |
818 | + /** | |
819 | + * Execute a save. | |
820 | + * | |
821 | + * @param string $file new image filename | |
822 | + * @param integer $quality quality | |
823 | + * @return boolean | |
824 | + */ | |
825 | + abstract protected function _do_save($file, $quality); | |
826 | + | |
827 | + /** | |
828 | + * Execute a render. | |
829 | + * | |
830 | + * @param string $type image type: png, jpg, gif, etc | |
831 | + * @param integer $quality quality | |
832 | + * @return string | |
833 | + */ | |
834 | + abstract protected function _do_render($type, $quality); | |
835 | + | |
836 | +} // End Image | ... | ... |
common/config/bootstrap.php
... | ... | @@ -3,4 +3,5 @@ Yii::setAlias('@common', dirname(__DIR__)); |
3 | 3 | Yii::setAlias('@frontend', dirname(dirname(__DIR__)) . '/frontend'); |
4 | 4 | Yii::setAlias('@backend', dirname(dirname(__DIR__)) . '/backend'); |
5 | 5 | Yii::setAlias('@console', dirname(dirname(__DIR__)) . '/console'); |
6 | +Yii::setAlias('@storage', dirname(dirname(__DIR__)) . '/storage'); | |
6 | 7 | Yii::setAlias('storage', dirname(dirname(__DIR__)) . '/storage'); | ... | ... |
common/config/main.php
... | ... | @@ -69,6 +69,66 @@ return [ |
69 | 69 | ], |
70 | 70 | ], |
71 | 71 | ], |
72 | + 'artboximage' => [ | |
73 | + 'class' => 'common\components\artboximage\ArtboxImage', | |
74 | + 'driver' => 'GD', //GD or Imagick | |
75 | + 'rootPath' => Yii::getAlias('@storage'), | |
76 | + 'rootUrl' => Yii::getAlias('/storage'), | |
77 | + 'presets' => [ | |
78 | + 'product' => [ | |
79 | + 'resize' => [ | |
80 | + 'width' => 300, | |
81 | + 'height' => 300, | |
82 | + 'master' => null | |
83 | + ], | |
84 | + /*'flip' => [ | |
85 | + 'direction' => \common\components\artboximage\drivers\Image::HORIZONTAL | |
86 | + ]*/ | |
87 | + ], | |
88 | + 'brandlist' => [ | |
89 | + 'resize' => [ | |
90 | + 'width' => 138, | |
91 | + 'height' => 78, | |
92 | + 'master' => null | |
93 | + ], | |
94 | + ], | |
95 | + 'product_trumb' => [ | |
96 | + 'resize' => [ | |
97 | + 'width' => 80, | |
98 | + 'height' => 80, | |
99 | + 'master' => null | |
100 | + ], | |
101 | + ], | |
102 | + 'product_list' => [ | |
103 | + 'resize' => [ | |
104 | + 'width' => 130, | |
105 | + 'height' => 70, | |
106 | + 'master' => null | |
107 | + ], | |
108 | + ], | |
109 | + 'product_list2' => [ | |
110 | + 'resize' => [ | |
111 | + 'width' => 130, | |
112 | + 'height' => 70, | |
113 | + 'master' => null | |
114 | + ], | |
115 | + ], | |
116 | + 'mainmenu' => [ | |
117 | + 'resize' => [ | |
118 | + 'width' => 160, | |
119 | + 'height' => 170, | |
120 | + 'master' => null | |
121 | + ], | |
122 | + ], | |
123 | + 'large' => [ | |
124 | + 'resize' => [ | |
125 | + 'width' => 600, | |
126 | + 'height' => 600, | |
127 | + 'master' => null | |
128 | + ], | |
129 | + ], | |
130 | + ] | |
131 | + ], | |
72 | 132 | ], |
73 | 133 | |
74 | 134 | 'modules' => [ | ... | ... |
common/modules/product/models/Brand.php
... | ... | @@ -123,10 +123,10 @@ class Brand extends \yii\db\ActiveRecord |
123 | 123 | } |
124 | 124 | |
125 | 125 | public function getImageFile() { |
126 | - return empty($this->image) ? null : '/images/brand/'. $this->image; | |
126 | + return empty($this->image) ? null : Yii::getAlias('@storage/brand/'. $this->image); | |
127 | 127 | } |
128 | 128 | |
129 | 129 | public function getImageUrl() { |
130 | - return empty($this->image) ? null : '/images/brand/'. $this->image; | |
130 | + return empty($this->image) ? null : '/storage/brand/'. $this->image; | |
131 | 131 | } |
132 | 132 | } | ... | ... |
common/modules/product/models/Category.php
... | ... | @@ -177,9 +177,13 @@ class Category extends \yii\db\ActiveRecord |
177 | 177 | return empty($this->categoryName) ? null : $this->categoryName->value; |
178 | 178 | } |
179 | 179 | |
180 | + public function getImageFile() { | |
181 | + return empty($this->image) ? null : Yii::getAlias('@storage/category/'. $this->image); | |
182 | + } | |
183 | + | |
180 | 184 | public function getImageUrl() |
181 | 185 | { |
182 | - return empty($this->image) ? null : '/images/category/' . $this->image; | |
186 | + return empty($this->image) ? null : '/storage/category/' . $this->image; | |
183 | 187 | } |
184 | 188 | |
185 | 189 | public function beforeSave($insert) | ... | ... |
common/modules/product/models/Product.php
... | ... | @@ -197,7 +197,7 @@ class Product extends \yii\db\ActiveRecord |
197 | 197 | // $this->imagesUpload = [$this->imagesUpload]; |
198 | 198 | // } |
199 | 199 | // foreach($this->imagesUpload as $image) { |
200 | -// $image->saveAs((Yii::getAlias('@frontend/web/images/products/original/' . $image->baseName .'_'. uniqid() . '.' . $image->extension))); | |
200 | +// $image->saveAs((Yii::getAlias('@storage/products/original/' . $image->baseName .'_'. uniqid() . '.' . $image->extension))); | |
201 | 201 | // } |
202 | 202 | // |
203 | 203 | // |
... | ... | @@ -233,12 +233,12 @@ class Product extends \yii\db\ActiveRecord |
233 | 233 | foreach ($this->imagesUpload as $image) { |
234 | 234 | $imageName = $image->baseName .'.'. $image->extension; |
235 | 235 | $i = 0; |
236 | - while(file_exists(Yii::getAlias('@frontend/web/images/products/' . $imageName))) { | |
236 | + while(file_exists(Yii::getAlias('@storage/products/'. $imageName))) { | |
237 | 237 | $i++; |
238 | 238 | $imageName = $image->baseName .'_'. $i .'.'. $image->extension; |
239 | 239 | } |
240 | 240 | |
241 | - $image->saveAs(Yii::getAlias('@frontend/web/images/products/' .$imageName)); | |
241 | + $image->saveAs(Yii::getAlias('@storage/products/'. $imageName)); | |
242 | 242 | $images[] = $imageName; |
243 | 243 | } |
244 | 244 | return $images; | ... | ... |
common/modules/product/models/ProductImage.php
... | ... | @@ -97,7 +97,7 @@ class ProductImage extends \yii\db\ActiveRecord |
97 | 97 | */ |
98 | 98 | public function getImageFile() |
99 | 99 | { |
100 | - return isset($this->image) ? '/images/products/' . $this->image : null; | |
100 | + return isset($this->image) ? Yii::getAlias('@storage/products/'. $this->image) : null; | |
101 | 101 | } |
102 | 102 | |
103 | 103 | /** |
... | ... | @@ -107,7 +107,7 @@ class ProductImage extends \yii\db\ActiveRecord |
107 | 107 | public function getImageUrl() |
108 | 108 | { |
109 | 109 | // return a default image placeholder if your source image is not found |
110 | - return isset($this->image) ? '/images/products/'. $this->image : 'default.jpg'; | |
110 | + return isset($this->image) ? '/storage/products/'. $this->image : 'default.jpg'; | |
111 | 111 | } |
112 | 112 | |
113 | 113 | /** | ... | ... |
common/modules/product/widgets/views/brandsCarousel.php
... | ... | @@ -3,7 +3,7 @@ |
3 | 3 | <div class="prods_carousel"> |
4 | 4 | <ul> |
5 | 5 | <?php foreach($brands as $brand) :?> |
6 | - <li><span><a href="<?= \yii\helpers\Url::to('/brands/'. $brand->alias)?>" title="<?= $brand->name?>"><?= $brand->imageFile ? Yii::$app->imageCache->thumb($brand->imageFile, 'brandlist') : ''?></a></span></li> | |
6 | + <li><span><a href="<?= \yii\helpers\Url::to('/brands/'. $brand->alias)?>" title="<?= $brand->name?>"><?= $brand->imageFile ? \common\components\artboximage\ArtboxImageHelper::getImage($brand->imageFile, 'brandlist') : ''?></a></span></li> | |
7 | 7 | <?php endforeach?> |
8 | 8 | </ul> |
9 | 9 | </div> | ... | ... |
common/modules/product/widgets/views/submenu.php
... | ... | @@ -12,7 +12,7 @@ |
12 | 12 | <?php if (empty($_item->image)) :?> |
13 | 13 | <img valign="top" src="/images/no_photo.png"> |
14 | 14 | <?php else :?> |
15 | - <?= $_item->imageUrl ? Yii::$app->imageCache->thumb($_item->imageUrl, 'mainmenu') : ''?> | |
15 | + <?= $_item->imageUrl ? \common\components\artboximage\ArtboxImageHelper::getImage($_item->imageUrl, 'mainmenu') : ''?> | |
16 | 16 | <?php endif?> |
17 | 17 | </div> |
18 | 18 | <div class="title"><?= $_item->categoryName->value?></div> |
... | ... | @@ -34,7 +34,7 @@ |
34 | 34 | <?php if (empty($_item['item']->image)) :?> |
35 | 35 | <img valign="top" src="/images/no_photo.png"> |
36 | 36 | <?php else :?> |
37 | - <?= $_item['item']->imageUrl ? Yii::$app->imageCache->thumb($_item['item']->imageUrl, 'mainmenu') : ''?> | |
37 | + <?= $_item['item']->imageUrl ? \common\components\artboximage\ArtboxImageHelper::getImage($_item['item']->imageUrl, 'mainmenu') : ''?> | |
38 | 38 | <?php endif?> |
39 | 39 | </div> |
40 | 40 | <div class="title"><?= $_item['item']->categoryName->value?></div> | ... | ... |
common/modules/rubrication/behaviors/ArtboxSynonymBehavior.php
... | ... | @@ -116,7 +116,7 @@ class ArtboxSynonymBehavior extends Behavior { |
116 | 116 | if ($isave) { |
117 | 117 | $valueModel->setAttribute($this->valueOptionId, $this->owner->getAttribute($this->keyNameId)); |
118 | 118 | $valueModel->save(); |
119 | - if (!empty($this->slug) && empty($this->owner->getAttribute($this->slug['slugKeyName']))) { | |
119 | + if (!empty($this->slug) && empty($this->owner->{$this->slug['slugKeyName']})) { | |
120 | 120 | $this->owner->{$this->slug['slugKeyName']} = $this->slugify($valueModel->{$this->slug['valueKeyName']}); |
121 | 121 | } |
122 | 122 | } | ... | ... |
composer.json
... | ... | @@ -5,9 +5,6 @@ |
5 | 5 | "homepage": "http://www.yiiframework.com/", |
6 | 6 | "type": "project", |
7 | 7 | "license": "BSD-3-Clause", |
8 | - "platform": { | |
9 | - "php": "5.5.0" | |
10 | - }, | |
11 | 8 | "support": { |
12 | 9 | "issues": "https://github.com/yiisoft/yii2/issues?state=open", |
13 | 10 | "forum": "http://www.yiiframework.com/forum/", |
... | ... | @@ -38,7 +35,13 @@ |
38 | 35 | "unclead/yii2-multiple-input": "~1.0", |
39 | 36 | "codeception/codeception":"*", |
40 | 37 | "phpmailer/phpmailer": "^5.2", |
41 | - "league/oauth2-client": "^1.3" | |
38 | + "league/oauth2-client": "^1.3", | |
39 | + "kartik-v/yii2-grid": "@dev", | |
40 | + "kartik-v/yii2-mpdf": "@dev", | |
41 | + "kartik-v/yii2-widget-fileinput": "@dev", | |
42 | + "maxmirazh33/yii2-uploadable-cropable-image": "*", | |
43 | + "iutbay/yii2-imagecache": "*", | |
44 | + "yurkinx/yii2-image": "dev-master" | |
42 | 45 | }, |
43 | 46 | "require-dev": { |
44 | 47 | "yiisoft/yii2-codeception": "*", | ... | ... |
composer.lock deleted
1 | -{ | |
2 | - "_readme": [ | |
3 | - "This file locks the dependencies of your project to a known state", | |
4 | - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", | |
5 | - "This file is @generated automatically" | |
6 | - ], | |
7 | - "hash": "d817e95d434dbdfff82796cc0b6e9c9e", | |
8 | - "content-hash": "a704572d721b5adc21f823d363fcd4de", | |
9 | - "packages": [ | |
10 | - { | |
11 | - "name": "2amigos/yii2-transliterator-helper", | |
12 | - "version": "dev-master", | |
13 | - "source": { | |
14 | - "type": "git", | |
15 | - "url": "https://github.com/2amigos/yii2-transliterator-helper.git", | |
16 | - "reference": "1e4284351f4250a8f2ce553ea4f420fcbb424309" | |
17 | - }, | |
18 | - "dist": { | |
19 | - "type": "zip", | |
20 | - "url": "https://api.github.com/repos/2amigos/yii2-transliterator-helper/zipball/1e4284351f4250a8f2ce553ea4f420fcbb424309", | |
21 | - "reference": "1e4284351f4250a8f2ce553ea4f420fcbb424309", | |
22 | - "shasum": "" | |
23 | - }, | |
24 | - "require": { | |
25 | - "yiisoft/yii2": "*" | |
26 | - }, | |
27 | - "type": "yii2-extension", | |
28 | - "autoload": { | |
29 | - "psr-4": { | |
30 | - "dosamigos\\transliterator\\": "" | |
31 | - } | |
32 | - }, | |
33 | - "notification-url": "https://packagist.org/downloads/", | |
34 | - "license": [ | |
35 | - "BSD-3-Clause" | |
36 | - ], | |
37 | - "authors": [ | |
38 | - { | |
39 | - "name": "Antonio Ramirez", | |
40 | - "email": "ramirez.cobos@gmail.com", | |
41 | - "homepage": "http://www.ramirezcobos.com" | |
42 | - } | |
43 | - ], | |
44 | - "description": "Transliterator Helper for Yii2.", | |
45 | - "keywords": [ | |
46 | - "extension", | |
47 | - "helper", | |
48 | - "transliterator", | |
49 | - "yii" | |
50 | - ], | |
51 | - "time": "2014-06-23 14:01:30" | |
52 | - }, | |
53 | - { | |
54 | - "name": "almasaeed2010/adminlte", | |
55 | - "version": "v2.3.3", | |
56 | - "source": { | |
57 | - "type": "git", | |
58 | - "url": "https://github.com/almasaeed2010/AdminLTE.git", | |
59 | - "reference": "8db979795044412a2e2b4e9659788c23cb59fcd3" | |
60 | - }, | |
61 | - "dist": { | |
62 | - "type": "zip", | |
63 | - "url": "https://api.github.com/repos/almasaeed2010/AdminLTE/zipball/8db979795044412a2e2b4e9659788c23cb59fcd3", | |
64 | - "reference": "8db979795044412a2e2b4e9659788c23cb59fcd3", | |
65 | - "shasum": "" | |
66 | - }, | |
67 | - "type": "library", | |
68 | - "notification-url": "https://packagist.org/downloads/", | |
69 | - "license": [ | |
70 | - "MIT" | |
71 | - ], | |
72 | - "authors": [ | |
73 | - { | |
74 | - "name": "Abdullah Almsaeed", | |
75 | - "email": "support@almsaeedstudio.com" | |
76 | - } | |
77 | - ], | |
78 | - "description": "AdminLTE - admin control panel and dashboard that's based on Bootstrap 3", | |
79 | - "homepage": "http://almsaeedstudio.com/", | |
80 | - "keywords": [ | |
81 | - "JS", | |
82 | - "admin", | |
83 | - "back-end", | |
84 | - "css", | |
85 | - "less", | |
86 | - "responsive", | |
87 | - "template", | |
88 | - "theme", | |
89 | - "web" | |
90 | - ], | |
91 | - "time": "2016-03-24 14:31:41" | |
92 | - }, | |
93 | - { | |
94 | - "name": "behat/gherkin", | |
95 | - "version": "dev-master", | |
96 | - "source": { | |
97 | - "type": "git", | |
98 | - "url": "https://github.com/Behat/Gherkin.git", | |
99 | - "reference": "6f005467f571c3c53477fb0a646ba8092aa54bd4" | |
100 | - }, | |
101 | - "dist": { | |
102 | - "type": "zip", | |
103 | - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/6f005467f571c3c53477fb0a646ba8092aa54bd4", | |
104 | - "reference": "6f005467f571c3c53477fb0a646ba8092aa54bd4", | |
105 | - "shasum": "" | |
106 | - }, | |
107 | - "require": { | |
108 | - "php": ">=5.3.1" | |
109 | - }, | |
110 | - "require-dev": { | |
111 | - "phpunit/phpunit": "~4.5|~5", | |
112 | - "symfony/phpunit-bridge": "~2.7|~3", | |
113 | - "symfony/yaml": "~2.3|~3" | |
114 | - }, | |
115 | - "suggest": { | |
116 | - "symfony/yaml": "If you want to parse features, represented in YAML files" | |
117 | - }, | |
118 | - "type": "library", | |
119 | - "extra": { | |
120 | - "branch-alias": { | |
121 | - "dev-master": "4.4-dev" | |
122 | - } | |
123 | - }, | |
124 | - "autoload": { | |
125 | - "psr-0": { | |
126 | - "Behat\\Gherkin": "src/" | |
127 | - } | |
128 | - }, | |
129 | - "notification-url": "https://packagist.org/downloads/", | |
130 | - "license": [ | |
131 | - "MIT" | |
132 | - ], | |
133 | - "authors": [ | |
134 | - { | |
135 | - "name": "Konstantin Kudryashov", | |
136 | - "email": "ever.zet@gmail.com", | |
137 | - "homepage": "http://everzet.com" | |
138 | - } | |
139 | - ], | |
140 | - "description": "Gherkin DSL parser for PHP 5.3", | |
141 | - "homepage": "http://behat.org/", | |
142 | - "keywords": [ | |
143 | - "BDD", | |
144 | - "Behat", | |
145 | - "Cucumber", | |
146 | - "DSL", | |
147 | - "gherkin", | |
148 | - "parser" | |
149 | - ], | |
150 | - "time": "2015-12-31 10:51:34" | |
151 | - }, | |
152 | - { | |
153 | - "name": "bower-asset/admin-lte", | |
154 | - "version": "dev-master", | |
155 | - "source": { | |
156 | - "type": "git", | |
157 | - "url": "https://github.com/almasaeed2010/AdminLTE.git", | |
158 | - "reference": "fe147c9b2188bc3e4c651ca24581a6710d5421ff" | |
159 | - }, | |
160 | - "dist": { | |
161 | - "type": "zip", | |
162 | - "url": "https://api.github.com/repos/almasaeed2010/AdminLTE/zipball/fe147c9b2188bc3e4c651ca24581a6710d5421ff", | |
163 | - "reference": "fe147c9b2188bc3e4c651ca24581a6710d5421ff", | |
164 | - "shasum": "" | |
165 | - }, | |
166 | - "type": "bower-asset-library", | |
167 | - "extra": { | |
168 | - "bower-asset-main": [ | |
169 | - "index2.html", | |
170 | - "dist/css/AdminLTE.css", | |
171 | - "dist/js/app.js", | |
172 | - "build/less/AdminLTE.less" | |
173 | - ], | |
174 | - "bower-asset-ignore": [ | |
175 | - "/.*", | |
176 | - "node_modules", | |
177 | - "bower_components", | |
178 | - "composer.json", | |
179 | - "documentation" | |
180 | - ] | |
181 | - }, | |
182 | - "license": [ | |
183 | - "MIT" | |
184 | - ], | |
185 | - "description": "Admin dashboard and control panel template", | |
186 | - "keywords": [ | |
187 | - "admin", | |
188 | - "backend", | |
189 | - "bootstrap", | |
190 | - "css", | |
191 | - "html", | |
192 | - "js", | |
193 | - "responsive", | |
194 | - "template", | |
195 | - "theme" | |
196 | - ], | |
197 | - "time": "2016-03-14 01:14:03" | |
198 | - }, | |
199 | - { | |
200 | - "name": "bower-asset/bootstrap", | |
201 | - "version": "v3.3.5", | |
202 | - "source": { | |
203 | - "type": "git", | |
204 | - "url": "https://github.com/twbs/bootstrap.git", | |
205 | - "reference": "16b48259a62f576e52c903c476bd42b90ab22482" | |
206 | - }, | |
207 | - "dist": { | |
208 | - "type": "zip", | |
209 | - "url": "https://api.github.com/repos/twbs/bootstrap/zipball/16b48259a62f576e52c903c476bd42b90ab22482", | |
210 | - "reference": "16b48259a62f576e52c903c476bd42b90ab22482", | |
211 | - "shasum": "" | |
212 | - }, | |
213 | - "require": { | |
214 | - "bower-asset/jquery": ">=1.9.1" | |
215 | - }, | |
216 | - "type": "bower-asset-library", | |
217 | - "extra": { | |
218 | - "bower-asset-main": [ | |
219 | - "less/bootstrap.less", | |
220 | - "dist/js/bootstrap.js" | |
221 | - ], | |
222 | - "bower-asset-ignore": [ | |
223 | - "/.*", | |
224 | - "_config.yml", | |
225 | - "CNAME", | |
226 | - "composer.json", | |
227 | - "CONTRIBUTING.md", | |
228 | - "docs", | |
229 | - "js/tests", | |
230 | - "test-infra" | |
231 | - ] | |
232 | - }, | |
233 | - "license": [ | |
234 | - "MIT" | |
235 | - ], | |
236 | - "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", | |
237 | - "keywords": [ | |
238 | - "css", | |
239 | - "framework", | |
240 | - "front-end", | |
241 | - "js", | |
242 | - "less", | |
243 | - "mobile-first", | |
244 | - "responsive", | |
245 | - "web" | |
246 | - ] | |
247 | - }, | |
248 | - { | |
249 | - "name": "bower-asset/fontawesome", | |
250 | - "version": "v4.5.0", | |
251 | - "source": { | |
252 | - "type": "git", | |
253 | - "url": "https://github.com/FortAwesome/Font-Awesome.git", | |
254 | - "reference": "fddd2c240452e6c8990c4ef75e0265b455aa7968" | |
255 | - }, | |
256 | - "dist": { | |
257 | - "type": "zip", | |
258 | - "url": "https://api.github.com/repos/FortAwesome/Font-Awesome/zipball/fddd2c240452e6c8990c4ef75e0265b455aa7968", | |
259 | - "reference": "fddd2c240452e6c8990c4ef75e0265b455aa7968", | |
260 | - "shasum": "" | |
261 | - }, | |
262 | - "type": "bower-asset-library", | |
263 | - "extra": { | |
264 | - "bower-asset-main": [ | |
265 | - "less/font-awesome.less", | |
266 | - "scss/font-awesome.scss" | |
267 | - ], | |
268 | - "bower-asset-ignore": [ | |
269 | - "*/.*", | |
270 | - "*.json", | |
271 | - "src", | |
272 | - "*.yml", | |
273 | - "Gemfile", | |
274 | - "Gemfile.lock", | |
275 | - "*.md" | |
276 | - ] | |
277 | - }, | |
278 | - "license": [ | |
279 | - "OFL-1.1", | |
280 | - "MIT", | |
281 | - "CC-BY-3.0" | |
282 | - ], | |
283 | - "description": "Font Awesome" | |
284 | - }, | |
285 | - { | |
286 | - "name": "bower-asset/jquery", | |
287 | - "version": "2.2.3", | |
288 | - "source": { | |
289 | - "type": "git", | |
290 | - "url": "https://github.com/jquery/jquery-dist.git", | |
291 | - "reference": "af22a351b2ea5801ffb1695abb3bb34d5bed9198" | |
292 | - }, | |
293 | - "dist": { | |
294 | - "type": "zip", | |
295 | - "url": "https://api.github.com/repos/jquery/jquery-dist/zipball/af22a351b2ea5801ffb1695abb3bb34d5bed9198", | |
296 | - "reference": "af22a351b2ea5801ffb1695abb3bb34d5bed9198", | |
297 | - "shasum": "" | |
298 | - }, | |
299 | - "type": "bower-asset-library", | |
300 | - "extra": { | |
301 | - "bower-asset-main": "dist/jquery.js", | |
302 | - "bower-asset-ignore": [ | |
303 | - "package.json" | |
304 | - ] | |
305 | - }, | |
306 | - "license": [ | |
307 | - "MIT" | |
308 | - ], | |
309 | - "keywords": [ | |
310 | - "browser", | |
311 | - "javascript", | |
312 | - "jquery", | |
313 | - "library" | |
314 | - ] | |
315 | - }, | |
316 | - { | |
317 | - "name": "bower-asset/jquery-ui", | |
318 | - "version": "1.11.4", | |
319 | - "source": { | |
320 | - "type": "git", | |
321 | - "url": "https://github.com/components/jqueryui.git", | |
322 | - "reference": "c34f8dbf3ba57b3784b93f26119f436c0e8288e1" | |
323 | - }, | |
324 | - "dist": { | |
325 | - "type": "zip", | |
326 | - "url": "https://api.github.com/repos/components/jqueryui/zipball/c34f8dbf3ba57b3784b93f26119f436c0e8288e1", | |
327 | - "reference": "c34f8dbf3ba57b3784b93f26119f436c0e8288e1", | |
328 | - "shasum": "" | |
329 | - }, | |
330 | - "require": { | |
331 | - "bower-asset/jquery": ">=1.6" | |
332 | - }, | |
333 | - "type": "bower-asset-library", | |
334 | - "extra": { | |
335 | - "bower-asset-main": [ | |
336 | - "jquery-ui.js" | |
337 | - ], | |
338 | - "bower-asset-ignore": [] | |
339 | - } | |
340 | - }, | |
341 | - { | |
342 | - "name": "bower-asset/jquery.inputmask", | |
343 | - "version": "3.2.7", | |
344 | - "source": { | |
345 | - "type": "git", | |
346 | - "url": "https://github.com/RobinHerbots/jquery.inputmask.git", | |
347 | - "reference": "5a72c563b502b8e05958a524cdfffafe9987be38" | |
348 | - }, | |
349 | - "dist": { | |
350 | - "type": "zip", | |
351 | - "url": "https://api.github.com/repos/RobinHerbots/jquery.inputmask/zipball/5a72c563b502b8e05958a524cdfffafe9987be38", | |
352 | - "reference": "5a72c563b502b8e05958a524cdfffafe9987be38", | |
353 | - "shasum": "" | |
354 | - }, | |
355 | - "require": { | |
356 | - "bower-asset/jquery": ">=1.7" | |
357 | - }, | |
358 | - "type": "bower-asset-library", | |
359 | - "extra": { | |
360 | - "bower-asset-main": [ | |
361 | - "./dist/inputmask/inputmask.js" | |
362 | - ], | |
363 | - "bower-asset-ignore": [ | |
364 | - "**/*", | |
365 | - "!dist/*", | |
366 | - "!dist/inputmask/*", | |
367 | - "!dist/min/*", | |
368 | - "!dist/min/inputmask/*", | |
369 | - "!extra/bindings/*", | |
370 | - "!extra/dependencyLibs/*", | |
371 | - "!extra/phone-codes/*" | |
372 | - ] | |
373 | - }, | |
374 | - "license": [ | |
375 | - "http://opensource.org/licenses/mit-license.php" | |
376 | - ], | |
377 | - "description": "jquery.inputmask is a jquery plugin which create an input mask.", | |
378 | - "keywords": [ | |
379 | - "form", | |
380 | - "input", | |
381 | - "inputmask", | |
382 | - "jquery", | |
383 | - "mask", | |
384 | - "plugins" | |
385 | - ] | |
386 | - }, | |
387 | - { | |
388 | - "name": "bower-asset/punycode", | |
389 | - "version": "v1.3.2", | |
390 | - "source": { | |
391 | - "type": "git", | |
392 | - "url": "https://github.com/bestiejs/punycode.js.git", | |
393 | - "reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3" | |
394 | - }, | |
395 | - "dist": { | |
396 | - "type": "zip", | |
397 | - "url": "https://api.github.com/repos/bestiejs/punycode.js/zipball/38c8d3131a82567bfef18da09f7f4db68c84f8a3", | |
398 | - "reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3", | |
399 | - "shasum": "" | |
400 | - }, | |
401 | - "type": "bower-asset-library", | |
402 | - "extra": { | |
403 | - "bower-asset-main": "punycode.js", | |
404 | - "bower-asset-ignore": [ | |
405 | - "coverage", | |
406 | - "tests", | |
407 | - ".*", | |
408 | - "component.json", | |
409 | - "Gruntfile.js", | |
410 | - "node_modules", | |
411 | - "package.json" | |
412 | - ] | |
413 | - } | |
414 | - }, | |
415 | - { | |
416 | - "name": "bower-asset/yii2-pjax", | |
417 | - "version": "v2.0.6", | |
418 | - "source": { | |
419 | - "type": "git", | |
420 | - "url": "https://github.com/yiisoft/jquery-pjax.git", | |
421 | - "reference": "60728da6ade5879e807a49ce59ef9a72039b8978" | |
422 | - }, | |
423 | - "dist": { | |
424 | - "type": "zip", | |
425 | - "url": "https://api.github.com/repos/yiisoft/jquery-pjax/zipball/60728da6ade5879e807a49ce59ef9a72039b8978", | |
426 | - "reference": "60728da6ade5879e807a49ce59ef9a72039b8978", | |
427 | - "shasum": "" | |
428 | - }, | |
429 | - "require": { | |
430 | - "bower-asset/jquery": ">=1.8" | |
431 | - }, | |
432 | - "type": "bower-asset-library", | |
433 | - "extra": { | |
434 | - "bower-asset-main": "./jquery.pjax.js", | |
435 | - "bower-asset-ignore": [ | |
436 | - ".travis.yml", | |
437 | - "Gemfile", | |
438 | - "Gemfile.lock", | |
439 | - "CONTRIBUTING.md", | |
440 | - "vendor/", | |
441 | - "script/", | |
442 | - "test/" | |
443 | - ] | |
444 | - }, | |
445 | - "license": [ | |
446 | - "MIT" | |
447 | - ] | |
448 | - }, | |
449 | - { | |
450 | - "name": "cebe/markdown", | |
451 | - "version": "dev-master", | |
452 | - "source": { | |
453 | - "type": "git", | |
454 | - "url": "https://github.com/cebe/markdown.git", | |
455 | - "reference": "e2a490ceec590bf5bfd1b43bd424fb9dceceb7c5" | |
456 | - }, | |
457 | - "dist": { | |
458 | - "type": "zip", | |
459 | - "url": "https://api.github.com/repos/cebe/markdown/zipball/e2a490ceec590bf5bfd1b43bd424fb9dceceb7c5", | |
460 | - "reference": "e2a490ceec590bf5bfd1b43bd424fb9dceceb7c5", | |
461 | - "shasum": "" | |
462 | - }, | |
463 | - "require": { | |
464 | - "lib-pcre": "*", | |
465 | - "php": ">=5.4.0" | |
466 | - }, | |
467 | - "require-dev": { | |
468 | - "cebe/indent": "*", | |
469 | - "facebook/xhprof": "*@dev", | |
470 | - "phpunit/phpunit": "4.1.*" | |
471 | - }, | |
472 | - "bin": [ | |
473 | - "bin/markdown" | |
474 | - ], | |
475 | - "type": "library", | |
476 | - "extra": { | |
477 | - "branch-alias": { | |
478 | - "dev-master": "1.1.x-dev" | |
479 | - } | |
480 | - }, | |
481 | - "autoload": { | |
482 | - "psr-4": { | |
483 | - "cebe\\markdown\\": "" | |
484 | - } | |
485 | - }, | |
486 | - "notification-url": "https://packagist.org/downloads/", | |
487 | - "license": [ | |
488 | - "MIT" | |
489 | - ], | |
490 | - "authors": [ | |
491 | - { | |
492 | - "name": "Carsten Brandt", | |
493 | - "email": "mail@cebe.cc", | |
494 | - "homepage": "http://cebe.cc/", | |
495 | - "role": "Creator" | |
496 | - } | |
497 | - ], | |
498 | - "description": "A super fast, highly extensible markdown parser for PHP", | |
499 | - "homepage": "https://github.com/cebe/markdown#readme", | |
500 | - "keywords": [ | |
501 | - "extensible", | |
502 | - "fast", | |
503 | - "gfm", | |
504 | - "markdown", | |
505 | - "markdown-extra" | |
506 | - ], | |
507 | - "time": "2016-03-18 13:28:11" | |
508 | - }, | |
509 | - { | |
510 | - "name": "cebe/yii2-gravatar", | |
511 | - "version": "1.1", | |
512 | - "target-dir": "cebe/gravatar", | |
513 | - "source": { | |
514 | - "type": "git", | |
515 | - "url": "https://github.com/cebe/yii2-gravatar.git", | |
516 | - "reference": "c9c01bd14c9bdee9e5ae1ef1aad23f80c182c057" | |
517 | - }, | |
518 | - "dist": { | |
519 | - "type": "zip", | |
520 | - "url": "https://api.github.com/repos/cebe/yii2-gravatar/zipball/c9c01bd14c9bdee9e5ae1ef1aad23f80c182c057", | |
521 | - "reference": "c9c01bd14c9bdee9e5ae1ef1aad23f80c182c057", | |
522 | - "shasum": "" | |
523 | - }, | |
524 | - "require": { | |
525 | - "yiisoft/yii2": "*" | |
526 | - }, | |
527 | - "type": "yii2-extension", | |
528 | - "autoload": { | |
529 | - "psr-0": { | |
530 | - "cebe\\gravatar\\": "" | |
531 | - } | |
532 | - }, | |
533 | - "notification-url": "https://packagist.org/downloads/", | |
534 | - "license": [ | |
535 | - "MIT" | |
536 | - ], | |
537 | - "authors": [ | |
538 | - { | |
539 | - "name": "Carsten Brandt", | |
540 | - "email": "mail@cebe.cc", | |
541 | - "homepage": "http://cebe.cc/", | |
542 | - "role": "Core framework development" | |
543 | - } | |
544 | - ], | |
545 | - "description": "Gravatar Widget for Yii 2", | |
546 | - "keywords": [ | |
547 | - "gravatar", | |
548 | - "yii" | |
549 | - ], | |
550 | - "time": "2013-12-10 17:49:58" | |
551 | - }, | |
552 | - { | |
553 | - "name": "codeception/codeception", | |
554 | - "version": "dev-master", | |
555 | - "source": { | |
556 | - "type": "git", | |
557 | - "url": "https://github.com/Codeception/Codeception.git", | |
558 | - "reference": "a04ceaea52d2a050d8df19df1a85fb1b24456477" | |
559 | - }, | |
560 | - "dist": { | |
561 | - "type": "zip", | |
562 | - "url": "https://api.github.com/repos/Codeception/Codeception/zipball/c3a92199d02598de6fb59fa57913a10909628e4f", | |
563 | - "reference": "a04ceaea52d2a050d8df19df1a85fb1b24456477", | |
564 | - "shasum": "" | |
565 | - }, | |
566 | - "require": { | |
567 | - "behat/gherkin": "~4.4.0", | |
568 | - "ext-json": "*", | |
569 | - "ext-mbstring": "*", | |
570 | - "facebook/webdriver": ">=1.0.1 <2.0", | |
571 | - "guzzlehttp/guzzle": ">=4.1.4 <7.0", | |
572 | - "guzzlehttp/psr7": "~1.0", | |
573 | - "php": ">=5.4.0 <8.0", | |
574 | - "phpunit/php-code-coverage": ">=2.1.3", | |
575 | - "phpunit/phpunit": ">4.8.20 <6.0", | |
576 | - "symfony/browser-kit": ">=2.7 <3.1", | |
577 | - "symfony/console": ">=2.7 <3.1", | |
578 | - "symfony/css-selector": ">=2.7 <3.1", | |
579 | - "symfony/dom-crawler": ">=2.7 <3.1", | |
580 | - "symfony/event-dispatcher": ">=2.7 <3.1", | |
581 | - "symfony/finder": ">=2.7 <3.1", | |
582 | - "symfony/yaml": ">=2.7 <3.1" | |
583 | - }, | |
584 | - "require-dev": { | |
585 | - "codeception/specify": "~0.3", | |
586 | - "facebook/php-sdk-v4": "~5.0", | |
587 | - "flow/jsonpath": "~0.2", | |
588 | - "league/factory-muffin": "^3.0", | |
589 | - "league/factory-muffin-faker": "^1.0", | |
590 | - "monolog/monolog": "~1.8", | |
591 | - "pda/pheanstalk": "~3.0", | |
592 | - "php-amqplib/php-amqplib": "~2.4" | |
593 | - }, | |
594 | - "suggest": { | |
595 | - "codeception/specify": "BDD-style code blocks", | |
596 | - "codeception/verify": "BDD-style assertions", | |
597 | - "flow/jsonpath": "For using JSONPath in REST module", | |
598 | - "league/factory-muffin": "For DataFactory module", | |
599 | - "league/factory-muffin-faker": "For Faker support in DataFactory module", | |
600 | - "phpseclib/phpseclib": "for SFTP option in FTP Module" | |
601 | - }, | |
602 | - "bin": [ | |
603 | - "codecept" | |
604 | - ], | |
605 | - "type": "library", | |
606 | - "extra": { | |
607 | - "branch-alias": [] | |
608 | - }, | |
609 | - "autoload": { | |
610 | - "psr-4": { | |
611 | - "Codeception\\": "src\\Codeception", | |
612 | - "Codeception\\Extension\\": "ext" | |
613 | - } | |
614 | - }, | |
615 | - "notification-url": "https://packagist.org/downloads/", | |
616 | - "license": [ | |
617 | - "MIT" | |
618 | - ], | |
619 | - "authors": [ | |
620 | - { | |
621 | - "name": "Michael Bodnarchuk", | |
622 | - "email": "davert@mail.ua", | |
623 | - "homepage": "http://codegyre.com" | |
624 | - } | |
625 | - ], | |
626 | - "description": "BDD-style testing framework", | |
627 | - "homepage": "http://codeception.com/", | |
628 | - "keywords": [ | |
629 | - "BDD", | |
630 | - "TDD", | |
631 | - "acceptance testing", | |
632 | - "functional testing", | |
633 | - "unit testing" | |
634 | - ], | |
635 | - "time": "2016-03-26 21:39:36" | |
636 | - }, | |
637 | - { | |
638 | - "name": "developeruz/yii2-db-rbac", | |
639 | - "version": "dev-master", | |
640 | - "source": { | |
641 | - "type": "git", | |
642 | - "url": "https://github.com/developeruz/yii2-db-rbac.git", | |
643 | - "reference": "28c1b0ebcc45b6365af6f1e9949b4d9cfeaebf1b" | |
644 | - }, | |
645 | - "dist": { | |
646 | - "type": "zip", | |
647 | - "url": "https://api.github.com/repos/developeruz/yii2-db-rbac/zipball/28c1b0ebcc45b6365af6f1e9949b4d9cfeaebf1b", | |
648 | - "reference": "28c1b0ebcc45b6365af6f1e9949b4d9cfeaebf1b", | |
649 | - "shasum": "" | |
650 | - }, | |
651 | - "require": { | |
652 | - "yiisoft/yii2": "*" | |
653 | - }, | |
654 | - "type": "yii2-extension", | |
655 | - "autoload": { | |
656 | - "psr-4": { | |
657 | - "developeruz\\db_rbac\\": "" | |
658 | - } | |
659 | - }, | |
660 | - "notification-url": "https://packagist.org/downloads/", | |
661 | - "license": [ | |
662 | - "MIT" | |
663 | - ], | |
664 | - "authors": [ | |
665 | - { | |
666 | - "name": "Elvira Sheina", | |
667 | - "email": "elleuz@gmail.com", | |
668 | - "homepage": "http://developer.uz" | |
669 | - } | |
670 | - ], | |
671 | - "description": "Dynamic control of access rights in YII2", | |
672 | - "keywords": [ | |
673 | - "rbac", | |
674 | - "yii" | |
675 | - ], | |
676 | - "time": "2015-10-03 05:56:47" | |
677 | - }, | |
678 | - { | |
679 | - "name": "dmstr/yii2-adminlte-asset", | |
680 | - "version": "2.3.0", | |
681 | - "source": { | |
682 | - "type": "git", | |
683 | - "url": "https://github.com/dmstr/yii2-adminlte-asset.git", | |
684 | - "reference": "73eca05cf04d70f169a88b430d2c03c3b54d623a" | |
685 | - }, | |
686 | - "dist": { | |
687 | - "type": "zip", | |
688 | - "url": "https://api.github.com/repos/dmstr/yii2-adminlte-asset/zipball/73eca05cf04d70f169a88b430d2c03c3b54d623a", | |
689 | - "reference": "73eca05cf04d70f169a88b430d2c03c3b54d623a", | |
690 | - "shasum": "" | |
691 | - }, | |
692 | - "require": { | |
693 | - "almasaeed2010/adminlte": "~2.0", | |
694 | - "cebe/yii2-gravatar": "1.*", | |
695 | - "rmrevin/yii2-fontawesome": "~2.9", | |
696 | - "yiisoft/yii2": "2.*", | |
697 | - "yiisoft/yii2-bootstrap": "2.*" | |
698 | - }, | |
699 | - "type": "yii2-extension", | |
700 | - "extra": { | |
701 | - "branch-alias": { | |
702 | - "dev-master": "2.0.x-dev" | |
703 | - } | |
704 | - }, | |
705 | - "autoload": { | |
706 | - "psr-4": { | |
707 | - "dmstr\\": "" | |
708 | - } | |
709 | - }, | |
710 | - "notification-url": "https://packagist.org/downloads/", | |
711 | - "license": [ | |
712 | - "BSD-3-Clause" | |
713 | - ], | |
714 | - "authors": [ | |
715 | - { | |
716 | - "name": "Tobias Munk", | |
717 | - "email": "tobias@diemeisterei.de" | |
718 | - }, | |
719 | - { | |
720 | - "name": "Evgeniy Tkachenko", | |
721 | - "email": "et.coder@gmail.com" | |
722 | - } | |
723 | - ], | |
724 | - "description": "Backend theme for Yii2 Framework", | |
725 | - "keywords": [ | |
726 | - "AdminLTE", | |
727 | - "extension", | |
728 | - "yii2" | |
729 | - ], | |
730 | - "time": "2016-03-23 04:18:15" | |
731 | - }, | |
732 | - { | |
733 | - "name": "doctrine/instantiator", | |
734 | - "version": "dev-master", | |
735 | - "source": { | |
736 | - "type": "git", | |
737 | - "url": "https://github.com/doctrine/instantiator.git", | |
738 | - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" | |
739 | - }, | |
740 | - "dist": { | |
741 | - "type": "zip", | |
742 | - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/416fb8ad1d095a87f1d21bc40711843cd122fd4a", | |
743 | - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", | |
744 | - "shasum": "" | |
745 | - }, | |
746 | - "require": { | |
747 | - "php": ">=5.3,<8.0-DEV" | |
748 | - }, | |
749 | - "require-dev": { | |
750 | - "athletic/athletic": "~0.1.8", | |
751 | - "ext-pdo": "*", | |
752 | - "ext-phar": "*", | |
753 | - "phpunit/phpunit": "~4.0", | |
754 | - "squizlabs/php_codesniffer": "~2.0" | |
755 | - }, | |
756 | - "type": "library", | |
757 | - "extra": { | |
758 | - "branch-alias": { | |
759 | - "dev-master": "1.0.x-dev" | |
760 | - } | |
761 | - }, | |
762 | - "autoload": { | |
763 | - "psr-4": { | |
764 | - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" | |
765 | - } | |
766 | - }, | |
767 | - "notification-url": "https://packagist.org/downloads/", | |
768 | - "license": [ | |
769 | - "MIT" | |
770 | - ], | |
771 | - "authors": [ | |
772 | - { | |
773 | - "name": "Marco Pivetta", | |
774 | - "email": "ocramius@gmail.com", | |
775 | - "homepage": "http://ocramius.github.com/" | |
776 | - } | |
777 | - ], | |
778 | - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", | |
779 | - "homepage": "https://github.com/doctrine/instantiator", | |
780 | - "keywords": [ | |
781 | - "constructor", | |
782 | - "instantiate" | |
783 | - ], | |
784 | - "time": "2015-06-14 21:17:01" | |
785 | - }, | |
786 | - { | |
787 | - "name": "ezyang/htmlpurifier", | |
788 | - "version": "v4.7.0", | |
789 | - "source": { | |
790 | - "type": "git", | |
791 | - "url": "https://github.com/ezyang/htmlpurifier.git", | |
792 | - "reference": "ae1828d955112356f7677c465f94f7deb7d27a40" | |
793 | - }, | |
794 | - "dist": { | |
795 | - "type": "zip", | |
796 | - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/ae1828d955112356f7677c465f94f7deb7d27a40", | |
797 | - "reference": "ae1828d955112356f7677c465f94f7deb7d27a40", | |
798 | - "shasum": "" | |
799 | - }, | |
800 | - "require": { | |
801 | - "php": ">=5.2" | |
802 | - }, | |
803 | - "type": "library", | |
804 | - "autoload": { | |
805 | - "psr-0": { | |
806 | - "HTMLPurifier": "library/" | |
807 | - }, | |
808 | - "files": [ | |
809 | - "library/HTMLPurifier.composer.php" | |
810 | - ] | |
811 | - }, | |
812 | - "notification-url": "https://packagist.org/downloads/", | |
813 | - "license": [ | |
814 | - "LGPL" | |
815 | - ], | |
816 | - "authors": [ | |
817 | - { | |
818 | - "name": "Edward Z. Yang", | |
819 | - "email": "admin@htmlpurifier.org", | |
820 | - "homepage": "http://ezyang.com" | |
821 | - } | |
822 | - ], | |
823 | - "description": "Standards compliant HTML filter written in PHP", | |
824 | - "homepage": "http://htmlpurifier.org/", | |
825 | - "keywords": [ | |
826 | - "html" | |
827 | - ], | |
828 | - "time": "2015-08-05 01:03:42" | |
829 | - }, | |
830 | - { | |
831 | - "name": "facebook/webdriver", | |
832 | - "version": "1.1.1", | |
833 | - "source": { | |
834 | - "type": "git", | |
835 | - "url": "https://github.com/facebook/php-webdriver.git", | |
836 | - "reference": "1c98108ba3eb435b681655764de11502a0653705" | |
837 | - }, | |
838 | - "dist": { | |
839 | - "type": "zip", | |
840 | - "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/1c98108ba3eb435b681655764de11502a0653705", | |
841 | - "reference": "1c98108ba3eb435b681655764de11502a0653705", | |
842 | - "shasum": "" | |
843 | - }, | |
844 | - "require": { | |
845 | - "php": ">=5.3.19" | |
846 | - }, | |
847 | - "require-dev": { | |
848 | - "phpunit/phpunit": "4.6.*" | |
849 | - }, | |
850 | - "suggest": { | |
851 | - "phpdocumentor/phpdocumentor": "2.*" | |
852 | - }, | |
853 | - "type": "library", | |
854 | - "autoload": { | |
855 | - "psr-4": { | |
856 | - "Facebook\\WebDriver\\": "lib/" | |
857 | - } | |
858 | - }, | |
859 | - "notification-url": "https://packagist.org/downloads/", | |
860 | - "license": [ | |
861 | - "Apache-2.0" | |
862 | - ], | |
863 | - "description": "A PHP client for WebDriver", | |
864 | - "homepage": "https://github.com/facebook/php-webdriver", | |
865 | - "keywords": [ | |
866 | - "facebook", | |
867 | - "php", | |
868 | - "selenium", | |
869 | - "webdriver" | |
870 | - ], | |
871 | - "time": "2015-12-31 15:58:49" | |
872 | - }, | |
873 | - { | |
874 | - "name": "fortawesome/font-awesome", | |
875 | - "version": "dev-master", | |
876 | - "source": { | |
877 | - "type": "git", | |
878 | - "url": "https://github.com/FortAwesome/Font-Awesome.git", | |
879 | - "reference": "f97ab41d187553e86abb8c7f6c057c9c0b88de58" | |
880 | - }, | |
881 | - "dist": { | |
882 | - "type": "zip", | |
883 | - "url": "https://api.github.com/repos/FortAwesome/Font-Awesome/zipball/06b2efcda0d4612eccdaf8b79ae428fd079f2dfb", | |
884 | - "reference": "f97ab41d187553e86abb8c7f6c057c9c0b88de58", | |
885 | - "shasum": "" | |
886 | - }, | |
887 | - "require-dev": { | |
888 | - "jekyll": "1.0.2", | |
889 | - "lessc": "1.4.2" | |
890 | - }, | |
891 | - "type": "library", | |
892 | - "extra": { | |
893 | - "branch-alias": { | |
894 | - "dev-master": "4.0.x-dev" | |
895 | - } | |
896 | - }, | |
897 | - "notification-url": "https://packagist.org/downloads/", | |
898 | - "license": [ | |
899 | - "OFL-1.1", | |
900 | - "MIT" | |
901 | - ], | |
902 | - "authors": [ | |
903 | - { | |
904 | - "name": "Dave Gandy", | |
905 | - "email": "dave@fontawesome.io", | |
906 | - "homepage": "http://twitter.com/davegandy", | |
907 | - "role": "Developer" | |
908 | - } | |
909 | - ], | |
910 | - "description": "The iconic font and CSS framework", | |
911 | - "homepage": "http://fontawesome.io/", | |
912 | - "keywords": [ | |
913 | - "FontAwesome", | |
914 | - "awesome", | |
915 | - "bootstrap", | |
916 | - "font", | |
917 | - "icon" | |
918 | - ], | |
919 | - "time": "2016-03-23 12:04:52" | |
920 | - }, | |
921 | - { | |
922 | - "name": "guzzlehttp/guzzle", | |
923 | - "version": "dev-master", | |
924 | - "source": { | |
925 | - "type": "git", | |
926 | - "url": "https://github.com/guzzle/guzzle.git", | |
927 | - "reference": "d094e337976dff9d8e2424e8485872194e768662" | |
928 | - }, | |
929 | - "dist": { | |
930 | - "type": "zip", | |
931 | - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/85cb758d7367f3aaaa8ffc9269e777919c5f68bb", | |
932 | - "reference": "d094e337976dff9d8e2424e8485872194e768662", | |
933 | - "shasum": "" | |
934 | - }, | |
935 | - "require": { | |
936 | - "guzzlehttp/promises": "~1.0", | |
937 | - "guzzlehttp/psr7": "~1.1", | |
938 | - "php": ">=5.5.0" | |
939 | - }, | |
940 | - "require-dev": { | |
941 | - "ext-curl": "*", | |
942 | - "phpunit/phpunit": "~4.0", | |
943 | - "psr/log": "~1.0" | |
944 | - }, | |
945 | - "type": "library", | |
946 | - "extra": { | |
947 | - "branch-alias": { | |
948 | - "dev-master": "6.2-dev" | |
949 | - } | |
950 | - }, | |
951 | - "autoload": { | |
952 | - "files": [ | |
953 | - "src/functions_include.php" | |
954 | - ], | |
955 | - "psr-4": { | |
956 | - "GuzzleHttp\\": "src/" | |
957 | - } | |
958 | - }, | |
959 | - "notification-url": "https://packagist.org/downloads/", | |
960 | - "license": [ | |
961 | - "MIT" | |
962 | - ], | |
963 | - "authors": [ | |
964 | - { | |
965 | - "name": "Michael Dowling", | |
966 | - "email": "mtdowling@gmail.com", | |
967 | - "homepage": "https://github.com/mtdowling" | |
968 | - } | |
969 | - ], | |
970 | - "description": "Guzzle is a PHP HTTP client library", | |
971 | - "homepage": "http://guzzlephp.org/", | |
972 | - "keywords": [ | |
973 | - "client", | |
974 | - "curl", | |
975 | - "framework", | |
976 | - "http", | |
977 | - "http client", | |
978 | - "rest", | |
979 | - "web service" | |
980 | - ], | |
981 | - "time": "2016-03-21 20:02:09" | |
982 | - }, | |
983 | - { | |
984 | - "name": "guzzlehttp/promises", | |
985 | - "version": "1.1.0", | |
986 | - "source": { | |
987 | - "type": "git", | |
988 | - "url": "https://github.com/guzzle/promises.git", | |
989 | - "reference": "bb9024c526b22f3fe6ae55a561fd70653d470aa8" | |
990 | - }, | |
991 | - "dist": { | |
992 | - "type": "zip", | |
993 | - "url": "https://api.github.com/repos/guzzle/promises/zipball/bb9024c526b22f3fe6ae55a561fd70653d470aa8", | |
994 | - "reference": "bb9024c526b22f3fe6ae55a561fd70653d470aa8", | |
995 | - "shasum": "" | |
996 | - }, | |
997 | - "require": { | |
998 | - "php": ">=5.5.0" | |
999 | - }, | |
1000 | - "require-dev": { | |
1001 | - "phpunit/phpunit": "~4.0" | |
1002 | - }, | |
1003 | - "type": "library", | |
1004 | - "extra": { | |
1005 | - "branch-alias": { | |
1006 | - "dev-master": "1.0-dev" | |
1007 | - } | |
1008 | - }, | |
1009 | - "autoload": { | |
1010 | - "psr-4": { | |
1011 | - "GuzzleHttp\\Promise\\": "src/" | |
1012 | - }, | |
1013 | - "files": [ | |
1014 | - "src/functions_include.php" | |
1015 | - ] | |
1016 | - }, | |
1017 | - "notification-url": "https://packagist.org/downloads/", | |
1018 | - "license": [ | |
1019 | - "MIT" | |
1020 | - ], | |
1021 | - "authors": [ | |
1022 | - { | |
1023 | - "name": "Michael Dowling", | |
1024 | - "email": "mtdowling@gmail.com", | |
1025 | - "homepage": "https://github.com/mtdowling" | |
1026 | - } | |
1027 | - ], | |
1028 | - "description": "Guzzle promises library", | |
1029 | - "keywords": [ | |
1030 | - "promise" | |
1031 | - ], | |
1032 | - "time": "2016-03-08 01:15:46" | |
1033 | - }, | |
1034 | - { | |
1035 | - "name": "guzzlehttp/psr7", | |
1036 | - "version": "1.3.0", | |
1037 | - "source": { | |
1038 | - "type": "git", | |
1039 | - "url": "https://github.com/guzzle/psr7.git", | |
1040 | - "reference": "31382fef2889136415751badebbd1cb022a4ed72" | |
1041 | - }, | |
1042 | - "dist": { | |
1043 | - "type": "zip", | |
1044 | - "url": "https://api.github.com/repos/guzzle/psr7/zipball/31382fef2889136415751badebbd1cb022a4ed72", | |
1045 | - "reference": "31382fef2889136415751badebbd1cb022a4ed72", | |
1046 | - "shasum": "" | |
1047 | - }, | |
1048 | - "require": { | |
1049 | - "php": ">=5.4.0", | |
1050 | - "psr/http-message": "~1.0" | |
1051 | - }, | |
1052 | - "provide": { | |
1053 | - "psr/http-message-implementation": "1.0" | |
1054 | - }, | |
1055 | - "require-dev": { | |
1056 | - "phpunit/phpunit": "~4.0" | |
1057 | - }, | |
1058 | - "type": "library", | |
1059 | - "extra": { | |
1060 | - "branch-alias": { | |
1061 | - "dev-master": "1.0-dev" | |
1062 | - } | |
1063 | - }, | |
1064 | - "autoload": { | |
1065 | - "psr-4": { | |
1066 | - "GuzzleHttp\\Psr7\\": "src/" | |
1067 | - }, | |
1068 | - "files": [ | |
1069 | - "src/functions_include.php" | |
1070 | - ] | |
1071 | - }, | |
1072 | - "notification-url": "https://packagist.org/downloads/", | |
1073 | - "license": [ | |
1074 | - "MIT" | |
1075 | - ], | |
1076 | - "authors": [ | |
1077 | - { | |
1078 | - "name": "Michael Dowling", | |
1079 | - "email": "mtdowling@gmail.com", | |
1080 | - "homepage": "https://github.com/mtdowling" | |
1081 | - } | |
1082 | - ], | |
1083 | - "description": "PSR-7 message implementation", | |
1084 | - "keywords": [ | |
1085 | - "http", | |
1086 | - "message", | |
1087 | - "stream", | |
1088 | - "uri" | |
1089 | - ], | |
1090 | - "time": "2016-04-13 19:56:01" | |
1091 | - }, | |
1092 | - { | |
1093 | - "name": "imagine/imagine", | |
1094 | - "version": "0.5.x-dev", | |
1095 | - "source": { | |
1096 | - "type": "git", | |
1097 | - "url": "https://github.com/avalanche123/Imagine.git", | |
1098 | - "reference": "343580fceed1f89220481ac98480e92f47d91e6c" | |
1099 | - }, | |
1100 | - "dist": { | |
1101 | - "type": "zip", | |
1102 | - "url": "https://api.github.com/repos/avalanche123/Imagine/zipball/343580fceed1f89220481ac98480e92f47d91e6c", | |
1103 | - "reference": "343580fceed1f89220481ac98480e92f47d91e6c", | |
1104 | - "shasum": "" | |
1105 | - }, | |
1106 | - "require": { | |
1107 | - "php": ">=5.3.2" | |
1108 | - }, | |
1109 | - "require-dev": { | |
1110 | - "sami/sami": "dev-master" | |
1111 | - }, | |
1112 | - "suggest": { | |
1113 | - "ext-gd": "to use the GD implementation", | |
1114 | - "ext-gmagick": "to use the Gmagick implementation", | |
1115 | - "ext-imagick": "to use the Imagick implementation" | |
1116 | - }, | |
1117 | - "type": "library", | |
1118 | - "extra": { | |
1119 | - "branch-alias": { | |
1120 | - "dev-develop": "0.5-dev" | |
1121 | - } | |
1122 | - }, | |
1123 | - "autoload": { | |
1124 | - "psr-0": { | |
1125 | - "Imagine": "lib/" | |
1126 | - } | |
1127 | - }, | |
1128 | - "notification-url": "https://packagist.org/downloads/", | |
1129 | - "license": [ | |
1130 | - "MIT" | |
1131 | - ], | |
1132 | - "authors": [ | |
1133 | - { | |
1134 | - "name": "Bulat Shakirzyanov", | |
1135 | - "email": "mallluhuct@gmail.com", | |
1136 | - "homepage": "http://avalanche123.com" | |
1137 | - } | |
1138 | - ], | |
1139 | - "description": "Image processing for PHP 5.3", | |
1140 | - "homepage": "http://imagine.readthedocs.org/", | |
1141 | - "keywords": [ | |
1142 | - "drawing", | |
1143 | - "graphics", | |
1144 | - "image manipulation", | |
1145 | - "image processing" | |
1146 | - ], | |
1147 | - "time": "2014-06-13 10:54:04" | |
1148 | - }, | |
1149 | - { | |
1150 | - "name": "ircmaxell/random-lib", | |
1151 | - "version": "dev-master", | |
1152 | - "source": { | |
1153 | - "type": "git", | |
1154 | - "url": "https://github.com/ircmaxell/RandomLib.git", | |
1155 | - "reference": "ad6a37d7bce67b0954be63feb1b4c47da77c527f" | |
1156 | - }, | |
1157 | - "dist": { | |
1158 | - "type": "zip", | |
1159 | - "url": "https://api.github.com/repos/ircmaxell/RandomLib/zipball/ad6a37d7bce67b0954be63feb1b4c47da77c527f", | |
1160 | - "reference": "ad6a37d7bce67b0954be63feb1b4c47da77c527f", | |
1161 | - "shasum": "" | |
1162 | - }, | |
1163 | - "require": { | |
1164 | - "ircmaxell/security-lib": "1.1.*@dev", | |
1165 | - "php": ">=5.3.2" | |
1166 | - }, | |
1167 | - "require-dev": { | |
1168 | - "mikey179/vfsstream": "1.1.*", | |
1169 | - "phpunit/phpunit": "3.7.*" | |
1170 | - }, | |
1171 | - "type": "library", | |
1172 | - "extra": { | |
1173 | - "branch-alias": { | |
1174 | - "dev-master": "1.1.x-dev" | |
1175 | - } | |
1176 | - }, | |
1177 | - "autoload": { | |
1178 | - "psr-0": { | |
1179 | - "RandomLib": "lib" | |
1180 | - } | |
1181 | - }, | |
1182 | - "notification-url": "https://packagist.org/downloads/", | |
1183 | - "license": [ | |
1184 | - "MIT" | |
1185 | - ], | |
1186 | - "authors": [ | |
1187 | - { | |
1188 | - "name": "Anthony Ferrara", | |
1189 | - "email": "ircmaxell@ircmaxell.com", | |
1190 | - "homepage": "http://blog.ircmaxell.com" | |
1191 | - } | |
1192 | - ], | |
1193 | - "description": "A Library For Generating Secure Random Numbers", | |
1194 | - "homepage": "https://github.com/ircmaxell/RandomLib", | |
1195 | - "keywords": [ | |
1196 | - "cryptography", | |
1197 | - "random", | |
1198 | - "random-numbers", | |
1199 | - "random-strings" | |
1200 | - ], | |
1201 | - "time": "2016-02-22 13:55:31" | |
1202 | - }, | |
1203 | - { | |
1204 | - "name": "ircmaxell/security-lib", | |
1205 | - "version": "v1.1.0", | |
1206 | - "source": { | |
1207 | - "type": "git", | |
1208 | - "url": "https://github.com/ircmaxell/SecurityLib.git", | |
1209 | - "reference": "f3db6de12c20c9bcd1aa3db4353a1bbe0e44e1b5" | |
1210 | - }, | |
1211 | - "dist": { | |
1212 | - "type": "zip", | |
1213 | - "url": "https://api.github.com/repos/ircmaxell/SecurityLib/zipball/f3db6de12c20c9bcd1aa3db4353a1bbe0e44e1b5", | |
1214 | - "reference": "f3db6de12c20c9bcd1aa3db4353a1bbe0e44e1b5", | |
1215 | - "shasum": "" | |
1216 | - }, | |
1217 | - "require": { | |
1218 | - "php": ">=5.3.2" | |
1219 | - }, | |
1220 | - "require-dev": { | |
1221 | - "mikey179/vfsstream": "1.1.*" | |
1222 | - }, | |
1223 | - "type": "library", | |
1224 | - "extra": { | |
1225 | - "branch-alias": { | |
1226 | - "dev-master": "1.0.x-dev" | |
1227 | - } | |
1228 | - }, | |
1229 | - "autoload": { | |
1230 | - "psr-0": { | |
1231 | - "SecurityLib": "lib" | |
1232 | - } | |
1233 | - }, | |
1234 | - "notification-url": "https://packagist.org/downloads/", | |
1235 | - "license": [ | |
1236 | - "MIT" | |
1237 | - ], | |
1238 | - "authors": [ | |
1239 | - { | |
1240 | - "name": "Anthony Ferrara", | |
1241 | - "email": "ircmaxell@ircmaxell.com", | |
1242 | - "homepage": "http://blog.ircmaxell.com" | |
1243 | - } | |
1244 | - ], | |
1245 | - "description": "A Base Security Library", | |
1246 | - "homepage": "https://github.com/ircmaxell/SecurityLib", | |
1247 | - "time": "2015-03-20 14:31:23" | |
1248 | - }, | |
1249 | - { | |
1250 | - "name": "kartik-v/yii2-krajee-base", | |
1251 | - "version": "dev-master", | |
1252 | - "source": { | |
1253 | - "type": "git", | |
1254 | - "url": "https://github.com/kartik-v/yii2-krajee-base.git", | |
1255 | - "reference": "3e491e51ed742663b239cd6e0b7f76d403bed7e1" | |
1256 | - }, | |
1257 | - "dist": { | |
1258 | - "type": "zip", | |
1259 | - "url": "https://api.github.com/repos/kartik-v/yii2-krajee-base/zipball/3115b09aeb15a5e06f38dc16860baf153d9bf70e", | |
1260 | - "reference": "3e491e51ed742663b239cd6e0b7f76d403bed7e1", | |
1261 | - "shasum": "" | |
1262 | - }, | |
1263 | - "require": { | |
1264 | - "yiisoft/yii2-bootstrap": "@dev" | |
1265 | - }, | |
1266 | - "type": "yii2-extension", | |
1267 | - "extra": { | |
1268 | - "branch-alias": { | |
1269 | - "dev-master": "1.8.x-dev" | |
1270 | - } | |
1271 | - }, | |
1272 | - "autoload": { | |
1273 | - "psr-4": { | |
1274 | - "kartik\\base\\": "" | |
1275 | - } | |
1276 | - }, | |
1277 | - "notification-url": "https://packagist.org/downloads/", | |
1278 | - "license": [ | |
1279 | - "BSD-3-Clause" | |
1280 | - ], | |
1281 | - "authors": [ | |
1282 | - { | |
1283 | - "name": "Kartik Visweswaran", | |
1284 | - "email": "kartikv2@gmail.com", | |
1285 | - "homepage": "http://www.krajee.com/" | |
1286 | - } | |
1287 | - ], | |
1288 | - "description": "Base library and foundation components for all Yii2 Krajee extensions.", | |
1289 | - "homepage": "https://github.com/kartik-v/yii2-krajee-base", | |
1290 | - "keywords": [ | |
1291 | - "base", | |
1292 | - "extension", | |
1293 | - "foundation", | |
1294 | - "krajee", | |
1295 | - "widget", | |
1296 | - "yii2" | |
1297 | - ], | |
1298 | - "time": "2016-03-03 12:24:13" | |
1299 | - }, | |
1300 | - { | |
1301 | - "name": "kartik-v/yii2-widget-colorinput", | |
1302 | - "version": "dev-master", | |
1303 | - "source": { | |
1304 | - "type": "git", | |
1305 | - "url": "https://github.com/kartik-v/yii2-widget-colorinput.git", | |
1306 | - "reference": "18537fcdab0f5491d5eebff8e2464ef6a616ee4c" | |
1307 | - }, | |
1308 | - "dist": { | |
1309 | - "type": "zip", | |
1310 | - "url": "https://api.github.com/repos/kartik-v/yii2-widget-colorinput/zipball/1a10c5e9a528270e22dc8a5eba404c72f417665a", | |
1311 | - "reference": "18537fcdab0f5491d5eebff8e2464ef6a616ee4c", | |
1312 | - "shasum": "" | |
1313 | - }, | |
1314 | - "require": { | |
1315 | - "kartik-v/yii2-krajee-base": "*" | |
1316 | - }, | |
1317 | - "type": "yii2-extension", | |
1318 | - "extra": { | |
1319 | - "branch-alias": { | |
1320 | - "dev-master": "1.0.x-dev" | |
1321 | - } | |
1322 | - }, | |
1323 | - "autoload": { | |
1324 | - "psr-4": { | |
1325 | - "kartik\\color\\": "" | |
1326 | - } | |
1327 | - }, | |
1328 | - "notification-url": "https://packagist.org/downloads/", | |
1329 | - "license": [ | |
1330 | - "BSD 3-Clause" | |
1331 | - ], | |
1332 | - "authors": [ | |
1333 | - { | |
1334 | - "name": "Kartik Visweswaran", | |
1335 | - "email": "kartikv2@gmail.com", | |
1336 | - "homepage": "http://www.krajee.com/" | |
1337 | - } | |
1338 | - ], | |
1339 | - "description": "An enhanced Yii 2 widget encapsulating the HTML 5 color input (sub repo split from yii2-widgets)", | |
1340 | - "homepage": "https://github.com/kartik-v/yii2-widget-colorinput", | |
1341 | - "keywords": [ | |
1342 | - "HTML5", | |
1343 | - "color", | |
1344 | - "extension", | |
1345 | - "form", | |
1346 | - "input", | |
1347 | - "jquery", | |
1348 | - "plugin", | |
1349 | - "widget", | |
1350 | - "yii2" | |
1351 | - ], | |
1352 | - "time": "2016-02-02 14:28:12" | |
1353 | - }, | |
1354 | - { | |
1355 | - "name": "kartik-v/yii2-widget-datepicker", | |
1356 | - "version": "dev-master", | |
1357 | - "source": { | |
1358 | - "type": "git", | |
1359 | - "url": "https://github.com/kartik-v/yii2-widget-datepicker.git", | |
1360 | - "reference": "3f7b38886e334a2c8c4262f155d98812461efd36" | |
1361 | - }, | |
1362 | - "dist": { | |
1363 | - "type": "zip", | |
1364 | - "url": "https://api.github.com/repos/kartik-v/yii2-widget-datepicker/zipball/52606c8764a174aa0d5e6483ed811f617c74ee4e", | |
1365 | - "reference": "3f7b38886e334a2c8c4262f155d98812461efd36", | |
1366 | - "shasum": "" | |
1367 | - }, | |
1368 | - "require": { | |
1369 | - "kartik-v/yii2-krajee-base": "~1.7" | |
1370 | - }, | |
1371 | - "type": "yii2-extension", | |
1372 | - "extra": { | |
1373 | - "branch-alias": { | |
1374 | - "dev-master": "1.3.x-dev" | |
1375 | - } | |
1376 | - }, | |
1377 | - "autoload": { | |
1378 | - "psr-4": { | |
1379 | - "kartik\\date\\": "" | |
1380 | - } | |
1381 | - }, | |
1382 | - "notification-url": "https://packagist.org/downloads/", | |
1383 | - "license": [ | |
1384 | - "BSD-3-Clause" | |
1385 | - ], | |
1386 | - "authors": [ | |
1387 | - { | |
1388 | - "name": "Kartik Visweswaran", | |
1389 | - "email": "kartikv2@gmail.com", | |
1390 | - "homepage": "http://www.krajee.com/" | |
1391 | - } | |
1392 | - ], | |
1393 | - "description": "Enhanced Yii2 wrapper for the bootstrap datepicker plugin (sub repo split from yii2-widgets).", | |
1394 | - "homepage": "https://github.com/kartik-v/yii2-widget-datepicker", | |
1395 | - "keywords": [ | |
1396 | - "date", | |
1397 | - "extension", | |
1398 | - "form", | |
1399 | - "jquery", | |
1400 | - "picker", | |
1401 | - "plugin", | |
1402 | - "select2", | |
1403 | - "widget", | |
1404 | - "yii2" | |
1405 | - ], | |
1406 | - "time": "2016-03-29 09:44:50" | |
1407 | - }, | |
1408 | - { | |
1409 | - "name": "kartik-v/yii2-widget-select2", | |
1410 | - "version": "dev-master", | |
1411 | - "source": { | |
1412 | - "type": "git", | |
1413 | - "url": "https://github.com/kartik-v/yii2-widget-select2.git", | |
1414 | - "reference": "cb2a5992cb96bd2939e30ec1c76eba418d6a30af" | |
1415 | - }, | |
1416 | - "dist": { | |
1417 | - "type": "zip", | |
1418 | - "url": "https://api.github.com/repos/kartik-v/yii2-widget-select2/zipball/cb2a5992cb96bd2939e30ec1c76eba418d6a30af", | |
1419 | - "reference": "cb2a5992cb96bd2939e30ec1c76eba418d6a30af", | |
1420 | - "shasum": "" | |
1421 | - }, | |
1422 | - "require": { | |
1423 | - "kartik-v/yii2-krajee-base": "~1.7" | |
1424 | - }, | |
1425 | - "type": "yii2-extension", | |
1426 | - "extra": { | |
1427 | - "branch-alias": { | |
1428 | - "dev-master": "2.0.x-dev" | |
1429 | - } | |
1430 | - }, | |
1431 | - "autoload": { | |
1432 | - "psr-4": { | |
1433 | - "kartik\\select2\\": "" | |
1434 | - } | |
1435 | - }, | |
1436 | - "notification-url": "https://packagist.org/downloads/", | |
1437 | - "license": [ | |
1438 | - "BSD-3-Clause" | |
1439 | - ], | |
1440 | - "authors": [ | |
1441 | - { | |
1442 | - "name": "Kartik Visweswaran", | |
1443 | - "email": "kartikv2@gmail.com", | |
1444 | - "homepage": "http://www.krajee.com/" | |
1445 | - } | |
1446 | - ], | |
1447 | - "description": "Enhanced Yii2 wrapper for the Select2 jQuery plugin (sub repo split from yii2-widgets).", | |
1448 | - "homepage": "https://github.com/kartik-v/yii2-widget-select2", | |
1449 | - "keywords": [ | |
1450 | - "dropdown", | |
1451 | - "extension", | |
1452 | - "form", | |
1453 | - "jquery", | |
1454 | - "plugin", | |
1455 | - "select2", | |
1456 | - "widget", | |
1457 | - "yii2" | |
1458 | - ], | |
1459 | - "time": "2016-03-10 11:33:59" | |
1460 | - }, | |
1461 | - { | |
1462 | - "name": "league/oauth2-client", | |
1463 | - "version": "1.3.0", | |
1464 | - "source": { | |
1465 | - "type": "git", | |
1466 | - "url": "https://github.com/thephpleague/oauth2-client.git", | |
1467 | - "reference": "5e5c0bc5bd219515c8d8db8bcb61f19753101b7c" | |
1468 | - }, | |
1469 | - "dist": { | |
1470 | - "type": "zip", | |
1471 | - "url": "https://api.github.com/repos/thephpleague/oauth2-client/zipball/5e5c0bc5bd219515c8d8db8bcb61f19753101b7c", | |
1472 | - "reference": "5e5c0bc5bd219515c8d8db8bcb61f19753101b7c", | |
1473 | - "shasum": "" | |
1474 | - }, | |
1475 | - "require": { | |
1476 | - "ext-curl": "*", | |
1477 | - "guzzlehttp/guzzle": "~6.0", | |
1478 | - "ircmaxell/random-lib": "~1.1", | |
1479 | - "php": ">=5.5.0" | |
1480 | - }, | |
1481 | - "require-dev": { | |
1482 | - "jakub-onderka/php-parallel-lint": "0.8.*", | |
1483 | - "mockery/mockery": "~0.9", | |
1484 | - "phpunit/phpunit": "~4.0", | |
1485 | - "satooshi/php-coveralls": "0.6.*", | |
1486 | - "squizlabs/php_codesniffer": "~2.0" | |
1487 | - }, | |
1488 | - "type": "library", | |
1489 | - "extra": { | |
1490 | - "branch-alias": { | |
1491 | - "dev-master": "1.0.x-dev" | |
1492 | - } | |
1493 | - }, | |
1494 | - "autoload": { | |
1495 | - "psr-4": { | |
1496 | - "League\\OAuth2\\Client\\": "src/" | |
1497 | - } | |
1498 | - }, | |
1499 | - "notification-url": "https://packagist.org/downloads/", | |
1500 | - "license": [ | |
1501 | - "MIT" | |
1502 | - ], | |
1503 | - "authors": [ | |
1504 | - { | |
1505 | - "name": "Alex Bilbie", | |
1506 | - "email": "hello@alexbilbie.com", | |
1507 | - "homepage": "http://www.alexbilbie.com", | |
1508 | - "role": "Developer" | |
1509 | - } | |
1510 | - ], | |
1511 | - "description": "OAuth 2.0 Client Library", | |
1512 | - "keywords": [ | |
1513 | - "Authentication", | |
1514 | - "SSO", | |
1515 | - "authorization", | |
1516 | - "identity", | |
1517 | - "idp", | |
1518 | - "oauth", | |
1519 | - "oauth2", | |
1520 | - "single sign on" | |
1521 | - ], | |
1522 | - "time": "2016-02-13 20:18:03" | |
1523 | - }, | |
1524 | - { | |
1525 | - "name": "lusitanian/oauth", | |
1526 | - "version": "v0.3.6", | |
1527 | - "source": { | |
1528 | - "type": "git", | |
1529 | - "url": "https://github.com/Lusitanian/PHPoAuthLib.git", | |
1530 | - "reference": "4ce8c488971410233eb3b1e6d9ac4e81debb41d5" | |
1531 | - }, | |
1532 | - "dist": { | |
1533 | - "type": "zip", | |
1534 | - "url": "https://api.github.com/repos/Lusitanian/PHPoAuthLib/zipball/4ce8c488971410233eb3b1e6d9ac4e81debb41d5", | |
1535 | - "reference": "4ce8c488971410233eb3b1e6d9ac4e81debb41d5", | |
1536 | - "shasum": "" | |
1537 | - }, | |
1538 | - "require": { | |
1539 | - "php": ">=5.3.0" | |
1540 | - }, | |
1541 | - "require-dev": { | |
1542 | - "phpunit/phpunit": "3.7.*", | |
1543 | - "predis/predis": "0.8.*@dev", | |
1544 | - "symfony/http-foundation": "~2.1" | |
1545 | - }, | |
1546 | - "suggest": { | |
1547 | - "ext-openssl": "Allows for usage of secure connections with the stream-based HTTP client.", | |
1548 | - "predis/predis": "Allows using the Redis storage backend.", | |
1549 | - "symfony/http-foundation": "Allows using the Symfony Session storage backend." | |
1550 | - }, | |
1551 | - "type": "library", | |
1552 | - "extra": { | |
1553 | - "branch-alias": { | |
1554 | - "dev-master": "0.1-dev" | |
1555 | - } | |
1556 | - }, | |
1557 | - "autoload": { | |
1558 | - "psr-0": { | |
1559 | - "OAuth": "src", | |
1560 | - "OAuth\\Unit": "tests" | |
1561 | - } | |
1562 | - }, | |
1563 | - "notification-url": "https://packagist.org/downloads/", | |
1564 | - "license": [ | |
1565 | - "MIT" | |
1566 | - ], | |
1567 | - "authors": [ | |
1568 | - { | |
1569 | - "name": "David Desberg", | |
1570 | - "email": "david@daviddesberg.com" | |
1571 | - }, | |
1572 | - { | |
1573 | - "name": "Pieter Hordijk", | |
1574 | - "email": "info@pieterhordijk.com" | |
1575 | - } | |
1576 | - ], | |
1577 | - "description": "PHP 5.3+ oAuth 1/2 Library", | |
1578 | - "keywords": [ | |
1579 | - "Authentication", | |
1580 | - "authorization", | |
1581 | - "oauth", | |
1582 | - "security" | |
1583 | - ], | |
1584 | - "time": "2015-09-09 06:43:02" | |
1585 | - }, | |
1586 | - { | |
1587 | - "name": "mihaildev/yii2-ckeditor", | |
1588 | - "version": "dev-master", | |
1589 | - "source": { | |
1590 | - "type": "git", | |
1591 | - "url": "https://github.com/MihailDev/yii2-ckeditor.git", | |
1592 | - "reference": "d20aa7f6bcf610fee226d6eb15212a279875bf87" | |
1593 | - }, | |
1594 | - "dist": { | |
1595 | - "type": "zip", | |
1596 | - "url": "https://api.github.com/repos/MihailDev/yii2-ckeditor/zipball/d20aa7f6bcf610fee226d6eb15212a279875bf87", | |
1597 | - "reference": "d20aa7f6bcf610fee226d6eb15212a279875bf87", | |
1598 | - "shasum": "" | |
1599 | - }, | |
1600 | - "require": { | |
1601 | - "yiisoft/yii2": "*" | |
1602 | - }, | |
1603 | - "type": "yii2-extension", | |
1604 | - "extra": { | |
1605 | - "asset-installer-paths": { | |
1606 | - "npm-asset-library": "vendor/npm", | |
1607 | - "bower-asset-library": "vendor/bower" | |
1608 | - } | |
1609 | - }, | |
1610 | - "autoload": { | |
1611 | - "psr-4": { | |
1612 | - "mihaildev\\ckeditor\\": "" | |
1613 | - } | |
1614 | - }, | |
1615 | - "notification-url": "https://packagist.org/downloads/", | |
1616 | - "license": [ | |
1617 | - "BSD-3-Clause" | |
1618 | - ], | |
1619 | - "authors": [ | |
1620 | - { | |
1621 | - "name": "Mihail", | |
1622 | - "email": "mihail.kucher@gmail.com", | |
1623 | - "homepage": "https://github.com/MihailDev", | |
1624 | - "role": "Developer" | |
1625 | - } | |
1626 | - ], | |
1627 | - "description": "Yii2 CKEditor", | |
1628 | - "homepage": "https://github.com/MihailDev/yii2-ckeditor", | |
1629 | - "keywords": [ | |
1630 | - "CKEditor", | |
1631 | - "editor", | |
1632 | - "wysiwyg", | |
1633 | - "yii" | |
1634 | - ], | |
1635 | - "time": "2014-11-19 22:04:08" | |
1636 | - }, | |
1637 | - { | |
1638 | - "name": "mihaildev/yii2-elfinder", | |
1639 | - "version": "1.1.3", | |
1640 | - "source": { | |
1641 | - "type": "git", | |
1642 | - "url": "https://github.com/MihailDev/yii2-elfinder.git", | |
1643 | - "reference": "64b42572dec94e5c2d0d1630bce8292848a98f4b" | |
1644 | - }, | |
1645 | - "dist": { | |
1646 | - "type": "zip", | |
1647 | - "url": "https://api.github.com/repos/MihailDev/yii2-elfinder/zipball/64b42572dec94e5c2d0d1630bce8292848a98f4b", | |
1648 | - "reference": "64b42572dec94e5c2d0d1630bce8292848a98f4b", | |
1649 | - "shasum": "" | |
1650 | - }, | |
1651 | - "require": { | |
1652 | - "yiisoft/yii2-jui": "*" | |
1653 | - }, | |
1654 | - "type": "yii2-extension", | |
1655 | - "extra": { | |
1656 | - "asset-installer-paths": { | |
1657 | - "npm-asset-library": "vendor/npm", | |
1658 | - "bower-asset-library": "vendor/bower" | |
1659 | - } | |
1660 | - }, | |
1661 | - "autoload": { | |
1662 | - "psr-4": { | |
1663 | - "mihaildev\\elfinder\\": "" | |
1664 | - } | |
1665 | - }, | |
1666 | - "notification-url": "https://packagist.org/downloads/", | |
1667 | - "license": [ | |
1668 | - "BSD-3-Clause" | |
1669 | - ], | |
1670 | - "authors": [ | |
1671 | - { | |
1672 | - "name": "Mihail", | |
1673 | - "email": "mihail.kucher@gmail.com", | |
1674 | - "homepage": "https://github.com/MihailDev", | |
1675 | - "role": "Developer" | |
1676 | - } | |
1677 | - ], | |
1678 | - "description": "Yii2 ElFinder", | |
1679 | - "homepage": "https://github.com/MihailDev/yii2-elfinder", | |
1680 | - "keywords": [ | |
1681 | - "elfinder", | |
1682 | - "filemanager", | |
1683 | - "yii" | |
1684 | - ], | |
1685 | - "time": "2015-07-03 07:08:52" | |
1686 | - }, | |
1687 | - { | |
1688 | - "name": "nodge/lightopenid", | |
1689 | - "version": "1.1.2", | |
1690 | - "source": { | |
1691 | - "type": "git", | |
1692 | - "url": "https://github.com/Nodge/LightOpenID.git", | |
1693 | - "reference": "a5492cc0c932c557b7e9b54a6e5bbd85cc5fa041" | |
1694 | - }, | |
1695 | - "dist": { | |
1696 | - "type": "zip", | |
1697 | - "url": "https://api.github.com/repos/Nodge/LightOpenID/zipball/a5492cc0c932c557b7e9b54a6e5bbd85cc5fa041", | |
1698 | - "reference": "a5492cc0c932c557b7e9b54a6e5bbd85cc5fa041", | |
1699 | - "shasum": "" | |
1700 | - }, | |
1701 | - "require": { | |
1702 | - "php": ">=5.2" | |
1703 | - }, | |
1704 | - "type": "library", | |
1705 | - "autoload": { | |
1706 | - "classmap": [ | |
1707 | - "openid.php", | |
1708 | - "provider/provider.php" | |
1709 | - ] | |
1710 | - }, | |
1711 | - "notification-url": "https://packagist.org/downloads/", | |
1712 | - "license": [ | |
1713 | - "MIT License" | |
1714 | - ], | |
1715 | - "authors": [ | |
1716 | - { | |
1717 | - "name": "Mewp", | |
1718 | - "homepage": "http://code.google.com/p/lightopenid/" | |
1719 | - }, | |
1720 | - { | |
1721 | - "name": "Ignat Ignatov", | |
1722 | - "homepage": "https://github.com/iignatov/LightOpenID" | |
1723 | - } | |
1724 | - ], | |
1725 | - "description": "Lightweight PHP5 library for easy OpenID authentication.", | |
1726 | - "homepage": "https://github.com/Nodge/LightOpenID", | |
1727 | - "keywords": [ | |
1728 | - "Authentication", | |
1729 | - "OpenId" | |
1730 | - ], | |
1731 | - "time": "2013-08-31 16:48:56" | |
1732 | - }, | |
1733 | - { | |
1734 | - "name": "nodge/yii2-eauth", | |
1735 | - "version": "dev-master", | |
1736 | - "source": { | |
1737 | - "type": "git", | |
1738 | - "url": "https://github.com/Nodge/yii2-eauth.git", | |
1739 | - "reference": "f45efd95e3853db33153cc1b856d1f648d221938" | |
1740 | - }, | |
1741 | - "dist": { | |
1742 | - "type": "zip", | |
1743 | - "url": "https://api.github.com/repos/Nodge/yii2-eauth/zipball/f45efd95e3853db33153cc1b856d1f648d221938", | |
1744 | - "reference": "f45efd95e3853db33153cc1b856d1f648d221938", | |
1745 | - "shasum": "" | |
1746 | - }, | |
1747 | - "require": { | |
1748 | - "lib-curl": "*", | |
1749 | - "lusitanian/oauth": "~0.3.0", | |
1750 | - "nodge/lightopenid": "~1.1.0", | |
1751 | - "php": ">=5.4.0", | |
1752 | - "yiisoft/yii2": "*" | |
1753 | - }, | |
1754 | - "type": "yii2-extension", | |
1755 | - "extra": { | |
1756 | - "bootstrap": "nodge\\eauth\\Bootstrap" | |
1757 | - }, | |
1758 | - "autoload": { | |
1759 | - "psr-4": { | |
1760 | - "nodge\\eauth\\": "src/" | |
1761 | - } | |
1762 | - }, | |
1763 | - "notification-url": "https://packagist.org/downloads/", | |
1764 | - "license": [ | |
1765 | - "New BSD License" | |
1766 | - ], | |
1767 | - "authors": [ | |
1768 | - { | |
1769 | - "name": "Maxim Zemskov", | |
1770 | - "email": "nodge@yandex.ru", | |
1771 | - "homepage": "http://nodge.ru/" | |
1772 | - } | |
1773 | - ], | |
1774 | - "description": "Yii2 EAuth Extension. EAuth allows to authenticate users with accounts on other websites (Google, Facebook, Twitter, etc).", | |
1775 | - "homepage": "https://github.com/Nodge/yii2-eauth", | |
1776 | - "keywords": [ | |
1777 | - "Authentication", | |
1778 | - "OpenId", | |
1779 | - "eauth", | |
1780 | - "extension", | |
1781 | - "oauth", | |
1782 | - "yii2" | |
1783 | - ], | |
1784 | - "time": "2016-01-13 18:15:48" | |
1785 | - }, | |
1786 | - { | |
1787 | - "name": "phpdocumentor/reflection-docblock", | |
1788 | - "version": "2.0.4", | |
1789 | - "source": { | |
1790 | - "type": "git", | |
1791 | - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", | |
1792 | - "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8" | |
1793 | - }, | |
1794 | - "dist": { | |
1795 | - "type": "zip", | |
1796 | - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8", | |
1797 | - "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8", | |
1798 | - "shasum": "" | |
1799 | - }, | |
1800 | - "require": { | |
1801 | - "php": ">=5.3.3" | |
1802 | - }, | |
1803 | - "require-dev": { | |
1804 | - "phpunit/phpunit": "~4.0" | |
1805 | - }, | |
1806 | - "suggest": { | |
1807 | - "dflydev/markdown": "~1.0", | |
1808 | - "erusev/parsedown": "~1.0" | |
1809 | - }, | |
1810 | - "type": "library", | |
1811 | - "extra": { | |
1812 | - "branch-alias": { | |
1813 | - "dev-master": "2.0.x-dev" | |
1814 | - } | |
1815 | - }, | |
1816 | - "autoload": { | |
1817 | - "psr-0": { | |
1818 | - "phpDocumentor": [ | |
1819 | - "src/" | |
1820 | - ] | |
1821 | - } | |
1822 | - }, | |
1823 | - "notification-url": "https://packagist.org/downloads/", | |
1824 | - "license": [ | |
1825 | - "MIT" | |
1826 | - ], | |
1827 | - "authors": [ | |
1828 | - { | |
1829 | - "name": "Mike van Riel", | |
1830 | - "email": "mike.vanriel@naenius.com" | |
1831 | - } | |
1832 | - ], | |
1833 | - "time": "2015-02-03 12:10:50" | |
1834 | - }, | |
1835 | - { | |
1836 | - "name": "phpmailer/phpmailer", | |
1837 | - "version": "5.4.x-dev", | |
1838 | - "source": { | |
1839 | - "type": "git", | |
1840 | - "url": "https://github.com/PHPMailer/PHPMailer.git", | |
1841 | - "reference": "3d4e3b1a0da0a33889f8b0b2afda6ad4f6d011b5" | |
1842 | - }, | |
1843 | - "dist": { | |
1844 | - "type": "zip", | |
1845 | - "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/3d4e3b1a0da0a33889f8b0b2afda6ad4f6d011b5", | |
1846 | - "reference": "3d4e3b1a0da0a33889f8b0b2afda6ad4f6d011b5", | |
1847 | - "shasum": "" | |
1848 | - }, | |
1849 | - "require": { | |
1850 | - "php": ">=5.5.0" | |
1851 | - }, | |
1852 | - "require-dev": { | |
1853 | - "phpdocumentor/phpdocumentor": "2.*", | |
1854 | - "phpunit/phpunit": "4.*" | |
1855 | - }, | |
1856 | - "suggest": { | |
1857 | - "league/oauth2-client": "Needed for XOAUTH2 authentication" | |
1858 | - }, | |
1859 | - "type": "library", | |
1860 | - "autoload": { | |
1861 | - "psr-4": { | |
1862 | - "PHPMailer\\PHPMailer\\": "src/" | |
1863 | - } | |
1864 | - }, | |
1865 | - "notification-url": "https://packagist.org/downloads/", | |
1866 | - "license": [ | |
1867 | - "LGPL-2.1" | |
1868 | - ], | |
1869 | - "authors": [ | |
1870 | - { | |
1871 | - "name": "Jim Jagielski", | |
1872 | - "email": "jimjag@gmail.com" | |
1873 | - }, | |
1874 | - { | |
1875 | - "name": "Marcus Bointon", | |
1876 | - "email": "phpmailer@synchromedia.co.uk" | |
1877 | - }, | |
1878 | - { | |
1879 | - "name": "Andy Prevost", | |
1880 | - "email": "codeworxtech@users.sourceforge.net" | |
1881 | - }, | |
1882 | - { | |
1883 | - "name": "Brent R. Matzelle" | |
1884 | - } | |
1885 | - ], | |
1886 | - "description": "PHPMailer is a full-featured email creation and transfer class for PHP", | |
1887 | - "time": "2016-04-07 09:04:03" | |
1888 | - }, | |
1889 | - { | |
1890 | - "name": "phpspec/prophecy", | |
1891 | - "version": "dev-master", | |
1892 | - "source": { | |
1893 | - "type": "git", | |
1894 | - "url": "https://github.com/phpspec/prophecy.git", | |
1895 | - "reference": "b02221e42163be673f9b44a0bc92a8b4907a7c6d" | |
1896 | - }, | |
1897 | - "dist": { | |
1898 | - "type": "zip", | |
1899 | - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/b02221e42163be673f9b44a0bc92a8b4907a7c6d", | |
1900 | - "reference": "b02221e42163be673f9b44a0bc92a8b4907a7c6d", | |
1901 | - "shasum": "" | |
1902 | - }, | |
1903 | - "require": { | |
1904 | - "doctrine/instantiator": "^1.0.2", | |
1905 | - "php": "^5.3|^7.0", | |
1906 | - "phpdocumentor/reflection-docblock": "~2.0", | |
1907 | - "sebastian/comparator": "~1.1", | |
1908 | - "sebastian/recursion-context": "~1.0" | |
1909 | - }, | |
1910 | - "require-dev": { | |
1911 | - "phpspec/phpspec": "~2.0" | |
1912 | - }, | |
1913 | - "type": "library", | |
1914 | - "extra": { | |
1915 | - "branch-alias": { | |
1916 | - "dev-master": "1.6.x-dev" | |
1917 | - } | |
1918 | - }, | |
1919 | - "autoload": { | |
1920 | - "psr-0": { | |
1921 | - "Prophecy\\": "src/" | |
1922 | - } | |
1923 | - }, | |
1924 | - "notification-url": "https://packagist.org/downloads/", | |
1925 | - "license": [ | |
1926 | - "MIT" | |
1927 | - ], | |
1928 | - "authors": [ | |
1929 | - { | |
1930 | - "name": "Konstantin Kudryashov", | |
1931 | - "email": "ever.zet@gmail.com", | |
1932 | - "homepage": "http://everzet.com" | |
1933 | - }, | |
1934 | - { | |
1935 | - "name": "Marcello Duarte", | |
1936 | - "email": "marcello.duarte@gmail.com" | |
1937 | - } | |
1938 | - ], | |
1939 | - "description": "Highly opinionated mocking framework for PHP 5.3+", | |
1940 | - "homepage": "https://github.com/phpspec/prophecy", | |
1941 | - "keywords": [ | |
1942 | - "Double", | |
1943 | - "Dummy", | |
1944 | - "fake", | |
1945 | - "mock", | |
1946 | - "spy", | |
1947 | - "stub" | |
1948 | - ], | |
1949 | - "time": "2016-02-21 17:41:21" | |
1950 | - }, | |
1951 | - { | |
1952 | - "name": "phpunit/php-code-coverage", | |
1953 | - "version": "2.2.x-dev", | |
1954 | - "source": { | |
1955 | - "type": "git", | |
1956 | - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", | |
1957 | - "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" | |
1958 | - }, | |
1959 | - "dist": { | |
1960 | - "type": "zip", | |
1961 | - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", | |
1962 | - "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", | |
1963 | - "shasum": "" | |
1964 | - }, | |
1965 | - "require": { | |
1966 | - "php": ">=5.3.3", | |
1967 | - "phpunit/php-file-iterator": "~1.3", | |
1968 | - "phpunit/php-text-template": "~1.2", | |
1969 | - "phpunit/php-token-stream": "~1.3", | |
1970 | - "sebastian/environment": "^1.3.2", | |
1971 | - "sebastian/version": "~1.0" | |
1972 | - }, | |
1973 | - "require-dev": { | |
1974 | - "ext-xdebug": ">=2.1.4", | |
1975 | - "phpunit/phpunit": "~4" | |
1976 | - }, | |
1977 | - "suggest": { | |
1978 | - "ext-dom": "*", | |
1979 | - "ext-xdebug": ">=2.2.1", | |
1980 | - "ext-xmlwriter": "*" | |
1981 | - }, | |
1982 | - "type": "library", | |
1983 | - "extra": { | |
1984 | - "branch-alias": { | |
1985 | - "dev-master": "2.2.x-dev" | |
1986 | - } | |
1987 | - }, | |
1988 | - "autoload": { | |
1989 | - "classmap": [ | |
1990 | - "src/" | |
1991 | - ] | |
1992 | - }, | |
1993 | - "notification-url": "https://packagist.org/downloads/", | |
1994 | - "license": [ | |
1995 | - "BSD-3-Clause" | |
1996 | - ], | |
1997 | - "authors": [ | |
1998 | - { | |
1999 | - "name": "Sebastian Bergmann", | |
2000 | - "email": "sb@sebastian-bergmann.de", | |
2001 | - "role": "lead" | |
2002 | - } | |
2003 | - ], | |
2004 | - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", | |
2005 | - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", | |
2006 | - "keywords": [ | |
2007 | - "coverage", | |
2008 | - "testing", | |
2009 | - "xunit" | |
2010 | - ], | |
2011 | - "time": "2015-10-06 15:47:00" | |
2012 | - }, | |
2013 | - { | |
2014 | - "name": "phpunit/php-file-iterator", | |
2015 | - "version": "dev-master", | |
2016 | - "source": { | |
2017 | - "type": "git", | |
2018 | - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", | |
2019 | - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0" | |
2020 | - }, | |
2021 | - "dist": { | |
2022 | - "type": "zip", | |
2023 | - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0", | |
2024 | - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0", | |
2025 | - "shasum": "" | |
2026 | - }, | |
2027 | - "require": { | |
2028 | - "php": ">=5.3.3" | |
2029 | - }, | |
2030 | - "type": "library", | |
2031 | - "extra": { | |
2032 | - "branch-alias": { | |
2033 | - "dev-master": "1.4.x-dev" | |
2034 | - } | |
2035 | - }, | |
2036 | - "autoload": { | |
2037 | - "classmap": [ | |
2038 | - "src/" | |
2039 | - ] | |
2040 | - }, | |
2041 | - "notification-url": "https://packagist.org/downloads/", | |
2042 | - "license": [ | |
2043 | - "BSD-3-Clause" | |
2044 | - ], | |
2045 | - "authors": [ | |
2046 | - { | |
2047 | - "name": "Sebastian Bergmann", | |
2048 | - "email": "sb@sebastian-bergmann.de", | |
2049 | - "role": "lead" | |
2050 | - } | |
2051 | - ], | |
2052 | - "description": "FilterIterator implementation that filters files based on a list of suffixes.", | |
2053 | - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", | |
2054 | - "keywords": [ | |
2055 | - "filesystem", | |
2056 | - "iterator" | |
2057 | - ], | |
2058 | - "time": "2015-06-21 13:08:43" | |
2059 | - }, | |
2060 | - { | |
2061 | - "name": "phpunit/php-text-template", | |
2062 | - "version": "1.2.1", | |
2063 | - "source": { | |
2064 | - "type": "git", | |
2065 | - "url": "https://github.com/sebastianbergmann/php-text-template.git", | |
2066 | - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" | |
2067 | - }, | |
2068 | - "dist": { | |
2069 | - "type": "zip", | |
2070 | - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", | |
2071 | - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", | |
2072 | - "shasum": "" | |
2073 | - }, | |
2074 | - "require": { | |
2075 | - "php": ">=5.3.3" | |
2076 | - }, | |
2077 | - "type": "library", | |
2078 | - "autoload": { | |
2079 | - "classmap": [ | |
2080 | - "src/" | |
2081 | - ] | |
2082 | - }, | |
2083 | - "notification-url": "https://packagist.org/downloads/", | |
2084 | - "license": [ | |
2085 | - "BSD-3-Clause" | |
2086 | - ], | |
2087 | - "authors": [ | |
2088 | - { | |
2089 | - "name": "Sebastian Bergmann", | |
2090 | - "email": "sebastian@phpunit.de", | |
2091 | - "role": "lead" | |
2092 | - } | |
2093 | - ], | |
2094 | - "description": "Simple template engine.", | |
2095 | - "homepage": "https://github.com/sebastianbergmann/php-text-template/", | |
2096 | - "keywords": [ | |
2097 | - "template" | |
2098 | - ], | |
2099 | - "time": "2015-06-21 13:50:34" | |
2100 | - }, | |
2101 | - { | |
2102 | - "name": "phpunit/php-timer", | |
2103 | - "version": "dev-master", | |
2104 | - "source": { | |
2105 | - "type": "git", | |
2106 | - "url": "https://github.com/sebastianbergmann/php-timer.git", | |
2107 | - "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b" | |
2108 | - }, | |
2109 | - "dist": { | |
2110 | - "type": "zip", | |
2111 | - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3e82f4e9fc92665fafd9157568e4dcb01d014e5b", | |
2112 | - "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b", | |
2113 | - "shasum": "" | |
2114 | - }, | |
2115 | - "require": { | |
2116 | - "php": ">=5.3.3" | |
2117 | - }, | |
2118 | - "type": "library", | |
2119 | - "autoload": { | |
2120 | - "classmap": [ | |
2121 | - "src/" | |
2122 | - ] | |
2123 | - }, | |
2124 | - "notification-url": "https://packagist.org/downloads/", | |
2125 | - "license": [ | |
2126 | - "BSD-3-Clause" | |
2127 | - ], | |
2128 | - "authors": [ | |
2129 | - { | |
2130 | - "name": "Sebastian Bergmann", | |
2131 | - "email": "sb@sebastian-bergmann.de", | |
2132 | - "role": "lead" | |
2133 | - } | |
2134 | - ], | |
2135 | - "description": "Utility class for timing", | |
2136 | - "homepage": "https://github.com/sebastianbergmann/php-timer/", | |
2137 | - "keywords": [ | |
2138 | - "timer" | |
2139 | - ], | |
2140 | - "time": "2015-06-21 08:01:12" | |
2141 | - }, | |
2142 | - { | |
2143 | - "name": "phpunit/php-token-stream", | |
2144 | - "version": "dev-master", | |
2145 | - "source": { | |
2146 | - "type": "git", | |
2147 | - "url": "https://github.com/sebastianbergmann/php-token-stream.git", | |
2148 | - "reference": "cab6c6fefee93d7b7c3a01292a0fe0884ea66644" | |
2149 | - }, | |
2150 | - "dist": { | |
2151 | - "type": "zip", | |
2152 | - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/cab6c6fefee93d7b7c3a01292a0fe0884ea66644", | |
2153 | - "reference": "cab6c6fefee93d7b7c3a01292a0fe0884ea66644", | |
2154 | - "shasum": "" | |
2155 | - }, | |
2156 | - "require": { | |
2157 | - "ext-tokenizer": "*", | |
2158 | - "php": ">=5.3.3" | |
2159 | - }, | |
2160 | - "require-dev": { | |
2161 | - "phpunit/phpunit": "~4.2" | |
2162 | - }, | |
2163 | - "type": "library", | |
2164 | - "extra": { | |
2165 | - "branch-alias": { | |
2166 | - "dev-master": "1.4-dev" | |
2167 | - } | |
2168 | - }, | |
2169 | - "autoload": { | |
2170 | - "classmap": [ | |
2171 | - "src/" | |
2172 | - ] | |
2173 | - }, | |
2174 | - "notification-url": "https://packagist.org/downloads/", | |
2175 | - "license": [ | |
2176 | - "BSD-3-Clause" | |
2177 | - ], | |
2178 | - "authors": [ | |
2179 | - { | |
2180 | - "name": "Sebastian Bergmann", | |
2181 | - "email": "sebastian@phpunit.de" | |
2182 | - } | |
2183 | - ], | |
2184 | - "description": "Wrapper around PHP's tokenizer extension.", | |
2185 | - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", | |
2186 | - "keywords": [ | |
2187 | - "tokenizer" | |
2188 | - ], | |
2189 | - "time": "2015-09-23 14:46:55" | |
2190 | - }, | |
2191 | - { | |
2192 | - "name": "phpunit/phpunit", | |
2193 | - "version": "4.8.x-dev", | |
2194 | - "source": { | |
2195 | - "type": "git", | |
2196 | - "url": "https://github.com/sebastianbergmann/phpunit.git", | |
2197 | - "reference": "1a1b63266c046e1856fd03812a4e0ac2b51aa2d5" | |
2198 | - }, | |
2199 | - "dist": { | |
2200 | - "type": "zip", | |
2201 | - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/496745aeba741e63b7149da3e1f712d441751182", | |
2202 | - "reference": "1a1b63266c046e1856fd03812a4e0ac2b51aa2d5", | |
2203 | - "shasum": "" | |
2204 | - }, | |
2205 | - "require": { | |
2206 | - "ext-dom": "*", | |
2207 | - "ext-json": "*", | |
2208 | - "ext-pcre": "*", | |
2209 | - "ext-reflection": "*", | |
2210 | - "ext-spl": "*", | |
2211 | - "php": ">=5.3.3", | |
2212 | - "phpspec/prophecy": "^1.3.1", | |
2213 | - "phpunit/php-code-coverage": "~2.1", | |
2214 | - "phpunit/php-file-iterator": "~1.4", | |
2215 | - "phpunit/php-text-template": "~1.2", | |
2216 | - "phpunit/php-timer": ">=1.0.6", | |
2217 | - "phpunit/phpunit-mock-objects": "~2.3", | |
2218 | - "sebastian/comparator": "~1.1", | |
2219 | - "sebastian/diff": "~1.2", | |
2220 | - "sebastian/environment": "~1.3", | |
2221 | - "sebastian/exporter": "~1.2", | |
2222 | - "sebastian/global-state": "~1.0", | |
2223 | - "sebastian/version": "~1.0", | |
2224 | - "symfony/yaml": "~2.1|~3.0" | |
2225 | - }, | |
2226 | - "suggest": { | |
2227 | - "phpunit/php-invoker": "~1.1" | |
2228 | - }, | |
2229 | - "bin": [ | |
2230 | - "phpunit" | |
2231 | - ], | |
2232 | - "type": "library", | |
2233 | - "extra": { | |
2234 | - "branch-alias": { | |
2235 | - "dev-master": "4.8.x-dev" | |
2236 | - } | |
2237 | - }, | |
2238 | - "autoload": { | |
2239 | - "classmap": [ | |
2240 | - "src/" | |
2241 | - ] | |
2242 | - }, | |
2243 | - "notification-url": "https://packagist.org/downloads/", | |
2244 | - "license": [ | |
2245 | - "BSD-3-Clause" | |
2246 | - ], | |
2247 | - "authors": [ | |
2248 | - { | |
2249 | - "name": "Sebastian Bergmann", | |
2250 | - "email": "sebastian@phpunit.de", | |
2251 | - "role": "lead" | |
2252 | - } | |
2253 | - ], | |
2254 | - "description": "The PHP Unit Testing framework.", | |
2255 | - "homepage": "https://phpunit.de/", | |
2256 | - "keywords": [ | |
2257 | - "phpunit", | |
2258 | - "testing", | |
2259 | - "xunit" | |
2260 | - ], | |
2261 | - "time": "2016-03-14 15:10:21" | |
2262 | - }, | |
2263 | - { | |
2264 | - "name": "phpunit/phpunit-mock-objects", | |
2265 | - "version": "2.3.x-dev", | |
2266 | - "source": { | |
2267 | - "type": "git", | |
2268 | - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", | |
2269 | - "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" | |
2270 | - }, | |
2271 | - "dist": { | |
2272 | - "type": "zip", | |
2273 | - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", | |
2274 | - "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", | |
2275 | - "shasum": "" | |
2276 | - }, | |
2277 | - "require": { | |
2278 | - "doctrine/instantiator": "^1.0.2", | |
2279 | - "php": ">=5.3.3", | |
2280 | - "phpunit/php-text-template": "~1.2", | |
2281 | - "sebastian/exporter": "~1.2" | |
2282 | - }, | |
2283 | - "require-dev": { | |
2284 | - "phpunit/phpunit": "~4.4" | |
2285 | - }, | |
2286 | - "suggest": { | |
2287 | - "ext-soap": "*" | |
2288 | - }, | |
2289 | - "type": "library", | |
2290 | - "extra": { | |
2291 | - "branch-alias": { | |
2292 | - "dev-master": "2.3.x-dev" | |
2293 | - } | |
2294 | - }, | |
2295 | - "autoload": { | |
2296 | - "classmap": [ | |
2297 | - "src/" | |
2298 | - ] | |
2299 | - }, | |
2300 | - "notification-url": "https://packagist.org/downloads/", | |
2301 | - "license": [ | |
2302 | - "BSD-3-Clause" | |
2303 | - ], | |
2304 | - "authors": [ | |
2305 | - { | |
2306 | - "name": "Sebastian Bergmann", | |
2307 | - "email": "sb@sebastian-bergmann.de", | |
2308 | - "role": "lead" | |
2309 | - } | |
2310 | - ], | |
2311 | - "description": "Mock Object library for PHPUnit", | |
2312 | - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", | |
2313 | - "keywords": [ | |
2314 | - "mock", | |
2315 | - "xunit" | |
2316 | - ], | |
2317 | - "time": "2015-10-02 06:51:40" | |
2318 | - }, | |
2319 | - { | |
2320 | - "name": "psr/http-message", | |
2321 | - "version": "dev-master", | |
2322 | - "source": { | |
2323 | - "type": "git", | |
2324 | - "url": "https://github.com/php-fig/http-message.git", | |
2325 | - "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298" | |
2326 | - }, | |
2327 | - "dist": { | |
2328 | - "type": "zip", | |
2329 | - "url": "https://api.github.com/repos/php-fig/http-message/zipball/85d63699f0dbedb190bbd4b0d2b9dc707ea4c298", | |
2330 | - "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298", | |
2331 | - "shasum": "" | |
2332 | - }, | |
2333 | - "require": { | |
2334 | - "php": ">=5.3.0" | |
2335 | - }, | |
2336 | - "type": "library", | |
2337 | - "extra": { | |
2338 | - "branch-alias": { | |
2339 | - "dev-master": "1.0.x-dev" | |
2340 | - } | |
2341 | - }, | |
2342 | - "autoload": { | |
2343 | - "psr-4": { | |
2344 | - "Psr\\Http\\Message\\": "src/" | |
2345 | - } | |
2346 | - }, | |
2347 | - "notification-url": "https://packagist.org/downloads/", | |
2348 | - "license": [ | |
2349 | - "MIT" | |
2350 | - ], | |
2351 | - "authors": [ | |
2352 | - { | |
2353 | - "name": "PHP-FIG", | |
2354 | - "homepage": "http://www.php-fig.org/" | |
2355 | - } | |
2356 | - ], | |
2357 | - "description": "Common interface for HTTP messages", | |
2358 | - "keywords": [ | |
2359 | - "http", | |
2360 | - "http-message", | |
2361 | - "psr", | |
2362 | - "psr-7", | |
2363 | - "request", | |
2364 | - "response" | |
2365 | - ], | |
2366 | - "time": "2015-05-04 20:22:00" | |
2367 | - }, | |
2368 | - { | |
2369 | - "name": "rmrevin/yii2-comments", | |
2370 | - "version": "1.4.2", | |
2371 | - "source": { | |
2372 | - "type": "git", | |
2373 | - "url": "https://github.com/rmrevin/yii2-comments.git", | |
2374 | - "reference": "c68ddf276fe24ece0173781a8f7391a2cf7e6a12" | |
2375 | - }, | |
2376 | - "dist": { | |
2377 | - "type": "zip", | |
2378 | - "url": "https://api.github.com/repos/rmrevin/yii2-comments/zipball/c68ddf276fe24ece0173781a8f7391a2cf7e6a12", | |
2379 | - "reference": "c68ddf276fe24ece0173781a8f7391a2cf7e6a12", | |
2380 | - "shasum": "" | |
2381 | - }, | |
2382 | - "require": { | |
2383 | - "php": ">=5.4.0", | |
2384 | - "rmrevin/yii2-fontawesome": "~2.10", | |
2385 | - "yiisoft/yii2": "2.0.*" | |
2386 | - }, | |
2387 | - "type": "yii2-extension", | |
2388 | - "extra": { | |
2389 | - "asset-installer-paths": { | |
2390 | - "npm-asset-library": "vendor/npm", | |
2391 | - "bower-asset-library": "vendor/bower" | |
2392 | - } | |
2393 | - }, | |
2394 | - "autoload": { | |
2395 | - "psr-4": { | |
2396 | - "rmrevin\\yii\\module\\Comments\\": "" | |
2397 | - } | |
2398 | - }, | |
2399 | - "notification-url": "https://packagist.org/downloads/", | |
2400 | - "license": [ | |
2401 | - "MIT" | |
2402 | - ], | |
2403 | - "authors": [ | |
2404 | - { | |
2405 | - "name": "Roman Revin", | |
2406 | - "email": "xgismox@gmail.com", | |
2407 | - "homepage": "http://rmrevin.ru/" | |
2408 | - } | |
2409 | - ], | |
2410 | - "description": "Comments module for Yii2", | |
2411 | - "keywords": [ | |
2412 | - "comment", | |
2413 | - "module", | |
2414 | - "widget", | |
2415 | - "yii" | |
2416 | - ], | |
2417 | - "time": "2016-03-01 13:18:41" | |
2418 | - }, | |
2419 | - { | |
2420 | - "name": "rmrevin/yii2-fontawesome", | |
2421 | - "version": "2.13.0", | |
2422 | - "source": { | |
2423 | - "type": "git", | |
2424 | - "url": "https://github.com/rmrevin/yii2-fontawesome.git", | |
2425 | - "reference": "2efbfacb22be59f373d11a7e3dfa9213e2ba18a9" | |
2426 | - }, | |
2427 | - "dist": { | |
2428 | - "type": "zip", | |
2429 | - "url": "https://api.github.com/repos/rmrevin/yii2-fontawesome/zipball/2efbfacb22be59f373d11a7e3dfa9213e2ba18a9", | |
2430 | - "reference": "2efbfacb22be59f373d11a7e3dfa9213e2ba18a9", | |
2431 | - "shasum": "" | |
2432 | - }, | |
2433 | - "require": { | |
2434 | - "bower-asset/fontawesome": "4.5.*", | |
2435 | - "php": ">=5.4.0", | |
2436 | - "yiisoft/yii2": "2.0.*" | |
2437 | - }, | |
2438 | - "type": "yii2-extension", | |
2439 | - "extra": { | |
2440 | - "asset-installer-paths": { | |
2441 | - "npm-asset-library": "vendor/npm", | |
2442 | - "bower-asset-library": "vendor/bower" | |
2443 | - } | |
2444 | - }, | |
2445 | - "autoload": { | |
2446 | - "psr-4": { | |
2447 | - "rmrevin\\yii\\fontawesome\\": "" | |
2448 | - } | |
2449 | - }, | |
2450 | - "notification-url": "https://packagist.org/downloads/", | |
2451 | - "license": [ | |
2452 | - "MIT" | |
2453 | - ], | |
2454 | - "authors": [ | |
2455 | - { | |
2456 | - "name": "Revin Roman", | |
2457 | - "email": "roman@rmrevin.com", | |
2458 | - "homepage": "https://rmrevin.com/" | |
2459 | - } | |
2460 | - ], | |
2461 | - "description": "Asset Bundle for Yii2 with Font Awesome", | |
2462 | - "keywords": [ | |
2463 | - "asset", | |
2464 | - "awesome", | |
2465 | - "bundle", | |
2466 | - "font", | |
2467 | - "yii" | |
2468 | - ], | |
2469 | - "time": "2015-11-26 15:24:53" | |
2470 | - }, | |
2471 | - { | |
2472 | - "name": "sebastian/comparator", | |
2473 | - "version": "dev-master", | |
2474 | - "source": { | |
2475 | - "type": "git", | |
2476 | - "url": "https://github.com/sebastianbergmann/comparator.git", | |
2477 | - "reference": "937efb279bd37a375bcadf584dec0726f84dbf22" | |
2478 | - }, | |
2479 | - "dist": { | |
2480 | - "type": "zip", | |
2481 | - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22", | |
2482 | - "reference": "937efb279bd37a375bcadf584dec0726f84dbf22", | |
2483 | - "shasum": "" | |
2484 | - }, | |
2485 | - "require": { | |
2486 | - "php": ">=5.3.3", | |
2487 | - "sebastian/diff": "~1.2", | |
2488 | - "sebastian/exporter": "~1.2" | |
2489 | - }, | |
2490 | - "require-dev": { | |
2491 | - "phpunit/phpunit": "~4.4" | |
2492 | - }, | |
2493 | - "type": "library", | |
2494 | - "extra": { | |
2495 | - "branch-alias": { | |
2496 | - "dev-master": "1.2.x-dev" | |
2497 | - } | |
2498 | - }, | |
2499 | - "autoload": { | |
2500 | - "classmap": [ | |
2501 | - "src/" | |
2502 | - ] | |
2503 | - }, | |
2504 | - "notification-url": "https://packagist.org/downloads/", | |
2505 | - "license": [ | |
2506 | - "BSD-3-Clause" | |
2507 | - ], | |
2508 | - "authors": [ | |
2509 | - { | |
2510 | - "name": "Jeff Welch", | |
2511 | - "email": "whatthejeff@gmail.com" | |
2512 | - }, | |
2513 | - { | |
2514 | - "name": "Volker Dusch", | |
2515 | - "email": "github@wallbash.com" | |
2516 | - }, | |
2517 | - { | |
2518 | - "name": "Bernhard Schussek", | |
2519 | - "email": "bschussek@2bepublished.at" | |
2520 | - }, | |
2521 | - { | |
2522 | - "name": "Sebastian Bergmann", | |
2523 | - "email": "sebastian@phpunit.de" | |
2524 | - } | |
2525 | - ], | |
2526 | - "description": "Provides the functionality to compare PHP values for equality", | |
2527 | - "homepage": "http://www.github.com/sebastianbergmann/comparator", | |
2528 | - "keywords": [ | |
2529 | - "comparator", | |
2530 | - "compare", | |
2531 | - "equality" | |
2532 | - ], | |
2533 | - "time": "2015-07-26 15:48:44" | |
2534 | - }, | |
2535 | - { | |
2536 | - "name": "sebastian/diff", | |
2537 | - "version": "dev-master", | |
2538 | - "source": { | |
2539 | - "type": "git", | |
2540 | - "url": "https://github.com/sebastianbergmann/diff.git", | |
2541 | - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" | |
2542 | - }, | |
2543 | - "dist": { | |
2544 | - "type": "zip", | |
2545 | - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", | |
2546 | - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", | |
2547 | - "shasum": "" | |
2548 | - }, | |
2549 | - "require": { | |
2550 | - "php": ">=5.3.3" | |
2551 | - }, | |
2552 | - "require-dev": { | |
2553 | - "phpunit/phpunit": "~4.8" | |
2554 | - }, | |
2555 | - "type": "library", | |
2556 | - "extra": { | |
2557 | - "branch-alias": { | |
2558 | - "dev-master": "1.4-dev" | |
2559 | - } | |
2560 | - }, | |
2561 | - "autoload": { | |
2562 | - "classmap": [ | |
2563 | - "src/" | |
2564 | - ] | |
2565 | - }, | |
2566 | - "notification-url": "https://packagist.org/downloads/", | |
2567 | - "license": [ | |
2568 | - "BSD-3-Clause" | |
2569 | - ], | |
2570 | - "authors": [ | |
2571 | - { | |
2572 | - "name": "Kore Nordmann", | |
2573 | - "email": "mail@kore-nordmann.de" | |
2574 | - }, | |
2575 | - { | |
2576 | - "name": "Sebastian Bergmann", | |
2577 | - "email": "sebastian@phpunit.de" | |
2578 | - } | |
2579 | - ], | |
2580 | - "description": "Diff implementation", | |
2581 | - "homepage": "https://github.com/sebastianbergmann/diff", | |
2582 | - "keywords": [ | |
2583 | - "diff" | |
2584 | - ], | |
2585 | - "time": "2015-12-08 07:14:41" | |
2586 | - }, | |
2587 | - { | |
2588 | - "name": "sebastian/environment", | |
2589 | - "version": "dev-master", | |
2590 | - "source": { | |
2591 | - "type": "git", | |
2592 | - "url": "https://github.com/sebastianbergmann/environment.git", | |
2593 | - "reference": "dc7a29032cf72b54f36dac15a1ca5b3a1b6029bf" | |
2594 | - }, | |
2595 | - "dist": { | |
2596 | - "type": "zip", | |
2597 | - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/dc7a29032cf72b54f36dac15a1ca5b3a1b6029bf", | |
2598 | - "reference": "dc7a29032cf72b54f36dac15a1ca5b3a1b6029bf", | |
2599 | - "shasum": "" | |
2600 | - }, | |
2601 | - "require": { | |
2602 | - "php": ">=5.3.3" | |
2603 | - }, | |
2604 | - "require-dev": { | |
2605 | - "phpunit/phpunit": "~4.4" | |
2606 | - }, | |
2607 | - "type": "library", | |
2608 | - "extra": { | |
2609 | - "branch-alias": { | |
2610 | - "dev-master": "1.3.x-dev" | |
2611 | - } | |
2612 | - }, | |
2613 | - "autoload": { | |
2614 | - "classmap": [ | |
2615 | - "src/" | |
2616 | - ] | |
2617 | - }, | |
2618 | - "notification-url": "https://packagist.org/downloads/", | |
2619 | - "license": [ | |
2620 | - "BSD-3-Clause" | |
2621 | - ], | |
2622 | - "authors": [ | |
2623 | - { | |
2624 | - "name": "Sebastian Bergmann", | |
2625 | - "email": "sebastian@phpunit.de" | |
2626 | - } | |
2627 | - ], | |
2628 | - "description": "Provides functionality to handle HHVM/PHP environments", | |
2629 | - "homepage": "http://www.github.com/sebastianbergmann/environment", | |
2630 | - "keywords": [ | |
2631 | - "Xdebug", | |
2632 | - "environment", | |
2633 | - "hhvm" | |
2634 | - ], | |
2635 | - "time": "2016-02-26 18:40:46" | |
2636 | - }, | |
2637 | - { | |
2638 | - "name": "sebastian/exporter", | |
2639 | - "version": "dev-master", | |
2640 | - "source": { | |
2641 | - "type": "git", | |
2642 | - "url": "https://github.com/sebastianbergmann/exporter.git", | |
2643 | - "reference": "f88f8936517d54ae6d589166810877fb2015d0a2" | |
2644 | - }, | |
2645 | - "dist": { | |
2646 | - "type": "zip", | |
2647 | - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/f88f8936517d54ae6d589166810877fb2015d0a2", | |
2648 | - "reference": "f88f8936517d54ae6d589166810877fb2015d0a2", | |
2649 | - "shasum": "" | |
2650 | - }, | |
2651 | - "require": { | |
2652 | - "php": ">=5.3.3", | |
2653 | - "sebastian/recursion-context": "~1.0" | |
2654 | - }, | |
2655 | - "require-dev": { | |
2656 | - "ext-mbstring": "*", | |
2657 | - "phpunit/phpunit": "~4.4" | |
2658 | - }, | |
2659 | - "type": "library", | |
2660 | - "extra": { | |
2661 | - "branch-alias": { | |
2662 | - "dev-master": "1.3.x-dev" | |
2663 | - } | |
2664 | - }, | |
2665 | - "autoload": { | |
2666 | - "classmap": [ | |
2667 | - "src/" | |
2668 | - ] | |
2669 | - }, | |
2670 | - "notification-url": "https://packagist.org/downloads/", | |
2671 | - "license": [ | |
2672 | - "BSD-3-Clause" | |
2673 | - ], | |
2674 | - "authors": [ | |
2675 | - { | |
2676 | - "name": "Jeff Welch", | |
2677 | - "email": "whatthejeff@gmail.com" | |
2678 | - }, | |
2679 | - { | |
2680 | - "name": "Volker Dusch", | |
2681 | - "email": "github@wallbash.com" | |
2682 | - }, | |
2683 | - { | |
2684 | - "name": "Bernhard Schussek", | |
2685 | - "email": "bschussek@2bepublished.at" | |
2686 | - }, | |
2687 | - { | |
2688 | - "name": "Sebastian Bergmann", | |
2689 | - "email": "sebastian@phpunit.de" | |
2690 | - }, | |
2691 | - { | |
2692 | - "name": "Adam Harvey", | |
2693 | - "email": "aharvey@php.net" | |
2694 | - } | |
2695 | - ], | |
2696 | - "description": "Provides the functionality to export PHP variables for visualization", | |
2697 | - "homepage": "http://www.github.com/sebastianbergmann/exporter", | |
2698 | - "keywords": [ | |
2699 | - "export", | |
2700 | - "exporter" | |
2701 | - ], | |
2702 | - "time": "2015-08-09 04:23:41" | |
2703 | - }, | |
2704 | - { | |
2705 | - "name": "sebastian/global-state", | |
2706 | - "version": "1.1.1", | |
2707 | - "source": { | |
2708 | - "type": "git", | |
2709 | - "url": "https://github.com/sebastianbergmann/global-state.git", | |
2710 | - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" | |
2711 | - }, | |
2712 | - "dist": { | |
2713 | - "type": "zip", | |
2714 | - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", | |
2715 | - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", | |
2716 | - "shasum": "" | |
2717 | - }, | |
2718 | - "require": { | |
2719 | - "php": ">=5.3.3" | |
2720 | - }, | |
2721 | - "require-dev": { | |
2722 | - "phpunit/phpunit": "~4.2" | |
2723 | - }, | |
2724 | - "suggest": { | |
2725 | - "ext-uopz": "*" | |
2726 | - }, | |
2727 | - "type": "library", | |
2728 | - "extra": { | |
2729 | - "branch-alias": { | |
2730 | - "dev-master": "1.0-dev" | |
2731 | - } | |
2732 | - }, | |
2733 | - "autoload": { | |
2734 | - "classmap": [ | |
2735 | - "src/" | |
2736 | - ] | |
2737 | - }, | |
2738 | - "notification-url": "https://packagist.org/downloads/", | |
2739 | - "license": [ | |
2740 | - "BSD-3-Clause" | |
2741 | - ], | |
2742 | - "authors": [ | |
2743 | - { | |
2744 | - "name": "Sebastian Bergmann", | |
2745 | - "email": "sebastian@phpunit.de" | |
2746 | - } | |
2747 | - ], | |
2748 | - "description": "Snapshotting of global state", | |
2749 | - "homepage": "http://www.github.com/sebastianbergmann/global-state", | |
2750 | - "keywords": [ | |
2751 | - "global state" | |
2752 | - ], | |
2753 | - "time": "2015-10-12 03:26:01" | |
2754 | - }, | |
2755 | - { | |
2756 | - "name": "sebastian/recursion-context", | |
2757 | - "version": "dev-master", | |
2758 | - "source": { | |
2759 | - "type": "git", | |
2760 | - "url": "https://github.com/sebastianbergmann/recursion-context.git", | |
2761 | - "reference": "7ff5b1b3dcc55b8ab8ae61ef99d4730940856ee7" | |
2762 | - }, | |
2763 | - "dist": { | |
2764 | - "type": "zip", | |
2765 | - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/7ff5b1b3dcc55b8ab8ae61ef99d4730940856ee7", | |
2766 | - "reference": "7ff5b1b3dcc55b8ab8ae61ef99d4730940856ee7", | |
2767 | - "shasum": "" | |
2768 | - }, | |
2769 | - "require": { | |
2770 | - "php": ">=5.3.3" | |
2771 | - }, | |
2772 | - "require-dev": { | |
2773 | - "phpunit/phpunit": "~4.4" | |
2774 | - }, | |
2775 | - "type": "library", | |
2776 | - "extra": { | |
2777 | - "branch-alias": { | |
2778 | - "dev-master": "1.0.x-dev" | |
2779 | - } | |
2780 | - }, | |
2781 | - "autoload": { | |
2782 | - "classmap": [ | |
2783 | - "src/" | |
2784 | - ] | |
2785 | - }, | |
2786 | - "notification-url": "https://packagist.org/downloads/", | |
2787 | - "license": [ | |
2788 | - "BSD-3-Clause" | |
2789 | - ], | |
2790 | - "authors": [ | |
2791 | - { | |
2792 | - "name": "Jeff Welch", | |
2793 | - "email": "whatthejeff@gmail.com" | |
2794 | - }, | |
2795 | - { | |
2796 | - "name": "Sebastian Bergmann", | |
2797 | - "email": "sebastian@phpunit.de" | |
2798 | - }, | |
2799 | - { | |
2800 | - "name": "Adam Harvey", | |
2801 | - "email": "aharvey@php.net" | |
2802 | - } | |
2803 | - ], | |
2804 | - "description": "Provides functionality to recursively process PHP variables", | |
2805 | - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", | |
2806 | - "time": "2016-01-28 05:39:29" | |
2807 | - }, | |
2808 | - { | |
2809 | - "name": "sebastian/version", | |
2810 | - "version": "1.0.6", | |
2811 | - "source": { | |
2812 | - "type": "git", | |
2813 | - "url": "https://github.com/sebastianbergmann/version.git", | |
2814 | - "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" | |
2815 | - }, | |
2816 | - "dist": { | |
2817 | - "type": "zip", | |
2818 | - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", | |
2819 | - "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", | |
2820 | - "shasum": "" | |
2821 | - }, | |
2822 | - "type": "library", | |
2823 | - "autoload": { | |
2824 | - "classmap": [ | |
2825 | - "src/" | |
2826 | - ] | |
2827 | - }, | |
2828 | - "notification-url": "https://packagist.org/downloads/", | |
2829 | - "license": [ | |
2830 | - "BSD-3-Clause" | |
2831 | - ], | |
2832 | - "authors": [ | |
2833 | - { | |
2834 | - "name": "Sebastian Bergmann", | |
2835 | - "email": "sebastian@phpunit.de", | |
2836 | - "role": "lead" | |
2837 | - } | |
2838 | - ], | |
2839 | - "description": "Library that helps with managing the version number of Git-hosted PHP projects", | |
2840 | - "homepage": "https://github.com/sebastianbergmann/version", | |
2841 | - "time": "2015-06-21 13:59:46" | |
2842 | - }, | |
2843 | - { | |
2844 | - "name": "swiftmailer/swiftmailer", | |
2845 | - "version": "5.x-dev", | |
2846 | - "source": { | |
2847 | - "type": "git", | |
2848 | - "url": "https://github.com/swiftmailer/swiftmailer.git", | |
2849 | - "reference": "fffbc0e2a7e376dbb0a4b5f2ff6847330f20ccf9" | |
2850 | - }, | |
2851 | - "dist": { | |
2852 | - "type": "zip", | |
2853 | - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/fffbc0e2a7e376dbb0a4b5f2ff6847330f20ccf9", | |
2854 | - "reference": "fffbc0e2a7e376dbb0a4b5f2ff6847330f20ccf9", | |
2855 | - "shasum": "" | |
2856 | - }, | |
2857 | - "require": { | |
2858 | - "php": ">=5.3.3" | |
2859 | - }, | |
2860 | - "require-dev": { | |
2861 | - "mockery/mockery": "~0.9.1,<0.9.4" | |
2862 | - }, | |
2863 | - "type": "library", | |
2864 | - "extra": { | |
2865 | - "branch-alias": { | |
2866 | - "dev-master": "5.4-dev" | |
2867 | - } | |
2868 | - }, | |
2869 | - "autoload": { | |
2870 | - "files": [ | |
2871 | - "lib/swift_required.php" | |
2872 | - ] | |
2873 | - }, | |
2874 | - "notification-url": "https://packagist.org/downloads/", | |
2875 | - "license": [ | |
2876 | - "MIT" | |
2877 | - ], | |
2878 | - "authors": [ | |
2879 | - { | |
2880 | - "name": "Chris Corbyn" | |
2881 | - }, | |
2882 | - { | |
2883 | - "name": "Fabien Potencier", | |
2884 | - "email": "fabien@symfony.com" | |
2885 | - } | |
2886 | - ], | |
2887 | - "description": "Swiftmailer, free feature-rich PHP mailer", | |
2888 | - "homepage": "http://swiftmailer.org", | |
2889 | - "keywords": [ | |
2890 | - "email", | |
2891 | - "mail", | |
2892 | - "mailer" | |
2893 | - ], | |
2894 | - "time": "2016-01-03 15:42:47" | |
2895 | - }, | |
2896 | - { | |
2897 | - "name": "symfony/browser-kit", | |
2898 | - "version": "3.0.x-dev", | |
2899 | - "source": { | |
2900 | - "type": "git", | |
2901 | - "url": "https://github.com/symfony/browser-kit.git", | |
2902 | - "reference": "e07127ac31230b30887c2dddf3708d883d239b14" | |
2903 | - }, | |
2904 | - "dist": { | |
2905 | - "type": "zip", | |
2906 | - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/e07127ac31230b30887c2dddf3708d883d239b14", | |
2907 | - "reference": "e07127ac31230b30887c2dddf3708d883d239b14", | |
2908 | - "shasum": "" | |
2909 | - }, | |
2910 | - "require": { | |
2911 | - "php": ">=5.5.9", | |
2912 | - "symfony/dom-crawler": "~2.8|~3.0" | |
2913 | - }, | |
2914 | - "require-dev": { | |
2915 | - "symfony/css-selector": "~2.8|~3.0", | |
2916 | - "symfony/process": "~2.8|~3.0" | |
2917 | - }, | |
2918 | - "suggest": { | |
2919 | - "symfony/process": "" | |
2920 | - }, | |
2921 | - "type": "library", | |
2922 | - "extra": { | |
2923 | - "branch-alias": { | |
2924 | - "dev-master": "3.0-dev" | |
2925 | - } | |
2926 | - }, | |
2927 | - "autoload": { | |
2928 | - "psr-4": { | |
2929 | - "Symfony\\Component\\BrowserKit\\": "" | |
2930 | - }, | |
2931 | - "exclude-from-classmap": [ | |
2932 | - "/Tests/" | |
2933 | - ] | |
2934 | - }, | |
2935 | - "notification-url": "https://packagist.org/downloads/", | |
2936 | - "license": [ | |
2937 | - "MIT" | |
2938 | - ], | |
2939 | - "authors": [ | |
2940 | - { | |
2941 | - "name": "Fabien Potencier", | |
2942 | - "email": "fabien@symfony.com" | |
2943 | - }, | |
2944 | - { | |
2945 | - "name": "Symfony Community", | |
2946 | - "homepage": "https://symfony.com/contributors" | |
2947 | - } | |
2948 | - ], | |
2949 | - "description": "Symfony BrowserKit Component", | |
2950 | - "homepage": "https://symfony.com", | |
2951 | - "time": "2016-03-04 07:55:57" | |
2952 | - }, | |
2953 | - { | |
2954 | - "name": "symfony/console", | |
2955 | - "version": "3.0.x-dev", | |
2956 | - "source": { | |
2957 | - "type": "git", | |
2958 | - "url": "https://github.com/symfony/console.git", | |
2959 | - "reference": "6b1175135bc2a74c08a28d89761272de8beed8cd" | |
2960 | - }, | |
2961 | - "dist": { | |
2962 | - "type": "zip", | |
2963 | - "url": "https://api.github.com/repos/symfony/console/zipball/7541c505d2b804cc65a4edf90a6f1cb496523fef", | |
2964 | - "reference": "6b1175135bc2a74c08a28d89761272de8beed8cd", | |
2965 | - "shasum": "" | |
2966 | - }, | |
2967 | - "require": { | |
2968 | - "php": ">=5.5.9", | |
2969 | - "symfony/polyfill-mbstring": "~1.0" | |
2970 | - }, | |
2971 | - "require-dev": { | |
2972 | - "psr/log": "~1.0", | |
2973 | - "symfony/event-dispatcher": "~2.8|~3.0", | |
2974 | - "symfony/process": "~2.8|~3.0" | |
2975 | - }, | |
2976 | - "suggest": { | |
2977 | - "psr/log": "For using the console logger", | |
2978 | - "symfony/event-dispatcher": "", | |
2979 | - "symfony/process": "" | |
2980 | - }, | |
2981 | - "type": "library", | |
2982 | - "extra": { | |
2983 | - "branch-alias": { | |
2984 | - "dev-master": "3.0-dev" | |
2985 | - } | |
2986 | - }, | |
2987 | - "autoload": { | |
2988 | - "psr-4": { | |
2989 | - "Symfony\\Component\\Console\\": "" | |
2990 | - }, | |
2991 | - "exclude-from-classmap": [ | |
2992 | - "/Tests/" | |
2993 | - ] | |
2994 | - }, | |
2995 | - "notification-url": "https://packagist.org/downloads/", | |
2996 | - "license": [ | |
2997 | - "MIT" | |
2998 | - ], | |
2999 | - "authors": [ | |
3000 | - { | |
3001 | - "name": "Fabien Potencier", | |
3002 | - "email": "fabien@symfony.com" | |
3003 | - }, | |
3004 | - { | |
3005 | - "name": "Symfony Community", | |
3006 | - "homepage": "https://symfony.com/contributors" | |
3007 | - } | |
3008 | - ], | |
3009 | - "description": "Symfony Console Component", | |
3010 | - "homepage": "https://symfony.com", | |
3011 | - "time": "2016-03-16 17:00:50" | |
3012 | - }, | |
3013 | - { | |
3014 | - "name": "symfony/css-selector", | |
3015 | - "version": "3.0.x-dev", | |
3016 | - "source": { | |
3017 | - "type": "git", | |
3018 | - "url": "https://github.com/symfony/css-selector.git", | |
3019 | - "reference": "65e764f404685f2dc20c057e889b3ad04b2e2db0" | |
3020 | - }, | |
3021 | - "dist": { | |
3022 | - "type": "zip", | |
3023 | - "url": "https://api.github.com/repos/symfony/css-selector/zipball/65e764f404685f2dc20c057e889b3ad04b2e2db0", | |
3024 | - "reference": "65e764f404685f2dc20c057e889b3ad04b2e2db0", | |
3025 | - "shasum": "" | |
3026 | - }, | |
3027 | - "require": { | |
3028 | - "php": ">=5.5.9" | |
3029 | - }, | |
3030 | - "type": "library", | |
3031 | - "extra": { | |
3032 | - "branch-alias": { | |
3033 | - "dev-master": "3.0-dev" | |
3034 | - } | |
3035 | - }, | |
3036 | - "autoload": { | |
3037 | - "psr-4": { | |
3038 | - "Symfony\\Component\\CssSelector\\": "" | |
3039 | - }, | |
3040 | - "exclude-from-classmap": [ | |
3041 | - "/Tests/" | |
3042 | - ] | |
3043 | - }, | |
3044 | - "notification-url": "https://packagist.org/downloads/", | |
3045 | - "license": [ | |
3046 | - "MIT" | |
3047 | - ], | |
3048 | - "authors": [ | |
3049 | - { | |
3050 | - "name": "Jean-François Simon", | |
3051 | - "email": "jeanfrancois.simon@sensiolabs.com" | |
3052 | - }, | |
3053 | - { | |
3054 | - "name": "Fabien Potencier", | |
3055 | - "email": "fabien@symfony.com" | |
3056 | - }, | |
3057 | - { | |
3058 | - "name": "Symfony Community", | |
3059 | - "homepage": "https://symfony.com/contributors" | |
3060 | - } | |
3061 | - ], | |
3062 | - "description": "Symfony CssSelector Component", | |
3063 | - "homepage": "https://symfony.com", | |
3064 | - "time": "2016-03-04 07:55:57" | |
3065 | - }, | |
3066 | - { | |
3067 | - "name": "symfony/dom-crawler", | |
3068 | - "version": "3.0.x-dev", | |
3069 | - "source": { | |
3070 | - "type": "git", | |
3071 | - "url": "https://github.com/symfony/dom-crawler.git", | |
3072 | - "reference": "18a06d7a9af41718c20764a674a0ebba3bc40d1f" | |
3073 | - }, | |
3074 | - "dist": { | |
3075 | - "type": "zip", | |
3076 | - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/49b588841225b205700e5122fa01911cabada857", | |
3077 | - "reference": "18a06d7a9af41718c20764a674a0ebba3bc40d1f", | |
3078 | - "shasum": "" | |
3079 | - }, | |
3080 | - "require": { | |
3081 | - "php": ">=5.5.9", | |
3082 | - "symfony/polyfill-mbstring": "~1.0" | |
3083 | - }, | |
3084 | - "require-dev": { | |
3085 | - "symfony/css-selector": "~2.8|~3.0" | |
3086 | - }, | |
3087 | - "suggest": { | |
3088 | - "symfony/css-selector": "" | |
3089 | - }, | |
3090 | - "type": "library", | |
3091 | - "extra": { | |
3092 | - "branch-alias": { | |
3093 | - "dev-master": "3.0-dev" | |
3094 | - } | |
3095 | - }, | |
3096 | - "autoload": { | |
3097 | - "psr-4": { | |
3098 | - "Symfony\\Component\\DomCrawler\\": "" | |
3099 | - }, | |
3100 | - "exclude-from-classmap": [ | |
3101 | - "/Tests/" | |
3102 | - ] | |
3103 | - }, | |
3104 | - "notification-url": "https://packagist.org/downloads/", | |
3105 | - "license": [ | |
3106 | - "MIT" | |
3107 | - ], | |
3108 | - "authors": [ | |
3109 | - { | |
3110 | - "name": "Fabien Potencier", | |
3111 | - "email": "fabien@symfony.com" | |
3112 | - }, | |
3113 | - { | |
3114 | - "name": "Symfony Community", | |
3115 | - "homepage": "https://symfony.com/contributors" | |
3116 | - } | |
3117 | - ], | |
3118 | - "description": "Symfony DomCrawler Component", | |
3119 | - "homepage": "https://symfony.com", | |
3120 | - "time": "2016-03-23 13:23:25" | |
3121 | - }, | |
3122 | - { | |
3123 | - "name": "symfony/event-dispatcher", | |
3124 | - "version": "3.0.x-dev", | |
3125 | - "source": { | |
3126 | - "type": "git", | |
3127 | - "url": "https://github.com/symfony/event-dispatcher.git", | |
3128 | - "reference": "9002dcf018d884d294b1ef20a6f968efc1128f39" | |
3129 | - }, | |
3130 | - "dist": { | |
3131 | - "type": "zip", | |
3132 | - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/17b04e6b1ede45b57d3ad5146abe50df6c3968b4", | |
3133 | - "reference": "9002dcf018d884d294b1ef20a6f968efc1128f39", | |
3134 | - "shasum": "" | |
3135 | - }, | |
3136 | - "require": { | |
3137 | - "php": ">=5.5.9" | |
3138 | - }, | |
3139 | - "require-dev": { | |
3140 | - "psr/log": "~1.0", | |
3141 | - "symfony/config": "~2.8|~3.0", | |
3142 | - "symfony/dependency-injection": "~2.8|~3.0", | |
3143 | - "symfony/expression-language": "~2.8|~3.0", | |
3144 | - "symfony/stopwatch": "~2.8|~3.0" | |
3145 | - }, | |
3146 | - "suggest": { | |
3147 | - "symfony/dependency-injection": "", | |
3148 | - "symfony/http-kernel": "" | |
3149 | - }, | |
3150 | - "type": "library", | |
3151 | - "extra": { | |
3152 | - "branch-alias": { | |
3153 | - "dev-master": "3.0-dev" | |
3154 | - } | |
3155 | - }, | |
3156 | - "autoload": { | |
3157 | - "psr-4": { | |
3158 | - "Symfony\\Component\\EventDispatcher\\": "" | |
3159 | - }, | |
3160 | - "exclude-from-classmap": [ | |
3161 | - "/Tests/" | |
3162 | - ] | |
3163 | - }, | |
3164 | - "notification-url": "https://packagist.org/downloads/", | |
3165 | - "license": [ | |
3166 | - "MIT" | |
3167 | - ], | |
3168 | - "authors": [ | |
3169 | - { | |
3170 | - "name": "Fabien Potencier", | |
3171 | - "email": "fabien@symfony.com" | |
3172 | - }, | |
3173 | - { | |
3174 | - "name": "Symfony Community", | |
3175 | - "homepage": "https://symfony.com/contributors" | |
3176 | - } | |
3177 | - ], | |
3178 | - "description": "Symfony EventDispatcher Component", | |
3179 | - "homepage": "https://symfony.com", | |
3180 | - "time": "2016-03-10 10:34:12" | |
3181 | - }, | |
3182 | - { | |
3183 | - "name": "symfony/finder", | |
3184 | - "version": "3.0.x-dev", | |
3185 | - "source": { | |
3186 | - "type": "git", | |
3187 | - "url": "https://github.com/symfony/finder.git", | |
3188 | - "reference": "c54e407b35bc098916704e9fd090da21da4c4f52" | |
3189 | - }, | |
3190 | - "dist": { | |
3191 | - "type": "zip", | |
3192 | - "url": "https://api.github.com/repos/symfony/finder/zipball/c54e407b35bc098916704e9fd090da21da4c4f52", | |
3193 | - "reference": "c54e407b35bc098916704e9fd090da21da4c4f52", | |
3194 | - "shasum": "" | |
3195 | - }, | |
3196 | - "require": { | |
3197 | - "php": ">=5.5.9" | |
3198 | - }, | |
3199 | - "type": "library", | |
3200 | - "extra": { | |
3201 | - "branch-alias": { | |
3202 | - "dev-master": "3.0-dev" | |
3203 | - } | |
3204 | - }, | |
3205 | - "autoload": { | |
3206 | - "psr-4": { | |
3207 | - "Symfony\\Component\\Finder\\": "" | |
3208 | - }, | |
3209 | - "exclude-from-classmap": [ | |
3210 | - "/Tests/" | |
3211 | - ] | |
3212 | - }, | |
3213 | - "notification-url": "https://packagist.org/downloads/", | |
3214 | - "license": [ | |
3215 | - "MIT" | |
3216 | - ], | |
3217 | - "authors": [ | |
3218 | - { | |
3219 | - "name": "Fabien Potencier", | |
3220 | - "email": "fabien@symfony.com" | |
3221 | - }, | |
3222 | - { | |
3223 | - "name": "Symfony Community", | |
3224 | - "homepage": "https://symfony.com/contributors" | |
3225 | - } | |
3226 | - ], | |
3227 | - "description": "Symfony Finder Component", | |
3228 | - "homepage": "https://symfony.com", | |
3229 | - "time": "2016-03-10 11:13:05" | |
3230 | - }, | |
3231 | - { | |
3232 | - "name": "symfony/polyfill-mbstring", | |
3233 | - "version": "dev-master", | |
3234 | - "source": { | |
3235 | - "type": "git", | |
3236 | - "url": "https://github.com/symfony/polyfill-mbstring.git", | |
3237 | - "reference": "1289d16209491b584839022f29257ad859b8532d" | |
3238 | - }, | |
3239 | - "dist": { | |
3240 | - "type": "zip", | |
3241 | - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/1289d16209491b584839022f29257ad859b8532d", | |
3242 | - "reference": "1289d16209491b584839022f29257ad859b8532d", | |
3243 | - "shasum": "" | |
3244 | - }, | |
3245 | - "require": { | |
3246 | - "php": ">=5.3.3" | |
3247 | - }, | |
3248 | - "suggest": { | |
3249 | - "ext-mbstring": "For best performance" | |
3250 | - }, | |
3251 | - "type": "library", | |
3252 | - "extra": { | |
3253 | - "branch-alias": { | |
3254 | - "dev-master": "1.1-dev" | |
3255 | - } | |
3256 | - }, | |
3257 | - "autoload": { | |
3258 | - "psr-4": { | |
3259 | - "Symfony\\Polyfill\\Mbstring\\": "" | |
3260 | - }, | |
3261 | - "files": [ | |
3262 | - "bootstrap.php" | |
3263 | - ] | |
3264 | - }, | |
3265 | - "notification-url": "https://packagist.org/downloads/", | |
3266 | - "license": [ | |
3267 | - "MIT" | |
3268 | - ], | |
3269 | - "authors": [ | |
3270 | - { | |
3271 | - "name": "Nicolas Grekas", | |
3272 | - "email": "p@tchwork.com" | |
3273 | - }, | |
3274 | - { | |
3275 | - "name": "Symfony Community", | |
3276 | - "homepage": "https://symfony.com/contributors" | |
3277 | - } | |
3278 | - ], | |
3279 | - "description": "Symfony polyfill for the Mbstring extension", | |
3280 | - "homepage": "https://symfony.com", | |
3281 | - "keywords": [ | |
3282 | - "compatibility", | |
3283 | - "mbstring", | |
3284 | - "polyfill", | |
3285 | - "portable", | |
3286 | - "shim" | |
3287 | - ], | |
3288 | - "time": "2016-01-20 09:13:37" | |
3289 | - }, | |
3290 | - { | |
3291 | - "name": "symfony/yaml", | |
3292 | - "version": "3.0.x-dev", | |
3293 | - "source": { | |
3294 | - "type": "git", | |
3295 | - "url": "https://github.com/symfony/yaml.git", | |
3296 | - "reference": "0047c8366744a16de7516622c5b7355336afae96" | |
3297 | - }, | |
3298 | - "dist": { | |
3299 | - "type": "zip", | |
3300 | - "url": "https://api.github.com/repos/symfony/yaml/zipball/0047c8366744a16de7516622c5b7355336afae96", | |
3301 | - "reference": "0047c8366744a16de7516622c5b7355336afae96", | |
3302 | - "shasum": "" | |
3303 | - }, | |
3304 | - "require": { | |
3305 | - "php": ">=5.5.9" | |
3306 | - }, | |
3307 | - "type": "library", | |
3308 | - "extra": { | |
3309 | - "branch-alias": { | |
3310 | - "dev-master": "3.0-dev" | |
3311 | - } | |
3312 | - }, | |
3313 | - "autoload": { | |
3314 | - "psr-4": { | |
3315 | - "Symfony\\Component\\Yaml\\": "" | |
3316 | - }, | |
3317 | - "exclude-from-classmap": [ | |
3318 | - "/Tests/" | |
3319 | - ] | |
3320 | - }, | |
3321 | - "notification-url": "https://packagist.org/downloads/", | |
3322 | - "license": [ | |
3323 | - "MIT" | |
3324 | - ], | |
3325 | - "authors": [ | |
3326 | - { | |
3327 | - "name": "Fabien Potencier", | |
3328 | - "email": "fabien@symfony.com" | |
3329 | - }, | |
3330 | - { | |
3331 | - "name": "Symfony Community", | |
3332 | - "homepage": "https://symfony.com/contributors" | |
3333 | - } | |
3334 | - ], | |
3335 | - "description": "Symfony Yaml Component", | |
3336 | - "homepage": "https://symfony.com", | |
3337 | - "time": "2016-03-04 07:55:57" | |
3338 | - }, | |
3339 | - { | |
3340 | - "name": "unclead/yii2-multiple-input", | |
3341 | - "version": "1.2.12", | |
3342 | - "source": { | |
3343 | - "type": "git", | |
3344 | - "url": "https://github.com/unclead/yii2-multiple-input.git", | |
3345 | - "reference": "3fd9a3ab9b7d11951f6aa708ba13406868e537fd" | |
3346 | - }, | |
3347 | - "dist": { | |
3348 | - "type": "zip", | |
3349 | - "url": "https://api.github.com/repos/unclead/yii2-multiple-input/zipball/3fd9a3ab9b7d11951f6aa708ba13406868e537fd", | |
3350 | - "reference": "3fd9a3ab9b7d11951f6aa708ba13406868e537fd", | |
3351 | - "shasum": "" | |
3352 | - }, | |
3353 | - "require": { | |
3354 | - "php": ">=5.4.0", | |
3355 | - "yiisoft/yii2": "*" | |
3356 | - }, | |
3357 | - "type": "yii2-extension", | |
3358 | - "autoload": { | |
3359 | - "psr-4": { | |
3360 | - "unclead\\widgets\\examples\\": "examples/", | |
3361 | - "unclead\\widgets\\": "src/" | |
3362 | - } | |
3363 | - }, | |
3364 | - "notification-url": "https://packagist.org/downloads/", | |
3365 | - "license": [ | |
3366 | - "BSD-3-Clause" | |
3367 | - ], | |
3368 | - "authors": [ | |
3369 | - { | |
3370 | - "name": "Eugene Tupikov", | |
3371 | - "email": "unclead.nsk@gmail.com" | |
3372 | - } | |
3373 | - ], | |
3374 | - "description": "Widget for handle multiple inputs for an attribute of Yii2 framework model", | |
3375 | - "keywords": [ | |
3376 | - "yii2", | |
3377 | - "yii2 array input", | |
3378 | - "yii2 multiple field", | |
3379 | - "yii2 multiple input", | |
3380 | - "yii2 tabular input" | |
3381 | - ], | |
3382 | - "time": "2016-03-09 09:01:35" | |
3383 | - }, | |
3384 | - { | |
3385 | - "name": "yiisoft/yii2", | |
3386 | - "version": "dev-master", | |
3387 | - "source": { | |
3388 | - "type": "git", | |
3389 | - "url": "https://github.com/yiisoft/yii2-framework.git", | |
3390 | - "reference": "bcc317666439a8ec1dc28874e0577b860b6dd6b3" | |
3391 | - }, | |
3392 | - "dist": { | |
3393 | - "type": "zip", | |
3394 | - "url": "https://api.github.com/repos/yiisoft/yii2-framework/zipball/b7e62df2cfa1dfab4e70223770a99c3798d4a412", | |
3395 | - "reference": "bcc317666439a8ec1dc28874e0577b860b6dd6b3", | |
3396 | - "shasum": "" | |
3397 | - }, | |
3398 | - "require": { | |
3399 | - "bower-asset/jquery": "2.2.*@stable | 2.1.*@stable | 1.11.*@stable", | |
3400 | - "bower-asset/jquery.inputmask": "~3.2.2", | |
3401 | - "bower-asset/punycode": "1.3.*", | |
3402 | - "bower-asset/yii2-pjax": "~2.0.1", | |
3403 | - "cebe/markdown": "~1.0.0 | ~1.1.0", | |
3404 | - "ext-ctype": "*", | |
3405 | - "ext-mbstring": "*", | |
3406 | - "ezyang/htmlpurifier": "~4.6", | |
3407 | - "lib-pcre": "*", | |
3408 | - "php": ">=5.4.0", | |
3409 | - "yiisoft/yii2-composer": "~2.0.4" | |
3410 | - }, | |
3411 | - "bin": [ | |
3412 | - "yii" | |
3413 | - ], | |
3414 | - "type": "library", | |
3415 | - "extra": { | |
3416 | - "branch-alias": { | |
3417 | - "dev-master": "2.0.x-dev" | |
3418 | - } | |
3419 | - }, | |
3420 | - "autoload": { | |
3421 | - "psr-4": { | |
3422 | - "yii\\": "" | |
3423 | - } | |
3424 | - }, | |
3425 | - "notification-url": "https://packagist.org/downloads/", | |
3426 | - "license": [ | |
3427 | - "BSD-3-Clause" | |
3428 | - ], | |
3429 | - "authors": [ | |
3430 | - { | |
3431 | - "name": "Qiang Xue", | |
3432 | - "email": "qiang.xue@gmail.com", | |
3433 | - "homepage": "http://www.yiiframework.com/", | |
3434 | - "role": "Founder and project lead" | |
3435 | - }, | |
3436 | - { | |
3437 | - "name": "Alexander Makarov", | |
3438 | - "email": "sam@rmcreative.ru", | |
3439 | - "homepage": "http://rmcreative.ru/", | |
3440 | - "role": "Core framework development" | |
3441 | - }, | |
3442 | - { | |
3443 | - "name": "Maurizio Domba", | |
3444 | - "homepage": "http://mdomba.info/", | |
3445 | - "role": "Core framework development" | |
3446 | - }, | |
3447 | - { | |
3448 | - "name": "Carsten Brandt", | |
3449 | - "email": "mail@cebe.cc", | |
3450 | - "homepage": "http://cebe.cc/", | |
3451 | - "role": "Core framework development" | |
3452 | - }, | |
3453 | - { | |
3454 | - "name": "Timur Ruziev", | |
3455 | - "email": "resurtm@gmail.com", | |
3456 | - "homepage": "http://resurtm.com/", | |
3457 | - "role": "Core framework development" | |
3458 | - }, | |
3459 | - { | |
3460 | - "name": "Paul Klimov", | |
3461 | - "email": "klimov.paul@gmail.com", | |
3462 | - "role": "Core framework development" | |
3463 | - }, | |
3464 | - { | |
3465 | - "name": "Dmitry Naumenko", | |
3466 | - "email": "d.naumenko.a@gmail.com", | |
3467 | - "role": "Core framework development" | |
3468 | - } | |
3469 | - ], | |
3470 | - "description": "Yii PHP Framework Version 2", | |
3471 | - "homepage": "http://www.yiiframework.com/", | |
3472 | - "keywords": [ | |
3473 | - "framework", | |
3474 | - "yii2" | |
3475 | - ], | |
3476 | - "time": "2016-03-30 14:53:41" | |
3477 | - }, | |
3478 | - { | |
3479 | - "name": "yiisoft/yii2-bootstrap", | |
3480 | - "version": "dev-master", | |
3481 | - "source": { | |
3482 | - "type": "git", | |
3483 | - "url": "https://github.com/yiisoft/yii2-bootstrap.git", | |
3484 | - "reference": "4dd9f52e2a376a875d998de6ab4c381291b0c69e" | |
3485 | - }, | |
3486 | - "dist": { | |
3487 | - "type": "zip", | |
3488 | - "url": "https://api.github.com/repos/yiisoft/yii2-bootstrap/zipball/772b610ea7940059584f9220f7b87e4b2b1a0e78", | |
3489 | - "reference": "4dd9f52e2a376a875d998de6ab4c381291b0c69e", | |
3490 | - "shasum": "" | |
3491 | - }, | |
3492 | - "require": { | |
3493 | - "bower-asset/bootstrap": "3.3.* | 3.2.* | 3.1.*", | |
3494 | - "yiisoft/yii2": ">=2.0.6" | |
3495 | - }, | |
3496 | - "type": "yii2-extension", | |
3497 | - "extra": { | |
3498 | - "branch-alias": { | |
3499 | - "dev-master": "2.0.x-dev" | |
3500 | - }, | |
3501 | - "asset-installer-paths": { | |
3502 | - "npm-asset-library": "vendor/npm", | |
3503 | - "bower-asset-library": "vendor/bower" | |
3504 | - } | |
3505 | - }, | |
3506 | - "autoload": { | |
3507 | - "psr-4": { | |
3508 | - "yii\\bootstrap\\": "" | |
3509 | - } | |
3510 | - }, | |
3511 | - "notification-url": "https://packagist.org/downloads/", | |
3512 | - "license": [ | |
3513 | - "BSD-3-Clause" | |
3514 | - ], | |
3515 | - "authors": [ | |
3516 | - { | |
3517 | - "name": "Qiang Xue", | |
3518 | - "email": "qiang.xue@gmail.com" | |
3519 | - } | |
3520 | - ], | |
3521 | - "description": "The Twitter Bootstrap extension for the Yii framework", | |
3522 | - "keywords": [ | |
3523 | - "bootstrap", | |
3524 | - "yii2" | |
3525 | - ], | |
3526 | - "time": "2016-03-30 22:44:25" | |
3527 | - }, | |
3528 | - { | |
3529 | - "name": "yiisoft/yii2-composer", | |
3530 | - "version": "dev-master", | |
3531 | - "source": { | |
3532 | - "type": "git", | |
3533 | - "url": "https://github.com/yiisoft/yii2-composer.git", | |
3534 | - "reference": "348122de0b2c2e343b579f93fcda1da78cab4912" | |
3535 | - }, | |
3536 | - "dist": { | |
3537 | - "type": "zip", | |
3538 | - "url": "https://api.github.com/repos/yiisoft/yii2-composer/zipball/f5fe6ba58dbc92b37daed5d9bd94cda777852ee4", | |
3539 | - "reference": "348122de0b2c2e343b579f93fcda1da78cab4912", | |
3540 | - "shasum": "" | |
3541 | - }, | |
3542 | - "require": { | |
3543 | - "composer-plugin-api": "^1.0" | |
3544 | - }, | |
3545 | - "type": "composer-plugin", | |
3546 | - "extra": { | |
3547 | - "class": "yii\\composer\\Plugin", | |
3548 | - "branch-alias": { | |
3549 | - "dev-master": "2.0.x-dev" | |
3550 | - } | |
3551 | - }, | |
3552 | - "autoload": { | |
3553 | - "psr-4": { | |
3554 | - "yii\\composer\\": "" | |
3555 | - } | |
3556 | - }, | |
3557 | - "notification-url": "https://packagist.org/downloads/", | |
3558 | - "license": [ | |
3559 | - "BSD-3-Clause" | |
3560 | - ], | |
3561 | - "authors": [ | |
3562 | - { | |
3563 | - "name": "Qiang Xue", | |
3564 | - "email": "qiang.xue@gmail.com" | |
3565 | - } | |
3566 | - ], | |
3567 | - "description": "The composer plugin for Yii extension installer", | |
3568 | - "keywords": [ | |
3569 | - "composer", | |
3570 | - "extension installer", | |
3571 | - "yii2" | |
3572 | - ], | |
3573 | - "time": "2016-03-21 19:11:44" | |
3574 | - }, | |
3575 | - { | |
3576 | - "name": "yiisoft/yii2-imagine", | |
3577 | - "version": "dev-master", | |
3578 | - "source": { | |
3579 | - "type": "git", | |
3580 | - "url": "https://github.com/yiisoft/yii2-imagine.git", | |
3581 | - "reference": "a6c34ef6b69fb4670ba987ce4b9cfdb2131a8b99" | |
3582 | - }, | |
3583 | - "dist": { | |
3584 | - "type": "zip", | |
3585 | - "url": "https://api.github.com/repos/yiisoft/yii2-imagine/zipball/3be1ecc324aa156a97f03e3fc59045c8d61be1f8", | |
3586 | - "reference": "a6c34ef6b69fb4670ba987ce4b9cfdb2131a8b99", | |
3587 | - "shasum": "" | |
3588 | - }, | |
3589 | - "require": { | |
3590 | - "imagine/imagine": "0.5.*", | |
3591 | - "yiisoft/yii2": "*" | |
3592 | - }, | |
3593 | - "type": "yii2-extension", | |
3594 | - "extra": { | |
3595 | - "branch-alias": { | |
3596 | - "dev-master": "2.0.x-dev" | |
3597 | - } | |
3598 | - }, | |
3599 | - "autoload": { | |
3600 | - "psr-4": { | |
3601 | - "yii\\imagine\\": "" | |
3602 | - } | |
3603 | - }, | |
3604 | - "notification-url": "https://packagist.org/downloads/", | |
3605 | - "license": [ | |
3606 | - "BSD-3-Clause" | |
3607 | - ], | |
3608 | - "authors": [ | |
3609 | - { | |
3610 | - "name": "Antonio Ramirez", | |
3611 | - "email": "amigo.cobos@gmail.com" | |
3612 | - } | |
3613 | - ], | |
3614 | - "description": "The Imagine integration for the Yii framework", | |
3615 | - "keywords": [ | |
3616 | - "helper", | |
3617 | - "image", | |
3618 | - "imagine", | |
3619 | - "yii2" | |
3620 | - ], | |
3621 | - "time": "2016-03-21 19:13:31" | |
3622 | - }, | |
3623 | - { | |
3624 | - "name": "yiisoft/yii2-jui", | |
3625 | - "version": "dev-master", | |
3626 | - "source": { | |
3627 | - "type": "git", | |
3628 | - "url": "https://github.com/yiisoft/yii2-jui.git", | |
3629 | - "reference": "69cd9763b4807dbbce367d599dc615c5b8a8ef4f" | |
3630 | - }, | |
3631 | - "dist": { | |
3632 | - "type": "zip", | |
3633 | - "url": "https://api.github.com/repos/yiisoft/yii2-jui/zipball/9ab9a2cb17cd7f13921339e11e5146295cf39083", | |
3634 | - "reference": "69cd9763b4807dbbce367d599dc615c5b8a8ef4f", | |
3635 | - "shasum": "" | |
3636 | - }, | |
3637 | - "require": { | |
3638 | - "bower-asset/jquery-ui": "1.11.*@stable", | |
3639 | - "yiisoft/yii2": ">=2.0.4" | |
3640 | - }, | |
3641 | - "type": "yii2-extension", | |
3642 | - "extra": { | |
3643 | - "branch-alias": { | |
3644 | - "dev-master": "2.0.x-dev" | |
3645 | - }, | |
3646 | - "asset-installer-paths": { | |
3647 | - "npm-asset-library": "vendor/npm", | |
3648 | - "bower-asset-library": "vendor/bower" | |
3649 | - } | |
3650 | - }, | |
3651 | - "autoload": { | |
3652 | - "psr-4": { | |
3653 | - "yii\\jui\\": "" | |
3654 | - } | |
3655 | - }, | |
3656 | - "notification-url": "https://packagist.org/downloads/", | |
3657 | - "license": [ | |
3658 | - "BSD-3-Clause" | |
3659 | - ], | |
3660 | - "authors": [ | |
3661 | - { | |
3662 | - "name": "Qiang Xue", | |
3663 | - "email": "qiang.xue@gmail.com" | |
3664 | - } | |
3665 | - ], | |
3666 | - "description": "The Jquery UI extension for the Yii framework", | |
3667 | - "keywords": [ | |
3668 | - "jQuery UI", | |
3669 | - "yii2" | |
3670 | - ], | |
3671 | - "time": "2016-03-29 21:32:13" | |
3672 | - }, | |
3673 | - { | |
3674 | - "name": "yiisoft/yii2-swiftmailer", | |
3675 | - "version": "dev-master", | |
3676 | - "source": { | |
3677 | - "type": "git", | |
3678 | - "url": "https://github.com/yiisoft/yii2-swiftmailer.git", | |
3679 | - "reference": "20775fef1047cd927908270a8d7983580304eb57" | |
3680 | - }, | |
3681 | - "dist": { | |
3682 | - "type": "zip", | |
3683 | - "url": "https://api.github.com/repos/yiisoft/yii2-swiftmailer/zipball/163b9c6273e133c43a596aef46a9f5b1537731f9", | |
3684 | - "reference": "20775fef1047cd927908270a8d7983580304eb57", | |
3685 | - "shasum": "" | |
3686 | - }, | |
3687 | - "require": { | |
3688 | - "swiftmailer/swiftmailer": "~5.0", | |
3689 | - "yiisoft/yii2": ">=2.0.4" | |
3690 | - }, | |
3691 | - "type": "yii2-extension", | |
3692 | - "extra": { | |
3693 | - "branch-alias": { | |
3694 | - "dev-master": "2.0.x-dev" | |
3695 | - } | |
3696 | - }, | |
3697 | - "autoload": { | |
3698 | - "psr-4": { | |
3699 | - "yii\\swiftmailer\\": "" | |
3700 | - } | |
3701 | - }, | |
3702 | - "notification-url": "https://packagist.org/downloads/", | |
3703 | - "license": [ | |
3704 | - "BSD-3-Clause" | |
3705 | - ], | |
3706 | - "authors": [ | |
3707 | - { | |
3708 | - "name": "Paul Klimov", | |
3709 | - "email": "klimov.paul@gmail.com" | |
3710 | - } | |
3711 | - ], | |
3712 | - "description": "The SwiftMailer integration for the Yii framework", | |
3713 | - "keywords": [ | |
3714 | - "email", | |
3715 | - "mail", | |
3716 | - "mailer", | |
3717 | - "swift", | |
3718 | - "swiftmailer", | |
3719 | - "yii2" | |
3720 | - ], | |
3721 | - "time": "2016-03-21 19:16:09" | |
3722 | - } | |
3723 | - ], | |
3724 | - "packages-dev": [ | |
3725 | - { | |
3726 | - "name": "bower-asset/typeahead.js", | |
3727 | - "version": "v0.11.1", | |
3728 | - "source": { | |
3729 | - "type": "git", | |
3730 | - "url": "https://github.com/twitter/typeahead.js.git", | |
3731 | - "reference": "588440f66559714280628a4f9799f0c4eb880a4a" | |
3732 | - }, | |
3733 | - "dist": { | |
3734 | - "type": "zip", | |
3735 | - "url": "https://api.github.com/repos/twitter/typeahead.js/zipball/588440f66559714280628a4f9799f0c4eb880a4a", | |
3736 | - "reference": "588440f66559714280628a4f9799f0c4eb880a4a", | |
3737 | - "shasum": "" | |
3738 | - }, | |
3739 | - "require": { | |
3740 | - "bower-asset/jquery": ">=1.7" | |
3741 | - }, | |
3742 | - "require-dev": { | |
3743 | - "bower-asset/jasmine-ajax": "~1.3.1", | |
3744 | - "bower-asset/jasmine-jquery": "~1.5.2", | |
3745 | - "bower-asset/jquery": "~1.7" | |
3746 | - }, | |
3747 | - "type": "bower-asset-library", | |
3748 | - "extra": { | |
3749 | - "bower-asset-main": "dist/typeahead.bundle.js" | |
3750 | - } | |
3751 | - }, | |
3752 | - { | |
3753 | - "name": "fzaninotto/faker", | |
3754 | - "version": "dev-master", | |
3755 | - "source": { | |
3756 | - "type": "git", | |
3757 | - "url": "https://github.com/fzaninotto/Faker.git", | |
3758 | - "reference": "8deb6343c80c4edf546a6fff01a2b05c7dc59ac4" | |
3759 | - }, | |
3760 | - "dist": { | |
3761 | - "type": "zip", | |
3762 | - "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/1c33e894fbbad6cf65bd42871719cd33227ed6a7", | |
3763 | - "reference": "8deb6343c80c4edf546a6fff01a2b05c7dc59ac4", | |
3764 | - "shasum": "" | |
3765 | - }, | |
3766 | - "require": { | |
3767 | - "php": ">=5.3.3" | |
3768 | - }, | |
3769 | - "require-dev": { | |
3770 | - "ext-intl": "*", | |
3771 | - "phpunit/phpunit": "~4.0", | |
3772 | - "squizlabs/php_codesniffer": "~1.5" | |
3773 | - }, | |
3774 | - "type": "library", | |
3775 | - "extra": { | |
3776 | - "branch-alias": { | |
3777 | - "dev-master": "1.6.x-dev" | |
3778 | - } | |
3779 | - }, | |
3780 | - "autoload": { | |
3781 | - "psr-4": { | |
3782 | - "Faker\\": "src/Faker/" | |
3783 | - } | |
3784 | - }, | |
3785 | - "notification-url": "https://packagist.org/downloads/", | |
3786 | - "license": [ | |
3787 | - "MIT" | |
3788 | - ], | |
3789 | - "authors": [ | |
3790 | - { | |
3791 | - "name": "François Zaninotto" | |
3792 | - } | |
3793 | - ], | |
3794 | - "description": "Faker is a PHP library that generates fake data for you.", | |
3795 | - "keywords": [ | |
3796 | - "data", | |
3797 | - "faker", | |
3798 | - "fixtures" | |
3799 | - ], | |
3800 | - "time": "2016-03-29 16:49:43" | |
3801 | - }, | |
3802 | - { | |
3803 | - "name": "phpspec/php-diff", | |
3804 | - "version": "dev-master", | |
3805 | - "source": { | |
3806 | - "type": "git", | |
3807 | - "url": "https://github.com/phpspec/php-diff.git", | |
3808 | - "reference": "30e103d19519fe678ae64a60d77884ef3d71b28a" | |
3809 | - }, | |
3810 | - "dist": { | |
3811 | - "type": "zip", | |
3812 | - "url": "https://api.github.com/repos/phpspec/php-diff/zipball/0464787bfa7cd13576c5a1e318709768798bec6a", | |
3813 | - "reference": "30e103d19519fe678ae64a60d77884ef3d71b28a", | |
3814 | - "shasum": "" | |
3815 | - }, | |
3816 | - "type": "library", | |
3817 | - "autoload": { | |
3818 | - "psr-0": { | |
3819 | - "Diff": "lib/" | |
3820 | - } | |
3821 | - }, | |
3822 | - "notification-url": "https://packagist.org/downloads/", | |
3823 | - "license": [ | |
3824 | - "BSD-3-Clause" | |
3825 | - ], | |
3826 | - "authors": [ | |
3827 | - { | |
3828 | - "name": "Chris Boulton", | |
3829 | - "homepage": "http://github.com/chrisboulton", | |
3830 | - "role": "Original developer" | |
3831 | - } | |
3832 | - ], | |
3833 | - "description": "A comprehensive library for generating differences between two hashable objects (strings or arrays).", | |
3834 | - "time": "2013-11-01 13:02:21" | |
3835 | - }, | |
3836 | - { | |
3837 | - "name": "yiisoft/yii2-codeception", | |
3838 | - "version": "dev-master", | |
3839 | - "source": { | |
3840 | - "type": "git", | |
3841 | - "url": "https://github.com/yiisoft/yii2-codeception.git", | |
3842 | - "reference": "e01b3c46917b3f00c42f6a4aabf612cc36d792e6" | |
3843 | - }, | |
3844 | - "dist": { | |
3845 | - "type": "zip", | |
3846 | - "url": "https://api.github.com/repos/yiisoft/yii2-codeception/zipball/572a6d46d942cc5733c45931fdbd1d60228f3c89", | |
3847 | - "reference": "e01b3c46917b3f00c42f6a4aabf612cc36d792e6", | |
3848 | - "shasum": "" | |
3849 | - }, | |
3850 | - "require": { | |
3851 | - "yiisoft/yii2": ">=2.0.4" | |
3852 | - }, | |
3853 | - "type": "yii2-extension", | |
3854 | - "extra": { | |
3855 | - "branch-alias": { | |
3856 | - "dev-master": "2.0.x-dev" | |
3857 | - } | |
3858 | - }, | |
3859 | - "autoload": { | |
3860 | - "psr-4": { | |
3861 | - "yii\\codeception\\": "" | |
3862 | - } | |
3863 | - }, | |
3864 | - "notification-url": "https://packagist.org/downloads/", | |
3865 | - "license": [ | |
3866 | - "BSD-3-Clause" | |
3867 | - ], | |
3868 | - "authors": [ | |
3869 | - { | |
3870 | - "name": "Mark Jebri", | |
3871 | - "email": "mark.github@yandex.ru" | |
3872 | - } | |
3873 | - ], | |
3874 | - "description": "The Codeception integration for the Yii framework", | |
3875 | - "keywords": [ | |
3876 | - "codeception", | |
3877 | - "yii2" | |
3878 | - ], | |
3879 | - "time": "2016-03-21 19:11:26" | |
3880 | - }, | |
3881 | - { | |
3882 | - "name": "yiisoft/yii2-debug", | |
3883 | - "version": "dev-master", | |
3884 | - "source": { | |
3885 | - "type": "git", | |
3886 | - "url": "https://github.com/yiisoft/yii2-debug.git", | |
3887 | - "reference": "081795536b31d29106b0d1de0cb3aefa3e05e995" | |
3888 | - }, | |
3889 | - "dist": { | |
3890 | - "type": "zip", | |
3891 | - "url": "https://api.github.com/repos/yiisoft/yii2-debug/zipball/e26905af4bc1ca5ecbababac112c7f7f722cabd2", | |
3892 | - "reference": "081795536b31d29106b0d1de0cb3aefa3e05e995", | |
3893 | - "shasum": "" | |
3894 | - }, | |
3895 | - "require": { | |
3896 | - "yiisoft/yii2": ">=2.0.4", | |
3897 | - "yiisoft/yii2-bootstrap": "*" | |
3898 | - }, | |
3899 | - "type": "yii2-extension", | |
3900 | - "extra": { | |
3901 | - "branch-alias": { | |
3902 | - "dev-master": "2.0.x-dev" | |
3903 | - } | |
3904 | - }, | |
3905 | - "autoload": { | |
3906 | - "psr-4": { | |
3907 | - "yii\\debug\\": "" | |
3908 | - } | |
3909 | - }, | |
3910 | - "notification-url": "https://packagist.org/downloads/", | |
3911 | - "license": [ | |
3912 | - "BSD-3-Clause" | |
3913 | - ], | |
3914 | - "authors": [ | |
3915 | - { | |
3916 | - "name": "Qiang Xue", | |
3917 | - "email": "qiang.xue@gmail.com" | |
3918 | - } | |
3919 | - ], | |
3920 | - "description": "The debugger extension for the Yii framework", | |
3921 | - "keywords": [ | |
3922 | - "debug", | |
3923 | - "debugger", | |
3924 | - "yii2" | |
3925 | - ], | |
3926 | - "time": "2016-03-21 19:12:39" | |
3927 | - }, | |
3928 | - { | |
3929 | - "name": "yiisoft/yii2-faker", | |
3930 | - "version": "dev-master", | |
3931 | - "source": { | |
3932 | - "type": "git", | |
3933 | - "url": "https://github.com/yiisoft/yii2-faker.git", | |
3934 | - "reference": "a8daa97749e7154d91676405a1c59ed81e1ca999" | |
3935 | - }, | |
3936 | - "dist": { | |
3937 | - "type": "zip", | |
3938 | - "url": "https://api.github.com/repos/yiisoft/yii2-faker/zipball/6e6eb430809e3f9c05e367303909a05a4912d4c0", | |
3939 | - "reference": "a8daa97749e7154d91676405a1c59ed81e1ca999", | |
3940 | - "shasum": "" | |
3941 | - }, | |
3942 | - "require": { | |
3943 | - "fzaninotto/faker": "~1.4", | |
3944 | - "yiisoft/yii2": "*" | |
3945 | - }, | |
3946 | - "type": "yii2-extension", | |
3947 | - "extra": { | |
3948 | - "branch-alias": { | |
3949 | - "dev-master": "2.0.x-dev" | |
3950 | - } | |
3951 | - }, | |
3952 | - "autoload": { | |
3953 | - "psr-4": { | |
3954 | - "yii\\faker\\": "" | |
3955 | - } | |
3956 | - }, | |
3957 | - "notification-url": "https://packagist.org/downloads/", | |
3958 | - "license": [ | |
3959 | - "BSD-3-Clause" | |
3960 | - ], | |
3961 | - "authors": [ | |
3962 | - { | |
3963 | - "name": "Mark Jebri", | |
3964 | - "email": "mark.github@yandex.ru" | |
3965 | - } | |
3966 | - ], | |
3967 | - "description": "Fixture generator. The Faker integration for the Yii framework.", | |
3968 | - "keywords": [ | |
3969 | - "Fixture", | |
3970 | - "faker", | |
3971 | - "yii2" | |
3972 | - ], | |
3973 | - "time": "2016-03-21 19:13:03" | |
3974 | - }, | |
3975 | - { | |
3976 | - "name": "yiisoft/yii2-gii", | |
3977 | - "version": "dev-master", | |
3978 | - "source": { | |
3979 | - "type": "git", | |
3980 | - "url": "https://github.com/yiisoft/yii2-gii.git", | |
3981 | - "reference": "989d6c52c92e51f0d562729c329ee1012191cba2" | |
3982 | - }, | |
3983 | - "dist": { | |
3984 | - "type": "zip", | |
3985 | - "url": "https://api.github.com/repos/yiisoft/yii2-gii/zipball/70edab5a7938b5bf4b5dc3ad1e1c3ce673552f48", | |
3986 | - "reference": "989d6c52c92e51f0d562729c329ee1012191cba2", | |
3987 | - "shasum": "" | |
3988 | - }, | |
3989 | - "require": { | |
3990 | - "bower-asset/typeahead.js": "0.10.* | ~0.11.0", | |
3991 | - "phpspec/php-diff": ">=1.0.2", | |
3992 | - "yiisoft/yii2": ">=2.0.4", | |
3993 | - "yiisoft/yii2-bootstrap": "~2.0" | |
3994 | - }, | |
3995 | - "type": "yii2-extension", | |
3996 | - "extra": { | |
3997 | - "branch-alias": { | |
3998 | - "dev-master": "2.0.x-dev" | |
3999 | - }, | |
4000 | - "asset-installer-paths": { | |
4001 | - "npm-asset-library": "vendor/npm", | |
4002 | - "bower-asset-library": "vendor/bower" | |
4003 | - } | |
4004 | - }, | |
4005 | - "autoload": { | |
4006 | - "psr-4": { | |
4007 | - "yii\\gii\\": "" | |
4008 | - } | |
4009 | - }, | |
4010 | - "notification-url": "https://packagist.org/downloads/", | |
4011 | - "license": [ | |
4012 | - "BSD-3-Clause" | |
4013 | - ], | |
4014 | - "authors": [ | |
4015 | - { | |
4016 | - "name": "Qiang Xue", | |
4017 | - "email": "qiang.xue@gmail.com" | |
4018 | - } | |
4019 | - ], | |
4020 | - "description": "The Gii extension for the Yii framework", | |
4021 | - "keywords": [ | |
4022 | - "code generator", | |
4023 | - "gii", | |
4024 | - "yii2" | |
4025 | - ], | |
4026 | - "time": "2016-03-21 19:13:26" | |
4027 | - } | |
4028 | - ], | |
4029 | - "aliases": [], | |
4030 | - "minimum-stability": "dev", | |
4031 | - "stability-flags": { | |
4032 | - "kartik-v/yii2-widget-select2": 20 | |
4033 | - }, | |
4034 | - "prefer-stable": false, | |
4035 | - "prefer-lowest": false, | |
4036 | - "platform": { | |
4037 | - "php": ">=5.4.0" | |
4038 | - }, | |
4039 | - "platform-dev": [] | |
4040 | -} |
frontend/views/catalog/product.php
1 | 1 | <?php |
2 | + | |
3 | +use common\components\artboximage\ArtboxImageHelper; | |
4 | + | |
2 | 5 | /** @var $this \yii\web\View */ |
3 | 6 | /** @var $dataProvider \yii\data\ActiveDataProvider */ |
4 | 7 | $this->title = $product->name; |
... | ... | @@ -16,7 +19,7 @@ $this->params['breadcrumbs'][] = $product->name .' #'. $product->variant->sku; |
16 | 19 | <?php if (empty($product->image)) :?> |
17 | 20 | <img src="/images/no_photo_big.png" alt="<?= $product->name?>"> |
18 | 21 | <?php else :?> |
19 | - <?= $product->image->imageUrl ? Yii::$app->imageCache->thumb($product->image->imageUrl, 'product') : ''?> | |
22 | + <?= $product->image->imageUrl ? ArtboxImageHelper::getImage($product->image->imageUrl, 'product') : ''?> | |
20 | 23 | <?php endif?> |
21 | 24 | |
22 | 25 | <!--<span class="new">НОВИНКА</span> |
... | ... | @@ -34,7 +37,7 @@ $this->params['breadcrumbs'][] = $product->name .' #'. $product->variant->sku; |
34 | 37 | <div class="main_img_slide"> |
35 | 38 | <?php foreach($product->images as $image) :?> |
36 | 39 | <div class="small_img_block active"> |
37 | - <?= Yii::$app->imageCache->thumb($image->imageUrl, 'product_trumb')?> | |
40 | + <?= ArtboxImageHelper::getImage($image->imageUrl, 'product_trumb')?> | |
38 | 41 | </div> |
39 | 42 | <?php endforeach?> |
40 | 43 | ... | ... |
frontend/views/catalog/product_item.php
... | ... | @@ -10,7 +10,7 @@ |
10 | 10 | <?php if (empty($product->image)) :?> |
11 | 11 | <img src="/images/no_photo.png"> |
12 | 12 | <?php else :?> |
13 | - <?= Yii::$app->imageCache->thumb($product->image->imageUrl, 'product_list')?> | |
13 | + <?= \common\components\artboximage\ArtboxImageHelper::getImage($product->image->imageUrl, 'product_list')?> | |
14 | 14 | <?php endif?> |
15 | 15 | </div> |
16 | 16 | <div class="title_item"><?= $product->name?></div></a> | ... | ... |