├── .gitignore ├── tests ├── img │ └── ankit_sample.png ├── config │ ├── .env │ └── app.php ├── TestCase.php ├── ImageHelperTest.php ├── DataProvider.php └── ImageUploadServiceTest.php ├── .scrutinizer.yml ├── src ├── LaravelImage │ ├── routes.php │ ├── LaravelImageFacade.php │ ├── ImageHelper.php │ ├── ImageUploadServiceProvider.php │ └── ImageUploadService.php └── config │ └── config.php ├── composer.json ├── .travis.yml ├── phpunit.xml ├── LICENSE ├── README.md └── composer.lock /.gitignore: -------------------------------------------------------------------------------- 1 | vendor/ 2 | node_modules/ 3 | .idea 4 | .DS_Store 5 | -------------------------------------------------------------------------------- /tests/img/ankit_sample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitpokhrel/laravel-image/HEAD/tests/img/ankit_sample.png -------------------------------------------------------------------------------- /tests/config/.env: -------------------------------------------------------------------------------- 1 | APP_ENV=testing 2 | APP_DEBUG=true 3 | APP_KEY=2YQze880SprrSOcuL46WxbkJcF01z6yX 4 | 5 | CACHE_DRIVER=array 6 | SESSION_DRIVER=array 7 | -------------------------------------------------------------------------------- /.scrutinizer.yml: -------------------------------------------------------------------------------- 1 | # .scrutinizer.yml 2 | filter: 3 | excluded_paths: 4 | - tests/* 5 | 6 | checks: 7 | php: 8 | code_rating: true 9 | 10 | tools: 11 | external_code_coverage: 12 | timeout: 1800 13 | runs: 3 14 | php_code_coverage: false 15 | -------------------------------------------------------------------------------- /src/LaravelImage/routes.php: -------------------------------------------------------------------------------- 1 | getImageResponse($request->getPathInfo(), $request->query()); 6 | })->where('path', '.*'); 7 | -------------------------------------------------------------------------------- /src/LaravelImage/LaravelImageFacade.php: -------------------------------------------------------------------------------- 1 | testImage)) { 18 | copy($this->sample, $this->testImage); 19 | } 20 | } 21 | 22 | public function tearDown() 23 | { 24 | parent::tearDown(); 25 | 26 | if (file_exists($this->testImage)) { 27 | unlink($this->testImage); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ankitpokhrel/laravel-image", 3 | "description": "Easy image upload and thumbnail management", 4 | "license": "MIT", 5 | "authors": [ 6 | { 7 | "name": "Ankit Pokhrel", 8 | "email": "ankitpokhrel@gmail.com" 9 | } 10 | ], 11 | "require": { 12 | "php": ">=5.6.4", 13 | "laravel/framework": "5.3.*", 14 | "league/glide-laravel": "^1.0" 15 | }, 16 | "require-dev": { 17 | "mockery/mockery": "dev-master", 18 | "squizlabs/php_codesniffer": "2.*", 19 | "orchestra/testbench": "~3.3", 20 | "phpunit/phpunit": "~5.0" 21 | }, 22 | "autoload": { 23 | "psr-4": { 24 | "AnkitPokhrel\\LaravelImage\\": "src/LaravelImage" 25 | } 26 | }, 27 | "autoload-dev": { 28 | "psr-4": { 29 | "AnkitPokhrel\\LaravelImage\\Tests\\": "tests" 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /tests/ImageHelperTest.php: -------------------------------------------------------------------------------- 1 | helper = new ImageHelper(); 19 | } 20 | 21 | /** 22 | * @test 23 | * 24 | * @covers ::image 25 | * @dataProvider AnkitPokhrel\LaravelImage\Tests\DataProvider::imageOptions 26 | */ 27 | public function it_generates_valid_image_tag($uploadDir, $image, $width, $height, $options, $attributes, $output) 28 | { 29 | $this->assertEquals($output, $this->helper->image($uploadDir, $image, $width, $height, $options, $attributes)); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: php 2 | 3 | php: 4 | - '5.6' 5 | - '7.0' 6 | - hhvm 7 | 8 | before_install: 9 | - composer self-update 10 | - composer create-project laravel/laravel 11 | - cd ./laravel 12 | - composer config repositories.ankitpokhrel vcs https://github.com/ankitpokhrel/laravel-image.git 13 | - composer require ankitpokhrel/laravel-image dev-master 14 | - composer update 15 | - cp ./vendor/ankitpokhrel/laravel-image/tests/config/.env ./ 16 | - rm ./config/app.php 17 | - cp ./vendor/ankitpokhrel/laravel-image/tests/config/app.php ./config 18 | - php artisan vendor:publish 19 | - cd ./vendor/ankitpokhrel/laravel-image 20 | - composer install 21 | 22 | script: phpunit --coverage-clover=coverage.clover 23 | 24 | after_script: 25 | - if ([ "hhvm" != "$TRAVIS_PHP_VERSION" ] && [ "7.0" != "$TRAVIS_PHP_VERSION" ]); then wget https://scrutinizer-ci.com/ocular.phar; fi; 26 | - if ([ "hhvm" != "$TRAVIS_PHP_VERSION" ] && [ "7.0" != "$TRAVIS_PHP_VERSION" ]); then php ocular.phar code-coverage:upload --format=php-clover coverage.xml; fi; 27 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | ./tests/ 15 | 16 | 17 | 18 | 19 | ./src 20 | 21 | ./src/config/config.php 22 | ./src/LaravelImage/routes.php 23 | ./src/LaravelImage/ImageUploadServiceProvider.php 24 | ./src/LaravelImage/LaravelImageFacade.php 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Ankit Pokhrel 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/LaravelImage/ImageHelper.php: -------------------------------------------------------------------------------- 1 | null, 10 | 'class' => null, 11 | ]; 12 | 13 | protected $options = [ 14 | 'fit' => 'crop-center', 15 | ]; 16 | 17 | /** 18 | * @param $dir string Directory to search 19 | * @param string $image Image name 20 | * @param null $width 21 | * @param null $height 22 | * @param array $options 23 | * 24 | * @return string 25 | */ 26 | public function image($dir, $image, $width = null, $height = null, array $options = [], array $attributes = []) 27 | { 28 | $attributes = array_replace_recursive($this->attributes, $attributes); 29 | $options = array_replace_recursive($this->options, $options); 30 | 31 | $path = config('laravelimage.routePath') . '/' . $dir . $image . '?' . http_build_query($options, '', '&'); 32 | 33 | if ( ! empty((int) $width)) { 34 | $path .= '&w=' . (int) $width; 35 | } 36 | 37 | if ( ! empty((int) $height)) { 38 | $path .= '&h=' . (int) $height; 39 | } 40 | 41 | return 'buildAttributes($attributes) . ' />'; 42 | } 43 | 44 | /** 45 | * @param $attributes 46 | * 47 | * @codeCoverageIgnore 48 | * 49 | * @return null|string 50 | */ 51 | protected function buildAttributes($attributes) 52 | { 53 | if ( ! $attributes) { 54 | return; 55 | } 56 | 57 | $attributeMap = []; 58 | foreach ($attributes as $attribute => $value) { 59 | $attributeMap[] = $attribute . '="' . $value . '"'; 60 | } 61 | 62 | return implode($attributeMap, ' '); 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /src/config/config.php: -------------------------------------------------------------------------------- 1 | public_path('uploads'), 13 | 14 | /* 15 | |-------------------------------------------------------------------------- 16 | | Route prefix 17 | |-------------------------------------------------------------------------- 18 | | 19 | | Your route prefix for glide 20 | */ 21 | 'routePath' => 'laravel-image', 22 | 23 | /* 24 | |-------------------------------------------------------------------------- 25 | | Default Validation Rules 26 | |-------------------------------------------------------------------------- 27 | | 28 | | This option registers the default validation rules to apply while 29 | | uploading images. 30 | */ 31 | 'validationRules' => 'mimes:jpeg,jpg,png|max:2048', //2mb 32 | 33 | /* 34 | |-------------------------------------------------------------------------- 35 | | Image Fields 36 | |-------------------------------------------------------------------------- 37 | | 38 | | Fields to treat as image fields. Required for validation. 39 | */ 40 | 'imageFields' => [ 41 | 'image', 42 | ], 43 | 44 | /* 45 | |-------------------------------------------------------------------------- 46 | | Error Messages 47 | |-------------------------------------------------------------------------- 48 | | 49 | | Validation error messages. Must be in format field.validationName. 50 | */ 51 | 'validationMessages' => [ 52 | 'image.max' => 'Image may not be greater than 2 MB', 53 | 'image.mimes' => 'Invalid image format. Please enter jpeg or png image.', 54 | ], 55 | ]; 56 | -------------------------------------------------------------------------------- /tests/DataProvider.php: -------------------------------------------------------------------------------- 1 | ['image.png', 'png'], 14 | 'jpg' => ['image.jpg', 'jpg'], 15 | 'jpeg' => ['image.jpeg', 'jpeg'], 16 | 'gif' => ['image.gif', 'gif'], 17 | 'default' => ['default_image.jpg', 'jpg'], 18 | ]; 19 | } 20 | 21 | /** 22 | * @return array 23 | */ 24 | public function invalidFileOptions() 25 | { 26 | return [ 27 | //invalid size, valid mime 28 | [2049, 'image/png'], 29 | [3000, 'image/jpg'], 30 | [5000, 'image/jpeg'], 31 | [1000, 'image/gif'], 32 | 33 | //valid size, invalid mime 34 | [2000, 'image/tiff'], 35 | [2048, 'image/jpeeg'], 36 | [1000, 'application/json'], 37 | [30, 'application/pdf'], 38 | [800, 'text/plain'], 39 | ]; 40 | } 41 | 42 | /** 43 | * @return array 44 | */ 45 | public function imageOptions() 46 | { 47 | $default = ''; 48 | $withOptions = ''; 49 | $withAttributes = 'Alt text of an image'; 50 | 51 | return [ 52 | ['uploads/contents/639bd5bc-3dec-4bbf-af19-201931d1d0c2/', 'image.png', 300, 200, [], [], $default], 53 | [ 54 | 'uploads/contents/639bd5bc-3dec-19d3-af19-201931d1d0c2/', 'image.jpg', 55 | 800, 600, 56 | ['fit' => 'crop-top-left', 'filt' => 'sepia'], 57 | [], 58 | $withOptions, 59 | ], 60 | [ 61 | 'uploads/contents/639bd5bc-34de-4bbf-af19-201931d1d0c2/', 'image.jpeg', 62 | 150, 80, 63 | ['fit' => 'crop-top-right', 'filt' => 'sepia'], 64 | ['alt' => 'Alt text of an image', 'class' => 'custom-class'], 65 | $withAttributes, 66 | ], 67 | ]; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /src/LaravelImage/ImageUploadServiceProvider.php: -------------------------------------------------------------------------------- 1 | app->routesAreCached()) { 20 | require __DIR__ . '/routes.php'; 21 | } 22 | 23 | $this->publishes([ 24 | __DIR__ . '/../config/config.php' => config_path('laravelimage.php'), 25 | ]); 26 | 27 | $this->registerBladeExtensions(); 28 | } 29 | 30 | /** 31 | * Register the application services. 32 | */ 33 | public function register() 34 | { 35 | $this->app->bind('\AnkitPokhrel\LaravelImage\ImageUploadService'); 36 | 37 | $this->app->singleton('laravelImage', function () { 38 | return $this->app->make('\AnkitPokhrel\LaravelImage\ImageHelper'); 39 | }); 40 | 41 | $this->registerGlide(); 42 | } 43 | 44 | /** 45 | * Register glide. 46 | */ 47 | protected function registerGlide() 48 | { 49 | $this->app->singleton('\League\Glide\Server', function ($app) { 50 | $fileSystem = $app->make(Filesystem::class); 51 | 52 | $uploadDir = config('laravelimage.uploadDir'); 53 | // Set source filesystem 54 | $source = new LeagueFilesystem( 55 | new Local($uploadDir) 56 | ); 57 | 58 | // Set cache filesystem 59 | $cache = new LeagueFilesystem( 60 | new Local($fileSystem->getDriver()->getAdapter()->getPathPrefix() . '/laravel-image-cache') 61 | ); 62 | 63 | // Setup glide server 64 | return ServerFactory::create([ 65 | 'source' => $source, 66 | 'cache' => $cache, 67 | 'base_url' => config('laravelimage.routePath') . '/' . basename($uploadDir), 68 | 'response' => new LaravelResponseFactory(), 69 | ]); 70 | }); 71 | } 72 | 73 | /** 74 | * Register blade templates. 75 | */ 76 | protected function registerBladeExtensions() 77 | { 78 | $blade = $this->app['view']->getEngineResolver()->resolve('blade')->getCompiler(); 79 | 80 | $blade->directive('laravelImage', function ($options) { 81 | return ""; 82 | }); 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Laravel Image 2 | [![Latest Version](https://img.shields.io/github/release/ankitpokhrel/laravel-image.svg?style=flat-square)](https://github.com/ankitpokhrel/laravel-image/releases) 3 | [![Scrutinizer Code Quality](https://img.shields.io/scrutinizer/g/ankitpokhrel/laravel-image.svg?style=flat-square)](https://scrutinizer-ci.com/g/ankitpokhrel/laravel-image/?branch=master) 4 | [![Travis Build](https://img.shields.io/travis/ankitpokhrel/laravel-image/master.svg?style=flat-square)](https://travis-ci.org/ankitpokhrel/laravel-image?branch=master) 5 | [![Code Coverage](https://img.shields.io/scrutinizer/coverage/g/ankitpokhrel/laravel-image.svg?style=flat-square)](https://scrutinizer-ci.com/g/ankitpokhrel/laravel-image/?branch=master) 6 | [![StyleCI](https://styleci.io/repos/61992841/shield)](https://styleci.io/repos/61992841) 7 | [![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](LICENSE) 8 | [![Total Downloads](https://img.shields.io/packagist/dt/ankitpokhrel/laravel-image.svg?style=flat-square)](https://packagist.org/packages/ankitpokhrel/laravel-image) 9 | 10 | _Image Upload Package for Laravel 5+_ 11 | 12 | ## Overview 13 | 14 | Laravel Image is a image upload and thumbnail management package for laravel 5+. This package uses [Glide](http://glide.thephpleague.com/) library from the php league for on-demand image manipulation. 15 | 16 | ## Installation 17 | 18 | > For 5.1 use [5.1](https://github.com/ankitpokhrel/laravel-image/tree/5.1) branch. 19 | > For 5.2 use [5.2](https://github.com/ankitpokhrel/laravel-image/tree/5.2) branch. 20 | > For 5.3 use [master](https://github.com/ankitpokhrel/laravel-image) branch. 21 | 22 | Pull the package via composer 23 | 24 | ```php 25 | composer require ankitpokhrel/laravel-image 26 | ``` 27 | 28 | Include the service provider within `config/app.php`. 29 | 30 | ```php 31 | AnkitPokhrel\LaravelImage\ImageUploadServiceProvider::class 32 | ``` 33 | 34 | Finally publish the configuration 35 | ```php 36 | php artisan vendor:publish --provider="AnkitPokhrel\LaravelImage\ImageUploadServiceProvider" 37 | ``` 38 | 39 | ## Configuration 40 | You can add default configurations to `config/laravelimage.php`. 41 | 42 | ## Usage 43 | 44 | #### Uploading Image 45 | Within your controllers, get access to image upload service via dependency injection 46 | ```php 47 | class ContentsController extends Controller 48 | { 49 | ... 50 | 51 | protected $image; 52 | 53 | /** 54 | * @param ImageUploadService $image 55 | */ 56 | public function __construct(ImageUploadService $image) 57 | { 58 | ... 59 | 60 | //set properties for file upload 61 | $this->image = $image; 62 | $this->image->setUploadField('image'); //default is image 63 | $this->image->setUploadFolder('contents'); //default is public/uploads/contents 64 | } 65 | 66 | ... 67 | 68 | ``` 69 | 70 | And then, in your store or update method you can perform image upload 71 | ```php 72 | /** 73 | * Store method 74 | */ 75 | public function store(ContentRequest $request) 76 | { 77 | $input = $request->all(); 78 | 79 | if (Input::hasFile($this->image->getUploadField()) && $this->image->upload()) { 80 | //image is uploaded, get uploaded image info 81 | $uploadedFileInfo = $this->image->getUploadedFileInfo(); 82 | 83 | ... 84 | //do whatever you like with the information 85 | $input = array_merge($input, $uploadedFileInfo); 86 | } else { 87 | //get validator object 88 | $validator = $this->image->getValidationErrors(); 89 | 90 | //get error messages 91 | $errors = $validator->messages()->all(); 92 | } 93 | 94 | ... 95 | } 96 | 97 | /** 98 | * Update method 99 | */ 100 | public function update(Request $request, $id) 101 | { 102 | ... 103 | 104 | if (Input::hasFile($this->image->getUploadField()) && $this->image->upload()) { 105 | ... 106 | 107 | //remove old files 108 | if (!empty(trim($model->file_path))) { 109 | $this->image->clean(public_path($model->file_path), true); 110 | } 111 | } 112 | 113 | ... 114 | } 115 | ``` 116 | 117 | #### Uploaded file info 118 | You can get uploaded file info using `$this->image->getUploadedFileInfo()`. It will return array as follow: 119 | ```php 120 | image : Saved image name 121 | upload_dir : Image upload path 122 | original_image_name : Real name of uploaded image 123 | size : Size of the uploaded image 124 | extension : Extension of the uploaded image 125 | mime_type : Mime type of the uploaded image 126 | ``` 127 | 128 | To change `image` field you can use `setUploadField()` method. If you wish to change `upload_dir` field you can use `setUploadDir` method. Usually you will save `image`, `upload_dir` and `original_image_name` to the database. 129 | 130 | To get validation errors, you can use `getValidationErrors()` method. 131 | 132 | #### Customizing upload path 133 | 134 | Sometime you may want to group uploaded image or even store image somewhere else other than the public folder. 135 | You can do it by setting base path. For example, this settings below will store images inside 136 | `public/uploads/user-images/users/` directory. 137 | 138 | ```php 139 | //set base path 140 | $this->image->setBasePath('uploads/user-images/'); 141 | 142 | //set upload folder 143 | $this->image->setUploadFolder('users'); 144 | ``` 145 | 146 | If you want to upload image in other places other than `public` folder, you can provide second parameter as `false` 147 | to the base path method. 148 | 149 | ```php 150 | //set absolute base path 151 | $this->image->setBasePath('/absolute/path/to/your/folder/uploads/', true); 152 | 153 | //set upload folder 154 | $this->image->setUploadFolder('users'); 155 | ``` 156 | 157 | This will upload image to `/absolute/path/to/your/folder/uploads/users` folder. Make sure that the folder has proper 158 | permission to store the images. 159 | 160 | #### Using blade directive to display images 161 | 162 | Display full image 163 | ```html 164 | @laravelImage($uploadDir, $imageName) 165 | ``` 166 | 167 | Create image of custom size at runtime 168 | ```html 169 | <-- @laravelImage(uploadDir, imageName, width, height) --> 170 | @laravelImage($uploadDir, $imageName, 300, 200) 171 | ``` 172 | 173 | Options & attributes 174 | ```html 175 | <-- @laravelImage(uploadDir, imageName, width, height, options, attributes) --> 176 | @laravelImage($uploadDir, $imageName, 300, 200, [ 177 | 'fit' => 'crop-top-left', 178 | 'filt' => 'sepia' 179 | ], [ 180 | 'alt' => 'Alt text of an image', 181 | 'class' => 'custom-class' 182 | ]) 183 | ``` 184 | 185 | > Options can be any glide options. See [thephpleague/glide](http://glide.thephpleague.com/) for more info on options. 186 | 187 | #### Displaying image without blade 188 | 189 | Image source should be in the format `laravelimage.routePath/uploadDir/image?options`, where `laravelimage.routePath` is from configuration file. 190 | So if you set your `routePath` to `cache`, the image url will be something like this. 191 | 192 | ```html 193 | 194 | ``` 195 | 196 | Generated images are cached inside `storage/laravel-image-cache`. 197 | -------------------------------------------------------------------------------- /src/LaravelImage/ImageUploadService.php: -------------------------------------------------------------------------------- 1 | validationRules = $validationRules ? $validationRules : config('laravelimage.validationRules'); 54 | 55 | // Set default upload folder 56 | $this->setUploadFolder('contents'); 57 | } 58 | 59 | /** 60 | * Get uploaded file info. 61 | * 62 | * @return array 63 | */ 64 | public function getUploadedFileInfo() 65 | { 66 | return $this->uploadedFileInfo; 67 | } 68 | 69 | /** 70 | * Set upload field. 71 | * 72 | * @param $fieldName 73 | */ 74 | public function setUploadField($fieldName) 75 | { 76 | $this->field = $fieldName; 77 | } 78 | 79 | /** 80 | * get upload field. 81 | * 82 | * return string 83 | */ 84 | public function getUploadField() 85 | { 86 | return $this->field; 87 | } 88 | 89 | /** 90 | * Set upload directory. 91 | * 92 | * @param string $dir 93 | */ 94 | public function setUploadDir($dir) 95 | { 96 | $this->uploadDir = $dir; 97 | } 98 | 99 | /** 100 | * get upload directory. 101 | * 102 | * return string 103 | */ 104 | public function getUploadDir() 105 | { 106 | return $this->uploadDir; 107 | } 108 | 109 | /** 110 | * Set original image name field. 111 | * 112 | * @param string $originalImageName 113 | */ 114 | public function setOriginalImageNameField($originalImageName) 115 | { 116 | $this->originalImageNameField = $originalImageName; 117 | } 118 | 119 | /** 120 | * get original image name field. 121 | * 122 | * return string 123 | */ 124 | public function getOriginalImageNameField() 125 | { 126 | return $this->originalImageNameField; 127 | } 128 | 129 | /** 130 | * Set base path. 131 | * 132 | * @param $path 133 | * @param $publicPath 134 | */ 135 | public function setBasePath($path, $publicPath = true) 136 | { 137 | $this->basePath = $path; 138 | $this->publicPath = $publicPath; 139 | } 140 | 141 | /** 142 | * Get base path. 143 | * 144 | * @return string 145 | */ 146 | public function getBasePath() 147 | { 148 | return $this->basePath; 149 | } 150 | 151 | /** 152 | * Get public path. 153 | */ 154 | public function getPublicPath() 155 | { 156 | return $this->publicPath; 157 | } 158 | 159 | /** 160 | * Set upload folder. 161 | * 162 | * @param $folder 163 | */ 164 | public function setUploadFolder($folder) 165 | { 166 | $this->uploadPath = $this->basePath . $folder . '/' . $this->getUniqueFolderName() . '/'; 167 | $this->destination = $this->publicPath ? public_path($this->uploadPath) : $this->uploadPath; 168 | } 169 | 170 | /** 171 | * Get upload destination. 172 | * 173 | * @return string 174 | */ 175 | public function getDestination() 176 | { 177 | return $this->destination; 178 | } 179 | 180 | /** 181 | * Get upload path. 182 | * 183 | * @return string 184 | */ 185 | public function getUploadPath() 186 | { 187 | return $this->uploadPath; 188 | } 189 | 190 | /** 191 | * @param $rules 192 | */ 193 | public function setValidationRules($rules) 194 | { 195 | $this->validationRules = $rules; 196 | } 197 | 198 | /** 199 | * Get validation rules. 200 | */ 201 | public function getValidationRules() 202 | { 203 | return $this->validationRules; 204 | } 205 | 206 | /** 207 | * Perform image validation. 208 | * 209 | * @param $file 210 | * 211 | * @return bool 212 | */ 213 | protected function validate($file) 214 | { 215 | // Check if file is valid 216 | if ( ! $file->isValid()) { 217 | return false; 218 | } 219 | 220 | $inputFile = [$this->field => $file]; 221 | $rules = [$this->field => $this->validationRules]; 222 | 223 | // Validate 224 | $validator = Validator::make($inputFile, $rules); 225 | if ($validator->fails()) { 226 | $this->errors = $validator; 227 | 228 | return false; 229 | } 230 | 231 | return true; 232 | } 233 | 234 | /** 235 | * Uploads file to required destination. 236 | * 237 | * @return bool 238 | */ 239 | public function upload() 240 | { 241 | $file = Input::file($this->field); 242 | if ( ! $this->validate($file)) { 243 | return false; 244 | } 245 | 246 | $originalFileName = $file->getClientOriginalName(); 247 | $encryptedFileName = $this->getUniqueFilename($originalFileName); 248 | $mimeType = $file->getMimeType(); 249 | 250 | $size = $file->getSize(); 251 | if ($file->move($this->getDestination(), $encryptedFileName)) { 252 | $this->uploadedFileInfo = [ 253 | $this->originalImageNameField => $originalFileName, 254 | $this->field => $encryptedFileName, 255 | $this->uploadDir => $this->getUploadPath(), 256 | 'size' => $size, 257 | 'extension' => $file->getClientOriginalExtension(), 258 | 'mime_type' => $mimeType, 259 | ]; 260 | 261 | return true; 262 | } 263 | 264 | return false; 265 | } 266 | 267 | /** 268 | * @return array|object 269 | */ 270 | public function getValidationErrors() 271 | { 272 | return $this->errors; 273 | } 274 | 275 | /** 276 | * Clear out a folder and its content. 277 | * 278 | * @param string $folder Absolute path to the folder 279 | * @param bool $removeDirectory If you want to remove the folder as well 280 | * 281 | * @throws \Exception 282 | */ 283 | public function clean($folder, $removeDirectory = false) 284 | { 285 | if ( ! is_dir($folder)) { 286 | throw new \Exception(('Not a folder.')); 287 | } 288 | 289 | array_map('unlink', glob($folder . DIRECTORY_SEPARATOR . '*')); 290 | if ($removeDirectory && file_exists($folder)) { 291 | rmdir($folder); 292 | } 293 | } 294 | 295 | /** 296 | * function to generate unique filename for images. 297 | * 298 | * @param string $filename 299 | * 300 | * @return string 301 | */ 302 | public function getUniqueFilename($filename) 303 | { 304 | $uniqueName = uniqid(); 305 | $fileExt = explode('.', $filename); 306 | $mimeType = end($fileExt); 307 | $filename = $uniqueName . '.' . $mimeType; 308 | 309 | return $filename; 310 | } 311 | 312 | /** 313 | * Generate a random UUID for folder name (version 4). 314 | * 315 | * @see http://www.ietf.org/rfc/rfc4122.txt 316 | * 317 | * @return string RFC 4122 UUID 318 | * 319 | * @copyright Matt Farina MIT License https://github.com/lootils/uuid/blob/master/LICENSE 320 | */ 321 | public function getUniqueFolderName() 322 | { 323 | return sprintf( 324 | '%04x%04x-%04x-%04x-%04x-%04x%04x%04x', 325 | mt_rand(0, 65535), 326 | mt_rand(0, 65535), 327 | mt_rand(0, 65535), 328 | mt_rand(0, 4095) | 0x4000, 329 | mt_rand(0, 0x3fff) | 0x8000, 330 | mt_rand(0, 65535), 331 | mt_rand(0, 65535), 332 | mt_rand(0, 65535) 333 | ); 334 | } 335 | } 336 | -------------------------------------------------------------------------------- /tests/config/app.php: -------------------------------------------------------------------------------- 1 | 'Laravel Image', 16 | 17 | /* 18 | |-------------------------------------------------------------------------- 19 | | Application Environment 20 | |-------------------------------------------------------------------------- 21 | | 22 | | This value determines the "environment" your application is currently 23 | | running in. This may determine how you prefer to configure various 24 | | services your application utilizes. Set this in your ".env" file. 25 | | 26 | */ 27 | 28 | 'env' => env('APP_ENV', 'production'), 29 | 30 | /* 31 | |-------------------------------------------------------------------------- 32 | | Application Debug Mode 33 | |-------------------------------------------------------------------------- 34 | | 35 | | When your application is in debug mode, detailed error messages with 36 | | stack traces will be shown on every error that occurs within your 37 | | application. If disabled, a simple generic error page is shown. 38 | | 39 | */ 40 | 41 | 'debug' => env('APP_DEBUG', false), 42 | 43 | /* 44 | |-------------------------------------------------------------------------- 45 | | Application URL 46 | |-------------------------------------------------------------------------- 47 | | 48 | | This URL is used by the console to properly generate URLs when using 49 | | the Artisan command line tool. You should set this to the root of 50 | | your application so that it is used when running Artisan tasks. 51 | | 52 | */ 53 | 54 | 'url' => env('APP_URL', 'http://localhost'), 55 | 56 | /* 57 | |-------------------------------------------------------------------------- 58 | | Application Timezone 59 | |-------------------------------------------------------------------------- 60 | | 61 | | Here you may specify the default timezone for your application, which 62 | | will be used by the PHP date and date-time functions. We have gone 63 | | ahead and set this to a sensible default for you out of the box. 64 | | 65 | */ 66 | 67 | 'timezone' => 'UTC', 68 | 69 | /* 70 | |-------------------------------------------------------------------------- 71 | | Application Locale Configuration 72 | |-------------------------------------------------------------------------- 73 | | 74 | | The application locale determines the default locale that will be used 75 | | by the translation service provider. You are free to set this value 76 | | to any of the locales which will be supported by the application. 77 | | 78 | */ 79 | 80 | 'locale' => 'en', 81 | 82 | /* 83 | |-------------------------------------------------------------------------- 84 | | Application Fallback Locale 85 | |-------------------------------------------------------------------------- 86 | | 87 | | The fallback locale determines the locale to use when the current one 88 | | is not available. You may change the value to correspond to any of 89 | | the language folders that are provided through your application. 90 | | 91 | */ 92 | 93 | 'fallback_locale' => 'en', 94 | 95 | /* 96 | |-------------------------------------------------------------------------- 97 | | Encryption Key 98 | |-------------------------------------------------------------------------- 99 | | 100 | | This key is used by the Illuminate encrypter service and should be set 101 | | to a random, 32 character string, otherwise these encrypted strings 102 | | will not be safe. Please do this before deploying an application! 103 | | 104 | */ 105 | 106 | 'key' => env('APP_KEY'), 107 | 108 | 'cipher' => 'AES-256-CBC', 109 | 110 | /* 111 | |-------------------------------------------------------------------------- 112 | | Logging Configuration 113 | |-------------------------------------------------------------------------- 114 | | 115 | | Here you may configure the log settings for your application. Out of 116 | | the box, Laravel uses the Monolog PHP logging library. This gives 117 | | you a variety of powerful log handlers / formatters to utilize. 118 | | 119 | | Available Settings: "single", "daily", "syslog", "errorlog" 120 | | 121 | */ 122 | 123 | 'log' => env('APP_LOG', 'single'), 124 | 125 | 'log_level' => env('APP_LOG_LEVEL', 'debug'), 126 | 127 | /* 128 | |-------------------------------------------------------------------------- 129 | | Autoloaded Service Providers 130 | |-------------------------------------------------------------------------- 131 | | 132 | | The service providers listed here will be automatically loaded on the 133 | | request to your application. Feel free to add your own services to 134 | | this array to grant expanded functionality to your applications. 135 | | 136 | */ 137 | 138 | 'providers' => [ 139 | 140 | /* 141 | * Laravel Framework Service Providers... 142 | */ 143 | Illuminate\Auth\AuthServiceProvider::class, 144 | Illuminate\Broadcasting\BroadcastServiceProvider::class, 145 | Illuminate\Bus\BusServiceProvider::class, 146 | Illuminate\Cache\CacheServiceProvider::class, 147 | Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, 148 | Illuminate\Cookie\CookieServiceProvider::class, 149 | Illuminate\Database\DatabaseServiceProvider::class, 150 | Illuminate\Encryption\EncryptionServiceProvider::class, 151 | Illuminate\Filesystem\FilesystemServiceProvider::class, 152 | Illuminate\Foundation\Providers\FoundationServiceProvider::class, 153 | Illuminate\Hashing\HashServiceProvider::class, 154 | Illuminate\Mail\MailServiceProvider::class, 155 | Illuminate\Notifications\NotificationServiceProvider::class, 156 | Illuminate\Pagination\PaginationServiceProvider::class, 157 | Illuminate\Pipeline\PipelineServiceProvider::class, 158 | Illuminate\Queue\QueueServiceProvider::class, 159 | Illuminate\Redis\RedisServiceProvider::class, 160 | Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, 161 | Illuminate\Session\SessionServiceProvider::class, 162 | Illuminate\Translation\TranslationServiceProvider::class, 163 | Illuminate\Validation\ValidationServiceProvider::class, 164 | Illuminate\View\ViewServiceProvider::class, 165 | 166 | /* 167 | * Package Service Providers... 168 | */ 169 | 170 | // 171 | 172 | /* 173 | * Application Service Providers... 174 | */ 175 | App\Providers\AppServiceProvider::class, 176 | // App\Providers\BroadcastServiceProvider::class, 177 | App\Providers\AuthServiceProvider::class, 178 | App\Providers\EventServiceProvider::class, 179 | App\Providers\RouteServiceProvider::class, 180 | AnkitPokhrel\LaravelImage\ImageUploadServiceProvider::class, 181 | 182 | ], 183 | 184 | /* 185 | |-------------------------------------------------------------------------- 186 | | Class Aliases 187 | |-------------------------------------------------------------------------- 188 | | 189 | | This array of class aliases will be registered when this application 190 | | is started. However, feel free to register as many as you wish as 191 | | the aliases are "lazy" loaded so they don't hinder performance. 192 | | 193 | */ 194 | 195 | 'aliases' => [ 196 | 197 | 'App' => Illuminate\Support\Facades\App::class, 198 | 'Artisan' => Illuminate\Support\Facades\Artisan::class, 199 | 'Auth' => Illuminate\Support\Facades\Auth::class, 200 | 'Blade' => Illuminate\Support\Facades\Blade::class, 201 | 'Cache' => Illuminate\Support\Facades\Cache::class, 202 | 'Config' => Illuminate\Support\Facades\Config::class, 203 | 'Cookie' => Illuminate\Support\Facades\Cookie::class, 204 | 'Crypt' => Illuminate\Support\Facades\Crypt::class, 205 | 'DB' => Illuminate\Support\Facades\DB::class, 206 | 'Eloquent' => Illuminate\Database\Eloquent\Model::class, 207 | 'Event' => Illuminate\Support\Facades\Event::class, 208 | 'File' => Illuminate\Support\Facades\File::class, 209 | 'Gate' => Illuminate\Support\Facades\Gate::class, 210 | 'Hash' => Illuminate\Support\Facades\Hash::class, 211 | 'Lang' => Illuminate\Support\Facades\Lang::class, 212 | 'Log' => Illuminate\Support\Facades\Log::class, 213 | 'Mail' => Illuminate\Support\Facades\Mail::class, 214 | 'Notification' => Illuminate\Support\Facades\Notification::class, 215 | 'Password' => Illuminate\Support\Facades\Password::class, 216 | 'Queue' => Illuminate\Support\Facades\Queue::class, 217 | 'Redirect' => Illuminate\Support\Facades\Redirect::class, 218 | 'Redis' => Illuminate\Support\Facades\Redis::class, 219 | 'Request' => Illuminate\Support\Facades\Request::class, 220 | 'Response' => Illuminate\Support\Facades\Response::class, 221 | 'Route' => Illuminate\Support\Facades\Route::class, 222 | 'Schema' => Illuminate\Support\Facades\Schema::class, 223 | 'Session' => Illuminate\Support\Facades\Session::class, 224 | 'Storage' => Illuminate\Support\Facades\Storage::class, 225 | 'URL' => Illuminate\Support\Facades\URL::class, 226 | 'Validator' => Illuminate\Support\Facades\Validator::class, 227 | 'View' => Illuminate\Support\Facades\View::class, 228 | 229 | ], 230 | 231 | ]; 232 | -------------------------------------------------------------------------------- /tests/ImageUploadServiceTest.php: -------------------------------------------------------------------------------- 1 | uploadService = m::mock( 24 | '\AnkitPokhrel\LaravelImage\ImageUploadService[_construct]', 25 | $this->validationRules 26 | ); 27 | } 28 | 29 | /** 30 | * @test 31 | * 32 | * @covers ::setUploadField 33 | * @covers ::getUploadField 34 | */ 35 | public function set_upload_field() 36 | { 37 | //test default value 38 | $this->assertEquals('image', $this->uploadService->getUploadField()); 39 | 40 | //test custom value 41 | $this->uploadService->setUploadField('custom_field'); 42 | $this->assertEquals('custom_field', $this->uploadService->getUploadField()); 43 | } 44 | 45 | /** 46 | * @test 47 | * 48 | * @covers ::setUploadDir 49 | * @covers ::getUploadDir 50 | */ 51 | public function set_upload_dir() 52 | { 53 | //test default value 54 | $this->assertEquals('upload_dir', $this->uploadService->getUploadDir()); 55 | 56 | //test custom value 57 | $this->uploadService->setUploadDir('custom_upload_dir'); 58 | $this->assertEquals('custom_upload_dir', $this->uploadService->getUploadDir()); 59 | } 60 | 61 | /** 62 | * @test 63 | * 64 | * @covers ::setValidationRules 65 | * @covers ::getValidationRules 66 | */ 67 | public function set_validation_rules() 68 | { 69 | //test default value 70 | $this->assertEquals($this->uploadService->getValidationRules(), 'mimes:jpeg,jpg,png|max:2048'); 71 | 72 | //test custom value 73 | $this->uploadService->setValidationRules('mimes:png|max:1024'); 74 | $this->assertEquals('mimes:png|max:1024', $this->uploadService->getValidationRules()); 75 | } 76 | 77 | /** 78 | * @test 79 | * 80 | * @covers ::setBasePath 81 | * @covers ::getBasePath 82 | */ 83 | public function set_base_path() 84 | { 85 | //test default value 86 | $this->assertEquals('uploads/', $this->uploadService->getBasePath()); 87 | 88 | //test custom value 89 | $this->uploadService->setBasePath('custom_uploads/'); 90 | $this->assertEquals('custom_uploads/', $this->uploadService->getBasePath()); 91 | } 92 | 93 | /** 94 | * @test 95 | * 96 | * @covers ::getPublicPath 97 | * @covers ::setBasePath 98 | */ 99 | public function set_public_path() 100 | { 101 | //test default value 102 | $this->assertTrue($this->uploadService->getPublicPath()); 103 | 104 | //test custom value 105 | $this->uploadService->setBasePath('custom_uploads/', false); 106 | $this->assertFalse($this->uploadService->getPublicPath()); 107 | } 108 | 109 | /** 110 | * @test 111 | * 112 | * @covers ::setUploadFolder 113 | * @covers ::getUploadPath 114 | * @covers ::getDestination 115 | */ 116 | public function set_upload_folder() 117 | { 118 | $regex = '/^uploads\/contents\/([a-z0-9]){8}-([a-z0-9]){4}-([a-z0-9]){4}-([a-z0-9]){4}-([a-z0-9]){12}\/$/i'; 119 | $this->assertRegexp($regex, $this->uploadService->getUploadPath()); 120 | 121 | $this->uploadService->setUploadFolder('users'); 122 | 123 | $regex = '/^uploads\/users\/([a-z0-9]){8}-([a-z0-9]){4}-([a-z0-9]){4}-([a-z0-9]){4}-([a-z0-9]){12}\/$/i'; 124 | $this->assertRegexp($regex, $this->uploadService->getUploadPath()); 125 | 126 | //test destination 127 | $this->uploadService->setBasePath('/app/', false); 128 | $this->uploadService->setUploadFolder('users'); 129 | 130 | $regex = '/^\/app\/users\/([a-z0-9]){8}-([a-z0-9]){4}-([a-z0-9]){4}-([a-z0-9]){4}-([a-z0-9]){12}\/$/i'; 131 | $this->assertRegexp($regex, $this->uploadService->getDestination()); 132 | } 133 | 134 | /** 135 | * @test 136 | * 137 | * @covers ::setOriginalImageNameField 138 | * @covers ::getOriginalImageNameField 139 | */ 140 | public function set_original_image_name_field() 141 | { 142 | //test default value 143 | $this->assertEquals('original_image_name', $this->uploadService->getOriginalImageNameField()); 144 | 145 | //test custom value 146 | $this->uploadService->setOriginalImageNameField('custom_original_image_name'); 147 | $this->assertEquals('custom_original_image_name', $this->uploadService->getOriginalImageNameField()); 148 | } 149 | 150 | /** 151 | * @test 152 | * 153 | * @covers ::getUniqueFolderName() 154 | */ 155 | public function get_unique_folder_name() 156 | { 157 | for ($i = 0; $i < 25; $i++) { 158 | $folders[] = $this->uploadService->getUniqueFolderName(); 159 | } 160 | 161 | $this->assertEquals(25, count(array_unique($folders))); 162 | } 163 | 164 | /** 165 | * @test 166 | * 167 | * @covers ::getUniqueFilename 168 | * @dataProvider AnkitPokhrel\LaravelImage\Tests\DataProvider::fileNames 169 | */ 170 | public function get_unique_file_name_has_valid_extension($fileName, $ext) 171 | { 172 | $uniqueFileName = $this->uploadService->getUniqueFileName($fileName); 173 | 174 | $file = explode('.', $fileName); 175 | $fileExt = end($file); 176 | 177 | $this->assertEquals($fileExt, $ext); 178 | $this->assertNotEquals($uniqueFileName, $fileName); 179 | } 180 | 181 | /** 182 | * @test 183 | * 184 | * @covers ::getUniqueFilename 185 | */ 186 | public function get_unique_file_name_generates_unique_file_names() 187 | { 188 | for ($i = 0; $i < 25; $i++) { 189 | $files[] = $this->uploadService->getUniqueFileName(str_random(6)); 190 | } 191 | 192 | $this->assertEquals(25, count(array_unique($files))); 193 | } 194 | 195 | /** 196 | * @test 197 | * 198 | * @covers ::validate 199 | */ 200 | public function validate_file_with_right_params() 201 | { 202 | $file = new UploadedFile( 203 | $this->testImage, 204 | 'ankit.png', 205 | 'image/png', 206 | filesize($this->testImage), 207 | null, 208 | true 209 | ); 210 | 211 | $this->assertTrue($this->uploadService->validate($file)); 212 | } 213 | 214 | /** 215 | * @test 216 | * 217 | * @covers ::validate 218 | * @dataProvider AnkitPokhrel\LaravelImage\Tests\DataProvider::invalidFileOptions 219 | */ 220 | public function validate_fails_for_invalid_params($size, $type) 221 | { 222 | $file = new UploadedFile( 223 | $this->testImage, 224 | 'ankit.png', 225 | $type, 226 | $size, 227 | null, 228 | false 229 | ); 230 | 231 | $this->assertFalse($this->uploadService->validate($file)); 232 | } 233 | 234 | /** 235 | * @test 236 | * 237 | * @covers ::upload 238 | * @covers ::getUploadPath 239 | * @covers ::getUniqueFilename 240 | * @covers ::getValidationErrors 241 | */ 242 | public function upload_return_errors_for_invalid_params() 243 | { 244 | $file = new UploadedFile( 245 | $this->testImage, 246 | 'ankit.png', 247 | 'image/png', 248 | filesize($this->testImage), 249 | null, 250 | true 251 | ); 252 | 253 | $imageName = '57cbcd31b0fde.png'; 254 | $uploadDir = 'uploads/contents/639bd5bc-3dec-4bbf-af19-201931d1d0c2/'; 255 | 256 | //mock input 257 | $input = m::mock(Request::class); 258 | $input->shouldReceive('setUserResolver') 259 | ->shouldReceive('file') 260 | ->andReturn($file); 261 | 262 | Input::swap($input); 263 | 264 | //mock upload service with required methods 265 | $uploadServiceMock = m::mock( 266 | '\AnkitPokhrel\LaravelImage\ImageUploadService[_construct,getUniqueFilename,getUploadPath]', 267 | ['mimes:jpeg,jpg|max:30'] 268 | ); 269 | 270 | $uploadServiceMock 271 | ->shouldReceive('getUniqueFilename')->withAnyArgs()->andReturn($imageName) 272 | ->shouldReceive('getUploadPath')->andReturn($uploadDir); 273 | 274 | $expected = [ 275 | 0 => 'The image must be a file of type: jpeg, jpg.', 276 | 1 => 'The image may not be greater than 30 kilobytes.', 277 | ]; 278 | 279 | $this->assertFalse($uploadServiceMock->upload()); 280 | $this->assertEquals($expected, $uploadServiceMock->getValidationErrors()->messages()->all()); 281 | } 282 | 283 | /** 284 | * @test 285 | * 286 | * @covers ::upload 287 | * @covers ::getUploadPath 288 | * @covers ::getUniqueFilename 289 | * @covers ::getUploadedFileInfo 290 | */ 291 | public function it_uploads_the_image() 292 | { 293 | $file = new UploadedFile( 294 | $this->testImage, 295 | 'ankit.png', 296 | 'image/png', 297 | filesize($this->testImage), 298 | null, 299 | true 300 | ); 301 | 302 | //mock input 303 | $input = m::mock(Request::class); 304 | $input->shouldReceive('setUserResolver') 305 | ->shouldReceive('file') 306 | ->andReturn($file); 307 | 308 | Input::swap($input); 309 | 310 | $uploadServiceMock = m::mock( 311 | '\AnkitPokhrel\LaravelImage\ImageUploadService[_construct]', 312 | $this->validationRules 313 | ); 314 | 315 | $this->assertTrue($uploadServiceMock->upload()); 316 | 317 | $uploadedFileInfo = $uploadServiceMock->getUploadedFileInfo(); 318 | 319 | foreach (['original_image_name', 'image', 'upload_dir', 'size', 'extension', 'mime_type'] as $key) { 320 | $this->assertArrayHasKey($key, $uploadedFileInfo); 321 | } 322 | 323 | return $uploadedFileInfo; 324 | } 325 | 326 | /** 327 | * @test 328 | * 329 | * @covers ::clean 330 | * @depends it_uploads_the_image 331 | * 332 | * @expectedException \Exception 333 | * @expectedExceptionMessage Not a folder. 334 | */ 335 | public function it_throws_error_if_folder_is_file(array $uploadedFileInfo) 336 | { 337 | $dir = public_path($uploadedFileInfo['upload_dir']); 338 | $file = $dir . $uploadedFileInfo['image']; 339 | 340 | $this->uploadService->clean($file); 341 | } 342 | 343 | /** 344 | * @test 345 | * 346 | * @covers ::clean 347 | * @depends it_uploads_the_image 348 | */ 349 | public function it_cleans_uploaded_file(array $uploadedFileInfo) 350 | { 351 | $dir = public_path($uploadedFileInfo['upload_dir']); 352 | $file = $dir . $uploadedFileInfo['image']; 353 | 354 | $this->assertTrue(file_exists($file)); 355 | 356 | $this->uploadService->clean($dir); 357 | $this->assertFalse(file_exists($file)); 358 | 359 | $this->uploadService->clean($dir, true); 360 | $this->assertFalse(file_exists($dir)); 361 | } 362 | 363 | public function tearDown() 364 | { 365 | parent::tearDown(); 366 | 367 | m::close(); 368 | } 369 | } 370 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 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": "f602541a6928a289a4517a7236688851", 8 | "content-hash": "d735fe8bdccd1f6e6f1784f3a98197b0", 9 | "packages": [ 10 | { 11 | "name": "classpreloader/classpreloader", 12 | "version": "3.0.0", 13 | "source": { 14 | "type": "git", 15 | "url": "https://github.com/ClassPreloader/ClassPreloader.git", 16 | "reference": "9b10b913c2bdf90c3d2e0d726b454fb7f77c552a" 17 | }, 18 | "dist": { 19 | "type": "zip", 20 | "url": "https://api.github.com/repos/ClassPreloader/ClassPreloader/zipball/9b10b913c2bdf90c3d2e0d726b454fb7f77c552a", 21 | "reference": "9b10b913c2bdf90c3d2e0d726b454fb7f77c552a", 22 | "shasum": "" 23 | }, 24 | "require": { 25 | "nikic/php-parser": "^1.0|^2.0", 26 | "php": ">=5.5.9" 27 | }, 28 | "require-dev": { 29 | "phpunit/phpunit": "^4.8|^5.0" 30 | }, 31 | "type": "library", 32 | "extra": { 33 | "branch-alias": { 34 | "dev-master": "3.0-dev" 35 | } 36 | }, 37 | "autoload": { 38 | "psr-4": { 39 | "ClassPreloader\\": "src/" 40 | } 41 | }, 42 | "notification-url": "https://packagist.org/downloads/", 43 | "license": [ 44 | "MIT" 45 | ], 46 | "authors": [ 47 | { 48 | "name": "Michael Dowling", 49 | "email": "mtdowling@gmail.com" 50 | }, 51 | { 52 | "name": "Graham Campbell", 53 | "email": "graham@alt-three.com" 54 | } 55 | ], 56 | "description": "Helps class loading performance by generating a single PHP file containing all of the autoloaded files for a specific use case", 57 | "keywords": [ 58 | "autoload", 59 | "class", 60 | "preload" 61 | ], 62 | "time": "2015-11-09 22:51:51" 63 | }, 64 | { 65 | "name": "dnoegel/php-xdg-base-dir", 66 | "version": "0.1", 67 | "source": { 68 | "type": "git", 69 | "url": "https://github.com/dnoegel/php-xdg-base-dir.git", 70 | "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a" 71 | }, 72 | "dist": { 73 | "type": "zip", 74 | "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/265b8593498b997dc2d31e75b89f053b5cc9621a", 75 | "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a", 76 | "shasum": "" 77 | }, 78 | "require": { 79 | "php": ">=5.3.2" 80 | }, 81 | "require-dev": { 82 | "phpunit/phpunit": "@stable" 83 | }, 84 | "type": "project", 85 | "autoload": { 86 | "psr-4": { 87 | "XdgBaseDir\\": "src/" 88 | } 89 | }, 90 | "notification-url": "https://packagist.org/downloads/", 91 | "license": [ 92 | "MIT" 93 | ], 94 | "description": "implementation of xdg base directory specification for php", 95 | "time": "2014-10-24 07:27:01" 96 | }, 97 | { 98 | "name": "doctrine/inflector", 99 | "version": "v1.1.0", 100 | "source": { 101 | "type": "git", 102 | "url": "https://github.com/doctrine/inflector.git", 103 | "reference": "90b2128806bfde671b6952ab8bea493942c1fdae" 104 | }, 105 | "dist": { 106 | "type": "zip", 107 | "url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae", 108 | "reference": "90b2128806bfde671b6952ab8bea493942c1fdae", 109 | "shasum": "" 110 | }, 111 | "require": { 112 | "php": ">=5.3.2" 113 | }, 114 | "require-dev": { 115 | "phpunit/phpunit": "4.*" 116 | }, 117 | "type": "library", 118 | "extra": { 119 | "branch-alias": { 120 | "dev-master": "1.1.x-dev" 121 | } 122 | }, 123 | "autoload": { 124 | "psr-0": { 125 | "Doctrine\\Common\\Inflector\\": "lib/" 126 | } 127 | }, 128 | "notification-url": "https://packagist.org/downloads/", 129 | "license": [ 130 | "MIT" 131 | ], 132 | "authors": [ 133 | { 134 | "name": "Roman Borschel", 135 | "email": "roman@code-factory.org" 136 | }, 137 | { 138 | "name": "Benjamin Eberlei", 139 | "email": "kontakt@beberlei.de" 140 | }, 141 | { 142 | "name": "Guilherme Blanco", 143 | "email": "guilhermeblanco@gmail.com" 144 | }, 145 | { 146 | "name": "Jonathan Wage", 147 | "email": "jonwage@gmail.com" 148 | }, 149 | { 150 | "name": "Johannes Schmitt", 151 | "email": "schmittjoh@gmail.com" 152 | } 153 | ], 154 | "description": "Common String Manipulations with regard to casing and singular/plural rules.", 155 | "homepage": "http://www.doctrine-project.org", 156 | "keywords": [ 157 | "inflection", 158 | "pluralize", 159 | "singularize", 160 | "string" 161 | ], 162 | "time": "2015-11-06 14:35:42" 163 | }, 164 | { 165 | "name": "doctrine/instantiator", 166 | "version": "1.0.5", 167 | "source": { 168 | "type": "git", 169 | "url": "https://github.com/doctrine/instantiator.git", 170 | "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" 171 | }, 172 | "dist": { 173 | "type": "zip", 174 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", 175 | "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", 176 | "shasum": "" 177 | }, 178 | "require": { 179 | "php": ">=5.3,<8.0-DEV" 180 | }, 181 | "require-dev": { 182 | "athletic/athletic": "~0.1.8", 183 | "ext-pdo": "*", 184 | "ext-phar": "*", 185 | "phpunit/phpunit": "~4.0", 186 | "squizlabs/php_codesniffer": "~2.0" 187 | }, 188 | "type": "library", 189 | "extra": { 190 | "branch-alias": { 191 | "dev-master": "1.0.x-dev" 192 | } 193 | }, 194 | "autoload": { 195 | "psr-4": { 196 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 197 | } 198 | }, 199 | "notification-url": "https://packagist.org/downloads/", 200 | "license": [ 201 | "MIT" 202 | ], 203 | "authors": [ 204 | { 205 | "name": "Marco Pivetta", 206 | "email": "ocramius@gmail.com", 207 | "homepage": "http://ocramius.github.com/" 208 | } 209 | ], 210 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 211 | "homepage": "https://github.com/doctrine/instantiator", 212 | "keywords": [ 213 | "constructor", 214 | "instantiate" 215 | ], 216 | "time": "2015-06-14 21:17:01" 217 | }, 218 | { 219 | "name": "guzzlehttp/psr7", 220 | "version": "1.3.1", 221 | "source": { 222 | "type": "git", 223 | "url": "https://github.com/guzzle/psr7.git", 224 | "reference": "5c6447c9df362e8f8093bda8f5d8873fe5c7f65b" 225 | }, 226 | "dist": { 227 | "type": "zip", 228 | "url": "https://api.github.com/repos/guzzle/psr7/zipball/5c6447c9df362e8f8093bda8f5d8873fe5c7f65b", 229 | "reference": "5c6447c9df362e8f8093bda8f5d8873fe5c7f65b", 230 | "shasum": "" 231 | }, 232 | "require": { 233 | "php": ">=5.4.0", 234 | "psr/http-message": "~1.0" 235 | }, 236 | "provide": { 237 | "psr/http-message-implementation": "1.0" 238 | }, 239 | "require-dev": { 240 | "phpunit/phpunit": "~4.0" 241 | }, 242 | "type": "library", 243 | "extra": { 244 | "branch-alias": { 245 | "dev-master": "1.4-dev" 246 | } 247 | }, 248 | "autoload": { 249 | "psr-4": { 250 | "GuzzleHttp\\Psr7\\": "src/" 251 | }, 252 | "files": [ 253 | "src/functions_include.php" 254 | ] 255 | }, 256 | "notification-url": "https://packagist.org/downloads/", 257 | "license": [ 258 | "MIT" 259 | ], 260 | "authors": [ 261 | { 262 | "name": "Michael Dowling", 263 | "email": "mtdowling@gmail.com", 264 | "homepage": "https://github.com/mtdowling" 265 | } 266 | ], 267 | "description": "PSR-7 message implementation", 268 | "keywords": [ 269 | "http", 270 | "message", 271 | "stream", 272 | "uri" 273 | ], 274 | "time": "2016-06-24 23:00:38" 275 | }, 276 | { 277 | "name": "intervention/image", 278 | "version": "2.3.8", 279 | "source": { 280 | "type": "git", 281 | "url": "https://github.com/Intervention/image.git", 282 | "reference": "4064a980324f6c3bfa2bd981dfb247afa705ec3c" 283 | }, 284 | "dist": { 285 | "type": "zip", 286 | "url": "https://api.github.com/repos/Intervention/image/zipball/4064a980324f6c3bfa2bd981dfb247afa705ec3c", 287 | "reference": "4064a980324f6c3bfa2bd981dfb247afa705ec3c", 288 | "shasum": "" 289 | }, 290 | "require": { 291 | "ext-fileinfo": "*", 292 | "guzzlehttp/psr7": "~1.1", 293 | "php": ">=5.4.0" 294 | }, 295 | "require-dev": { 296 | "mockery/mockery": "~0.9.2", 297 | "phpunit/phpunit": "3.*" 298 | }, 299 | "suggest": { 300 | "ext-gd": "to use GD library based image processing.", 301 | "ext-imagick": "to use Imagick based image processing.", 302 | "intervention/imagecache": "Caching extension for the Intervention Image library" 303 | }, 304 | "type": "library", 305 | "extra": { 306 | "branch-alias": { 307 | "dev-master": "2.3-dev" 308 | } 309 | }, 310 | "autoload": { 311 | "psr-4": { 312 | "Intervention\\Image\\": "src/Intervention/Image" 313 | } 314 | }, 315 | "notification-url": "https://packagist.org/downloads/", 316 | "license": [ 317 | "MIT" 318 | ], 319 | "authors": [ 320 | { 321 | "name": "Oliver Vogel", 322 | "email": "oliver@olivervogel.net", 323 | "homepage": "http://olivervogel.net/" 324 | } 325 | ], 326 | "description": "Image handling and manipulation library with support for Laravel integration", 327 | "homepage": "http://image.intervention.io/", 328 | "keywords": [ 329 | "gd", 330 | "image", 331 | "imagick", 332 | "laravel", 333 | "thumbnail", 334 | "watermark" 335 | ], 336 | "time": "2016-09-01 17:04:03" 337 | }, 338 | { 339 | "name": "jakub-onderka/php-console-color", 340 | "version": "0.1", 341 | "source": { 342 | "type": "git", 343 | "url": "https://github.com/JakubOnderka/PHP-Console-Color.git", 344 | "reference": "e0b393dacf7703fc36a4efc3df1435485197e6c1" 345 | }, 346 | "dist": { 347 | "type": "zip", 348 | "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/e0b393dacf7703fc36a4efc3df1435485197e6c1", 349 | "reference": "e0b393dacf7703fc36a4efc3df1435485197e6c1", 350 | "shasum": "" 351 | }, 352 | "require": { 353 | "php": ">=5.3.2" 354 | }, 355 | "require-dev": { 356 | "jakub-onderka/php-code-style": "1.0", 357 | "jakub-onderka/php-parallel-lint": "0.*", 358 | "jakub-onderka/php-var-dump-check": "0.*", 359 | "phpunit/phpunit": "3.7.*", 360 | "squizlabs/php_codesniffer": "1.*" 361 | }, 362 | "type": "library", 363 | "autoload": { 364 | "psr-0": { 365 | "JakubOnderka\\PhpConsoleColor": "src/" 366 | } 367 | }, 368 | "notification-url": "https://packagist.org/downloads/", 369 | "license": [ 370 | "BSD-2-Clause" 371 | ], 372 | "authors": [ 373 | { 374 | "name": "Jakub Onderka", 375 | "email": "jakub.onderka@gmail.com", 376 | "homepage": "http://www.acci.cz" 377 | } 378 | ], 379 | "time": "2014-04-08 15:00:19" 380 | }, 381 | { 382 | "name": "jakub-onderka/php-console-highlighter", 383 | "version": "v0.3.2", 384 | "source": { 385 | "type": "git", 386 | "url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git", 387 | "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5" 388 | }, 389 | "dist": { 390 | "type": "zip", 391 | "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/7daa75df45242c8d5b75a22c00a201e7954e4fb5", 392 | "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5", 393 | "shasum": "" 394 | }, 395 | "require": { 396 | "jakub-onderka/php-console-color": "~0.1", 397 | "php": ">=5.3.0" 398 | }, 399 | "require-dev": { 400 | "jakub-onderka/php-code-style": "~1.0", 401 | "jakub-onderka/php-parallel-lint": "~0.5", 402 | "jakub-onderka/php-var-dump-check": "~0.1", 403 | "phpunit/phpunit": "~4.0", 404 | "squizlabs/php_codesniffer": "~1.5" 405 | }, 406 | "type": "library", 407 | "autoload": { 408 | "psr-0": { 409 | "JakubOnderka\\PhpConsoleHighlighter": "src/" 410 | } 411 | }, 412 | "notification-url": "https://packagist.org/downloads/", 413 | "license": [ 414 | "MIT" 415 | ], 416 | "authors": [ 417 | { 418 | "name": "Jakub Onderka", 419 | "email": "acci@acci.cz", 420 | "homepage": "http://www.acci.cz/" 421 | } 422 | ], 423 | "time": "2015-04-20 18:58:01" 424 | }, 425 | { 426 | "name": "jeremeamia/SuperClosure", 427 | "version": "2.2.0", 428 | "source": { 429 | "type": "git", 430 | "url": "https://github.com/jeremeamia/super_closure.git", 431 | "reference": "29a88be2a4846d27c1613aed0c9071dfad7b5938" 432 | }, 433 | "dist": { 434 | "type": "zip", 435 | "url": "https://api.github.com/repos/jeremeamia/super_closure/zipball/29a88be2a4846d27c1613aed0c9071dfad7b5938", 436 | "reference": "29a88be2a4846d27c1613aed0c9071dfad7b5938", 437 | "shasum": "" 438 | }, 439 | "require": { 440 | "nikic/php-parser": "^1.2|^2.0", 441 | "php": ">=5.4", 442 | "symfony/polyfill-php56": "^1.0" 443 | }, 444 | "require-dev": { 445 | "phpunit/phpunit": "^4.0|^5.0" 446 | }, 447 | "type": "library", 448 | "extra": { 449 | "branch-alias": { 450 | "dev-master": "2.2-dev" 451 | } 452 | }, 453 | "autoload": { 454 | "psr-4": { 455 | "SuperClosure\\": "src/" 456 | } 457 | }, 458 | "notification-url": "https://packagist.org/downloads/", 459 | "license": [ 460 | "MIT" 461 | ], 462 | "authors": [ 463 | { 464 | "name": "Jeremy Lindblom", 465 | "email": "jeremeamia@gmail.com", 466 | "homepage": "https://github.com/jeremeamia", 467 | "role": "Developer" 468 | } 469 | ], 470 | "description": "Serialize Closure objects, including their context and binding", 471 | "homepage": "https://github.com/jeremeamia/super_closure", 472 | "keywords": [ 473 | "closure", 474 | "function", 475 | "lambda", 476 | "parser", 477 | "serializable", 478 | "serialize", 479 | "tokenizer" 480 | ], 481 | "time": "2015-12-05 17:17:57" 482 | }, 483 | { 484 | "name": "laravel/framework", 485 | "version": "v5.3.8", 486 | "source": { 487 | "type": "git", 488 | "url": "https://github.com/laravel/framework.git", 489 | "reference": "99c74afc0b99e1af1984cb55dc242ab28a0e496b" 490 | }, 491 | "dist": { 492 | "type": "zip", 493 | "url": "https://api.github.com/repos/laravel/framework/zipball/99c74afc0b99e1af1984cb55dc242ab28a0e496b", 494 | "reference": "99c74afc0b99e1af1984cb55dc242ab28a0e496b", 495 | "shasum": "" 496 | }, 497 | "require": { 498 | "classpreloader/classpreloader": "~3.0", 499 | "doctrine/inflector": "~1.0", 500 | "ext-mbstring": "*", 501 | "ext-openssl": "*", 502 | "jeremeamia/superclosure": "~2.2", 503 | "league/flysystem": "~1.0", 504 | "monolog/monolog": "~1.11", 505 | "mtdowling/cron-expression": "~1.0", 506 | "nesbot/carbon": "~1.20", 507 | "paragonie/random_compat": "~1.4|~2.0", 508 | "php": ">=5.6.4", 509 | "psy/psysh": "0.7.*", 510 | "ramsey/uuid": "~3.0", 511 | "swiftmailer/swiftmailer": "~5.1", 512 | "symfony/console": "3.1.*", 513 | "symfony/debug": "3.1.*", 514 | "symfony/finder": "3.1.*", 515 | "symfony/http-foundation": "3.1.*", 516 | "symfony/http-kernel": "3.1.*", 517 | "symfony/process": "3.1.*", 518 | "symfony/routing": "3.1.*", 519 | "symfony/translation": "3.1.*", 520 | "symfony/var-dumper": "3.1.*", 521 | "vlucas/phpdotenv": "~2.2" 522 | }, 523 | "replace": { 524 | "illuminate/auth": "self.version", 525 | "illuminate/broadcasting": "self.version", 526 | "illuminate/bus": "self.version", 527 | "illuminate/cache": "self.version", 528 | "illuminate/config": "self.version", 529 | "illuminate/console": "self.version", 530 | "illuminate/container": "self.version", 531 | "illuminate/contracts": "self.version", 532 | "illuminate/cookie": "self.version", 533 | "illuminate/database": "self.version", 534 | "illuminate/encryption": "self.version", 535 | "illuminate/events": "self.version", 536 | "illuminate/exception": "self.version", 537 | "illuminate/filesystem": "self.version", 538 | "illuminate/hashing": "self.version", 539 | "illuminate/http": "self.version", 540 | "illuminate/log": "self.version", 541 | "illuminate/mail": "self.version", 542 | "illuminate/pagination": "self.version", 543 | "illuminate/pipeline": "self.version", 544 | "illuminate/queue": "self.version", 545 | "illuminate/redis": "self.version", 546 | "illuminate/routing": "self.version", 547 | "illuminate/session": "self.version", 548 | "illuminate/support": "self.version", 549 | "illuminate/translation": "self.version", 550 | "illuminate/validation": "self.version", 551 | "illuminate/view": "self.version", 552 | "tightenco/collect": "self.version" 553 | }, 554 | "require-dev": { 555 | "aws/aws-sdk-php": "~3.0", 556 | "mockery/mockery": "~0.9.4", 557 | "pda/pheanstalk": "~3.0", 558 | "phpunit/phpunit": "~5.4", 559 | "predis/predis": "~1.0", 560 | "symfony/css-selector": "3.1.*", 561 | "symfony/dom-crawler": "3.1.*" 562 | }, 563 | "suggest": { 564 | "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).", 565 | "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.4).", 566 | "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).", 567 | "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~5.3|~6.0).", 568 | "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).", 569 | "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).", 570 | "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).", 571 | "predis/predis": "Required to use the redis cache and queue drivers (~1.0).", 572 | "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~2.0).", 573 | "symfony/css-selector": "Required to use some of the crawler integration testing tools (3.1.*).", 574 | "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (3.1.*).", 575 | "symfony/psr-http-message-bridge": "Required to psr7 bridging features (0.2.*)." 576 | }, 577 | "type": "library", 578 | "extra": { 579 | "branch-alias": { 580 | "dev-master": "5.3-dev" 581 | } 582 | }, 583 | "autoload": { 584 | "files": [ 585 | "src/Illuminate/Foundation/helpers.php", 586 | "src/Illuminate/Support/helpers.php" 587 | ], 588 | "psr-4": { 589 | "Illuminate\\": "src/Illuminate/" 590 | } 591 | }, 592 | "notification-url": "https://packagist.org/downloads/", 593 | "license": [ 594 | "MIT" 595 | ], 596 | "authors": [ 597 | { 598 | "name": "Taylor Otwell", 599 | "email": "taylor@laravel.com" 600 | } 601 | ], 602 | "description": "The Laravel Framework.", 603 | "homepage": "https://laravel.com", 604 | "keywords": [ 605 | "framework", 606 | "laravel" 607 | ], 608 | "time": "2016-09-09 16:33:59" 609 | }, 610 | { 611 | "name": "league/flysystem", 612 | "version": "1.0.27", 613 | "source": { 614 | "type": "git", 615 | "url": "https://github.com/thephpleague/flysystem.git", 616 | "reference": "50e2045ed70a7e75a5e30bc3662904f3b67af8a9" 617 | }, 618 | "dist": { 619 | "type": "zip", 620 | "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/50e2045ed70a7e75a5e30bc3662904f3b67af8a9", 621 | "reference": "50e2045ed70a7e75a5e30bc3662904f3b67af8a9", 622 | "shasum": "" 623 | }, 624 | "require": { 625 | "php": ">=5.4.0" 626 | }, 627 | "conflict": { 628 | "league/flysystem-sftp": "<1.0.6" 629 | }, 630 | "require-dev": { 631 | "ext-fileinfo": "*", 632 | "mockery/mockery": "~0.9", 633 | "phpspec/phpspec": "^2.2", 634 | "phpunit/phpunit": "~4.8" 635 | }, 636 | "suggest": { 637 | "ext-fileinfo": "Required for MimeType", 638 | "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", 639 | "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", 640 | "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", 641 | "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", 642 | "league/flysystem-copy": "Allows you to use Copy.com storage", 643 | "league/flysystem-dropbox": "Allows you to use Dropbox storage", 644 | "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", 645 | "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", 646 | "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", 647 | "league/flysystem-webdav": "Allows you to use WebDAV storage", 648 | "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter" 649 | }, 650 | "type": "library", 651 | "extra": { 652 | "branch-alias": { 653 | "dev-master": "1.1-dev" 654 | } 655 | }, 656 | "autoload": { 657 | "psr-4": { 658 | "League\\Flysystem\\": "src/" 659 | } 660 | }, 661 | "notification-url": "https://packagist.org/downloads/", 662 | "license": [ 663 | "MIT" 664 | ], 665 | "authors": [ 666 | { 667 | "name": "Frank de Jonge", 668 | "email": "info@frenky.net" 669 | } 670 | ], 671 | "description": "Filesystem abstraction: Many filesystems, one API.", 672 | "keywords": [ 673 | "Cloud Files", 674 | "WebDAV", 675 | "abstraction", 676 | "aws", 677 | "cloud", 678 | "copy.com", 679 | "dropbox", 680 | "file systems", 681 | "files", 682 | "filesystem", 683 | "filesystems", 684 | "ftp", 685 | "rackspace", 686 | "remote", 687 | "s3", 688 | "sftp", 689 | "storage" 690 | ], 691 | "time": "2016-08-10 08:55:11" 692 | }, 693 | { 694 | "name": "league/glide", 695 | "version": "1.1.0", 696 | "source": { 697 | "type": "git", 698 | "url": "https://github.com/thephpleague/glide.git", 699 | "reference": "5d71f2fb030907fdd9552b4952d1ecdc1804702e" 700 | }, 701 | "dist": { 702 | "type": "zip", 703 | "url": "https://api.github.com/repos/thephpleague/glide/zipball/5d71f2fb030907fdd9552b4952d1ecdc1804702e", 704 | "reference": "5d71f2fb030907fdd9552b4952d1ecdc1804702e", 705 | "shasum": "" 706 | }, 707 | "require": { 708 | "intervention/image": "^2.1", 709 | "league/flysystem": "^1.0", 710 | "php": "^5.4 | ^7.0", 711 | "psr/http-message": "^1.0" 712 | }, 713 | "require-dev": { 714 | "mockery/mockery": "~0.9", 715 | "phpunit/php-token-stream": "^1.4", 716 | "phpunit/phpunit": "~4.4" 717 | }, 718 | "type": "library", 719 | "extra": { 720 | "branch-alias": { 721 | "dev-master": "1.1-dev" 722 | } 723 | }, 724 | "autoload": { 725 | "psr-4": { 726 | "League\\Glide\\": "src/" 727 | } 728 | }, 729 | "notification-url": "https://packagist.org/downloads/", 730 | "license": [ 731 | "MIT" 732 | ], 733 | "authors": [ 734 | { 735 | "name": "Jonathan Reinink", 736 | "email": "jonathan@reinink.ca", 737 | "homepage": "http://reinink.ca" 738 | } 739 | ], 740 | "description": "Wonderfully easy on-demand image manipulation library with an HTTP based API.", 741 | "homepage": "http://glide.thephpleague.com", 742 | "keywords": [ 743 | "ImageMagick", 744 | "editing", 745 | "gd", 746 | "image", 747 | "imagick", 748 | "league", 749 | "manipulation", 750 | "processing" 751 | ], 752 | "time": "2016-08-19 20:49:36" 753 | }, 754 | { 755 | "name": "league/glide-laravel", 756 | "version": "1.0.0", 757 | "source": { 758 | "type": "git", 759 | "url": "https://github.com/thephpleague/glide-laravel.git", 760 | "reference": "b525e33e32940f3b047d6ca357131aba0e973e72" 761 | }, 762 | "dist": { 763 | "type": "zip", 764 | "url": "https://api.github.com/repos/thephpleague/glide-laravel/zipball/b525e33e32940f3b047d6ca357131aba0e973e72", 765 | "reference": "b525e33e32940f3b047d6ca357131aba0e973e72", 766 | "shasum": "" 767 | }, 768 | "require": { 769 | "league/glide-symfony": "^1.0" 770 | }, 771 | "require-dev": { 772 | "mockery/mockery": "^0.9", 773 | "phpunit/phpunit": "^4.0" 774 | }, 775 | "type": "library", 776 | "autoload": { 777 | "psr-4": { 778 | "League\\Glide\\": "src/" 779 | } 780 | }, 781 | "notification-url": "https://packagist.org/downloads/", 782 | "license": [ 783 | "MIT" 784 | ], 785 | "authors": [ 786 | { 787 | "name": "Jonathan Reinink", 788 | "email": "jonathan@reinink.ca", 789 | "homepage": "http://reinink.ca" 790 | } 791 | ], 792 | "description": "Glide adapter for Laravel", 793 | "homepage": "http://glide.thephpleague.com", 794 | "time": "2015-12-26 15:40:35" 795 | }, 796 | { 797 | "name": "league/glide-symfony", 798 | "version": "1.0.2", 799 | "source": { 800 | "type": "git", 801 | "url": "https://github.com/thephpleague/glide-symfony.git", 802 | "reference": "2dc271c959aa86c060261e2a93c493a54f98efbb" 803 | }, 804 | "dist": { 805 | "type": "zip", 806 | "url": "https://api.github.com/repos/thephpleague/glide-symfony/zipball/2dc271c959aa86c060261e2a93c493a54f98efbb", 807 | "reference": "2dc271c959aa86c060261e2a93c493a54f98efbb", 808 | "shasum": "" 809 | }, 810 | "require": { 811 | "league/glide": "^1.0", 812 | "symfony/http-foundation": "^2.3|^3.0" 813 | }, 814 | "require-dev": { 815 | "mockery/mockery": "^0.9", 816 | "phpunit/phpunit": "^4.0" 817 | }, 818 | "type": "library", 819 | "autoload": { 820 | "psr-4": { 821 | "League\\Glide\\": "src/" 822 | } 823 | }, 824 | "notification-url": "https://packagist.org/downloads/", 825 | "license": [ 826 | "MIT" 827 | ], 828 | "authors": [ 829 | { 830 | "name": "Jonathan Reinink", 831 | "email": "jonathan@reinink.ca", 832 | "homepage": "http://reinink.ca" 833 | } 834 | ], 835 | "description": "Glide adapter for Symfony", 836 | "homepage": "http://glide.thephpleague.com", 837 | "time": "2016-07-01 16:05:08" 838 | }, 839 | { 840 | "name": "monolog/monolog", 841 | "version": "1.21.0", 842 | "source": { 843 | "type": "git", 844 | "url": "https://github.com/Seldaek/monolog.git", 845 | "reference": "f42fbdfd53e306bda545845e4dbfd3e72edb4952" 846 | }, 847 | "dist": { 848 | "type": "zip", 849 | "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f42fbdfd53e306bda545845e4dbfd3e72edb4952", 850 | "reference": "f42fbdfd53e306bda545845e4dbfd3e72edb4952", 851 | "shasum": "" 852 | }, 853 | "require": { 854 | "php": ">=5.3.0", 855 | "psr/log": "~1.0" 856 | }, 857 | "provide": { 858 | "psr/log-implementation": "1.0.0" 859 | }, 860 | "require-dev": { 861 | "aws/aws-sdk-php": "^2.4.9", 862 | "doctrine/couchdb": "~1.0@dev", 863 | "graylog2/gelf-php": "~1.0", 864 | "jakub-onderka/php-parallel-lint": "0.9", 865 | "php-amqplib/php-amqplib": "~2.4", 866 | "php-console/php-console": "^3.1.3", 867 | "phpunit/phpunit": "~4.5", 868 | "phpunit/phpunit-mock-objects": "2.3.0", 869 | "ruflin/elastica": ">=0.90 <3.0", 870 | "sentry/sentry": "^0.13", 871 | "swiftmailer/swiftmailer": "~5.3" 872 | }, 873 | "suggest": { 874 | "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", 875 | "doctrine/couchdb": "Allow sending log messages to a CouchDB server", 876 | "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", 877 | "ext-mongo": "Allow sending log messages to a MongoDB server", 878 | "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", 879 | "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", 880 | "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", 881 | "php-console/php-console": "Allow sending log messages to Google Chrome", 882 | "rollbar/rollbar": "Allow sending log messages to Rollbar", 883 | "ruflin/elastica": "Allow sending log messages to an Elastic Search server", 884 | "sentry/sentry": "Allow sending log messages to a Sentry server" 885 | }, 886 | "type": "library", 887 | "extra": { 888 | "branch-alias": { 889 | "dev-master": "2.0.x-dev" 890 | } 891 | }, 892 | "autoload": { 893 | "psr-4": { 894 | "Monolog\\": "src/Monolog" 895 | } 896 | }, 897 | "notification-url": "https://packagist.org/downloads/", 898 | "license": [ 899 | "MIT" 900 | ], 901 | "authors": [ 902 | { 903 | "name": "Jordi Boggiano", 904 | "email": "j.boggiano@seld.be", 905 | "homepage": "http://seld.be" 906 | } 907 | ], 908 | "description": "Sends your logs to files, sockets, inboxes, databases and various web services", 909 | "homepage": "http://github.com/Seldaek/monolog", 910 | "keywords": [ 911 | "log", 912 | "logging", 913 | "psr-3" 914 | ], 915 | "time": "2016-07-29 03:23:52" 916 | }, 917 | { 918 | "name": "mtdowling/cron-expression", 919 | "version": "v1.1.0", 920 | "source": { 921 | "type": "git", 922 | "url": "https://github.com/mtdowling/cron-expression.git", 923 | "reference": "c9ee7886f5a12902b225a1a12f36bb45f9ab89e5" 924 | }, 925 | "dist": { 926 | "type": "zip", 927 | "url": "https://api.github.com/repos/mtdowling/cron-expression/zipball/c9ee7886f5a12902b225a1a12f36bb45f9ab89e5", 928 | "reference": "c9ee7886f5a12902b225a1a12f36bb45f9ab89e5", 929 | "shasum": "" 930 | }, 931 | "require": { 932 | "php": ">=5.3.2" 933 | }, 934 | "require-dev": { 935 | "phpunit/phpunit": "~4.0|~5.0" 936 | }, 937 | "type": "library", 938 | "autoload": { 939 | "psr-0": { 940 | "Cron": "src/" 941 | } 942 | }, 943 | "notification-url": "https://packagist.org/downloads/", 944 | "license": [ 945 | "MIT" 946 | ], 947 | "authors": [ 948 | { 949 | "name": "Michael Dowling", 950 | "email": "mtdowling@gmail.com", 951 | "homepage": "https://github.com/mtdowling" 952 | } 953 | ], 954 | "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", 955 | "keywords": [ 956 | "cron", 957 | "schedule" 958 | ], 959 | "time": "2016-01-26 21:23:30" 960 | }, 961 | { 962 | "name": "myclabs/deep-copy", 963 | "version": "1.5.2", 964 | "source": { 965 | "type": "git", 966 | "url": "https://github.com/myclabs/DeepCopy.git", 967 | "reference": "da8529775f14f4fdae33f916eb0cf65f6afbddbc" 968 | }, 969 | "dist": { 970 | "type": "zip", 971 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/da8529775f14f4fdae33f916eb0cf65f6afbddbc", 972 | "reference": "da8529775f14f4fdae33f916eb0cf65f6afbddbc", 973 | "shasum": "" 974 | }, 975 | "require": { 976 | "php": ">=5.4.0" 977 | }, 978 | "require-dev": { 979 | "doctrine/collections": "1.*", 980 | "phpunit/phpunit": "~4.1" 981 | }, 982 | "type": "library", 983 | "autoload": { 984 | "psr-4": { 985 | "DeepCopy\\": "src/DeepCopy/" 986 | } 987 | }, 988 | "notification-url": "https://packagist.org/downloads/", 989 | "license": [ 990 | "MIT" 991 | ], 992 | "description": "Create deep copies (clones) of your objects", 993 | "homepage": "https://github.com/myclabs/DeepCopy", 994 | "keywords": [ 995 | "clone", 996 | "copy", 997 | "duplicate", 998 | "object", 999 | "object graph" 1000 | ], 1001 | "time": "2016-09-06 16:07:05" 1002 | }, 1003 | { 1004 | "name": "nesbot/carbon", 1005 | "version": "1.21.0", 1006 | "source": { 1007 | "type": "git", 1008 | "url": "https://github.com/briannesbitt/Carbon.git", 1009 | "reference": "7b08ec6f75791e130012f206e3f7b0e76e18e3d7" 1010 | }, 1011 | "dist": { 1012 | "type": "zip", 1013 | "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/7b08ec6f75791e130012f206e3f7b0e76e18e3d7", 1014 | "reference": "7b08ec6f75791e130012f206e3f7b0e76e18e3d7", 1015 | "shasum": "" 1016 | }, 1017 | "require": { 1018 | "php": ">=5.3.0", 1019 | "symfony/translation": "~2.6|~3.0" 1020 | }, 1021 | "require-dev": { 1022 | "phpunit/phpunit": "~4.0|~5.0" 1023 | }, 1024 | "type": "library", 1025 | "autoload": { 1026 | "psr-4": { 1027 | "Carbon\\": "src/Carbon/" 1028 | } 1029 | }, 1030 | "notification-url": "https://packagist.org/downloads/", 1031 | "license": [ 1032 | "MIT" 1033 | ], 1034 | "authors": [ 1035 | { 1036 | "name": "Brian Nesbitt", 1037 | "email": "brian@nesbot.com", 1038 | "homepage": "http://nesbot.com" 1039 | } 1040 | ], 1041 | "description": "A simple API extension for DateTime.", 1042 | "homepage": "http://carbon.nesbot.com", 1043 | "keywords": [ 1044 | "date", 1045 | "datetime", 1046 | "time" 1047 | ], 1048 | "time": "2015-11-04 20:07:17" 1049 | }, 1050 | { 1051 | "name": "nikic/php-parser", 1052 | "version": "v2.1.0", 1053 | "source": { 1054 | "type": "git", 1055 | "url": "https://github.com/nikic/PHP-Parser.git", 1056 | "reference": "47b254ea51f1d6d5dc04b9b299e88346bf2369e3" 1057 | }, 1058 | "dist": { 1059 | "type": "zip", 1060 | "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/47b254ea51f1d6d5dc04b9b299e88346bf2369e3", 1061 | "reference": "47b254ea51f1d6d5dc04b9b299e88346bf2369e3", 1062 | "shasum": "" 1063 | }, 1064 | "require": { 1065 | "ext-tokenizer": "*", 1066 | "php": ">=5.4" 1067 | }, 1068 | "require-dev": { 1069 | "phpunit/phpunit": "~4.0" 1070 | }, 1071 | "bin": [ 1072 | "bin/php-parse" 1073 | ], 1074 | "type": "library", 1075 | "extra": { 1076 | "branch-alias": { 1077 | "dev-master": "2.1-dev" 1078 | } 1079 | }, 1080 | "autoload": { 1081 | "psr-4": { 1082 | "PhpParser\\": "lib/PhpParser" 1083 | } 1084 | }, 1085 | "notification-url": "https://packagist.org/downloads/", 1086 | "license": [ 1087 | "BSD-3-Clause" 1088 | ], 1089 | "authors": [ 1090 | { 1091 | "name": "Nikita Popov" 1092 | } 1093 | ], 1094 | "description": "A PHP parser written in PHP", 1095 | "keywords": [ 1096 | "parser", 1097 | "php" 1098 | ], 1099 | "time": "2016-04-19 13:41:41" 1100 | }, 1101 | { 1102 | "name": "paragonie/random_compat", 1103 | "version": "v2.0.2", 1104 | "source": { 1105 | "type": "git", 1106 | "url": "https://github.com/paragonie/random_compat.git", 1107 | "reference": "088c04e2f261c33bed6ca5245491cfca69195ccf" 1108 | }, 1109 | "dist": { 1110 | "type": "zip", 1111 | "url": "https://api.github.com/repos/paragonie/random_compat/zipball/088c04e2f261c33bed6ca5245491cfca69195ccf", 1112 | "reference": "088c04e2f261c33bed6ca5245491cfca69195ccf", 1113 | "shasum": "" 1114 | }, 1115 | "require": { 1116 | "php": ">=5.2.0" 1117 | }, 1118 | "require-dev": { 1119 | "phpunit/phpunit": "4.*|5.*" 1120 | }, 1121 | "suggest": { 1122 | "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." 1123 | }, 1124 | "type": "library", 1125 | "autoload": { 1126 | "files": [ 1127 | "lib/random.php" 1128 | ] 1129 | }, 1130 | "notification-url": "https://packagist.org/downloads/", 1131 | "license": [ 1132 | "MIT" 1133 | ], 1134 | "authors": [ 1135 | { 1136 | "name": "Paragon Initiative Enterprises", 1137 | "email": "security@paragonie.com", 1138 | "homepage": "https://paragonie.com" 1139 | } 1140 | ], 1141 | "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", 1142 | "keywords": [ 1143 | "csprng", 1144 | "pseudorandom", 1145 | "random" 1146 | ], 1147 | "time": "2016-04-03 06:00:07" 1148 | }, 1149 | { 1150 | "name": "phpdocumentor/reflection-common", 1151 | "version": "1.0", 1152 | "source": { 1153 | "type": "git", 1154 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 1155 | "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" 1156 | }, 1157 | "dist": { 1158 | "type": "zip", 1159 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", 1160 | "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", 1161 | "shasum": "" 1162 | }, 1163 | "require": { 1164 | "php": ">=5.5" 1165 | }, 1166 | "require-dev": { 1167 | "phpunit/phpunit": "^4.6" 1168 | }, 1169 | "type": "library", 1170 | "extra": { 1171 | "branch-alias": { 1172 | "dev-master": "1.0.x-dev" 1173 | } 1174 | }, 1175 | "autoload": { 1176 | "psr-4": { 1177 | "phpDocumentor\\Reflection\\": [ 1178 | "src" 1179 | ] 1180 | } 1181 | }, 1182 | "notification-url": "https://packagist.org/downloads/", 1183 | "license": [ 1184 | "MIT" 1185 | ], 1186 | "authors": [ 1187 | { 1188 | "name": "Jaap van Otterdijk", 1189 | "email": "opensource@ijaap.nl" 1190 | } 1191 | ], 1192 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 1193 | "homepage": "http://www.phpdoc.org", 1194 | "keywords": [ 1195 | "FQSEN", 1196 | "phpDocumentor", 1197 | "phpdoc", 1198 | "reflection", 1199 | "static analysis" 1200 | ], 1201 | "time": "2015-12-27 11:43:31" 1202 | }, 1203 | { 1204 | "name": "phpdocumentor/reflection-docblock", 1205 | "version": "3.1.0", 1206 | "source": { 1207 | "type": "git", 1208 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 1209 | "reference": "9270140b940ff02e58ec577c237274e92cd40cdd" 1210 | }, 1211 | "dist": { 1212 | "type": "zip", 1213 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/9270140b940ff02e58ec577c237274e92cd40cdd", 1214 | "reference": "9270140b940ff02e58ec577c237274e92cd40cdd", 1215 | "shasum": "" 1216 | }, 1217 | "require": { 1218 | "php": ">=5.5", 1219 | "phpdocumentor/reflection-common": "^1.0@dev", 1220 | "phpdocumentor/type-resolver": "^0.2.0", 1221 | "webmozart/assert": "^1.0" 1222 | }, 1223 | "require-dev": { 1224 | "mockery/mockery": "^0.9.4", 1225 | "phpunit/phpunit": "^4.4" 1226 | }, 1227 | "type": "library", 1228 | "autoload": { 1229 | "psr-4": { 1230 | "phpDocumentor\\Reflection\\": [ 1231 | "src/" 1232 | ] 1233 | } 1234 | }, 1235 | "notification-url": "https://packagist.org/downloads/", 1236 | "license": [ 1237 | "MIT" 1238 | ], 1239 | "authors": [ 1240 | { 1241 | "name": "Mike van Riel", 1242 | "email": "me@mikevanriel.com" 1243 | } 1244 | ], 1245 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 1246 | "time": "2016-06-10 09:48:41" 1247 | }, 1248 | { 1249 | "name": "phpdocumentor/type-resolver", 1250 | "version": "0.2", 1251 | "source": { 1252 | "type": "git", 1253 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 1254 | "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443" 1255 | }, 1256 | "dist": { 1257 | "type": "zip", 1258 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/b39c7a5b194f9ed7bd0dd345c751007a41862443", 1259 | "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443", 1260 | "shasum": "" 1261 | }, 1262 | "require": { 1263 | "php": ">=5.5", 1264 | "phpdocumentor/reflection-common": "^1.0" 1265 | }, 1266 | "require-dev": { 1267 | "mockery/mockery": "^0.9.4", 1268 | "phpunit/phpunit": "^5.2||^4.8.24" 1269 | }, 1270 | "type": "library", 1271 | "extra": { 1272 | "branch-alias": { 1273 | "dev-master": "1.0.x-dev" 1274 | } 1275 | }, 1276 | "autoload": { 1277 | "psr-4": { 1278 | "phpDocumentor\\Reflection\\": [ 1279 | "src/" 1280 | ] 1281 | } 1282 | }, 1283 | "notification-url": "https://packagist.org/downloads/", 1284 | "license": [ 1285 | "MIT" 1286 | ], 1287 | "authors": [ 1288 | { 1289 | "name": "Mike van Riel", 1290 | "email": "me@mikevanriel.com" 1291 | } 1292 | ], 1293 | "time": "2016-06-10 07:14:17" 1294 | }, 1295 | { 1296 | "name": "phpspec/prophecy", 1297 | "version": "v1.6.1", 1298 | "source": { 1299 | "type": "git", 1300 | "url": "https://github.com/phpspec/prophecy.git", 1301 | "reference": "58a8137754bc24b25740d4281399a4a3596058e0" 1302 | }, 1303 | "dist": { 1304 | "type": "zip", 1305 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/58a8137754bc24b25740d4281399a4a3596058e0", 1306 | "reference": "58a8137754bc24b25740d4281399a4a3596058e0", 1307 | "shasum": "" 1308 | }, 1309 | "require": { 1310 | "doctrine/instantiator": "^1.0.2", 1311 | "php": "^5.3|^7.0", 1312 | "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", 1313 | "sebastian/comparator": "^1.1", 1314 | "sebastian/recursion-context": "^1.0" 1315 | }, 1316 | "require-dev": { 1317 | "phpspec/phpspec": "^2.0" 1318 | }, 1319 | "type": "library", 1320 | "extra": { 1321 | "branch-alias": { 1322 | "dev-master": "1.6.x-dev" 1323 | } 1324 | }, 1325 | "autoload": { 1326 | "psr-0": { 1327 | "Prophecy\\": "src/" 1328 | } 1329 | }, 1330 | "notification-url": "https://packagist.org/downloads/", 1331 | "license": [ 1332 | "MIT" 1333 | ], 1334 | "authors": [ 1335 | { 1336 | "name": "Konstantin Kudryashov", 1337 | "email": "ever.zet@gmail.com", 1338 | "homepage": "http://everzet.com" 1339 | }, 1340 | { 1341 | "name": "Marcello Duarte", 1342 | "email": "marcello.duarte@gmail.com" 1343 | } 1344 | ], 1345 | "description": "Highly opinionated mocking framework for PHP 5.3+", 1346 | "homepage": "https://github.com/phpspec/prophecy", 1347 | "keywords": [ 1348 | "Double", 1349 | "Dummy", 1350 | "fake", 1351 | "mock", 1352 | "spy", 1353 | "stub" 1354 | ], 1355 | "time": "2016-06-07 08:13:47" 1356 | }, 1357 | { 1358 | "name": "phpunit/php-code-coverage", 1359 | "version": "4.0.1", 1360 | "source": { 1361 | "type": "git", 1362 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 1363 | "reference": "5f3f7e736d6319d5f1fc402aff8b026da26709a3" 1364 | }, 1365 | "dist": { 1366 | "type": "zip", 1367 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/5f3f7e736d6319d5f1fc402aff8b026da26709a3", 1368 | "reference": "5f3f7e736d6319d5f1fc402aff8b026da26709a3", 1369 | "shasum": "" 1370 | }, 1371 | "require": { 1372 | "php": "^5.6 || ^7.0", 1373 | "phpunit/php-file-iterator": "~1.3", 1374 | "phpunit/php-text-template": "~1.2", 1375 | "phpunit/php-token-stream": "^1.4.2", 1376 | "sebastian/code-unit-reverse-lookup": "~1.0", 1377 | "sebastian/environment": "^1.3.2 || ^2.0", 1378 | "sebastian/version": "~1.0|~2.0" 1379 | }, 1380 | "require-dev": { 1381 | "ext-xdebug": ">=2.1.4", 1382 | "phpunit/phpunit": "^5.4" 1383 | }, 1384 | "suggest": { 1385 | "ext-dom": "*", 1386 | "ext-xdebug": ">=2.4.0", 1387 | "ext-xmlwriter": "*" 1388 | }, 1389 | "type": "library", 1390 | "extra": { 1391 | "branch-alias": { 1392 | "dev-master": "4.0.x-dev" 1393 | } 1394 | }, 1395 | "autoload": { 1396 | "classmap": [ 1397 | "src/" 1398 | ] 1399 | }, 1400 | "notification-url": "https://packagist.org/downloads/", 1401 | "license": [ 1402 | "BSD-3-Clause" 1403 | ], 1404 | "authors": [ 1405 | { 1406 | "name": "Sebastian Bergmann", 1407 | "email": "sb@sebastian-bergmann.de", 1408 | "role": "lead" 1409 | } 1410 | ], 1411 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 1412 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 1413 | "keywords": [ 1414 | "coverage", 1415 | "testing", 1416 | "xunit" 1417 | ], 1418 | "time": "2016-07-26 14:39:29" 1419 | }, 1420 | { 1421 | "name": "phpunit/php-file-iterator", 1422 | "version": "1.4.1", 1423 | "source": { 1424 | "type": "git", 1425 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 1426 | "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0" 1427 | }, 1428 | "dist": { 1429 | "type": "zip", 1430 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0", 1431 | "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0", 1432 | "shasum": "" 1433 | }, 1434 | "require": { 1435 | "php": ">=5.3.3" 1436 | }, 1437 | "type": "library", 1438 | "extra": { 1439 | "branch-alias": { 1440 | "dev-master": "1.4.x-dev" 1441 | } 1442 | }, 1443 | "autoload": { 1444 | "classmap": [ 1445 | "src/" 1446 | ] 1447 | }, 1448 | "notification-url": "https://packagist.org/downloads/", 1449 | "license": [ 1450 | "BSD-3-Clause" 1451 | ], 1452 | "authors": [ 1453 | { 1454 | "name": "Sebastian Bergmann", 1455 | "email": "sb@sebastian-bergmann.de", 1456 | "role": "lead" 1457 | } 1458 | ], 1459 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 1460 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 1461 | "keywords": [ 1462 | "filesystem", 1463 | "iterator" 1464 | ], 1465 | "time": "2015-06-21 13:08:43" 1466 | }, 1467 | { 1468 | "name": "phpunit/php-text-template", 1469 | "version": "1.2.1", 1470 | "source": { 1471 | "type": "git", 1472 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 1473 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" 1474 | }, 1475 | "dist": { 1476 | "type": "zip", 1477 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 1478 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 1479 | "shasum": "" 1480 | }, 1481 | "require": { 1482 | "php": ">=5.3.3" 1483 | }, 1484 | "type": "library", 1485 | "autoload": { 1486 | "classmap": [ 1487 | "src/" 1488 | ] 1489 | }, 1490 | "notification-url": "https://packagist.org/downloads/", 1491 | "license": [ 1492 | "BSD-3-Clause" 1493 | ], 1494 | "authors": [ 1495 | { 1496 | "name": "Sebastian Bergmann", 1497 | "email": "sebastian@phpunit.de", 1498 | "role": "lead" 1499 | } 1500 | ], 1501 | "description": "Simple template engine.", 1502 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 1503 | "keywords": [ 1504 | "template" 1505 | ], 1506 | "time": "2015-06-21 13:50:34" 1507 | }, 1508 | { 1509 | "name": "phpunit/php-timer", 1510 | "version": "1.0.8", 1511 | "source": { 1512 | "type": "git", 1513 | "url": "https://github.com/sebastianbergmann/php-timer.git", 1514 | "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260" 1515 | }, 1516 | "dist": { 1517 | "type": "zip", 1518 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260", 1519 | "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260", 1520 | "shasum": "" 1521 | }, 1522 | "require": { 1523 | "php": ">=5.3.3" 1524 | }, 1525 | "require-dev": { 1526 | "phpunit/phpunit": "~4|~5" 1527 | }, 1528 | "type": "library", 1529 | "autoload": { 1530 | "classmap": [ 1531 | "src/" 1532 | ] 1533 | }, 1534 | "notification-url": "https://packagist.org/downloads/", 1535 | "license": [ 1536 | "BSD-3-Clause" 1537 | ], 1538 | "authors": [ 1539 | { 1540 | "name": "Sebastian Bergmann", 1541 | "email": "sb@sebastian-bergmann.de", 1542 | "role": "lead" 1543 | } 1544 | ], 1545 | "description": "Utility class for timing", 1546 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 1547 | "keywords": [ 1548 | "timer" 1549 | ], 1550 | "time": "2016-05-12 18:03:57" 1551 | }, 1552 | { 1553 | "name": "phpunit/php-token-stream", 1554 | "version": "1.4.8", 1555 | "source": { 1556 | "type": "git", 1557 | "url": "https://github.com/sebastianbergmann/php-token-stream.git", 1558 | "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da" 1559 | }, 1560 | "dist": { 1561 | "type": "zip", 1562 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", 1563 | "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", 1564 | "shasum": "" 1565 | }, 1566 | "require": { 1567 | "ext-tokenizer": "*", 1568 | "php": ">=5.3.3" 1569 | }, 1570 | "require-dev": { 1571 | "phpunit/phpunit": "~4.2" 1572 | }, 1573 | "type": "library", 1574 | "extra": { 1575 | "branch-alias": { 1576 | "dev-master": "1.4-dev" 1577 | } 1578 | }, 1579 | "autoload": { 1580 | "classmap": [ 1581 | "src/" 1582 | ] 1583 | }, 1584 | "notification-url": "https://packagist.org/downloads/", 1585 | "license": [ 1586 | "BSD-3-Clause" 1587 | ], 1588 | "authors": [ 1589 | { 1590 | "name": "Sebastian Bergmann", 1591 | "email": "sebastian@phpunit.de" 1592 | } 1593 | ], 1594 | "description": "Wrapper around PHP's tokenizer extension.", 1595 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/", 1596 | "keywords": [ 1597 | "tokenizer" 1598 | ], 1599 | "time": "2015-09-15 10:49:45" 1600 | }, 1601 | { 1602 | "name": "phpunit/phpunit", 1603 | "version": "5.5.4", 1604 | "source": { 1605 | "type": "git", 1606 | "url": "https://github.com/sebastianbergmann/phpunit.git", 1607 | "reference": "3e6e88e56c912133de6e99b87728cca7ed70c5f5" 1608 | }, 1609 | "dist": { 1610 | "type": "zip", 1611 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3e6e88e56c912133de6e99b87728cca7ed70c5f5", 1612 | "reference": "3e6e88e56c912133de6e99b87728cca7ed70c5f5", 1613 | "shasum": "" 1614 | }, 1615 | "require": { 1616 | "ext-dom": "*", 1617 | "ext-json": "*", 1618 | "ext-pcre": "*", 1619 | "ext-reflection": "*", 1620 | "ext-spl": "*", 1621 | "myclabs/deep-copy": "~1.3", 1622 | "php": "^5.6 || ^7.0", 1623 | "phpspec/prophecy": "^1.3.1", 1624 | "phpunit/php-code-coverage": "^4.0.1", 1625 | "phpunit/php-file-iterator": "~1.4", 1626 | "phpunit/php-text-template": "~1.2", 1627 | "phpunit/php-timer": "^1.0.6", 1628 | "phpunit/phpunit-mock-objects": "^3.2", 1629 | "sebastian/comparator": "~1.1", 1630 | "sebastian/diff": "~1.2", 1631 | "sebastian/environment": "^1.3 || ^2.0", 1632 | "sebastian/exporter": "~1.2", 1633 | "sebastian/global-state": "~1.0", 1634 | "sebastian/object-enumerator": "~1.0", 1635 | "sebastian/resource-operations": "~1.0", 1636 | "sebastian/version": "~1.0|~2.0", 1637 | "symfony/yaml": "~2.1|~3.0" 1638 | }, 1639 | "conflict": { 1640 | "phpdocumentor/reflection-docblock": "3.0.2" 1641 | }, 1642 | "suggest": { 1643 | "phpunit/php-invoker": "~1.1" 1644 | }, 1645 | "bin": [ 1646 | "phpunit" 1647 | ], 1648 | "type": "library", 1649 | "extra": { 1650 | "branch-alias": { 1651 | "dev-master": "5.5.x-dev" 1652 | } 1653 | }, 1654 | "autoload": { 1655 | "classmap": [ 1656 | "src/" 1657 | ] 1658 | }, 1659 | "notification-url": "https://packagist.org/downloads/", 1660 | "license": [ 1661 | "BSD-3-Clause" 1662 | ], 1663 | "authors": [ 1664 | { 1665 | "name": "Sebastian Bergmann", 1666 | "email": "sebastian@phpunit.de", 1667 | "role": "lead" 1668 | } 1669 | ], 1670 | "description": "The PHP Unit Testing framework.", 1671 | "homepage": "https://phpunit.de/", 1672 | "keywords": [ 1673 | "phpunit", 1674 | "testing", 1675 | "xunit" 1676 | ], 1677 | "time": "2016-08-26 07:11:44" 1678 | }, 1679 | { 1680 | "name": "phpunit/phpunit-mock-objects", 1681 | "version": "3.2.7", 1682 | "source": { 1683 | "type": "git", 1684 | "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", 1685 | "reference": "546898a2c0c356ef2891b39dd7d07f5d82c8ed0a" 1686 | }, 1687 | "dist": { 1688 | "type": "zip", 1689 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/546898a2c0c356ef2891b39dd7d07f5d82c8ed0a", 1690 | "reference": "546898a2c0c356ef2891b39dd7d07f5d82c8ed0a", 1691 | "shasum": "" 1692 | }, 1693 | "require": { 1694 | "doctrine/instantiator": "^1.0.2", 1695 | "php": "^5.6 || ^7.0", 1696 | "phpunit/php-text-template": "^1.2", 1697 | "sebastian/exporter": "^1.2" 1698 | }, 1699 | "conflict": { 1700 | "phpunit/phpunit": "<5.4.0" 1701 | }, 1702 | "require-dev": { 1703 | "phpunit/phpunit": "^5.4" 1704 | }, 1705 | "suggest": { 1706 | "ext-soap": "*" 1707 | }, 1708 | "type": "library", 1709 | "extra": { 1710 | "branch-alias": { 1711 | "dev-master": "3.2.x-dev" 1712 | } 1713 | }, 1714 | "autoload": { 1715 | "classmap": [ 1716 | "src/" 1717 | ] 1718 | }, 1719 | "notification-url": "https://packagist.org/downloads/", 1720 | "license": [ 1721 | "BSD-3-Clause" 1722 | ], 1723 | "authors": [ 1724 | { 1725 | "name": "Sebastian Bergmann", 1726 | "email": "sb@sebastian-bergmann.de", 1727 | "role": "lead" 1728 | } 1729 | ], 1730 | "description": "Mock Object library for PHPUnit", 1731 | "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", 1732 | "keywords": [ 1733 | "mock", 1734 | "xunit" 1735 | ], 1736 | "time": "2016-09-06 16:07:45" 1737 | }, 1738 | { 1739 | "name": "psr/http-message", 1740 | "version": "1.0.1", 1741 | "source": { 1742 | "type": "git", 1743 | "url": "https://github.com/php-fig/http-message.git", 1744 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" 1745 | }, 1746 | "dist": { 1747 | "type": "zip", 1748 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", 1749 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", 1750 | "shasum": "" 1751 | }, 1752 | "require": { 1753 | "php": ">=5.3.0" 1754 | }, 1755 | "type": "library", 1756 | "extra": { 1757 | "branch-alias": { 1758 | "dev-master": "1.0.x-dev" 1759 | } 1760 | }, 1761 | "autoload": { 1762 | "psr-4": { 1763 | "Psr\\Http\\Message\\": "src/" 1764 | } 1765 | }, 1766 | "notification-url": "https://packagist.org/downloads/", 1767 | "license": [ 1768 | "MIT" 1769 | ], 1770 | "authors": [ 1771 | { 1772 | "name": "PHP-FIG", 1773 | "homepage": "http://www.php-fig.org/" 1774 | } 1775 | ], 1776 | "description": "Common interface for HTTP messages", 1777 | "homepage": "https://github.com/php-fig/http-message", 1778 | "keywords": [ 1779 | "http", 1780 | "http-message", 1781 | "psr", 1782 | "psr-7", 1783 | "request", 1784 | "response" 1785 | ], 1786 | "time": "2016-08-06 14:39:51" 1787 | }, 1788 | { 1789 | "name": "psr/log", 1790 | "version": "1.0.0", 1791 | "source": { 1792 | "type": "git", 1793 | "url": "https://github.com/php-fig/log.git", 1794 | "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b" 1795 | }, 1796 | "dist": { 1797 | "type": "zip", 1798 | "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b", 1799 | "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b", 1800 | "shasum": "" 1801 | }, 1802 | "type": "library", 1803 | "autoload": { 1804 | "psr-0": { 1805 | "Psr\\Log\\": "" 1806 | } 1807 | }, 1808 | "notification-url": "https://packagist.org/downloads/", 1809 | "license": [ 1810 | "MIT" 1811 | ], 1812 | "authors": [ 1813 | { 1814 | "name": "PHP-FIG", 1815 | "homepage": "http://www.php-fig.org/" 1816 | } 1817 | ], 1818 | "description": "Common interface for logging libraries", 1819 | "keywords": [ 1820 | "log", 1821 | "psr", 1822 | "psr-3" 1823 | ], 1824 | "time": "2012-12-21 11:40:51" 1825 | }, 1826 | { 1827 | "name": "psy/psysh", 1828 | "version": "v0.7.2", 1829 | "source": { 1830 | "type": "git", 1831 | "url": "https://github.com/bobthecow/psysh.git", 1832 | "reference": "e64e10b20f8d229cac76399e1f3edddb57a0f280" 1833 | }, 1834 | "dist": { 1835 | "type": "zip", 1836 | "url": "https://api.github.com/repos/bobthecow/psysh/zipball/e64e10b20f8d229cac76399e1f3edddb57a0f280", 1837 | "reference": "e64e10b20f8d229cac76399e1f3edddb57a0f280", 1838 | "shasum": "" 1839 | }, 1840 | "require": { 1841 | "dnoegel/php-xdg-base-dir": "0.1", 1842 | "jakub-onderka/php-console-highlighter": "0.3.*", 1843 | "nikic/php-parser": "^1.2.1|~2.0", 1844 | "php": ">=5.3.9", 1845 | "symfony/console": "~2.3.10|^2.4.2|~3.0", 1846 | "symfony/var-dumper": "~2.7|~3.0" 1847 | }, 1848 | "require-dev": { 1849 | "fabpot/php-cs-fixer": "~1.5", 1850 | "phpunit/phpunit": "~3.7|~4.0|~5.0", 1851 | "squizlabs/php_codesniffer": "~2.0", 1852 | "symfony/finder": "~2.1|~3.0" 1853 | }, 1854 | "suggest": { 1855 | "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", 1856 | "ext-pdo-sqlite": "The doc command requires SQLite to work.", 1857 | "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", 1858 | "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history." 1859 | }, 1860 | "bin": [ 1861 | "bin/psysh" 1862 | ], 1863 | "type": "library", 1864 | "extra": { 1865 | "branch-alias": { 1866 | "dev-develop": "0.8.x-dev" 1867 | } 1868 | }, 1869 | "autoload": { 1870 | "files": [ 1871 | "src/Psy/functions.php" 1872 | ], 1873 | "psr-4": { 1874 | "Psy\\": "src/Psy/" 1875 | } 1876 | }, 1877 | "notification-url": "https://packagist.org/downloads/", 1878 | "license": [ 1879 | "MIT" 1880 | ], 1881 | "authors": [ 1882 | { 1883 | "name": "Justin Hileman", 1884 | "email": "justin@justinhileman.info", 1885 | "homepage": "http://justinhileman.com" 1886 | } 1887 | ], 1888 | "description": "An interactive shell for modern PHP.", 1889 | "homepage": "http://psysh.org", 1890 | "keywords": [ 1891 | "REPL", 1892 | "console", 1893 | "interactive", 1894 | "shell" 1895 | ], 1896 | "time": "2016-03-09 05:03:14" 1897 | }, 1898 | { 1899 | "name": "ramsey/uuid", 1900 | "version": "3.5.0", 1901 | "source": { 1902 | "type": "git", 1903 | "url": "https://github.com/ramsey/uuid.git", 1904 | "reference": "a6d15c8618ea3951fd54d34e326b68d3d0bc0786" 1905 | }, 1906 | "dist": { 1907 | "type": "zip", 1908 | "url": "https://api.github.com/repos/ramsey/uuid/zipball/a6d15c8618ea3951fd54d34e326b68d3d0bc0786", 1909 | "reference": "a6d15c8618ea3951fd54d34e326b68d3d0bc0786", 1910 | "shasum": "" 1911 | }, 1912 | "require": { 1913 | "paragonie/random_compat": "^1.0|^2.0", 1914 | "php": ">=5.4" 1915 | }, 1916 | "replace": { 1917 | "rhumsaa/uuid": "self.version" 1918 | }, 1919 | "require-dev": { 1920 | "apigen/apigen": "^4.1", 1921 | "codeception/aspect-mock": "1.0.0", 1922 | "goaop/framework": "1.0.0-alpha.2", 1923 | "ircmaxell/random-lib": "^1.1", 1924 | "jakub-onderka/php-parallel-lint": "^0.9.0", 1925 | "mockery/mockery": "^0.9.4", 1926 | "moontoast/math": "^1.1", 1927 | "phpunit/phpunit": "^4.7|>=5.0 <5.4", 1928 | "satooshi/php-coveralls": "^0.6.1", 1929 | "squizlabs/php_codesniffer": "^2.3" 1930 | }, 1931 | "suggest": { 1932 | "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", 1933 | "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", 1934 | "ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter", 1935 | "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", 1936 | "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid", 1937 | "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." 1938 | }, 1939 | "type": "library", 1940 | "extra": { 1941 | "branch-alias": { 1942 | "dev-master": "3.x-dev" 1943 | } 1944 | }, 1945 | "autoload": { 1946 | "psr-4": { 1947 | "Ramsey\\Uuid\\": "src/" 1948 | } 1949 | }, 1950 | "notification-url": "https://packagist.org/downloads/", 1951 | "license": [ 1952 | "MIT" 1953 | ], 1954 | "authors": [ 1955 | { 1956 | "name": "Marijn Huizendveld", 1957 | "email": "marijn.huizendveld@gmail.com" 1958 | }, 1959 | { 1960 | "name": "Thibaud Fabre", 1961 | "email": "thibaud@aztech.io" 1962 | }, 1963 | { 1964 | "name": "Ben Ramsey", 1965 | "email": "ben@benramsey.com", 1966 | "homepage": "https://benramsey.com" 1967 | } 1968 | ], 1969 | "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", 1970 | "homepage": "https://github.com/ramsey/uuid", 1971 | "keywords": [ 1972 | "guid", 1973 | "identifier", 1974 | "uuid" 1975 | ], 1976 | "time": "2016-08-02 18:39:32" 1977 | }, 1978 | { 1979 | "name": "sebastian/code-unit-reverse-lookup", 1980 | "version": "1.0.0", 1981 | "source": { 1982 | "type": "git", 1983 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 1984 | "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe" 1985 | }, 1986 | "dist": { 1987 | "type": "zip", 1988 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/c36f5e7cfce482fde5bf8d10d41a53591e0198fe", 1989 | "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe", 1990 | "shasum": "" 1991 | }, 1992 | "require": { 1993 | "php": ">=5.6" 1994 | }, 1995 | "require-dev": { 1996 | "phpunit/phpunit": "~5" 1997 | }, 1998 | "type": "library", 1999 | "extra": { 2000 | "branch-alias": { 2001 | "dev-master": "1.0.x-dev" 2002 | } 2003 | }, 2004 | "autoload": { 2005 | "classmap": [ 2006 | "src/" 2007 | ] 2008 | }, 2009 | "notification-url": "https://packagist.org/downloads/", 2010 | "license": [ 2011 | "BSD-3-Clause" 2012 | ], 2013 | "authors": [ 2014 | { 2015 | "name": "Sebastian Bergmann", 2016 | "email": "sebastian@phpunit.de" 2017 | } 2018 | ], 2019 | "description": "Looks up which function or method a line of code belongs to", 2020 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 2021 | "time": "2016-02-13 06:45:14" 2022 | }, 2023 | { 2024 | "name": "sebastian/comparator", 2025 | "version": "1.2.0", 2026 | "source": { 2027 | "type": "git", 2028 | "url": "https://github.com/sebastianbergmann/comparator.git", 2029 | "reference": "937efb279bd37a375bcadf584dec0726f84dbf22" 2030 | }, 2031 | "dist": { 2032 | "type": "zip", 2033 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22", 2034 | "reference": "937efb279bd37a375bcadf584dec0726f84dbf22", 2035 | "shasum": "" 2036 | }, 2037 | "require": { 2038 | "php": ">=5.3.3", 2039 | "sebastian/diff": "~1.2", 2040 | "sebastian/exporter": "~1.2" 2041 | }, 2042 | "require-dev": { 2043 | "phpunit/phpunit": "~4.4" 2044 | }, 2045 | "type": "library", 2046 | "extra": { 2047 | "branch-alias": { 2048 | "dev-master": "1.2.x-dev" 2049 | } 2050 | }, 2051 | "autoload": { 2052 | "classmap": [ 2053 | "src/" 2054 | ] 2055 | }, 2056 | "notification-url": "https://packagist.org/downloads/", 2057 | "license": [ 2058 | "BSD-3-Clause" 2059 | ], 2060 | "authors": [ 2061 | { 2062 | "name": "Jeff Welch", 2063 | "email": "whatthejeff@gmail.com" 2064 | }, 2065 | { 2066 | "name": "Volker Dusch", 2067 | "email": "github@wallbash.com" 2068 | }, 2069 | { 2070 | "name": "Bernhard Schussek", 2071 | "email": "bschussek@2bepublished.at" 2072 | }, 2073 | { 2074 | "name": "Sebastian Bergmann", 2075 | "email": "sebastian@phpunit.de" 2076 | } 2077 | ], 2078 | "description": "Provides the functionality to compare PHP values for equality", 2079 | "homepage": "http://www.github.com/sebastianbergmann/comparator", 2080 | "keywords": [ 2081 | "comparator", 2082 | "compare", 2083 | "equality" 2084 | ], 2085 | "time": "2015-07-26 15:48:44" 2086 | }, 2087 | { 2088 | "name": "sebastian/diff", 2089 | "version": "1.4.1", 2090 | "source": { 2091 | "type": "git", 2092 | "url": "https://github.com/sebastianbergmann/diff.git", 2093 | "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" 2094 | }, 2095 | "dist": { 2096 | "type": "zip", 2097 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", 2098 | "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", 2099 | "shasum": "" 2100 | }, 2101 | "require": { 2102 | "php": ">=5.3.3" 2103 | }, 2104 | "require-dev": { 2105 | "phpunit/phpunit": "~4.8" 2106 | }, 2107 | "type": "library", 2108 | "extra": { 2109 | "branch-alias": { 2110 | "dev-master": "1.4-dev" 2111 | } 2112 | }, 2113 | "autoload": { 2114 | "classmap": [ 2115 | "src/" 2116 | ] 2117 | }, 2118 | "notification-url": "https://packagist.org/downloads/", 2119 | "license": [ 2120 | "BSD-3-Clause" 2121 | ], 2122 | "authors": [ 2123 | { 2124 | "name": "Kore Nordmann", 2125 | "email": "mail@kore-nordmann.de" 2126 | }, 2127 | { 2128 | "name": "Sebastian Bergmann", 2129 | "email": "sebastian@phpunit.de" 2130 | } 2131 | ], 2132 | "description": "Diff implementation", 2133 | "homepage": "https://github.com/sebastianbergmann/diff", 2134 | "keywords": [ 2135 | "diff" 2136 | ], 2137 | "time": "2015-12-08 07:14:41" 2138 | }, 2139 | { 2140 | "name": "sebastian/environment", 2141 | "version": "1.3.8", 2142 | "source": { 2143 | "type": "git", 2144 | "url": "https://github.com/sebastianbergmann/environment.git", 2145 | "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" 2146 | }, 2147 | "dist": { 2148 | "type": "zip", 2149 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", 2150 | "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", 2151 | "shasum": "" 2152 | }, 2153 | "require": { 2154 | "php": "^5.3.3 || ^7.0" 2155 | }, 2156 | "require-dev": { 2157 | "phpunit/phpunit": "^4.8 || ^5.0" 2158 | }, 2159 | "type": "library", 2160 | "extra": { 2161 | "branch-alias": { 2162 | "dev-master": "1.3.x-dev" 2163 | } 2164 | }, 2165 | "autoload": { 2166 | "classmap": [ 2167 | "src/" 2168 | ] 2169 | }, 2170 | "notification-url": "https://packagist.org/downloads/", 2171 | "license": [ 2172 | "BSD-3-Clause" 2173 | ], 2174 | "authors": [ 2175 | { 2176 | "name": "Sebastian Bergmann", 2177 | "email": "sebastian@phpunit.de" 2178 | } 2179 | ], 2180 | "description": "Provides functionality to handle HHVM/PHP environments", 2181 | "homepage": "http://www.github.com/sebastianbergmann/environment", 2182 | "keywords": [ 2183 | "Xdebug", 2184 | "environment", 2185 | "hhvm" 2186 | ], 2187 | "time": "2016-08-18 05:49:44" 2188 | }, 2189 | { 2190 | "name": "sebastian/exporter", 2191 | "version": "1.2.2", 2192 | "source": { 2193 | "type": "git", 2194 | "url": "https://github.com/sebastianbergmann/exporter.git", 2195 | "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" 2196 | }, 2197 | "dist": { 2198 | "type": "zip", 2199 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", 2200 | "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", 2201 | "shasum": "" 2202 | }, 2203 | "require": { 2204 | "php": ">=5.3.3", 2205 | "sebastian/recursion-context": "~1.0" 2206 | }, 2207 | "require-dev": { 2208 | "ext-mbstring": "*", 2209 | "phpunit/phpunit": "~4.4" 2210 | }, 2211 | "type": "library", 2212 | "extra": { 2213 | "branch-alias": { 2214 | "dev-master": "1.3.x-dev" 2215 | } 2216 | }, 2217 | "autoload": { 2218 | "classmap": [ 2219 | "src/" 2220 | ] 2221 | }, 2222 | "notification-url": "https://packagist.org/downloads/", 2223 | "license": [ 2224 | "BSD-3-Clause" 2225 | ], 2226 | "authors": [ 2227 | { 2228 | "name": "Jeff Welch", 2229 | "email": "whatthejeff@gmail.com" 2230 | }, 2231 | { 2232 | "name": "Volker Dusch", 2233 | "email": "github@wallbash.com" 2234 | }, 2235 | { 2236 | "name": "Bernhard Schussek", 2237 | "email": "bschussek@2bepublished.at" 2238 | }, 2239 | { 2240 | "name": "Sebastian Bergmann", 2241 | "email": "sebastian@phpunit.de" 2242 | }, 2243 | { 2244 | "name": "Adam Harvey", 2245 | "email": "aharvey@php.net" 2246 | } 2247 | ], 2248 | "description": "Provides the functionality to export PHP variables for visualization", 2249 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 2250 | "keywords": [ 2251 | "export", 2252 | "exporter" 2253 | ], 2254 | "time": "2016-06-17 09:04:28" 2255 | }, 2256 | { 2257 | "name": "sebastian/global-state", 2258 | "version": "1.1.1", 2259 | "source": { 2260 | "type": "git", 2261 | "url": "https://github.com/sebastianbergmann/global-state.git", 2262 | "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" 2263 | }, 2264 | "dist": { 2265 | "type": "zip", 2266 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", 2267 | "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", 2268 | "shasum": "" 2269 | }, 2270 | "require": { 2271 | "php": ">=5.3.3" 2272 | }, 2273 | "require-dev": { 2274 | "phpunit/phpunit": "~4.2" 2275 | }, 2276 | "suggest": { 2277 | "ext-uopz": "*" 2278 | }, 2279 | "type": "library", 2280 | "extra": { 2281 | "branch-alias": { 2282 | "dev-master": "1.0-dev" 2283 | } 2284 | }, 2285 | "autoload": { 2286 | "classmap": [ 2287 | "src/" 2288 | ] 2289 | }, 2290 | "notification-url": "https://packagist.org/downloads/", 2291 | "license": [ 2292 | "BSD-3-Clause" 2293 | ], 2294 | "authors": [ 2295 | { 2296 | "name": "Sebastian Bergmann", 2297 | "email": "sebastian@phpunit.de" 2298 | } 2299 | ], 2300 | "description": "Snapshotting of global state", 2301 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 2302 | "keywords": [ 2303 | "global state" 2304 | ], 2305 | "time": "2015-10-12 03:26:01" 2306 | }, 2307 | { 2308 | "name": "sebastian/object-enumerator", 2309 | "version": "1.0.0", 2310 | "source": { 2311 | "type": "git", 2312 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 2313 | "reference": "d4ca2fb70344987502567bc50081c03e6192fb26" 2314 | }, 2315 | "dist": { 2316 | "type": "zip", 2317 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/d4ca2fb70344987502567bc50081c03e6192fb26", 2318 | "reference": "d4ca2fb70344987502567bc50081c03e6192fb26", 2319 | "shasum": "" 2320 | }, 2321 | "require": { 2322 | "php": ">=5.6", 2323 | "sebastian/recursion-context": "~1.0" 2324 | }, 2325 | "require-dev": { 2326 | "phpunit/phpunit": "~5" 2327 | }, 2328 | "type": "library", 2329 | "extra": { 2330 | "branch-alias": { 2331 | "dev-master": "1.0.x-dev" 2332 | } 2333 | }, 2334 | "autoload": { 2335 | "classmap": [ 2336 | "src/" 2337 | ] 2338 | }, 2339 | "notification-url": "https://packagist.org/downloads/", 2340 | "license": [ 2341 | "BSD-3-Clause" 2342 | ], 2343 | "authors": [ 2344 | { 2345 | "name": "Sebastian Bergmann", 2346 | "email": "sebastian@phpunit.de" 2347 | } 2348 | ], 2349 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 2350 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 2351 | "time": "2016-01-28 13:25:10" 2352 | }, 2353 | { 2354 | "name": "sebastian/recursion-context", 2355 | "version": "1.0.2", 2356 | "source": { 2357 | "type": "git", 2358 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 2359 | "reference": "913401df809e99e4f47b27cdd781f4a258d58791" 2360 | }, 2361 | "dist": { 2362 | "type": "zip", 2363 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/913401df809e99e4f47b27cdd781f4a258d58791", 2364 | "reference": "913401df809e99e4f47b27cdd781f4a258d58791", 2365 | "shasum": "" 2366 | }, 2367 | "require": { 2368 | "php": ">=5.3.3" 2369 | }, 2370 | "require-dev": { 2371 | "phpunit/phpunit": "~4.4" 2372 | }, 2373 | "type": "library", 2374 | "extra": { 2375 | "branch-alias": { 2376 | "dev-master": "1.0.x-dev" 2377 | } 2378 | }, 2379 | "autoload": { 2380 | "classmap": [ 2381 | "src/" 2382 | ] 2383 | }, 2384 | "notification-url": "https://packagist.org/downloads/", 2385 | "license": [ 2386 | "BSD-3-Clause" 2387 | ], 2388 | "authors": [ 2389 | { 2390 | "name": "Jeff Welch", 2391 | "email": "whatthejeff@gmail.com" 2392 | }, 2393 | { 2394 | "name": "Sebastian Bergmann", 2395 | "email": "sebastian@phpunit.de" 2396 | }, 2397 | { 2398 | "name": "Adam Harvey", 2399 | "email": "aharvey@php.net" 2400 | } 2401 | ], 2402 | "description": "Provides functionality to recursively process PHP variables", 2403 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 2404 | "time": "2015-11-11 19:50:13" 2405 | }, 2406 | { 2407 | "name": "sebastian/resource-operations", 2408 | "version": "1.0.0", 2409 | "source": { 2410 | "type": "git", 2411 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 2412 | "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" 2413 | }, 2414 | "dist": { 2415 | "type": "zip", 2416 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", 2417 | "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", 2418 | "shasum": "" 2419 | }, 2420 | "require": { 2421 | "php": ">=5.6.0" 2422 | }, 2423 | "type": "library", 2424 | "extra": { 2425 | "branch-alias": { 2426 | "dev-master": "1.0.x-dev" 2427 | } 2428 | }, 2429 | "autoload": { 2430 | "classmap": [ 2431 | "src/" 2432 | ] 2433 | }, 2434 | "notification-url": "https://packagist.org/downloads/", 2435 | "license": [ 2436 | "BSD-3-Clause" 2437 | ], 2438 | "authors": [ 2439 | { 2440 | "name": "Sebastian Bergmann", 2441 | "email": "sebastian@phpunit.de" 2442 | } 2443 | ], 2444 | "description": "Provides a list of PHP built-in functions that operate on resources", 2445 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 2446 | "time": "2015-07-28 20:34:47" 2447 | }, 2448 | { 2449 | "name": "sebastian/version", 2450 | "version": "2.0.0", 2451 | "source": { 2452 | "type": "git", 2453 | "url": "https://github.com/sebastianbergmann/version.git", 2454 | "reference": "c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5" 2455 | }, 2456 | "dist": { 2457 | "type": "zip", 2458 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5", 2459 | "reference": "c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5", 2460 | "shasum": "" 2461 | }, 2462 | "require": { 2463 | "php": ">=5.6" 2464 | }, 2465 | "type": "library", 2466 | "extra": { 2467 | "branch-alias": { 2468 | "dev-master": "2.0.x-dev" 2469 | } 2470 | }, 2471 | "autoload": { 2472 | "classmap": [ 2473 | "src/" 2474 | ] 2475 | }, 2476 | "notification-url": "https://packagist.org/downloads/", 2477 | "license": [ 2478 | "BSD-3-Clause" 2479 | ], 2480 | "authors": [ 2481 | { 2482 | "name": "Sebastian Bergmann", 2483 | "email": "sebastian@phpunit.de", 2484 | "role": "lead" 2485 | } 2486 | ], 2487 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 2488 | "homepage": "https://github.com/sebastianbergmann/version", 2489 | "time": "2016-02-04 12:56:52" 2490 | }, 2491 | { 2492 | "name": "swiftmailer/swiftmailer", 2493 | "version": "v5.4.3", 2494 | "source": { 2495 | "type": "git", 2496 | "url": "https://github.com/swiftmailer/swiftmailer.git", 2497 | "reference": "4cc92842069c2bbc1f28daaaf1d2576ec4dfe153" 2498 | }, 2499 | "dist": { 2500 | "type": "zip", 2501 | "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/4cc92842069c2bbc1f28daaaf1d2576ec4dfe153", 2502 | "reference": "4cc92842069c2bbc1f28daaaf1d2576ec4dfe153", 2503 | "shasum": "" 2504 | }, 2505 | "require": { 2506 | "php": ">=5.3.3" 2507 | }, 2508 | "require-dev": { 2509 | "mockery/mockery": "~0.9.1" 2510 | }, 2511 | "type": "library", 2512 | "extra": { 2513 | "branch-alias": { 2514 | "dev-master": "5.4-dev" 2515 | } 2516 | }, 2517 | "autoload": { 2518 | "files": [ 2519 | "lib/swift_required.php" 2520 | ] 2521 | }, 2522 | "notification-url": "https://packagist.org/downloads/", 2523 | "license": [ 2524 | "MIT" 2525 | ], 2526 | "authors": [ 2527 | { 2528 | "name": "Chris Corbyn" 2529 | }, 2530 | { 2531 | "name": "Fabien Potencier", 2532 | "email": "fabien@symfony.com" 2533 | } 2534 | ], 2535 | "description": "Swiftmailer, free feature-rich PHP mailer", 2536 | "homepage": "http://swiftmailer.org", 2537 | "keywords": [ 2538 | "email", 2539 | "mail", 2540 | "mailer" 2541 | ], 2542 | "time": "2016-07-08 11:51:25" 2543 | }, 2544 | { 2545 | "name": "symfony/console", 2546 | "version": "v3.1.4", 2547 | "source": { 2548 | "type": "git", 2549 | "url": "https://github.com/symfony/console.git", 2550 | "reference": "8ea494c34f0f772c3954b5fbe00bffc5a435e563" 2551 | }, 2552 | "dist": { 2553 | "type": "zip", 2554 | "url": "https://api.github.com/repos/symfony/console/zipball/8ea494c34f0f772c3954b5fbe00bffc5a435e563", 2555 | "reference": "8ea494c34f0f772c3954b5fbe00bffc5a435e563", 2556 | "shasum": "" 2557 | }, 2558 | "require": { 2559 | "php": ">=5.5.9", 2560 | "symfony/polyfill-mbstring": "~1.0" 2561 | }, 2562 | "require-dev": { 2563 | "psr/log": "~1.0", 2564 | "symfony/event-dispatcher": "~2.8|~3.0", 2565 | "symfony/process": "~2.8|~3.0" 2566 | }, 2567 | "suggest": { 2568 | "psr/log": "For using the console logger", 2569 | "symfony/event-dispatcher": "", 2570 | "symfony/process": "" 2571 | }, 2572 | "type": "library", 2573 | "extra": { 2574 | "branch-alias": { 2575 | "dev-master": "3.1-dev" 2576 | } 2577 | }, 2578 | "autoload": { 2579 | "psr-4": { 2580 | "Symfony\\Component\\Console\\": "" 2581 | }, 2582 | "exclude-from-classmap": [ 2583 | "/Tests/" 2584 | ] 2585 | }, 2586 | "notification-url": "https://packagist.org/downloads/", 2587 | "license": [ 2588 | "MIT" 2589 | ], 2590 | "authors": [ 2591 | { 2592 | "name": "Fabien Potencier", 2593 | "email": "fabien@symfony.com" 2594 | }, 2595 | { 2596 | "name": "Symfony Community", 2597 | "homepage": "https://symfony.com/contributors" 2598 | } 2599 | ], 2600 | "description": "Symfony Console Component", 2601 | "homepage": "https://symfony.com", 2602 | "time": "2016-08-19 06:48:39" 2603 | }, 2604 | { 2605 | "name": "symfony/debug", 2606 | "version": "v3.1.4", 2607 | "source": { 2608 | "type": "git", 2609 | "url": "https://github.com/symfony/debug.git", 2610 | "reference": "34f6ac18c2974ca5fce68adf419ee7d15def6f11" 2611 | }, 2612 | "dist": { 2613 | "type": "zip", 2614 | "url": "https://api.github.com/repos/symfony/debug/zipball/34f6ac18c2974ca5fce68adf419ee7d15def6f11", 2615 | "reference": "34f6ac18c2974ca5fce68adf419ee7d15def6f11", 2616 | "shasum": "" 2617 | }, 2618 | "require": { 2619 | "php": ">=5.5.9", 2620 | "psr/log": "~1.0" 2621 | }, 2622 | "conflict": { 2623 | "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" 2624 | }, 2625 | "require-dev": { 2626 | "symfony/class-loader": "~2.8|~3.0", 2627 | "symfony/http-kernel": "~2.8|~3.0" 2628 | }, 2629 | "type": "library", 2630 | "extra": { 2631 | "branch-alias": { 2632 | "dev-master": "3.1-dev" 2633 | } 2634 | }, 2635 | "autoload": { 2636 | "psr-4": { 2637 | "Symfony\\Component\\Debug\\": "" 2638 | }, 2639 | "exclude-from-classmap": [ 2640 | "/Tests/" 2641 | ] 2642 | }, 2643 | "notification-url": "https://packagist.org/downloads/", 2644 | "license": [ 2645 | "MIT" 2646 | ], 2647 | "authors": [ 2648 | { 2649 | "name": "Fabien Potencier", 2650 | "email": "fabien@symfony.com" 2651 | }, 2652 | { 2653 | "name": "Symfony Community", 2654 | "homepage": "https://symfony.com/contributors" 2655 | } 2656 | ], 2657 | "description": "Symfony Debug Component", 2658 | "homepage": "https://symfony.com", 2659 | "time": "2016-08-23 13:39:15" 2660 | }, 2661 | { 2662 | "name": "symfony/event-dispatcher", 2663 | "version": "v3.1.4", 2664 | "source": { 2665 | "type": "git", 2666 | "url": "https://github.com/symfony/event-dispatcher.git", 2667 | "reference": "c0c00c80b3a69132c4e55c3e7db32b4a387615e5" 2668 | }, 2669 | "dist": { 2670 | "type": "zip", 2671 | "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/c0c00c80b3a69132c4e55c3e7db32b4a387615e5", 2672 | "reference": "c0c00c80b3a69132c4e55c3e7db32b4a387615e5", 2673 | "shasum": "" 2674 | }, 2675 | "require": { 2676 | "php": ">=5.5.9" 2677 | }, 2678 | "require-dev": { 2679 | "psr/log": "~1.0", 2680 | "symfony/config": "~2.8|~3.0", 2681 | "symfony/dependency-injection": "~2.8|~3.0", 2682 | "symfony/expression-language": "~2.8|~3.0", 2683 | "symfony/stopwatch": "~2.8|~3.0" 2684 | }, 2685 | "suggest": { 2686 | "symfony/dependency-injection": "", 2687 | "symfony/http-kernel": "" 2688 | }, 2689 | "type": "library", 2690 | "extra": { 2691 | "branch-alias": { 2692 | "dev-master": "3.1-dev" 2693 | } 2694 | }, 2695 | "autoload": { 2696 | "psr-4": { 2697 | "Symfony\\Component\\EventDispatcher\\": "" 2698 | }, 2699 | "exclude-from-classmap": [ 2700 | "/Tests/" 2701 | ] 2702 | }, 2703 | "notification-url": "https://packagist.org/downloads/", 2704 | "license": [ 2705 | "MIT" 2706 | ], 2707 | "authors": [ 2708 | { 2709 | "name": "Fabien Potencier", 2710 | "email": "fabien@symfony.com" 2711 | }, 2712 | { 2713 | "name": "Symfony Community", 2714 | "homepage": "https://symfony.com/contributors" 2715 | } 2716 | ], 2717 | "description": "Symfony EventDispatcher Component", 2718 | "homepage": "https://symfony.com", 2719 | "time": "2016-07-19 10:45:57" 2720 | }, 2721 | { 2722 | "name": "symfony/finder", 2723 | "version": "v3.1.4", 2724 | "source": { 2725 | "type": "git", 2726 | "url": "https://github.com/symfony/finder.git", 2727 | "reference": "e568ef1784f447a0e54dcb6f6de30b9747b0f577" 2728 | }, 2729 | "dist": { 2730 | "type": "zip", 2731 | "url": "https://api.github.com/repos/symfony/finder/zipball/e568ef1784f447a0e54dcb6f6de30b9747b0f577", 2732 | "reference": "e568ef1784f447a0e54dcb6f6de30b9747b0f577", 2733 | "shasum": "" 2734 | }, 2735 | "require": { 2736 | "php": ">=5.5.9" 2737 | }, 2738 | "type": "library", 2739 | "extra": { 2740 | "branch-alias": { 2741 | "dev-master": "3.1-dev" 2742 | } 2743 | }, 2744 | "autoload": { 2745 | "psr-4": { 2746 | "Symfony\\Component\\Finder\\": "" 2747 | }, 2748 | "exclude-from-classmap": [ 2749 | "/Tests/" 2750 | ] 2751 | }, 2752 | "notification-url": "https://packagist.org/downloads/", 2753 | "license": [ 2754 | "MIT" 2755 | ], 2756 | "authors": [ 2757 | { 2758 | "name": "Fabien Potencier", 2759 | "email": "fabien@symfony.com" 2760 | }, 2761 | { 2762 | "name": "Symfony Community", 2763 | "homepage": "https://symfony.com/contributors" 2764 | } 2765 | ], 2766 | "description": "Symfony Finder Component", 2767 | "homepage": "https://symfony.com", 2768 | "time": "2016-08-26 12:04:02" 2769 | }, 2770 | { 2771 | "name": "symfony/http-foundation", 2772 | "version": "v3.1.4", 2773 | "source": { 2774 | "type": "git", 2775 | "url": "https://github.com/symfony/http-foundation.git", 2776 | "reference": "63592e00fd90632b57ee50220a1ddb29b6bf3bb4" 2777 | }, 2778 | "dist": { 2779 | "type": "zip", 2780 | "url": "https://api.github.com/repos/symfony/http-foundation/zipball/63592e00fd90632b57ee50220a1ddb29b6bf3bb4", 2781 | "reference": "63592e00fd90632b57ee50220a1ddb29b6bf3bb4", 2782 | "shasum": "" 2783 | }, 2784 | "require": { 2785 | "php": ">=5.5.9", 2786 | "symfony/polyfill-mbstring": "~1.1" 2787 | }, 2788 | "require-dev": { 2789 | "symfony/expression-language": "~2.8|~3.0" 2790 | }, 2791 | "type": "library", 2792 | "extra": { 2793 | "branch-alias": { 2794 | "dev-master": "3.1-dev" 2795 | } 2796 | }, 2797 | "autoload": { 2798 | "psr-4": { 2799 | "Symfony\\Component\\HttpFoundation\\": "" 2800 | }, 2801 | "exclude-from-classmap": [ 2802 | "/Tests/" 2803 | ] 2804 | }, 2805 | "notification-url": "https://packagist.org/downloads/", 2806 | "license": [ 2807 | "MIT" 2808 | ], 2809 | "authors": [ 2810 | { 2811 | "name": "Fabien Potencier", 2812 | "email": "fabien@symfony.com" 2813 | }, 2814 | { 2815 | "name": "Symfony Community", 2816 | "homepage": "https://symfony.com/contributors" 2817 | } 2818 | ], 2819 | "description": "Symfony HttpFoundation Component", 2820 | "homepage": "https://symfony.com", 2821 | "time": "2016-08-22 12:11:19" 2822 | }, 2823 | { 2824 | "name": "symfony/http-kernel", 2825 | "version": "v3.1.4", 2826 | "source": { 2827 | "type": "git", 2828 | "url": "https://github.com/symfony/http-kernel.git", 2829 | "reference": "aeda215d6b01f119508c090d2a09ebb5b0bc61f3" 2830 | }, 2831 | "dist": { 2832 | "type": "zip", 2833 | "url": "https://api.github.com/repos/symfony/http-kernel/zipball/aeda215d6b01f119508c090d2a09ebb5b0bc61f3", 2834 | "reference": "aeda215d6b01f119508c090d2a09ebb5b0bc61f3", 2835 | "shasum": "" 2836 | }, 2837 | "require": { 2838 | "php": ">=5.5.9", 2839 | "psr/log": "~1.0", 2840 | "symfony/debug": "~2.8|~3.0", 2841 | "symfony/event-dispatcher": "~2.8|~3.0", 2842 | "symfony/http-foundation": "~2.8.8|~3.0.8|~3.1.2|~3.2" 2843 | }, 2844 | "conflict": { 2845 | "symfony/config": "<2.8" 2846 | }, 2847 | "require-dev": { 2848 | "symfony/browser-kit": "~2.8|~3.0", 2849 | "symfony/class-loader": "~2.8|~3.0", 2850 | "symfony/config": "~2.8|~3.0", 2851 | "symfony/console": "~2.8|~3.0", 2852 | "symfony/css-selector": "~2.8|~3.0", 2853 | "symfony/dependency-injection": "~2.8|~3.0", 2854 | "symfony/dom-crawler": "~2.8|~3.0", 2855 | "symfony/expression-language": "~2.8|~3.0", 2856 | "symfony/finder": "~2.8|~3.0", 2857 | "symfony/process": "~2.8|~3.0", 2858 | "symfony/routing": "~2.8|~3.0", 2859 | "symfony/stopwatch": "~2.8|~3.0", 2860 | "symfony/templating": "~2.8|~3.0", 2861 | "symfony/translation": "~2.8|~3.0", 2862 | "symfony/var-dumper": "~2.8|~3.0" 2863 | }, 2864 | "suggest": { 2865 | "symfony/browser-kit": "", 2866 | "symfony/class-loader": "", 2867 | "symfony/config": "", 2868 | "symfony/console": "", 2869 | "symfony/dependency-injection": "", 2870 | "symfony/finder": "", 2871 | "symfony/var-dumper": "" 2872 | }, 2873 | "type": "library", 2874 | "extra": { 2875 | "branch-alias": { 2876 | "dev-master": "3.1-dev" 2877 | } 2878 | }, 2879 | "autoload": { 2880 | "psr-4": { 2881 | "Symfony\\Component\\HttpKernel\\": "" 2882 | }, 2883 | "exclude-from-classmap": [ 2884 | "/Tests/" 2885 | ] 2886 | }, 2887 | "notification-url": "https://packagist.org/downloads/", 2888 | "license": [ 2889 | "MIT" 2890 | ], 2891 | "authors": [ 2892 | { 2893 | "name": "Fabien Potencier", 2894 | "email": "fabien@symfony.com" 2895 | }, 2896 | { 2897 | "name": "Symfony Community", 2898 | "homepage": "https://symfony.com/contributors" 2899 | } 2900 | ], 2901 | "description": "Symfony HttpKernel Component", 2902 | "homepage": "https://symfony.com", 2903 | "time": "2016-09-03 15:28:24" 2904 | }, 2905 | { 2906 | "name": "symfony/polyfill-mbstring", 2907 | "version": "v1.2.0", 2908 | "source": { 2909 | "type": "git", 2910 | "url": "https://github.com/symfony/polyfill-mbstring.git", 2911 | "reference": "dff51f72b0706335131b00a7f49606168c582594" 2912 | }, 2913 | "dist": { 2914 | "type": "zip", 2915 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/dff51f72b0706335131b00a7f49606168c582594", 2916 | "reference": "dff51f72b0706335131b00a7f49606168c582594", 2917 | "shasum": "" 2918 | }, 2919 | "require": { 2920 | "php": ">=5.3.3" 2921 | }, 2922 | "suggest": { 2923 | "ext-mbstring": "For best performance" 2924 | }, 2925 | "type": "library", 2926 | "extra": { 2927 | "branch-alias": { 2928 | "dev-master": "1.2-dev" 2929 | } 2930 | }, 2931 | "autoload": { 2932 | "psr-4": { 2933 | "Symfony\\Polyfill\\Mbstring\\": "" 2934 | }, 2935 | "files": [ 2936 | "bootstrap.php" 2937 | ] 2938 | }, 2939 | "notification-url": "https://packagist.org/downloads/", 2940 | "license": [ 2941 | "MIT" 2942 | ], 2943 | "authors": [ 2944 | { 2945 | "name": "Nicolas Grekas", 2946 | "email": "p@tchwork.com" 2947 | }, 2948 | { 2949 | "name": "Symfony Community", 2950 | "homepage": "https://symfony.com/contributors" 2951 | } 2952 | ], 2953 | "description": "Symfony polyfill for the Mbstring extension", 2954 | "homepage": "https://symfony.com", 2955 | "keywords": [ 2956 | "compatibility", 2957 | "mbstring", 2958 | "polyfill", 2959 | "portable", 2960 | "shim" 2961 | ], 2962 | "time": "2016-05-18 14:26:46" 2963 | }, 2964 | { 2965 | "name": "symfony/polyfill-php56", 2966 | "version": "v1.2.0", 2967 | "source": { 2968 | "type": "git", 2969 | "url": "https://github.com/symfony/polyfill-php56.git", 2970 | "reference": "3edf57a8fbf9a927533344cef65ad7e1cf31030a" 2971 | }, 2972 | "dist": { 2973 | "type": "zip", 2974 | "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/3edf57a8fbf9a927533344cef65ad7e1cf31030a", 2975 | "reference": "3edf57a8fbf9a927533344cef65ad7e1cf31030a", 2976 | "shasum": "" 2977 | }, 2978 | "require": { 2979 | "php": ">=5.3.3", 2980 | "symfony/polyfill-util": "~1.0" 2981 | }, 2982 | "type": "library", 2983 | "extra": { 2984 | "branch-alias": { 2985 | "dev-master": "1.2-dev" 2986 | } 2987 | }, 2988 | "autoload": { 2989 | "psr-4": { 2990 | "Symfony\\Polyfill\\Php56\\": "" 2991 | }, 2992 | "files": [ 2993 | "bootstrap.php" 2994 | ] 2995 | }, 2996 | "notification-url": "https://packagist.org/downloads/", 2997 | "license": [ 2998 | "MIT" 2999 | ], 3000 | "authors": [ 3001 | { 3002 | "name": "Nicolas Grekas", 3003 | "email": "p@tchwork.com" 3004 | }, 3005 | { 3006 | "name": "Symfony Community", 3007 | "homepage": "https://symfony.com/contributors" 3008 | } 3009 | ], 3010 | "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", 3011 | "homepage": "https://symfony.com", 3012 | "keywords": [ 3013 | "compatibility", 3014 | "polyfill", 3015 | "portable", 3016 | "shim" 3017 | ], 3018 | "time": "2016-05-18 14:26:46" 3019 | }, 3020 | { 3021 | "name": "symfony/polyfill-util", 3022 | "version": "v1.2.0", 3023 | "source": { 3024 | "type": "git", 3025 | "url": "https://github.com/symfony/polyfill-util.git", 3026 | "reference": "ef830ce3d218e622b221d6bfad42c751d974bf99" 3027 | }, 3028 | "dist": { 3029 | "type": "zip", 3030 | "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/ef830ce3d218e622b221d6bfad42c751d974bf99", 3031 | "reference": "ef830ce3d218e622b221d6bfad42c751d974bf99", 3032 | "shasum": "" 3033 | }, 3034 | "require": { 3035 | "php": ">=5.3.3" 3036 | }, 3037 | "type": "library", 3038 | "extra": { 3039 | "branch-alias": { 3040 | "dev-master": "1.2-dev" 3041 | } 3042 | }, 3043 | "autoload": { 3044 | "psr-4": { 3045 | "Symfony\\Polyfill\\Util\\": "" 3046 | } 3047 | }, 3048 | "notification-url": "https://packagist.org/downloads/", 3049 | "license": [ 3050 | "MIT" 3051 | ], 3052 | "authors": [ 3053 | { 3054 | "name": "Nicolas Grekas", 3055 | "email": "p@tchwork.com" 3056 | }, 3057 | { 3058 | "name": "Symfony Community", 3059 | "homepage": "https://symfony.com/contributors" 3060 | } 3061 | ], 3062 | "description": "Symfony utilities for portability of PHP codes", 3063 | "homepage": "https://symfony.com", 3064 | "keywords": [ 3065 | "compat", 3066 | "compatibility", 3067 | "polyfill", 3068 | "shim" 3069 | ], 3070 | "time": "2016-05-18 14:26:46" 3071 | }, 3072 | { 3073 | "name": "symfony/process", 3074 | "version": "v3.1.4", 3075 | "source": { 3076 | "type": "git", 3077 | "url": "https://github.com/symfony/process.git", 3078 | "reference": "e64e93041c80e77197ace5ab9385dedb5a143697" 3079 | }, 3080 | "dist": { 3081 | "type": "zip", 3082 | "url": "https://api.github.com/repos/symfony/process/zipball/e64e93041c80e77197ace5ab9385dedb5a143697", 3083 | "reference": "e64e93041c80e77197ace5ab9385dedb5a143697", 3084 | "shasum": "" 3085 | }, 3086 | "require": { 3087 | "php": ">=5.5.9" 3088 | }, 3089 | "type": "library", 3090 | "extra": { 3091 | "branch-alias": { 3092 | "dev-master": "3.1-dev" 3093 | } 3094 | }, 3095 | "autoload": { 3096 | "psr-4": { 3097 | "Symfony\\Component\\Process\\": "" 3098 | }, 3099 | "exclude-from-classmap": [ 3100 | "/Tests/" 3101 | ] 3102 | }, 3103 | "notification-url": "https://packagist.org/downloads/", 3104 | "license": [ 3105 | "MIT" 3106 | ], 3107 | "authors": [ 3108 | { 3109 | "name": "Fabien Potencier", 3110 | "email": "fabien@symfony.com" 3111 | }, 3112 | { 3113 | "name": "Symfony Community", 3114 | "homepage": "https://symfony.com/contributors" 3115 | } 3116 | ], 3117 | "description": "Symfony Process Component", 3118 | "homepage": "https://symfony.com", 3119 | "time": "2016-08-16 14:58:24" 3120 | }, 3121 | { 3122 | "name": "symfony/routing", 3123 | "version": "v3.1.4", 3124 | "source": { 3125 | "type": "git", 3126 | "url": "https://github.com/symfony/routing.git", 3127 | "reference": "8edf62498a1a4c57ba317664a4b698339c10cdf6" 3128 | }, 3129 | "dist": { 3130 | "type": "zip", 3131 | "url": "https://api.github.com/repos/symfony/routing/zipball/8edf62498a1a4c57ba317664a4b698339c10cdf6", 3132 | "reference": "8edf62498a1a4c57ba317664a4b698339c10cdf6", 3133 | "shasum": "" 3134 | }, 3135 | "require": { 3136 | "php": ">=5.5.9" 3137 | }, 3138 | "conflict": { 3139 | "symfony/config": "<2.8" 3140 | }, 3141 | "require-dev": { 3142 | "doctrine/annotations": "~1.0", 3143 | "doctrine/common": "~2.2", 3144 | "psr/log": "~1.0", 3145 | "symfony/config": "~2.8|~3.0", 3146 | "symfony/expression-language": "~2.8|~3.0", 3147 | "symfony/http-foundation": "~2.8|~3.0", 3148 | "symfony/yaml": "~2.8|~3.0" 3149 | }, 3150 | "suggest": { 3151 | "doctrine/annotations": "For using the annotation loader", 3152 | "symfony/config": "For using the all-in-one router or any loader", 3153 | "symfony/dependency-injection": "For loading routes from a service", 3154 | "symfony/expression-language": "For using expression matching", 3155 | "symfony/http-foundation": "For using a Symfony Request object", 3156 | "symfony/yaml": "For using the YAML loader" 3157 | }, 3158 | "type": "library", 3159 | "extra": { 3160 | "branch-alias": { 3161 | "dev-master": "3.1-dev" 3162 | } 3163 | }, 3164 | "autoload": { 3165 | "psr-4": { 3166 | "Symfony\\Component\\Routing\\": "" 3167 | }, 3168 | "exclude-from-classmap": [ 3169 | "/Tests/" 3170 | ] 3171 | }, 3172 | "notification-url": "https://packagist.org/downloads/", 3173 | "license": [ 3174 | "MIT" 3175 | ], 3176 | "authors": [ 3177 | { 3178 | "name": "Fabien Potencier", 3179 | "email": "fabien@symfony.com" 3180 | }, 3181 | { 3182 | "name": "Symfony Community", 3183 | "homepage": "https://symfony.com/contributors" 3184 | } 3185 | ], 3186 | "description": "Symfony Routing Component", 3187 | "homepage": "https://symfony.com", 3188 | "keywords": [ 3189 | "router", 3190 | "routing", 3191 | "uri", 3192 | "url" 3193 | ], 3194 | "time": "2016-08-16 14:58:24" 3195 | }, 3196 | { 3197 | "name": "symfony/translation", 3198 | "version": "v3.1.4", 3199 | "source": { 3200 | "type": "git", 3201 | "url": "https://github.com/symfony/translation.git", 3202 | "reference": "a35edc277513c9bc0f063ca174c36b346f974528" 3203 | }, 3204 | "dist": { 3205 | "type": "zip", 3206 | "url": "https://api.github.com/repos/symfony/translation/zipball/a35edc277513c9bc0f063ca174c36b346f974528", 3207 | "reference": "a35edc277513c9bc0f063ca174c36b346f974528", 3208 | "shasum": "" 3209 | }, 3210 | "require": { 3211 | "php": ">=5.5.9", 3212 | "symfony/polyfill-mbstring": "~1.0" 3213 | }, 3214 | "conflict": { 3215 | "symfony/config": "<2.8" 3216 | }, 3217 | "require-dev": { 3218 | "psr/log": "~1.0", 3219 | "symfony/config": "~2.8|~3.0", 3220 | "symfony/intl": "~2.8|~3.0", 3221 | "symfony/yaml": "~2.8|~3.0" 3222 | }, 3223 | "suggest": { 3224 | "psr/log": "To use logging capability in translator", 3225 | "symfony/config": "", 3226 | "symfony/yaml": "" 3227 | }, 3228 | "type": "library", 3229 | "extra": { 3230 | "branch-alias": { 3231 | "dev-master": "3.1-dev" 3232 | } 3233 | }, 3234 | "autoload": { 3235 | "psr-4": { 3236 | "Symfony\\Component\\Translation\\": "" 3237 | }, 3238 | "exclude-from-classmap": [ 3239 | "/Tests/" 3240 | ] 3241 | }, 3242 | "notification-url": "https://packagist.org/downloads/", 3243 | "license": [ 3244 | "MIT" 3245 | ], 3246 | "authors": [ 3247 | { 3248 | "name": "Fabien Potencier", 3249 | "email": "fabien@symfony.com" 3250 | }, 3251 | { 3252 | "name": "Symfony Community", 3253 | "homepage": "https://symfony.com/contributors" 3254 | } 3255 | ], 3256 | "description": "Symfony Translation Component", 3257 | "homepage": "https://symfony.com", 3258 | "time": "2016-08-05 08:37:39" 3259 | }, 3260 | { 3261 | "name": "symfony/var-dumper", 3262 | "version": "v3.1.4", 3263 | "source": { 3264 | "type": "git", 3265 | "url": "https://github.com/symfony/var-dumper.git", 3266 | "reference": "62ee73706c421654a4c840028954510277f7dfc8" 3267 | }, 3268 | "dist": { 3269 | "type": "zip", 3270 | "url": "https://api.github.com/repos/symfony/var-dumper/zipball/62ee73706c421654a4c840028954510277f7dfc8", 3271 | "reference": "62ee73706c421654a4c840028954510277f7dfc8", 3272 | "shasum": "" 3273 | }, 3274 | "require": { 3275 | "php": ">=5.5.9", 3276 | "symfony/polyfill-mbstring": "~1.0" 3277 | }, 3278 | "require-dev": { 3279 | "twig/twig": "~1.20|~2.0" 3280 | }, 3281 | "suggest": { 3282 | "ext-symfony_debug": "" 3283 | }, 3284 | "type": "library", 3285 | "extra": { 3286 | "branch-alias": { 3287 | "dev-master": "3.1-dev" 3288 | } 3289 | }, 3290 | "autoload": { 3291 | "files": [ 3292 | "Resources/functions/dump.php" 3293 | ], 3294 | "psr-4": { 3295 | "Symfony\\Component\\VarDumper\\": "" 3296 | }, 3297 | "exclude-from-classmap": [ 3298 | "/Tests/" 3299 | ] 3300 | }, 3301 | "notification-url": "https://packagist.org/downloads/", 3302 | "license": [ 3303 | "MIT" 3304 | ], 3305 | "authors": [ 3306 | { 3307 | "name": "Nicolas Grekas", 3308 | "email": "p@tchwork.com" 3309 | }, 3310 | { 3311 | "name": "Symfony Community", 3312 | "homepage": "https://symfony.com/contributors" 3313 | } 3314 | ], 3315 | "description": "Symfony mechanism for exploring and dumping PHP variables", 3316 | "homepage": "https://symfony.com", 3317 | "keywords": [ 3318 | "debug", 3319 | "dump" 3320 | ], 3321 | "time": "2016-08-31 09:05:42" 3322 | }, 3323 | { 3324 | "name": "symfony/yaml", 3325 | "version": "v3.1.4", 3326 | "source": { 3327 | "type": "git", 3328 | "url": "https://github.com/symfony/yaml.git", 3329 | "reference": "f291ed25eb1435bddbe8a96caaef16469c2a092d" 3330 | }, 3331 | "dist": { 3332 | "type": "zip", 3333 | "url": "https://api.github.com/repos/symfony/yaml/zipball/f291ed25eb1435bddbe8a96caaef16469c2a092d", 3334 | "reference": "f291ed25eb1435bddbe8a96caaef16469c2a092d", 3335 | "shasum": "" 3336 | }, 3337 | "require": { 3338 | "php": ">=5.5.9" 3339 | }, 3340 | "type": "library", 3341 | "extra": { 3342 | "branch-alias": { 3343 | "dev-master": "3.1-dev" 3344 | } 3345 | }, 3346 | "autoload": { 3347 | "psr-4": { 3348 | "Symfony\\Component\\Yaml\\": "" 3349 | }, 3350 | "exclude-from-classmap": [ 3351 | "/Tests/" 3352 | ] 3353 | }, 3354 | "notification-url": "https://packagist.org/downloads/", 3355 | "license": [ 3356 | "MIT" 3357 | ], 3358 | "authors": [ 3359 | { 3360 | "name": "Fabien Potencier", 3361 | "email": "fabien@symfony.com" 3362 | }, 3363 | { 3364 | "name": "Symfony Community", 3365 | "homepage": "https://symfony.com/contributors" 3366 | } 3367 | ], 3368 | "description": "Symfony Yaml Component", 3369 | "homepage": "https://symfony.com", 3370 | "time": "2016-09-02 02:12:52" 3371 | }, 3372 | { 3373 | "name": "vlucas/phpdotenv", 3374 | "version": "v2.4.0", 3375 | "source": { 3376 | "type": "git", 3377 | "url": "https://github.com/vlucas/phpdotenv.git", 3378 | "reference": "3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c" 3379 | }, 3380 | "dist": { 3381 | "type": "zip", 3382 | "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c", 3383 | "reference": "3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c", 3384 | "shasum": "" 3385 | }, 3386 | "require": { 3387 | "php": ">=5.3.9" 3388 | }, 3389 | "require-dev": { 3390 | "phpunit/phpunit": "^4.8 || ^5.0" 3391 | }, 3392 | "type": "library", 3393 | "extra": { 3394 | "branch-alias": { 3395 | "dev-master": "2.4-dev" 3396 | } 3397 | }, 3398 | "autoload": { 3399 | "psr-4": { 3400 | "Dotenv\\": "src/" 3401 | } 3402 | }, 3403 | "notification-url": "https://packagist.org/downloads/", 3404 | "license": [ 3405 | "BSD-3-Clause-Attribution" 3406 | ], 3407 | "authors": [ 3408 | { 3409 | "name": "Vance Lucas", 3410 | "email": "vance@vancelucas.com", 3411 | "homepage": "http://www.vancelucas.com" 3412 | } 3413 | ], 3414 | "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", 3415 | "keywords": [ 3416 | "dotenv", 3417 | "env", 3418 | "environment" 3419 | ], 3420 | "time": "2016-09-01 10:05:43" 3421 | }, 3422 | { 3423 | "name": "webmozart/assert", 3424 | "version": "1.1.0", 3425 | "source": { 3426 | "type": "git", 3427 | "url": "https://github.com/webmozart/assert.git", 3428 | "reference": "bb2d123231c095735130cc8f6d31385a44c7b308" 3429 | }, 3430 | "dist": { 3431 | "type": "zip", 3432 | "url": "https://api.github.com/repos/webmozart/assert/zipball/bb2d123231c095735130cc8f6d31385a44c7b308", 3433 | "reference": "bb2d123231c095735130cc8f6d31385a44c7b308", 3434 | "shasum": "" 3435 | }, 3436 | "require": { 3437 | "php": "^5.3.3|^7.0" 3438 | }, 3439 | "require-dev": { 3440 | "phpunit/phpunit": "^4.6", 3441 | "sebastian/version": "^1.0.1" 3442 | }, 3443 | "type": "library", 3444 | "extra": { 3445 | "branch-alias": { 3446 | "dev-master": "1.2-dev" 3447 | } 3448 | }, 3449 | "autoload": { 3450 | "psr-4": { 3451 | "Webmozart\\Assert\\": "src/" 3452 | } 3453 | }, 3454 | "notification-url": "https://packagist.org/downloads/", 3455 | "license": [ 3456 | "MIT" 3457 | ], 3458 | "authors": [ 3459 | { 3460 | "name": "Bernhard Schussek", 3461 | "email": "bschussek@gmail.com" 3462 | } 3463 | ], 3464 | "description": "Assertions to validate method input/output with nice error messages.", 3465 | "keywords": [ 3466 | "assert", 3467 | "check", 3468 | "validate" 3469 | ], 3470 | "time": "2016-08-09 15:02:57" 3471 | } 3472 | ], 3473 | "packages-dev": [ 3474 | { 3475 | "name": "fzaninotto/faker", 3476 | "version": "v1.6.0", 3477 | "source": { 3478 | "type": "git", 3479 | "url": "https://github.com/fzaninotto/Faker.git", 3480 | "reference": "44f9a286a04b80c76a4e5fb7aad8bb539b920123" 3481 | }, 3482 | "dist": { 3483 | "type": "zip", 3484 | "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/44f9a286a04b80c76a4e5fb7aad8bb539b920123", 3485 | "reference": "44f9a286a04b80c76a4e5fb7aad8bb539b920123", 3486 | "shasum": "" 3487 | }, 3488 | "require": { 3489 | "php": "^5.3.3|^7.0" 3490 | }, 3491 | "require-dev": { 3492 | "ext-intl": "*", 3493 | "phpunit/phpunit": "~4.0", 3494 | "squizlabs/php_codesniffer": "~1.5" 3495 | }, 3496 | "type": "library", 3497 | "extra": { 3498 | "branch-alias": [] 3499 | }, 3500 | "autoload": { 3501 | "psr-4": { 3502 | "Faker\\": "src/Faker/" 3503 | } 3504 | }, 3505 | "notification-url": "https://packagist.org/downloads/", 3506 | "license": [ 3507 | "MIT" 3508 | ], 3509 | "authors": [ 3510 | { 3511 | "name": "François Zaninotto" 3512 | } 3513 | ], 3514 | "description": "Faker is a PHP library that generates fake data for you.", 3515 | "keywords": [ 3516 | "data", 3517 | "faker", 3518 | "fixtures" 3519 | ], 3520 | "time": "2016-04-29 12:21:54" 3521 | }, 3522 | { 3523 | "name": "hamcrest/hamcrest-php", 3524 | "version": "v2.0.0", 3525 | "source": { 3526 | "type": "git", 3527 | "url": "https://github.com/hamcrest/hamcrest-php.git", 3528 | "reference": "776503d3a8e85d4f9a1148614f95b7a608b046ad" 3529 | }, 3530 | "dist": { 3531 | "type": "zip", 3532 | "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/776503d3a8e85d4f9a1148614f95b7a608b046ad", 3533 | "reference": "776503d3a8e85d4f9a1148614f95b7a608b046ad", 3534 | "shasum": "" 3535 | }, 3536 | "require": { 3537 | "php": "^5.3|^7.0" 3538 | }, 3539 | "replace": { 3540 | "cordoval/hamcrest-php": "*", 3541 | "davedevelopment/hamcrest-php": "*", 3542 | "kodova/hamcrest-php": "*" 3543 | }, 3544 | "require-dev": { 3545 | "phpunit/php-file-iterator": "1.3.3", 3546 | "phpunit/phpunit": "~4.0", 3547 | "satooshi/php-coveralls": "^1.0" 3548 | }, 3549 | "type": "library", 3550 | "extra": { 3551 | "branch-alias": { 3552 | "dev-master": "2.0-dev" 3553 | } 3554 | }, 3555 | "autoload": { 3556 | "classmap": [ 3557 | "hamcrest" 3558 | ] 3559 | }, 3560 | "notification-url": "https://packagist.org/downloads/", 3561 | "license": [ 3562 | "BSD" 3563 | ], 3564 | "description": "This is the PHP port of Hamcrest Matchers", 3565 | "keywords": [ 3566 | "test" 3567 | ], 3568 | "time": "2016-01-20 08:20:44" 3569 | }, 3570 | { 3571 | "name": "mockery/mockery", 3572 | "version": "dev-master", 3573 | "source": { 3574 | "type": "git", 3575 | "url": "https://github.com/padraic/mockery.git", 3576 | "reference": "ee06e7b564ea4dc9b90605d894c2626f87df334d" 3577 | }, 3578 | "dist": { 3579 | "type": "zip", 3580 | "url": "https://api.github.com/repos/padraic/mockery/zipball/ee06e7b564ea4dc9b90605d894c2626f87df334d", 3581 | "reference": "ee06e7b564ea4dc9b90605d894c2626f87df334d", 3582 | "shasum": "" 3583 | }, 3584 | "require": { 3585 | "hamcrest/hamcrest-php": "^2.0@dev", 3586 | "lib-pcre": ">=7.0", 3587 | "php": ">=5.4.0" 3588 | }, 3589 | "require-dev": { 3590 | "phpunit/phpunit": "~4.0" 3591 | }, 3592 | "type": "library", 3593 | "extra": { 3594 | "branch-alias": { 3595 | "dev-master": "1.0.x-dev" 3596 | } 3597 | }, 3598 | "autoload": { 3599 | "psr-0": { 3600 | "Mockery": "library/" 3601 | } 3602 | }, 3603 | "notification-url": "https://packagist.org/downloads/", 3604 | "license": [ 3605 | "BSD-3-Clause" 3606 | ], 3607 | "authors": [ 3608 | { 3609 | "name": "Pádraic Brady", 3610 | "email": "padraic.brady@gmail.com", 3611 | "homepage": "http://blog.astrumfutura.com" 3612 | }, 3613 | { 3614 | "name": "Dave Marshall", 3615 | "email": "dave.marshall@atstsolutions.co.uk", 3616 | "homepage": "http://davedevelopment.co.uk" 3617 | } 3618 | ], 3619 | "description": "Mockery is a simple yet flexible PHP mock object framework for use in unit testing with PHPUnit, PHPSpec or any other testing framework. Its core goal is to offer a test double framework with a succinct API capable of clearly defining all possible object operations and interactions using a human readable Domain Specific Language (DSL). Designed as a drop in alternative to PHPUnit's phpunit-mock-objects library, Mockery is easy to integrate with PHPUnit and can operate alongside phpunit-mock-objects without the World ending.", 3620 | "homepage": "http://github.com/padraic/mockery", 3621 | "keywords": [ 3622 | "BDD", 3623 | "TDD", 3624 | "library", 3625 | "mock", 3626 | "mock objects", 3627 | "mockery", 3628 | "stub", 3629 | "test", 3630 | "test double", 3631 | "testing" 3632 | ], 3633 | "time": "2016-07-06 09:05:19" 3634 | }, 3635 | { 3636 | "name": "orchestra/database", 3637 | "version": "v3.3.1", 3638 | "source": { 3639 | "type": "git", 3640 | "url": "https://github.com/orchestral/database.git", 3641 | "reference": "8832dde929f255650e58d33f3def75f7448cf80f" 3642 | }, 3643 | "dist": { 3644 | "type": "zip", 3645 | "url": "https://api.github.com/repos/orchestral/database/zipball/8832dde929f255650e58d33f3def75f7448cf80f", 3646 | "reference": "8832dde929f255650e58d33f3def75f7448cf80f", 3647 | "shasum": "" 3648 | }, 3649 | "require": { 3650 | "illuminate/contracts": "~5.3.0", 3651 | "illuminate/database": "~5.3.0", 3652 | "php": ">=5.6.0" 3653 | }, 3654 | "type": "library", 3655 | "extra": { 3656 | "branch-alias": { 3657 | "dev-master": "3.3-dev" 3658 | } 3659 | }, 3660 | "autoload": { 3661 | "psr-4": { 3662 | "Orchestra\\Database\\": "" 3663 | } 3664 | }, 3665 | "notification-url": "https://packagist.org/downloads/", 3666 | "license": [ 3667 | "MIT" 3668 | ], 3669 | "authors": [ 3670 | { 3671 | "name": "Mior Muhammad Zaki", 3672 | "email": "crynobone@gmail.com", 3673 | "homepage": "https://github.com/crynobone" 3674 | }, 3675 | { 3676 | "name": "Taylor Otwell", 3677 | "email": "taylorotwell@gmail.com", 3678 | "homepage": "https://github.com/taylorotwell" 3679 | } 3680 | ], 3681 | "description": "Database Component for Orchestra Platform", 3682 | "keywords": [ 3683 | "database", 3684 | "orchestra-platform", 3685 | "orchestral" 3686 | ], 3687 | "time": "2016-08-24 11:05:47" 3688 | }, 3689 | { 3690 | "name": "orchestra/testbench", 3691 | "version": "v3.3.1", 3692 | "source": { 3693 | "type": "git", 3694 | "url": "https://github.com/orchestral/testbench.git", 3695 | "reference": "d014926177799e2f0162d4d8338cd0283fd4a945" 3696 | }, 3697 | "dist": { 3698 | "type": "zip", 3699 | "url": "https://api.github.com/repos/orchestral/testbench/zipball/d014926177799e2f0162d4d8338cd0283fd4a945", 3700 | "reference": "d014926177799e2f0162d4d8338cd0283fd4a945", 3701 | "shasum": "" 3702 | }, 3703 | "require": { 3704 | "fzaninotto/faker": "~1.4", 3705 | "laravel/framework": "~5.3.3", 3706 | "orchestra/database": "~3.3.1", 3707 | "php": ">=5.6.0", 3708 | "symfony/css-selector": "3.1.*", 3709 | "symfony/dom-crawler": "3.1.*" 3710 | }, 3711 | "require-dev": { 3712 | "mockery/mockery": "^0.9.4", 3713 | "phpunit/phpunit": "~4.8|~5.0" 3714 | }, 3715 | "suggest": { 3716 | "phpunit/phpunit": "Allow to use PHPUnit for testing your Laravel Application/Package (~4.0|~5.0)." 3717 | }, 3718 | "type": "library", 3719 | "extra": { 3720 | "branch-alias": { 3721 | "dev-master": "3.3-dev" 3722 | } 3723 | }, 3724 | "autoload": { 3725 | "psr-4": { 3726 | "Orchestra\\Testbench\\": "src/" 3727 | } 3728 | }, 3729 | "notification-url": "https://packagist.org/downloads/", 3730 | "license": [ 3731 | "MIT" 3732 | ], 3733 | "authors": [ 3734 | { 3735 | "name": "Mior Muhammad Zaki", 3736 | "email": "crynobone@gmail.com", 3737 | "homepage": "https://github.com/crynobone" 3738 | } 3739 | ], 3740 | "description": "Laravel Package Unit Testing Helper", 3741 | "homepage": "http://orchestraplatform.com/docs/latest/components/testbench/", 3742 | "keywords": [ 3743 | "BDD", 3744 | "TDD", 3745 | "laravel", 3746 | "orchestra-platform", 3747 | "orchestral", 3748 | "testing" 3749 | ], 3750 | "time": "2016-08-28 22:51:46" 3751 | }, 3752 | { 3753 | "name": "squizlabs/php_codesniffer", 3754 | "version": "2.7.0", 3755 | "source": { 3756 | "type": "git", 3757 | "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", 3758 | "reference": "571e27b6348e5b3a637b2abc82ac0d01e6d7bbed" 3759 | }, 3760 | "dist": { 3761 | "type": "zip", 3762 | "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/571e27b6348e5b3a637b2abc82ac0d01e6d7bbed", 3763 | "reference": "571e27b6348e5b3a637b2abc82ac0d01e6d7bbed", 3764 | "shasum": "" 3765 | }, 3766 | "require": { 3767 | "ext-simplexml": "*", 3768 | "ext-tokenizer": "*", 3769 | "ext-xmlwriter": "*", 3770 | "php": ">=5.1.2" 3771 | }, 3772 | "require-dev": { 3773 | "phpunit/phpunit": "~4.0" 3774 | }, 3775 | "bin": [ 3776 | "scripts/phpcs", 3777 | "scripts/phpcbf" 3778 | ], 3779 | "type": "library", 3780 | "extra": { 3781 | "branch-alias": { 3782 | "dev-master": "2.x-dev" 3783 | } 3784 | }, 3785 | "autoload": { 3786 | "classmap": [ 3787 | "CodeSniffer.php", 3788 | "CodeSniffer/CLI.php", 3789 | "CodeSniffer/Exception.php", 3790 | "CodeSniffer/File.php", 3791 | "CodeSniffer/Fixer.php", 3792 | "CodeSniffer/Report.php", 3793 | "CodeSniffer/Reporting.php", 3794 | "CodeSniffer/Sniff.php", 3795 | "CodeSniffer/Tokens.php", 3796 | "CodeSniffer/Reports/", 3797 | "CodeSniffer/Tokenizers/", 3798 | "CodeSniffer/DocGenerators/", 3799 | "CodeSniffer/Standards/AbstractPatternSniff.php", 3800 | "CodeSniffer/Standards/AbstractScopeSniff.php", 3801 | "CodeSniffer/Standards/AbstractVariableSniff.php", 3802 | "CodeSniffer/Standards/IncorrectPatternException.php", 3803 | "CodeSniffer/Standards/Generic/Sniffs/", 3804 | "CodeSniffer/Standards/MySource/Sniffs/", 3805 | "CodeSniffer/Standards/PEAR/Sniffs/", 3806 | "CodeSniffer/Standards/PSR1/Sniffs/", 3807 | "CodeSniffer/Standards/PSR2/Sniffs/", 3808 | "CodeSniffer/Standards/Squiz/Sniffs/", 3809 | "CodeSniffer/Standards/Zend/Sniffs/" 3810 | ] 3811 | }, 3812 | "notification-url": "https://packagist.org/downloads/", 3813 | "license": [ 3814 | "BSD-3-Clause" 3815 | ], 3816 | "authors": [ 3817 | { 3818 | "name": "Greg Sherwood", 3819 | "role": "lead" 3820 | } 3821 | ], 3822 | "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", 3823 | "homepage": "http://www.squizlabs.com/php-codesniffer", 3824 | "keywords": [ 3825 | "phpcs", 3826 | "standards" 3827 | ], 3828 | "time": "2016-09-01 23:53:02" 3829 | }, 3830 | { 3831 | "name": "symfony/css-selector", 3832 | "version": "v3.1.4", 3833 | "source": { 3834 | "type": "git", 3835 | "url": "https://github.com/symfony/css-selector.git", 3836 | "reference": "2851e1932d77ce727776154d659b232d061e816a" 3837 | }, 3838 | "dist": { 3839 | "type": "zip", 3840 | "url": "https://api.github.com/repos/symfony/css-selector/zipball/2851e1932d77ce727776154d659b232d061e816a", 3841 | "reference": "2851e1932d77ce727776154d659b232d061e816a", 3842 | "shasum": "" 3843 | }, 3844 | "require": { 3845 | "php": ">=5.5.9" 3846 | }, 3847 | "type": "library", 3848 | "extra": { 3849 | "branch-alias": { 3850 | "dev-master": "3.1-dev" 3851 | } 3852 | }, 3853 | "autoload": { 3854 | "psr-4": { 3855 | "Symfony\\Component\\CssSelector\\": "" 3856 | }, 3857 | "exclude-from-classmap": [ 3858 | "/Tests/" 3859 | ] 3860 | }, 3861 | "notification-url": "https://packagist.org/downloads/", 3862 | "license": [ 3863 | "MIT" 3864 | ], 3865 | "authors": [ 3866 | { 3867 | "name": "Jean-François Simon", 3868 | "email": "jeanfrancois.simon@sensiolabs.com" 3869 | }, 3870 | { 3871 | "name": "Fabien Potencier", 3872 | "email": "fabien@symfony.com" 3873 | }, 3874 | { 3875 | "name": "Symfony Community", 3876 | "homepage": "https://symfony.com/contributors" 3877 | } 3878 | ], 3879 | "description": "Symfony CssSelector Component", 3880 | "homepage": "https://symfony.com", 3881 | "time": "2016-06-29 05:41:56" 3882 | }, 3883 | { 3884 | "name": "symfony/dom-crawler", 3885 | "version": "v3.1.4", 3886 | "source": { 3887 | "type": "git", 3888 | "url": "https://github.com/symfony/dom-crawler.git", 3889 | "reference": "bb7395e8b1db3654de82b9f35d019958276de4d7" 3890 | }, 3891 | "dist": { 3892 | "type": "zip", 3893 | "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/bb7395e8b1db3654de82b9f35d019958276de4d7", 3894 | "reference": "bb7395e8b1db3654de82b9f35d019958276de4d7", 3895 | "shasum": "" 3896 | }, 3897 | "require": { 3898 | "php": ">=5.5.9", 3899 | "symfony/polyfill-mbstring": "~1.0" 3900 | }, 3901 | "require-dev": { 3902 | "symfony/css-selector": "~2.8|~3.0" 3903 | }, 3904 | "suggest": { 3905 | "symfony/css-selector": "" 3906 | }, 3907 | "type": "library", 3908 | "extra": { 3909 | "branch-alias": { 3910 | "dev-master": "3.1-dev" 3911 | } 3912 | }, 3913 | "autoload": { 3914 | "psr-4": { 3915 | "Symfony\\Component\\DomCrawler\\": "" 3916 | }, 3917 | "exclude-from-classmap": [ 3918 | "/Tests/" 3919 | ] 3920 | }, 3921 | "notification-url": "https://packagist.org/downloads/", 3922 | "license": [ 3923 | "MIT" 3924 | ], 3925 | "authors": [ 3926 | { 3927 | "name": "Fabien Potencier", 3928 | "email": "fabien@symfony.com" 3929 | }, 3930 | { 3931 | "name": "Symfony Community", 3932 | "homepage": "https://symfony.com/contributors" 3933 | } 3934 | ], 3935 | "description": "Symfony DomCrawler Component", 3936 | "homepage": "https://symfony.com", 3937 | "time": "2016-08-05 08:37:39" 3938 | } 3939 | ], 3940 | "aliases": [], 3941 | "minimum-stability": "stable", 3942 | "stability-flags": { 3943 | "mockery/mockery": 20 3944 | }, 3945 | "prefer-stable": false, 3946 | "prefer-lowest": false, 3947 | "platform": { 3948 | "php": ">=5.6.4" 3949 | }, 3950 | "platform-dev": [] 3951 | } 3952 | --------------------------------------------------------------------------------