├── messages ├── zh-CN │ └── messages.php ├── ar │ └── messages.php ├── es │ └── messages.php ├── fa-IR │ └── messages.php ├── fr-CH │ └── messages.php ├── de-CH │ └── messages.php ├── ru-RU │ └── messages.php └── message.php ├── phpunit.xml.dist ├── tests ├── AtLeastValidatorTestPHP56.php ├── AtLeastValidatorTestPHP7.php ├── bootstrap.php ├── FakeModel.php └── TemporaryTraitsForTests.php ├── .gitignore ├── NOTICE ├── .github └── ISSUE_TEMPLATE │ ├── Feature_request.md │ └── Bug_report.md ├── .travis.yml ├── composer.json ├── README.md ├── AtLeastValidator.php ├── LICENSE └── composer.lock /messages/zh-CN/messages.php: -------------------------------------------------------------------------------- 1 | '在 {attributes} 这些字段中 你必须至少填 {min} 个属性的值.', 5 | ' or ' => ' 或者 ', 6 | ]; 7 | -------------------------------------------------------------------------------- /phpunit.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | tests 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /messages/ar/messages.php: -------------------------------------------------------------------------------- 1 | 'يجب عليك ملء {min} من الحفول التالية {attributes} على الأقل', 5 | ' or ' => ' أو ', 6 | ]; 7 | 8 | -------------------------------------------------------------------------------- /messages/es/messages.php: -------------------------------------------------------------------------------- 1 | 'Se debe completar al menos {min} de los campos {attributes}.', 5 | ' or ' => ' o ', 6 | ]; 7 | 8 | -------------------------------------------------------------------------------- /messages/fa-IR/messages.php: -------------------------------------------------------------------------------- 1 | 'لازم است حداقل {min} از گزینه های {attributes} پر شود.', 5 | ' or ' => ' یا ', 6 | ]; 7 | 8 | -------------------------------------------------------------------------------- /messages/fr-CH/messages.php: -------------------------------------------------------------------------------- 1 | 'Au moins {min} des attributs {attributes} doit être rempli.', 5 | ' or ' => ' ou ', 6 | ]; 7 | 8 | -------------------------------------------------------------------------------- /messages/de-CH/messages.php: -------------------------------------------------------------------------------- 1 | 'Mindestens {min} der Attribute {attributes} müssen ausgefüllt werden.', 5 | ' or ' => ' oder ', 6 | ]; 7 | 8 | -------------------------------------------------------------------------------- /messages/ru-RU/messages.php: -------------------------------------------------------------------------------- 1 | 'Вы должны заполнить хотя бы {min} из следующих полей: {attributes}.', 5 | ' or ' => ' или ', 6 | ]; 7 | 8 | -------------------------------------------------------------------------------- /tests/AtLeastValidatorTestPHP56.php: -------------------------------------------------------------------------------- 1 | 'testing-app', 'basePath' => dirname(__DIR__)]); 11 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # yii console command 2 | /yii 3 | 4 | # phpstorm project files 5 | .idea 6 | 7 | # netbeans project files 8 | nbproject 9 | 10 | # zend studio for eclipse project files 11 | .buildpath 12 | .project 13 | .settings 14 | 15 | # windows thumbnail cache 16 | Thumbs.db 17 | 18 | # composer vendor dir 19 | /vendor 20 | 21 | # composer itself is not needed 22 | composer.phar 23 | 24 | # Mac DS_Store Files 25 | .DS_Store 26 | 27 | # phpunit itself is not needed 28 | phpunit.phar 29 | # local phpunit config 30 | /phpunit.xml 31 | -------------------------------------------------------------------------------- /tests/FakeModel.php: -------------------------------------------------------------------------------- 1 | $attr = null; 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /messages/message.php: -------------------------------------------------------------------------------- 1 | __DIR__ . '/../', 5 | 'messagePath' => __DIR__, 6 | 'languages' => [ 7 | 'es', 8 | 'zh-CN', 9 | ], 10 | 'translator' => 'Yii::t', 11 | 'sort' => false, 12 | 'overwrite' => true, 13 | 'removeUnused' => false, 14 | 'only' => ['*.php'], 15 | 'except' => [ 16 | '.svn', 17 | '.git', 18 | '.gitignore', 19 | '.gitkeep', 20 | '.hgignore', 21 | '.hgkeep', 22 | '/messages', 23 | '/tests', 24 | '/vendor', 25 | ], 26 | 'format' => 'php', 27 | ]; 28 | -------------------------------------------------------------------------------- /NOTICE: -------------------------------------------------------------------------------- 1 | Copyright 2016 Sidney da Silva Lins slinstj@gmail.com 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. 14 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/Feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | 5 | --- 6 | 7 | **Is your feature request related to a problem? Please describe.** 8 | [A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]] 9 | 10 | **Describe the solution you'd like** 11 | [A clear and concise description of what you want to happen.] 12 | 13 | **Describe alternatives you've considered** 14 | [A clear and concise description of any alternative solutions or features you've considered.] 15 | 16 | **Additional context** 17 | [Add any other context or screenshots about the feature request here.] 18 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/Bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | 5 | --- 6 | 7 | **Describe the bug** 8 | [A clear and concise description of what the bug is.] 9 | 10 | **To Reproduce** 11 | [Steps to reproduce the behavior:] 12 | 1. Go to '...' 13 | 2. Click on '....' 14 | 3. Scroll down to '....' 15 | 4. See error 16 | 17 | **Expected behavior** 18 | [A clear and concise description of what you expected to happen.] 19 | 20 | **Screenshots** 21 | [If applicable, add screenshots to help explain your problem.] 22 | 23 | **Additional Information (please complete the following information):** 24 | - Extension version [e.g. 1.2.4] 25 | - Yii version [e.g. 2.0.15.1] 26 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: php 2 | 3 | matrix: 4 | include: 5 | - php: 5.6 6 | env: 7 | - COMPOSERARGS="require --dev phpunit/phpunit:5.7.27" 8 | - TESTFILE="tests/AtLeastValidatorTestPHP56.php" 9 | - php: 7.0 10 | env: 11 | - COMPOSERARGS="require --dev phpunit/phpunit:5.7.27" 12 | - TESTFILE="tests/AtLeastValidatorTestPHP56.php" 13 | - php: 7.1 14 | env: 15 | - COMPOSERARGS="install" 16 | - TESTFILE="tests/AtLeastValidatorTestPHP7.php" 17 | - php: 7.2 18 | env: 19 | - COMPOSERARGS="install" 20 | - TESTFILE="tests/AtLeastValidatorTestPHP7.php" 21 | 22 | install: 23 | - rm -f composer.lock 24 | - composer self-update 25 | - composer $COMPOSERARGS 26 | 27 | script: 28 | - composer show yiisoft/yii2 29 | - ./vendor/phpunit/phpunit/phpunit --version 30 | - ./vendor/phpunit/phpunit/phpunit $TESTFILE 31 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "codeonyii/yii2-at-least-validator", 3 | "description": "Validates at least one (or more) attributes.", 4 | "type": "yii2-extension", 5 | "keywords": ["yii2","validator","at least","validation"], 6 | "homepage": "https://github.com/code-on-yii/yii2-at-least-validator", 7 | "license": "Apache-2.0", 8 | "authors": [ 9 | { 10 | "name": "Sidney Lins", 11 | "email": "slinstj@gmail.com" 12 | } 13 | ], 14 | "require": { 15 | "php": ">=5.6", 16 | "yiisoft/yii2": "~2.0.5" 17 | }, 18 | "require-dev": { 19 | "phpunit/phpunit": "6.5.8" 20 | }, 21 | "repositories": [ 22 | { 23 | "type": "composer", 24 | "url": "https://asset-packagist.org" 25 | } 26 | ], 27 | "autoload": { 28 | "psr-4": { 29 | "codeonyii\\yii2validators\\": "" 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Yii 2 - AtLeastValidator 2 | 3 | [![Latest Stable Version](https://poser.pugx.org/codeonyii/yii2-at-least-validator/v/stable)](https://packagist.org/packages/codeonyii/yii2-at-least-validator) 4 | [![Total Downloads](https://img.shields.io/packagist/dt/codeonyii/yii2-at-least-validator.svg)](https://packagist.org/packages/codeonyii/yii2-at-least-validator) 5 | [![Build Status](https://travis-ci.org/slinstj/yii2-at-least-validator.svg?branch=master)](https://travis-ci.org/slinstj/yii2-at-least-validator) 6 | [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/slinstj/yii2-at-least-validator/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/slinstj/yii2-at-least-validator/?branch=master) 7 | [![CodeFactor](https://www.codefactor.io/repository/github/slinstj/yii2-at-least-validator/badge)](https://www.codefactor.io/repository/github/slinstj/yii2-at-least-validator) 8 | 9 | Sometimes, in a set of fields, you need to make at least one of them 10 | (sometimes two, or more) be filled. For example, phone OR e-mail, 11 | (facebook OR linkedin) OR (linkedin OR instagram) and so on. You can do 12 | it using required validator with a bunch of conditional rules. Or you can 13 | use AtLeastValidator. 14 | 15 | ## Installation 16 | 17 | Use composer: 18 | 19 | ```php 20 | composer require "codeonyii/yii2-at-least-validator" 21 | ``` 22 | In your Model, import the validator: 23 | ```php 24 | use codeonyii\yii2validators\AtLeastValidator; 25 | 26 | class MyModel extends Model 27 | { 28 | ... 29 | public function rules() 30 | { 31 | // see examples below 32 | } 33 | ... 34 | ``` 35 | 36 | ## Examples 37 | 38 | In the following example, the `phone` and `email` attributes will 39 | be verified. If none of them are filled `phone` will receive an error. 40 | Please, note that `in` param is always mandatory. 41 | 42 | ```php 43 | // in rules() 44 | return [ 45 | ['phone', AtLeastValidator::className(), 'in' => ['phone', 'email']], 46 | ]; 47 | ``` 48 | 49 | Here, `facebook`, `linkedin` and `instagram` attributes will 50 | be verified. If at least 2 (note the `min` param) of them are not filled, 51 | `facebook` and `instagram` will receive an error: 52 | 53 | ```php 54 | // in rules() 55 | return [ 56 | [['facebook', 'instagram'], AtLeastValidator::className(), 'in' => ['facebook', 'linkedin', 'instagram'], 'min' => 2], 57 | ]; 58 | ``` 59 | 60 | ### Showing errors in summary 61 | 62 | If you want to show errors in a summary instead in the own attributes, you can do this: 63 | 64 | *Note that summary will **not** work for client-side validation. If you want 65 | to use it, you should disable the client-side validation for your fields 66 | or for your entire form.* 67 | 68 | ```php 69 | // in the rules() 70 | // please note the exclamation mark. It will avoid the pk attribute to be massively assigned. 71 | return [ 72 | ['!id', AtLeastValidator::className(), 'in' => ['attr1', 'attr2', 'attr3']], // where `id` is the pk 73 | ]; 74 | 75 | // in the view, show all errors in the summary: 76 | ... 77 | echo yii\helpers\Html::errorSummary($model, ['class' => ['text-danger']]); 78 | 79 | // OR, to show only `id` errors: 80 | echo yii\helpers\Html::error($model, 'id', ['class' => ['text-danger']]); 81 | ``` 82 | 83 | ## Changelog 84 | 85 | Please, access [Releases](https://github.com/code-on-yii/yii2-at-least-validator/releases) to see versions with a some description. 86 | -------------------------------------------------------------------------------- /tests/TemporaryTraitsForTests.php: -------------------------------------------------------------------------------- 1 | assertInstanceOf('yii\base\InvalidConfigException', $e, 'Parameter `in` is required.'); 28 | } 29 | 30 | try { 31 | new AtLeastValidator(['in' => 'attr1']); 32 | } catch (\Exception $e) { 33 | $this->assertInstanceOf('yii\base\InvalidConfigException', $e, 'Parameter `in` should have at least 2 attributes.'); 34 | } 35 | } 36 | 37 | public function testWrongData() 38 | { 39 | $v = new AtLeastValidator(['in' => 'attr1, attr2, attr3']); 40 | $m = new FakeModel(); 41 | 42 | $v->validateAttribute($m, 'attr1'); 43 | $this->assertCount(1, $m->getErrors()); 44 | $this->assertTrue($m->hasErrors('attr1')); 45 | $this->assertFalse($m->hasErrors('attr2')); 46 | $this->assertFalse($m->hasErrors('attr3')); 47 | 48 | $v->validateAttribute($m, 'attr1, attr2'); 49 | $this->assertCount(2, $m->getErrors()); 50 | } 51 | 52 | public function testProperData() 53 | { 54 | $v = new AtLeastValidator(['in' => 'attr1, attr2, attr3']); 55 | $m = new FakeModel(); 56 | 57 | $m->attr1 = 'something'; 58 | $v->validateAttribute($m, 'attr1'); 59 | $this->assertCount(0, $m->getErrors(), 'Should not exist errors in attr1'); 60 | 61 | $m->resetData(); 62 | $m->attr2 = 'something'; 63 | $v->validateAttribute($m, 'attr1'); 64 | $this->assertCount(0, $m->getErrors(), 'Should not exist errors in attr1'); 65 | 66 | $m->resetData(); 67 | $m->attr3 = 'something'; 68 | $v->validateAttribute($m, 'attr1'); 69 | $this->assertCount(0, $m->getErrors(), 'Should not exist errors in attr1'); 70 | 71 | $m->resetData(); 72 | $m->attr1 = 'something'; 73 | $m->attr2 = 'something'; 74 | $v->validateAttribute($m, 'attr1'); 75 | $this->assertCount(0, $m->getErrors(), 'Should not exist errors in attr1'); 76 | 77 | $m->resetData(); 78 | $m->attr2 = 'something'; 79 | $m->attr3 = 'something'; 80 | $v->validateAttribute($m, 'attr1'); 81 | $this->assertCount(0, $m->getErrors(), 'Should not exist errors in attr1'); 82 | } 83 | 84 | public function testErrorMessages() 85 | { 86 | $v = new AtLeastValidator(['in' => 'attr1, attr2, attr3']); 87 | $m = new FakeModel(); 88 | 89 | $v->validateAttribute($m, 'attr1'); 90 | $this->assertEquals('You must fill at least 1 of the attributes "Attr1", "Attr2", "Attr3".', $m->getFirstError('attr1')); 91 | 92 | $m->clearErrors(); 93 | $v->min = 2; 94 | $v->validateAttribute($m, 'attr1'); 95 | $this->assertEquals('You must fill at least 2 of the attributes "Attr1", "Attr2", "Attr3".', $m->getFirstError('attr1')); 96 | } 97 | 98 | public function testMinParam() 99 | { 100 | $v = new AtLeastValidator(['in' => 'attr1, attr2, attr3']); 101 | $m = new FakeModel(); 102 | 103 | // min = 1; 104 | $v->validateAttribute($m, 'attr1'); 105 | $this->assertCount(1, $m->getErrors()); 106 | 107 | $m->clearErrors(); 108 | $v->min = 2; 109 | $m->attr1 = 'something'; 110 | $v->validateAttribute($m, 'attr1'); 111 | $this->assertCount(1, $m->getErrors(), 'Should have an error since min = 2'); 112 | } 113 | } -------------------------------------------------------------------------------- /AtLeastValidator.php: -------------------------------------------------------------------------------- 1 | ['attr1', 'attr2']], 20 | * ]; 21 | * ~~~ 22 | * 23 | * In the following example, the `attr1`, `attr2` and `attr3` attributes will 24 | * be verified. If at least 2 (`min`) of them are not filled, `attr1` will 25 | * receive an error: 26 | * 27 | * ~~~[php] 28 | * // in rules() 29 | * return [ 30 | * ['attr1', AtLeastValidator::className(), 'min' => 2, 'in' => ['attr1', 'attr2', 'attr3']], 31 | * ]; 32 | * ~~~ 33 | * 34 | * If you want to show errors in a summary instead in the own attributes, you can do this: 35 | * ~~~[php] 36 | * // in rules() 37 | * return [ 38 | * ['!id', AtLeastValidator::className(), 'in' => ['attr1', 'attr2', 'attr3']], // where `id` is the pk 39 | * ]; 40 | * 41 | * // view: 42 | * ... 43 | * echo yii\helpers\Html::errorSummary($model, ['class' => ['text-danger']]); 44 | * // OR, to show only `id` errors: 45 | * echo yii\helpers\Html::error($model, 'id', ['class' => ['text-danger']]); 46 | * ~~~ 47 | * 48 | * 49 | * @author Sidney Lins 50 | */ 51 | class AtLeastValidator extends Validator 52 | { 53 | /** 54 | * @var integer the minimun required quantity of attributes that must to be filled. 55 | * Defaults to 1. 56 | */ 57 | public $min = 1; 58 | 59 | /** 60 | * @var string|array the list of attributes that should receive the error message. Required. 61 | */ 62 | public $in; 63 | 64 | /** 65 | * @inheritdoc 66 | */ 67 | public $skipOnEmpty = false; 68 | 69 | /** 70 | * @inheritdoc 71 | */ 72 | public $skipOnError = false; 73 | 74 | /** 75 | * @inheritdoc 76 | */ 77 | public function init() 78 | { 79 | parent::init(); 80 | if ($this->in === null) { 81 | throw new InvalidConfigException('The `in` parameter is required.'); 82 | } elseif (! is_array($this->in) && count(preg_split('/\s*,\s*/', $this->in, -1, PREG_SPLIT_NO_EMPTY)) <= 1) { 83 | throw new InvalidConfigException('The `in` parameter must have at least 2 attributes.'); 84 | } 85 | if (!isset(Yii::$app->get('i18n')->translations['message*'])) { 86 | Yii::$app->get('i18n')->translations['message*'] = [ 87 | 'class' => PhpMessageSource::className(), 88 | 'basePath' => __DIR__ . '/messages', 89 | 'sourceLanguage' => 'en-US' 90 | ]; 91 | } 92 | if ($this->message === null) { 93 | $this->message = Yii::t('messages', 'You must fill at least {min} of the attributes {attributes}.'); 94 | } 95 | } 96 | 97 | /** 98 | * @inheritdoc 99 | */ 100 | public function validateAttribute($model, $attribute) 101 | { 102 | $attributes = is_array($this->in) ? $this->in : preg_split('/\s*,\s*/', $this->in, -1, PREG_SPLIT_NO_EMPTY); 103 | $chosen = 0; 104 | 105 | foreach ($attributes as $attributeName) { 106 | $value = $model->$attributeName; 107 | $attributesListLabels[] = '"' . $model->getAttributeLabel($attributeName). '"'; 108 | $chosen += !empty($value) ? 1 : 0; 109 | } 110 | 111 | if (!$chosen || $chosen < $this->min) { 112 | $attributesList = implode(', ', $attributesListLabels); 113 | $message = strtr($this->message, [ 114 | '{min}' => $this->min, 115 | '{attributes}' => $attributesList, 116 | ]); 117 | $model->addError($attribute, $message); 118 | } 119 | } 120 | 121 | /** 122 | * @inheritdoc 123 | * @since: 1.1 124 | */ 125 | public function clientValidateAttribute($model, $attribute, $view) 126 | { 127 | $attributes = is_array($this->in) ? $this->in : preg_split('/\s*,\s*/', $this->in, -1, PREG_SPLIT_NO_EMPTY); 128 | $attributes = array_map('strtolower',$attributes); // yii lowercases attributes 129 | $attributesJson = json_encode($attributes); 130 | 131 | $attributesLabels = []; 132 | foreach ($attributes as $attr) { 133 | $attributesLabels[] = '"' . addcslashes($model->getAttributeLabel($attr), "'") . '"'; 134 | } 135 | $message = strtr($this->message, [ 136 | '{min}' => $this->min, 137 | '{attributes}' => implode(Yii::t('messages', ' or '), $attributesLabels), 138 | ]); 139 | 140 | $form = $model->formName(); 141 | 142 | return <<min) { 157 | messages.push('$message'); 158 | } else { 159 | $.each(atributes, function(key, attr){ 160 | var attrId = formName.toLowerCase() + '-' + attr; 161 | if($('#' + attrId).length == 0){ 162 | attrId = $("[name=\""+formName + '[' + attr + ']'+"\"]").attr('id'); 163 | } 164 | 165 | \$form.yiiActiveForm('updateAttribute', attrId, ''); 166 | }); 167 | } 168 | } 169 | atLeastValidator(); 170 | JS; 171 | } 172 | } 173 | 174 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | -------------------------------------------------------------------------------- /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#installing-dependencies", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "f7e90e61a777e2e01be35ab0380d1004", 8 | "packages": [ 9 | { 10 | "name": "bower-asset/inputmask", 11 | "version": "3.3.11", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/RobinHerbots/Inputmask.git", 15 | "reference": "5e670ad62f50c738388d4dcec78d2888505ad77b" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/RobinHerbots/Inputmask/zipball/5e670ad62f50c738388d4dcec78d2888505ad77b", 20 | "reference": "5e670ad62f50c738388d4dcec78d2888505ad77b", 21 | "shasum": null 22 | }, 23 | "require": { 24 | "bower-asset/jquery": ">=1.7" 25 | }, 26 | "type": "bower-asset", 27 | "license": [ 28 | "http://opensource.org/licenses/mit-license.php" 29 | ] 30 | }, 31 | { 32 | "name": "bower-asset/jquery", 33 | "version": "3.2.1", 34 | "source": { 35 | "type": "git", 36 | "url": "https://github.com/jquery/jquery-dist.git", 37 | "reference": "77d2a51d0520d2ee44173afdf4e40a9201f5964e" 38 | }, 39 | "dist": { 40 | "type": "zip", 41 | "url": "https://api.github.com/repos/jquery/jquery-dist/zipball/77d2a51d0520d2ee44173afdf4e40a9201f5964e", 42 | "reference": "77d2a51d0520d2ee44173afdf4e40a9201f5964e", 43 | "shasum": null 44 | }, 45 | "type": "bower-asset", 46 | "license": [ 47 | "MIT" 48 | ] 49 | }, 50 | { 51 | "name": "bower-asset/punycode", 52 | "version": "v1.3.2", 53 | "source": { 54 | "type": "git", 55 | "url": "https://github.com/bestiejs/punycode.js.git", 56 | "reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3" 57 | }, 58 | "dist": { 59 | "type": "zip", 60 | "url": "https://api.github.com/repos/bestiejs/punycode.js/zipball/38c8d3131a82567bfef18da09f7f4db68c84f8a3", 61 | "reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3", 62 | "shasum": null 63 | }, 64 | "type": "bower-asset" 65 | }, 66 | { 67 | "name": "bower-asset/yii2-pjax", 68 | "version": "2.0.7.1", 69 | "source": { 70 | "type": "git", 71 | "url": "git@github.com:yiisoft/jquery-pjax.git", 72 | "reference": "aef7b953107264f00234902a3880eb50dafc48be" 73 | }, 74 | "dist": { 75 | "type": "zip", 76 | "url": "https://api.github.com/repos/yiisoft/jquery-pjax/zipball/aef7b953107264f00234902a3880eb50dafc48be", 77 | "reference": "aef7b953107264f00234902a3880eb50dafc48be", 78 | "shasum": null 79 | }, 80 | "require": { 81 | "bower-asset/jquery": ">=1.8" 82 | }, 83 | "type": "bower-asset", 84 | "license": [ 85 | "MIT" 86 | ] 87 | }, 88 | { 89 | "name": "cebe/markdown", 90 | "version": "1.1.2", 91 | "source": { 92 | "type": "git", 93 | "url": "https://github.com/cebe/markdown.git", 94 | "reference": "25b28bae8a6f185b5030673af77b32e1163d5c6e" 95 | }, 96 | "dist": { 97 | "type": "zip", 98 | "url": "https://api.github.com/repos/cebe/markdown/zipball/25b28bae8a6f185b5030673af77b32e1163d5c6e", 99 | "reference": "25b28bae8a6f185b5030673af77b32e1163d5c6e", 100 | "shasum": "" 101 | }, 102 | "require": { 103 | "lib-pcre": "*", 104 | "php": ">=5.4.0" 105 | }, 106 | "require-dev": { 107 | "cebe/indent": "*", 108 | "facebook/xhprof": "*@dev", 109 | "phpunit/phpunit": "4.1.*" 110 | }, 111 | "bin": [ 112 | "bin/markdown" 113 | ], 114 | "type": "library", 115 | "extra": { 116 | "branch-alias": { 117 | "dev-master": "1.1.x-dev" 118 | } 119 | }, 120 | "autoload": { 121 | "psr-4": { 122 | "cebe\\markdown\\": "" 123 | } 124 | }, 125 | "notification-url": "https://packagist.org/downloads/", 126 | "license": [ 127 | "MIT" 128 | ], 129 | "authors": [ 130 | { 131 | "name": "Carsten Brandt", 132 | "email": "mail@cebe.cc", 133 | "homepage": "http://cebe.cc/", 134 | "role": "Creator" 135 | } 136 | ], 137 | "description": "A super fast, highly extensible markdown parser for PHP", 138 | "homepage": "https://github.com/cebe/markdown#readme", 139 | "keywords": [ 140 | "extensible", 141 | "fast", 142 | "gfm", 143 | "markdown", 144 | "markdown-extra" 145 | ], 146 | "time": "2017-07-16T21:13:23+00:00" 147 | }, 148 | { 149 | "name": "ezyang/htmlpurifier", 150 | "version": "v4.10.0", 151 | "source": { 152 | "type": "git", 153 | "url": "https://github.com/ezyang/htmlpurifier.git", 154 | "reference": "d85d39da4576a6934b72480be6978fb10c860021" 155 | }, 156 | "dist": { 157 | "type": "zip", 158 | "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/d85d39da4576a6934b72480be6978fb10c860021", 159 | "reference": "d85d39da4576a6934b72480be6978fb10c860021", 160 | "shasum": "" 161 | }, 162 | "require": { 163 | "php": ">=5.2" 164 | }, 165 | "require-dev": { 166 | "simpletest/simpletest": "^1.1" 167 | }, 168 | "type": "library", 169 | "autoload": { 170 | "psr-0": { 171 | "HTMLPurifier": "library/" 172 | }, 173 | "files": [ 174 | "library/HTMLPurifier.composer.php" 175 | ] 176 | }, 177 | "notification-url": "https://packagist.org/downloads/", 178 | "license": [ 179 | "LGPL" 180 | ], 181 | "authors": [ 182 | { 183 | "name": "Edward Z. Yang", 184 | "email": "admin@htmlpurifier.org", 185 | "homepage": "http://ezyang.com" 186 | } 187 | ], 188 | "description": "Standards compliant HTML filter written in PHP", 189 | "homepage": "http://htmlpurifier.org/", 190 | "keywords": [ 191 | "html" 192 | ], 193 | "time": "2018-02-23T01:58:20+00:00" 194 | }, 195 | { 196 | "name": "yiisoft/yii2", 197 | "version": "2.0.15.1", 198 | "source": { 199 | "type": "git", 200 | "url": "https://github.com/yiisoft/yii2-framework.git", 201 | "reference": "ed3a9e1c4abe206e1c3ce48a6b3624119b79850d" 202 | }, 203 | "dist": { 204 | "type": "zip", 205 | "url": "https://api.github.com/repos/yiisoft/yii2-framework/zipball/ed3a9e1c4abe206e1c3ce48a6b3624119b79850d", 206 | "reference": "ed3a9e1c4abe206e1c3ce48a6b3624119b79850d", 207 | "shasum": "" 208 | }, 209 | "require": { 210 | "bower-asset/inputmask": "~3.2.2 | ~3.3.5", 211 | "bower-asset/jquery": "3.2.*@stable | 3.1.*@stable | 2.2.*@stable | 2.1.*@stable | 1.11.*@stable | 1.12.*@stable", 212 | "bower-asset/punycode": "1.3.*", 213 | "bower-asset/yii2-pjax": "~2.0.1", 214 | "cebe/markdown": "~1.0.0 | ~1.1.0", 215 | "ext-ctype": "*", 216 | "ext-mbstring": "*", 217 | "ezyang/htmlpurifier": "~4.6", 218 | "lib-pcre": "*", 219 | "php": ">=5.4.0", 220 | "yiisoft/yii2-composer": "~2.0.4" 221 | }, 222 | "bin": [ 223 | "yii" 224 | ], 225 | "type": "library", 226 | "extra": { 227 | "branch-alias": { 228 | "dev-master": "2.0.x-dev" 229 | } 230 | }, 231 | "autoload": { 232 | "psr-4": { 233 | "yii\\": "" 234 | } 235 | }, 236 | "notification-url": "https://packagist.org/downloads/", 237 | "license": [ 238 | "BSD-3-Clause" 239 | ], 240 | "authors": [ 241 | { 242 | "name": "Qiang Xue", 243 | "email": "qiang.xue@gmail.com", 244 | "homepage": "http://www.yiiframework.com/", 245 | "role": "Founder and project lead" 246 | }, 247 | { 248 | "name": "Alexander Makarov", 249 | "email": "sam@rmcreative.ru", 250 | "homepage": "http://rmcreative.ru/", 251 | "role": "Core framework development" 252 | }, 253 | { 254 | "name": "Maurizio Domba", 255 | "homepage": "http://mdomba.info/", 256 | "role": "Core framework development" 257 | }, 258 | { 259 | "name": "Carsten Brandt", 260 | "email": "mail@cebe.cc", 261 | "homepage": "http://cebe.cc/", 262 | "role": "Core framework development" 263 | }, 264 | { 265 | "name": "Timur Ruziev", 266 | "email": "resurtm@gmail.com", 267 | "homepage": "http://resurtm.com/", 268 | "role": "Core framework development" 269 | }, 270 | { 271 | "name": "Paul Klimov", 272 | "email": "klimov.paul@gmail.com", 273 | "role": "Core framework development" 274 | }, 275 | { 276 | "name": "Dmitry Naumenko", 277 | "email": "d.naumenko.a@gmail.com", 278 | "role": "Core framework development" 279 | }, 280 | { 281 | "name": "Boudewijn Vahrmeijer", 282 | "email": "info@dynasource.eu", 283 | "homepage": "http://dynasource.eu", 284 | "role": "Core framework development" 285 | } 286 | ], 287 | "description": "Yii PHP Framework Version 2", 288 | "homepage": "http://www.yiiframework.com/", 289 | "keywords": [ 290 | "framework", 291 | "yii2" 292 | ], 293 | "time": "2018-03-21T18:36:53+00:00" 294 | }, 295 | { 296 | "name": "yiisoft/yii2-composer", 297 | "version": "2.0.6", 298 | "source": { 299 | "type": "git", 300 | "url": "https://github.com/yiisoft/yii2-composer.git", 301 | "reference": "163419f1f197e02f015713b0d4f85598d8f8aa80" 302 | }, 303 | "dist": { 304 | "type": "zip", 305 | "url": "https://api.github.com/repos/yiisoft/yii2-composer/zipball/163419f1f197e02f015713b0d4f85598d8f8aa80", 306 | "reference": "163419f1f197e02f015713b0d4f85598d8f8aa80", 307 | "shasum": "" 308 | }, 309 | "require": { 310 | "composer-plugin-api": "^1.0" 311 | }, 312 | "require-dev": { 313 | "composer/composer": "^1.0" 314 | }, 315 | "type": "composer-plugin", 316 | "extra": { 317 | "class": "yii\\composer\\Plugin", 318 | "branch-alias": { 319 | "dev-master": "2.0.x-dev" 320 | } 321 | }, 322 | "autoload": { 323 | "psr-4": { 324 | "yii\\composer\\": "" 325 | } 326 | }, 327 | "notification-url": "https://packagist.org/downloads/", 328 | "license": [ 329 | "BSD-3-Clause" 330 | ], 331 | "authors": [ 332 | { 333 | "name": "Qiang Xue", 334 | "email": "qiang.xue@gmail.com" 335 | }, 336 | { 337 | "name": "Carsten Brandt", 338 | "email": "mail@cebe.cc" 339 | } 340 | ], 341 | "description": "The composer plugin for Yii extension installer", 342 | "keywords": [ 343 | "composer", 344 | "extension installer", 345 | "yii2" 346 | ], 347 | "time": "2018-03-21T16:15:55+00:00" 348 | } 349 | ], 350 | "packages-dev": [ 351 | { 352 | "name": "doctrine/instantiator", 353 | "version": "1.1.0", 354 | "source": { 355 | "type": "git", 356 | "url": "https://github.com/doctrine/instantiator.git", 357 | "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda" 358 | }, 359 | "dist": { 360 | "type": "zip", 361 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", 362 | "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", 363 | "shasum": "" 364 | }, 365 | "require": { 366 | "php": "^7.1" 367 | }, 368 | "require-dev": { 369 | "athletic/athletic": "~0.1.8", 370 | "ext-pdo": "*", 371 | "ext-phar": "*", 372 | "phpunit/phpunit": "^6.2.3", 373 | "squizlabs/php_codesniffer": "^3.0.2" 374 | }, 375 | "type": "library", 376 | "extra": { 377 | "branch-alias": { 378 | "dev-master": "1.2.x-dev" 379 | } 380 | }, 381 | "autoload": { 382 | "psr-4": { 383 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 384 | } 385 | }, 386 | "notification-url": "https://packagist.org/downloads/", 387 | "license": [ 388 | "MIT" 389 | ], 390 | "authors": [ 391 | { 392 | "name": "Marco Pivetta", 393 | "email": "ocramius@gmail.com", 394 | "homepage": "http://ocramius.github.com/" 395 | } 396 | ], 397 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 398 | "homepage": "https://github.com/doctrine/instantiator", 399 | "keywords": [ 400 | "constructor", 401 | "instantiate" 402 | ], 403 | "time": "2017-07-22T11:58:36+00:00" 404 | }, 405 | { 406 | "name": "myclabs/deep-copy", 407 | "version": "1.7.0", 408 | "source": { 409 | "type": "git", 410 | "url": "https://github.com/myclabs/DeepCopy.git", 411 | "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" 412 | }, 413 | "dist": { 414 | "type": "zip", 415 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", 416 | "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", 417 | "shasum": "" 418 | }, 419 | "require": { 420 | "php": "^5.6 || ^7.0" 421 | }, 422 | "require-dev": { 423 | "doctrine/collections": "^1.0", 424 | "doctrine/common": "^2.6", 425 | "phpunit/phpunit": "^4.1" 426 | }, 427 | "type": "library", 428 | "autoload": { 429 | "psr-4": { 430 | "DeepCopy\\": "src/DeepCopy/" 431 | }, 432 | "files": [ 433 | "src/DeepCopy/deep_copy.php" 434 | ] 435 | }, 436 | "notification-url": "https://packagist.org/downloads/", 437 | "license": [ 438 | "MIT" 439 | ], 440 | "description": "Create deep copies (clones) of your objects", 441 | "keywords": [ 442 | "clone", 443 | "copy", 444 | "duplicate", 445 | "object", 446 | "object graph" 447 | ], 448 | "time": "2017-10-19T19:58:43+00:00" 449 | }, 450 | { 451 | "name": "phar-io/manifest", 452 | "version": "1.0.1", 453 | "source": { 454 | "type": "git", 455 | "url": "https://github.com/phar-io/manifest.git", 456 | "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" 457 | }, 458 | "dist": { 459 | "type": "zip", 460 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0", 461 | "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0", 462 | "shasum": "" 463 | }, 464 | "require": { 465 | "ext-dom": "*", 466 | "ext-phar": "*", 467 | "phar-io/version": "^1.0.1", 468 | "php": "^5.6 || ^7.0" 469 | }, 470 | "type": "library", 471 | "extra": { 472 | "branch-alias": { 473 | "dev-master": "1.0.x-dev" 474 | } 475 | }, 476 | "autoload": { 477 | "classmap": [ 478 | "src/" 479 | ] 480 | }, 481 | "notification-url": "https://packagist.org/downloads/", 482 | "license": [ 483 | "BSD-3-Clause" 484 | ], 485 | "authors": [ 486 | { 487 | "name": "Arne Blankerts", 488 | "email": "arne@blankerts.de", 489 | "role": "Developer" 490 | }, 491 | { 492 | "name": "Sebastian Heuer", 493 | "email": "sebastian@phpeople.de", 494 | "role": "Developer" 495 | }, 496 | { 497 | "name": "Sebastian Bergmann", 498 | "email": "sebastian@phpunit.de", 499 | "role": "Developer" 500 | } 501 | ], 502 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 503 | "time": "2017-03-05T18:14:27+00:00" 504 | }, 505 | { 506 | "name": "phar-io/version", 507 | "version": "1.0.1", 508 | "source": { 509 | "type": "git", 510 | "url": "https://github.com/phar-io/version.git", 511 | "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" 512 | }, 513 | "dist": { 514 | "type": "zip", 515 | "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df", 516 | "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", 517 | "shasum": "" 518 | }, 519 | "require": { 520 | "php": "^5.6 || ^7.0" 521 | }, 522 | "type": "library", 523 | "autoload": { 524 | "classmap": [ 525 | "src/" 526 | ] 527 | }, 528 | "notification-url": "https://packagist.org/downloads/", 529 | "license": [ 530 | "BSD-3-Clause" 531 | ], 532 | "authors": [ 533 | { 534 | "name": "Arne Blankerts", 535 | "email": "arne@blankerts.de", 536 | "role": "Developer" 537 | }, 538 | { 539 | "name": "Sebastian Heuer", 540 | "email": "sebastian@phpeople.de", 541 | "role": "Developer" 542 | }, 543 | { 544 | "name": "Sebastian Bergmann", 545 | "email": "sebastian@phpunit.de", 546 | "role": "Developer" 547 | } 548 | ], 549 | "description": "Library for handling version information and constraints", 550 | "time": "2017-03-05T17:38:23+00:00" 551 | }, 552 | { 553 | "name": "phpdocumentor/reflection-common", 554 | "version": "1.0.1", 555 | "source": { 556 | "type": "git", 557 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 558 | "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" 559 | }, 560 | "dist": { 561 | "type": "zip", 562 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", 563 | "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", 564 | "shasum": "" 565 | }, 566 | "require": { 567 | "php": ">=5.5" 568 | }, 569 | "require-dev": { 570 | "phpunit/phpunit": "^4.6" 571 | }, 572 | "type": "library", 573 | "extra": { 574 | "branch-alias": { 575 | "dev-master": "1.0.x-dev" 576 | } 577 | }, 578 | "autoload": { 579 | "psr-4": { 580 | "phpDocumentor\\Reflection\\": [ 581 | "src" 582 | ] 583 | } 584 | }, 585 | "notification-url": "https://packagist.org/downloads/", 586 | "license": [ 587 | "MIT" 588 | ], 589 | "authors": [ 590 | { 591 | "name": "Jaap van Otterdijk", 592 | "email": "opensource@ijaap.nl" 593 | } 594 | ], 595 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 596 | "homepage": "http://www.phpdoc.org", 597 | "keywords": [ 598 | "FQSEN", 599 | "phpDocumentor", 600 | "phpdoc", 601 | "reflection", 602 | "static analysis" 603 | ], 604 | "time": "2017-09-11T18:02:19+00:00" 605 | }, 606 | { 607 | "name": "phpdocumentor/reflection-docblock", 608 | "version": "4.3.0", 609 | "source": { 610 | "type": "git", 611 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 612 | "reference": "94fd0001232e47129dd3504189fa1c7225010d08" 613 | }, 614 | "dist": { 615 | "type": "zip", 616 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", 617 | "reference": "94fd0001232e47129dd3504189fa1c7225010d08", 618 | "shasum": "" 619 | }, 620 | "require": { 621 | "php": "^7.0", 622 | "phpdocumentor/reflection-common": "^1.0.0", 623 | "phpdocumentor/type-resolver": "^0.4.0", 624 | "webmozart/assert": "^1.0" 625 | }, 626 | "require-dev": { 627 | "doctrine/instantiator": "~1.0.5", 628 | "mockery/mockery": "^1.0", 629 | "phpunit/phpunit": "^6.4" 630 | }, 631 | "type": "library", 632 | "extra": { 633 | "branch-alias": { 634 | "dev-master": "4.x-dev" 635 | } 636 | }, 637 | "autoload": { 638 | "psr-4": { 639 | "phpDocumentor\\Reflection\\": [ 640 | "src/" 641 | ] 642 | } 643 | }, 644 | "notification-url": "https://packagist.org/downloads/", 645 | "license": [ 646 | "MIT" 647 | ], 648 | "authors": [ 649 | { 650 | "name": "Mike van Riel", 651 | "email": "me@mikevanriel.com" 652 | } 653 | ], 654 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 655 | "time": "2017-11-30T07:14:17+00:00" 656 | }, 657 | { 658 | "name": "phpdocumentor/type-resolver", 659 | "version": "0.4.0", 660 | "source": { 661 | "type": "git", 662 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 663 | "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" 664 | }, 665 | "dist": { 666 | "type": "zip", 667 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", 668 | "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", 669 | "shasum": "" 670 | }, 671 | "require": { 672 | "php": "^5.5 || ^7.0", 673 | "phpdocumentor/reflection-common": "^1.0" 674 | }, 675 | "require-dev": { 676 | "mockery/mockery": "^0.9.4", 677 | "phpunit/phpunit": "^5.2||^4.8.24" 678 | }, 679 | "type": "library", 680 | "extra": { 681 | "branch-alias": { 682 | "dev-master": "1.0.x-dev" 683 | } 684 | }, 685 | "autoload": { 686 | "psr-4": { 687 | "phpDocumentor\\Reflection\\": [ 688 | "src/" 689 | ] 690 | } 691 | }, 692 | "notification-url": "https://packagist.org/downloads/", 693 | "license": [ 694 | "MIT" 695 | ], 696 | "authors": [ 697 | { 698 | "name": "Mike van Riel", 699 | "email": "me@mikevanriel.com" 700 | } 701 | ], 702 | "time": "2017-07-14T14:27:02+00:00" 703 | }, 704 | { 705 | "name": "phpspec/prophecy", 706 | "version": "1.7.6", 707 | "source": { 708 | "type": "git", 709 | "url": "https://github.com/phpspec/prophecy.git", 710 | "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712" 711 | }, 712 | "dist": { 713 | "type": "zip", 714 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/33a7e3c4fda54e912ff6338c48823bd5c0f0b712", 715 | "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712", 716 | "shasum": "" 717 | }, 718 | "require": { 719 | "doctrine/instantiator": "^1.0.2", 720 | "php": "^5.3|^7.0", 721 | "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", 722 | "sebastian/comparator": "^1.1|^2.0|^3.0", 723 | "sebastian/recursion-context": "^1.0|^2.0|^3.0" 724 | }, 725 | "require-dev": { 726 | "phpspec/phpspec": "^2.5|^3.2", 727 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" 728 | }, 729 | "type": "library", 730 | "extra": { 731 | "branch-alias": { 732 | "dev-master": "1.7.x-dev" 733 | } 734 | }, 735 | "autoload": { 736 | "psr-0": { 737 | "Prophecy\\": "src/" 738 | } 739 | }, 740 | "notification-url": "https://packagist.org/downloads/", 741 | "license": [ 742 | "MIT" 743 | ], 744 | "authors": [ 745 | { 746 | "name": "Konstantin Kudryashov", 747 | "email": "ever.zet@gmail.com", 748 | "homepage": "http://everzet.com" 749 | }, 750 | { 751 | "name": "Marcello Duarte", 752 | "email": "marcello.duarte@gmail.com" 753 | } 754 | ], 755 | "description": "Highly opinionated mocking framework for PHP 5.3+", 756 | "homepage": "https://github.com/phpspec/prophecy", 757 | "keywords": [ 758 | "Double", 759 | "Dummy", 760 | "fake", 761 | "mock", 762 | "spy", 763 | "stub" 764 | ], 765 | "time": "2018-04-18T13:57:24+00:00" 766 | }, 767 | { 768 | "name": "phpunit/php-code-coverage", 769 | "version": "5.3.2", 770 | "source": { 771 | "type": "git", 772 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 773 | "reference": "c89677919c5dd6d3b3852f230a663118762218ac" 774 | }, 775 | "dist": { 776 | "type": "zip", 777 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c89677919c5dd6d3b3852f230a663118762218ac", 778 | "reference": "c89677919c5dd6d3b3852f230a663118762218ac", 779 | "shasum": "" 780 | }, 781 | "require": { 782 | "ext-dom": "*", 783 | "ext-xmlwriter": "*", 784 | "php": "^7.0", 785 | "phpunit/php-file-iterator": "^1.4.2", 786 | "phpunit/php-text-template": "^1.2.1", 787 | "phpunit/php-token-stream": "^2.0.1", 788 | "sebastian/code-unit-reverse-lookup": "^1.0.1", 789 | "sebastian/environment": "^3.0", 790 | "sebastian/version": "^2.0.1", 791 | "theseer/tokenizer": "^1.1" 792 | }, 793 | "require-dev": { 794 | "phpunit/phpunit": "^6.0" 795 | }, 796 | "suggest": { 797 | "ext-xdebug": "^2.5.5" 798 | }, 799 | "type": "library", 800 | "extra": { 801 | "branch-alias": { 802 | "dev-master": "5.3.x-dev" 803 | } 804 | }, 805 | "autoload": { 806 | "classmap": [ 807 | "src/" 808 | ] 809 | }, 810 | "notification-url": "https://packagist.org/downloads/", 811 | "license": [ 812 | "BSD-3-Clause" 813 | ], 814 | "authors": [ 815 | { 816 | "name": "Sebastian Bergmann", 817 | "email": "sebastian@phpunit.de", 818 | "role": "lead" 819 | } 820 | ], 821 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 822 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 823 | "keywords": [ 824 | "coverage", 825 | "testing", 826 | "xunit" 827 | ], 828 | "time": "2018-04-06T15:36:58+00:00" 829 | }, 830 | { 831 | "name": "phpunit/php-file-iterator", 832 | "version": "1.4.5", 833 | "source": { 834 | "type": "git", 835 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 836 | "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" 837 | }, 838 | "dist": { 839 | "type": "zip", 840 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", 841 | "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", 842 | "shasum": "" 843 | }, 844 | "require": { 845 | "php": ">=5.3.3" 846 | }, 847 | "type": "library", 848 | "extra": { 849 | "branch-alias": { 850 | "dev-master": "1.4.x-dev" 851 | } 852 | }, 853 | "autoload": { 854 | "classmap": [ 855 | "src/" 856 | ] 857 | }, 858 | "notification-url": "https://packagist.org/downloads/", 859 | "license": [ 860 | "BSD-3-Clause" 861 | ], 862 | "authors": [ 863 | { 864 | "name": "Sebastian Bergmann", 865 | "email": "sb@sebastian-bergmann.de", 866 | "role": "lead" 867 | } 868 | ], 869 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 870 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 871 | "keywords": [ 872 | "filesystem", 873 | "iterator" 874 | ], 875 | "time": "2017-11-27T13:52:08+00:00" 876 | }, 877 | { 878 | "name": "phpunit/php-text-template", 879 | "version": "1.2.1", 880 | "source": { 881 | "type": "git", 882 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 883 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" 884 | }, 885 | "dist": { 886 | "type": "zip", 887 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 888 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 889 | "shasum": "" 890 | }, 891 | "require": { 892 | "php": ">=5.3.3" 893 | }, 894 | "type": "library", 895 | "autoload": { 896 | "classmap": [ 897 | "src/" 898 | ] 899 | }, 900 | "notification-url": "https://packagist.org/downloads/", 901 | "license": [ 902 | "BSD-3-Clause" 903 | ], 904 | "authors": [ 905 | { 906 | "name": "Sebastian Bergmann", 907 | "email": "sebastian@phpunit.de", 908 | "role": "lead" 909 | } 910 | ], 911 | "description": "Simple template engine.", 912 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 913 | "keywords": [ 914 | "template" 915 | ], 916 | "time": "2015-06-21T13:50:34+00:00" 917 | }, 918 | { 919 | "name": "phpunit/php-timer", 920 | "version": "1.0.9", 921 | "source": { 922 | "type": "git", 923 | "url": "https://github.com/sebastianbergmann/php-timer.git", 924 | "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" 925 | }, 926 | "dist": { 927 | "type": "zip", 928 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", 929 | "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", 930 | "shasum": "" 931 | }, 932 | "require": { 933 | "php": "^5.3.3 || ^7.0" 934 | }, 935 | "require-dev": { 936 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" 937 | }, 938 | "type": "library", 939 | "extra": { 940 | "branch-alias": { 941 | "dev-master": "1.0-dev" 942 | } 943 | }, 944 | "autoload": { 945 | "classmap": [ 946 | "src/" 947 | ] 948 | }, 949 | "notification-url": "https://packagist.org/downloads/", 950 | "license": [ 951 | "BSD-3-Clause" 952 | ], 953 | "authors": [ 954 | { 955 | "name": "Sebastian Bergmann", 956 | "email": "sb@sebastian-bergmann.de", 957 | "role": "lead" 958 | } 959 | ], 960 | "description": "Utility class for timing", 961 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 962 | "keywords": [ 963 | "timer" 964 | ], 965 | "time": "2017-02-26T11:10:40+00:00" 966 | }, 967 | { 968 | "name": "phpunit/php-token-stream", 969 | "version": "2.0.2", 970 | "source": { 971 | "type": "git", 972 | "url": "https://github.com/sebastianbergmann/php-token-stream.git", 973 | "reference": "791198a2c6254db10131eecfe8c06670700904db" 974 | }, 975 | "dist": { 976 | "type": "zip", 977 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", 978 | "reference": "791198a2c6254db10131eecfe8c06670700904db", 979 | "shasum": "" 980 | }, 981 | "require": { 982 | "ext-tokenizer": "*", 983 | "php": "^7.0" 984 | }, 985 | "require-dev": { 986 | "phpunit/phpunit": "^6.2.4" 987 | }, 988 | "type": "library", 989 | "extra": { 990 | "branch-alias": { 991 | "dev-master": "2.0-dev" 992 | } 993 | }, 994 | "autoload": { 995 | "classmap": [ 996 | "src/" 997 | ] 998 | }, 999 | "notification-url": "https://packagist.org/downloads/", 1000 | "license": [ 1001 | "BSD-3-Clause" 1002 | ], 1003 | "authors": [ 1004 | { 1005 | "name": "Sebastian Bergmann", 1006 | "email": "sebastian@phpunit.de" 1007 | } 1008 | ], 1009 | "description": "Wrapper around PHP's tokenizer extension.", 1010 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/", 1011 | "keywords": [ 1012 | "tokenizer" 1013 | ], 1014 | "time": "2017-11-27T05:48:46+00:00" 1015 | }, 1016 | { 1017 | "name": "phpunit/phpunit", 1018 | "version": "6.5.8", 1019 | "source": { 1020 | "type": "git", 1021 | "url": "https://github.com/sebastianbergmann/phpunit.git", 1022 | "reference": "4f21a3c6b97c42952fd5c2837bb354ec0199b97b" 1023 | }, 1024 | "dist": { 1025 | "type": "zip", 1026 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4f21a3c6b97c42952fd5c2837bb354ec0199b97b", 1027 | "reference": "4f21a3c6b97c42952fd5c2837bb354ec0199b97b", 1028 | "shasum": "" 1029 | }, 1030 | "require": { 1031 | "ext-dom": "*", 1032 | "ext-json": "*", 1033 | "ext-libxml": "*", 1034 | "ext-mbstring": "*", 1035 | "ext-xml": "*", 1036 | "myclabs/deep-copy": "^1.6.1", 1037 | "phar-io/manifest": "^1.0.1", 1038 | "phar-io/version": "^1.0", 1039 | "php": "^7.0", 1040 | "phpspec/prophecy": "^1.7", 1041 | "phpunit/php-code-coverage": "^5.3", 1042 | "phpunit/php-file-iterator": "^1.4.3", 1043 | "phpunit/php-text-template": "^1.2.1", 1044 | "phpunit/php-timer": "^1.0.9", 1045 | "phpunit/phpunit-mock-objects": "^5.0.5", 1046 | "sebastian/comparator": "^2.1", 1047 | "sebastian/diff": "^2.0", 1048 | "sebastian/environment": "^3.1", 1049 | "sebastian/exporter": "^3.1", 1050 | "sebastian/global-state": "^2.0", 1051 | "sebastian/object-enumerator": "^3.0.3", 1052 | "sebastian/resource-operations": "^1.0", 1053 | "sebastian/version": "^2.0.1" 1054 | }, 1055 | "conflict": { 1056 | "phpdocumentor/reflection-docblock": "3.0.2", 1057 | "phpunit/dbunit": "<3.0" 1058 | }, 1059 | "require-dev": { 1060 | "ext-pdo": "*" 1061 | }, 1062 | "suggest": { 1063 | "ext-xdebug": "*", 1064 | "phpunit/php-invoker": "^1.1" 1065 | }, 1066 | "bin": [ 1067 | "phpunit" 1068 | ], 1069 | "type": "library", 1070 | "extra": { 1071 | "branch-alias": { 1072 | "dev-master": "6.5.x-dev" 1073 | } 1074 | }, 1075 | "autoload": { 1076 | "classmap": [ 1077 | "src/" 1078 | ] 1079 | }, 1080 | "notification-url": "https://packagist.org/downloads/", 1081 | "license": [ 1082 | "BSD-3-Clause" 1083 | ], 1084 | "authors": [ 1085 | { 1086 | "name": "Sebastian Bergmann", 1087 | "email": "sebastian@phpunit.de", 1088 | "role": "lead" 1089 | } 1090 | ], 1091 | "description": "The PHP Unit Testing framework.", 1092 | "homepage": "https://phpunit.de/", 1093 | "keywords": [ 1094 | "phpunit", 1095 | "testing", 1096 | "xunit" 1097 | ], 1098 | "time": "2018-04-10T11:38:34+00:00" 1099 | }, 1100 | { 1101 | "name": "phpunit/phpunit-mock-objects", 1102 | "version": "5.0.6", 1103 | "source": { 1104 | "type": "git", 1105 | "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", 1106 | "reference": "33fd41a76e746b8fa96d00b49a23dadfa8334cdf" 1107 | }, 1108 | "dist": { 1109 | "type": "zip", 1110 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/33fd41a76e746b8fa96d00b49a23dadfa8334cdf", 1111 | "reference": "33fd41a76e746b8fa96d00b49a23dadfa8334cdf", 1112 | "shasum": "" 1113 | }, 1114 | "require": { 1115 | "doctrine/instantiator": "^1.0.5", 1116 | "php": "^7.0", 1117 | "phpunit/php-text-template": "^1.2.1", 1118 | "sebastian/exporter": "^3.1" 1119 | }, 1120 | "conflict": { 1121 | "phpunit/phpunit": "<6.0" 1122 | }, 1123 | "require-dev": { 1124 | "phpunit/phpunit": "^6.5" 1125 | }, 1126 | "suggest": { 1127 | "ext-soap": "*" 1128 | }, 1129 | "type": "library", 1130 | "extra": { 1131 | "branch-alias": { 1132 | "dev-master": "5.0.x-dev" 1133 | } 1134 | }, 1135 | "autoload": { 1136 | "classmap": [ 1137 | "src/" 1138 | ] 1139 | }, 1140 | "notification-url": "https://packagist.org/downloads/", 1141 | "license": [ 1142 | "BSD-3-Clause" 1143 | ], 1144 | "authors": [ 1145 | { 1146 | "name": "Sebastian Bergmann", 1147 | "email": "sebastian@phpunit.de", 1148 | "role": "lead" 1149 | } 1150 | ], 1151 | "description": "Mock Object library for PHPUnit", 1152 | "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", 1153 | "keywords": [ 1154 | "mock", 1155 | "xunit" 1156 | ], 1157 | "time": "2018-01-06T05:45:45+00:00" 1158 | }, 1159 | { 1160 | "name": "sebastian/code-unit-reverse-lookup", 1161 | "version": "1.0.1", 1162 | "source": { 1163 | "type": "git", 1164 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 1165 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" 1166 | }, 1167 | "dist": { 1168 | "type": "zip", 1169 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 1170 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 1171 | "shasum": "" 1172 | }, 1173 | "require": { 1174 | "php": "^5.6 || ^7.0" 1175 | }, 1176 | "require-dev": { 1177 | "phpunit/phpunit": "^5.7 || ^6.0" 1178 | }, 1179 | "type": "library", 1180 | "extra": { 1181 | "branch-alias": { 1182 | "dev-master": "1.0.x-dev" 1183 | } 1184 | }, 1185 | "autoload": { 1186 | "classmap": [ 1187 | "src/" 1188 | ] 1189 | }, 1190 | "notification-url": "https://packagist.org/downloads/", 1191 | "license": [ 1192 | "BSD-3-Clause" 1193 | ], 1194 | "authors": [ 1195 | { 1196 | "name": "Sebastian Bergmann", 1197 | "email": "sebastian@phpunit.de" 1198 | } 1199 | ], 1200 | "description": "Looks up which function or method a line of code belongs to", 1201 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 1202 | "time": "2017-03-04T06:30:41+00:00" 1203 | }, 1204 | { 1205 | "name": "sebastian/comparator", 1206 | "version": "2.1.3", 1207 | "source": { 1208 | "type": "git", 1209 | "url": "https://github.com/sebastianbergmann/comparator.git", 1210 | "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9" 1211 | }, 1212 | "dist": { 1213 | "type": "zip", 1214 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/34369daee48eafb2651bea869b4b15d75ccc35f9", 1215 | "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9", 1216 | "shasum": "" 1217 | }, 1218 | "require": { 1219 | "php": "^7.0", 1220 | "sebastian/diff": "^2.0 || ^3.0", 1221 | "sebastian/exporter": "^3.1" 1222 | }, 1223 | "require-dev": { 1224 | "phpunit/phpunit": "^6.4" 1225 | }, 1226 | "type": "library", 1227 | "extra": { 1228 | "branch-alias": { 1229 | "dev-master": "2.1.x-dev" 1230 | } 1231 | }, 1232 | "autoload": { 1233 | "classmap": [ 1234 | "src/" 1235 | ] 1236 | }, 1237 | "notification-url": "https://packagist.org/downloads/", 1238 | "license": [ 1239 | "BSD-3-Clause" 1240 | ], 1241 | "authors": [ 1242 | { 1243 | "name": "Jeff Welch", 1244 | "email": "whatthejeff@gmail.com" 1245 | }, 1246 | { 1247 | "name": "Volker Dusch", 1248 | "email": "github@wallbash.com" 1249 | }, 1250 | { 1251 | "name": "Bernhard Schussek", 1252 | "email": "bschussek@2bepublished.at" 1253 | }, 1254 | { 1255 | "name": "Sebastian Bergmann", 1256 | "email": "sebastian@phpunit.de" 1257 | } 1258 | ], 1259 | "description": "Provides the functionality to compare PHP values for equality", 1260 | "homepage": "https://github.com/sebastianbergmann/comparator", 1261 | "keywords": [ 1262 | "comparator", 1263 | "compare", 1264 | "equality" 1265 | ], 1266 | "time": "2018-02-01T13:46:46+00:00" 1267 | }, 1268 | { 1269 | "name": "sebastian/diff", 1270 | "version": "2.0.1", 1271 | "source": { 1272 | "type": "git", 1273 | "url": "https://github.com/sebastianbergmann/diff.git", 1274 | "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd" 1275 | }, 1276 | "dist": { 1277 | "type": "zip", 1278 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", 1279 | "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", 1280 | "shasum": "" 1281 | }, 1282 | "require": { 1283 | "php": "^7.0" 1284 | }, 1285 | "require-dev": { 1286 | "phpunit/phpunit": "^6.2" 1287 | }, 1288 | "type": "library", 1289 | "extra": { 1290 | "branch-alias": { 1291 | "dev-master": "2.0-dev" 1292 | } 1293 | }, 1294 | "autoload": { 1295 | "classmap": [ 1296 | "src/" 1297 | ] 1298 | }, 1299 | "notification-url": "https://packagist.org/downloads/", 1300 | "license": [ 1301 | "BSD-3-Clause" 1302 | ], 1303 | "authors": [ 1304 | { 1305 | "name": "Kore Nordmann", 1306 | "email": "mail@kore-nordmann.de" 1307 | }, 1308 | { 1309 | "name": "Sebastian Bergmann", 1310 | "email": "sebastian@phpunit.de" 1311 | } 1312 | ], 1313 | "description": "Diff implementation", 1314 | "homepage": "https://github.com/sebastianbergmann/diff", 1315 | "keywords": [ 1316 | "diff" 1317 | ], 1318 | "time": "2017-08-03T08:09:46+00:00" 1319 | }, 1320 | { 1321 | "name": "sebastian/environment", 1322 | "version": "3.1.0", 1323 | "source": { 1324 | "type": "git", 1325 | "url": "https://github.com/sebastianbergmann/environment.git", 1326 | "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" 1327 | }, 1328 | "dist": { 1329 | "type": "zip", 1330 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", 1331 | "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", 1332 | "shasum": "" 1333 | }, 1334 | "require": { 1335 | "php": "^7.0" 1336 | }, 1337 | "require-dev": { 1338 | "phpunit/phpunit": "^6.1" 1339 | }, 1340 | "type": "library", 1341 | "extra": { 1342 | "branch-alias": { 1343 | "dev-master": "3.1.x-dev" 1344 | } 1345 | }, 1346 | "autoload": { 1347 | "classmap": [ 1348 | "src/" 1349 | ] 1350 | }, 1351 | "notification-url": "https://packagist.org/downloads/", 1352 | "license": [ 1353 | "BSD-3-Clause" 1354 | ], 1355 | "authors": [ 1356 | { 1357 | "name": "Sebastian Bergmann", 1358 | "email": "sebastian@phpunit.de" 1359 | } 1360 | ], 1361 | "description": "Provides functionality to handle HHVM/PHP environments", 1362 | "homepage": "http://www.github.com/sebastianbergmann/environment", 1363 | "keywords": [ 1364 | "Xdebug", 1365 | "environment", 1366 | "hhvm" 1367 | ], 1368 | "time": "2017-07-01T08:51:00+00:00" 1369 | }, 1370 | { 1371 | "name": "sebastian/exporter", 1372 | "version": "3.1.0", 1373 | "source": { 1374 | "type": "git", 1375 | "url": "https://github.com/sebastianbergmann/exporter.git", 1376 | "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" 1377 | }, 1378 | "dist": { 1379 | "type": "zip", 1380 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", 1381 | "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", 1382 | "shasum": "" 1383 | }, 1384 | "require": { 1385 | "php": "^7.0", 1386 | "sebastian/recursion-context": "^3.0" 1387 | }, 1388 | "require-dev": { 1389 | "ext-mbstring": "*", 1390 | "phpunit/phpunit": "^6.0" 1391 | }, 1392 | "type": "library", 1393 | "extra": { 1394 | "branch-alias": { 1395 | "dev-master": "3.1.x-dev" 1396 | } 1397 | }, 1398 | "autoload": { 1399 | "classmap": [ 1400 | "src/" 1401 | ] 1402 | }, 1403 | "notification-url": "https://packagist.org/downloads/", 1404 | "license": [ 1405 | "BSD-3-Clause" 1406 | ], 1407 | "authors": [ 1408 | { 1409 | "name": "Jeff Welch", 1410 | "email": "whatthejeff@gmail.com" 1411 | }, 1412 | { 1413 | "name": "Volker Dusch", 1414 | "email": "github@wallbash.com" 1415 | }, 1416 | { 1417 | "name": "Bernhard Schussek", 1418 | "email": "bschussek@2bepublished.at" 1419 | }, 1420 | { 1421 | "name": "Sebastian Bergmann", 1422 | "email": "sebastian@phpunit.de" 1423 | }, 1424 | { 1425 | "name": "Adam Harvey", 1426 | "email": "aharvey@php.net" 1427 | } 1428 | ], 1429 | "description": "Provides the functionality to export PHP variables for visualization", 1430 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 1431 | "keywords": [ 1432 | "export", 1433 | "exporter" 1434 | ], 1435 | "time": "2017-04-03T13:19:02+00:00" 1436 | }, 1437 | { 1438 | "name": "sebastian/global-state", 1439 | "version": "2.0.0", 1440 | "source": { 1441 | "type": "git", 1442 | "url": "https://github.com/sebastianbergmann/global-state.git", 1443 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" 1444 | }, 1445 | "dist": { 1446 | "type": "zip", 1447 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", 1448 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", 1449 | "shasum": "" 1450 | }, 1451 | "require": { 1452 | "php": "^7.0" 1453 | }, 1454 | "require-dev": { 1455 | "phpunit/phpunit": "^6.0" 1456 | }, 1457 | "suggest": { 1458 | "ext-uopz": "*" 1459 | }, 1460 | "type": "library", 1461 | "extra": { 1462 | "branch-alias": { 1463 | "dev-master": "2.0-dev" 1464 | } 1465 | }, 1466 | "autoload": { 1467 | "classmap": [ 1468 | "src/" 1469 | ] 1470 | }, 1471 | "notification-url": "https://packagist.org/downloads/", 1472 | "license": [ 1473 | "BSD-3-Clause" 1474 | ], 1475 | "authors": [ 1476 | { 1477 | "name": "Sebastian Bergmann", 1478 | "email": "sebastian@phpunit.de" 1479 | } 1480 | ], 1481 | "description": "Snapshotting of global state", 1482 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 1483 | "keywords": [ 1484 | "global state" 1485 | ], 1486 | "time": "2017-04-27T15:39:26+00:00" 1487 | }, 1488 | { 1489 | "name": "sebastian/object-enumerator", 1490 | "version": "3.0.3", 1491 | "source": { 1492 | "type": "git", 1493 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 1494 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" 1495 | }, 1496 | "dist": { 1497 | "type": "zip", 1498 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", 1499 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", 1500 | "shasum": "" 1501 | }, 1502 | "require": { 1503 | "php": "^7.0", 1504 | "sebastian/object-reflector": "^1.1.1", 1505 | "sebastian/recursion-context": "^3.0" 1506 | }, 1507 | "require-dev": { 1508 | "phpunit/phpunit": "^6.0" 1509 | }, 1510 | "type": "library", 1511 | "extra": { 1512 | "branch-alias": { 1513 | "dev-master": "3.0.x-dev" 1514 | } 1515 | }, 1516 | "autoload": { 1517 | "classmap": [ 1518 | "src/" 1519 | ] 1520 | }, 1521 | "notification-url": "https://packagist.org/downloads/", 1522 | "license": [ 1523 | "BSD-3-Clause" 1524 | ], 1525 | "authors": [ 1526 | { 1527 | "name": "Sebastian Bergmann", 1528 | "email": "sebastian@phpunit.de" 1529 | } 1530 | ], 1531 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 1532 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 1533 | "time": "2017-08-03T12:35:26+00:00" 1534 | }, 1535 | { 1536 | "name": "sebastian/object-reflector", 1537 | "version": "1.1.1", 1538 | "source": { 1539 | "type": "git", 1540 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 1541 | "reference": "773f97c67f28de00d397be301821b06708fca0be" 1542 | }, 1543 | "dist": { 1544 | "type": "zip", 1545 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", 1546 | "reference": "773f97c67f28de00d397be301821b06708fca0be", 1547 | "shasum": "" 1548 | }, 1549 | "require": { 1550 | "php": "^7.0" 1551 | }, 1552 | "require-dev": { 1553 | "phpunit/phpunit": "^6.0" 1554 | }, 1555 | "type": "library", 1556 | "extra": { 1557 | "branch-alias": { 1558 | "dev-master": "1.1-dev" 1559 | } 1560 | }, 1561 | "autoload": { 1562 | "classmap": [ 1563 | "src/" 1564 | ] 1565 | }, 1566 | "notification-url": "https://packagist.org/downloads/", 1567 | "license": [ 1568 | "BSD-3-Clause" 1569 | ], 1570 | "authors": [ 1571 | { 1572 | "name": "Sebastian Bergmann", 1573 | "email": "sebastian@phpunit.de" 1574 | } 1575 | ], 1576 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 1577 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 1578 | "time": "2017-03-29T09:07:27+00:00" 1579 | }, 1580 | { 1581 | "name": "sebastian/recursion-context", 1582 | "version": "3.0.0", 1583 | "source": { 1584 | "type": "git", 1585 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 1586 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" 1587 | }, 1588 | "dist": { 1589 | "type": "zip", 1590 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", 1591 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", 1592 | "shasum": "" 1593 | }, 1594 | "require": { 1595 | "php": "^7.0" 1596 | }, 1597 | "require-dev": { 1598 | "phpunit/phpunit": "^6.0" 1599 | }, 1600 | "type": "library", 1601 | "extra": { 1602 | "branch-alias": { 1603 | "dev-master": "3.0.x-dev" 1604 | } 1605 | }, 1606 | "autoload": { 1607 | "classmap": [ 1608 | "src/" 1609 | ] 1610 | }, 1611 | "notification-url": "https://packagist.org/downloads/", 1612 | "license": [ 1613 | "BSD-3-Clause" 1614 | ], 1615 | "authors": [ 1616 | { 1617 | "name": "Jeff Welch", 1618 | "email": "whatthejeff@gmail.com" 1619 | }, 1620 | { 1621 | "name": "Sebastian Bergmann", 1622 | "email": "sebastian@phpunit.de" 1623 | }, 1624 | { 1625 | "name": "Adam Harvey", 1626 | "email": "aharvey@php.net" 1627 | } 1628 | ], 1629 | "description": "Provides functionality to recursively process PHP variables", 1630 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 1631 | "time": "2017-03-03T06:23:57+00:00" 1632 | }, 1633 | { 1634 | "name": "sebastian/resource-operations", 1635 | "version": "1.0.0", 1636 | "source": { 1637 | "type": "git", 1638 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 1639 | "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" 1640 | }, 1641 | "dist": { 1642 | "type": "zip", 1643 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", 1644 | "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", 1645 | "shasum": "" 1646 | }, 1647 | "require": { 1648 | "php": ">=5.6.0" 1649 | }, 1650 | "type": "library", 1651 | "extra": { 1652 | "branch-alias": { 1653 | "dev-master": "1.0.x-dev" 1654 | } 1655 | }, 1656 | "autoload": { 1657 | "classmap": [ 1658 | "src/" 1659 | ] 1660 | }, 1661 | "notification-url": "https://packagist.org/downloads/", 1662 | "license": [ 1663 | "BSD-3-Clause" 1664 | ], 1665 | "authors": [ 1666 | { 1667 | "name": "Sebastian Bergmann", 1668 | "email": "sebastian@phpunit.de" 1669 | } 1670 | ], 1671 | "description": "Provides a list of PHP built-in functions that operate on resources", 1672 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 1673 | "time": "2015-07-28T20:34:47+00:00" 1674 | }, 1675 | { 1676 | "name": "sebastian/version", 1677 | "version": "2.0.1", 1678 | "source": { 1679 | "type": "git", 1680 | "url": "https://github.com/sebastianbergmann/version.git", 1681 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" 1682 | }, 1683 | "dist": { 1684 | "type": "zip", 1685 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", 1686 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", 1687 | "shasum": "" 1688 | }, 1689 | "require": { 1690 | "php": ">=5.6" 1691 | }, 1692 | "type": "library", 1693 | "extra": { 1694 | "branch-alias": { 1695 | "dev-master": "2.0.x-dev" 1696 | } 1697 | }, 1698 | "autoload": { 1699 | "classmap": [ 1700 | "src/" 1701 | ] 1702 | }, 1703 | "notification-url": "https://packagist.org/downloads/", 1704 | "license": [ 1705 | "BSD-3-Clause" 1706 | ], 1707 | "authors": [ 1708 | { 1709 | "name": "Sebastian Bergmann", 1710 | "email": "sebastian@phpunit.de", 1711 | "role": "lead" 1712 | } 1713 | ], 1714 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 1715 | "homepage": "https://github.com/sebastianbergmann/version", 1716 | "time": "2016-10-03T07:35:21+00:00" 1717 | }, 1718 | { 1719 | "name": "theseer/tokenizer", 1720 | "version": "1.1.0", 1721 | "source": { 1722 | "type": "git", 1723 | "url": "https://github.com/theseer/tokenizer.git", 1724 | "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b" 1725 | }, 1726 | "dist": { 1727 | "type": "zip", 1728 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b", 1729 | "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b", 1730 | "shasum": "" 1731 | }, 1732 | "require": { 1733 | "ext-dom": "*", 1734 | "ext-tokenizer": "*", 1735 | "ext-xmlwriter": "*", 1736 | "php": "^7.0" 1737 | }, 1738 | "type": "library", 1739 | "autoload": { 1740 | "classmap": [ 1741 | "src/" 1742 | ] 1743 | }, 1744 | "notification-url": "https://packagist.org/downloads/", 1745 | "license": [ 1746 | "BSD-3-Clause" 1747 | ], 1748 | "authors": [ 1749 | { 1750 | "name": "Arne Blankerts", 1751 | "email": "arne@blankerts.de", 1752 | "role": "Developer" 1753 | } 1754 | ], 1755 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 1756 | "time": "2017-04-07T12:08:54+00:00" 1757 | }, 1758 | { 1759 | "name": "webmozart/assert", 1760 | "version": "1.3.0", 1761 | "source": { 1762 | "type": "git", 1763 | "url": "https://github.com/webmozart/assert.git", 1764 | "reference": "0df1908962e7a3071564e857d86874dad1ef204a" 1765 | }, 1766 | "dist": { 1767 | "type": "zip", 1768 | "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", 1769 | "reference": "0df1908962e7a3071564e857d86874dad1ef204a", 1770 | "shasum": "" 1771 | }, 1772 | "require": { 1773 | "php": "^5.3.3 || ^7.0" 1774 | }, 1775 | "require-dev": { 1776 | "phpunit/phpunit": "^4.6", 1777 | "sebastian/version": "^1.0.1" 1778 | }, 1779 | "type": "library", 1780 | "extra": { 1781 | "branch-alias": { 1782 | "dev-master": "1.3-dev" 1783 | } 1784 | }, 1785 | "autoload": { 1786 | "psr-4": { 1787 | "Webmozart\\Assert\\": "src/" 1788 | } 1789 | }, 1790 | "notification-url": "https://packagist.org/downloads/", 1791 | "license": [ 1792 | "MIT" 1793 | ], 1794 | "authors": [ 1795 | { 1796 | "name": "Bernhard Schussek", 1797 | "email": "bschussek@gmail.com" 1798 | } 1799 | ], 1800 | "description": "Assertions to validate method input/output with nice error messages.", 1801 | "keywords": [ 1802 | "assert", 1803 | "check", 1804 | "validate" 1805 | ], 1806 | "time": "2018-01-29T19:49:41+00:00" 1807 | } 1808 | ], 1809 | "aliases": [], 1810 | "minimum-stability": "stable", 1811 | "stability-flags": [], 1812 | "prefer-stable": false, 1813 | "prefer-lowest": false, 1814 | "platform": { 1815 | "php": ">=5.6" 1816 | }, 1817 | "platform-dev": [] 1818 | } 1819 | --------------------------------------------------------------------------------