diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml new file mode 100644 index 00000000..e6680db0 --- /dev/null +++ b/.github/workflows/docker-image.yml @@ -0,0 +1,27 @@ +name: Codeception Tests +on: + push: + branches: [ "master" ] + pull_request: + branches: [ "master" ] + +jobs: + + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - name: Build the Docker image + run: | + git fetch --unshallow + cd tests + make all + make test + + - name: 'Upload Test Report' + uses: actions/upload-artifact@v4 + with: + path: tests/_output + retention-days: 7 diff --git a/.gitignore b/.gitignore index 71187674..0163785b 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,6 @@ vendor .phptidy-cache docker-compose.override.yml _artifacts +tests/_helpers/_generated +tests/_app/_generated +.php_cs.cache diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1e9e7224..26aba696 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -21,7 +21,7 @@ test: - docker-compose up -d # workaround (wait for db) - sleep 10 - - docker-compose run phpfpm setup.sh + - make all - set +e - docker-compose run --rm -e YII_ENV=dev phpfpm bash -c 'codecept run --steps --html=_report.html -g mandatory -g ${GIIANT_TEST_DB} -g onlyCrud cli,unit,acceptance' || TESTS_EXIT_CODE=1 - cp -r _output /tmp/${BUILD_PREFIX} @@ -43,4 +43,4 @@ cleanup: script: - docker-compose kill && docker-compose rm -fv - docker-compose down --rmi local --volumes - when: always \ No newline at end of file + when: always diff --git a/.travis.yml b/.travis.yml index 1ca3105a..c5e561ff 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,11 +1,12 @@ sudo: required -language: php +language: generic services: - docker before_install: + - git fetch --unshallow - cd tests - docker-compose build --pull diff --git a/CHANGELOG.md b/CHANGELOG.md index 32595727..399bc9e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,123 @@ Changelog ========= +### 1.0.0-beta + +- do not use auto-pluralization in views, pluralize via I18N +- Improved model generation performance (see`modelCacheRelationsData`) +- updated php-cs-fixer to version 3 + +### 0.13.0 + +- fixed pivot URLs + +### 0.12.0 + + - Added support for `modelGenerateJunctionRelationMode` + - Upgraded `yiisoft/yii2-gii` to version 2.2.0 + - moved JSON form config tog `.gii` in base directory + +### 0.11.0 + + - *no changes* + +### 0.11.0-beta3 + + - fixed multi-table json generation table names + - fixed module labels for json files + - pager align in GridView + - changed icons in index view + - fixed enum values + - fixed multi-table model json generation + +### 0.11.0-beta2 + - generateAccessFilterMigrations option + - dropdown list in GridView filed search filter optimization + - select position ActionColumn in GridView (left or right) + - fix view icon in ActionColumn + - pager align in GridView + +### 0.11.0-beta1 + - added dropdown list in GridView filed search filter + - allow usage with `yiisoft/yii2-gii:^2.1` + +### 0.10.8 + - fixed error with php 7.3 + - Correct message category for view action button + +### 0.10.7 + - add baseClassPrefix to model generator. + +### 0.10.6 + - typo of class_exists + +### 0.10.5 + - Update SaveForm.php + - Additional validation + - removes reprecated yii2-codeception package deps + - Update README.md + - fixed path + +### 0.10.4 + - Fix singularEntities not working when using cli + +### 0.10.3 + - Fix XSS Vulnerability in CRUD views generated + +### 0.10.2 + - Close DB after each model generation + - added test form view, fixes #230 + - updated docs + +### 0.10.1 + - added tables & skipTables check, refactored skipTables to run in beforeAction + - Fix #196 + - update for skip db tables + +### 0.10.0 + - added "formLayout" property + +### 0.10.0-beta2 + - updated Object to BaseObject, fixes #220 + - updated dependencies + - fixed phptidy usage + - updated yii2-gii constraint to ~2.0.6 + +### 0.10.0-beta1 + - applied fixes from #197 + - Fixed spacing in model extended template. + - updated example database image + - updated db-test image + - refactored paths; added missing dependency + - added legacy yii2-codeception dependency + - removed generated tester classes + - refactoring tests + - specify DB connection component in generated model, if using non-default 'db' (feature of yii2-gii 2.0.0) + - include modelGenerateRelation attribute into BatchController + - include attributes for model-generator's timestampBehavior and blameableBehavior into BatchController + - get has_one relations as tab in model view + - if no types to filter are given to ModelTrait::getModelRelations (like in generators/crud/default/views/index.php) we should return all types. + - use relation property instead of relation getter to avoid multiple db queries. + - moved messages in ‚yii‘ catalog to ‚crud‘ and ‚giiant‘ + - Fix broken URLs on crud relations + - Fix CallbackProvider examples + - improved detection of text columns + - Fixed namespaces in documentation about providers + - Merge branch 'master' into feature/fix-relation-detection + - fixed relation detection + - updated page titles & form-layout + +### 0.9.2 + - updated constraint to allow phptidy on PHP 7 + - updated CLI command infos + - fixed bootstrap alert class + +### 0.9.1 + + - improved detection of database text columns in callbacks + - fixed #191 + - added basic NOSQL support (tested with elasticsearch) + ### 0.9.0 *beta3-beta6* diff --git a/README.md b/README.md index 1e9fc254..6a46a40d 100644 --- a/README.md +++ b/README.md @@ -3,11 +3,7 @@ yii2-giiant > "Giiant is huge!" -**PROJECT IS IN BETA STAGE!** - -Note: Major changes from 0.4 to 0.5, see [upgrading](UPGRADING.md) for details. - -[![Build Status](https://travis-ci.org/schmunk42/yii2-giiant.svg?branch=master)](https://travis-ci.org/schmunk42/yii2-giiant) +[![Build Status](https://travis-ci.com/schmunk42/yii2-giiant.svg?branch=master)](https://travis-ci.com/schmunk42/yii2-giiant) What is this? ------------- @@ -25,6 +21,7 @@ Resources --------- - [Documentation](docs/README.md) +- [Upgrading instructions](UPGRADING.md) - [Project Source-Code](https://github.com/schmunk42/yii2-giiant) - [Packagist](https://packagist.org/packages/schmunk42/yii2-giiant) - [Yii Extensions](http://www.yiiframework.com/extension/yii2-giiant/) @@ -40,7 +37,7 @@ Features ### Model generator - generates separate model classes to customize and base models classes which can be regenerated on schema changes -- table prefixes can be stipped off model class names (not bound to `db` connection settings from Yii 2.0) +- table prefixes can be stripped off model class names (not bound to `db` connection settings from Yii 2.0) ### CRUD generator diff --git a/codeception.yml b/codeception.yml deleted file mode 100644 index a7f6f741..00000000 --- a/codeception.yml +++ /dev/null @@ -1,20 +0,0 @@ -actor: Tester -paths: - tests: tests - log: tests/_output - data: tests/_data - helpers: tests/_helpers -settings: - bootstrap: _bootstrap.php - colors: true - memory_limit: 1024M -modules: - config: - Db: - dsn: '' - user: '' - password: '' - dump: tests/_data/dump.sql -config: - # the entry script URL (with host info) for functional tests - test_entry_url: http://WEB:80/index.php \ No newline at end of file diff --git a/composer.json b/composer.json index 636d657d..c603f83a 100644 --- a/composer.json +++ b/composer.json @@ -12,14 +12,25 @@ "homepage": "http://www.usrbin.de" } ], + "suggest": { + "kdn/yii2-json-editor": "JSON editor widget for Yii 2." + }, "require": { - "cmrcx/phptidy": "2.*", - "dmstr/yii2-bootstrap": "^0.1.2 || ~0.2", + "cmrcx/phptidy": "^3.1", + "dmstr/yii2-bootstrap": "^0.1.2 || ^0.2.1", "dmstr/yii2-helpers": "*", "dmstr/yii2-db": "*", - "friendsofphp/php-cs-fixer": "1.* || 2.*", - "yiisoft/yii2": "~2.0.4", - "yiisoft/yii2-gii": "~2.0.4" + "friendsofphp/php-cs-fixer": "1.* || 2.* || 3.*", + "yiisoft/yii2": "~2.0.13", + "yiisoft/yii2-gii": "^2.2.0" + }, + "require-dev": { + "codeception/codeception": "^2.2", + "codeception/specify": "^0.4", + "dmstr/yii2-web": "^0.4.2 || ^1.0.0", + "yiisoft/yii2-faker": "2.*", + "rmrevin/yii2-fontawesome": "2.*", + "insolita/yii2-adminlte-widgets": "1.1.*" }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock index 0f053088..aa223561 100644 --- a/composer.lock +++ b/composer.lock @@ -4,25 +4,24 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "7ef454cefcef31857646c76591a3f981", - "content-hash": "82936d09d72c999b96ab9228735d18a0", + "content-hash": "dbf4a89198da3e17681b14d17abbb9cc", "packages": [ { "name": "bower-asset/bootstrap", - "version": "v3.3.5", + "version": "v3.4.1", "source": { "type": "git", "url": "https://github.com/twbs/bootstrap.git", - "reference": "16b48259a62f576e52c903c476bd42b90ab22482" + "reference": "68b0d231a13201eb14acd3dc84e51543d16e5f7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twbs/bootstrap/zipball/16b48259a62f576e52c903c476bd42b90ab22482", - "reference": "16b48259a62f576e52c903c476bd42b90ab22482", + "url": "https://api.github.com/repos/twbs/bootstrap/zipball/68b0d231a13201eb14acd3dc84e51543d16e5f7e", + "reference": "68b0d231a13201eb14acd3dc84e51543d16e5f7e", "shasum": "" }, "require": { - "bower-asset/jquery": ">=1.9.1" + "bower-asset/jquery": ">=1.9.1,<4.0" }, "type": "bower-asset-library", "extra": { @@ -54,84 +53,100 @@ "mobile-first", "responsive", "web" - ] + ], + "time": "2019-02-13T14:23:41+00:00" }, { - "name": "bower-asset/jquery", - "version": "2.2.3", + "name": "bower-asset/inputmask", + "version": "3.3.11", "source": { "type": "git", - "url": "https://github.com/jquery/jquery-dist.git", - "reference": "af22a351b2ea5801ffb1695abb3bb34d5bed9198" + "url": "https://github.com/RobinHerbots/Inputmask.git", + "reference": "5e670ad62f50c738388d4dcec78d2888505ad77b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jquery/jquery-dist/zipball/af22a351b2ea5801ffb1695abb3bb34d5bed9198", - "reference": "af22a351b2ea5801ffb1695abb3bb34d5bed9198", + "url": "https://api.github.com/repos/RobinHerbots/Inputmask/zipball/5e670ad62f50c738388d4dcec78d2888505ad77b", + "reference": "5e670ad62f50c738388d4dcec78d2888505ad77b", "shasum": "" }, + "require": { + "bower-asset/jquery": ">=1.7" + }, "type": "bower-asset-library", "extra": { - "bower-asset-main": "dist/jquery.js", + "bower-asset-main": [ + "./dist/inputmask/inputmask.js", + "./dist/inputmask/inputmask.extensions.js", + "./dist/inputmask/inputmask.date.extensions.js", + "./dist/inputmask/inputmask.numeric.extensions.js", + "./dist/inputmask/inputmask.phone.extensions.js", + "./dist/inputmask/jquery.inputmask.js", + "./dist/inputmask/global/document.js", + "./dist/inputmask/global/window.js", + "./dist/inputmask/phone-codes/phone.js", + "./dist/inputmask/phone-codes/phone-be.js", + "./dist/inputmask/phone-codes/phone-nl.js", + "./dist/inputmask/phone-codes/phone-ru.js", + "./dist/inputmask/phone-codes/phone-uk.js", + "./dist/inputmask/dependencyLibs/inputmask.dependencyLib.jqlite.js", + "./dist/inputmask/dependencyLibs/inputmask.dependencyLib.jquery.js", + "./dist/inputmask/dependencyLibs/inputmask.dependencyLib.js", + "./dist/inputmask/bindings/inputmask.binding.js" + ], "bower-asset-ignore": [ - "package.json" + "**/*", + "!dist/*", + "!dist/inputmask/*", + "!dist/min/*", + "!dist/min/inputmask/*" ] }, "license": [ - "MIT" + "http://opensource.org/licenses/mit-license.php" ], + "description": "Inputmask is a javascript library which creates an input mask. Inputmask can run against vanilla javascript, jQuery and jqlite.", "keywords": [ - "browser", - "javascript", + "form", + "input", + "inputmask", "jquery", - "library" - ] + "mask", + "plugins" + ], + "time": "2017-11-21T11:46:23+00:00" }, { - "name": "bower-asset/jquery.inputmask", - "version": "3.2.7", + "name": "bower-asset/jquery", + "version": "3.5.1", "source": { "type": "git", - "url": "https://github.com/RobinHerbots/jquery.inputmask.git", - "reference": "5a72c563b502b8e05958a524cdfffafe9987be38" + "url": "https://github.com/jquery/jquery-dist.git", + "reference": "4c0e4becb8263bb5b3e6dadc448d8e7305ef8215" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/RobinHerbots/jquery.inputmask/zipball/5a72c563b502b8e05958a524cdfffafe9987be38", - "reference": "5a72c563b502b8e05958a524cdfffafe9987be38", + "url": "https://api.github.com/repos/jquery/jquery-dist/zipball/4c0e4becb8263bb5b3e6dadc448d8e7305ef8215", + "reference": "4c0e4becb8263bb5b3e6dadc448d8e7305ef8215", "shasum": "" }, - "require": { - "bower-asset/jquery": ">=1.7" - }, "type": "bower-asset-library", "extra": { - "bower-asset-main": [ - "./dist/inputmask/inputmask.js" - ], + "bower-asset-main": "dist/jquery.js", "bower-asset-ignore": [ - "**/*", - "!dist/*", - "!dist/inputmask/*", - "!dist/min/*", - "!dist/min/inputmask/*", - "!extra/bindings/*", - "!extra/dependencyLibs/*", - "!extra/phone-codes/*" + "package.json" ] }, "license": [ - "http://opensource.org/licenses/mit-license.php" + "MIT" ], - "description": "jquery.inputmask is a jquery plugin which create an input mask.", "keywords": [ - "form", - "input", - "inputmask", + "browser", + "javascript", "jquery", - "mask", - "plugins" - ] + "library" + ], + "time": "2020-05-04T22:50:46+00:00" }, { "name": "bower-asset/punycode", @@ -159,47 +174,21 @@ "node_modules", "package.json" ] - } - }, - { - "name": "bower-asset/typeahead.js", - "version": "v0.11.1", - "source": { - "type": "git", - "url": "https://github.com/twitter/typeahead.js.git", - "reference": "588440f66559714280628a4f9799f0c4eb880a4a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/twitter/typeahead.js/zipball/588440f66559714280628a4f9799f0c4eb880a4a", - "reference": "588440f66559714280628a4f9799f0c4eb880a4a", - "shasum": "" - }, - "require": { - "bower-asset/jquery": ">=1.7" }, - "require-dev": { - "bower-asset/jasmine-ajax": "~1.3.1", - "bower-asset/jasmine-jquery": "~1.5.2", - "bower-asset/jquery": "~1.7" - }, - "type": "bower-asset-library", - "extra": { - "bower-asset-main": "dist/typeahead.bundle.js" - } + "time": "2014-10-22T12:02:42+00:00" }, { "name": "bower-asset/yii2-pjax", - "version": "v2.0.6", + "version": "2.0.7.1", "source": { "type": "git", "url": "https://github.com/yiisoft/jquery-pjax.git", - "reference": "60728da6ade5879e807a49ce59ef9a72039b8978" + "reference": "aef7b953107264f00234902a3880eb50dafc48be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/jquery-pjax/zipball/60728da6ade5879e807a49ce59ef9a72039b8978", - "reference": "60728da6ade5879e807a49ce59ef9a72039b8978", + "url": "https://api.github.com/repos/yiisoft/jquery-pjax/zipball/aef7b953107264f00234902a3880eb50dafc48be", + "reference": "aef7b953107264f00234902a3880eb50dafc48be", "shasum": "" }, "require": { @@ -220,20 +209,21 @@ }, "license": [ "MIT" - ] + ], + "time": "2017-10-12T10:11:14+00:00" }, { "name": "cebe/markdown", - "version": "1.1.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/cebe/markdown.git", - "reference": "54a2c49de31cc44e864ebf0500a35ef21d0010b2" + "reference": "9bac5e971dd391e2802dca5400bbeacbaea9eb86" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cebe/markdown/zipball/54a2c49de31cc44e864ebf0500a35ef21d0010b2", - "reference": "54a2c49de31cc44e864ebf0500a35ef21d0010b2", + "url": "https://api.github.com/repos/cebe/markdown/zipball/9bac5e971dd391e2802dca5400bbeacbaea9eb86", + "reference": "9bac5e971dd391e2802dca5400bbeacbaea9eb86", "shasum": "" }, "require": { @@ -251,7 +241,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "1.2.x-dev" } }, "autoload": { @@ -280,20 +270,20 @@ "markdown", "markdown-extra" ], - "time": "2015-03-06 05:28:07" + "time": "2018-03-26T11:24:36+00:00" }, { "name": "cmrcx/phptidy", - "version": "v2.16", + "version": "v3.2", "source": { "type": "git", "url": "https://github.com/cmrcx/phptidy.git", - "reference": "7c84e830163e81cd4ac39ddb160cb0c20f89bd1f" + "reference": "76eb69a3b3682b30dc75975f4bf64999c598eec3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cmrcx/phptidy/zipball/7c84e830163e81cd4ac39ddb160cb0c20f89bd1f", - "reference": "7c84e830163e81cd4ac39ddb160cb0c20f89bd1f", + "url": "https://api.github.com/repos/cmrcx/phptidy/zipball/76eb69a3b3682b30dc75975f4bf64999c598eec3", + "reference": "76eb69a3b3682b30dc75975f4bf64999c598eec3", "shasum": "" }, "require": { @@ -304,7 +294,7 @@ "ext-mbstring": "*" }, "bin": [ - "phptidy" + "phptidy.php" ], "type": "library", "notification-url": "https://packagist.org/downloads/", @@ -321,110 +311,134 @@ ], "description": "PHP code formatter", "homepage": "https://github.com/cmrcx/phptidy", - "time": "2015-10-27 09:29:21" + "time": "2019-08-10T15:20:30+00:00" }, { - "name": "dmstr/yii2-bootstrap", - "version": "0.1.2", + "name": "composer/semver", + "version": "1.7.1", "source": { "type": "git", - "url": "https://github.com/dmstr/yii2-bootstrap.git", - "reference": "c0fb26c0259b3c5fb42f2c0df852db2b3494c739" + "url": "https://github.com/composer/semver.git", + "reference": "38276325bd896f90dfcfe30029aa5db40df387a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dmstr/yii2-bootstrap/zipball/c0fb26c0259b3c5fb42f2c0df852db2b3494c739", - "reference": "c0fb26c0259b3c5fb42f2c0df852db2b3494c739", + "url": "https://api.github.com/repos/composer/semver/zipball/38276325bd896f90dfcfe30029aa5db40df387a7", + "reference": "38276325bd896f90dfcfe30029aa5db40df387a7", "shasum": "" }, "require": { - "yiisoft/yii2": "2.0.*" + "php": "^5.3.2 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.5 || ^5.0.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } }, - "type": "yii2-extension", "autoload": { "psr-4": { - "dmstr\\bootstrap\\": "" + "Composer\\Semver\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Christopher Stebe", - "email": "c.stebe@herzogkommunikation.de" + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" } ], - "description": "yii2 bootstrap components and extensions from diemeisterei GmbH", + "description": "Semver library that offers utilities, version constraint parsing and validation.", "keywords": [ - "bootstrap", - "extension", - "yii2" + "semantic", + "semver", + "validation", + "versioning" ], - "time": "2016-04-13 00:33:37" + "time": "2020-09-27T13:13:07+00:00" }, { - "name": "dmstr/yii2-db", - "version": "0.3.0", + "name": "composer/xdebug-handler", + "version": "1.4.3", "source": { "type": "git", - "url": "https://github.com/dmstr/yii2-db.git", - "reference": "49e3227665c1f38b8da5d8b7cbe29b9f5b3fbab0" + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "ebd27a9866ae8254e873866f795491f02418c5a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dmstr/yii2-db/zipball/49e3227665c1f38b8da5d8b7cbe29b9f5b3fbab0", - "reference": "49e3227665c1f38b8da5d8b7cbe29b9f5b3fbab0", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ebd27a9866ae8254e873866f795491f02418c5a5", + "reference": "ebd27a9866ae8254e873866f795491f02418c5a5", "shasum": "" }, - "type": "yii2-extension", + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0", + "psr/log": "^1.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8" + }, + "type": "library", "autoload": { "psr-4": { - "dmstr\\db\\": "db/", - "dmstr\\console\\": "console/" + "Composer\\XdebugHandler\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Tobias Munk", - "email": "tobias@diemeisterei.de" + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" } ], - "description": "Database extensions", + "description": "Restarts a process without Xdebug.", "keywords": [ - "database", - "db", - "extension", - "yii2" + "Xdebug", + "performance" ], - "time": "2015-12-21 10:01:49" + "time": "2020-08-19T10:27:58+00:00" }, { - "name": "dmstr/yii2-helpers", - "version": "0.3.0", + "name": "dmstr/yii2-bootstrap", + "version": "0.2.2", "source": { "type": "git", - "url": "https://github.com/dmstr/yii2-helpers.git", - "reference": "034af22a34645d89baf6cc2dace9fffe2c37fe55" + "url": "https://github.com/dmstr/yii2-bootstrap.git", + "reference": "19520972941fede682f82f9ac3f98ed69bc2d8fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dmstr/yii2-helpers/zipball/034af22a34645d89baf6cc2dace9fffe2c37fe55", - "reference": "034af22a34645d89baf6cc2dace9fffe2c37fe55", + "url": "https://api.github.com/repos/dmstr/yii2-bootstrap/zipball/19520972941fede682f82f9ac3f98ed69bc2d8fb", + "reference": "19520972941fede682f82f9ac3f98ed69bc2d8fb", "shasum": "" }, "require": { - "yiisoft/yii2": "*" + "yiisoft/yii2-bootstrap": "^2.0.6" }, "type": "yii2-extension", "autoload": { "psr-4": { - "dmstr\\helpers\\": "src/" + "dmstr\\bootstrap\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -433,88 +447,87 @@ ], "authors": [ { - "name": "Sergej Kunz", - "email": "s.kunz@herzogkommunikation.de" - }, - { - "name": "Tobias Munk", - "email": "t.munk@herzogkommunikation.de" + "name": "Christopher Stebe", + "email": "c.stebe@herzogkommunikation.de" } ], - "description": "Yii2 Helpers", + "description": "yii2 bootstrap components and extensions from diemeisterei GmbH", "keywords": [ + "bootstrap", "extension", "yii2" ], - "time": "2016-03-07 08:57:01" + "time": "2019-04-05T12:37:30+00:00" }, { - "name": "ezyang/htmlpurifier", - "version": "v4.6.0", + "name": "dmstr/yii2-db", + "version": "1.2.1", "source": { "type": "git", - "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "6f389f0f25b90d0b495308efcfa073981177f0fd" + "url": "https://github.com/dmstr/yii2-db.git", + "reference": "21d2e3354cffeb471ff4d4b7fd6f7aa6d73dbd34" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/6f389f0f25b90d0b495308efcfa073981177f0fd", - "reference": "6f389f0f25b90d0b495308efcfa073981177f0fd", + "url": "https://api.github.com/repos/dmstr/yii2-db/zipball/21d2e3354cffeb471ff4d4b7fd6f7aa6d73dbd34", + "reference": "21d2e3354cffeb471ff4d4b7fd6f7aa6d73dbd34", "shasum": "" }, "require": { - "php": ">=5.2" + "mikehaertl/php-shellcommand": "1.*", + "schmunk42/retry": "*", + "yiisoft/yii2": "2.*" }, - "type": "library", + "type": "yii2-extension", "autoload": { - "psr-0": { - "HTMLPurifier": "library/" - }, - "files": [ - "library/HTMLPurifier.composer.php" - ] + "psr-4": { + "dmstr\\db\\": "db/", + "dmstr\\db\\tests\\": "db/tests/", + "dmstr\\console\\": "console/", + "dmstr\\widgets\\": "widgets/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL" + "BSD-3-Clause" ], "authors": [ { - "name": "Edward Z. Yang", - "email": "admin@htmlpurifier.org", - "homepage": "http://ezyang.com" + "name": "Tobias Munk", + "email": "tobias@diemeisterei.de" } ], - "description": "Standards compliant HTML filter written in PHP", - "homepage": "http://htmlpurifier.org/", + "description": "Database extensions", "keywords": [ - "html" + "database", + "db", + "extension", + "yii2" ], - "time": "2013-11-30 08:25:19" + "time": "2020-03-03T16:30:45+00:00" }, { - "name": "phpspec/php-diff", - "version": "v1.1.0", + "name": "dmstr/yii2-helpers", + "version": "0.4.19", "source": { "type": "git", - "url": "https://github.com/phpspec/php-diff.git", - "reference": "0464787bfa7cd13576c5a1e318709768798bec6a" + "url": "https://github.com/dmstr/yii2-helpers.git", + "reference": "2a1641227f9efd7bcda5dc8ff6bdb5bb6568ace8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/php-diff/zipball/0464787bfa7cd13576c5a1e318709768798bec6a", - "reference": "0464787bfa7cd13576c5a1e318709768798bec6a", + "url": "https://api.github.com/repos/dmstr/yii2-helpers/zipball/2a1641227f9efd7bcda5dc8ff6bdb5bb6568ace8", + "reference": "2a1641227f9efd7bcda5dc8ff6bdb5bb6568ace8", "shasum": "" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } + "require": { + "pheme/yii2-settings": "^0.5.0 || ^0.7.0", + "yiisoft/yii2": "~2.0.0" }, + "type": "yii2-extension", "autoload": { - "psr-0": { - "Diff": "lib/" + "psr-4": { + "dmstr\\helpers\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -523,238 +536,4404 @@ ], "authors": [ { - "name": "Chris Boulton", - "homepage": "http://github.com/chrisboulton" + "name": "Sergej Kunz", + "email": "s.kunz@herzogkommunikation.de" + }, + { + "name": "Tobias Munk", + "email": "t.munk@herzogkommunikation.de" } ], - "description": "A comprehensive library for generating differences between two hashable objects (strings or arrays).", - "time": "2016-04-07 12:29:16" + "description": "Yii2 Helpers", + "keywords": [ + "extension", + "yii2" + ], + "time": "2020-06-24T12:35:07+00:00" }, { - "name": "yiisoft/yii2", - "version": "2.0.7", + "name": "doctrine/annotations", + "version": "1.10.4", "source": { "type": "git", - "url": "https://github.com/yiisoft/yii2-framework.git", - "reference": "f45651582cb853b4326730d9d187a0f7a44a45a3" + "url": "https://github.com/doctrine/annotations.git", + "reference": "bfe91e31984e2ba76df1c1339681770401ec262f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-framework/zipball/f45651582cb853b4326730d9d187a0f7a44a45a3", - "reference": "f45651582cb853b4326730d9d187a0f7a44a45a3", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/bfe91e31984e2ba76df1c1339681770401ec262f", + "reference": "bfe91e31984e2ba76df1c1339681770401ec262f", "shasum": "" }, "require": { - "bower-asset/jquery": "2.2.*@stable | 2.1.*@stable | 1.11.*@stable", - "bower-asset/jquery.inputmask": "~3.2.2", - "bower-asset/punycode": "1.3.*", - "bower-asset/yii2-pjax": "~2.0.1", - "cebe/markdown": "~1.0.0 | ~1.1.0", - "ext-ctype": "*", - "ext-mbstring": "*", - "ezyang/htmlpurifier": "4.6.*", - "lib-pcre": "*", - "php": ">=5.4.0", - "yiisoft/yii2-composer": "~2.0.4" + "doctrine/lexer": "1.*", + "ext-tokenizer": "*", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/cache": "1.*", + "phpstan/phpstan": "^0.12.20", + "phpunit/phpunit": "^7.5 || ^9.1.5" }, - "bin": [ - "yii" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "1.9.x-dev" } }, "autoload": { "psr-4": { - "yii\\": "" + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Qiang Xue", - "email": "qiang.xue@gmail.com", - "homepage": "http://www.yiiframework.com/", - "role": "Founder and project lead" - }, - { - "name": "Alexander Makarov", - "email": "sam@rmcreative.ru", - "homepage": "http://rmcreative.ru/", - "role": "Core framework development" - }, - { - "name": "Maurizio Domba", - "homepage": "http://mdomba.info/", - "role": "Core framework development" + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" }, { - "name": "Carsten Brandt", - "email": "mail@cebe.cc", - "homepage": "http://cebe.cc/", - "role": "Core framework development" + "name": "Roman Borschel", + "email": "roman@code-factory.org" }, { - "name": "Timur Ruziev", - "email": "resurtm@gmail.com", - "homepage": "http://resurtm.com/", - "role": "Core framework development" + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" }, { - "name": "Paul Klimov", - "email": "klimov.paul@gmail.com", - "role": "Core framework development" + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" }, { - "name": "Dmitry Naumenko", - "email": "d.naumenko.a@gmail.com", - "role": "Core framework development" + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" } ], - "description": "Yii PHP Framework Version 2", - "homepage": "http://www.yiiframework.com/", + "description": "Docblock Annotations Parser", + "homepage": "http://www.doctrine-project.org", "keywords": [ - "framework", - "yii2" + "annotations", + "docblock", + "parser" ], - "time": "2016-02-14 14:45:55" + "time": "2020-08-10T19:35:50+00:00" }, { - "name": "yiisoft/yii2-bootstrap", - "version": "2.0.6", + "name": "doctrine/lexer", + "version": "1.0.2", "source": { "type": "git", - "url": "https://github.com/yiisoft/yii2-bootstrap.git", - "reference": "3fd2b8c950cce79d60e9702d6bcb24eb3c80f6c5" + "url": "https://github.com/doctrine/lexer.git", + "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-bootstrap/zipball/3fd2b8c950cce79d60e9702d6bcb24eb3c80f6c5", - "reference": "3fd2b8c950cce79d60e9702d6bcb24eb3c80f6c5", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/1febd6c3ef84253d7c815bed85fc622ad207a9f8", + "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8", "shasum": "" }, "require": { - "bower-asset/bootstrap": "3.3.* | 3.2.* | 3.1.*", - "yiisoft/yii2": ">=2.0.6" + "php": ">=5.3.2" }, - "type": "yii2-extension", + "require-dev": { + "phpunit/phpunit": "^4.5" + }, + "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" - }, - "asset-installer-paths": { - "npm-asset-library": "vendor/npm", - "bower-asset-library": "vendor/bower" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "yii\\bootstrap\\": "" + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Qiang Xue", - "email": "qiang.xue@gmail.com" - } - ], - "description": "The Twitter Bootstrap extension for the Yii framework", + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", "keywords": [ - "bootstrap", + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "time": "2019-06-08T11:03:04+00:00" + }, + { + "name": "ezyang/htmlpurifier", + "version": "v4.13.0", + "source": { + "type": "git", + "url": "https://github.com/ezyang/htmlpurifier.git", + "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/08e27c97e4c6ed02f37c5b2b20488046c8d90d75", + "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75", + "shasum": "" + }, + "require": { + "php": ">=5.2" + }, + "require-dev": { + "simpletest/simpletest": "dev-master#72de02a7b80c6bb8864ef9bf66d41d2f58f826bd" + }, + "type": "library", + "autoload": { + "psr-0": { + "HTMLPurifier": "library/" + }, + "files": [ + "library/HTMLPurifier.composer.php" + ], + "exclude-from-classmap": [ + "/library/HTMLPurifier/Language/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Edward Z. Yang", + "email": "admin@htmlpurifier.org", + "homepage": "http://ezyang.com" + } + ], + "description": "Standards compliant HTML filter written in PHP", + "homepage": "http://htmlpurifier.org/", + "keywords": [ + "html" + ], + "time": "2020-06-29T00:56:53+00:00" + }, + { + "name": "friendsofphp/php-cs-fixer", + "version": "v2.16.4", + "source": { + "type": "git", + "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", + "reference": "1023c3458137ab052f6ff1e09621a721bfdeca13" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/1023c3458137ab052f6ff1e09621a721bfdeca13", + "reference": "1023c3458137ab052f6ff1e09621a721bfdeca13", + "shasum": "" + }, + "require": { + "composer/semver": "^1.4", + "composer/xdebug-handler": "^1.2", + "doctrine/annotations": "^1.2", + "ext-json": "*", + "ext-tokenizer": "*", + "php": "^5.6 || ^7.0", + "php-cs-fixer/diff": "^1.3", + "symfony/console": "^3.4.17 || ^4.1.6 || ^5.0", + "symfony/event-dispatcher": "^3.0 || ^4.0 || ^5.0", + "symfony/filesystem": "^3.0 || ^4.0 || ^5.0", + "symfony/finder": "^3.0 || ^4.0 || ^5.0", + "symfony/options-resolver": "^3.0 || ^4.0 || ^5.0", + "symfony/polyfill-php70": "^1.0", + "symfony/polyfill-php72": "^1.4", + "symfony/process": "^3.0 || ^4.0 || ^5.0", + "symfony/stopwatch": "^3.0 || ^4.0 || ^5.0" + }, + "require-dev": { + "johnkary/phpunit-speedtrap": "^1.1 || ^2.0 || ^3.0", + "justinrainbow/json-schema": "^5.0", + "keradus/cli-executor": "^1.2", + "mikey179/vfsstream": "^1.6", + "php-coveralls/php-coveralls": "^2.1", + "php-cs-fixer/accessible-object": "^1.0", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.1", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.1", + "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.1", + "phpunitgoodpractices/traits": "^1.8", + "symfony/phpunit-bridge": "^5.1", + "symfony/yaml": "^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "ext-dom": "For handling output formats in XML", + "ext-mbstring": "For handling non-UTF8 characters.", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "For IsIdenticalString constraint.", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "For XmlMatchesXsd constraint.", + "symfony/polyfill-mbstring": "When enabling `ext-mbstring` is not possible." + }, + "bin": [ + "php-cs-fixer" + ], + "type": "application", + "autoload": { + "psr-4": { + "PhpCsFixer\\": "src/" + }, + "classmap": [ + "tests/Test/AbstractFixerTestCase.php", + "tests/Test/AbstractIntegrationCaseFactory.php", + "tests/Test/AbstractIntegrationTestCase.php", + "tests/Test/Assert/AssertTokensTrait.php", + "tests/Test/IntegrationCase.php", + "tests/Test/IntegrationCaseFactory.php", + "tests/Test/IntegrationCaseFactoryInterface.php", + "tests/Test/InternalIntegrationCaseFactory.php", + "tests/Test/IsIdenticalConstraint.php", + "tests/TestCase.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Dariusz Rumiński", + "email": "dariusz.ruminski@gmail.com" + } + ], + "description": "A tool to automatically fix PHP code style", + "time": "2020-06-27T23:57:46+00:00" + }, + { + "name": "mikehaertl/php-shellcommand", + "version": "1.6.2", + "source": { + "type": "git", + "url": "https://github.com/mikehaertl/php-shellcommand.git", + "reference": "06d6220c77c4632b639f4855f76026c59bceb8aa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mikehaertl/php-shellcommand/zipball/06d6220c77c4632b639f4855f76026c59bceb8aa", + "reference": "06d6220c77c4632b639f4855f76026c59bceb8aa", + "shasum": "" + }, + "require": { + "php": ">= 5.4.0" + }, + "require-dev": { + "phpunit/phpunit": ">4.0 <8" + }, + "type": "library", + "autoload": { + "psr-4": { + "mikehaertl\\shellcommand\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Härtl", + "email": "haertl.mike@gmail.com" + } + ], + "description": "An object oriented interface to shell commands", + "keywords": [ + "shell" + ], + "time": "2020-08-30T09:56:40+00:00" + }, + { + "name": "paragonie/random_compat", + "version": "v9.99.99", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "shasum": "" + }, + "require": { + "php": "^7" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "polyfill", + "pseudorandom", + "random" + ], + "time": "2018-07-02T15:55:56+00:00" + }, + { + "name": "pheme/yii2-settings", + "version": "0.7", + "source": { + "type": "git", + "url": "https://github.com/phemellc/yii2-settings.git", + "reference": "5e15e82442a62007727466439735602555dde8df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phemellc/yii2-settings/zipball/5e15e82442a62007727466439735602555dde8df", + "reference": "5e15e82442a62007727466439735602555dde8df", + "shasum": "" + }, + "require": { + "pheme/yii2-toggle-column": "*", + "yiisoft/yii2": ">=2.0.6" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "yii2-extension", + "autoload": { + "psr-4": { + "pheme\\settings\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Aris Karageorgos", + "email": "aris@phe.me" + } + ], + "description": "Yii2 Database settings", + "keywords": [ + "Settings", + "config", + "yii2" + ], + "time": "2018-10-30T22:18:20+00:00" + }, + { + "name": "pheme/yii2-toggle-column", + "version": "0.8", + "source": { + "type": "git", + "url": "https://github.com/phemellc/yii2-toggle-column.git", + "reference": "5b760fcf15e02b3bcd1ab373b91bb05fbac2b729" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phemellc/yii2-toggle-column/zipball/5b760fcf15e02b3bcd1ab373b91bb05fbac2b729", + "reference": "5b760fcf15e02b3bcd1ab373b91bb05fbac2b729", + "shasum": "" + }, + "require": { + "yiisoft/yii2": ">=2.0.7" + }, + "type": "yii2-extension", + "autoload": { + "psr-4": { + "\\pheme\\grid\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aris Karageorgos", + "email": "aris@phe.me" + } + ], + "description": "Provides a toggle data column and action", + "keywords": [ + "column", + "extension", + "toggle", "yii2" ], - "time": "2016-03-17 03:29:28" + "time": "2020-07-09T16:07:24+00:00" + }, + { + "name": "php-cs-fixer/diff", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/PHP-CS-Fixer/diff.git", + "reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/dbd31aeb251639ac0b9e7e29405c1441907f5759", + "reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0", + "symfony/process": "^3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "SpacePossum" + } + ], + "description": "sebastian/diff v2 backport support for PHP5.6", + "homepage": "https://github.com/PHP-CS-Fixer", + "keywords": [ + "diff" + ], + "time": "2020-10-14T08:39:05+00:00" + }, + { + "name": "phpspec/php-diff", + "version": "v1.1.3", + "source": { + "type": "git", + "url": "https://github.com/phpspec/php-diff.git", + "reference": "fc1156187f9f6c8395886fe85ed88a0a245d72e9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/php-diff/zipball/fc1156187f9f6c8395886fe85ed88a0a245d72e9", + "reference": "fc1156187f9f6c8395886fe85ed88a0a245d72e9", + "shasum": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Diff": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Chris Boulton", + "homepage": "http://github.com/chrisboulton" + } + ], + "description": "A comprehensive library for generating differences between two hashable objects (strings or arrays).", + "time": "2020-09-18T13:47:07+00:00" + }, + { + "name": "psr/container", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "time": "2017-02-14T16:28:37+00:00" + }, + { + "name": "psr/log", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2020-03-23T09:12:05+00:00" + }, + { + "name": "schmunk42/retry", + "version": "0.0.1", + "source": { + "type": "git", + "url": "https://github.com/schmunk42/retry.git", + "reference": "c34c68c9e2a6e0f1bbab44c1dfceb73ba2a270a3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmunk42/retry/zipball/c34c68c9e2a6e0f1bbab44c1dfceb73ba2a270a3", + "reference": "c34c68c9e2a6e0f1bbab44c1dfceb73ba2a270a3", + "shasum": "" + }, + "require": { + "php": ">=5.4" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "files": [ + "src/retry.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + } + ], + "description": "A tiny library for retrying failing operations.", + "keywords": [ + "failure" + ], + "time": "2014-09-20T11:10:31+00:00" + }, + { + "name": "symfony/console", + "version": "v4.4.15", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/90933b39c7b312fc3ceaa1ddeac7eb48cb953124", + "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1|^2" + }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/event-dispatcher": "<4.3|>=5", + "symfony/lock": "<4.4", + "symfony/process": "<3.3" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/event-dispatcher": "^4.3", + "symfony/lock": "^4.4|^5.0", + "symfony/process": "^3.4|^4.0|^5.0", + "symfony/var-dumper": "^4.3|^5.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2020-09-15T07:58:55+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v4.4.15", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e17bb5e0663dc725f7cdcafc932132735b4725cd", + "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/event-dispatcher-contracts": "^1.1" + }, + "conflict": { + "symfony/dependency-injection": "<3.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "1.1" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/error-handler": "~3.4|~4.4", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^3.4|^4.0|^5.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "time": "2020-09-18T14:07:46+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v1.1.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7", + "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7", + "shasum": "" + }, + "require": { + "php": ">=7.1.3" + }, + "suggest": { + "psr/event-dispatcher": "", + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2020-07-06T13:19:58+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v4.4.15", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "ebc51494739d3b081ea543ed7c462fa73a4f74db" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/ebc51494739d3b081ea543ed7c462fa73a4f74db", + "reference": "ebc51494739d3b081ea543ed7c462fa73a4f74db", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-ctype": "~1.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "time": "2020-09-27T13:54:16+00:00" + }, + { + "name": "symfony/finder", + "version": "v4.4.15", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "60d08560f9aa72997c44077c40d47aa28a963230" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/60d08560f9aa72997c44077c40d47aa28a963230", + "reference": "60d08560f9aa72997c44077c40d47aa28a963230", + "shasum": "" + }, + "require": { + "php": ">=7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "time": "2020-10-02T07:34:48+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v4.4.15", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "02b120a79ff06b779819f1594a300226bfc75105" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/02b120a79ff06b779819f1594a300226bfc75105", + "reference": "02b120a79ff06b779819f1594a300226bfc75105", + "shasum": "" + }, + "require": { + "php": ">=7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony OptionsResolver Component", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "time": "2020-09-24T16:40:22+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "1c302646f6efc070cd46856e600e5e0684d6b454" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454", + "reference": "1c302646f6efc070cd46856e600e5e0684d6b454", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "time": "2020-07-14T12:35:20+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a", + "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2020-07-14T12:35:20+00:00" + }, + { + "name": "symfony/polyfill-php70", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php70.git", + "reference": "0dd93f2c578bdc9c72697eaa5f1dd25644e618d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/0dd93f2c578bdc9c72697eaa5f1dd25644e618d3", + "reference": "0dd93f2c578bdc9c72697eaa5f1dd25644e618d3", + "shasum": "" + }, + "require": { + "paragonie/random_compat": "~1.0|~2.0|~9.99", + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php70\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2020-07-14T12:35:20+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "639447d008615574653fb3bc60d1986d7172eaae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/639447d008615574653fb3bc60d1986d7172eaae", + "reference": "639447d008615574653fb3bc60d1986d7172eaae", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2020-07-14T12:35:20+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fffa1a52a023e782cdcc221d781fe1ec8f87fcca", + "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2020-07-14T12:35:20+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/d87d5766cbf48d72388a9f6b85f280c8ad51f981", + "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981", + "shasum": "" + }, + "require": { + "php": ">=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2020-07-14T12:35:20+00:00" + }, + { + "name": "symfony/process", + "version": "v4.4.15", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "9b887acc522935f77555ae8813495958c7771ba7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/9b887acc522935f77555ae8813495958c7771ba7", + "reference": "9b887acc522935f77555ae8813495958c7771ba7", + "shasum": "" + }, + "require": { + "php": ">=7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Process Component", + "homepage": "https://symfony.com", + "time": "2020-09-02T16:08:58+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v1.1.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "b776d18b303a39f56c63747bcb977ad4b27aca26" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/b776d18b303a39f56c63747bcb977ad4b27aca26", + "reference": "b776d18b303a39f56c63747bcb977ad4b27aca26", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "psr/container": "^1.0" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2020-07-06T13:19:58+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v4.4.15", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/6f89e19772cf61b3c65bab329fe0e318259fbd91", + "reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/service-contracts": "^1.0|^2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Stopwatch Component", + "homepage": "https://symfony.com", + "time": "2020-09-02T16:08:58+00:00" + }, + { + "name": "yiisoft/yii2", + "version": "2.0.38", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii2-framework.git", + "reference": "fd01e747cc66a049ec105048f0ab8dfbdf60bf4b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii2-framework/zipball/fd01e747cc66a049ec105048f0ab8dfbdf60bf4b", + "reference": "fd01e747cc66a049ec105048f0ab8dfbdf60bf4b", + "shasum": "" + }, + "require": { + "bower-asset/inputmask": "~3.2.2 | ~3.3.5", + "bower-asset/jquery": "3.5.*@stable | 3.4.*@stable | 3.3.*@stable | 3.2.*@stable | 3.1.*@stable | 2.2.*@stable | 2.1.*@stable | 1.11.*@stable | 1.12.*@stable", + "bower-asset/punycode": "1.3.*", + "bower-asset/yii2-pjax": "~2.0.1", + "cebe/markdown": "~1.0.0 | ~1.1.0 | ~1.2.0", + "ext-ctype": "*", + "ext-mbstring": "*", + "ezyang/htmlpurifier": "~4.6", + "lib-pcre": "*", + "php": ">=5.4.0", + "yiisoft/yii2-composer": "~2.0.4" + }, + "bin": [ + "yii" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "yii\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Qiang Xue", + "email": "qiang.xue@gmail.com", + "homepage": "http://www.yiiframework.com/", + "role": "Founder and project lead" + }, + { + "name": "Alexander Makarov", + "email": "sam@rmcreative.ru", + "homepage": "http://rmcreative.ru/", + "role": "Core framework development" + }, + { + "name": "Maurizio Domba", + "homepage": "http://mdomba.info/", + "role": "Core framework development" + }, + { + "name": "Carsten Brandt", + "email": "mail@cebe.cc", + "homepage": "http://cebe.cc/", + "role": "Core framework development" + }, + { + "name": "Timur Ruziev", + "email": "resurtm@gmail.com", + "homepage": "http://resurtm.com/", + "role": "Core framework development" + }, + { + "name": "Paul Klimov", + "email": "klimov.paul@gmail.com", + "role": "Core framework development" + }, + { + "name": "Dmitry Naumenko", + "email": "d.naumenko.a@gmail.com", + "role": "Core framework development" + }, + { + "name": "Boudewijn Vahrmeijer", + "email": "info@dynasource.eu", + "homepage": "http://dynasource.eu", + "role": "Core framework development" + } + ], + "description": "Yii PHP Framework Version 2", + "homepage": "http://www.yiiframework.com/", + "keywords": [ + "framework", + "yii2" + ], + "time": "2020-09-14T21:52:10+00:00" + }, + { + "name": "yiisoft/yii2-bootstrap", + "version": "2.0.10", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii2-bootstrap.git", + "reference": "073c9ab0a4eb71f2485d84c96a1967130300d8fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii2-bootstrap/zipball/073c9ab0a4eb71f2485d84c96a1967130300d8fc", + "reference": "073c9ab0a4eb71f2485d84c96a1967130300d8fc", + "shasum": "" + }, + "require": { + "bower-asset/bootstrap": "3.4.* | 3.3.* | 3.2.* | 3.1.*", + "yiisoft/yii2": "~2.0.6" + }, + "require-dev": { + "phpunit/phpunit": "<7" + }, + "type": "yii2-extension", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "yii\\bootstrap\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Paul Klimov", + "email": "klimov.paul@gmail.com" + }, + { + "name": "Alexander Makarov", + "email": "sam@rmcreative.ru", + "homepage": "http://rmcreative.ru/" + }, + { + "name": "Antonio Ramirez", + "email": "amigo.cobos@gmail.com" + }, + { + "name": "Qiang Xue", + "email": "qiang.xue@gmail.com", + "homepage": "http://www.yiiframework.com/" + } + ], + "description": "The Twitter Bootstrap extension for the Yii framework", + "keywords": [ + "bootstrap", + "yii2" + ], + "time": "2019-04-23T13:18:43+00:00" + }, + { + "name": "yiisoft/yii2-composer", + "version": "2.0.10", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii2-composer.git", + "reference": "94bb3f66e779e2774f8776d6e1bdeab402940510" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii2-composer/zipball/94bb3f66e779e2774f8776d6e1bdeab402940510", + "reference": "94bb3f66e779e2774f8776d6e1bdeab402940510", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0 | ^2.0" + }, + "require-dev": { + "composer/composer": "^1.0 | ^2.0@dev", + "phpunit/phpunit": "<7" + }, + "type": "composer-plugin", + "extra": { + "class": "yii\\composer\\Plugin", + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "yii\\composer\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Qiang Xue", + "email": "qiang.xue@gmail.com" + }, + { + "name": "Carsten Brandt", + "email": "mail@cebe.cc" + } + ], + "description": "The composer plugin for Yii extension installer", + "keywords": [ + "composer", + "extension installer", + "yii2" + ], + "time": "2020-06-24T00:04:01+00:00" + }, + { + "name": "yiisoft/yii2-gii", + "version": "2.2.1", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii2-gii.git", + "reference": "f3bb400b578b0a0ee737d267ebaffdaad7b32dee" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii2-gii/zipball/f3bb400b578b0a0ee737d267ebaffdaad7b32dee", + "reference": "f3bb400b578b0a0ee737d267ebaffdaad7b32dee", + "shasum": "" + }, + "require": { + "phpspec/php-diff": "^1.1.0", + "yiisoft/yii2": "~2.0.14" + }, + "require-dev": { + "phpunit/phpunit": "<7", + "yiisoft/yii2-coding-standards": "~2.0" + }, + "type": "yii2-extension", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "yii\\gii\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Qiang Xue", + "email": "qiang.xue@gmail.com" + } + ], + "description": "The Gii extension for the Yii framework", + "keywords": [ + "code generator", + "gii", + "yii2" + ], + "time": "2020-05-02T11:59:43+00:00" + } + ], + "packages-dev": [ + { + "name": "behat/gherkin", + "version": "v4.6.2", + "source": { + "type": "git", + "url": "https://github.com/Behat/Gherkin.git", + "reference": "51ac4500c4dc30cbaaabcd2f25694299df666a31" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/51ac4500c4dc30cbaaabcd2f25694299df666a31", + "reference": "51ac4500c4dc30cbaaabcd2f25694299df666a31", + "shasum": "" + }, + "require": { + "php": ">=5.3.1" + }, + "require-dev": { + "phpunit/phpunit": "~4.5|~5", + "symfony/phpunit-bridge": "~2.7|~3|~4", + "symfony/yaml": "~2.3|~3|~4" + }, + "suggest": { + "symfony/yaml": "If you want to parse features, represented in YAML files" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-0": { + "Behat\\Gherkin": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + } + ], + "description": "Gherkin DSL parser for PHP 5.3", + "homepage": "http://behat.org/", + "keywords": [ + "BDD", + "Behat", + "Cucumber", + "DSL", + "gherkin", + "parser" + ], + "time": "2020-03-17T14:03:26+00:00" + }, + { + "name": "bower-asset/jquery-cookie", + "version": "v1.4.1", + "source": { + "type": "git", + "url": "https://github.com/carhartl/jquery-cookie.git", + "reference": "7f88a4e631aba8a8c688fd8999ce6b9bcfd50718" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/carhartl/jquery-cookie/zipball/7f88a4e631aba8a8c688fd8999ce6b9bcfd50718", + "reference": "7f88a4e631aba8a8c688fd8999ce6b9bcfd50718", + "shasum": "" + }, + "require": { + "bower-asset/jquery": ">=1.2" + }, + "type": "bower-asset-library", + "extra": { + "bower-asset-main": [ + "./jquery.cookie.js" + ], + "bower-asset-ignore": [ + "test", + ".*", + "*.json", + "*.md", + "*.txt", + "Gruntfile.js" + ] + }, + "time": "2014-04-27T20:07:15+00:00" + }, + { + "name": "codeception/codeception", + "version": "2.5.6", + "source": { + "type": "git", + "url": "https://github.com/Codeception/Codeception.git", + "reference": "b83a9338296e706fab2ceb49de8a352fbca3dc98" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/Codeception/zipball/b83a9338296e706fab2ceb49de8a352fbca3dc98", + "reference": "b83a9338296e706fab2ceb49de8a352fbca3dc98", + "shasum": "" + }, + "require": { + "behat/gherkin": "^4.4.0", + "codeception/phpunit-wrapper": "^6.0.9|^7.0.6", + "codeception/stub": "^2.0", + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "facebook/webdriver": ">=1.1.3 <2.0", + "guzzlehttp/guzzle": ">=4.1.4 <7.0", + "guzzlehttp/psr7": "~1.0", + "php": ">=5.6.0 <8.0", + "symfony/browser-kit": ">=2.7 <5.0", + "symfony/console": ">=2.7 <5.0", + "symfony/css-selector": ">=2.7 <5.0", + "symfony/dom-crawler": ">=2.7 <5.0", + "symfony/event-dispatcher": ">=2.7 <5.0", + "symfony/finder": ">=2.7 <5.0", + "symfony/yaml": ">=2.7 <5.0" + }, + "require-dev": { + "codeception/specify": "~0.3", + "facebook/graph-sdk": "~5.3", + "flow/jsonpath": "~0.2", + "monolog/monolog": "~1.8", + "pda/pheanstalk": "~3.0", + "php-amqplib/php-amqplib": "~2.4", + "predis/predis": "^1.0", + "squizlabs/php_codesniffer": "~2.0", + "symfony/process": ">=2.7 <5.0", + "vlucas/phpdotenv": "^3.0" + }, + "suggest": { + "aws/aws-sdk-php": "For using AWS Auth in REST module and Queue module", + "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests", + "codeception/specify": "BDD-style code blocks", + "codeception/verify": "BDD-style assertions", + "flow/jsonpath": "For using JSONPath in REST module", + "league/factory-muffin": "For DataFactory module", + "league/factory-muffin-faker": "For Faker support in DataFactory module", + "phpseclib/phpseclib": "for SFTP option in FTP Module", + "stecman/symfony-console-completion": "For BASH autocompletion", + "symfony/phpunit-bridge": "For phpunit-bridge support" + }, + "bin": [ + "codecept" + ], + "type": "library", + "extra": { + "branch-alias": [] + }, + "autoload": { + "psr-4": { + "Codeception\\": "src/Codeception", + "Codeception\\Extension\\": "ext" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk", + "email": "davert@mail.ua", + "homepage": "http://codegyre.com" + } + ], + "description": "BDD-style testing framework", + "homepage": "http://codeception.com/", + "keywords": [ + "BDD", + "TDD", + "acceptance testing", + "functional testing", + "unit testing" + ], + "time": "2019-04-24T11:28:19+00:00" + }, + { + "name": "codeception/phpunit-wrapper", + "version": "7.8.1", + "source": { + "type": "git", + "url": "https://github.com/Codeception/phpunit-wrapper.git", + "reference": "bc6f37d770ec00c4c7c78a1cac2b8ac0f9c9eec5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/bc6f37d770ec00c4c7c78a1cac2b8ac0f9c9eec5", + "reference": "bc6f37d770ec00c4c7c78a1cac2b8ac0f9c9eec5", + "shasum": "" + }, + "require": { + "phpunit/php-code-coverage": "^6.0", + "phpunit/phpunit": "7.5.*", + "sebastian/comparator": "^3.0", + "sebastian/diff": "^3.0" + }, + "require-dev": { + "codeception/specify": "*", + "vlucas/phpdotenv": "^3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Codeception\\PHPUnit\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Davert", + "email": "davert.php@resend.cc" + } + ], + "description": "PHPUnit classes used by Codeception", + "time": "2020-10-11T18:23:48+00:00" + }, + { + "name": "codeception/specify", + "version": "0.4.6", + "source": { + "type": "git", + "url": "https://github.com/Codeception/Specify.git", + "reference": "21b586f503ca444aa519dd9cafb32f113a05f286" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/Specify/zipball/21b586f503ca444aa519dd9cafb32f113a05f286", + "reference": "21b586f503ca444aa519dd9cafb32f113a05f286", + "shasum": "" + }, + "require": { + "myclabs/deep-copy": "~1.1", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Codeception\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk", + "email": "davert.php@mailican.com" + } + ], + "description": "BDD code blocks for PHPUnit and Codeception", + "time": "2016-10-21T09:42:00+00:00" + }, + { + "name": "codeception/stub", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/Codeception/Stub.git", + "reference": "853657f988942f7afb69becf3fd0059f192c705a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/Stub/zipball/853657f988942f7afb69becf3fd0059f192c705a", + "reference": "853657f988942f7afb69becf3fd0059f192c705a", + "shasum": "" + }, + "require": { + "codeception/phpunit-wrapper": ">6.0.15 <6.1.0 | ^6.6.1 | ^7.7.1 | ^8.0.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Codeception\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Flexible Stub wrapper for PHPUnit's Mock Builder", + "time": "2019-03-02T15:35:10+00:00" + }, + { + "name": "dmstr/yii2-web", + "version": "0.4.2", + "source": { + "type": "git", + "url": "https://github.com/dmstr/yii2-web.git", + "reference": "cb1c388dc1583b45dc99b1c254b15eb5d110a912" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dmstr/yii2-web/zipball/cb1c388dc1583b45dc99b1c254b15eb5d110a912", + "reference": "cb1c388dc1583b45dc99b1c254b15eb5d110a912", + "shasum": "" + }, + "require": { + "yiisoft/yii2": "2.0.*" + }, + "type": "yii2-extension", + "autoload": { + "psr-4": { + "dmstr\\web\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Christopher Stebe", + "email": "c.stebe@herzogkommunikation.de" + } + ], + "description": "Yii2 Framework web traits", + "keywords": [ + "behaviors", + "extension", + "traits", + "yii2" + ], + "time": "2017-06-02T16:16:50+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "f350df0268e904597e3bd9c4685c53e0e333feea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea", + "reference": "f350df0268e904597e3bd9c4685c53e0e333feea", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.13", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-shim": "^0.11", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2020-05-29T17:27:14+00:00" + }, + { + "name": "facebook/webdriver", + "version": "1.7.1", + "source": { + "type": "git", + "url": "https://github.com/php-webdriver/php-webdriver-archive.git", + "reference": "e43de70f3c7166169d0f14a374505392734160e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-webdriver/php-webdriver-archive/zipball/e43de70f3c7166169d0f14a374505392734160e5", + "reference": "e43de70f3c7166169d0f14a374505392734160e5", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "ext-zip": "*", + "php": "^5.6 || ~7.0", + "symfony/process": "^2.8 || ^3.1 || ^4.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.0", + "jakub-onderka/php-parallel-lint": "^0.9.2", + "php-coveralls/php-coveralls": "^2.0", + "php-mock/php-mock-phpunit": "^1.1", + "phpunit/phpunit": "^5.7", + "sebastian/environment": "^1.3.4 || ^2.0 || ^3.0", + "squizlabs/php_codesniffer": "^2.6", + "symfony/var-dumper": "^3.3 || ^4.0" + }, + "suggest": { + "ext-SimpleXML": "For Firefox profile creation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-community": "1.5-dev" + } + }, + "autoload": { + "psr-4": { + "Facebook\\WebDriver\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "A PHP client for Selenium WebDriver", + "homepage": "https://github.com/facebook/php-webdriver", + "keywords": [ + "facebook", + "php", + "selenium", + "webdriver" + ], + "abandoned": "php-webdriver/webdriver", + "time": "2019-06-13T08:02:18+00:00" + }, + { + "name": "fortawesome/font-awesome", + "version": "v4.7.0", + "source": { + "type": "git", + "url": "https://github.com/FortAwesome/Font-Awesome.git", + "reference": "a8386aae19e200ddb0f6845b5feeee5eb7013687" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FortAwesome/Font-Awesome/zipball/a8386aae19e200ddb0f6845b5feeee5eb7013687", + "reference": "a8386aae19e200ddb0f6845b5feeee5eb7013687", + "shasum": "" + }, + "require-dev": { + "jekyll": "1.0.2", + "lessc": "1.4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.6.x-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "OFL-1.1", + "MIT" + ], + "authors": [ + { + "name": "Dave Gandy", + "email": "dave@fontawesome.io", + "homepage": "http://twitter.com/davegandy", + "role": "Developer" + } + ], + "description": "The iconic font and CSS framework", + "homepage": "http://fontawesome.io/", + "keywords": [ + "FontAwesome", + "awesome", + "bootstrap", + "font", + "icon" + ], + "time": "2016-10-24T15:52:54+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "6.5.5", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", + "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.6.1", + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.17.0" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.1" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.5-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2020-06-16T21:01:06+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "60d379c243457e073cff02bc323a2a86cb355631" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/60d379c243457e073cff02bc323a2a86cb355631", + "reference": "60d379c243457e073cff02bc323a2a86cb355631", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4 || ^5.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2020-09-30T07:37:28+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.7.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/53330f47520498c0ae1f61f7e2c90f55690c06a3", + "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-zlib": "*", + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2020-09-30T07:37:11+00:00" + }, + { + "name": "insolita/yii2-adminlte-widgets", + "version": "v1.1.6", + "source": { + "type": "git", + "url": "https://github.com/Insolita/yii2-adminlte-widgets.git", + "reference": "a4e292e0aea1427ef769ab8c5ee09d8846f214b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Insolita/yii2-adminlte-widgets/zipball/a4e292e0aea1427ef769ab8c5ee09d8846f214b5", + "reference": "a4e292e0aea1427ef769ab8c5ee09d8846f214b5", + "shasum": "" + }, + "require": { + "bower-asset/jquery-cookie": "~1.4.1", + "yiisoft/yii2": "*" + }, + "type": "yii2-extension", + "autoload": { + "psr-4": { + "insolita\\wgadminlte\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "insolita", + "email": "donnainsolita@gmail.com" + } + ], + "description": "Widgets for AdminLTE theme (Box with remember collapse state, Timeline, Tile, Callout, SmallBox etc)", + "keywords": [ + "AdminLTE", + "widget", + "yii2" + ], + "time": "2016-06-02T20:58:50+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.10.1", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", + "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "replace": { + "myclabs/deep-copy": "self.version" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "time": "2020-06-29T13:22:24+00:00" + }, + { + "name": "phar-io/manifest", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "phar-io/version": "^2.0", + "php": "^5.6 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "time": "2018-07-08T19:23:20+00:00" + }, + { + "name": "phar-io/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "time": "2018-07-08T19:19:57+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b", + "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2020-04-27T09:25:28+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "4.3.4", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/da3fd972d6bafd628114f7e7e036f45944b62e9c", + "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c", + "shasum": "" + }, + "require": { + "php": "^7.0", + "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0", + "phpdocumentor/type-resolver": "~0.4 || ^1.0.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "doctrine/instantiator": "^1.0.5", + "mockery/mockery": "^1.0", + "phpdocumentor/type-resolver": "0.4.*", + "phpunit/phpunit": "^6.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2019-12-28T18:55:12+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", + "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", + "shasum": "" + }, + "require": { + "php": "^7.1", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "^7.1", + "mockery/mockery": "~1", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "time": "2019-08-22T18:11:29+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "v1.10.3", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "451c3cd1418cf640de218914901e51b064abb093" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", + "reference": "451c3cd1418cf640de218914901e51b064abb093", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", + "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5 || ^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Prophecy\\": "src/Prophecy" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2020-03-05T15:02:03+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "6.1.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", + "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^7.1", + "phpunit/php-file-iterator": "^2.0", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-token-stream": "^3.0", + "sebastian/code-unit-reverse-lookup": "^1.0.1", + "sebastian/environment": "^3.1 || ^4.0", + "sebastian/version": "^2.0.1", + "theseer/tokenizer": "^1.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.0" + }, + "suggest": { + "ext-xdebug": "^2.6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2018-10-31T16:06:48+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "050bedf145a257b1ff02746c31894800e5122946" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", + "reference": "050bedf145a257b1ff02746c31894800e5122946", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2018-09-13T20:33:42+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21T13:50:34+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "2.1.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", + "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2019-06-07T04:22:29+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff", + "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "abandoned": true, + "time": "2019-09-17T06:23:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "7.5.20", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "9467db479d1b0487c99733bb1e7944d32deded2c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9467db479d1b0487c99733bb1e7944d32deded2c", + "reference": "9467db479d1b0487c99733bb1e7944d32deded2c", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "myclabs/deep-copy": "^1.7", + "phar-io/manifest": "^1.0.2", + "phar-io/version": "^2.0", + "php": "^7.1", + "phpspec/prophecy": "^1.7", + "phpunit/php-code-coverage": "^6.0.7", + "phpunit/php-file-iterator": "^2.0.1", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-timer": "^2.1", + "sebastian/comparator": "^3.0", + "sebastian/diff": "^3.0", + "sebastian/environment": "^4.0", + "sebastian/exporter": "^3.1", + "sebastian/global-state": "^2.0", + "sebastian/object-enumerator": "^3.0.3", + "sebastian/resource-operations": "^2.0", + "sebastian/version": "^2.0.1" + }, + "conflict": { + "phpunit/phpunit-mock-objects": "*" + }, + "require-dev": { + "ext-pdo": "*" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*", + "phpunit/php-invoker": "^2.0" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.5-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2020-01-08T08:45:45+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "rmrevin/yii2-fontawesome", + "version": "2.17.1", + "source": { + "type": "git", + "url": "https://github.com/rmrevin/yii2-fontawesome.git", + "reference": "65ce306da864f4d558348aeba040ed7876878090" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rmrevin/yii2-fontawesome/zipball/65ce306da864f4d558348aeba040ed7876878090", + "reference": "65ce306da864f4d558348aeba040ed7876878090", + "shasum": "" + }, + "require": { + "fortawesome/font-awesome": "~4.7", + "php": ">=5.4.0", + "yiisoft/yii2": "2.0.*" + }, + "type": "yii2-extension", + "extra": { + "asset-installer-paths": { + "npm-asset-library": "vendor/npm", + "bower-asset-library": "vendor/bower" + } + }, + "autoload": { + "psr-4": { + "rmrevin\\yii\\fontawesome\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Revin Roman", + "email": "roman@rmrevin.com", + "homepage": "https://rmrevin.com/" + } + ], + "description": "Asset Bundle for Yii2 with Font Awesome", + "keywords": [ + "asset", + "awesome", + "bundle", + "font", + "yii" + ], + "time": "2017-01-11T14:05:47+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "time": "2017-03-04T06:30:41+00:00" + }, + { + "name": "sebastian/comparator", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "shasum": "" + }, + "require": { + "php": "^7.1", + "sebastian/diff": "^3.0", + "sebastian/exporter": "^3.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2018-07-12T15:12:46+00:00" + }, + { + "name": "sebastian/diff", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.5 || ^8.0", + "symfony/process": "^2 || ^3.3 || ^4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "time": "2019-02-04T06:01:07+00:00" + }, + { + "name": "sebastian/environment", + "version": "4.2.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/464c90d7bdf5ad4e8a6aea15c091fec0603d4368", + "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.5" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2019-11-20T08:46:58+00:00" + }, + { + "name": "sebastian/exporter", + "version": "3.1.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e", + "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e", + "shasum": "" + }, + "require": { + "php": "^7.0", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2019-09-14T09:02:43+00:00" + }, + { + "name": "sebastian/global-state", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2017-04-27T15:39:26+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "shasum": "" + }, + "require": { + "php": "^7.0", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "time": "2017-08-03T12:35:26+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "773f97c67f28de00d397be301821b06708fca0be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", + "reference": "773f97c67f28de00d397be301821b06708fca0be", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "time": "2017-03-29T09:07:27+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2017-03-03T06:23:57+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "time": "2018-10-04T04:07:39+00:00" + }, + { + "name": "sebastian/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2016-10-03T07:35:21+00:00" }, { - "name": "yiisoft/yii2-composer", - "version": "2.0.4", + "name": "symfony/browser-kit", + "version": "v4.4.15", "source": { "type": "git", - "url": "https://github.com/yiisoft/yii2-composer.git", - "reference": "7452fd908a5023b8bb5ea1b123a174ca080de464" + "url": "https://github.com/symfony/browser-kit.git", + "reference": "9a1786e5020783605a30cff2ceed9aca030e8d80" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-composer/zipball/7452fd908a5023b8bb5ea1b123a174ca080de464", - "reference": "7452fd908a5023b8bb5ea1b123a174ca080de464", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/9a1786e5020783605a30cff2ceed9aca030e8d80", + "reference": "9a1786e5020783605a30cff2ceed9aca030e8d80", "shasum": "" }, "require": { - "composer-plugin-api": "^1.0" + "php": ">=7.1.3", + "symfony/dom-crawler": "^3.4|^4.0|^5.0" }, - "type": "composer-plugin", + "require-dev": { + "symfony/css-selector": "^3.4|^4.0|^5.0", + "symfony/http-client": "^4.3|^5.0", + "symfony/mime": "^4.3|^5.0", + "symfony/process": "^3.4|^4.0|^5.0" + }, + "suggest": { + "symfony/process": "" + }, + "type": "library", "extra": { - "class": "yii\\composer\\Plugin", "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "4.4-dev" } }, "autoload": { "psr-4": { - "yii\\composer\\": "" + "Symfony\\Component\\BrowserKit\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony BrowserKit Component", + "homepage": "https://symfony.com", + "time": "2020-10-02T08:38:15+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v4.4.15", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "bf17dc9f6ce144e41f786c32435feea4d8e11dcc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/bf17dc9f6ce144e41f786c32435feea4d8e11dcc", + "reference": "bf17dc9f6ce144e41f786c32435feea4d8e11dcc", + "shasum": "" + }, + "require": { + "php": ">=7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" } }, + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Qiang Xue", - "email": "qiang.xue@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "The composer plugin for Yii extension installer", + "description": "Symfony CssSelector Component", + "homepage": "https://symfony.com", + "time": "2020-07-05T09:39:30+00:00" + }, + { + "name": "symfony/dom-crawler", + "version": "v4.4.15", + "source": { + "type": "git", + "url": "https://github.com/symfony/dom-crawler.git", + "reference": "bdcb7633a501770a0daefbf81d2e6b28c3864f2b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/bdcb7633a501770a0daefbf81d2e6b28c3864f2b", + "reference": "bdcb7633a501770a0daefbf81d2e6b28c3864f2b", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "masterminds/html5": "<2.6" + }, + "require-dev": { + "masterminds/html5": "^2.6", + "symfony/css-selector": "^3.4|^4.0|^5.0" + }, + "suggest": { + "symfony/css-selector": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\DomCrawler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony DomCrawler Component", + "homepage": "https://symfony.com", + "time": "2020-10-02T07:34:48+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "5dcab1bc7146cf8c1beaa4502a3d9be344334251" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/5dcab1bc7146cf8c1beaa4502a3d9be344334251", + "reference": "5dcab1bc7146cf8c1beaa4502a3d9be344334251", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php70": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", "keywords": [ - "composer", - "extension installer", - "yii2" + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" ], - "time": "2016-02-06 00:49:24" + "time": "2020-08-04T06:02:08+00:00" }, { - "name": "yiisoft/yii2-gii", - "version": "2.0.5", + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.18.1", "source": { "type": "git", - "url": "https://github.com/yiisoft/yii2-gii.git", - "reference": "1bd6df6804ca077ec022587905a0d43eb286f507" + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-gii/zipball/1bd6df6804ca077ec022587905a0d43eb286f507", - "reference": "1bd6df6804ca077ec022587905a0d43eb286f507", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e", + "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e", "shasum": "" }, "require": { - "bower-asset/typeahead.js": "0.10.* | ~0.11.0", - "phpspec/php-diff": ">=1.0.2", - "yiisoft/yii2": ">=2.0.4", - "yiisoft/yii2-bootstrap": "~2.0" + "php": ">=5.3.3" }, - "type": "yii2-extension", + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "1.18-dev" }, - "asset-installer-paths": { - "npm-asset-library": "vendor/npm", - "bower-asset-library": "vendor/bower" + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "time": "2020-07-14T12:35:20+00:00" + }, + { + "name": "symfony/yaml", + "version": "v4.4.15", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/c7885964b1eceb70b0981556d0a9b01d2d97c8d1", + "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/console": "<3.4" + }, + "require-dev": { + "symfony/console": "^3.4|^4.0|^5.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" } }, "autoload": { "psr-4": { - "yii\\gii\\": "" + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2020-09-27T03:36:23+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -762,20 +4941,64 @@ ], "authors": [ { - "name": "Qiang Xue", - "email": "qiang.xue@gmail.com" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" } ], - "description": "The Gii extension for the Yii framework", + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "time": "2019-06-13T22:48:21+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.9.1", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0 || ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<3.9.1" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36 || ^7.5.13" + }, + "type": "library", + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", "keywords": [ - "code generator", - "gii", - "yii2" + "assert", + "check", + "validate" ], - "time": "2016-03-18 14:09:46" + "time": "2020-07-08T17:02:28+00:00" } ], - "packages-dev": [], "aliases": [], "minimum-stability": "stable", "stability-flags": [], diff --git a/docs/20-batches.md b/docs/20-batches.md index 37b99b5a..f19f503e 100644 --- a/docs/20-batches.md +++ b/docs/20-batches.md @@ -2,33 +2,37 @@ Batches ======= > ### Important Notice! - +> > It is strongly recommended, to get familiar with the CLI usage of *Gii* and *Giiant*, since the code-generation process may be repeated several times in the inital development phase and using the CLI in conjunction with a script will save you a lot of time and also reduce your error rate! Configuration ------------- -It's recommended to configure a customized `batch` command in your application CLI configuration. +It's recommended to configure a customized `batch` command in your application CLI configuration, add the following code to your console application configuration. + + $crudNs = '\project\modules\crud'; + +With the config array... 'controllerMap' => [ 'batch' => [ 'class' => 'schmunk42\giiant\commands\BatchController', 'overwrite' => true, - 'modelNamespace' => 'app\\modules\\crud\\models', - 'modelQueryNamespace' => 'app\\modules\\crud\\models\\query', - 'crudControllerNamespace' => 'app\\modules\\crud\\controllers', - 'crudSearchModelNamespace' => 'app\\modules\\crud\\models\\search', - 'crudViewPath' => '@app/modules/crud/views', + 'modelNamespace' => $crudNs . '\models', + 'modelQueryNamespace' => $crudNs . '\models\query', + 'crudControllerNamespace' => $crudNs . '\controllers', + 'crudSearchModelNamespace' => $crudNs . '\models\search', + 'crudViewPath' => '@project/modules/crud/views', 'crudPathPrefix' => '/crud/', 'crudTidyOutput' => true, - 'crudAccessFilter' => true, + 'crudActionButtonColumnPosition' => 'right', //left by default 'crudProviders' => [ - 'schmunk42\\giiant\\generators\\crud\\providers\\optsProvider', + \schmunk42\giiant\generators\crud\providers\core\OptsProvider::className() ], 'tablePrefix' => 'app_', - /*'tables' => [ + 'tables' => [ 'app_profile', - ]*/ + ] ] ], @@ -59,6 +63,6 @@ You can also override the batch defaults via command line options, this example --overwrite=1 \ --modelDb=db \ --modelBaseClass=yii\\db\\ActiveRecord \ - --crudProviders=schmunk42\\giiant\\generators\\crud\\providers\\optsProvider \ + --crudProviders=schmunk42\\giiant\\generators\\crud\\providers\\core\\optsProvider \ --tables=account,article,variation_status ``` diff --git a/docs/25-cli-commands.md b/docs/25-cli-commands.md new file mode 100644 index 00000000..c817aba2 --- /dev/null +++ b/docs/25-cli-commands.md @@ -0,0 +1,349 @@ +# CLI + +## Batch command + +``` +$ yii giiant-batch -h +``` + +``` +DESCRIPTION + +SUB-COMMANDS + +- giiant-batch/cruds Run batch process to generate CRUDs all given tables. +- giiant-batch/index (default) Run batch process to generate models and CRUDs for all given tables. +- giiant-batch/models Run batch process to generate models all given tables. + +To see the detailed information about individual sub-commands, enter: + + yii help +``` + +Example: `yii giiant-batch/models` will generate only model classes. + + +## Model (Gii template) + +``` +$ yii gii/giiant-model -h +``` + +### Help + +``` +DESCRIPTION + +This generator generates an ActiveRecord class and base class for the +specified database table. + + +USAGE + +yii gii/giiant-model [...options...] + + +OPTIONS + +--appconfig: string + custom application configuration file path. + If not set, default application configuration is used. + +--baseClass: string (defaults to 'yii\db\ActiveRecord') + This is the base class of the new ActiveRecord class. It should be a fully + qualified namespaced class name. + +--baseClassSuffix: string (defaults to '') + +--baseTraits: string + +--color: boolean, 0 or 1 + whether to enable ANSI color in the output. + If not set, ANSI color will only be enabled for terminals that support it. + +--createdAtColumn: string (defaults to 'created_at') + The column name where the created at timestamp is stored. + +--createdByColumn: string (defaults to 'created_by') + The column name where the record creator's user ID is stored. + +--db: string (defaults to 'db') + This is the ID of the DB application component. + +--enableI18N: boolean, 0 or 1 (defaults to 0) + This indicates whether the generator should generate strings using Yii::t() + method. Set this to true if you are planning to make your application + translatable. + +--generateHintsFromComments: boolean, 0 or 1 (defaults to 1) + This indicates whether the generator should generate attribute hints by + using the comments of the corresponding DB columns. + +--generateLabelsFromComments: boolean, 0 or 1 (defaults to 0) + This indicates whether the generator should generate attribute labels by + using the comments of the corresponding DB columns. + +--generateModelClass: boolean, 0 or 1 (defaults to 0) + This indicates whether the generator should generate the model class, this + should usually be done only once. The model-base class is always generated. + +--generateQuery: boolean, 0 or 1 (defaults to 0) + This indicates whether to generate ActiveQuery for the ActiveRecord class. + +--generateRelations: string (defaults to 'all') + This indicates whether the generator should generate relations based on + foreign key constraints it detects in the database. Note that if your + database contains too many tables, you may want to uncheck this option to + accelerate the code generation process. + +--modelGenerateJunctionRelationMode: string (defaults to 'table') + This indicates whether junction relations are generated with `viaTable()` + or `via()` relations, use 'table' or 'model' respectively. + Make sure you also generate the junction models when using the 'model' option. + +--help, -h: boolean, 0 or 1 + whether to display help information about current command. + +--interactive: boolean, 0 or 1 (defaults to 1) + whether to run the command interactively. + +--languageCodeColumn: string (defaults to 'language') + The column name where the language code is stored. + +--languageTableName: string (defaults to '{{table}}_lang') + The name of the table containing the translations. {{table}} will be + replaced with the value in "Table Name" field. + +--messageCategory: string (defaults to 'models') + This is the category used by Yii::t() in case you enable I18N. + +--modelClass: string + This is the name of the ActiveRecord class to be generated. The class name + should not contain the namespace part as it is specified in "Namespace". + You do not need to specify the class name if "Table Name" ends with + asterisk, in which case multiple ActiveRecord classes will be generated. + +--ns: string (defaults to 'app\models') + This is the namespace of the ActiveRecord class to be generated, e.g., + app\models + +--overwrite: boolean, 0 or 1 (defaults to 0) + whether to overwrite all existing code files when in non-interactive mode. + Defaults to false, meaning none of the existing code files will be overwritten. + This option is used only when `--interactive=0`. + +--queryBaseClass: string (defaults to 'yii\db\ActiveQuery') + This is the base class of the new ActiveQuery class. It should be a fully + qualified namespaced class name. + +--queryClass: string + This is the name of the ActiveQuery class to be generated. The class name + should not contain the namespace part as it is specified in "ActiveQuery + Namespace". You do not need to specify the class name if "Table Name" ends + with asterisk, in which case multiple ActiveQuery classes will be + generated. + +--queryNs: string (defaults to 'app\models') + This is the namespace of the ActiveQuery class to be generated, e.g., + app\models + +--removeDuplicateRelations: boolean, 0 or 1 (defaults to 0) + +--cacheRelationsData: boolean, 0 or 1 (defaults to 1) + Should relation data be cached when generating multiple models + +--savedForm: string + Choose saved form ad load it data to form. + +--singularEntities: boolean, 0 or 1 (defaults to 0) + +--tableName (required): string + This is the name of the DB table that the new ActiveRecord class is + associated with, e.g. post. The table name may consist of the DB schema + part if needed, e.g. public.post. The table name may end with asterisk to + match multiple table names, e.g. tbl_* will match tables who name starts + with tbl_. In this case, multiple ActiveRecord classes will be generated, + one for each matching table name; and the class names will be generated + from the matching characters. For example, table tbl_post will generate + Post class. + +--tableNameMap: array + +--tablePrefix: string + Custom table prefix, eg app_.
Note! overrides yii\db\Connection + prefix! + +--template: string (defaults to 'default') + +--updatedAtColumn: string (defaults to 'updated_at') + The column name where the updated at timestamp is stored. + +--updatedByColumn: string (defaults to 'updated_by') + The column name where the record updater's user ID is stored. + +--useBlameableBehavior: boolean, 0 or 1 (defaults to 1) + Use BlameableBehavior for tables with column(s) for created by and/or + updated by user IDs. + +--useSchemaName: boolean, 0 or 1 (defaults to 1) + This indicates whether to include the schema name in the ActiveRecord class + when it's auto generated. Only non default schema would be used. + +--useTablePrefix: boolean, 0 or 1 (defaults to 0) + This indicates whether the table name returned by the generated + ActiveRecord class should consider the tablePrefix setting of the DB + connection. For example, if the table name is tbl_post and + tablePrefix=tbl_, the ActiveRecord class will return the table name as + {{%post}}. + +--useTimestampBehavior: boolean, 0 or 1 (defaults to 1) + Use TimestampBehavior for tables with column(s) for created at and/or + updated at timestamps. + +--useTranslatableBehavior: boolean, 0 or 1 (defaults to 1) + Use 2amigos/yii2-translateable-behavior for tables with a relation to a + translation table. +``` + +## CRUD (Gii template) + +``` +$ yii gii/giiant-crud -h +``` + +### Help + +``` +DESCRIPTION + +This generator generates an extended version of CRUDs. + + +USAGE + +yii gii/giiant-crud [...options...] + + +OPTIONS + +--accessFilter: boolean, 0 or 1 (defaults to 0) + +--actionButtonClass: string (defaults to 'yii\web\grid\ActionColumn') + +--appconfig: string + custom application configuration file path. + If not set, default application configuration is used. + +--baseControllerClass: string (defaults to 'yii\web\Controller') + This is the class that the new CRUD controller class will extend from. You + should provide a fully qualified class name, e.g., yii\web\Controller. + +--baseTraits: string + +--color: boolean, 0 or 1 + whether to enable ANSI color in the output. + If not set, ANSI color will only be enabled for terminals that support it. + +--controllerClass (required): string + This is the name of the controller class to be generated. You should + provide a fully qualified namespaced class (e.g. + app\controllers\PostController), and class name should be in CamelCase with + an uppercase first letter. Make sure the class is using the same namespace + as specified by your application's controllerNamespace property. + +--controllerNs: string + +--enableI18N: boolean, 0 or 1 (defaults to 0) + This indicates whether the generator should generate strings using Yii::t() + method. Set this to true if you are planning to make your application + translatable. + +--enablePjax: boolean, 0 or 1 (defaults to 0) + This indicates whether the generator should wrap the GridView or ListView + widget on the index page with yii\widgets\Pjax widget. Set this to true if + you want to get sorting, filtering and pagination without page refreshing. + +--fixOutput: boolean, 0 or 1 (defaults to 0) + +--formLayout: string (defaults to 'horizontal') + +--generateAccessFilterMigrations: boolean, 0 or 1 (defaults to 0) + +--gridMaxColumns: integer (defaults to 8) + +--gridRelationMaxColumns: integer (defaults to 8) + +--help, -h: boolean, 0 or 1 + whether to display help information about current command. + +--indexGridClass: string (defaults to 'yii\grid\GridView') + +--indexWidgetType: string (defaults to 'grid') + This is the widget type to be used in the index page to display list of the + models. You may choose either GridView or ListView + +--interactive: boolean, 0 or 1 (defaults to 1) + whether to run the command interactively. + +--messageCategory: string (defaults to 'cruds') + This is the category used by Yii::t() in case you enable I18N. + +--migrationClass: string + +--modelClass (required): string + This is the ActiveRecord class associated with the table that CRUD will be + built upon. You should provide a fully qualified class name, e.g., + app\models\Post. + +--modelMessageCategory: string (defaults to 'models') + Model message categry. + +--moduleNs: string + +--overwrite: boolean, 0 or 1 (defaults to 0) + whether to overwrite all existing code files when in non-interactive mode. + Defaults to false, meaning none of the existing code files will be overwritten. + This option is used only when `--interactive=0`. + +--overwriteControllerClass: boolean, 0 or 1 (defaults to 0) + +--overwriteRestControllerClass: boolean, 0 or 1 (defaults to 0) + +--overwriteSearchModelClass: boolean, 0 or 1 (defaults to 0) + +--pathPrefix: string + Customized route/subfolder for controllers and views eg. crud/. + Note! Should correspond to viewPath. + +--providerList: array + Choose the providers to be used. + +--requires: array + +--savedForm: string + Choose saved form ad load it data to form. + +--searchModelClass: string (defaults to '') + This is the name of the search model class to be generated. You should + provide a fully qualified namespaced class name, e.g., + app\models\PostSearch. + +--singularEntities: boolean, 0 or 1 (defaults to 0) + +--skipRelations: array + +--tablePrefix: string + +--template: string (defaults to 'default') + +--tidyOutput: boolean, 0 or 1 (defaults to 1) + +--viewPath: string (defaults to '@backend/views') + Output path for view files, eg. @backend/views/crud. + + +``` + + + + diff --git a/docs/30-using-providers.md b/docs/30-using-providers.md index 17882574..bf8ab521 100644 --- a/docs/30-using-providers.md +++ b/docs/30-using-providers.md @@ -20,19 +20,18 @@ Examples for this use-case are editors, file-uploads or choosers, complex input data via AJAX and so on. With Giiant Providers you can create a queue of instances which may provide custom code depending on more complex -rules. Take a look at some existing [giiant providers](https://github.com/schmunk42/yii2-giiant/tree/master/crud/providers). +rules. Take a look at some existing [giiant providers](https://github.com/schmunk42/yii2-giiant/tree/master/src/generators/crud/providers). -Configure providers, add this to your provider list in the form or command configuration: +To configure providers, add this to your provider list in the form or command configuration: - \schmunk42\giiant\generators\crud\providers\EditorProvider, - \schmunk42\giiant\generators\crud\providers\SelectProvider, - \schmunk42\giiant\generators\crud\providers\OptsProvider, + \schmunk42\giiant\generators\crud\providers\extensions\EditorProvider, + \schmunk42\giiant\generators\crud\providers\core\OptsProvider, -And configure the settings of the provider, add setting via dependecy injection this to your application config, eg. in `console/config/bootstrap.php`: +And to configure the settings of the provider, add settings via dependecy injection to your application config, e.g. in `console/config/bootstrap.php`: \Yii::$container->set( - 'schmunk42\giiant\generators\crud\providers\EditorProvider', + \schmunk42\giiant\generators\crud\providers\extensions\EditorProvider::class, [ 'columnNames' => ['description'] ] @@ -41,7 +40,7 @@ And configure the settings of the provider, add setting via dependecy injection This will render a Ckeditor widget for every column named `description`. field($model, 'description')->widget( - \dosamigos\ckeditor\CKEditor::className(), + \dosamigos\ckeditor\CKEditor::class, [ 'options' => ['rows' => 6], 'preset' => 'basic' @@ -87,7 +86,7 @@ Finally add the configuration via DI container ``` \Yii::$container->set( - 'schmunk42\giiant\generators\crud\providers\CallbackProvider', + \schmunk42\giiant\generators\crud\providers\core\CallbackProvider::class, [ 'activeFields' => $activeFields, 'columnFormats' => $columnFormats, @@ -98,6 +97,16 @@ Finally add the configuration via DI container **[More examples for this provider...](31-callback-provider-examples.md)** +To generate dropdown list in GridView filed search filter set configuration via DI container + +```php +\Yii::$container->set( + \schmunk42\giiant\generators\crud\providers\core\RelationProvider::class, + [ + 'gridFilterDropdownRelation' => true, + ] +); +``` ### Specialized providers @@ -107,7 +116,7 @@ Finally add the configuration via DI container Use a DateTimePicker for the `scheduled_at` field: ```php -\Yii::$container->set('schmunk42\giiant\generators\crud\providers\DateTimeProvider', [ +\Yii::$container->set('schmunk42\giiant\generators\crud\providers\extensions\DateTimeProvider', [ 'columnNames' => ['scheduled_at'], ]); ``` diff --git a/docs/31-callback-provider-examples.md b/docs/31-callback-provider-examples.md index 20533bf1..00a6b972 100644 --- a/docs/31-callback-provider-examples.md +++ b/docs/31-callback-provider-examples.md @@ -9,7 +9,7 @@ $attributeJobStatus = function ($attribute, $generator) { return << 'html', - 'attribute' => '{$attribute->name}', + 'attribute' => '{$attribute}', 'value' => \$model->getStatusLabel(), ] INPUT; @@ -23,7 +23,7 @@ $attributeMultiLine = function ($attribute, $generator) { return << 'ntext', - 'attribute' => '{$attribute->name}', + 'attribute' => '{$attribute}', ] INPUT; }; @@ -52,8 +52,8 @@ $attributeFormats = [ [ 'format' => 'html', #'label'=>'FOOFOO', - 'attribute' => '{$attribute->name}', - 'value'=> {$formattter}::contentJsonToHtml(\$model->{$attribute->name}) + 'attribute' => '{$attribute}', + 'value'=> {$formattter}::contentJsonToHtml(\$model->{$attribute}) ] FORMAT; @@ -73,7 +73,7 @@ Display a column using a callback to `Job::getStatusLabel()`: $columnJobStatus = function ($attribute, $generator) { return << '{$attribute->name}', + 'attribute' => '{$attribute}', 'format' => 'raw', 'value' => function (\$model) { return \$model->getStatusLabel(); @@ -87,7 +87,7 @@ INPUT; $columnMultiLine = function ($attribute, $generator) { return << '{$attribute->name}', + 'attribute' => '{$attribute}', 'format' => 'ntext', ] INPUT; @@ -165,7 +165,7 @@ Use a radio list field: $fieldJobType = function ($attribute, $generator) { $data = \yii\helpers\VarDumper::export(['pickup' => Yii::t('app', 'Pickup'), 'delivery' => Yii::t('app', 'Delivery')]); return <<field(\$model, '{$attribute->name}')->radioList({$data}); +\$form->field(\$model, '{$attribute}')->radioList({$data}); INPUT; }, ``` @@ -175,7 +175,7 @@ Customise the select field (the generator will already create this, only needed ```php $fieldJobStatus = function ($attribute, $generator) { return <<field($model, '{$attribute->name}')->dropDownList(Job::optsStatus()); +$form->field($model, '{$attribute}')->dropDownList(Job::optsStatus()); INPUT; }, ``` @@ -185,7 +185,7 @@ Use a text area for multi-line attributes: ```php $fieldMultiLine = function ($attribute, $generator) { return <<field(\$model, '{$attribute->name}')->textarea(); + \$form->field(\$model, '{$attribute}')->textarea(); INPUT; }, ``` @@ -209,7 +209,7 @@ For example we only want to show the fields that are safe: ```php $prependFieldSafe = function ($attribute, $generator) { return <<isAttributeSafe('{$attribute->name}')) { +if(\$model->isAttributeSafe('{$attribute}')) { INPUT; }; $appendFieldSafe = function ($attribute, $generator) { @@ -238,7 +238,7 @@ Join it all together To invoke the callback provider we pass in our callbacks as follows: ```php -\Yii::$container->set('schmunk42\giiant\generators\crud\providers\CallbackProvider', [ +\Yii::$container->set('schmunk42\giiant\generators\crud\providers\core\CallbackProvider', [ 'columnFormats' => $columnFormats, 'attributeFormats' => $attributeFormats, 'activeFields' => $activeFields, @@ -264,7 +264,7 @@ use schmunk42\giiant\generators\crud\callbacks\yii\Db; use schmunk42\giiant\generators\crud\callbacks\yii\Html; \Yii::$container->set( - 'schmunk42\giiant\generators\crud\providers\CallbackProvider', + 'schmunk42\giiant\generators\crud\providers\core\CallbackProvider', [ 'columnFormats' => [ // hide system fields, but not ID in table diff --git a/docs/32-customizations.md b/docs/32-customizations.md index e2983e19..b7befd51 100644 --- a/docs/32-customizations.md +++ b/docs/32-customizations.md @@ -26,8 +26,7 @@ class SakilaActiveRecord extends ActiveRecord } ``` -Use custom generators, model and crud templates ------------------------------------------------ +### Use custom generators, model and crud templates ``` $config['modules']['gii'] = [ @@ -47,4 +46,18 @@ $config['modules']['gii'] = [ ] ], ]; +``` + +### Customize the order of attributes in Gridview, DetailView and form + +You can define the order of attributes that is used when generating Gridview, DetailView and form by definining a `crud` scenario in the model: + +```php + public function scenarios() + { + $scenarios = parent::scenarios(); + // define order of columns for Giiant generator + $scenarios['crud'] = ['id', 'name', 'user_id', 'status', 'reference', 'created_at', 'updated_at']; + return $scenarios; + } ``` \ No newline at end of file diff --git a/docs/60-troubleshooting.md b/docs/60-troubleshooting.md index c2cecb40..ca8ab07a 100644 --- a/docs/60-troubleshooting.md +++ b/docs/60-troubleshooting.md @@ -1,4 +1,3 @@ - Troubleshooting --------------- @@ -42,7 +41,7 @@ Command line example for Windows ``` yii giiant-batch ^ --modelNamespace=app\models ^ - --crudProviders=schmunk42\giiant\generators\crud\\providers\optsProvider ^ + --crudProviders=schmunk42\giiant\generators\crud\providers\core\OptsProvider ^ --tables=account,article ``` diff --git a/docs/README.md b/docs/README.md index fa62b0d0..d7b3dc65 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,11 +2,15 @@ Table of contents ----------------- - [Command-line batches](20-batches.md) +- [Web UI](21-web-ui.md) +- [Command options](25-cli-commands.md) - [Customization with providers](30-using-providers.md) - [Callback provider examples](31-callback-provider-examples.md) - [Custom code-generator templates](32-customizations.md) +- [Generating Unit tests](33-generating-unit-tests.md) - [Testing giiant](40-testing-giiant.md) + ### Advanced topics - [Sakila backend](50-generate-sakila-backend.md) diff --git a/docs/example-config.php b/docs/example-config.php index fa4738ca..06dae0d8 100644 --- a/docs/example-config.php +++ b/docs/example-config.php @@ -11,7 +11,7 @@ }; \Yii::$container->set( - 'schmunk42\giiant\generators\crud\providers\CallbackProvider', + \schmunk42\giiant\generators\crud\providers\core\CallbackProvider::class, [ 'columnFormats' => [ // hide system fields, but not ID in table @@ -37,21 +37,51 @@ 'batch' => [ 'class' => 'schmunk42\giiant\commands\BatchController', 'overwrite' => true, - 'modelNamespace' => 'app\\modules\\crud\\models', - 'modelQueryNamespace' => 'app\\modules\\crud\\models\\query', - 'crudTidyOutput' => true, - 'crudAccessFilter' => true, - 'crudControllerNamespace' => 'app\\modules\\crud\\controllers', - 'crudSearchModelNamespace' => 'app\\modules\\crud\\models\\search', - 'crudViewPath' => '@app/modules/crud/views', + 'modelNamespace' => $crudNs . '\models', + 'modelQueryNamespace' => $crudNs . '\models\query', + 'crudControllerNamespace' => $crudNs . '\controllers', + 'crudSearchModelNamespace' => $crudNs . '\models\search', + 'crudViewPath' => '@project/modules/crud/views', 'crudPathPrefix' => '/crud/', + 'crudTidyOutput' => true, + 'crudAccessFilter' => false, 'crudProviders' => [ - 'schmunk42\\giiant\\generators\\crud\\providers\\optsProvider', + \schmunk42\giiant\generators\crud\providers\core\OptsProvider::class ], - 'tablePrefix' => 'app_', - /*'tables' => [ + 'tablePrefix' => 'project_', + 'skipTables' => [ + 'app_audit_data', + 'app_migration', + 'app_audit_entry', + 'app_audit_error', + 'app_audit_javascript', + 'app_audit_mail', + 'app_audit_trail', + 'app_auth_assignment', + 'app_auth_item', + 'app_auth_item_child', + 'app_auth_rule', + 'app_dmstr_contact_log', + 'app_dmstr_page', + 'app_dmstr_page_translation', + 'app_hrzg_widget_content', + 'app_hrzg_widget_content_translation', + 'app_hrzg_widget_template', + 'app_html', + 'app_language', + 'app_language_source', + 'app_language_translate', + 'app_less', 'app_profile', - ]*/ - ], + 'app_session', + 'app_settings', + 'app_social_account', + 'app_token', + 'app_twig', + 'app_user', + 'dmstr_redirect', + 'filefly_hashmap', + ], + ] ], ]; diff --git a/src/base/Provider.php b/src/base/Provider.php index e0ef9c16..acaa77dc 100644 --- a/src/base/Provider.php +++ b/src/base/Provider.php @@ -7,9 +7,9 @@ */ namespace schmunk42\giiant\base; -use yii\base\Object; +use yii\base\BaseObject; -class Provider extends Object +class Provider extends BaseObject { /** * @var \schmunk42\giiant\generators\crud\Generator diff --git a/src/commands/BatchController.php b/src/commands/BatchController.php index 15c7d126..cfc4d89e 100644 --- a/src/commands/BatchController.php +++ b/src/commands/BatchController.php @@ -4,15 +4,22 @@ use schmunk42\giiant\generators\crud\Generator; use schmunk42\giiant\generators\model\Generator as ModelGenerator; +use yii\console\Application; use yii\console\Controller; use yii\helpers\ArrayHelper; use yii\helpers\Inflector; +use Yii; /** * @author Tobias Munk */ class BatchController extends Controller { + /** + * @var string Console application class + */ + public $applicationClass = 'yii\\console\\Application'; + /** * @var string the generator template name */ @@ -33,6 +40,36 @@ class BatchController extends Controller */ public $useTimestampBehavior = true; + /** + * @var string support user custom TimestampBehavior class + */ + public $timestampBehaviorClass = 'yii\behaviors\TimestampBehavior'; + + /** + * @var string the name of the column where the user who updated the entry is stored + */ + public $createdAtColumn = 'created_at'; + + /** + * @var string the name of the column where the user who updated the entry is stored + */ + public $updatedAtColumn = 'updated_at'; + + /** + * @var bool whether or not to use BlameableBehavior + */ + public $useBlameableBehavior = true; + + /** + * @var string the name of the column where the user who created the entry is stored + */ + public $createdByColumn = 'created_by'; + + /** + * @var string the name of the column where the user who updated the entry is stored + */ + public $updatedByColumn = 'updated_by'; + /** * @var string the name of the table containing the translations. {{table}} will be replaced with the value in * "Table Name" field @@ -54,6 +91,11 @@ class BatchController extends Controller */ public $tables = []; + /** + * @var array skip db tables for generating models + */ + public $skipTables = []; + /** * @var string eg. `app_` */ @@ -69,6 +111,11 @@ class BatchController extends Controller */ public $modelNamespace = 'common\\models'; + /** + * @var string suffix to prepend to the base model, setting "Base" will result in a model named "BasePost" + */ + public $modelBaseClassPrefix = ''; + /** * @var string suffix to append to the base model, setting "Base" will result in a model named "PostBase" */ @@ -94,11 +141,36 @@ class BatchController extends Controller */ public $modelRemoveDuplicateRelations = false; + /** + * @var + */ + public $modelCacheRelationsData = true; + + /** + * @var + */ + public $modelGenerateRelations = ModelGenerator::RELATIONS_ALL; + + /** + * @var + */ + public $modelGenerateJunctionRelationMode = ModelGenerator::JUNCTION_RELATION_VIA_TABLE; + /** * @var bool whether the strings will be generated using `Yii::t()` or normal strings */ public $enableI18N = true; + /** + * @var bool whether to enable or disable the pluralization of the models name + */ + public $disablePluralization = false; + + /** + * @var string prefix to prepend to the many many relation methods + */ + public $modelManyManyRelationSuffix = ''; + /** * @var bool whether the entity names will be singular or the same as the table name */ @@ -139,7 +211,7 @@ class BatchController extends Controller /** * @var string route prefix for crud controller actions */ - public $crudPathPrefix = 'crud/'; + public $crudPathPrefix = '/crud/'; /** * @var array list of code provider classes (fully namespaced path required) @@ -161,6 +233,26 @@ class BatchController extends Controller */ public $crudAccessFilter; + /** + * @var bool whether to overwrite extended controller classes in crud generator + */ + public $crudOverwriteControllerClass = false; + + /** + * @var bool whether to overwrite rest/api controller classes in crud generator + */ + public $crudOverwriteRestControllerClass = false; + + /** + * @var bool whether to overwrite search classes in crud generator + */ + public $crudOverwriteSearchModelClass = false; + + /** + * @var bool whether to generate access filter migrations + */ + public $generateAccessFilterMigrations; + public $crudBaseTraits; public $crudTemplate = 'default'; @@ -169,6 +261,15 @@ class BatchController extends Controller public $crudIndexGridClass = 'yii\\grid\\GridView'; + public $crudFormLayout = 'horizontal'; + + public $crudActionButtonColumnPosition = 'left'; + + /** + * @var string Class name of the model generator + */ + public $modelGeneratorClass = 'schmunk42\giiant\generators\model\Generator'; + /** * @var bool indicates whether to generate ActiveQuery for the ActiveRecord class */ @@ -179,6 +280,16 @@ class BatchController extends Controller */ public $crudTidyOutput = true; + /** + * @var bool whether to fix generated code (PSR-2). Note: May take some time, depending on file size and numbers. + */ + public $crudFixOutput = false; + + /** + * @var integer number of grid columns in crud generator + */ + public $crudGridMaxColumns = 8; + /** * @var string the namespace of the ActiveQuery class to be generated */ @@ -198,13 +309,26 @@ class BatchController extends Controller * @var bool This indicates whether the generator should generate attribute hints by using the comments of the corresponding DB columns */ public $modelGenerateHintsFromComments = true; + + /** + * @var bool Generate Relations from Current Schema + */ + public $modelGenerateRelationsFromCurrentSchema = true; + + public $modelTranslationTableAdditions = ['name' => 'meta', 'fallbackLanguage' => false]; + + /** + * Whether the copy functionality for a crud should be created or not + */ + public $crudEnableCopy = true; + /** * @var array application configuration for creating temporary applications */ protected $appConfig; /** - * @var instance of class schmunk42\giiant\generators\model\Generator + * @var \schmunk42\giiant\generators\model\Generator instance of class schmunk42\giiant\generators\model\Generator */ protected $modelGenerator; @@ -218,28 +342,42 @@ public function options($id) [ 'template', 'overwrite', - 'useTranslatableBehavior', 'useTimestampBehavior', + 'timestampBehaviorClass', + 'createdAtColumn', + 'updatedAtColumn', + 'useTranslatableBehavior', 'languageTableName', 'languageCodeColumn', + 'useBlameableBehavior', + 'createdByColumn', + 'updatedByColumn', 'extendedModels', 'enableI18N', 'messageCategory', 'singularEntities', 'tables', + 'skipTables', 'tablePrefix', 'modelDb', 'modelNamespace', 'modelBaseClass', 'modelBaseTraits', + 'modelBaseClassPrefix', 'modelBaseClassSuffix', 'modelRemoveDuplicateRelations', + 'modelCacheRelationsData', + 'modelGenerateRelations', + 'modelGenerateRelationsFromCurrentSchema', + 'modelTranslationTableAdditions', + 'modelGenerateJunctionRelationMode', 'modelGenerateQuery', 'modelQueryNamespace', 'modelQueryBaseClass', 'modelGenerateLabelsFromComments', 'modelGenerateHintsFromComments', 'crudTidyOutput', + 'crudFixOutput', 'crudControllerNamespace', 'crudSearchModelNamespace', 'crudSearchModelSuffix', @@ -250,6 +388,13 @@ public function options($id) 'crudBaseControllerClass', 'crudAccessFilter', 'crudTemplate', + 'crudFormLayout', + 'crudOverwriteSearchModelClass', + 'crudOverwriteRestControllerClass', + 'crudOverwriteControllerClass', + 'generateAccessFilterMigrations', + 'disablePluralization', + 'crudEnableCopy' ] ); } @@ -265,11 +410,21 @@ public function beforeAction($action) { $this->appConfig = $this->getYiiConfiguration(); $this->appConfig['id'] = 'temp'; - $this->modelGenerator = new ModelGenerator(['db' => $this->modelDb]); + $this->modelGenerator = Yii::createObject($this->modelGeneratorClass, ['db' => $this->modelDb]); + + if ($this->tables && $this->skipTables) { + $this->stderr("Only one property of 'tables' or 'skipTables' can be set." . PHP_EOL); + return false; + } if (!$this->tables) { $this->modelGenerator->tableName = '*'; $this->tables = $this->modelGenerator->getTableNames(); + foreach ($this->tables AS $i => $table) { + if (in_array($table, $this->skipTables)) { + unset($this->tables[$i]); + } + } $tableList = implode("\n\t- ", $this->tables); $msg = "Are you sure that you want to run action \"{$action->id}\" for the following tables?\n\t- {$tableList}\n\n"; if (!$this->confirm($msg)) { @@ -299,16 +454,23 @@ public function actionIndex() */ public function actionModels() { + $startTime = microtime(true); + // create models foreach ($this->tables as $table) { - //var_dump($this->tableNameMap, $table);exit; $params = [ 'interactive' => $this->interactive, 'overwrite' => $this->overwrite, - 'useTranslatableBehavior' => $this->useTranslatableBehavior, 'useTimestampBehavior' => $this->useTimestampBehavior, + 'timestampBehaviorClass' => $this->timestampBehaviorClass, + 'createdAtColumn' => $this->createdAtColumn, + 'updatedAtColumn' => $this->updatedAtColumn, + 'useTranslatableBehavior' => $this->useTranslatableBehavior, 'languageTableName' => $this->languageTableName, 'languageCodeColumn' => $this->languageCodeColumn, + 'useBlameableBehavior' => $this->useBlameableBehavior, + 'createdByColumn' => $this->createdByColumn, + 'updatedByColumn' => $this->updatedByColumn, 'template' => $this->template, 'ns' => $this->modelNamespace, 'db' => $this->modelDb, @@ -318,6 +480,7 @@ public function actionModels() 'singularEntities' => $this->singularEntities, 'messageCategory' => $this->modelMessageCategory, 'generateModelClass' => $this->extendedModels, + 'baseClassPrefix' => $this->modelBaseClassPrefix, 'baseClassSuffix' => $this->modelBaseClassSuffix, 'modelClass' => isset($this->tableNameMap[$table]) ? $this->tableNameMap[$table] : @@ -325,22 +488,32 @@ public function actionModels() 'baseClass' => $this->modelBaseClass, 'baseTraits' => $this->modelBaseTraits, 'removeDuplicateRelations' => $this->modelRemoveDuplicateRelations, + 'cacheRelationsData' => $this->modelCacheRelationsData, + 'generateRelations' => $this->modelGenerateRelations, + 'generateRelationsFromCurrentSchema' => $this->modelGenerateRelationsFromCurrentSchema, + 'translationTableAdditions' => $this->modelTranslationTableAdditions, + 'generateJunctionRelationMode' => $this->modelGenerateJunctionRelationMode, 'tableNameMap' => $this->tableNameMap, 'generateQuery' => $this->modelGenerateQuery, 'queryNs' => $this->modelQueryNamespace, 'queryBaseClass' => $this->modelQueryBaseClass, 'generateLabelsFromComments' => $this->modelGenerateLabelsFromComments, 'generateHintsFromComments' => $this->modelGenerateHintsFromComments, + 'disablePluralization' => $this->disablePluralization, + 'manyManyRelationSuffix' => $this->modelManyManyRelationSuffix ]; $route = 'gii/giiant-model'; $app = \Yii::$app; - $temp = new \yii\console\Application($this->appConfig); + $temp = new $this->applicationClass($this->appConfig); $temp->runAction(ltrim($route, '/'), $params); + $this->closeTempAppConnections($temp); unset($temp); \Yii::$app = $app; \Yii::$app->log->logger->flush(true); } + + Yii::debug('Generated models in ' . round(microtime(true) - $startTime, 3) . ' seconds.', __METHOD__); } /** @@ -358,17 +531,24 @@ public function actionCruds() $this->createDirectoryFromNamespace($this->crudSearchModelNamespace); foreach ($this->tables as $table) { - $table = str_replace($this->tablePrefix, '', $table); - $name = isset($this->tableNameMap[$table]) ? $this->tableNameMap[$table] : - $this->modelGenerator->generateClassName($table); + + if (isset($this->tableNameMap[$table])) { + $tmp_name = $this->tableNameMap[$table]; + } else { + $tmp_name = str_replace($this->tablePrefix, '', $table); + } + $name = $this->modelGenerator->generateClassName($tmp_name); + $params = [ 'interactive' => $this->interactive, 'overwrite' => $this->overwrite, - 'template' => $this->template, - 'modelClass' => $this->modelNamespace.'\\'.$name, - 'searchModelClass' => $this->crudSearchModelNamespace.'\\'.$name.$this->crudSearchModelSuffix, + 'overwriteSearchModelClass' => $this->crudOverwriteSearchModelClass, + 'overwriteRestControllerClass' => $this->crudOverwriteRestControllerClass, + 'overwriteControllerClass' => $this->crudOverwriteControllerClass, + 'modelClass' => $this->modelNamespace . '\\' . $name, + 'searchModelClass' => $this->crudSearchModelNamespace . '\\' . $name . $this->crudSearchModelSuffix, 'controllerNs' => $this->crudControllerNamespace, - 'controllerClass' => $this->crudControllerNamespace.'\\'.$name.'Controller', + 'controllerClass' => $this->crudControllerNamespace . '\\' . $name . 'Controller', 'viewPath' => $this->crudViewPath, 'pathPrefix' => $this->crudPathPrefix, 'tablePrefix' => $this->tablePrefix, @@ -383,14 +563,23 @@ public function actionCruds() 'accessFilter' => $this->crudAccessFilter, 'baseTraits' => $this->crudBaseTraits, 'tidyOutput' => $this->crudTidyOutput, + 'fixOutput' => $this->crudFixOutput, 'template' => $this->crudTemplate, 'indexWidgetType' => $this->crudIndexWidgetType, 'indexGridClass' => $this->crudIndexGridClass, + 'formLayout' => $this->crudFormLayout, + 'gridMaxColumns' => $this->crudGridMaxColumns, + 'generateAccessFilterMigrations' => $this->generateAccessFilterMigrations, + 'actionButtonColumnPosition' => $this->crudActionButtonColumnPosition, + 'disablePluralization' => $this->disablePluralization, + 'gridMaxColumns' => $this->crudGridMaxColumns, + 'enableCopy' => $this->crudEnableCopy ]; $route = 'gii/giiant-crud'; $app = \Yii::$app; - $temp = new \yii\console\Application($this->appConfig); + $temp = new $this->applicationClass($this->appConfig); $temp->runAction(ltrim($route, '/'), $params); + $this->closeTempAppConnections($temp); unset($temp); \Yii::$app = $app; \Yii::$app->log->logger->flush(true); @@ -410,13 +599,13 @@ protected function getYiiConfiguration() $config = $GLOBALS['config']; } else { $config = \yii\helpers\ArrayHelper::merge( - require(\Yii::getAlias('@app').'/../common/config/main.php'), - (is_file(\Yii::getAlias('@app').'/../common/config/main-local.php')) ? - require(\Yii::getAlias('@app').'/../common/config/main-local.php') + require(\Yii::getAlias('@app') . '/../common/config/main.php'), + (is_file(\Yii::getAlias('@app') . '/../common/config/main-local.php')) ? + require(\Yii::getAlias('@app') . '/../common/config/main-local.php') : [], - require(\Yii::getAlias('@app').'/../console/config/main.php'), - (is_file(\Yii::getAlias('@app').'/../console/config/main-local.php')) ? - require(\Yii::getAlias('@app').'/../console/config/main-local.php') + require(\Yii::getAlias('@app') . '/../console/config/main.php'), + (is_file(\Yii::getAlias('@app') . '/../console/config/main-local.php')) ? + require(\Yii::getAlias('@app') . '/../console/config/main-local.php') : [] ); } @@ -432,7 +621,42 @@ protected function getYiiConfiguration() private function createDirectoryFromNamespace($ns) { echo \Yii::getRootAlias($ns); - $dir = \Yii::getAlias('@'.str_replace('\\', '/', ltrim($ns, '\\'))); + $dir = \Yii::getAlias('@' . str_replace('\\', '/', ltrim($ns, '\\'))); @mkdir($dir); } + + /** + * close modelDb and all defined yii\db\Connection components to prevent 'too many connections' + * + * @param $app + * + * @return void + * @throws \yii\base\InvalidConfigException + * @throws \yii\di\NotInstantiableException + */ + private function closeTempAppConnections(Application $app) + { + // if modelDb is set via DI - close + if (\Yii::$container->has($this->modelDb)) { + \Yii::$container->get($this->modelDb)->close(); + } elseif($app->get($this->modelDb)) { + $app->get($this->modelDb)->close(); + } + // and then we close all defined yii\db\Connection components to be on the safe side, + // since we don't know if there are any other than the "known" modelDb + if (isset($app->components)) { + foreach ($app->components as $cid => $component) { + try { + $cObj = $app->get($cid); + if ($cObj instanceof \yii\db\Connection) { + $cObj->close(); + } + } catch (\Throwable $e) { + // ignore because we don't know if the component is a db connection + Yii::warning($e->getMessage()); + } + } + } + } } + diff --git a/src/config/.phptidy-config.php b/src/config/.phptidy-config.php new file mode 100644 index 00000000..c1e5ddfa --- /dev/null +++ b/src/config/.phptidy-config.php @@ -0,0 +1,3 @@ +moduleNs) { - $controllerNs = \yii\helpers\StringHelper::dirname(ltrim($this->controllerClass, '\\')); - $this->moduleNs = \yii\helpers\StringHelper::dirname(ltrim($controllerNs, '\\')); + $controllerNs = StringHelper::dirname(ltrim($this->controllerClass, '\\')); + $this->moduleNs = StringHelper::dirname(ltrim($controllerNs, '\\')); } - return \yii\helpers\StringHelper::basename($this->moduleNs); + return StringHelper::basename($this->moduleNs); } public function generate() { $accessDefinitions = require $this->getTemplatePath().'/access_definition.php'; - $this->controllerNs = \yii\helpers\StringHelper::dirname(ltrim($this->controllerClass, '\\')); - $this->moduleNs = \yii\helpers\StringHelper::dirname(ltrim($this->controllerNs, '\\')); - $controllerName = substr(\yii\helpers\StringHelper::basename($this->controllerClass), 0, -10); + $this->controllerNs = StringHelper::dirname(ltrim($this->controllerClass, '\\')); + $this->moduleNs = StringHelper::dirname(ltrim($this->controllerNs, '\\')); + $controllerName = substr(StringHelper::basename($this->controllerClass), 0, -10); if ($this->singularEntities) { $this->modelClass = Inflector::singularize($this->modelClass); @@ -322,7 +356,7 @@ public function generate() } $files[] = new CodeFile($baseControllerFile, $this->render('controller.php', ['accessDefinitions' => $accessDefinitions])); - $params['controllerClassName'] = \yii\helpers\StringHelper::basename($this->controllerClass); + $params['controllerClassName'] = StringHelper::basename($this->controllerClass); if ($this->overwriteControllerClass || !is_file($controllerFile)) { $files[] = new CodeFile($controllerFile, $this->render('controller-extended.php', $params)); @@ -342,13 +376,32 @@ public function generate() $viewPath = $this->getViewPath(); $templatePath = $this->getTemplatePath().'/views'; + $model = Yii::createObject($this->modelClass); + if (array_key_exists('crud-form', $model->scenarios())) { + $model->setScenario('crud-form'); + } else { + $model->setScenario('crud'); + } + + $safeAttributes = $model->safeAttributes(); + if (empty($safeAttributes)) { + $model->setScenario('default'); + $safeAttributes = $model->safeAttributes(); + } + if (empty($safeAttributes)) { + $safeAttributes = $model::getTableSchema()->columnNames; + } + foreach (scandir($templatePath) as $file) { - if (empty($this->searchModelClass) && $file === '_search.php') { + if ($file === '_search.php' && !$this->getRenderWithSearch()) { continue; } if (is_file($templatePath.'/'.$file) && pathinfo($file, PATHINFO_EXTENSION) === 'php') { - echo $file; - $files[] = new CodeFile("$viewPath/$file", $this->render("views/$file", ['permisions' => $permisions])); + $files[] = new CodeFile("$viewPath/$file", $this->render("views/$file", [ + 'model' => $model, + 'safeAttributes' => $safeAttributes, + 'accessDefinitions' => $accessDefinitions + ])); } } @@ -358,7 +411,6 @@ public function generate() * access migration */ $migrationFile = $migrationDir.'/'.$this->migrationClass.'.php'; - //var_dump($migrationFile);exit; $files[] = new CodeFile($migrationFile, $this->render('migration_access.php', ['accessDefinitions' => $accessDefinitions])); /* @@ -376,10 +428,9 @@ public function generate() $suffix = str_replace(' ', '', $this->getName()); $controllerFileinfo = pathinfo($controllerFile); $formDataFile = StringHelper::dirname(StringHelper::dirname($controllerFile)) - .'/gii/' + .'/'.$this->giiInfoPath.'/' .str_replace('Controller', $suffix, $controllerFileinfo['filename']).'.json'; - //$formData = json_encode($this->getFormAttributesValues()); - $formData = json_encode(SaveForm::getFormAttributesValues($this, $this->formAttributes())); + $formData = json_encode(SaveForm::getFormAttributesValues($this, $this->formAttributes()), JSON_PRETTY_PRINT); $files[] = new CodeFile($formDataFile, $formData); return $files; @@ -388,18 +439,28 @@ public function generate() public function render($template, $params = []) { $code = parent::render($template, $params); + + // create temp file for code formatting + $tmpDir = Yii::getAlias('@runtime/giiant'); + FileHelper::createDirectory($tmpDir); + $tmpFile = $tmpDir.'/'.md5($template); + file_put_contents($tmpFile, $code); + if ($this->tidyOutput) { - $tmpDir = Yii::getAlias('@runtime/giiant'); - FileHelper::createDirectory($tmpDir); - $tmpFile = $tmpDir.'/'.md5($template); - file_put_contents($tmpFile, $code); - $command = Yii::getAlias('@vendor/bin/phptidy').' replace '.$tmpFile; + $command = Yii::getAlias('@vendor/bin/phptidy.php').' replace '.$this->tidyOptions.' '.$tmpFile; shell_exec($command); + $code = file_get_contents($tmpFile); + } - return file_get_contents($tmpFile); - } else { - return $code; + if ($this->fixOutput) { + $command = Yii::getAlias('@vendor/bin/php-cs-fixer').' fix '.$this->fixOptions.' '.$tmpFile; + shell_exec($command); + $code = file_get_contents($tmpFile); } + + unlink($tmpFile); + + return $code; } public function validateClass($attribute, $params) @@ -432,4 +493,73 @@ public function var_export54($var, $indent = '') return var_export($var, true); } } + + /** + * @return array + * @throws \yii\base\InvalidConfigException + */ + public function generateSearchRules() + { + + $rules = parent::generateSearchRules(); + $model = \Yii::createObject($this->modelClass); + foreach ($model->behaviors() as $key => $behavior) { + if (!empty($behavior['translationAttributes'])) { + $rules[] = "[['" . implode("', '", $behavior['translationAttributes']) . "'], 'safe']"; + } + } + return $rules; + } + + /** + * @return array + * @throws \yii\base\InvalidConfigException + */ + public function generateSearchConditions() + { + + $searchConditions = parent::generateSearchConditions(); + $model = \Yii::createObject($this->modelClass); + foreach ($model->behaviors() as $key => $behavior) { + if (!empty($behavior['translationAttributes'])) { + foreach ($behavior['translationAttributes'] as $translationAttribute) { + $searchConditions[] = "\$query->andFilterWhere(['like','{$translationAttribute}', \$this->$translationAttribute]);"; + } + } + } + return $searchConditions; + } + + + /** + * @return array + */ + public function getTranslationRelationModels() + { + $translationRelationModels = []; + foreach ($this->translateRelations as $translateRelation) { + $translationRelationModels[] = $this->modelClass . Inflector::camelize($translateRelation); + } + return $translationRelationModels; + } + + /** + * @return string + */ + public function getTranslationModelClass() { + return '\\' . $this->modelClass . Inflector::camelize('translation'); + } + + /** + * @return bool + * @throws \yii\base\InvalidConfigException + */ + public function getHasTranslationRelation() { + return isset(\Yii::createObject($this->modelClass)->behaviors()['translation']); + } + + public function getRenderWithSearch() + { + return $this->indexWidgetType !== 'grid' && $this->searchModelClass !== ''; + } } diff --git a/src/generators/crud/ModelTrait.php b/src/generators/crud/ModelTrait.php index 5feea955..b265e280 100644 --- a/src/generators/crud/ModelTrait.php +++ b/src/generators/crud/ModelTrait.php @@ -16,7 +16,7 @@ trait ModelTrait { - public function getModelNameAttribute($modelClass) + public static function getModelNameAttribute($modelClass) { $model = new $modelClass(); // TODO: cleanup, get-label-methods, move to config @@ -26,20 +26,21 @@ public function getModelNameAttribute($modelClass) if ($model->hasMethod('getLabel')) { return 'label'; } - foreach ($modelClass::getTableSchema()->getColumnNames() as $name) { - switch (strtolower($name)) { - case 'name': - case 'title': - case 'name_id': - case 'default_title': - case 'default_name': - case 'ns'://name short - case 'nl'://name long - return $name; - break; - default: - continue; - break; + if (method_exists($modelClass,'getTableSchema')) { + foreach ($model->getTableSchema()->getColumnNames() as $name) { + switch (strtolower($name)) { + case 'name': + case 'title': + case 'name_id': + case 'default_title': + case 'default_name': + case 'ns'://name short + case 'nl'://name long + return $name; + break; + default: + break; + } } } @@ -62,23 +63,25 @@ public function getModelByTableName($name) * * return values can be filtered by types 'belongs_to', 'many_many', 'has_many', 'has_one', 'pivot' * - * @param ActiveRecord $modelClass + * @param \yii\db\ActiveRecord $modelClass * @param array $types * * @return array */ - public function getModelRelations($modelClass, $types = ['belongs_to', 'many_many', 'has_many', 'has_one', 'pivot']) + public function getModelRelations($modelClass, $types = []) { $reflector = new \ReflectionClass($modelClass); $model = new $modelClass(); $stack = []; - $modelGenerator = new ModelGenerator(); + $modelGenerator = new ModelGenerator([ + 'disablePluralization' => $this->disablePluralization + ]); foreach ($reflector->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) { - if (in_array(substr($method->name, 3), $this->skipRelations)) { + if (in_array(substr($method->name, 3), $this->skipRelations, true)) { continue; } // look for getters - if (substr($method->name, 0, 3) !== 'get') { + if (strpos($method->name, 'get') !== 0) { continue; } // skip class specific getters @@ -88,39 +91,55 @@ public function getModelRelations($modelClass, $types = ['belongs_to', 'many_man 'getFirstError', 'getAttribute', 'getAttributeLabel', + 'getAttributeHint', 'getOldAttribute', + 'getErrorSummary', ]; if (in_array($method->name, $skipMethods)) { continue; } + //don't call get functions if there is a parameter + if (count($method->getParameters()) > 0) { + continue; + } // check for relation try { $relation = @call_user_func(array($model, $method->name)); if ($relation instanceof \yii\db\ActiveQuery) { - //var_dump($relation->primaryModel->primaryKey); + // detect relation if ($relation->multiple === false) { - $relationType = 'belongs_to'; + if (current($relation->link) == (new $relation->modelClass)->primaryKey()[0]) { + $relationType = 'has_one'; + } else { + $relationType = 'belongs_to'; + } } elseif ($this->isPivotRelation($relation)) { // TODO: detecttion $relationType = 'pivot'; } else { $relationType = 'has_many'; } - - if (in_array($relationType, $types)) { - $name = $modelGenerator->generateRelationName( - [$relation], - $model->getTableSchema(), - substr($method->name, 3), - $relation->multiple - ); + // if types is empty, return all types -> no filter + if ((count($types) === 0) || in_array($relationType, $types, true)) { + if ($this->disablePluralization) { + $name = str_replace('get','', $method->name); + } else { + $name = $modelGenerator->generateRelationName( + [$relation], + $model->getTableSchema(), + substr($method->name, 3), + $relation->multiple + ); + } $stack[$name] = $relation; } } - } catch (Exception $e) { - Yii::error('Error: '.$e->getMessage(), __METHOD__); + } catch (\Exception $e) { + \Yii::error('Error: '.$e->getMessage(), __METHOD__); + } catch (\Error $e) { + //bypass get functions if calling to them results in errors (only for PHP7) + \Yii::error('Error: ' . $e->getMessage(), __METHOD__); } } - return $stack; } @@ -133,7 +152,13 @@ public function getColumnByAttribute($attribute, $model = null) $model = $this; } - return $model->getTableSchema()->getColumn($attribute); + + // omit schema for NOSQL models + if (method_exists($model,'getTableSchema') && $model->getTableSchema()) { + return $model->getTableSchema()->getColumn($attribute); + } else { + return $attribute; + } } /** @@ -141,17 +166,17 @@ public function getColumnByAttribute($attribute, $model = null) * * @return null|\yii\db\ActiveQuery */ - public function getRelationByColumn($model, $column) + public function getRelationByColumn($model, $column, $types = ['belongs_to', 'many_many', 'has_many', 'has_one', 'pivot']) { - $relations = $this->getModelRelations($model); + $relations = $this->getModelRelations($model, $types); foreach ($relations as $relation) { // TODO: check multiple link(s) - if ($relation->link && reset($relation->link) == $column->name) { + if ($relation->link && reset($relation->link) === $column->name) { return $relation; } } - return; + return null; } public function createRelationRoute($relation, $action) @@ -161,7 +186,6 @@ public function createRelationRoute($relation, $action) '-', true ).'/'.$action; - return $route; } diff --git a/src/generators/crud/ProviderTrait.php b/src/generators/crud/ProviderTrait.php index 5c5cd640..1dd6dd10 100644 --- a/src/generators/crud/ProviderTrait.php +++ b/src/generators/crud/ProviderTrait.php @@ -215,6 +215,11 @@ public function relationGridEditable($name, $relation, $showAllRecords = false) protected function shorthandAttributeFormat($attribute, $model) { + // TODO: cleanup + if (is_object($model) && (!method_exists($model,'getTableSchema') || !$model->getTableSchema())){ + return; + } + $column = $this->getColumnByAttribute($attribute, $model); if (!$column) { Yii::trace("No column for '{$attribute}' found", __METHOD__); diff --git a/src/generators/crud/callbacks/devgroup/Jsoneditor.php b/src/generators/crud/callbacks/devgroup/Jsoneditor.php index 6ba4e71e..c0d3ace4 100644 --- a/src/generators/crud/callbacks/devgroup/Jsoneditor.php +++ b/src/generators/crud/callbacks/devgroup/Jsoneditor.php @@ -1,9 +1,6 @@ '. @@ -42,7 +39,7 @@ public static function field() public static function attribute() { return function ($attribute, $generator) { - $formattter = StringFormatter::className(); + $formattter = StringFormatter::class; $method = __METHOD__; return <<field(\$model, 'request_param')->widget( - {$input}::className(), + {$input}::class, [ // single query fetch to render the tree 'query' => {$tree}::find()->addOrderBy('root, lft'), diff --git a/src/generators/crud/callbacks/kdn/Jsoneditor.php b/src/generators/crud/callbacks/kdn/Jsoneditor.php new file mode 100644 index 00000000..45ac9c64 --- /dev/null +++ b/src/generators/crud/callbacks/kdn/Jsoneditor.php @@ -0,0 +1,69 @@ +
'. +{$editor}::widget( + [ + 'clientOptions' => [ + 'modes' => ['code', 'form', 'text', 'tree', 'view'], + 'mode' => 'tree', + ], + 'model' => \$model, + 'attribute' => '{$attribute}', + 'options' => [ + 'id' => 'widget-{$attribute}', + 'class' => 'form-control', + ] + ] +). +'
' +FORMAT; + }; + } + + public static function attribute() + { + return function ($attribute, $generator) { + $method = __METHOD__; + $editor = \kdn\yii2\JsonEditor::class; + return << 'raw', + 'attribute' => '{$attribute}', + 'headerOptions' => ['style' => 'min-width: 600px'], + 'value'=> function (\$model) { + return {$editor}::widget([ + 'name' => '_display', + 'value' => \$model->{$attribute}, + 'clientOptions' => [ + 'mode' => 'view', + 'modes' => [ + 'view', + 'code' + ] + ] + ]); + } +] +FORMAT; + }; + } +} diff --git a/src/generators/crud/callbacks/yii/Db.php b/src/generators/crud/callbacks/yii/Db.php index 2e4aca62..8a8c1c4a 100644 --- a/src/generators/crud/callbacks/yii/Db.php +++ b/src/generators/crud/callbacks/yii/Db.php @@ -20,7 +20,9 @@ public static function falseIfText() } switch ($column->dbType) { + case 'tinytext': case 'text': + case 'mediumtext': case 'longtext': return false; } diff --git a/src/generators/crud/default/access_definition.php b/src/generators/crud/default/access_definition.php index e7b10baf..2b1dcaa9 100644 --- a/src/generators/crud/default/access_definition.php +++ b/src/generators/crud/default/access_definition.php @@ -13,7 +13,7 @@ /** * permissions - create name and descriptions */ -$permisions = []; +$permissions = []; foreach ($actions as $k => $action){ $name = $this->getModuleId() . '_' . $this->getControllerID() @@ -21,7 +21,7 @@ $description = $this->getModuleId() . '/' . $this->getControllerID() . '/' . $action; - $permisions[$action] = [ + $permissions[$action] = [ 'name' => $name, 'description' => $description, ]; @@ -48,6 +48,6 @@ } return [ - 'permisions' => $permisions, + 'permissions' => $permissions, 'roles' => $roles, -]; \ No newline at end of file +]; diff --git a/src/generators/crud/default/controller-extended.php b/src/generators/crud/default/controller-extended.php index 7c9ec5fb..7c565c56 100644 --- a/src/generators/crud/default/controller-extended.php +++ b/src/generators/crud/default/controller-extended.php @@ -7,10 +7,12 @@ namespace controllerClass, '\\')) ?>; +use controllerNs) ? '\\'.$generator->controllerNs.'\\' : '', '\\') .'base\\'.$controllerClassName?> as Base; + /** -* This is the class for controller "". -*/ -class extends controllerNs) ? '\\'.$generator->controllerNs.'\\' : '') .'base\\'.$controllerClassName."\n" ?> + * This is the class for controller "". + */ +class extends Base { } diff --git a/src/generators/crud/default/controller-rest.php b/src/generators/crud/default/controller-rest.php index 4fe19400..24fecce0 100644 --- a/src/generators/crud/default/controller-rest.php +++ b/src/generators/crud/default/controller-rest.php @@ -2,41 +2,54 @@ /** * Customizable controller class. */ + +use yii\helpers\StringHelper; + +$modelClass = StringHelper::basename($generator->modelClass); echo " namespace controllerNs ?>\api; /** -* This is the class for REST controller "". -*/ + * This is the class for REST controller "". + */ +use modelClass ?>; +accessFilter): ?> use yii\filters\AccessControl; use yii\helpers\ArrayHelper; + +use yii\rest\ActiveController; +accessFilter): ?> +use Yii; + -class extends \yii\rest\ActiveController +class extends ActiveController { -public $modelClass = 'modelClass ?>'; + public $modelClass = ::class; accessFilter): ?> + /** - * @inheritdoc - */ + * @inheritdoc + */ public function behaviors() { - return ArrayHelper::merge( - parent::behaviors(), - [ - 'access' => [ - 'class' => AccessControl::className(), - 'rules' => [ - [ - 'allow' => true, - 'matchCallback' => function ($rule, $action) {return \Yii::$app->user->can($this->module->id . '_' . $this->id . '_' . $action->id, ['route' => true]);}, - ] - ] - ] - ] - ); + return ArrayHelper::merge(parent::behaviors(), + [ + 'access' => [ + 'class' => AccessControl::class, + 'rules' => [ + [ + 'allow' => true, + 'matchCallback' => function ($rule, $action) { + return Yii::$app->user->can($this->module->id . '_' . $this->id . '_' . $action->id, ['route' => true]); + } + ] + ] + ] + ] + ); } } diff --git a/src/generators/crud/default/controller.php b/src/generators/crud/default/controller.php index 411a69b8..9b6a25a0 100644 --- a/src/generators/crud/default/controller.php +++ b/src/generators/crud/default/controller.php @@ -2,11 +2,12 @@ use yii\helpers\StringHelper; -/* +/** * This is the template for generating a CRUD controller class file. * * @var yii\web\View $this * @var schmunk42\giiant\generators\crud\Generator $generator + * @var array $accessDefinitions */ $controllerClass = StringHelper::basename($generator->controllerClass); @@ -18,7 +19,13 @@ $searchModelClassName = $searchModelAlias; } -$pks = $generator->getTableSchema()->primaryKey; +// TODO: improve detetction of NOSQL primary keys +if ($generator->getTableSchema()) { + $pks = $generator->getTableSchema()->primaryKey; +} else { + $pks = ['_id']; +} + $urlParams = $generator->generateUrlParams(); $actionParams = $generator->generateActionParams(); $actionParamComments = $generator->generateActionParamComments(); @@ -31,208 +38,192 @@ use modelClass, '\\') ?>; - use searchModelClass, '\\' ) ?> as ; -use baseControllerClass, '\\') ?>; -use yii\web\HttpException; -use yii\helpers\Url; +accessFilter): ?> use yii\filters\AccessControl; -use dmstr\bootstrap\Tabs; +use yii\helpers\ArrayHelper; + +use yii\base\InvalidConfigException; +use yii\helpers\Url; +use baseControllerClass, '\\') ?>; +use yii\web\NotFoundHttpException; +use yii\web\Request; +use yii\web\Response; +use Yii; /** -* implements the CRUD actions for model. -*/ + * implements the CRUD actions for model. + * + * @property-read Request $request + */ class extends baseControllerClass)."\n" ?> { - baseTraits; if ($traits) { echo "use {$traits};"; } -?> -/** -* @var boolean whether to enable CSRF validation for the actions in this controller. -* CSRF validation is enabled only when both this property and [[Request::enableCsrfValidation]] are true. -*/ -public $enableCsrfValidation = false; +?> accessFilter): ?> /** - * @inheritdoc - */ + * @inheritdoc + */ public function behaviors() { - return [ - 'access' => [ - 'class' => AccessControl::className(), - 'rules' => [ - $actions){ -?> - [ - 'allow' => true, - 'actions' => [''], - 'roles' => [''], - ], - - ], - ], - ]; + return ArrayHelper::merge(parent::behaviors(), + [ + 'access' => [ + 'class' => AccessControl::class, + 'rules' => [ + $actions): ?> + [ + 'allow' => true, + 'actions' => [''], + 'roles' => [''] + ], + + ] + ] + ]); } -/** -* Lists all models. -* @return mixed -*/ -public function actionIndex() -{ - - $searchModel = new ; - $dataProvider = $searchModel->search($_GET); - - $dataProvider = new ActiveDataProvider([ - 'query' => ::find(), - ]); - - -Tabs::clearLocalStorage(); - -Url::remember(); -\Yii::$app->session['__crudReturnUrl'] = null; - -return $this->render('index', [ -'dataProvider' => $dataProvider, - + /** + * Lists all models. + * + * @throws InvalidConfigException + * @return string + */ + public function actionIndex() + { + + $searchModel = Yii::createObject(::class); + $dataProvider = $searchModel->search($this->request->get()); + + $dataProvider = new ActiveDataProvider([ + 'query' => ::find(), + ]); + + + return $this->render('index', [ + 'dataProvider' => $dataProvider, + 'searchModel' => $searchModel, - -]); -} - -/** -* Displays a single model. -* -* -* @return mixed -*/ -public function actionView() -{ -\Yii::$app->session['__crudReturnUrl'] = Url::previous(); -Url::remember(); -Tabs::rememberActiveState(); - -return $this->render('view', [ -'model' => $this->findModel(), + ]); -} - -/** -* Creates a new model. -* If creation is successful, the browser will be redirected to the 'view' page. -* @return mixed -*/ -public function actionCreate() -{ -$model = new ; + } -try { -if ($model->load($_POST) && $model->save()) { -return $this->redirect(['view', ]); -} elseif (!\Yii::$app->request->isPost) { -$model->load($_GET); -} -} catch (\Exception $e) { -$msg = (isset($e->errorInfo[2]))?$e->errorInfo[2]:$e->getMessage(); -$model->addError('_exception', $msg); -} -return $this->render('create', ['model' => $model]); -} + /** + * Displays a single model. + * + * + * + * @throws NotFoundHttpException + * @return string + */ + public function actionView() + { + return $this->render('view', ['model' => $this->findModel()]); -/** -* Updates an existing model. -* If update is successful, the browser will be redirected to the 'view' page. -* -* @return mixed -*/ -public function actionUpdate() -{ -$model = $this->findModel(); + } -if ($model->load($_POST) && $model->save()) { -return $this->redirect(Url::previous()); -} else { -return $this->render('update', [ -'model' => $model, -]); -} -} + /** + * Creates a new model. + * If creation is successful, the browser will be redirected to the 'view' page. + * + * @throws yii\base\InvalidConfigException + * @return string|Response + */ + public function actionCreate() + { + $model = Yii::createObject(::class); + try { + if ($model->load($this->request->post()) && $model->save()) { + return $this->redirect(['view', ]); + } + if (!Yii::$app->request->isPost) { + $model->load($this->request->get()); + } + } catch (\Exception $e) { + $model->addError('_exception', $e->errorInfo[2] ?? $e->getMessage()); + } + return $this->render('create', ['model' => $model]); + } -/** -* Deletes an existing model. -* If deletion is successful, the browser will be redirected to the 'index' page. -* -* @return mixed -*/ -public function actionDelete() -{ -try { -$this->findModel()->delete(); -} catch (\Exception $e) { -$msg = (isset($e->errorInfo[2]))?$e->errorInfo[2]:$e->getMessage(); -\Yii::$app->getSession()->addFlash('error', $msg); -return $this->redirect(Url::previous()); -} + /** + * Updates an existing model. + * If update is successful, the browser will be redirected to the 'view' page. + * + * + * + * @throws NotFoundHttpException + * @return string|Response + */ + public function actionUpdate() + { + $model = $this->findModel(); + if ($model->load($this->request->post()) && $model->save()) { + return $this->redirect(['view', ]); + } + return $this->render('update', ['model' => $model]); + } -// TODO: improve detection -$isPivot = strstr('',','); -if ($isPivot == true) { -return $this->redirect(Url::previous()); -} elseif (isset(\Yii::$app->session['__crudReturnUrl']) && \Yii::$app->session['__crudReturnUrl'] != '/') { -Url::remember(null); -$url = \Yii::$app->session['__crudReturnUrl']; -\Yii::$app->session['__crudReturnUrl'] = null; + /** + * Deletes an existing model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * + * + * + * @throws \Throwable + * @return Response + */ + public function actionDelete() + { + try { + $this->findModel()->delete(); + } catch (\Exception $e) { + Yii::$app->getSession()->addFlash('error', $e->errorInfo[2] ?? $e->getMessage()); + } -return $this->redirect($url); -} else { -return $this->redirect(['index']); -} -} + return $this->redirect(['index']); + } -/** -* Finds the model based on its primary key value. -* If the model is not found, a 404 HTTP exception will be thrown. -* -* @return the loaded model -* @throws HttpException if the model cannot be found -*/ -protected function findModel() -{ - \$$pk"; + /** + * Finds the model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * + * + * + * @throws NotFoundHttpException if the model cannot be found + * @return the loaded model + */ + protected function findModel() + { + \$$pk"; + } + $condition = '['.implode(', ', $condition).']'; + } + ?> + $model = ::findOne(); + if ($model !== null) { + return $model; + } + throw new NotFoundHttpException(generateString('The requested page does not exist.')?>); } - $condition = '['.implode(', ', $condition).']'; -} -?> -if (($model = ::findOne()) !== null) { -return $model; -} else { -throw new HttpException(404, 'The requested page does not exist.'); -} -} } diff --git a/src/generators/crud/default/migration_access.php b/src/generators/crud/default/migration_access.php index 3e708e85..0a841eea 100644 --- a/src/generators/crud/default/migration_access.php +++ b/src/generators/crud/default/migration_access.php @@ -13,26 +13,26 @@ class migrationClass?> extends Migration /** * @var array controller all actions */ - public $permisions = var_export54($accessDefinitions['permisions'],' ')?>; + public $permissions = var_export54($accessDefinitions['permissions'],' ')?>; /** - * @var array roles and maping to actions/permisions + * @var array roles and maping to actions/permissions */ public $roles = var_export54($accessDefinitions['roles'],' ')?>; public function up() { - $permisions = []; + $permissions = []; $auth = \Yii::$app->authManager; /** - * create permisions for each controller action + * create permissions for each controller action */ - foreach ($this->permisions as $action => $permission) { - $permisions[$action] = $auth->createPermission($permission['name']); - $permisions[$action]->description = $permission['description']; - $auth->add($permisions[$action]); + foreach ($this->permissions as $action => $permission) { + $permissions[$action] = $auth->createPermission($permission['name']); + $permissions[$action]->description = $permission['description']; + $auth->add($permissions[$action]); } /** @@ -46,7 +46,7 @@ public function up() * to role assign permissions */ foreach ($actions as $action) { - $auth->addChild($role, $permisions[$action]); + $auth->addChild($role, $permissions[$action]); } } } @@ -59,7 +59,7 @@ public function down() { $auth->remove($role); } - foreach ($this->permisions as $permission) { + foreach ($this->permissions as $permission) { $authItem = $auth->createPermission($permission['name']); $auth->remove($authItem); } diff --git a/src/generators/crud/default/search.php b/src/generators/crud/default/search.php index 441df99d..25aa1f04 100644 --- a/src/generators/crud/default/search.php +++ b/src/generators/crud/default/search.php @@ -2,10 +2,13 @@ /** * This is the template for generating CRUD search class of the specified model. */ + +use yii\helpers\Inflector; use yii\helpers\StringHelper; -/* @var $this yii\web\View */ -/* @var $generator yii\gii\generators\crud\Generator */ +/* @var $this yii\web\View + * @var $generator schmunk42\giiant\generators\crud\Generator + */ $modelClass = StringHelper::basename($generator->modelClass); $searchModelClass = StringHelper::basename($generator->searchModelClass); @@ -61,7 +64,12 @@ public function scenarios() */ public function search($params) { -$query = ::find(); +$query = ::find(); + +getHasTranslationRelation()): ?> + $query->leftJoin(translationModelClass?>::tableName(),::tableName() . '.id = ' . translationModelClass?>::tableName() . '._id'); + + $dataProvider = new ActiveDataProvider([ 'query' => $query, @@ -74,9 +82,12 @@ public function search($params) // $query->where('0=1'); return $dataProvider; } +getHasTranslationRelation()): ?> + $query->groupBy(::tableName() . '.id'); + return $dataProvider; } -} \ No newline at end of file +} diff --git a/src/generators/crud/default/views/_form-fields.php b/src/generators/crud/default/views/_form-fields.php new file mode 100644 index 00000000..77927217 --- /dev/null +++ b/src/generators/crud/default/views/_form-fields.php @@ -0,0 +1,35 @@ + +/** + * @var yii\web\View $this + * @var modelClass, '\\') ?> $model + * @var yii\widgets\ActiveForm $form + */ +?> +\n"; + $prepend = $generator->prependActiveField($attribute, $model); + $field = $generator->activeField($attribute, $model); + $append = $generator->appendActiveField($attribute, $model); + + if ($prepend) { + echo $prepend; + } + if ($field) { + echo "'; + } + if ($append) { + echo $append; + } +} diff --git a/src/generators/crud/default/views/_form.php b/src/generators/crud/default/views/_form.php index f8c9fd5d..92116fd1 100644 --- a/src/generators/crud/default/views/_form.php +++ b/src/generators/crud/default/views/_form.php @@ -1,31 +1,21 @@ modelClass(); -$model->setScenario('crud'); -$safeAttributes = $model->safeAttributes(); -if (empty($safeAttributes)) { - $model->setScenario('default'); - $safeAttributes = $model->safeAttributes(); -} -if (empty($safeAttributes)) { - $safeAttributes = $model->getTableSchema()->columnNames; -} - echo " use yii\helpers\Html; use yii\bootstrap\ActiveForm; -use \dmstr\bootstrap\Tabs; +use yii\bootstrap\Tabs; use yii\helpers\StringHelper; /** @@ -46,56 +36,32 @@ 'id' => 'formName() ?>', 'layout' => 'formLayout ?>', 'enableClientValidation' => true, - 'errorSummaryCssClass' => 'error-summary alert alert-error' + 'errorSummaryCssClass' => 'error-summary alert alert-danger', + 'fieldConfig' => [ + 'template' => "{label}\n{beginWrapper}\n{input}\n{hint}\n{error}\n{endWrapper}", + 'horizontalCssClasses' => [ + 'label' => 'col-sm-2', + 'wrapper' => 'col-sm-8', + 'error' => '', + 'hint' => '', + ], + ], ] ); ?> -
- beginBlock('main'); ?>\n"; ?> - -

- "; - $prepend = $generator->prependActiveField($attribute, $model); - $field = $generator->activeField($attribute, $model); - $append = $generator->appendActiveField($attribute, $model); - - if ($prepend) { - echo "\n\t\t\t".$prepend; - } - if ($field) { - echo "\n\t\t\t'; - } - if ($append) { - echo "\n\t\t\t".$append; - } - } - ?> - -

- endBlock(); ?>'; ?> - Yii::t('$generator->modelMessageCategory', '$label'), - 'content' => \$this->blocks['main'], - 'active' => true, -], -EOS; - ?> - - generateString(Inflector::camel2words(StringHelper::basename($model::class))); + echo " false, 'items' => [ - $items + [ + 'label' => $label, + 'content' => \$this->render('_form-fields', ['form' => \$form, 'model' => \$model]), + 'active' => true, + ] ] ] ); @@ -118,7 +84,5 @@ ActiveForm::end(); ?> -
- diff --git a/src/generators/crud/default/views/_search.php b/src/generators/crud/default/views/_search.php index fcc878f6..c827c4ed 100644 --- a/src/generators/crud/default/views/_search.php +++ b/src/generators/crud/default/views/_search.php @@ -3,7 +3,7 @@ use yii\helpers\Inflector; use yii\helpers\StringHelper; -/* +/** * @var yii\web\View $this * @var yii\gii\generators\crud\Generator $generator */ @@ -32,7 +32,7 @@ $count = 0; foreach ($generator->getTableSchema()->getColumnNames() as $attribute) { if (++$count < 6) { - echo "\t\tgenerateActiveSearchField($attribute)." ?>\n\n"; + echo "\t\tgenerateActiveSearchField($attribute)." ?>\n\n"; } else { echo "\t\tgenerateActiveSearchField($attribute)." ?>\n\n"; } diff --git a/src/generators/crud/default/views/create.php b/src/generators/crud/default/views/create.php index 83aaf78b..40d44f29 100644 --- a/src/generators/crud/default/views/create.php +++ b/src/generators/crud/default/views/create.php @@ -3,7 +3,7 @@ use yii\helpers\Inflector; use yii\helpers\StringHelper; -/* +/** * @var yii\web\View $this * @var yii\gii\generators\crud\Generator $generator */ @@ -11,7 +11,7 @@ /** @var \yii\db\ActiveRecord $model */ $model = new $generator->modelClass(); $model->setScenario('crud'); -$modelName = Inflector::camel2words(StringHelper::basename($model::className())); +$modelName = Inflector::camel2words(StringHelper::basename($model::class)); echo "modelClass, '\\') ?> $model */ -$this->title = generateString('Create') ?>; +$this->title = Yii::t('modelMessageCategory ?>', ''); $this->params['breadcrumbs'][] = ['label' => Yii::t('modelMessageCategory ?>', ''), 'url' => ['index']]; $this->params['breadcrumbs'][] = $this->title; ?>

- modelMessageCategory}', '{$modelName}') ?>\n" ?> + modelClass); ?> + '.$generator->getModelNameAttribute($generator->modelClass).") ?>\n" ?> - modelClass); ?> - '.$generator->getModelNameAttribute($generator->modelClass)." ?>\n" ?> + modelMessageCategory}', '{$modelName}') ?>\n" ?>

diff --git a/src/generators/crud/default/views/index.php b/src/generators/crud/default/views/index.php index 3b56991e..1c019bca 100644 --- a/src/generators/crud/default/views/index.php +++ b/src/generators/crud/default/views/index.php @@ -3,28 +3,34 @@ use yii\helpers\Inflector; use yii\helpers\StringHelper; -/* +/** * @var yii\web\View $this * @var schmunk42\giiant\generators\crud\Generator $generator */ $urlParams = $generator->generateUrlParams(); $nameAttribute = $generator->getNameAttribute(); +$permissions = $accessDefinitions['permissions']; /** @var \yii\db\ActiveRecord $model */ $model = new $generator->modelClass(); -$model->setScenario('crud'); +if (array_key_exists('crud-list', $model->scenarios())) { + $model->setScenario('crud-list'); +} else { + $model->setScenario('crud'); +} -$modelName = Inflector::camel2words(Inflector::pluralize(StringHelper::basename($model::className()))); + +$baseName = StringHelper::basename($model::class); +$modelName = Inflector::camel2words($baseName); $safeAttributes = $model->safeAttributes(); if (empty($safeAttributes)) { - /** @var \yii\db\ActiveRecord $model */ - $model = new $generator->modelClass(); + $model->setScenario('default'); $safeAttributes = $model->safeAttributes(); - if (empty($safeAttributes)) { - $safeAttributes = $model->getTableSchema()->columnNames; - } +} +if (empty($safeAttributes)) { + $safeAttributes = $model::getTableSchema()->columnNames; } echo " /** -* create action column template depending acces rights +* create action column template depending on user's access rights */ $actionColumnTemplates = []; -if (\Yii::$app->user->can('', ['route' => true])) { +if (\Yii::$app->user->can('', ['route' => true])) { $actionColumnTemplates[] = '{view}'; } -if (\Yii::$app->user->can('', ['route' => true])) { +if (\Yii::$app->user->can('', ['route' => true])) { $actionColumnTemplates[] = '{update}'; } -if (\Yii::$app->user->can('', ['route' => true])) { +if (\Yii::$app->user->can('', ['route' => true])) { $actionColumnTemplates[] = '{delete}'; } modelClass), '-', true) ?>-index"> - indexWidgetType === 'grid' ? '// ' : '') ?> - searchModelClass !== ''): ?> - echo $this->render('_search', ['model' =>$searchModel]); - - ?> + indexWidgetType !== 'grid' && $generator->searchModelClass !== '') { + echo "render('_search', ['model' => \$searchModel]); ?>"; + } ?> indexWidgetType === 'grid'): ?> - 'pjax-main', 'enableReplaceState'=> false, 'linkSelector'=>'#pjax-main ul.pagination a, th a', 'clientOptions' => ['pjax:success'=>'function(){alert(\"yo\")}']]) ?>\n"; ?> + 'pjax-main', 'enableReplaceState'=> false, 'linkSelector'=>'#pjax-main ul.pagination a, th a']) ?>\n"; ?>

- modelMessageCategory}', '{$modelName}') ?>\n" ?> - - List - + generateString($modelName) . "?>\n" ?> + generateString('List') . "?>\n" ?>

accessFilter){ +if($generator->accessFilter){ echo " -if(\Yii::$app->user->can('', ['route' => true])){ +if(\Yii::$app->user->can('', ['route' => true])){ \n" ?>
Html::a(' ' . generateString( - 'New' + 'New ' . $modelName ) ?>, ['create'], ['class' => 'btn btn-success']) ?>
Html::a(' ' . generateString( - 'New' + 'New ' . $modelName ) ?>, ['create'], ['class' => 'btn btn-success']) ?>
createRelationRoute($relation, 'index'); - $label = Inflector::titleize(StringHelper::basename($relation->modelClass), '-', true); + $label = Inflector::titleize(StringHelper::basename($relation->modelClass), '-'); + $i18nMessageLabel = $generator->generateString($label); $items .= << ['{$route}'], - 'label' => ' ' . Yii::t('$generator->modelMessageCategory', '$label') . '', + 'url' => ['$route'], + 'label' => ' ' . $i18nMessageLabel, ], PHP; @@ -183,20 +185,19 @@
- GridView::widget([ + GridView::widget([ 'dataProvider' => $dataProvider, 'pager' => [ - 'class' => yii\widgets\LinkPager::className(), + 'class' => yii\widgets\LinkPager::class, 'firstPageLabel' => generateString('First') ?>, 'lastPageLabel' => generateString('Last').",\n" ?> ], searchModelClass !== ''): ?> 'filterModel' => $searchModel, - 'tableOptions' => ['class' => 'table table-striped table-bordered table-hover'], - 'headerRowOptions' => ['class'=>'x'], 'columns' => [ generateString('View'); $actionButtonColumn = << '{$generator->actionButtonClass}', @@ -204,11 +205,11 @@ 'buttons' => [ 'view' => function (\$url, \$model, \$key) { \$options = [ - 'title' => Yii::t('yii', 'View'), - 'aria-label' => Yii::t('yii', 'View'), + 'title' => $i18nMessageView, + 'aria-label' => $i18nMessageView, 'data-pjax' => '0', ]; - return Html::a('', \$url, \$options); + return Html::a('', \$url, \$options); } ], 'urlCreator' => function(\$action, \$model, \$key, \$index) { @@ -221,26 +222,31 @@ ], PHP; + $count = 0; // action buttons first - echo $actionButtonColumn; + if ($generator->actionButtonColumnPosition !== 'right') { + echo $actionButtonColumn; + echo "\n"; // code-formatting + } - $count = 0; - echo "\n"; // code-formatting foreach ($safeAttributes as $attribute) { - $format = trim($generator->columnFormat($attribute, $model)); - if ($format == false) { + $format = trim((string)$generator->columnFormat($attribute, $model)); + if (empty($format)) { continue; } - if (++$count < $generator->gridMaxColumns) { + if (++$count <= $generator->gridMaxColumns) { echo "\t\t\t" . str_replace("\n", "\n\t\t\t", $format) . ",\n"; } else { echo "\t\t\t/*" . str_replace("\n", "\n\t\t\t", $format) . ",*/\n"; } } - ?> - ], + actionButtonColumnPosition === 'right') { + echo $actionButtonColumn; + echo "\n"; // code-formatting + } ?> + ] ]); ?>
@@ -254,7 +260,7 @@ ListView::widget([ 'dataProvider' => $dataProvider, 'itemOptions' => ['class' => 'item'], - 'itemView' => function ($model, $key, $index, $widget) { + 'itemView' => function ($model) { return Html::a(Html::encode($model->), ['view', ]); }, ]); ?> diff --git a/src/generators/crud/default/views/update.php b/src/generators/crud/default/views/update.php index 12252043..2a24d086 100644 --- a/src/generators/crud/default/views/update.php +++ b/src/generators/crud/default/views/update.php @@ -3,7 +3,7 @@ use yii\helpers\Inflector; use yii\helpers\StringHelper; -/* +/** * @var yii\web\View $this * @var yii\gii\generators\crud\Generator $generator */ @@ -11,8 +11,8 @@ $urlParams = $generator->generateUrlParams(); $model = new $generator->modelClass(); $model->setScenario('crud'); -$className = $model::className(); -$modelName = Inflector::camel2words(StringHelper::basename($model::className())); +$className = $model::class; +$modelName = Inflector::camel2words(StringHelper::basename($model::class)); echo " @@ -23,9 +23,8 @@ * @var yii\web\View $this * @var modelClass, '\\') ?> $model */ - -$this->title = Yii::t('modelMessageCategory ?>', '') . " " . $model->getNameAttribute( -) ?> . ', ' . generateString('Edit') ?>; + +$this->title = Yii::t('modelMessageCategory ?>', ''); $this->params['breadcrumbs'][] = ['label' => Yii::t('modelMessageCategory ?>', ''), 'url' => ['index']]; $this->params['breadcrumbs'][] = ['label' => (string)$model->getNameAttribute( ) ?>, 'url' => ['view', ]]; @@ -34,11 +33,11 @@

- modelMessageCategory}', '{$modelName}') ?>" ?> + modelClass); ?> + '.$generator->getModelNameAttribute($generator->modelClass).") ?>\n" ?> - modelClass); ?> - '.$generator->getModelNameAttribute($generator->modelClass)." ?>\n" ?> + modelMessageCategory}', '{$modelName}') ?>" ?>

diff --git a/src/generators/crud/default/views/view.php b/src/generators/crud/default/views/view.php index a9da0704..45737a0d 100644 --- a/src/generators/crud/default/views/view.php +++ b/src/generators/crud/default/views/view.php @@ -1,31 +1,33 @@ modelClass(); -$model->setScenario('crud'); +if (array_key_exists('crud-view', $model->scenarios())) { + $model->setScenario('crud-view'); +} else { + $model->setScenario('crud'); +} $safeAttributes = $model->safeAttributes(); if (empty($safeAttributes)) { $model->setScenario('default'); $safeAttributes = $model->safeAttributes(); } if (empty($safeAttributes)) { - $safeAttributes = $model->getTableSchema()->columnNames; + $safeAttributes = $model::getTableSchema()->columnNames; } -$modelName = Inflector::camel2words(StringHelper::basename($model::className())); -$className = $model::className(); +$className = $model::class; +$modelName = Inflector::camel2words(StringHelper::basename($className)); $urlParams = $generator->generateUrlParams(); +$permissions = $accessDefinitions['permissions']; echo " @@ -35,57 +37,79 @@ use yii\grid\GridView; use yii\widgets\DetailView; use yii\widgets\Pjax; -use dmstr\bootstrap\Tabs; +use yii\bootstrap\Tabs; /** * @var yii\web\View $this * @var modelClass, '\\') ?> $model */ -$copyParams = $model->attributes; $this->title = Yii::t('modelMessageCategory ?>', ''); -$this->params['breadcrumbs'][] = ['label' => Yii::t('modelMessageCategory ?>', ''), 'url' => ['index']]; -$this->params['breadcrumbs'][] = ['label' => (string)$model->getNameAttribute() ?>, 'url' => ['view', ]]; +$this->params['breadcrumbs'][] = ['label' => Yii::t('modelMessageCategory ?>.plural', ''), 'url' => ['index']]; +$this->params['breadcrumbs'][] = ['label' => (string)$model->, 'url' => ['view', ]]; $this->params['breadcrumbs'][] = generateString('View') ?>; ?>
- - session->getFlash('deleteError') !== null) : ?> - - - session->getFlash('deleteError') ?> - - " ?> - -

- modelMessageCategory}', '{$modelName}') ?>\n" ?> - - '.$generator->getModelNameAttribute($generator->modelClass)." ?>\n" ?> - + ' . $generator::getModelNameAttribute($generator->modelClass) . ") ?>\n" ?> + generateString($modelName) . ' ?>' ?>

-
- Html::a( - ' ' . generateString('Edit') ?>, - [ 'update', ], - ['class' => 'btn btn-info']) ?> - Html::a( - ' ' . generateString('Copy') ?>, - ['create', , 'modelClass) ?>'=>$copyParams], - ['class' => 'btn btn-success']) ?> - - Html::a( - ' ' . generateString('New') ?>, + accessFilter) { + echo 'getUser()->can(\'' . $permissions['update']['name'] . '\')): ?>'; + } + ?> + Html::a( + ' ' . generateString('Edit ' . $modelName) ?>, + [ 'update', ], + ['class' => 'btn btn-info']) + ?> + accessFilter) { + echo ''; + } + ?> + + enableCopy): ?> + accessFilter) { + echo 'getUser()->can(\'' . $permissions['update']['name'] . '\')): ?>'; + } + ?> + Html::a( + ' ' . generateString('Copy ' . $modelName) ?>, + ['create', , 'modelClass) ?>'=> $model->hasMethod('getCopyParams') ? $model->getCopyParams() : $model->attributes], + ['class' => 'btn btn-success']) + ?> + accessFilter) { + echo ''; + } + ?> + + + accessFilter) { + echo 'getUser()->can(\'' . $permissions['create']['name'] . '\')): ?>'; + } + ?> + Html::a( + ' ' . generateString('New ' . $modelName) ?>, ['create'], - ['class' => 'btn btn-success']) ?> + ['class' => 'btn btn-success']) + ?> + accessFilter) { + echo ''; + } + ?>
@@ -95,7 +119,7 @@
-
+
beginBlock('{$generator->modelClass}'); ?>\n"; @@ -103,7 +127,7 @@ partialView('detail_prepend', $model); ?> - DetailView::widget([ + DetailView::widget([ 'model' => $model, 'attributes' => [ ], - ]); ?> + ]); + ?> partialView('detail_append', $model); ?>
- Html::a(' ' . generateString( - 'Delete' + accessFilter) { + echo 'getUser()->can(\'' . $permissions['delete']['name'] . '\')): ?>'; + } + ?> + Html::a(' ' + . generateString( + 'Delete ' . $modelName ) ?>, ['delete', ], [ 'class' => 'btn btn-danger', 'data-confirm' => '' . generateString('Are you sure to delete this item?') ?> . '', 'data-method' => 'post', - ]); ?> + ]); + ?> + accessFilter) { + echo ''; + } + ?> endBlock(); ?>\n\n"; ?> '# '.\$model->{$model->primaryKey()[0]}.'', + 'label' => '' . \Yii::t('{$generator->messageCategory}', '# {primaryKey}', ['primaryKey' => Html::encode(\$model->{$model->primaryKey()[0]})]) . '', 'content' => \$this->blocks['{$generator->modelClass}'], 'active' => true, ], EOS; - foreach ($generator->getModelRelations($generator->modelClass, ['has_many']) as $name => $relation) { + foreach ($generator->getModelRelations($generator->modelClass, ['has_many', 'has_one']) as $name => $relation) { echo "\nbeginBlock('$name'); ?>\n"; $showAllRecords = false; - if ($relation->via !== null) { - $pivotName = Inflector::pluralize($generator->getModelByTableName($relation->via->from[0])); - $pivotRelation = $model->{'get'.$pivotName}(); + $modelName = $generator->getModelByTableName($relation->via->from[0]); + if ($generator->disablePluralization) { + $pivotName = $name; + } else { + $pivotName = Inflector::pluralize($modelName); + } + $label = Inflector::camel2words($pivotName); + $pivotRelation = $model->{'get' . $pivotName}(); $pivotPk = key($pivotRelation->link); $addButton = " ' . ".$generator->generateString('Attach')." . ' ". - Inflector::singularize(Inflector::camel2words($name)). - "', ['".$generator->createRelationRoute($pivotRelation, 'create')."', '". - Inflector::singularize($pivotName)."'=>['".key( + ' ' . " . $generator->generateString('Attach ' . $label) . + ", ['" . $generator->createRelationRoute($pivotRelation, 'create') . "', '" . + $modelName . "'=>['" . key( $pivotRelation->link - )."'=>\$model->{$model->primaryKey()[0]}]], + ) . "'=>\$model->{$model->primaryKey()[0]}]], ['class'=>'btn btn-info btn-xs'] ) ?>\n"; } else { $addButton = ''; + $label = Inflector::camel2words($name); } // relation list, add, create buttons - echo "
\n
\n"; + echo "
\n"; - echo " ' . ".$generator->generateString('List All')." . ' ". - Inflector::camel2words($name)."', - ['".$generator->createRelationRoute($relation, 'index')."'], + echo " ' . " . $generator->generateString('List All ' . $label) . ", + ['" . $generator->createRelationRoute($relation, 'index') . "'], ['class'=>'btn text-muted btn-xs'] ) ?>\n"; // TODO: support multiple PKs + + // pivot check + if ($relation->via !== null) { + $url = "['" . $generator->createRelationRoute($relation, 'create') . "']"; + } else { + $url = "['" . $generator->createRelationRoute($relation, 'create') . "', '" . + Inflector::id2camel($generator->generateRelationTo($relation), + '-', + true) . "' => ['" . key($relation->link) . "' => \$model->" . $model->primaryKey()[0] . "]]"; + } + echo " ' . ".$generator->generateString('New')." . ' ". - Inflector::singularize(Inflector::camel2words($name))."', - ['".$generator->createRelationRoute($relation, 'create')."', '". - Inflector::id2camel($generator->generateRelationTo($relation), '-', true)."' => ['".key($relation->link)."' => \$model->".$model->primaryKey()[0]."]], + ' ' . " . $generator->generateString('New ' . $label) . ", + {$url}, ['class'=>'btn btn-success btn-xs'] ); ?>\n"; + echo $addButton; - echo "
\n
\n"; #
\n"; + echo "
\n
"; // render pivot grid if ($relation->via !== null) { $pjaxId = "pjax-{$pivotName}"; @@ -205,19 +257,18 @@ // render relation grid if (!empty($output)): - echo "'pjax-{$name}', 'enableReplaceState'=> false, 'linkSelector'=>'#pjax-{$name} ul.pagination a, th a', 'clientOptions' => ['pjax:success'=>'function(){alert(\"yo\")}']]) ?>\n"; - echo "\n"; + echo "'pjax-{$name}', 'enableReplaceState'=> false, 'linkSelector'=>'#pjax-{$name} ul.pagination a, th a']) ?>\n"; + echo "\n"; echo "\n"; endif; echo "endBlock() ?>\n\n"; - // build tab items - $label = Inflector::camel2words($name); + $itemLabel = $generator->generateString($label); $items .= << \$this->blocks['$name'], - 'label' => '$label '.count(\$model->get{$name}()->asArray()->all()).'', + 'label' => '' . $itemLabel .' '. \$model->get{$name}()->count() . '', 'active' => false, ],\n EOS; @@ -226,7 +277,8 @@ 'relation-tabs', 'encodeLabels' => false, diff --git a/src/generators/crud/editable/access_definition.php b/src/generators/crud/editable/access_definition.php index 2c184292..2280c9af 100644 --- a/src/generators/crud/editable/access_definition.php +++ b/src/generators/crud/editable/access_definition.php @@ -22,7 +22,7 @@ /** * permissions - create name and descriptions */ -$permisions = []; +$permissions = []; foreach ($actions as $k => $action){ $name = $this->getModuleId() . '_' . $this->getControllerID() @@ -30,7 +30,7 @@ $description = $this->getModuleId() . '/' . $this->getControllerID() . '/' . $action; - $permisions[$action] = [ + $permissions[$action] = [ 'name' => $name, 'description' => $description, ]; @@ -76,6 +76,6 @@ } return [ - 'permisions' => $permisions, + 'permissions' => $permissions, 'roles' => $roles, -]; \ No newline at end of file +]; diff --git a/src/generators/crud/editable/controller-rest.php b/src/generators/crud/editable/controller-rest.php index 4fe19400..5a355c26 100644 --- a/src/generators/crud/editable/controller-rest.php +++ b/src/generators/crud/editable/controller-rest.php @@ -27,7 +27,7 @@ public function behaviors() parent::behaviors(), [ 'access' => [ - 'class' => AccessControl::className(), + 'class' => AccessControl::class, 'rules' => [ [ 'allow' => true, diff --git a/src/generators/crud/editable/controller.php b/src/generators/crud/editable/controller.php index 02ddd4e0..b93eceb8 100644 --- a/src/generators/crud/editable/controller.php +++ b/src/generators/crud/editable/controller.php @@ -62,9 +62,9 @@ public function behaviors() { return [ 'access' => [ - 'class' => AccessControl::className(), + 'class' => AccessControl::class, 'rules' => [ - $actions){ ?> [ @@ -74,7 +74,7 @@ public function behaviors() ], 'roles' => [''], ], - ], ], @@ -85,12 +85,12 @@ public function behaviors() public function actions() { return [ 'editable-column-update' => [ - 'class' => EditableColumnAction::className(), // action class name - 'modelClass' => ::className(), + 'class' => EditableColumnAction::class, // action class name + 'modelClass' => ::class, ], ]; - } - + } + /** * Lists all models. * @return mixed @@ -100,14 +100,14 @@ public function actionIndex() $searchModel = new ; - $dataProvider = $searchModel->search($_GET); -search($this->request->get()); + $dataProvider = new ActiveDataProvider([ 'query' => ::find(), ]); - Url::remember(); @@ -139,36 +139,36 @@ public function actionView() /** * Creates a new model. - * If creation is successful, the browser will be redirected + * If creation is successful, the browser will be redirected * to the 'view' page or back, if parameter $goBack is true. * @return mixed */ public function actionCreate() { $model = new ; - $model->load($_GET); + $model->load($this->request->get()); $relAttributes = $model->attributes; - + try { if ($model->load($_POST) && $model->save()) { if($relAttributes){ return $this->goBack(); - } + } return $this->redirect(['view', ]); } elseif (!\Yii::$app->request->isPost) { - $model->load($_GET); + $model->load($this->request->get()); } } catch (\Exception $e) { $msg = (isset($e->errorInfo[2]))?$e->errorInfo[2]:$e->getMessage(); $model->addError('_exception', $msg); } - + return $this->render('create', [ 'model' => $model, - 'relAttributes' => $relAttributes, + 'relAttributes' => $relAttributes, ]); } - + /** * Add a new TestContacts record for relation grid and redirect back. * @return mixed @@ -176,12 +176,12 @@ public function actionCreate() public function actionCreateForRel() { $model = new ; - $model->load($_GET); + $model->load($this->request->get()); $relAttributes = $model->attributes; $model->save(); return $this->goBack(); } - + /** * Updates an existing model. * If update is successful, the browser will be redirected to the 'view' page. @@ -191,9 +191,9 @@ public function actionCreateForRel() public function actionUpdate() { $model = new ; - $model->load($_GET); + $model->load($this->request->get()); $relAttributes = $model->attributes; - + $model = $this->findModel(); if ($model->load($_POST) && $model->save()) { @@ -201,7 +201,7 @@ public function actionUpdate() } else { return $this->render('update', [ 'model' => $model, - 'relAttributes' => $relAttributes + 'relAttributes' => $relAttributes ]); } } @@ -223,12 +223,12 @@ public function actionDelete() } $model = new ; - $model->load($_GET); - $relAttributes = $model->attributes; + $model->load($this->request->get()); + $relAttributes = $model->attributes; if($relAttributes){ return $this->redirect(Url::previous()); - } - + } + // TODO: improve detection $isPivot = strstr('',','); if ($isPivot == true) { @@ -248,23 +248,23 @@ public function actionDelete() * Update model record by editable. * * @return mixed - */ + */ public function actionEditable(){ - + // Check if there is an Editable ajax request if (!isset($_POST['hasEditable'])) { return false; } - + $post = []; foreach($_POST as $name => $value){ //if(in_array($name,$this->editAbleFileds)){ $post[$name] = $value; //} } - + // use Yii's response format to encode output as JSON - \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; + \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; if(!$post){ return ['output'=>'', 'message'=> generateString('Can not update this field') ?>]; } @@ -288,16 +288,16 @@ public function actionEditable(){ $errors = []; foreach($model->errors as $field => $messages){ foreach($messages as $message){ - $errors[] = $model->getAttributeLabel($field) + $errors[] = $model->getAttributeLabel($field) . ': ' . $message; } } return ['output'=>'', 'message'=>implode('
',$errors)]; - + } - - } + + } /** * Finds the model based on its primary key value. diff --git a/src/generators/crud/editable/migration_access.php b/src/generators/crud/editable/migration_access.php index 3e708e85..0a841eea 100644 --- a/src/generators/crud/editable/migration_access.php +++ b/src/generators/crud/editable/migration_access.php @@ -13,26 +13,26 @@ class migrationClass?> extends Migration /** * @var array controller all actions */ - public $permisions = var_export54($accessDefinitions['permisions'],' ')?>; + public $permissions = var_export54($accessDefinitions['permissions'],' ')?>; /** - * @var array roles and maping to actions/permisions + * @var array roles and maping to actions/permissions */ public $roles = var_export54($accessDefinitions['roles'],' ')?>; public function up() { - $permisions = []; + $permissions = []; $auth = \Yii::$app->authManager; /** - * create permisions for each controller action + * create permissions for each controller action */ - foreach ($this->permisions as $action => $permission) { - $permisions[$action] = $auth->createPermission($permission['name']); - $permisions[$action]->description = $permission['description']; - $auth->add($permisions[$action]); + foreach ($this->permissions as $action => $permission) { + $permissions[$action] = $auth->createPermission($permission['name']); + $permissions[$action]->description = $permission['description']; + $auth->add($permissions[$action]); } /** @@ -46,7 +46,7 @@ public function up() * to role assign permissions */ foreach ($actions as $action) { - $auth->addChild($role, $permisions[$action]); + $auth->addChild($role, $permissions[$action]); } } } @@ -59,7 +59,7 @@ public function down() { $auth->remove($role); } - foreach ($this->permisions as $permission) { + foreach ($this->permissions as $permission) { $authItem = $auth->createPermission($permission['name']); $auth->remove($authItem); } diff --git a/src/generators/crud/editable/views/_form.php b/src/generators/crud/editable/views/_form.php index 47ed8ea0..27a8c01e 100644 --- a/src/generators/crud/editable/views/_form.php +++ b/src/generators/crud/editable/views/_form.php @@ -27,7 +27,7 @@ * @var yii\web\View $this * @var modelClass, '\\') ?> $model * @var yii\widgets\ActiveForm $form -* @var string $relAttributes relation fields names for disabling +* @var string $relAttributes relation fields names for disabling */ ?> @@ -79,11 +79,11 @@ endBlock(); ?>'; ?> Yii::t('$generator->messageCategory', StringHelper::basename('{$model::className()}')), + 'label' => Yii::t('$generator->messageCategory', StringHelper::basename('{$model::class}')), 'content' => \$this->blocks['main'], 'active' => true, ], diff --git a/src/generators/crud/editable/views/create.php b/src/generators/crud/editable/views/create.php index 7383a659..782fae2b 100644 --- a/src/generators/crud/editable/views/create.php +++ b/src/generators/crud/editable/views/create.php @@ -3,7 +3,7 @@ use yii\helpers\Inflector; use yii\helpers\StringHelper; -/* +/** * @var yii\web\View $this * @var yii\gii\generators\crud\Generator $generator */ @@ -11,7 +11,7 @@ /** @var \yii\db\ActiveRecord $model */ $model = new $generator->modelClass(); $model->setScenario('crud'); -$modelName = StringHelper::basename($model::className()); +$modelName = StringHelper::basename($model::class); echo "title = generateString('Create') ?>; -$this->params['breadcrumbs'][] = ['label' => Yii::t('messageCategory ?>', ''), 'url' => ['index']]; +$this->params['breadcrumbs'][] = ['label' => Yii::t('messageCategory ?>', ''), 'url' => ['index']]; $this->params['breadcrumbs'][] = $this->title; ?>
diff --git a/src/generators/crud/editable/views/index.php b/src/generators/crud/editable/views/index.php index 382b21b4..34264164 100644 --- a/src/generators/crud/editable/views/index.php +++ b/src/generators/crud/editable/views/index.php @@ -15,7 +15,7 @@ $model = new $generator->modelClass(); $model->setScenario('crud'); -$modelName = Inflector::pluralize(StringHelper::basename($model::className())); +$modelName = Inflector::pluralize(StringHelper::basename($model::class)); $safeAttributes = $model->safeAttributes(); if (empty($safeAttributes)) { @@ -56,15 +56,15 @@ */ $actionColumnTemplates = []; -if (\Yii::$app->user->can('')) { +if (\Yii::$app->user->can('')) { $actionColumnTemplates[] = '{view}'; } -if (\Yii::$app->user->can('')) { +if (\Yii::$app->user->can('')) { $actionColumnTemplates[] = '{update}'; } -if (\Yii::$app->user->can('')) { +if (\Yii::$app->user->can('')) { $actionColumnTemplates[] = '{delete}'; }
accessFilter){ +if($generator->accessFilter){ echo " -if(\Yii::$app->user->can('')){ +if(\Yii::$app->user->can('')){ \n" ?> @@ -187,7 +187,7 @@ 'layout' => '{summary}{pager}{items}{pager}', 'dataProvider' => $dataProvider, 'pager' => [ - 'class' => yii\widgets\LinkPager::className(), + 'class' => yii\widgets\LinkPager::class, 'firstPageLabel' => generateString('First') ?>, 'lastPageLabel' => generateString('Last') ?> ], diff --git a/src/generators/crud/editable/views/update.php b/src/generators/crud/editable/views/update.php index 93d8fed6..e4116dfd 100644 --- a/src/generators/crud/editable/views/update.php +++ b/src/generators/crud/editable/views/update.php @@ -3,7 +3,7 @@ use yii\helpers\Inflector; use yii\helpers\StringHelper; -/* +/** * @var yii\web\View $this * @var yii\gii\generators\crud\Generator $generator */ @@ -11,8 +11,8 @@ $urlParams = $generator->generateUrlParams(); $model = new $generator->modelClass(); $model->setScenario('crud'); -$className = $model::className(); -$modelName = StringHelper::basename($model::className()); +$className = $model::class; +$modelName = StringHelper::basename($model::class); echo " diff --git a/src/generators/crud/editable/views/view.php b/src/generators/crud/editable/views/view.php index a21ad79f..1f785fdc 100644 --- a/src/generators/crud/editable/views/view.php +++ b/src/generators/crud/editable/views/view.php @@ -3,7 +3,7 @@ use yii\helpers\Inflector; use yii\helpers\StringHelper; -/* +/** * @var yii\web\View $this * @var schmunk42\giiant\generators\crud\Generator $generator */ @@ -11,9 +11,9 @@ /** @var \yii\db\ActiveRecord $model */ $model = new $generator->modelClass(); $model->setScenario('crud'); -$modelName = StringHelper::basename($model::className()); +$modelName = StringHelper::basename($model::class); -$className = $model::className(); +$className = $model::class; $safeAttributes = $model->safeAttributes(); if (empty($safeAttributes)) { @@ -104,12 +104,12 @@ 'attributes' => [ isPrimaryKey([$attribute])){ continue; - } - + } + $format = $generator->attributeEditable($attribute); if (!$format) { continue; @@ -156,10 +156,10 @@ $pjaxId = "pjax-{$name}"; $gridRelation = $relation; $gridName = $name; - } - - $gridModel = new $gridRelation->modelClass(); - + } + + $gridModel = new $gridRelation->modelClass(); + $showAllRecords = false; if ($relation->via !== null) { @@ -181,7 +181,7 @@ } // HEADER, relation list, add, create buttons - $headerLabel = Inflector::camel2words($name); + $headerLabel = Inflector::camel2words($name); echo "
@@ -218,7 +218,7 @@ // render relation grid if (!empty($output)): echo "'pjax-{$name}', 'enableReplaceState'=> false, 'linkSelector'=>'#pjax-{$name} ul.pagination a, th a', 'clientOptions' => ['pjax:success'=>'function(){alert(\"yo\")}']]) ?>\n"; - echo '
'.PHP_EOL; + echo '
'.PHP_EOL; echo ' \n"; echo '
'.PHP_EOL; echo "\n"; @@ -235,7 +235,7 @@
=$this->blocks['modelClass?>']?>
-
@@ -244,5 +244,5 @@ -
+
diff --git a/src/generators/crud/form.php b/src/generators/crud/form.php index f9c57a04..7bad85f6 100644 --- a/src/generators/crud/form.php +++ b/src/generators/crud/form.php @@ -2,7 +2,7 @@ use schmunk42\giiant\helpers\SaveForm; -/* +/** * @var yii\web\View * @var yii\bootstrap\ActiveForm $form * @var schmunk42\giiant\generators\crud\Generator $generator @@ -13,10 +13,10 @@ * on chenging listbox, form fill with selected saved forma data * currently work with input text, input checkbox and select form fields */ -$this->registerJs(SaveForm::getSavedFormsJs($generator->getName()), yii\web\View::POS_END); +$this->registerJs(SaveForm::getSavedFormsJs($generator->getName(), $generator->giiInfoPath), yii\web\View::POS_END); $this->registerJs(SaveForm::jsFillForm(), yii\web\View::POS_END); echo $form->field($generator, 'savedForm')->dropDownList( - SaveForm::getSavedFormsListbox($generator->getName()), ['onchange' => 'fillForm(this.value)'] + SaveForm::getSavedFormsListbox($generator->getName(), $generator->giiInfoPath), ['onchange' => 'fillForm(this.value)'] ); echo $form->field($generator, 'modelClass'); diff --git a/src/generators/crud/providers/core/CallbackProvider.php b/src/generators/crud/providers/core/CallbackProvider.php index f69c5766..0899e740 100755 --- a/src/generators/crud/providers/core/CallbackProvider.php +++ b/src/generators/crud/providers/core/CallbackProvider.php @@ -7,6 +7,8 @@ */ namespace schmunk42\giiant\generators\crud\providers\core; +use yii\base\BaseObject; + class CallbackProvider extends \schmunk42\giiant\base\Provider { public $activeFields = []; @@ -66,7 +68,7 @@ public function partialView($name, $model, $generator) private function getModelKey($attribute, $model) { - return $model::className().'.'.$attribute; + return $model::className() . '.' . $attribute; } private function findValue($subject, $array) diff --git a/src/generators/crud/providers/core/OptsProvider.php b/src/generators/crud/providers/core/OptsProvider.php index 3ce3091d..a34d13d7 100644 --- a/src/generators/crud/providers/core/OptsProvider.php +++ b/src/generators/crud/providers/core/OptsProvider.php @@ -42,7 +42,7 @@ public function activeField($attribute) case 'select2': return <<field(\$model, '{$attribute}')->widget(\kartik\select2\Select2::classname(), [ + \$form->field(\$model, '{$attribute}')->widget(\kartik\select2\Select2::class, [ 'name' => 'class_name', 'model' => \$model, 'attribute' => '{$attribute}', diff --git a/src/generators/crud/providers/core/RelationProvider.php b/src/generators/crud/providers/core/RelationProvider.php index 23685016..158b9f05 100644 --- a/src/generators/crud/providers/core/RelationProvider.php +++ b/src/generators/crud/providers/core/RelationProvider.php @@ -5,6 +5,7 @@ * Date: 14.03.14 * Time: 10:21. */ + namespace schmunk42\giiant\generators\crud\providers\core; use schmunk42\giiant\generators\model\Generator as ModelGenerator; @@ -27,6 +28,13 @@ class RelationProvider extends \schmunk42\giiant\base\Provider */ public $skipVirtualAttributes = false; + /** + * @var bool generate dropdown filter in GridView on related fields values + * + * @since 0.11 + */ + public $gridFilterDropdownRelation = false; + /** * Formatter for relation form inputs. * @@ -43,18 +51,24 @@ public function activeField($attribute) return; } - $relation = $this->generator->getRelationByColumn($this->generator->modelClass, $column); + // TODO: NoSQL hotfix + if (is_string($column)) { + return null; + } + $relation = $this->generator->getRelationByColumn($this->generator->modelClass, $column, + ['belongs_to', 'has_one']); if ($relation) { switch (true) { case !$relation->multiple: $pk = key($relation->link); $name = $this->generator->getModelNameAttribute($relation->modelClass); - $method = __METHOD__; + $isRequired = $relation->primaryModel->isAttributeRequired($column->name) ? 'false' : 'true'; + $method = __METHOD__; switch ($this->inputWidget) { case 'select2': $code = <<field(\$model, '{$column->name}')->widget(\kartik\select2\Select2::classname(), [ +\$form->field(\$model, '{$column->name}')->widget(\kartik\select2\Select2::class, [ 'name' => 'class_name', 'model' => \$model, 'attribute' => '{$column->name}', @@ -63,6 +77,9 @@ public function activeField($attribute) 'placeholder' => {$this->generator->generateString('Type to autocomplete')}, 'multiple' => false, 'disabled' => (isset(\$relAttributes) && isset(\$relAttributes['{$column->name}'])), + ], + 'pluginOptions' => [ + 'allowClear' => {$isRequired} ] ]); EOS; @@ -105,6 +122,11 @@ public function attributeFormat($attribute) return; } + // TODO: NoSQL hotfix + if (is_string($column)) { + return "'$column'"; + } + // handle columns with a primary key, to create links in pivot tables (changed at 0.3-dev; 03.02.2015) // TODO double check with primary keys not named `id` of non-pivot tables // TODO Note: condition does not apply in every case @@ -112,7 +134,8 @@ public function attributeFormat($attribute) //return null; #TODO: double check with primary keys not named `id` of non-pivot tables } - $relation = $this->generator->getRelationByColumn($this->generator->modelClass, $column); + $relation = $this->generator->getRelationByColumn($this->generator->modelClass, $column, + ['belongs_to', 'has_one']); if ($relation) { if ($relation->multiple) { return; @@ -125,18 +148,20 @@ public function attributeFormat($attribute) $routeIndex = $this->generator->createRelationRoute($relation, 'index'); $modelClass = $this->generator->modelClass; - $relationGetter = 'get'.(new ModelGenerator())->generateRelationName( - [$relation], - $modelClass::getTableSchema(), - $column->name, - $relation->multiple - ).'()'; + $relationProperty = lcfirst((new ModelGenerator([ + 'disablePluralization' => $this->generator->disablePluralization + ]))->generateRelationName( + [$relation], + $modelClass::getTableSchema(), + $column->name, + $relation->multiple + )); $relationModel = new $relation->modelClass(); $relationModelName = StringHelper::basename($modelClass); $pks = $relationModel->primaryKey(); $paramArrayItems = ''; foreach ($pks as $attr) { - $paramArrayItems .= "'{$attr}' => \$model->{$relationGetter}->one()->{$attr},"; + $paramArrayItems .= "'{$attr}' => \$model->{$relationProperty}->{$attr},"; } $attachArrayItems = "'{$relationModelName}'=>['{$column->name}' => \$model->{$column->name}]"; @@ -146,9 +171,9 @@ public function attributeFormat($attribute) [ 'format' => 'html', 'attribute' => '$column->name', - 'value' => (\$model->{$relationGetter}->one() ? + 'value' => (\$model->{$relationProperty} ? Html::a('', ['{$routeIndex}']).' '. - Html::a(' '.\$model->{$relationGetter}->one()->{$title}, ['{$route}', {$paramArrayItems}]).' '. + Html::a(' '.\$model->{$relationProperty}->{$title}, ['{$route}', {$paramArrayItems}]).' '. Html::a('', ['{$routeAttach}', {$attachArrayItems}]) : '?'), @@ -176,6 +201,11 @@ public function columnFormat($attribute, $model) return; } + // TODO: NoSQL hotfix + if (is_string($column)) { + return $column; + } + // handle columns with a primary key, to create links in pivot tables (changed at 0.3-dev; 03.02.2015) // TODO double check with primary keys not named `id` of non-pivot tables // TODO Note: condition does not apply in every case @@ -183,7 +213,7 @@ public function columnFormat($attribute, $model) //return null; } - $relation = $this->generator->getRelationByColumn($model, $column); + $relation = $this->generator->getRelationByColumn($model, $column, ['belongs_to', 'has_one']); if ($relation) { if ($relation->multiple) { return; @@ -192,12 +222,12 @@ public function columnFormat($attribute, $model) $route = $this->generator->createRelationRoute($relation, 'view'); $method = __METHOD__; $modelClass = $this->generator->modelClass; - $relationGetter = 'get'.(new ModelGenerator())->generateRelationName( - [$relation], - $modelClass::getTableSchema(), - $column->name, - $relation->multiple - ).'()'; + $relationProperty = lcfirst((new ModelGenerator())->generateRelationName( + [$relation], + $modelClass::getTableSchema(), + $column->name, + $relation->multiple + )); $relationModel = new $relation->modelClass(); $pks = $relationModel->primaryKey(); $paramArrayItems = ''; @@ -206,18 +236,27 @@ public function columnFormat($attribute, $model) $paramArrayItems .= "'{$attr}' => \$rel->{$attr},"; } + $filter = ''; + //params for filter + if ($this->gridFilterDropdownRelation) { + $name = $this->generator->getModelNameAttribute($relation->modelClass); + $pk = key($relation->link); + + $filter = "\n'filter' => \yii\helpers\ArrayHelper::map({$relation->modelClass}::find()->all(), '{$pk}', '{$name}'),"; + } + $code = << yii\\grid\\DataColumn::className(), + 'class' => yii\\grid\\DataColumn::class, 'attribute' => '{$column->name}', 'value' => function (\$model) { - if (\$rel = \$model->{$relationGetter}->one()) { + if (\$rel = \$model->{$relationProperty}) { return Html::a(\$rel->{$title}, ['{$route}', {$paramArrayItems}], ['data-pjax' => 0]); } else { return ''; } - }, + },{$filter} 'format' => 'raw', ] EOS; @@ -278,14 +317,14 @@ public function relationGrid($name, $relation, $showAllRecords = false) } $reflection = new \ReflectionClass($relation->modelClass); - $controller = $this->generator->pathPrefix.Inflector::camel2id($reflection->getShortName(), '-', true); + $controller = $this->generator->pathPrefix . Inflector::camel2id($reflection->getShortName(), '-', true); $relKey = key($relation->link); $actionColumn = << '{$this->generator->actionButtonClass}', 'template' => '$template', 'contentOptions' => ['nowrap'=>'nowrap'], - 'urlCreator' => function (\$action, \$model, \$key, \$index) { + 'urlCreator' => function (\$action, \$model, \$key) { // using the column name as key, not mapping to 'id' like the standard generator \$params = is_array(\$key) ? \$key : [\$model->primaryKey()[0] => (string) \$key]; \$params[0] = '$controller' . '/' . \$action; @@ -300,17 +339,26 @@ public function relationGrid($name, $relation, $showAllRecords = false) EOS; // add action column - $columns .= $actionColumn.",\n"; + if ($this->generator->actionButtonColumnPosition !== 'right') { + $columns .= $actionColumn . ",\n"; + } // prepare grid column formatters - $model->setScenario('crud'); + if (array_key_exists('crud-relation-list', $model->scenarios())) { + $model->setScenario('crud-relation-list'); + } else if (array_key_exists('crud-list', $model->scenarios())) { + $model->setScenario('crud-list'); + } else { + $model->setScenario('crud'); + } $safeAttributes = $model->safeAttributes(); if (empty($safeAttributes)) { $safeAttributes = $model->getTableSchema()->columnNames; } + foreach ($safeAttributes as $attr) { - // max seven columns + // max defined amount of columns if ($counter > $this->generator->gridRelationMaxColumns) { continue; } @@ -319,18 +367,22 @@ public function relationGrid($name, $relation, $showAllRecords = false) continue; } // don't show current model - if (key($relation->link) == $attr) { + if (key($relation->link) === $attr && !in_array($attr, $safeAttributes, true)) { continue; } $code = $this->generator->columnFormat($attr, $model); - if ($code == false) { + if ($code === false) { continue; } - $columns .= $code.",\n"; + $columns .= $code . ",\n"; ++$counter; } + if ($this->generator->actionButtonColumnPosition === 'right') { + $columns .= $actionColumn . ",\n"; + } + $query = $showAllRecords ? "'query' => \\{$relation->modelClass}::find()" : "'query' => \$model->get{$name}()"; @@ -340,7 +392,7 @@ public function relationGrid($name, $relation, $showAllRecords = false) $code = "'
'\n . "; $code .= << '{summary}{pager}
{items}{pager}', + 'layout' => '{summary}
{pager}
{items}
{pager}
', 'dataProvider' => new \\yii\\data\\ActiveDataProvider([ {$query}, 'pagination' => [ @@ -349,7 +401,7 @@ public function relationGrid($name, $relation, $showAllRecords = false) ] ]), 'pager' => [ - 'class' => yii\widgets\LinkPager::className(), + 'class' => yii\widgets\LinkPager::class, 'firstPageLabel' => {$firstPageLabel}, 'lastPageLabel' => {$lastPageLabel} ], diff --git a/src/generators/crud/providers/extensions/DateProvider.php b/src/generators/crud/providers/extensions/DateProvider.php index 51651eb2..583ac54b 100644 --- a/src/generators/crud/providers/extensions/DateProvider.php +++ b/src/generators/crud/providers/extensions/DateProvider.php @@ -17,7 +17,7 @@ public function activeField($attribute) $this->generator->requires[] = 'zhuravljov/yii2-datetime-widgets'; return <<field(\$model, '{$column->name}')->widget(\zhuravljov\widgets\DatePicker::className(), [ +\$form->field(\$model, '{$column->name}')->widget(\zhuravljov\widgets\DatePicker::class, [ 'options' => ['class' => 'form-control'], 'clientOptions' => [ 'autoclose' => true, diff --git a/src/generators/crud/providers/extensions/DateTimeProvider.php b/src/generators/crud/providers/extensions/DateTimeProvider.php index c3a82841..c82c773f 100644 --- a/src/generators/crud/providers/extensions/DateTimeProvider.php +++ b/src/generators/crud/providers/extensions/DateTimeProvider.php @@ -11,7 +11,7 @@ public function activeField($attribute) $this->generator->requires[] = 'zhuravljov/yii2-datetime-widgets'; return <<field(\$model, '{$attribute}')->widget(\zhuravljov\widgets\DateTimePicker::className(), [ +\$form->field(\$model, '{$attribute}')->widget(\zhuravljov\widgets\DateTimePicker::class, [ 'options' => ['class' => 'form-control'], 'clientOptions' => [ 'autoclose' => true, diff --git a/src/generators/crud/providers/extensions/EditorProvider.php b/src/generators/crud/providers/extensions/EditorProvider.php index fec59a03..1875ca39 100644 --- a/src/generators/crud/providers/extensions/EditorProvider.php +++ b/src/generators/crud/providers/extensions/EditorProvider.php @@ -29,29 +29,29 @@ public function activeField($attribute) case 'redactor': $this->generator->requires[] = 'yiidoc/yii2-redactor'; - return "\$form->field(\$model, '{$attribute}')->widget(\\yii\\redactor\\widgets\\Redactor::className())"; + return "\$form->field(\$model, '{$attribute}')->widget(\\yii\\redactor\\widgets\\Redactor::class)"; break; case 'aceHTML': $this->generator->requires[] = 'trntv/aceeditor'; - return "\$form->field(\$model, '{$attribute}')->widget(\\trntv\\aceeditor\\AceEditor::className(), ['mode' => 'html', 'theme' => 'twilight'])"; + return "\$form->field(\$model, '{$attribute}')->widget(\\trntv\\aceeditor\\AceEditor::class, ['mode' => 'html', 'theme' => 'twilight'])"; break; case 'aceLESS': $this->generator->requires[] = 'trntv/aceeditor'; - return "\$form->field(\$model, '{$attribute}')->widget(\\trntv\\aceeditor\\AceEditor::className(), ['mode' => 'less', 'theme' => 'twilight'])"; + return "\$form->field(\$model, '{$attribute}')->widget(\\trntv\\aceeditor\\AceEditor::class, ['mode' => 'less', 'theme' => 'twilight'])"; break; case 'aceJS': $this->generator->requires[] = 'trntv/aceeditor'; - return "\$form->field(\$model, '{$attribute}')->widget(\\trntv\\aceeditor\\AceEditor::className(), ['mode' => 'javascript', 'theme' => 'twilight'])"; + return "\$form->field(\$model, '{$attribute}')->widget(\\trntv\\aceeditor\\AceEditor::class, ['mode' => 'javascript', 'theme' => 'twilight'])"; break; default: $this->generator->requires[] = '2amigos/yii2-ckeditor-widget'; return <<field(\$model, '{$attribute}')->widget( - \dosamigos\ckeditor\CKEditor::className(), + \dosamigos\ckeditor\CKEditor::class, [ 'options' => ['rows' => 6], 'preset' => 'basic' diff --git a/src/generators/extension/default/Bootstrap.php b/src/generators/extension/default/Bootstrap.php index 7054e2ae..7cbeb802 100644 --- a/src/generators/extension/default/Bootstrap.php +++ b/src/generators/extension/default/Bootstrap.php @@ -11,19 +11,19 @@ class Bootstrap implements BootstrapInterface { /** @inheritdoc */ public function bootstrap($app) { -enableI18N){ -?> +?> if (!isset($app->get('i18n')->translations['messageCategory ?>*'])) { $app->get('i18n')->translations['messageCategory ?>*'] = [ - 'class' => PhpMessageSource::className(), + 'class' => PhpMessageSource::class, 'basePath' => __DIR__ . '/messages', 'sourceLanguage' => 'en-US' ]; } +?> } } diff --git a/src/generators/model/Generator.php b/src/generators/model/Generator.php index 00a89b31..c7c49332 100644 --- a/src/generators/model/Generator.php +++ b/src/generators/model/Generator.php @@ -5,13 +5,14 @@ * @copyright Copyright (c) 2014 herzog kommunikation GmbH * @license http://www.phundament.com/license/ */ + namespace schmunk42\giiant\generators\model; +use schmunk42\giiant\helpers\SaveForm; use Yii; use yii\gii\CodeFile; use yii\helpers\Inflector; use yii\helpers\StringHelper; -use schmunk42\giiant\helpers\SaveForm; /** * This generator will generate one or multiple ActiveRecord classes for the specified database table. @@ -57,6 +58,11 @@ class Generator extends \yii\gii\generators\model\Generator */ public $useTimestampBehavior = true; + /** + * @var string support user custom TimestampBehavior class + */ + public $timestampBehaviorClass = 'yii\behaviors\TimestampBehavior'; + /** * @var string the name of the column where the user who updated the entry is stored */ @@ -83,11 +89,26 @@ class Generator extends \yii\gii\generators\model\Generator */ public $languageCodeColumn = 'language'; + /** + * @var string prefix to prepend to the base model, setting "Base" will result in a model named "BasePost" + */ + public $baseClassPrefix = ''; + + /** + * @var string prefix to prepend to the many many relation methods + */ + public $manyManyRelationSuffix = ''; + /** * @var string suffix to append to the base model, setting "Base" will result in a model named "PostBase" */ public $baseClassSuffix = ''; + /** + * @var bool whether to enable or disable the pluralization of the models name + */ + public $disablePluralization = false; + /** * @var array key-value pairs for mapping a table-name to class-name, eg. 'prefix_FOObar' => 'FooBar' */ @@ -96,6 +117,9 @@ class Generator extends \yii\gii\generators\model\Generator public $removeDuplicateRelations = false; + /** @var bool Cache relations data between model generation */ + public $cacheRelationsData = true; + /** * @var bool This indicates whether the generator should generate attribute hints by using the comments of the corresponding DB columns */ @@ -108,8 +132,30 @@ class Generator extends \yii\gii\generators\model\Generator public $messageCategory = 'models'; + public $giiInfoPath = '.gii'; + protected $classNames2; + protected static $_relationsCache = null; + + /** + * the names given here are used as suffixes to the base_translation table name, eg. + * + * $languageTableName = '{table}_translation'; + * $translationTableAdditions = ['meta']; + * + * will process {table}_translation AND {table}_translation_meta + * + * to be able to set the 'fallbackLanguage' flag fot the behaviour of this translation, items can be arrays like: + * + * $translationTableAdditions = ['name' => 'meta', 'fallbackLanguage' => false] + * + * if fallbackLanguage is not specified, 'true' is used as default + * + * @var array af additional translation tables + */ + public $translationTableAdditions = ['name' => 'meta', 'fallbackLanguage' => false]; + /** * {@inheritdoc} */ @@ -134,15 +180,30 @@ public function rules() return array_merge( parent::rules(), [ - [[ - 'generateModelClass', - 'useTranslatableBehavior', - 'generateHintsFromComments', - 'useBlameableBehavior', - 'useTimestampBehavior', - 'singularEntities', - ], 'boolean'], - [['languageTableName', 'languageCodeColumn', 'createdByColumn', 'updatedByColumn', 'createdAtColumn', 'updatedAtColumn', 'savedForm'], 'string'], + [ + [ + 'generateModelClass', + 'useTranslatableBehavior', + 'generateHintsFromComments', + 'useBlameableBehavior', + 'useTimestampBehavior', + 'singularEntities', + ], + 'boolean' + ], + [ + [ + 'languageTableName', + 'languageCodeColumn', + 'createdByColumn', + 'updatedByColumn', + 'createdAtColumn', + 'updatedAtColumn', + 'savedForm', + 'timestampBehaviorClass' + ], + 'string' + ], [['tablePrefix'], 'safe'], ] ); @@ -163,7 +224,8 @@ public function formAttributes() 'baseClass', 'db', 'generateRelations', - //'generateRelationsFromCurrentSchema', + 'generateJunctionRelationMode', + 'generateRelationsFromCurrentSchema', 'generateLabelsFromComments', 'generateHintsFromComments', 'generateModelClass', @@ -183,7 +245,8 @@ public function formAttributes() 'useTimestampBehavior', 'createdAtColumn', 'updatedAtColumn', - ]; + 'timestampBehaviorClass', + ]; } /** @@ -216,6 +279,7 @@ public function hints() 'generateHintsFromComments' => 'This indicates whether the generator should generate attribute hints by using the comments of the corresponding DB columns.', 'useTimestampBehavior' => 'Use TimestampBehavior for tables with column(s) for created at and/or updated at timestamps.', + 'timestampBehaviorClass' => 'Use custom TimestampBehavior class.', 'createdAtColumn' => 'The column name where the created at timestamp is stored.', 'updatedAtColumn' => 'The column name where the updated at timestamp is stored.', 'useBlameableBehavior' => 'Use BlameableBehavior for tables with column(s) for created by and/or updated by user IDs.', @@ -240,13 +304,23 @@ public function requiredTemplates() public function generate() { $files = []; - $relations = $this->generateRelations(); + + if ($this->cacheRelationsData) { + if (static::$_relationsCache === null) { + static::$_relationsCache = $this->generateRelations(); + } + $relations = static::$_relationsCache; + } else { + $relations = $this->generateRelations(); + } + $db = $this->getDbConnection(); + $generateTranslationTrait = false; + foreach ($this->getTableNames() as $tableName) { list($relations, $translations) = array_values($this->extractTranslations($tableName, $relations)); -//var_dump($relations,$tableName);exit; - $className = php_sapi_name() === 'cli' + $className = $this->modelClass === '' || php_sapi_name() === 'cli' ? $this->generateClassName($tableName) : $this->modelClass; @@ -261,13 +335,16 @@ public function generate() 'labels' => $this->generateLabels($tableSchema), 'hints' => $this->generateHints($tableSchema), 'rules' => $this->generateRules($tableSchema), - 'relations' => isset($relations[$tableName]) ? $relations[$tableName] : [], + 'relations' => $relations[$tableName] ?? [], 'ns' => $this->ns, 'enum' => $this->getEnum($tableSchema->columns), + 'traits' => (array)$this->baseTraits ]; if (!empty($translations)) { $params['translation'] = $translations; + $params['traits'][] = '\\' . $this->ns . '\traits\TranslationAttributeRules'; + $generateTranslationTrait = true; } $params['blameable'] = $this->generateBlameable($tableSchema); @@ -275,12 +352,12 @@ public function generate() $files[] = new CodeFile( Yii::getAlias( - '@'.str_replace('\\', '/', $this->ns) - ).'/base/'.$className.$this->baseClassSuffix.'.php', + '@' . str_replace('\\', '/', $this->ns) + ) . '/base/' . $this->baseClassPrefix . $className . $this->baseClassSuffix . '.php', $this->render('model.php', $params) ); - $modelClassFile = Yii::getAlias('@'.str_replace('\\', '/', $this->ns)).'/'.$className.'.php'; + $modelClassFile = Yii::getAlias('@' . str_replace('\\', '/', $this->ns)) . '/' . $className . '.php'; if ($this->generateModelClass || !is_file($modelClassFile)) { $files[] = new CodeFile( $modelClassFile, @@ -290,8 +367,8 @@ public function generate() if ($queryClassName) { $queryClassFile = Yii::getAlias( - '@'.str_replace('\\', '/', $this->queryNs) - ).'/'.$queryClassName.'.php'; + '@' . str_replace('\\', '/', $this->queryNs) + ) . '/' . $queryClassName . '.php'; if ($this->generateModelClass || !is_file($queryClassFile)) { $params = [ 'className' => $queryClassName, @@ -308,15 +385,28 @@ public function generate() * create gii/[name]GiiantModel.json with actual form data */ $suffix = str_replace(' ', '', $this->getName()); - $formDataDir = Yii::getAlias('@'.str_replace('\\', '/', $this->ns)); + $formDataDir = Yii::getAlias('@' . str_replace('\\', '/', $this->ns)); $formDataFile = StringHelper::dirname($formDataDir) - .'/gii' - .'/'.$tableName.$suffix.'.json'; - - $formData = json_encode(SaveForm::getFormAttributesValues($this, $this->formAttributes())); + . '/' . $this->giiInfoPath . '/' + . '/' . $tableName . $suffix . '.json'; + $generatorForm = (clone $this); + $generatorForm->tableName = $tableName; + $generatorForm->modelClass = $className; + $formData = json_encode(SaveForm::getFormAttributesValues($generatorForm, $this->formAttributes()), + JSON_PRETTY_PRINT); $files[] = new CodeFile($formDataFile, $formData); } + if ($generateTranslationTrait) { + $files[] = new CodeFile( + Yii::getAlias('@' . str_replace('\\', '/', $this->ns)) . '/traits/TranslationAttributeRules.php', + $this->render('translation-trait.php', [ + 'ns' => $this->ns . '\traits' + ]) + ); + } + + return $files; } @@ -353,12 +443,12 @@ public function generateClassName($tableName, $useSchemaName = null) $patterns[] = "/^{$db->tablePrefix}(.*?)$/"; $patterns[] = "/^(.*?){$db->tablePrefix}$/"; - if (strpos($this->tableName, '*') !== false) { + if (strpos((string)$this->tableName, '*') !== false) { $pattern = $this->tableName; if (($pos = strrpos($pattern, '.')) !== false) { $pattern = substr($pattern, $pos + 1); } - $patterns[] = '/^'.str_replace('*', '(\w+)', $pattern).'$/'; + $patterns[] = '/^' . str_replace('*', '(\w+)', $pattern) . '$/'; } $className = $tableName; @@ -408,7 +498,15 @@ public function generateHints($table) */ public function generateRelationName($relations, $table, $key, $multiple) { - return parent::generateRelationName($relations, $table, $key, $multiple); + $suffix = ''; + if ($this->disablePluralization) { + if ($multiple) { + $suffix = $this->manyManyRelationSuffix; + } + $multiple = false; + } + $relationName = parent::generateRelationName($relations, $table, $key, $multiple); + return $relationName . $suffix; } protected function generateRelations() @@ -454,8 +552,8 @@ public function getEnum($columns) } $column_camel_name = str_replace(' ', '', ucwords(implode(' ', explode('_', $column->name)))); - $enum[$column->name]['func_opts_name'] = 'opts'.$column_camel_name; - $enum[$column->name]['func_get_label_name'] = 'get'.$column_camel_name.'ValueLabel'; + $enum[$column->name]['func_opts_name'] = 'opts' . $column_camel_name; + $enum[$column->name]['func_get_label_name'] = 'get' . $column_camel_name . 'ValueLabel'; $enum[$column->name]['values'] = []; $enum_values = explode(',', substr($column->dbType, 4, strlen($column->dbType) - 1)); @@ -463,15 +561,12 @@ public function getEnum($columns) foreach ($enum_values as $value) { $value = trim($value, "()'"); - $const_name = strtoupper($column->name.'_'.$value); + $const_name = strtoupper($column->name . '_' . $value); $const_name = preg_replace('/\s+/', '_', $const_name); $const_name = str_replace(['-', '_', ' '], '_', $const_name); $const_name = preg_replace('/[^A-Z0-9_]/', '', $const_name); - $label = ucwords( - trim(strtolower(str_replace(['-', '_'], ' ', preg_replace('/(?name]['values'][] = [ 'value' => $value, @@ -524,21 +619,36 @@ public function generateRules($table) foreach ($enum as $field_name => $field_details) { $ea = array(); foreach ($field_details['values'] as $field_enum_values) { - $ea[] = 'self::'.$field_enum_values['const_name']; + $ea[] = 'self::' . $field_enum_values['const_name']; } - $rules[] = "['".$field_name."', 'in', 'range' => [\n ".implode( + $rules[] = "['" . $field_name . "', 'in', 'range' => [\n " . implode( ",\n ", $ea - ).",\n ]\n ]"; + ) . ",\n ]\n ]"; } // inject namespace for targetClass $parentRules = parent::generateRules($table); $ns = "\\{$this->ns}\\"; $match = "'targetClass' => "; - $replace = $match.$ns; + $replace = $match . $ns; + + + $replaceMap = [ + [ + 'search' => "'targetClass' => ", + 'replace' => "'targetClass' => " . $ns, + ], + [ + 'search' => "'unique', ", + 'replace' => "'unique', 'targetClass' => " . $ns . $this->modelClass . '::class, ', + ] + ]; foreach ($parentRules as $k => $parentRule) { - $parentRules[$k] = str_replace($match, $replace, $parentRule); + foreach ($replaceMap as $replaceItem) { + $parentRules[$k] = str_replace($replaceItem['search'], $replaceItem['replace'], $parentRule); + break; + } } $rules = array_merge($parentRules, $rules); @@ -565,10 +675,10 @@ protected function getDbConnection() public function validateDb() { if (Yii::$container->has($this->db)) { - return true; - } else { - return parent::validateDb(); + return; } + + parent::validateDb(); } /** @@ -580,11 +690,65 @@ public function getTableNames() } /** - * @param $relations all database's relations + * @return array associative array containing the extracted relations and the modified translations (from parent) + translations_meta fields if exists + */ + protected function extractTranslations($tableName, $relations) { + + $translations = [ + 'relations' => $relations, + 'translations' => [], + ]; + + # check if we have base translations + $baseTranslations = $this->extractBaseTranslations($tableName, $relations); + // we do not want timestamp columns as translatable fields + $unsetFields = [$this->createdAtColumn, $this->updatedAtColumn, $this->createdByColumn, $this->updatedByColumn]; + if (!empty($baseTranslations['translations']['fields'])) { + $translations = $baseTranslations; + $translations['translations']['fields'] = array_diff($baseTranslations['translations']['fields'], $unsetFields); + } + + $baseLanguageTableName = $this->languageTableName; + foreach ($this->translationTableAdditions as $addition) { + + if (is_array($addition)) { + $additionName = $addition['name']; + $additionFallbackLanguage = $addition['fallbackLanguage'] ?? true; + } else { + $additionName = $addition; + $additionFallbackLanguage = true; + } + + # in the following runs we must use possibly modified relations from previous extractTranslations() call + $prevRelations = $translations['relations']; + # to be able to reuse extractTranslations() set $this->languageTableName for one method call + $this->languageTableName .= '_' . $additionName; + # here we must use possibly modified relations from previous extractTranslations() call + $additionTranslations = $this->extractBaseTranslations($tableName, $prevRelations); + + # if we get meta-translations fields, overwrite relations, + # otherwise we get the relation as TranslationMetas and translationMetas + if (!empty($additionTranslations['translations']['fields'])) { + $translations['relations'] = $additionTranslations['relations']; + $translations['translations']['additions'][$additionName]['fields'] = array_diff($additionTranslations['translations']['fields'], $unsetFields); + $translations['translations']['additions'][$additionName]['code'] = $additionTranslations['translations']['code']; + # set flag if this addition should use the fallback language feature + $translations['translations']['additions'][$additionName]['fallbackLanguage'] = $additionFallbackLanguage; + } + # reset languageTableName to default value (without prefix) + $this->languageTableName = $baseLanguageTableName; + } + + return $translations; + + } + + /** + * @param array $relations All database's relations * * @return array associative array containing the extracted relations and the modified translations */ - protected function extractTranslations($tableName, $relations) + protected function extractBaseTranslations($tableName, $relations) { $langTableName = str_replace('{{table}}', $tableName, $this->languageTableName); @@ -672,13 +836,26 @@ protected function generateTimestamp($table) $createdAt = $table->getColumn($this->createdAtColumn) !== null ? $this->createdAtColumn : false; $updatedAt = $table->getColumn($this->updatedAtColumn) !== null ? $this->updatedAtColumn : false; + #var_dump($table->getColumn($this->createdAtColumn)); exit; if ($this->useTimestampBehavior && ($createdAt || $updatedAt)) { + // check column type, if datetime set NOW() as Value + if ($table->getColumn($this->createdAtColumn)->type === 'datetime') { + return [ + 'value' => '(new \DateTime())->format(\'Y-m-d H:i:s\')', + 'createdAtAttribute' => $createdAt, + 'updatedAtAttribute' => $updatedAt, + 'timestampBehaviorClass' => $this->timestampBehaviorClass, + ]; + + } return [ 'createdAtAttribute' => $createdAt, 'updatedAtAttribute' => $updatedAt, + 'timestampBehaviorClass' => $this->timestampBehaviorClass, ]; } return []; } } + diff --git a/src/generators/model/default/model-extended.php b/src/generators/model/default/model-extended.php index 4ae8e2ac..a2890547 100644 --- a/src/generators/model/default/model-extended.php +++ b/src/generators/model/default/model-extended.php @@ -17,9 +17,7 @@ namespace ns ?>; -use Yii; use \ns ?>\base\ as Base; -use yii\helpers\ArrayHelper; /** * This is the model class for table "". @@ -27,23 +25,4 @@ class extends Base { -public function behaviors() - { - return ArrayHelper::merge( - parent::behaviors(), - [ - # custom behaviors - ] - ); - } - - public function rules() - { - return ArrayHelper::merge( - parent::rules(), - [ - # custom validation rules - ] - ); - } } diff --git a/src/generators/model/default/model.php b/src/generators/model/default/model.php index c04c92aa..955f9020 100644 --- a/src/generators/model/default/model.php +++ b/src/generators/model/default/model.php @@ -11,12 +11,19 @@ * @var schmunk42\giiant\generators\model\Generator $generator * @var string $tableName full table name * @var string $className class name + * @var string $ns class namespace + * @var string $queryClassName queryclass name * @var yii\db\TableSchema $tableSchema * @var string[] $labels list of attribute labels (name => label) * @var string[] $rules list of validation rules * @var array $relations list of relations (name => relation declaration) + * @var array $translation + * @var array $traits */ +$activeRecordClass = '\\' . ltrim($generator->baseClass, '\\'); +$translationExists = false; + echo " // This class was automatically generated by a giiant build task @@ -25,6 +32,7 @@ namespace ns ?>\base; use Yii; +use yii\helpers\ArrayHelper; use dosamigos\translateable\TranslateableBehavior; @@ -32,7 +40,10 @@ use yii\behaviors\BlameableBehavior; -use yii\behaviors\TimestampBehavior; +use ; + + +use ns .'\\base' === $generator->queryNs ? $queryClassName : '\\' . $generator->queryNs . '\\' . $queryClassName) ?>; /** @@ -47,19 +58,15 @@ * @property \\ - * @property string $aliasModel */ -abstract class extends baseClass, '\\') . "\n" ?> +abstract class extends { - baseTraits; - if ($traits) { - echo "use {$traits};"; + if (!empty($traits)) { + echo "\tuse " . implode(', ', $traits) . ';' . PHP_EOL; } ?> - @@ -72,9 +79,6 @@ abstract class extends baseClass, echo ' const ' . $enum_value['const_name'] . ' = \'' . $enum_value['value'] . '\';' . PHP_EOL; } } -?> - var $enum_labels = false; - /** @@ -84,7 +88,17 @@ public static function tableName() { return ''; } +db !== 'db'): ?> + /** + * @return \yii\db\Connection the database connection used by this AR class. + * @throws \yii\base\InvalidConfigException + */ + public static function getDb() + { + return Yii::$app->get('db ?>'); + } + /** @@ -92,43 +106,78 @@ public static function tableName() */ public function behaviors() { - return [ - - [ - 'class' => BlameableBehavior::className(), - - 'createdByAttribute' => , - - - 'updatedByAttribute' => , - - ], - - - [ - 'class' => TimestampBehavior::className(), - - 'createdAtAttribute' => , - - - 'updatedAtAttribute' => , - - ], - - - 'translatable' => [ - 'class' => TranslateableBehavior::className(), - // in case you renamed your relation, you can setup its name - // 'relation' => 'translations', -languageCodeColumn !== 'language'): ?> + $behaviors = parent::behaviors(); + + $behaviors['blameable'] = [ + 'class' => BlameableBehavior::class, + + 'createdByAttribute' => , + + + 'updatedByAttribute' => , + +]; + + +$behaviors['timestamp'] = [ + 'class' => TimestampBehavior::class, + + 'value' => , + + + 'createdAtAttribute' => , + + + 'updatedAtAttribute' => , + +]; + + + + +$behaviors['translation'] = [ + 'class' => TranslateableBehavior::class, + // 'relation' => 'translations', + languageCodeColumn !== 'language'): ?> 'languageField' => 'languageCodeColumn ?>', - - 'translationAttributes' => [ - - ], + + 'skipSavingDuplicateTranslation' => true, + 'translationAttributes' => [ + ], - + 'deleteEvent' => ::EVENT_BEFORE_DELETE, + 'restrictDeletion' => TranslateableBehavior::DELETE_LAST ]; + + + + $values): ?> + + $behaviors['translation_'] = [ + 'class' => TranslateableBehavior::class, + 'relation' => 'translations', + languageCodeColumn !== 'language'): ?> + 'languageField' => 'languageCodeColumn ?>', + + + // This is not a boolean parameter it only sets the fallbackLanguage to an invalid value! + 'fallbackLanguage' => false, + 'skipSavingDuplicateTranslation' => false, + + 'skipSavingDuplicateTranslation' => true, + + 'translationAttributes' => [ + + ], + 'deleteEvent' => ::EVENT_BEFORE_DELETE + ]; + + + + + + + return $behaviors; } @@ -137,7 +186,11 @@ public function behaviors() */ public function rules() { - return []; + $parentRules = parent::rules(); + + $parentRules += $this->importTranslationAttributeRules(); + + return ArrayHelper::merge($parentRules, []); } /** @@ -145,11 +198,11 @@ public function rules() */ public function attributeLabels() { - return [ + return ArrayHelper::merge(parent::attributeLabels(), [ $label): ?> " . $generator->generateString($label) . ",\n" ?> - ]; + ]); } @@ -158,14 +211,14 @@ public function attributeLabels() */ public function attributeHints() { - return array_merge(parent::attributeHints(), [ + return ArrayHelper::merge(parent::attributeHints(), [ $hint): ?> " . $generator->generateString($hint) . ",\n" ?> ]); } - $relation): ?> + $relation):?> /** * @return \yii\db\ActiveQuery @@ -184,25 +237,34 @@ public function getTranslations() { } - + + $values): ?> + + /** + * @return \yii\db\ActiveQuery + */ + public function getTranslations() + { + + } + + + + + - ns .'\\base' === $generator->queryNs) ? $queryClassName : '\\' . $generator->queryNs . '\\' . $queryClassName; - echo "\n"; - ?> /** * @inheritdoc - * @return the active query used by this AR class. + * @return the active query used by this AR class. */ public static function find() { - return new (get_called_class()); + return new (static::class); } - $column_data){ + foreach($enum as $column_name => $column_data): ?> /** @@ -227,19 +289,10 @@ public static function () return [ $value){ - if ($generator->enableI18N) { - echo ' '.'self::' . $value['const_name'] . ' => Yii::t(\'' . $generator->messageCategory . '\', self::' . $value['const_name'] . "),\n"; - } else { - echo ' '.'self::' . $value['const_name'] . ' => self::' . $value['const_name'] . ",\n"; - } + echo ' '.'self::' . $value['const_name'] . ' => ' . $generator->generateString($value['label']) . ",\n"; } ?> ]; } - - + } diff --git a/src/generators/model/default/query.php b/src/generators/model/default/query.php index e6f4b812..1722dd4b 100644 --- a/src/generators/model/default/query.php +++ b/src/generators/model/default/query.php @@ -8,9 +8,10 @@ /* @var $className string class name */ /* @var $modelClassName string related model class name */ -$modelFullClassName = $modelClassName; if ($generator->ns !== $generator->queryNs) { - $modelFullClassName = '\\' . $generator->ns . '\\' . $modelFullClassName; + $modelFullClassName = '\\' . $generator->ns . '\\' . $modelClassName; +} else { + $modelFullClassName = $modelClassName; } echo "queryNs ?>; +use ; + /** - * This is the ActiveQuery class for [[]]. + * This is the ActiveQuery class for [[]]. * * @see + * @method [] all($db = null) + * @method one($db = null) */ class extends queryBaseClass, '\\') . "\n" ?> { - /*public function active() - { - $this->andWhere('[[status]]=1'); - return $this; - }*/ - - /** - * @inheritdoc - * @return []|array - */ - public function all($db = null) - { - return parent::all($db); - } - /** - * @inheritdoc - * @return |array|null - */ - public function one($db = null) - { - return parent::one($db); - } } diff --git a/src/generators/model/default/translation-trait.php b/src/generators/model/default/translation-trait.php new file mode 100644 index 00000000..12e7168e --- /dev/null +++ b/src/generators/model/default/translation-trait.php @@ -0,0 +1,41 @@ + + +namespace ; + +use dosamigos\translateable\TranslateableBehavior; + +trait TranslationAttributeRules +{ + /** + * Import rules from translation model for translation attributes + * + * @return array + */ + public function importTranslationAttributeRules(): array + { + $rules = []; + foreach ($this->getBehaviors() as $behavior) { + if ($behavior instanceof TranslateableBehavior) { + $translationModelClass = $this->getRelation($behavior->relation)->modelClass; + $importRules = (new $translationModelClass)->rules(); + foreach ($importRules as $rule) { + foreach ((array)$rule[0] as $rule_key => $attribute) { + if (!in_array($attribute, $behavior->translationAttributes, true)) { + unset($rule[0][$rule_key]); + } + } + if (!empty($rule[0])) { + $rules[] = $rule; + } + } + } + } + return $rules; + } +} diff --git a/src/generators/model/form.php b/src/generators/model/form.php index 6987e3c2..2bce1f10 100644 --- a/src/generators/model/form.php +++ b/src/generators/model/form.php @@ -12,10 +12,10 @@ * on chenging listbox, form fill with selected saved forma data * currently work with input text, input checkbox and select form fields */ -$this->registerJs(SaveForm::getSavedFormsJs($generator->getName()), yii\web\View::POS_END); +$this->registerJs(SaveForm::getSavedFormsJs($generator->getName(), $generator->giiInfoPath), yii\web\View::POS_END); $this->registerJs(SaveForm::jsFillForm(), yii\web\View::POS_END); echo $form->field($generator, 'savedForm')->dropDownList( - SaveForm::getSavedFormsListbox($generator->getName()), ['onchange' => 'fillForm(this.value)'] + SaveForm::getSavedFormsListbox($generator->getName() , $generator->giiInfoPath), ['onchange' => 'fillForm(this.value)'] ); echo $form->field($generator, 'tableName'); @@ -25,9 +25,13 @@ echo $form->field($generator, 'baseClass'); echo $form->field($generator, 'db'); echo $form->field($generator, 'generateRelations')->dropDownList([ - Generator::RELATIONS_NONE => Yii::t('yii', 'No relations'), - Generator::RELATIONS_ALL => Yii::t('yii', 'All relations'), - Generator::RELATIONS_ALL_INVERSE => Yii::t('yii', 'All relations with inverse'), + Generator::RELATIONS_NONE => Yii::t('giiant', 'No relations'), + Generator::RELATIONS_ALL => Yii::t('giiant', 'All relations'), + Generator::RELATIONS_ALL_INVERSE => Yii::t('giiant', 'All relations with inverse'), +]); +echo $form->field($generator, 'generateJunctionRelationMode')->dropDownList([ + Generator::JUNCTION_RELATION_VIA_TABLE => Yii::t('giiant', 'Via Table'), + Generator::JUNCTION_RELATION_VIA_MODEL => Yii::t('giiant', 'Via Model'), ]); //echo $form->field($generator, 'generateRelationsFromCurrentSchema')->checkbox(); echo $form->field($generator, 'generateLabelsFromComments')->checkbox(); diff --git a/src/generators/module/default/controller.php b/src/generators/module/default/controller.php index b3d2e939..9b406916 100644 --- a/src/generators/module/default/controller.php +++ b/src/generators/module/default/controller.php @@ -11,12 +11,45 @@ namespace getControllerNamespace() ?>; +use dmstr\helpers\Metadata; +use rmrevin\yii\fontawesome\FA; +use yii\data\ArrayDataProvider; use yii\web\Controller; class DefaultController extends Controller { public function actionIndex() { - return $this->render('index'); + $controllers = Metadata::getModuleControllers($this->module->id); + $favourites = []; + + $patterns = [ + '^.*$' => ['color' => 'green', 'icon' => FA::_CUBE], + ]; + + foreach ($patterns as $pattern => $options) { + foreach ($controllers as $c => $item) { + $controllers[$c]['label'] = $item['name']; + if ($item['name'] !== $this->id && preg_match("/$pattern/", $item['name'])) { + $favourites[$c] = $item; + $favourites[$c]['head'] = ucfirst(substr($item['name'], 0, 2)); + $favourites[$c]['label'] = $item['name']; + $favourites[$c]['color'] = $options['color']; + $favourites[$c]['icon'] = $options['icon'] ?? null; + unset($controllers[$c]); + } + } + } + + $dataProvider = new ArrayDataProvider([ + 'allModels' => $favourites, + 'pagination' => [ + 'pageSize' => 100 + ] + ]); + + return $this->render('index', [ + 'dataProvider' => $dataProvider + ]); } } diff --git a/src/generators/module/default/view.php b/src/generators/module/default/view.php index 995a518d..3bacec07 100644 --- a/src/generators/module/default/view.php +++ b/src/generators/module/default/view.php @@ -5,67 +5,28 @@ -use rmrevin\yii\fontawesome\FA; -use yii\helpers\Inflector; - -/* - * @var yii\web\View $this +/** + * @var ArrayDataProvider $dataProvider */ -$controllers = \dmstr\helpers\Metadata::getModuleControllers($this->context->module->id); -$favourites = []; - -$patterns = [ - '^default$' => ['color' => 'gray', 'icon' => FA::_CUBE], - '^.*$' => ['color' => 'green', 'icon' => FA::_CUBE], -]; - -foreach ($patterns AS $pattern => $options) { - foreach ($controllers AS $c => $item) { - $controllers[$c]['label'] = $item['name']; - if (preg_match("/$pattern/", $item['name']) && $item['name'] !== 'default') { - $favourites[$c] = $item; - $favourites[$c]['head'] = ucfirst(substr($item['name'],0,2)); - // ActiveRecord (model) counter - #$model = \Yii::createObject('app\\modules\\sakila\\models\\'.Inflector::id2camel($item['name'])); - #$favourites[$c]['head'] .= ' '.count($model->find()->all()).''; - $favourites[$c]['label'] = $item['name']; - $favourites[$c]['color'] = $options['color']; - $favourites[$c]['icon'] = isset($options['icon']) ? $options['icon'] : null; - unset($controllers[$c]); - } - } -} -$dataProvider = new \yii\data\ArrayDataProvider( - [ - 'allModels' => $favourites, - 'pagination' => [ - 'pageSize' => 100 - ] - ] -); +use insolita\wgadminlte\SmallBox; +use yii\data\ArrayDataProvider; +use yii\widgets\ListView; -$listView = \yii\widgets\ListView::widget( -[ +echo ListView::widget([ 'dataProvider' => $dataProvider, 'layout' => "{items}\n{pager}", + 'options' => ['class' => 'row'], + 'itemOptions' => ['class' => 'col-xs-col-xs-6 col-sm-4 col-lg-3'], 'itemView' => function ($data) { - return '
'.insolita\wgadminlte\SmallBox::widget( - [ - 'head' => $data['head'], - 'type' => $data['color'], - 'text' => $data['label'], - 'footer' => 'Manage', - 'footer_link' => $data['route'], - 'icon' => 'fa fa-' . $data['icon'] - ] - ); + return SmallBox::widget([ + 'head' => $data['head'], + 'type' => $data['color'], + 'text' => $data['label'], + 'footer' => generateString('Manage') ?>, + 'footer_link' => $data['route'], + 'icon' => 'fa fa-' . $data['icon'] + ]); }, -] -).'
'; -?> - -
- ' ?> -
- + 'emptyTextOptions' => ['class' => 'col-xs-12'] +]); diff --git a/src/generators/module/form.php b/src/generators/module/form.php index 5d1e55e5..a40e0cbc 100644 --- a/src/generators/module/form.php +++ b/src/generators/module/form.php @@ -8,5 +8,7 @@ field($generator, 'moduleClass'); echo $form->field($generator, 'moduleID'); + echo $form->field($generator, 'enableI18N')->checkbox(); + echo $form->field($generator, 'messageCategory'); ?>
diff --git a/src/generators/test/Generator.php b/src/generators/test/Generator.php index 0646d8e7..725ee6df 100644 --- a/src/generators/test/Generator.php +++ b/src/generators/test/Generator.php @@ -158,7 +158,7 @@ public function generate() ]; $files[] = new CodeFile( - Yii::getAlias('@app/..'.$this->codeceptionPath.str_replace('\\', '/', $this->ns)).'/'.$className.$this->baseClassSuffix.'UnitTest.php', + Yii::getAlias('@app/..'.$this->codeceptionPath.str_replace('\\', '/', $this->ns)).'/'.$this->baseClassPrefix.$className.$this->baseClassSuffix.'UnitTest.php', $this->render('unit.php', $params) ); } @@ -166,3 +166,4 @@ public function generate() return $files; } } + diff --git a/src/generators/test/form.php b/src/generators/test/form.php new file mode 100644 index 00000000..5e8aa7dc --- /dev/null +++ b/src/generators/test/form.php @@ -0,0 +1,14 @@ + +
+ field($generator, 'codeceptionPath'); + echo $form->field($generator, 'modelNs'); + echo $form->field($generator, 'modelClass'); + echo $form->field($generator, 'tableName'); + ?> +
diff --git a/src/helpers/SaveForm.php b/src/helpers/SaveForm.php index f9240f21..535e02f9 100644 --- a/src/helpers/SaveForm.php +++ b/src/helpers/SaveForm.php @@ -2,6 +2,7 @@ namespace schmunk42\giiant\helpers; +use yii\helpers\Json; use yii\helpers\StringHelper; class SaveForm @@ -30,11 +31,13 @@ public static function getFormAttributesValues($generator, $attributes) } /** - * walk througt all modules gii directories and collect Giant crud generator saved forms. + * walk through all modules gii directories and collect Giant crud generator saved forms. * - * @return array + * @param $generatorName + * @return array|bool + * @throws \ReflectionException */ - public static function loadSavedForms($generatorName) + public static function loadSavedForms($generatorName, $giiInfoPath) { $suffix = str_replace(' ', '', $generatorName); @@ -45,54 +48,61 @@ public static function loadSavedForms($generatorName) /* * get all possible gii directories with out validation on existing */ - $giiDirs = []; - $giiDirs[] = \Yii::getAlias('@app/gii'); - if ($commonGiiDir = \Yii::getAlias('@common/gii', false)) { - $giiDirs[] = $commonGiiDir; + $forms = []; + self::buildJson(\Yii::getAlias('@app/' . $giiInfoPath), $forms, $suffix, 'app'); + if ($commonGiiDir = \Yii::getAlias('@common/' . $giiInfoPath, false)) { + self::buildJson($commonGiiDir, $forms, $suffix, 'common'); } foreach (\Yii::$app->modules as $moduleId => $module) { - /* * get module base path */ - if (method_exists($module, 'getBasePath')) { + if (!is_array($module) && method_exists($module, 'getBasePath')) { $basePath = $module->getBasePath(); } else { + if(!class_exists($module['class'])){ + \Yii::warning('Invalid class definition for module ' . $moduleId); + continue; + } $reflector = new \ReflectionClass($module['class']); $basePath = StringHelper::dirname($reflector->getFileName()); } - $basePath .= '/gii'; + $basePath .= '/' . $giiInfoPath; - $giiDirs[] = $basePath; + self::buildJson($basePath, $forms, $suffix, $moduleId); } + return self::$savedFormList = $forms; + } + + /** + * from all gii directories collect forms + * @param string $path + * @param string $moduleId + * @param array $forms + * @param string $suffix + */ + protected static function buildJson($path, &$forms, $suffix, $moduleId = NULL) + { /* - * from all gii directories collec forms + * search in module gii directory all forms json files + * with required suffix */ - $forms = []; - foreach ($giiDirs as $basePath) { - /* - * search in module gii directory all forms json files - * with required suffix - */ - if (!file_exists($basePath)) { - continue; - } + if (!file_exists($path)) { + return; + } - $files = scandir($basePath); - foreach ($files as $file) { - if (!preg_match('#'.$suffix.'\.json$#', $file)) { - continue; - } - $name = preg_replace('#'.$suffix.'\.json$#', '', $file); - $forms[$moduleId.$name] = [ - 'jsonData' => file_get_contents($basePath.'/'.$file), - 'label' => $moduleId.' - '.$name, - ]; + $files = scandir($path); + foreach ($files as $file) { + if (!preg_match('#' . $suffix . '\.json$#', $file)) { + continue; } + $name = preg_replace('#' . $suffix . '\.json$#', '', $file); + $forms[$moduleId . $name] = [ + 'jsonData' => file_get_contents($path . '/' . $file), + 'label' => $moduleId . ' - ' . $name, + ]; } - - return self::$savedFormList = $forms; } /** @@ -100,10 +110,10 @@ public static function loadSavedForms($generatorName) * * @return array */ - public static function getSavedFormsListbox($generatorName) + public static function getSavedFormsListbox($generatorName, $giiInfoPath) { $r = ['0' => ' - ']; - foreach (self::loadSavedForms($generatorName) as $k => $row) { + foreach (self::loadSavedForms($generatorName, $giiInfoPath) as $k => $row) { $r[$k] = $row['label']; } @@ -115,12 +125,12 @@ public static function getSavedFormsListbox($generatorName) * * @return string */ - public static function getSavedFormsJs($generatorName) + public static function getSavedFormsJs($generatorName, $giiInfoPath) { $js = []; - foreach (self::loadSavedForms($generatorName) as $k => $row) { - $js[] = $k.":'".$row['jsonData']."'"; + foreach (self::loadSavedForms($generatorName, $giiInfoPath) as $k => $row) { + $js[] = $k.":'".Json::encode(Json::decode($row['jsonData']))."'"; } return 'var savedForms = {'.str_replace('\\', '\\\\', implode(',', $js)).'};'; @@ -168,11 +178,9 @@ function fillForm(id){ var fieldId = "generator-" + filedName; if (jQuery("#" + fieldId).is("input") || jQuery("#" + fieldId).is("select")){ - jQuery("#" + fieldId).val(formData[filedName]["value"]); + jQuery("#" + fieldId).val(formData[filedName]["value"]).trigger("input"); continue; } - - } } '; diff --git a/tests/Dockerfile b/tests/Dockerfile index c50ae609..83e2aa0e 100644 --- a/tests/Dockerfile +++ b/tests/Dockerfile @@ -1,5 +1,3 @@ -FROM phundament/app:4.3.0-rc1 +FROM dmstr/yii2-app:0.5.0 -COPY _build/composer.* /app/ - -RUN composer install +ENV PATH=${PATH}:/repo/tests/_app/vendor/bin diff --git a/tests/Makefile b/tests/Makefile index da91f419..ed964919 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -1,31 +1,30 @@ .PHONY: open bash test -PHP ?= phpfpm -WEB ?= nginx - -DOCKER_HOST_IP ?= $(shell echo $(DOCKER_HOST) | sed 's/tcp:\/\///' | sed 's/:[0-9.]*//') DOCKER_COMPOSE ?= docker-compose -export CI_APP_VOLUME ?= .. - -export DOCKER_HOST_IP = 127.0.0.1 +PHP ?= phpfpm +WEB ?= phpfpm UNAME_S := $(shell uname -s) ifeq ($(UNAME_S), Darwin) OPEN_CMD ?= open - DOCKER_HOST_IP ?= $(shell echo $(DOCKER_HOST) | sed 's/tcp:\/\///' | sed 's/:[0-9.]*//') else OPEN_CMD ?= xdg-open +endif + +ifdef ($(DOCKER_HOST)) + DOCKER_HOST_IP ?= $(shell echo $(DOCKER_HOST) | sed 's/tcp:\/\///' | sed 's/:[0-9.]*//') +else DOCKER_HOST_IP ?= 127.0.0.1 endif default: help -all: up setup +all: build up setup open: ##@docker open application web service in browser - open http://$(DOCKER_HOST_IP):`$(DOCKER_COMPOSE) port $(WEB) 80 | sed 's/[0-9.]*://'` + $(OPEN_CMD) http://$(DOCKER_HOST_IP):`$(DOCKER_COMPOSE) port $(WEB) 80 | sed 's/[0-9.]*://'` open-db: ##@docker open application web service in browser $(OPEN_CMD) mysql://admin:secretadmin@$(DOCKER_HOST_IP):$(shell $(DOCKER_COMPOSE) port mariadb 3306 | sed 's/[0-9.]*://') @@ -33,16 +32,18 @@ open-db: ##@docker open application web service in browser open-vnc: ##@test open application database service in browser $(OPEN_CMD) vnc://x:secret@$(DOCKER_HOST_IP):$(shell $(DOCKER_COMPOSE) port seleniumfirefox 5900 | sed 's/[0-9.]*://') -bash: ##@docker open application shell in container - $(DOCKER_COMPOSE) run --rm $(PHP) bash +build: ##@docker build images + $(DOCKER_COMPOSE) build -up: ##@docker start application stack - $(DOCKER_COMPOSE) up -d +setup: ##@docker prepare test-application stack + $(DOCKER_COMPOSE) run $(PHP) bash -c "cd _app && composer install" -setup: ##@docker setup application - $(DOCKER_COMPOSE) run --rm $(PHP) setup.sh +up: ##@docker start test-application stack + $(DOCKER_COMPOSE) up -d + $(DOCKER_COMPOSE) exec -T mariadb /init-example-databases.sh test: ##@docker run tests + $(DOCKER_COMPOSE) run $(PHP) bash -c "while ! curl mariadb:3306; do ((c++)) && ((c==30)) && break; sleep 2; done" $(DOCKER_COMPOSE) run --rm -e YII_ENV=dev -e GIIANT_TEST_DB=sakila $(PHP) bash -c "codecept run --steps --html=_report.html -g mandatory -g sakila -g onlyCrud cli,unit,acceptance" bash: ##@docker open application shell in container @@ -79,4 +80,4 @@ help: ##@base Show this help # # General targets # - @perl -e '$(HELP_FUN)' $(MAKEFILE_LIST) \ No newline at end of file + @perl -e '$(HELP_FUN)' $(MAKEFILE_LIST) diff --git a/tests/_app/composer.json b/tests/_app/composer.json new file mode 100644 index 00000000..28626f2c --- /dev/null +++ b/tests/_app/composer.json @@ -0,0 +1,34 @@ +{ + "repositories": [ + { + "type": "vcs", + "url": "file:///repo" + } + ], + "require": { + "wikimedia/composer-merge-plugin": "~1.4", + "schmunk42/yii2-giiant": "dev-feature/updated-headlines" + }, + "extra": { + "merge-plugin": { + "require": [ + "/app/composer.json", + "/repo/composer.json" + ] + } + }, + "config": { + "fxp-asset": { + "installer-paths": { + "npm-asset-library": "vendor/npm", + "bower-asset-library": "vendor/bower" + }, + "vcs-driver-options": { + "github-no-api": true + }, + "git-skip-update": "2 days", + "pattern-skip-version": "(-build|-patch)", + "optimize-with-installed-packages": false + } + } +} diff --git a/tests/_app/composer.lock b/tests/_app/composer.lock new file mode 100644 index 00000000..1b459a7f --- /dev/null +++ b/tests/_app/composer.lock @@ -0,0 +1,5433 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "content-hash": "d7e203867538dfe98bded8d9d2262461", + "packages": [ + { + "name": "bower-asset/bootstrap", + "version": "v3.4.1", + "source": { + "type": "git", + "url": "https://github.com/twbs/bootstrap.git", + "reference": "68b0d231a13201eb14acd3dc84e51543d16e5f7e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twbs/bootstrap/zipball/68b0d231a13201eb14acd3dc84e51543d16e5f7e", + "reference": "68b0d231a13201eb14acd3dc84e51543d16e5f7e", + "shasum": "" + }, + "require": { + "bower-asset/jquery": ">=1.9.1,<4.0" + }, + "type": "bower-asset-library", + "extra": { + "bower-asset-main": [ + "less/bootstrap.less", + "dist/js/bootstrap.js" + ], + "bower-asset-ignore": [ + "/.*", + "_config.yml", + "CNAME", + "composer.json", + "CONTRIBUTING.md", + "docs", + "js/tests", + "test-infra" + ] + }, + "license": [ + "MIT" + ], + "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", + "keywords": [ + "css", + "framework", + "front-end", + "js", + "less", + "mobile-first", + "responsive", + "web" + ], + "time": "2019-02-13T14:23:41+00:00" + }, + { + "name": "bower-asset/inputmask", + "version": "3.3.11", + "source": { + "type": "git", + "url": "https://github.com/RobinHerbots/Inputmask.git", + "reference": "5e670ad62f50c738388d4dcec78d2888505ad77b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/RobinHerbots/Inputmask/zipball/5e670ad62f50c738388d4dcec78d2888505ad77b", + "reference": "5e670ad62f50c738388d4dcec78d2888505ad77b", + "shasum": "" + }, + "require": { + "bower-asset/jquery": ">=1.7" + }, + "type": "bower-asset-library", + "extra": { + "bower-asset-main": [ + "./dist/inputmask/inputmask.js", + "./dist/inputmask/inputmask.extensions.js", + "./dist/inputmask/inputmask.date.extensions.js", + "./dist/inputmask/inputmask.numeric.extensions.js", + "./dist/inputmask/inputmask.phone.extensions.js", + "./dist/inputmask/jquery.inputmask.js", + "./dist/inputmask/global/document.js", + "./dist/inputmask/global/window.js", + "./dist/inputmask/phone-codes/phone.js", + "./dist/inputmask/phone-codes/phone-be.js", + "./dist/inputmask/phone-codes/phone-nl.js", + "./dist/inputmask/phone-codes/phone-ru.js", + "./dist/inputmask/phone-codes/phone-uk.js", + "./dist/inputmask/dependencyLibs/inputmask.dependencyLib.jqlite.js", + "./dist/inputmask/dependencyLibs/inputmask.dependencyLib.jquery.js", + "./dist/inputmask/dependencyLibs/inputmask.dependencyLib.js", + "./dist/inputmask/bindings/inputmask.binding.js" + ], + "bower-asset-ignore": [ + "**/*", + "!dist/*", + "!dist/inputmask/*", + "!dist/min/*", + "!dist/min/inputmask/*" + ] + }, + "license": [ + "http://opensource.org/licenses/mit-license.php" + ], + "description": "Inputmask is a javascript library which creates an input mask. Inputmask can run against vanilla javascript, jQuery and jqlite.", + "keywords": [ + "form", + "input", + "inputmask", + "jquery", + "mask", + "plugins" + ], + "time": "2017-11-21T11:46:23+00:00" + }, + { + "name": "bower-asset/jquery", + "version": "3.5.1", + "source": { + "type": "git", + "url": "https://github.com/jquery/jquery-dist.git", + "reference": "4c0e4becb8263bb5b3e6dadc448d8e7305ef8215" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jquery/jquery-dist/zipball/4c0e4becb8263bb5b3e6dadc448d8e7305ef8215", + "reference": "4c0e4becb8263bb5b3e6dadc448d8e7305ef8215", + "shasum": "" + }, + "type": "bower-asset-library", + "extra": { + "bower-asset-main": "dist/jquery.js", + "bower-asset-ignore": [ + "package.json" + ] + }, + "license": [ + "MIT" + ], + "keywords": [ + "browser", + "javascript", + "jquery", + "library" + ], + "time": "2020-05-04T22:50:46+00:00" + }, + { + "name": "bower-asset/punycode", + "version": "v1.3.2", + "source": { + "type": "git", + "url": "https://github.com/bestiejs/punycode.js.git", + "reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bestiejs/punycode.js/zipball/38c8d3131a82567bfef18da09f7f4db68c84f8a3", + "reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3", + "shasum": "" + }, + "type": "bower-asset-library", + "extra": { + "bower-asset-main": "punycode.js", + "bower-asset-ignore": [ + "coverage", + "tests", + ".*", + "component.json", + "Gruntfile.js", + "node_modules", + "package.json" + ] + }, + "time": "2014-10-22T12:02:42+00:00" + }, + { + "name": "bower-asset/yii2-pjax", + "version": "2.0.7.1", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/jquery-pjax.git", + "reference": "aef7b953107264f00234902a3880eb50dafc48be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/jquery-pjax/zipball/aef7b953107264f00234902a3880eb50dafc48be", + "reference": "aef7b953107264f00234902a3880eb50dafc48be", + "shasum": "" + }, + "require": { + "bower-asset/jquery": ">=1.8" + }, + "type": "bower-asset-library", + "extra": { + "bower-asset-main": "./jquery.pjax.js", + "bower-asset-ignore": [ + ".travis.yml", + "Gemfile", + "Gemfile.lock", + "CONTRIBUTING.md", + "vendor/", + "script/", + "test/" + ] + }, + "license": [ + "MIT" + ], + "time": "2017-10-12T10:11:14+00:00" + }, + { + "name": "cebe/markdown", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/cebe/markdown.git", + "reference": "9bac5e971dd391e2802dca5400bbeacbaea9eb86" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cebe/markdown/zipball/9bac5e971dd391e2802dca5400bbeacbaea9eb86", + "reference": "9bac5e971dd391e2802dca5400bbeacbaea9eb86", + "shasum": "" + }, + "require": { + "lib-pcre": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "cebe/indent": "*", + "facebook/xhprof": "*@dev", + "phpunit/phpunit": "4.1.*" + }, + "bin": [ + "bin/markdown" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "cebe\\markdown\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Carsten Brandt", + "email": "mail@cebe.cc", + "homepage": "http://cebe.cc/", + "role": "Creator" + } + ], + "description": "A super fast, highly extensible markdown parser for PHP", + "homepage": "https://github.com/cebe/markdown#readme", + "keywords": [ + "extensible", + "fast", + "gfm", + "markdown", + "markdown-extra" + ], + "time": "2018-03-26T11:24:36+00:00" + }, + { + "name": "cmrcx/phptidy", + "version": "v3.2", + "source": { + "type": "git", + "url": "https://github.com/cmrcx/phptidy.git", + "reference": "76eb69a3b3682b30dc75975f4bf64999c598eec3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cmrcx/phptidy/zipball/76eb69a3b3682b30dc75975f4bf64999c598eec3", + "reference": "76eb69a3b3682b30dc75975f4bf64999c598eec3", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.0" + }, + "suggest": { + "ext-mbstring": "*" + }, + "bin": [ + "phptidy.php" + ], + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Magnus Rosenbaum", + "email": "phptidy@cmr.cx", + "homepage": "http://cmr.cx", + "role": "Developer" + } + ], + "description": "PHP code formatter", + "homepage": "https://github.com/cmrcx/phptidy", + "time": "2019-08-10T15:20:30+00:00" + }, + { + "name": "codemix/yii2-streamlog", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/codemix/yii2-streamlog.git", + "reference": "1ed104f4bc4e961d1d08fb92d6854f01b1bd0b80" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/codemix/yii2-streamlog/zipball/1ed104f4bc4e961d1d08fb92d6854f01b1bd0b80", + "reference": "1ed104f4bc4e961d1d08fb92d6854f01b1bd0b80", + "shasum": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "codemix\\streamlog\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Härtl", + "email": "haertl.mike@gmail.com" + } + ], + "description": "A Yii 2 log target for streams in URL format", + "keywords": [ + "log", + "stdout", + "stream", + "yii2" + ], + "time": "2020-03-26T13:23:28+00:00" + }, + { + "name": "composer/semver", + "version": "1.7.1", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "38276325bd896f90dfcfe30029aa5db40df387a7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/38276325bd896f90dfcfe30029aa5db40df387a7", + "reference": "38276325bd896f90dfcfe30029aa5db40df387a7", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.5 || ^5.0.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "time": "2020-09-27T13:13:07+00:00" + }, + { + "name": "composer/xdebug-handler", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "ebd27a9866ae8254e873866f795491f02418c5a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ebd27a9866ae8254e873866f795491f02418c5a5", + "reference": "ebd27a9866ae8254e873866f795491f02418c5a5", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0", + "psr/log": "^1.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without Xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "time": "2020-08-19T10:27:58+00:00" + }, + { + "name": "dmstr/yii2-bootstrap", + "version": "0.2.2", + "source": { + "type": "git", + "url": "https://github.com/dmstr/yii2-bootstrap.git", + "reference": "19520972941fede682f82f9ac3f98ed69bc2d8fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dmstr/yii2-bootstrap/zipball/19520972941fede682f82f9ac3f98ed69bc2d8fb", + "reference": "19520972941fede682f82f9ac3f98ed69bc2d8fb", + "shasum": "" + }, + "require": { + "yiisoft/yii2-bootstrap": "^2.0.6" + }, + "type": "yii2-extension", + "autoload": { + "psr-4": { + "dmstr\\bootstrap\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Christopher Stebe", + "email": "c.stebe@herzogkommunikation.de" + } + ], + "description": "yii2 bootstrap components and extensions from diemeisterei GmbH", + "keywords": [ + "bootstrap", + "extension", + "yii2" + ], + "time": "2019-04-05T12:37:30+00:00" + }, + { + "name": "dmstr/yii2-db", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/dmstr/yii2-db.git", + "reference": "21d2e3354cffeb471ff4d4b7fd6f7aa6d73dbd34" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dmstr/yii2-db/zipball/21d2e3354cffeb471ff4d4b7fd6f7aa6d73dbd34", + "reference": "21d2e3354cffeb471ff4d4b7fd6f7aa6d73dbd34", + "shasum": "" + }, + "require": { + "mikehaertl/php-shellcommand": "1.*", + "schmunk42/retry": "*", + "yiisoft/yii2": "2.*" + }, + "type": "yii2-extension", + "autoload": { + "psr-4": { + "dmstr\\db\\": "db/", + "dmstr\\db\\tests\\": "db/tests/", + "dmstr\\console\\": "console/", + "dmstr\\widgets\\": "widgets/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tobias Munk", + "email": "tobias@diemeisterei.de" + } + ], + "description": "Database extensions", + "keywords": [ + "database", + "db", + "extension", + "yii2" + ], + "time": "2020-03-03T16:30:45+00:00" + }, + { + "name": "dmstr/yii2-helpers", + "version": "0.4.19", + "source": { + "type": "git", + "url": "https://github.com/dmstr/yii2-helpers.git", + "reference": "2a1641227f9efd7bcda5dc8ff6bdb5bb6568ace8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dmstr/yii2-helpers/zipball/2a1641227f9efd7bcda5dc8ff6bdb5bb6568ace8", + "reference": "2a1641227f9efd7bcda5dc8ff6bdb5bb6568ace8", + "shasum": "" + }, + "require": { + "pheme/yii2-settings": "^0.5.0 || ^0.7.0", + "yiisoft/yii2": "~2.0.0" + }, + "type": "yii2-extension", + "autoload": { + "psr-4": { + "dmstr\\helpers\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sergej Kunz", + "email": "s.kunz@herzogkommunikation.de" + }, + { + "name": "Tobias Munk", + "email": "t.munk@herzogkommunikation.de" + } + ], + "description": "Yii2 Helpers", + "keywords": [ + "extension", + "yii2" + ], + "time": "2020-06-24T12:35:07+00:00" + }, + { + "name": "doctrine/annotations", + "version": "1.10.4", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "bfe91e31984e2ba76df1c1339681770401ec262f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/bfe91e31984e2ba76df1c1339681770401ec262f", + "reference": "bfe91e31984e2ba76df1c1339681770401ec262f", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "ext-tokenizer": "*", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/cache": "1.*", + "phpstan/phpstan": "^0.12.20", + "phpunit/phpunit": "^7.5 || ^9.1.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "time": "2020-08-10T19:35:50+00:00" + }, + { + "name": "doctrine/lexer", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/1febd6c3ef84253d7c815bed85fc622ad207a9f8", + "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "^4.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "time": "2019-06-08T11:03:04+00:00" + }, + { + "name": "ezyang/htmlpurifier", + "version": "v4.13.0", + "source": { + "type": "git", + "url": "https://github.com/ezyang/htmlpurifier.git", + "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/08e27c97e4c6ed02f37c5b2b20488046c8d90d75", + "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75", + "shasum": "" + }, + "require": { + "php": ">=5.2" + }, + "require-dev": { + "simpletest/simpletest": "dev-master#72de02a7b80c6bb8864ef9bf66d41d2f58f826bd" + }, + "type": "library", + "autoload": { + "psr-0": { + "HTMLPurifier": "library/" + }, + "files": [ + "library/HTMLPurifier.composer.php" + ], + "exclude-from-classmap": [ + "/library/HTMLPurifier/Language/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Edward Z. Yang", + "email": "admin@htmlpurifier.org", + "homepage": "http://ezyang.com" + } + ], + "description": "Standards compliant HTML filter written in PHP", + "homepage": "http://htmlpurifier.org/", + "keywords": [ + "html" + ], + "time": "2020-06-29T00:56:53+00:00" + }, + { + "name": "friendsofphp/php-cs-fixer", + "version": "v2.16.4", + "source": { + "type": "git", + "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", + "reference": "1023c3458137ab052f6ff1e09621a721bfdeca13" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/1023c3458137ab052f6ff1e09621a721bfdeca13", + "reference": "1023c3458137ab052f6ff1e09621a721bfdeca13", + "shasum": "" + }, + "require": { + "composer/semver": "^1.4", + "composer/xdebug-handler": "^1.2", + "doctrine/annotations": "^1.2", + "ext-json": "*", + "ext-tokenizer": "*", + "php": "^5.6 || ^7.0", + "php-cs-fixer/diff": "^1.3", + "symfony/console": "^3.4.17 || ^4.1.6 || ^5.0", + "symfony/event-dispatcher": "^3.0 || ^4.0 || ^5.0", + "symfony/filesystem": "^3.0 || ^4.0 || ^5.0", + "symfony/finder": "^3.0 || ^4.0 || ^5.0", + "symfony/options-resolver": "^3.0 || ^4.0 || ^5.0", + "symfony/polyfill-php70": "^1.0", + "symfony/polyfill-php72": "^1.4", + "symfony/process": "^3.0 || ^4.0 || ^5.0", + "symfony/stopwatch": "^3.0 || ^4.0 || ^5.0" + }, + "require-dev": { + "johnkary/phpunit-speedtrap": "^1.1 || ^2.0 || ^3.0", + "justinrainbow/json-schema": "^5.0", + "keradus/cli-executor": "^1.2", + "mikey179/vfsstream": "^1.6", + "php-coveralls/php-coveralls": "^2.1", + "php-cs-fixer/accessible-object": "^1.0", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.1", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.1", + "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.1", + "phpunitgoodpractices/traits": "^1.8", + "symfony/phpunit-bridge": "^5.1", + "symfony/yaml": "^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "ext-dom": "For handling output formats in XML", + "ext-mbstring": "For handling non-UTF8 characters.", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "For IsIdenticalString constraint.", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "For XmlMatchesXsd constraint.", + "symfony/polyfill-mbstring": "When enabling `ext-mbstring` is not possible." + }, + "bin": [ + "php-cs-fixer" + ], + "type": "application", + "autoload": { + "psr-4": { + "PhpCsFixer\\": "src/" + }, + "classmap": [ + "tests/Test/AbstractFixerTestCase.php", + "tests/Test/AbstractIntegrationCaseFactory.php", + "tests/Test/AbstractIntegrationTestCase.php", + "tests/Test/Assert/AssertTokensTrait.php", + "tests/Test/IntegrationCase.php", + "tests/Test/IntegrationCaseFactory.php", + "tests/Test/IntegrationCaseFactoryInterface.php", + "tests/Test/InternalIntegrationCaseFactory.php", + "tests/Test/IsIdenticalConstraint.php", + "tests/TestCase.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Dariusz Rumiński", + "email": "dariusz.ruminski@gmail.com" + } + ], + "description": "A tool to automatically fix PHP code style", + "time": "2020-06-27T23:57:46+00:00" + }, + { + "name": "mikehaertl/php-shellcommand", + "version": "1.6.2", + "source": { + "type": "git", + "url": "https://github.com/mikehaertl/php-shellcommand.git", + "reference": "06d6220c77c4632b639f4855f76026c59bceb8aa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mikehaertl/php-shellcommand/zipball/06d6220c77c4632b639f4855f76026c59bceb8aa", + "reference": "06d6220c77c4632b639f4855f76026c59bceb8aa", + "shasum": "" + }, + "require": { + "php": ">= 5.4.0" + }, + "require-dev": { + "phpunit/phpunit": ">4.0 <8" + }, + "type": "library", + "autoload": { + "psr-4": { + "mikehaertl\\shellcommand\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Härtl", + "email": "haertl.mike@gmail.com" + } + ], + "description": "An object oriented interface to shell commands", + "keywords": [ + "shell" + ], + "time": "2020-08-30T09:56:40+00:00" + }, + { + "name": "opis/closure", + "version": "3.6.0", + "source": { + "type": "git", + "url": "https://github.com/opis/closure.git", + "reference": "c547f8262a5fa9ff507bd06cc394067b83a75085" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/opis/closure/zipball/c547f8262a5fa9ff507bd06cc394067b83a75085", + "reference": "c547f8262a5fa9ff507bd06cc394067b83a75085", + "shasum": "" + }, + "require": { + "php": "^5.4 || ^7.0 || ^8.0" + }, + "require-dev": { + "jeremeamia/superclosure": "^2.0", + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.6.x-dev" + } + }, + "autoload": { + "psr-4": { + "Opis\\Closure\\": "src/" + }, + "files": [ + "functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marius Sarca", + "email": "marius.sarca@gmail.com" + }, + { + "name": "Sorin Sarca", + "email": "sarca_sorin@hotmail.com" + } + ], + "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", + "homepage": "https://opis.io/closure", + "keywords": [ + "anonymous functions", + "closure", + "function", + "serializable", + "serialization", + "serialize" + ], + "time": "2020-10-11T21:42:15+00:00" + }, + { + "name": "paragonie/random_compat", + "version": "v9.99.100", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", + "shasum": "" + }, + "require": { + "php": ">= 7" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "polyfill", + "pseudorandom", + "random" + ], + "time": "2020-10-15T08:29:30+00:00" + }, + { + "name": "pheme/yii2-settings", + "version": "0.7", + "source": { + "type": "git", + "url": "https://github.com/phemellc/yii2-settings.git", + "reference": "5e15e82442a62007727466439735602555dde8df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phemellc/yii2-settings/zipball/5e15e82442a62007727466439735602555dde8df", + "reference": "5e15e82442a62007727466439735602555dde8df", + "shasum": "" + }, + "require": { + "pheme/yii2-toggle-column": "*", + "yiisoft/yii2": ">=2.0.6" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "yii2-extension", + "autoload": { + "psr-4": { + "pheme\\settings\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Aris Karageorgos", + "email": "aris@phe.me" + } + ], + "description": "Yii2 Database settings", + "keywords": [ + "Settings", + "config", + "yii2" + ], + "time": "2018-10-30T22:18:20+00:00" + }, + { + "name": "pheme/yii2-toggle-column", + "version": "0.8", + "source": { + "type": "git", + "url": "https://github.com/phemellc/yii2-toggle-column.git", + "reference": "5b760fcf15e02b3bcd1ab373b91bb05fbac2b729" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phemellc/yii2-toggle-column/zipball/5b760fcf15e02b3bcd1ab373b91bb05fbac2b729", + "reference": "5b760fcf15e02b3bcd1ab373b91bb05fbac2b729", + "shasum": "" + }, + "require": { + "yiisoft/yii2": ">=2.0.7" + }, + "type": "yii2-extension", + "autoload": { + "psr-4": { + "\\pheme\\grid\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aris Karageorgos", + "email": "aris@phe.me" + } + ], + "description": "Provides a toggle data column and action", + "keywords": [ + "column", + "extension", + "toggle", + "yii2" + ], + "time": "2020-07-09T16:07:24+00:00" + }, + { + "name": "php-cs-fixer/diff", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/PHP-CS-Fixer/diff.git", + "reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/dbd31aeb251639ac0b9e7e29405c1441907f5759", + "reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0", + "symfony/process": "^3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "SpacePossum" + } + ], + "description": "sebastian/diff v2 backport support for PHP5.6", + "homepage": "https://github.com/PHP-CS-Fixer", + "keywords": [ + "diff" + ], + "time": "2020-10-14T08:39:05+00:00" + }, + { + "name": "phpspec/php-diff", + "version": "v1.1.3", + "source": { + "type": "git", + "url": "https://github.com/phpspec/php-diff.git", + "reference": "fc1156187f9f6c8395886fe85ed88a0a245d72e9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/php-diff/zipball/fc1156187f9f6c8395886fe85ed88a0a245d72e9", + "reference": "fc1156187f9f6c8395886fe85ed88a0a245d72e9", + "shasum": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Diff": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Chris Boulton", + "homepage": "http://github.com/chrisboulton" + } + ], + "description": "A comprehensive library for generating differences between two hashable objects (strings or arrays).", + "time": "2020-09-18T13:47:07+00:00" + }, + { + "name": "psr/container", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "time": "2017-02-14T16:28:37+00:00" + }, + { + "name": "psr/log", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2020-03-23T09:12:05+00:00" + }, + { + "name": "schmunk42/retry", + "version": "0.0.1", + "source": { + "type": "git", + "url": "https://github.com/schmunk42/retry.git", + "reference": "c34c68c9e2a6e0f1bbab44c1dfceb73ba2a270a3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmunk42/retry/zipball/c34c68c9e2a6e0f1bbab44c1dfceb73ba2a270a3", + "reference": "c34c68c9e2a6e0f1bbab44c1dfceb73ba2a270a3", + "shasum": "" + }, + "require": { + "php": ">=5.4" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "files": [ + "src/retry.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + } + ], + "description": "A tiny library for retrying failing operations.", + "keywords": [ + "failure" + ], + "time": "2014-09-20T11:10:31+00:00" + }, + { + "name": "schmunk42/yii2-giiant", + "version": "dev-feature/updated-headlines", + "source": { + "type": "git", + "url": "/repo", + "reference": "b1fa9e5b03ad9fc5f84249e87329b6ae5bd410b3" + }, + "require": { + "cmrcx/phptidy": "^3.1", + "dmstr/yii2-bootstrap": "^0.1.2 || ^0.2.1", + "dmstr/yii2-db": "*", + "dmstr/yii2-helpers": "*", + "friendsofphp/php-cs-fixer": "1.* || 2.*", + "yiisoft/yii2": "~2.0.13", + "yiisoft/yii2-gii": "~2.2.0" + }, + "require-dev": { + "codeception/codeception": "^2.2", + "codeception/specify": "^0.4", + "dmstr/yii2-web": "^0.4.2", + "insolita/yii2-adminlte-widgets": "1.1.*", + "rmrevin/yii2-fontawesome": "2.*" + }, + "type": "yii2-extension", + "extra": { + "bootstrap": "schmunk42\\giiant\\Bootstrap", + "asset-installer-paths": { + "npm-asset-library": "vendor/npm", + "bower-asset-library": "vendor/bower" + } + }, + "autoload": { + "psr-4": { + "schmunk42\\giiant\\": "src" + } + }, + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tobias Munk", + "email": "schmunk@usrbin.de", + "homepage": "http://www.usrbin.de" + } + ], + "description": "Gii CRUD generator for Yii 2 Framework", + "homepage": "https://github.com/schmunk42/yii2-giiant", + "keywords": [ + "crud", + "gii", + "yii2" + ], + "time": "2020-10-15T10:54:29+00:00" + }, + { + "name": "symfony/console", + "version": "v4.4.15", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/90933b39c7b312fc3ceaa1ddeac7eb48cb953124", + "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1|^2" + }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/event-dispatcher": "<4.3|>=5", + "symfony/lock": "<4.4", + "symfony/process": "<3.3" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/event-dispatcher": "^4.3", + "symfony/lock": "^4.4|^5.0", + "symfony/process": "^3.4|^4.0|^5.0", + "symfony/var-dumper": "^4.3|^5.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2020-09-15T07:58:55+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v4.4.15", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e17bb5e0663dc725f7cdcafc932132735b4725cd", + "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/event-dispatcher-contracts": "^1.1" + }, + "conflict": { + "symfony/dependency-injection": "<3.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "1.1" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/error-handler": "~3.4|~4.4", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^3.4|^4.0|^5.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "time": "2020-09-18T14:07:46+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v1.1.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7", + "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7", + "shasum": "" + }, + "require": { + "php": ">=7.1.3" + }, + "suggest": { + "psr/event-dispatcher": "", + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2020-07-06T13:19:58+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v4.4.15", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "ebc51494739d3b081ea543ed7c462fa73a4f74db" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/ebc51494739d3b081ea543ed7c462fa73a4f74db", + "reference": "ebc51494739d3b081ea543ed7c462fa73a4f74db", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-ctype": "~1.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "time": "2020-09-27T13:54:16+00:00" + }, + { + "name": "symfony/finder", + "version": "v4.4.15", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "60d08560f9aa72997c44077c40d47aa28a963230" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/60d08560f9aa72997c44077c40d47aa28a963230", + "reference": "60d08560f9aa72997c44077c40d47aa28a963230", + "shasum": "" + }, + "require": { + "php": ">=7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "time": "2020-10-02T07:34:48+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v4.4.15", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "02b120a79ff06b779819f1594a300226bfc75105" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/02b120a79ff06b779819f1594a300226bfc75105", + "reference": "02b120a79ff06b779819f1594a300226bfc75105", + "shasum": "" + }, + "require": { + "php": ">=7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony OptionsResolver Component", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "time": "2020-09-24T16:40:22+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "1c302646f6efc070cd46856e600e5e0684d6b454" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454", + "reference": "1c302646f6efc070cd46856e600e5e0684d6b454", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "time": "2020-07-14T12:35:20+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a", + "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2020-07-14T12:35:20+00:00" + }, + { + "name": "symfony/polyfill-php70", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php70.git", + "reference": "0dd93f2c578bdc9c72697eaa5f1dd25644e618d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/0dd93f2c578bdc9c72697eaa5f1dd25644e618d3", + "reference": "0dd93f2c578bdc9c72697eaa5f1dd25644e618d3", + "shasum": "" + }, + "require": { + "paragonie/random_compat": "~1.0|~2.0|~9.99", + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php70\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2020-07-14T12:35:20+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "639447d008615574653fb3bc60d1986d7172eaae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/639447d008615574653fb3bc60d1986d7172eaae", + "reference": "639447d008615574653fb3bc60d1986d7172eaae", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2020-07-14T12:35:20+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fffa1a52a023e782cdcc221d781fe1ec8f87fcca", + "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2020-07-14T12:35:20+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/d87d5766cbf48d72388a9f6b85f280c8ad51f981", + "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981", + "shasum": "" + }, + "require": { + "php": ">=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2020-07-14T12:35:20+00:00" + }, + { + "name": "symfony/process", + "version": "v4.4.15", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "9b887acc522935f77555ae8813495958c7771ba7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/9b887acc522935f77555ae8813495958c7771ba7", + "reference": "9b887acc522935f77555ae8813495958c7771ba7", + "shasum": "" + }, + "require": { + "php": ">=7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Process Component", + "homepage": "https://symfony.com", + "time": "2020-09-02T16:08:58+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v1.1.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "b776d18b303a39f56c63747bcb977ad4b27aca26" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/b776d18b303a39f56c63747bcb977ad4b27aca26", + "reference": "b776d18b303a39f56c63747bcb977ad4b27aca26", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "psr/container": "^1.0" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2020-07-06T13:19:58+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v4.4.15", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/6f89e19772cf61b3c65bab329fe0e318259fbd91", + "reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/service-contracts": "^1.0|^2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Stopwatch Component", + "homepage": "https://symfony.com", + "time": "2020-09-02T16:08:58+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v2.6.6", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "e1d57f62db3db00d9139078cbedf262280701479" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/e1d57f62db3db00d9139078cbedf262280701479", + "reference": "e1d57f62db3db00d9139078cbedf262280701479", + "shasum": "" + }, + "require": { + "php": "^5.3.9 || ^7.0 || ^8.0", + "symfony/polyfill-ctype": "^1.17" + }, + "require-dev": { + "ext-filter": "*", + "ext-pcre": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7.27" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator.", + "ext-pcre": "Required to use most of the library." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "homepage": "https://gjcampbell.co.uk/" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://vancelucas.com/" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "time": "2020-07-14T17:54:18+00:00" + }, + { + "name": "wikimedia/composer-merge-plugin", + "version": "v1.4.1", + "source": { + "type": "git", + "url": "https://github.com/wikimedia/composer-merge-plugin.git", + "reference": "81c6ac72a24a67383419c7eb9aa2b3437f2ab100" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/wikimedia/composer-merge-plugin/zipball/81c6ac72a24a67383419c7eb9aa2b3437f2ab100", + "reference": "81c6ac72a24a67383419c7eb9aa2b3437f2ab100", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0", + "php": ">=5.3.2" + }, + "require-dev": { + "composer/composer": "~1.0.0", + "jakub-onderka/php-parallel-lint": "~0.8", + "phpunit/phpunit": "~4.8|~5.0", + "squizlabs/php_codesniffer": "~2.1.0" + }, + "type": "composer-plugin", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + }, + "class": "Wikimedia\\Composer\\MergePlugin" + }, + "autoload": { + "psr-4": { + "Wikimedia\\Composer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bryan Davis", + "email": "bd808@wikimedia.org" + } + ], + "description": "Composer plugin to merge multiple composer.json files", + "time": "2017-04-25T02:31:25+00:00" + }, + { + "name": "yiisoft/yii2", + "version": "2.0.38", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii2-framework.git", + "reference": "fd01e747cc66a049ec105048f0ab8dfbdf60bf4b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii2-framework/zipball/fd01e747cc66a049ec105048f0ab8dfbdf60bf4b", + "reference": "fd01e747cc66a049ec105048f0ab8dfbdf60bf4b", + "shasum": "" + }, + "require": { + "bower-asset/inputmask": "~3.2.2 | ~3.3.5", + "bower-asset/jquery": "3.5.*@stable | 3.4.*@stable | 3.3.*@stable | 3.2.*@stable | 3.1.*@stable | 2.2.*@stable | 2.1.*@stable | 1.11.*@stable | 1.12.*@stable", + "bower-asset/punycode": "1.3.*", + "bower-asset/yii2-pjax": "~2.0.1", + "cebe/markdown": "~1.0.0 | ~1.1.0 | ~1.2.0", + "ext-ctype": "*", + "ext-mbstring": "*", + "ezyang/htmlpurifier": "~4.6", + "lib-pcre": "*", + "php": ">=5.4.0", + "yiisoft/yii2-composer": "~2.0.4" + }, + "bin": [ + "yii" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "yii\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Qiang Xue", + "email": "qiang.xue@gmail.com", + "homepage": "http://www.yiiframework.com/", + "role": "Founder and project lead" + }, + { + "name": "Alexander Makarov", + "email": "sam@rmcreative.ru", + "homepage": "http://rmcreative.ru/", + "role": "Core framework development" + }, + { + "name": "Maurizio Domba", + "homepage": "http://mdomba.info/", + "role": "Core framework development" + }, + { + "name": "Carsten Brandt", + "email": "mail@cebe.cc", + "homepage": "http://cebe.cc/", + "role": "Core framework development" + }, + { + "name": "Timur Ruziev", + "email": "resurtm@gmail.com", + "homepage": "http://resurtm.com/", + "role": "Core framework development" + }, + { + "name": "Paul Klimov", + "email": "klimov.paul@gmail.com", + "role": "Core framework development" + }, + { + "name": "Dmitry Naumenko", + "email": "d.naumenko.a@gmail.com", + "role": "Core framework development" + }, + { + "name": "Boudewijn Vahrmeijer", + "email": "info@dynasource.eu", + "homepage": "http://dynasource.eu", + "role": "Core framework development" + } + ], + "description": "Yii PHP Framework Version 2", + "homepage": "http://www.yiiframework.com/", + "keywords": [ + "framework", + "yii2" + ], + "time": "2020-09-14T21:52:10+00:00" + }, + { + "name": "yiisoft/yii2-bootstrap", + "version": "2.0.10", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii2-bootstrap.git", + "reference": "073c9ab0a4eb71f2485d84c96a1967130300d8fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii2-bootstrap/zipball/073c9ab0a4eb71f2485d84c96a1967130300d8fc", + "reference": "073c9ab0a4eb71f2485d84c96a1967130300d8fc", + "shasum": "" + }, + "require": { + "bower-asset/bootstrap": "3.4.* | 3.3.* | 3.2.* | 3.1.*", + "yiisoft/yii2": "~2.0.6" + }, + "require-dev": { + "phpunit/phpunit": "<7" + }, + "type": "yii2-extension", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "yii\\bootstrap\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Paul Klimov", + "email": "klimov.paul@gmail.com" + }, + { + "name": "Alexander Makarov", + "email": "sam@rmcreative.ru", + "homepage": "http://rmcreative.ru/" + }, + { + "name": "Antonio Ramirez", + "email": "amigo.cobos@gmail.com" + }, + { + "name": "Qiang Xue", + "email": "qiang.xue@gmail.com", + "homepage": "http://www.yiiframework.com/" + } + ], + "description": "The Twitter Bootstrap extension for the Yii framework", + "keywords": [ + "bootstrap", + "yii2" + ], + "time": "2019-04-23T13:18:43+00:00" + }, + { + "name": "yiisoft/yii2-composer", + "version": "2.0.10", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii2-composer.git", + "reference": "94bb3f66e779e2774f8776d6e1bdeab402940510" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii2-composer/zipball/94bb3f66e779e2774f8776d6e1bdeab402940510", + "reference": "94bb3f66e779e2774f8776d6e1bdeab402940510", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0 | ^2.0" + }, + "require-dev": { + "composer/composer": "^1.0 | ^2.0@dev", + "phpunit/phpunit": "<7" + }, + "type": "composer-plugin", + "extra": { + "class": "yii\\composer\\Plugin", + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "yii\\composer\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Qiang Xue", + "email": "qiang.xue@gmail.com" + }, + { + "name": "Carsten Brandt", + "email": "mail@cebe.cc" + } + ], + "description": "The composer plugin for Yii extension installer", + "keywords": [ + "composer", + "extension installer", + "yii2" + ], + "time": "2020-06-24T00:04:01+00:00" + }, + { + "name": "yiisoft/yii2-debug", + "version": "2.1.13", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii2-debug.git", + "reference": "696712a2a3565b1a072ad3c9d298e262967e8282" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii2-debug/zipball/696712a2a3565b1a072ad3c9d298e262967e8282", + "reference": "696712a2a3565b1a072ad3c9d298e262967e8282", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "opis/closure": "^3.3", + "php": ">=5.4", + "yiisoft/yii2": "~2.0.13" + }, + "require-dev": { + "phpunit/phpunit": "<7", + "yiisoft/yii2-coding-standards": "~2.0", + "yiisoft/yii2-swiftmailer": "*" + }, + "type": "yii2-extension", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "yii\\debug\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Qiang Xue", + "email": "qiang.xue@gmail.com" + }, + { + "name": "Simon Karlen", + "email": "simi.albi@outlook.com" + } + ], + "description": "The debugger extension for the Yii framework", + "keywords": [ + "debug", + "debugger", + "yii2" + ], + "time": "2020-01-17T13:40:32+00:00" + }, + { + "name": "yiisoft/yii2-gii", + "version": "2.2.1", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii2-gii.git", + "reference": "f3bb400b578b0a0ee737d267ebaffdaad7b32dee" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii2-gii/zipball/f3bb400b578b0a0ee737d267ebaffdaad7b32dee", + "reference": "f3bb400b578b0a0ee737d267ebaffdaad7b32dee", + "shasum": "" + }, + "require": { + "phpspec/php-diff": "^1.1.0", + "yiisoft/yii2": "~2.0.14" + }, + "require-dev": { + "phpunit/phpunit": "<7", + "yiisoft/yii2-coding-standards": "~2.0" + }, + "type": "yii2-extension", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "yii\\gii\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Qiang Xue", + "email": "qiang.xue@gmail.com" + } + ], + "description": "The Gii extension for the Yii framework", + "keywords": [ + "code generator", + "gii", + "yii2" + ], + "time": "2020-05-02T11:59:43+00:00" + } + ], + "packages-dev": [ + { + "name": "behat/gherkin", + "version": "v4.6.2", + "source": { + "type": "git", + "url": "https://github.com/Behat/Gherkin.git", + "reference": "51ac4500c4dc30cbaaabcd2f25694299df666a31" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/51ac4500c4dc30cbaaabcd2f25694299df666a31", + "reference": "51ac4500c4dc30cbaaabcd2f25694299df666a31", + "shasum": "" + }, + "require": { + "php": ">=5.3.1" + }, + "require-dev": { + "phpunit/phpunit": "~4.5|~5", + "symfony/phpunit-bridge": "~2.7|~3|~4", + "symfony/yaml": "~2.3|~3|~4" + }, + "suggest": { + "symfony/yaml": "If you want to parse features, represented in YAML files" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-0": { + "Behat\\Gherkin": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + } + ], + "description": "Gherkin DSL parser for PHP 5.3", + "homepage": "http://behat.org/", + "keywords": [ + "BDD", + "Behat", + "Cucumber", + "DSL", + "gherkin", + "parser" + ], + "time": "2020-03-17T14:03:26+00:00" + }, + { + "name": "bower-asset/jquery-cookie", + "version": "v1.4.1", + "source": { + "type": "git", + "url": "https://github.com/carhartl/jquery-cookie.git", + "reference": "7f88a4e631aba8a8c688fd8999ce6b9bcfd50718" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/carhartl/jquery-cookie/zipball/7f88a4e631aba8a8c688fd8999ce6b9bcfd50718", + "reference": "7f88a4e631aba8a8c688fd8999ce6b9bcfd50718", + "shasum": "" + }, + "require": { + "bower-asset/jquery": ">=1.2" + }, + "type": "bower-asset-library", + "extra": { + "bower-asset-main": [ + "./jquery.cookie.js" + ], + "bower-asset-ignore": [ + "test", + ".*", + "*.json", + "*.md", + "*.txt", + "Gruntfile.js" + ] + }, + "time": "2014-04-27T20:07:15+00:00" + }, + { + "name": "codeception/codeception", + "version": "2.5.6", + "source": { + "type": "git", + "url": "https://github.com/Codeception/Codeception.git", + "reference": "b83a9338296e706fab2ceb49de8a352fbca3dc98" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/Codeception/zipball/b83a9338296e706fab2ceb49de8a352fbca3dc98", + "reference": "b83a9338296e706fab2ceb49de8a352fbca3dc98", + "shasum": "" + }, + "require": { + "behat/gherkin": "^4.4.0", + "codeception/phpunit-wrapper": "^6.0.9|^7.0.6", + "codeception/stub": "^2.0", + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "facebook/webdriver": ">=1.1.3 <2.0", + "guzzlehttp/guzzle": ">=4.1.4 <7.0", + "guzzlehttp/psr7": "~1.0", + "php": ">=5.6.0 <8.0", + "symfony/browser-kit": ">=2.7 <5.0", + "symfony/console": ">=2.7 <5.0", + "symfony/css-selector": ">=2.7 <5.0", + "symfony/dom-crawler": ">=2.7 <5.0", + "symfony/event-dispatcher": ">=2.7 <5.0", + "symfony/finder": ">=2.7 <5.0", + "symfony/yaml": ">=2.7 <5.0" + }, + "require-dev": { + "codeception/specify": "~0.3", + "facebook/graph-sdk": "~5.3", + "flow/jsonpath": "~0.2", + "monolog/monolog": "~1.8", + "pda/pheanstalk": "~3.0", + "php-amqplib/php-amqplib": "~2.4", + "predis/predis": "^1.0", + "squizlabs/php_codesniffer": "~2.0", + "symfony/process": ">=2.7 <5.0", + "vlucas/phpdotenv": "^3.0" + }, + "suggest": { + "aws/aws-sdk-php": "For using AWS Auth in REST module and Queue module", + "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests", + "codeception/specify": "BDD-style code blocks", + "codeception/verify": "BDD-style assertions", + "flow/jsonpath": "For using JSONPath in REST module", + "league/factory-muffin": "For DataFactory module", + "league/factory-muffin-faker": "For Faker support in DataFactory module", + "phpseclib/phpseclib": "for SFTP option in FTP Module", + "stecman/symfony-console-completion": "For BASH autocompletion", + "symfony/phpunit-bridge": "For phpunit-bridge support" + }, + "bin": [ + "codecept" + ], + "type": "library", + "extra": { + "branch-alias": [] + }, + "autoload": { + "psr-4": { + "Codeception\\": "src/Codeception", + "Codeception\\Extension\\": "ext" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk", + "email": "davert@mail.ua", + "homepage": "http://codegyre.com" + } + ], + "description": "BDD-style testing framework", + "homepage": "http://codeception.com/", + "keywords": [ + "BDD", + "TDD", + "acceptance testing", + "functional testing", + "unit testing" + ], + "time": "2019-04-24T11:28:19+00:00" + }, + { + "name": "codeception/phpunit-wrapper", + "version": "7.8.1", + "source": { + "type": "git", + "url": "https://github.com/Codeception/phpunit-wrapper.git", + "reference": "bc6f37d770ec00c4c7c78a1cac2b8ac0f9c9eec5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/bc6f37d770ec00c4c7c78a1cac2b8ac0f9c9eec5", + "reference": "bc6f37d770ec00c4c7c78a1cac2b8ac0f9c9eec5", + "shasum": "" + }, + "require": { + "phpunit/php-code-coverage": "^6.0", + "phpunit/phpunit": "7.5.*", + "sebastian/comparator": "^3.0", + "sebastian/diff": "^3.0" + }, + "require-dev": { + "codeception/specify": "*", + "vlucas/phpdotenv": "^3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Codeception\\PHPUnit\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Davert", + "email": "davert.php@resend.cc" + } + ], + "description": "PHPUnit classes used by Codeception", + "time": "2020-10-11T18:23:48+00:00" + }, + { + "name": "codeception/specify", + "version": "0.4.6", + "source": { + "type": "git", + "url": "https://github.com/Codeception/Specify.git", + "reference": "21b586f503ca444aa519dd9cafb32f113a05f286" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/Specify/zipball/21b586f503ca444aa519dd9cafb32f113a05f286", + "reference": "21b586f503ca444aa519dd9cafb32f113a05f286", + "shasum": "" + }, + "require": { + "myclabs/deep-copy": "~1.1", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Codeception\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk", + "email": "davert.php@mailican.com" + } + ], + "description": "BDD code blocks for PHPUnit and Codeception", + "time": "2016-10-21T09:42:00+00:00" + }, + { + "name": "codeception/stub", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/Codeception/Stub.git", + "reference": "853657f988942f7afb69becf3fd0059f192c705a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/Stub/zipball/853657f988942f7afb69becf3fd0059f192c705a", + "reference": "853657f988942f7afb69becf3fd0059f192c705a", + "shasum": "" + }, + "require": { + "codeception/phpunit-wrapper": ">6.0.15 <6.1.0 | ^6.6.1 | ^7.7.1 | ^8.0.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Codeception\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Flexible Stub wrapper for PHPUnit's Mock Builder", + "time": "2019-03-02T15:35:10+00:00" + }, + { + "name": "dmstr/yii2-web", + "version": "0.4.2", + "source": { + "type": "git", + "url": "https://github.com/dmstr/yii2-web.git", + "reference": "cb1c388dc1583b45dc99b1c254b15eb5d110a912" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dmstr/yii2-web/zipball/cb1c388dc1583b45dc99b1c254b15eb5d110a912", + "reference": "cb1c388dc1583b45dc99b1c254b15eb5d110a912", + "shasum": "" + }, + "require": { + "yiisoft/yii2": "2.0.*" + }, + "type": "yii2-extension", + "autoload": { + "psr-4": { + "dmstr\\web\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Christopher Stebe", + "email": "c.stebe@herzogkommunikation.de" + } + ], + "description": "Yii2 Framework web traits", + "keywords": [ + "behaviors", + "extension", + "traits", + "yii2" + ], + "time": "2017-06-02T16:16:50+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "f350df0268e904597e3bd9c4685c53e0e333feea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea", + "reference": "f350df0268e904597e3bd9c4685c53e0e333feea", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.13", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-shim": "^0.11", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2020-05-29T17:27:14+00:00" + }, + { + "name": "facebook/webdriver", + "version": "1.7.1", + "source": { + "type": "git", + "url": "https://github.com/php-webdriver/php-webdriver-archive.git", + "reference": "e43de70f3c7166169d0f14a374505392734160e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-webdriver/php-webdriver-archive/zipball/e43de70f3c7166169d0f14a374505392734160e5", + "reference": "e43de70f3c7166169d0f14a374505392734160e5", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "ext-zip": "*", + "php": "^5.6 || ~7.0", + "symfony/process": "^2.8 || ^3.1 || ^4.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.0", + "jakub-onderka/php-parallel-lint": "^0.9.2", + "php-coveralls/php-coveralls": "^2.0", + "php-mock/php-mock-phpunit": "^1.1", + "phpunit/phpunit": "^5.7", + "sebastian/environment": "^1.3.4 || ^2.0 || ^3.0", + "squizlabs/php_codesniffer": "^2.6", + "symfony/var-dumper": "^3.3 || ^4.0" + }, + "suggest": { + "ext-SimpleXML": "For Firefox profile creation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-community": "1.5-dev" + } + }, + "autoload": { + "psr-4": { + "Facebook\\WebDriver\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "A PHP client for Selenium WebDriver", + "homepage": "https://github.com/facebook/php-webdriver", + "keywords": [ + "facebook", + "php", + "selenium", + "webdriver" + ], + "abandoned": "php-webdriver/webdriver", + "time": "2019-06-13T08:02:18+00:00" + }, + { + "name": "fortawesome/font-awesome", + "version": "v4.7.0", + "source": { + "type": "git", + "url": "https://github.com/FortAwesome/Font-Awesome.git", + "reference": "a8386aae19e200ddb0f6845b5feeee5eb7013687" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FortAwesome/Font-Awesome/zipball/a8386aae19e200ddb0f6845b5feeee5eb7013687", + "reference": "a8386aae19e200ddb0f6845b5feeee5eb7013687", + "shasum": "" + }, + "require-dev": { + "jekyll": "1.0.2", + "lessc": "1.4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.6.x-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "OFL-1.1", + "MIT" + ], + "authors": [ + { + "name": "Dave Gandy", + "email": "dave@fontawesome.io", + "homepage": "http://twitter.com/davegandy", + "role": "Developer" + } + ], + "description": "The iconic font and CSS framework", + "homepage": "http://fontawesome.io/", + "keywords": [ + "FontAwesome", + "awesome", + "bootstrap", + "font", + "icon" + ], + "time": "2016-10-24T15:52:54+00:00" + }, + { + "name": "fzaninotto/faker", + "version": "v1.9.1", + "source": { + "type": "git", + "url": "https://github.com/fzaninotto/Faker.git", + "reference": "fc10d778e4b84d5bd315dad194661e091d307c6f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/fc10d778e4b84d5bd315dad194661e091d307c6f", + "reference": "fc10d778e4b84d5bd315dad194661e091d307c6f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "ext-intl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7", + "squizlabs/php_codesniffer": "^2.9.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "time": "2019-12-12T13:22:17+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "6.5.5", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", + "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.6.1", + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.17.0" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.1" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.5-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2020-06-16T21:01:06+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "60d379c243457e073cff02bc323a2a86cb355631" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/60d379c243457e073cff02bc323a2a86cb355631", + "reference": "60d379c243457e073cff02bc323a2a86cb355631", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4 || ^5.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2020-09-30T07:37:28+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.7.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/53330f47520498c0ae1f61f7e2c90f55690c06a3", + "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-zlib": "*", + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2020-09-30T07:37:11+00:00" + }, + { + "name": "insolita/yii2-adminlte-widgets", + "version": "v1.1.6", + "source": { + "type": "git", + "url": "https://github.com/Insolita/yii2-adminlte-widgets.git", + "reference": "a4e292e0aea1427ef769ab8c5ee09d8846f214b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Insolita/yii2-adminlte-widgets/zipball/a4e292e0aea1427ef769ab8c5ee09d8846f214b5", + "reference": "a4e292e0aea1427ef769ab8c5ee09d8846f214b5", + "shasum": "" + }, + "require": { + "bower-asset/jquery-cookie": "~1.4.1", + "yiisoft/yii2": "*" + }, + "type": "yii2-extension", + "autoload": { + "psr-4": { + "insolita\\wgadminlte\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "insolita", + "email": "donnainsolita@gmail.com" + } + ], + "description": "Widgets for AdminLTE theme (Box with remember collapse state, Timeline, Tile, Callout, SmallBox etc)", + "keywords": [ + "AdminLTE", + "widget", + "yii2" + ], + "time": "2016-06-02T20:58:50+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.10.1", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", + "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "replace": { + "myclabs/deep-copy": "self.version" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "time": "2020-06-29T13:22:24+00:00" + }, + { + "name": "phar-io/manifest", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "phar-io/version": "^2.0", + "php": "^5.6 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "time": "2018-07-08T19:23:20+00:00" + }, + { + "name": "phar-io/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "time": "2018-07-08T19:19:57+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b", + "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2020-04-27T09:25:28+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "4.3.4", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/da3fd972d6bafd628114f7e7e036f45944b62e9c", + "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c", + "shasum": "" + }, + "require": { + "php": "^7.0", + "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0", + "phpdocumentor/type-resolver": "~0.4 || ^1.0.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "doctrine/instantiator": "^1.0.5", + "mockery/mockery": "^1.0", + "phpdocumentor/type-resolver": "0.4.*", + "phpunit/phpunit": "^6.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2019-12-28T18:55:12+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", + "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", + "shasum": "" + }, + "require": { + "php": "^7.1", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "^7.1", + "mockery/mockery": "~1", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "time": "2019-08-22T18:11:29+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "v1.10.3", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "451c3cd1418cf640de218914901e51b064abb093" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", + "reference": "451c3cd1418cf640de218914901e51b064abb093", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", + "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5 || ^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Prophecy\\": "src/Prophecy" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2020-03-05T15:02:03+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "6.1.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", + "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^7.1", + "phpunit/php-file-iterator": "^2.0", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-token-stream": "^3.0", + "sebastian/code-unit-reverse-lookup": "^1.0.1", + "sebastian/environment": "^3.1 || ^4.0", + "sebastian/version": "^2.0.1", + "theseer/tokenizer": "^1.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.0" + }, + "suggest": { + "ext-xdebug": "^2.6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2018-10-31T16:06:48+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "050bedf145a257b1ff02746c31894800e5122946" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", + "reference": "050bedf145a257b1ff02746c31894800e5122946", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2018-09-13T20:33:42+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21T13:50:34+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "2.1.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", + "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2019-06-07T04:22:29+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff", + "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "abandoned": true, + "time": "2019-09-17T06:23:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "7.5.20", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "9467db479d1b0487c99733bb1e7944d32deded2c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9467db479d1b0487c99733bb1e7944d32deded2c", + "reference": "9467db479d1b0487c99733bb1e7944d32deded2c", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "myclabs/deep-copy": "^1.7", + "phar-io/manifest": "^1.0.2", + "phar-io/version": "^2.0", + "php": "^7.1", + "phpspec/prophecy": "^1.7", + "phpunit/php-code-coverage": "^6.0.7", + "phpunit/php-file-iterator": "^2.0.1", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-timer": "^2.1", + "sebastian/comparator": "^3.0", + "sebastian/diff": "^3.0", + "sebastian/environment": "^4.0", + "sebastian/exporter": "^3.1", + "sebastian/global-state": "^2.0", + "sebastian/object-enumerator": "^3.0.3", + "sebastian/resource-operations": "^2.0", + "sebastian/version": "^2.0.1" + }, + "conflict": { + "phpunit/phpunit-mock-objects": "*" + }, + "require-dev": { + "ext-pdo": "*" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*", + "phpunit/php-invoker": "^2.0" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.5-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2020-01-08T08:45:45+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "rmrevin/yii2-fontawesome", + "version": "2.17.1", + "source": { + "type": "git", + "url": "https://github.com/rmrevin/yii2-fontawesome.git", + "reference": "65ce306da864f4d558348aeba040ed7876878090" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rmrevin/yii2-fontawesome/zipball/65ce306da864f4d558348aeba040ed7876878090", + "reference": "65ce306da864f4d558348aeba040ed7876878090", + "shasum": "" + }, + "require": { + "fortawesome/font-awesome": "~4.7", + "php": ">=5.4.0", + "yiisoft/yii2": "2.0.*" + }, + "type": "yii2-extension", + "extra": { + "asset-installer-paths": { + "npm-asset-library": "vendor/npm", + "bower-asset-library": "vendor/bower" + } + }, + "autoload": { + "psr-4": { + "rmrevin\\yii\\fontawesome\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Revin Roman", + "email": "roman@rmrevin.com", + "homepage": "https://rmrevin.com/" + } + ], + "description": "Asset Bundle for Yii2 with Font Awesome", + "keywords": [ + "asset", + "awesome", + "bundle", + "font", + "yii" + ], + "time": "2017-01-11T14:05:47+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "time": "2017-03-04T06:30:41+00:00" + }, + { + "name": "sebastian/comparator", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "shasum": "" + }, + "require": { + "php": "^7.1", + "sebastian/diff": "^3.0", + "sebastian/exporter": "^3.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2018-07-12T15:12:46+00:00" + }, + { + "name": "sebastian/diff", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.5 || ^8.0", + "symfony/process": "^2 || ^3.3 || ^4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "time": "2019-02-04T06:01:07+00:00" + }, + { + "name": "sebastian/environment", + "version": "4.2.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/464c90d7bdf5ad4e8a6aea15c091fec0603d4368", + "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.5" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2019-11-20T08:46:58+00:00" + }, + { + "name": "sebastian/exporter", + "version": "3.1.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e", + "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e", + "shasum": "" + }, + "require": { + "php": "^7.0", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2019-09-14T09:02:43+00:00" + }, + { + "name": "sebastian/global-state", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2017-04-27T15:39:26+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "shasum": "" + }, + "require": { + "php": "^7.0", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "time": "2017-08-03T12:35:26+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "773f97c67f28de00d397be301821b06708fca0be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", + "reference": "773f97c67f28de00d397be301821b06708fca0be", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "time": "2017-03-29T09:07:27+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2017-03-03T06:23:57+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "time": "2018-10-04T04:07:39+00:00" + }, + { + "name": "sebastian/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2016-10-03T07:35:21+00:00" + }, + { + "name": "symfony/browser-kit", + "version": "v4.4.15", + "source": { + "type": "git", + "url": "https://github.com/symfony/browser-kit.git", + "reference": "9a1786e5020783605a30cff2ceed9aca030e8d80" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/9a1786e5020783605a30cff2ceed9aca030e8d80", + "reference": "9a1786e5020783605a30cff2ceed9aca030e8d80", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/dom-crawler": "^3.4|^4.0|^5.0" + }, + "require-dev": { + "symfony/css-selector": "^3.4|^4.0|^5.0", + "symfony/http-client": "^4.3|^5.0", + "symfony/mime": "^4.3|^5.0", + "symfony/process": "^3.4|^4.0|^5.0" + }, + "suggest": { + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\BrowserKit\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony BrowserKit Component", + "homepage": "https://symfony.com", + "time": "2020-10-02T08:38:15+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v4.4.15", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "bf17dc9f6ce144e41f786c32435feea4d8e11dcc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/bf17dc9f6ce144e41f786c32435feea4d8e11dcc", + "reference": "bf17dc9f6ce144e41f786c32435feea4d8e11dcc", + "shasum": "" + }, + "require": { + "php": ">=7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony CssSelector Component", + "homepage": "https://symfony.com", + "time": "2020-07-05T09:39:30+00:00" + }, + { + "name": "symfony/dom-crawler", + "version": "v4.4.15", + "source": { + "type": "git", + "url": "https://github.com/symfony/dom-crawler.git", + "reference": "bdcb7633a501770a0daefbf81d2e6b28c3864f2b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/bdcb7633a501770a0daefbf81d2e6b28c3864f2b", + "reference": "bdcb7633a501770a0daefbf81d2e6b28c3864f2b", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "masterminds/html5": "<2.6" + }, + "require-dev": { + "masterminds/html5": "^2.6", + "symfony/css-selector": "^3.4|^4.0|^5.0" + }, + "suggest": { + "symfony/css-selector": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\DomCrawler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony DomCrawler Component", + "homepage": "https://symfony.com", + "time": "2020-10-02T07:34:48+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "5dcab1bc7146cf8c1beaa4502a3d9be344334251" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/5dcab1bc7146cf8c1beaa4502a3d9be344334251", + "reference": "5dcab1bc7146cf8c1beaa4502a3d9be344334251", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php70": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "time": "2020-08-04T06:02:08+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e", + "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "time": "2020-07-14T12:35:20+00:00" + }, + { + "name": "symfony/yaml", + "version": "v4.4.15", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/c7885964b1eceb70b0981556d0a9b01d2d97c8d1", + "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/console": "<3.4" + }, + "require-dev": { + "symfony/console": "^3.4|^4.0|^5.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2020-09-27T03:36:23+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "time": "2019-06-13T22:48:21+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.9.1", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0 || ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<3.9.1" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36 || ^7.5.13" + }, + "type": "library", + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2020-07-08T17:02:28+00:00" + }, + { + "name": "yiisoft/yii2-faker", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii2-faker.git", + "reference": "3df62b1dcb272a8413f9c6e532c9d73f325ccde1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii2-faker/zipball/3df62b1dcb272a8413f9c6e532c9d73f325ccde1", + "reference": "3df62b1dcb272a8413f9c6e532c9d73f325ccde1", + "shasum": "" + }, + "require": { + "fzaninotto/faker": "~1.4", + "yiisoft/yii2": "~2.0.0" + }, + "type": "yii2-extension", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "yii\\faker\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Mark Jebri", + "email": "mark.github@yandex.ru" + } + ], + "description": "Fixture generator. The Faker integration for the Yii framework.", + "keywords": [ + "Fixture", + "faker", + "yii2" + ], + "time": "2018-02-19T20:27:10+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": { + "schmunk42/yii2-giiant": 20 + }, + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [] +} diff --git a/tests/_app/src/components/EditorIdentity.php b/tests/_app/src/components/EditorIdentity.php new file mode 100644 index 00000000..d54feb00 --- /dev/null +++ b/tests/_app/src/components/EditorIdentity.php @@ -0,0 +1,79 @@ + [ + 'class' => 'app\modules\sakila\Module', + #'layout' => '@admin-views/layouts/main', + ], + 'backend2' => [ + 'class' => 'app\modules\backend\Module', + #'layout' => '@admin-views/layouts/main', + ], + ]; + break; + case 'employees': + $giiantTestModule = [ + 'employees' => [ + 'class' => 'app\modules\employees\Module', + #'layout' => '@admin-views/layouts/main', + ], + ]; + break; + + default: + $giiantTestModule = [ + getenv('GIIANT_TEST_DB') => [ + 'class' => 'app\modules\\'.getenv('GIIANT_TEST_DB').'\Module', + #'layout' => '@admin-views/layouts/main', + ], + ]; + +} + +// TODO: add note to dependencies for CRUDs to docs +#$giiantTestModule['gridview'] = ['class' => 'kartik\grid\Module']; + +if (php_sapi_name() != 'cli') { + $modules = $giiantTestModule; +} + +$modules['gii'] = [ + 'class' => Module::class, + 'allowedIPs' => ['*'], +]; + +return [ + 'vendorPath' => $testVendorPath, + 'aliases' => [ + '@tests' => '@vendor/schmunk42/yii2-giiant/tests', + '@common' => '@app/common', + '@backend' => '@app/modules/backend', + ], + 'bootstrap' => [ + 'gii', + ], + 'on '.Application::EVENT_BEFORE_REQUEST => function (){ + if (php_sapi_name() != 'cli') { + Yii::$app->user->login(new EditorIdentity()); + } + }, + 'components' => [ + 'authManager' => [ + 'class' => PhpManager::class + ], + /*'cache' => [ + 'class' => 'yii\caching\ApcCache', + ],*/ + 'db' => [ + 'class' => 'yii\db\Connection', + 'dsn' => 'mysql:host='.getenv('DB_PORT_3306_TCP_ADDR').';dbname='.getenv('GIIANT_TEST_DB'), + // DATABASE_DSN_DB + 'username' => getenv('MYSQL_USER'), + 'password' => getenv('MYSQL_PASSWORD'), + 'charset' => 'utf8', + 'tablePrefix' => getenv('DATABASE_TABLE_PREFIX'), + 'enableSchemaCache' => true, + ], + 'i18n' => [ + 'translations' => [ + '*' => [ + 'class' => 'yii\i18n\PhpMessageSource', + ], + ], + ], + # TODO: bug in `Tabs`, see also https://github.com/dmstr/yii2-bootstrap/issues/4 + 'urlManager' => [ + 'enablePrettyUrl' => true, + 'showScriptName' => false, + ], + 'user' => [ + 'class' => 'dmstr\web\User', + 'identityClass' => 'app\components\EditorIdentity', + ], + ], + 'modules' => $modules, + 'params' => [ + 'yii.migrations' => [ + '@app/src/migrations/test', + ], + ], +]; diff --git a/tests/_migrations/118-tagai.sql b/tests/_app/src/migrations/test/118-tagai.sql similarity index 100% rename from tests/_migrations/118-tagai.sql rename to tests/_app/src/migrations/test/118-tagai.sql diff --git a/tests/_migrations/m151208_042230_issue_118.php b/tests/_app/src/migrations/test/m151208_042230_issue_118.php similarity index 100% rename from tests/_migrations/m151208_042230_issue_118.php rename to tests/_app/src/migrations/test/m151208_042230_issue_118.php diff --git a/tests/_app/src/rbac/assignments.php b/tests/_app/src/rbac/assignments.php new file mode 100755 index 00000000..67dac6d4 --- /dev/null +++ b/tests/_app/src/rbac/assignments.php @@ -0,0 +1,6 @@ + [ + 'Editor', + ], +]; diff --git a/tests/_app/src/rbac/items.php b/tests/_app/src/rbac/items.php new file mode 100755 index 00000000..d45e4eb0 --- /dev/null +++ b/tests/_app/src/rbac/items.php @@ -0,0 +1,24 @@ + [ + 'type' => 2, + 'description' => 'sakila CRUD permission', + ], + 'SakilaCategoryFull' => [ + 'type' => 2, + 'description' => 'sakila CRUD permission', + ], + 'sakila' => [ + 'type' => 2, + 'description' => '/sakila/* route permission', + ], + 'Editor' => [ + 'type' => 1, + 'description' => 'Editor user', + 'children' => [ + 'sakila', + 'SakilaActorFull', + 'SakilaCategoryFull', + ], + ], +]; diff --git a/tests/_app/src/rbac/rules.php b/tests/_app/src/rbac/rules.php new file mode 100755 index 00000000..bee73cf4 --- /dev/null +++ b/tests/_app/src/rbac/rules.php @@ -0,0 +1,4 @@ +=1.9.1" - }, - "type": "bower-asset-library", - "extra": { - "bower-asset-main": [ - "less/bootstrap.less", - "dist/js/bootstrap.js" - ], - "bower-asset-ignore": [ - "/.*", - "_config.yml", - "CNAME", - "composer.json", - "CONTRIBUTING.md", - "docs", - "js/tests", - "test-infra" - ] - }, - "license": [ - "MIT" - ], - "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", - "keywords": [ - "css", - "framework", - "front-end", - "js", - "less", - "mobile-first", - "responsive", - "web" - ] - }, - { - "name": "bower-asset/bootstrap3-dialog", - "version": "v1.35.3", - "source": { - "type": "git", - "url": "https://github.com/nakupanda/bootstrap3-dialog.git", - "reference": "4aa9d536516957e01c39afd1b5e8bdd88976ef7b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nakupanda/bootstrap3-dialog/zipball/4aa9d536516957e01c39afd1b5e8bdd88976ef7b", - "reference": "4aa9d536516957e01c39afd1b5e8bdd88976ef7b", - "shasum": "" - }, - "require": { - "bower-asset/bootstrap": ">=3.1.0", - "bower-asset/jquery": ">=1.9.0" - }, - "type": "bower-asset-library", - "extra": { - "bower-asset-main": [ - "dist/less/bootstrap-dialog.less", - "dist/css/bootstrap-dialog.min.css", - "dist/js/bootstrap-dialog.min.js" - ], - "bower-asset-ignore": [ - "source", - "spec", - ".bowerrc", - ".gitignore", - ".jshintignore", - ".jshintrc", - "bower.json", - "gruntfile.js", - "package.json", - "README.md" - ] - }, - "license": [ - "MIT" - ], - "description": "Make use of Bootstrap Modal more monkey-friendly. http://nakupanda.github.io/bootstrap3-dialog/", - "keywords": [ - "css", - "framework", - "front-end", - "js", - "less", - "mobile-first", - "responsive", - "web" - ] - }, - { - "name": "bower-asset/fontawesome", - "version": "v4.6.1", - "source": { - "type": "git", - "url": "https://github.com/FortAwesome/Font-Awesome.git", - "reference": "6535013c330e801ecf0b23c437865a7fb344486d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FortAwesome/Font-Awesome/zipball/6535013c330e801ecf0b23c437865a7fb344486d", - "reference": "6535013c330e801ecf0b23c437865a7fb344486d", - "shasum": "" - }, - "type": "bower-asset-library", - "extra": { - "bower-asset-main": [ - "less/font-awesome.less", - "scss/font-awesome.scss" - ], - "bower-asset-ignore": [ - "*/.*", - "*.json", - "src", - "*.yml", - "Gemfile", - "Gemfile.lock", - "*.md" - ] - }, - "license": [ - "OFL-1.1", - "MIT", - "CC-BY-3.0" - ], - "description": "Font Awesome" - }, - { - "name": "bower-asset/jquery", - "version": "2.2.3", - "source": { - "type": "git", - "url": "https://github.com/jquery/jquery-dist.git", - "reference": "af22a351b2ea5801ffb1695abb3bb34d5bed9198" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jquery/jquery-dist/zipball/af22a351b2ea5801ffb1695abb3bb34d5bed9198", - "reference": "af22a351b2ea5801ffb1695abb3bb34d5bed9198", - "shasum": "" - }, - "type": "bower-asset-library", - "extra": { - "bower-asset-main": "dist/jquery.js", - "bower-asset-ignore": [ - "package.json" - ] - }, - "license": [ - "MIT" - ], - "keywords": [ - "browser", - "javascript", - "jquery", - "library" - ] - }, - { - "name": "bower-asset/jquery-cookie", - "version": "v1.4.1", - "source": { - "type": "git", - "url": "https://github.com/carhartl/jquery-cookie.git", - "reference": "7f88a4e631aba8a8c688fd8999ce6b9bcfd50718" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/carhartl/jquery-cookie/zipball/7f88a4e631aba8a8c688fd8999ce6b9bcfd50718", - "reference": "7f88a4e631aba8a8c688fd8999ce6b9bcfd50718", - "shasum": "" - }, - "require": { - "bower-asset/jquery": ">=1.2" - }, - "type": "bower-asset-library", - "extra": { - "bower-asset-main": [ - "./jquery.cookie.js" - ], - "bower-asset-ignore": [ - "test", - ".*", - "*.json", - "*.md", - "*.txt", - "Gruntfile.js" - ] - } - }, - { - "name": "bower-asset/jquery-ui", - "version": "1.11.4", - "source": { - "type": "git", - "url": "https://github.com/components/jqueryui.git", - "reference": "c34f8dbf3ba57b3784b93f26119f436c0e8288e1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/components/jqueryui/zipball/c34f8dbf3ba57b3784b93f26119f436c0e8288e1", - "reference": "c34f8dbf3ba57b3784b93f26119f436c0e8288e1", - "shasum": "" - }, - "require": { - "bower-asset/jquery": ">=1.6" - }, - "type": "bower-asset-library", - "extra": { - "bower-asset-main": [ - "jquery-ui.js" - ], - "bower-asset-ignore": [] - } - }, - { - "name": "bower-asset/jquery.inputmask", - "version": "3.2.7", - "source": { - "type": "git", - "url": "https://github.com/RobinHerbots/jquery.inputmask.git", - "reference": "5a72c563b502b8e05958a524cdfffafe9987be38" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/RobinHerbots/jquery.inputmask/zipball/5a72c563b502b8e05958a524cdfffafe9987be38", - "reference": "5a72c563b502b8e05958a524cdfffafe9987be38", - "shasum": "" - }, - "require": { - "bower-asset/jquery": ">=1.7" - }, - "type": "bower-asset-library", - "extra": { - "bower-asset-main": [ - "./dist/inputmask/inputmask.js" - ], - "bower-asset-ignore": [ - "**/*", - "!dist/*", - "!dist/inputmask/*", - "!dist/min/*", - "!dist/min/inputmask/*", - "!extra/bindings/*", - "!extra/dependencyLibs/*", - "!extra/phone-codes/*" - ] - }, - "license": [ - "http://opensource.org/licenses/mit-license.php" - ], - "description": "jquery.inputmask is a jquery plugin which create an input mask.", - "keywords": [ - "form", - "input", - "inputmask", - "jquery", - "mask", - "plugins" - ] - }, - { - "name": "bower-asset/jsoneditor", - "version": "v3.2.0", - "source": { - "type": "git", - "url": "https://github.com/josdejong/jsoneditor.git", - "reference": "63e61dd817f771782c3bf6eafaf6f1069e034569" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/josdejong/jsoneditor/zipball/63e61dd817f771782c3bf6eafaf6f1069e034569", - "reference": "63e61dd817f771782c3bf6eafaf6f1069e034569", - "shasum": "" - }, - "type": "bower-asset-library", - "extra": { - "bower-asset-main": [ - "jsoneditor.min.js", - "jsoneditor.min.css" - ], - "bower-asset-ignore": [ - "app", - "build", - "downloads", - "src", - "misc", - "node_modules", - "test", - "tools", - ".idea", - "gulpfile.js", - "package.json", - ".npmignore", - ".gitignore" - ] - }, - "description": "A web-based tool to view, edit and format JSON" - }, - { - "name": "bower-asset/punycode", - "version": "v1.3.2", - "source": { - "type": "git", - "url": "https://github.com/bestiejs/punycode.js.git", - "reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/bestiejs/punycode.js/zipball/38c8d3131a82567bfef18da09f7f4db68c84f8a3", - "reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3", - "shasum": "" - }, - "type": "bower-asset-library", - "extra": { - "bower-asset-main": "punycode.js", - "bower-asset-ignore": [ - "coverage", - "tests", - ".*", - "component.json", - "Gruntfile.js", - "node_modules", - "package.json" - ] - } - }, - { - "name": "bower-asset/yii2-pjax", - "version": "v2.0.6", - "source": { - "type": "git", - "url": "https://github.com/yiisoft/jquery-pjax.git", - "reference": "60728da6ade5879e807a49ce59ef9a72039b8978" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/yiisoft/jquery-pjax/zipball/60728da6ade5879e807a49ce59ef9a72039b8978", - "reference": "60728da6ade5879e807a49ce59ef9a72039b8978", - "shasum": "" - }, - "require": { - "bower-asset/jquery": ">=1.8" - }, - "type": "bower-asset-library", - "extra": { - "bower-asset-main": "./jquery.pjax.js", - "bower-asset-ignore": [ - ".travis.yml", - "Gemfile", - "Gemfile.lock", - "CONTRIBUTING.md", - "vendor/", - "script/", - "test/" - ] - }, - "license": [ - "MIT" - ] - }, - { - "name": "cebe/markdown", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/cebe/markdown.git", - "reference": "f681fee8303310415b746f3758eeda0a7ad08bda" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cebe/markdown/zipball/f681fee8303310415b746f3758eeda0a7ad08bda", - "reference": "f681fee8303310415b746f3758eeda0a7ad08bda", - "shasum": "" - }, - "require": { - "lib-pcre": "*", - "php": ">=5.4.0" - }, - "require-dev": { - "cebe/indent": "*", - "facebook/xhprof": "*@dev", - "phpunit/phpunit": "3.7.*" - }, - "bin": [ - "bin/markdown" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "cebe\\markdown\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Carsten Brandt", - "email": "mail@cebe.cc", - "homepage": "http://cebe.cc/", - "role": "Creator" - } - ], - "description": "A super fast, highly extensible markdown parser for PHP", - "homepage": "https://github.com/cebe/markdown#readme", - "keywords": [ - "extensible", - "fast", - "gfm", - "markdown", - "markdown-extra" - ], - "time": "2015-03-06 05:21:16" - }, - { - "name": "cebe/yii2-gravatar", - "version": "1.1", - "target-dir": "cebe/gravatar", - "source": { - "type": "git", - "url": "https://github.com/cebe/yii2-gravatar.git", - "reference": "c9c01bd14c9bdee9e5ae1ef1aad23f80c182c057" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cebe/yii2-gravatar/zipball/c9c01bd14c9bdee9e5ae1ef1aad23f80c182c057", - "reference": "c9c01bd14c9bdee9e5ae1ef1aad23f80c182c057", - "shasum": "" - }, - "require": { - "yiisoft/yii2": "*" - }, - "type": "yii2-extension", - "autoload": { - "psr-0": { - "cebe\\gravatar\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Carsten Brandt", - "email": "mail@cebe.cc", - "homepage": "http://cebe.cc/", - "role": "Core framework development" - } - ], - "description": "Gravatar Widget for Yii 2", - "keywords": [ - "gravatar", - "yii" - ], - "time": "2013-12-10 17:49:58" - }, - { - "name": "codemix/yii2-localeurls", - "version": "1.4.3", - "source": { - "type": "git", - "url": "https://github.com/codemix/yii2-localeurls.git", - "reference": "342ffbd5f5d9a1264a82f21ccc669ebcc3102703" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/codemix/yii2-localeurls/zipball/342ffbd5f5d9a1264a82f21ccc669ebcc3102703", - "reference": "342ffbd5f5d9a1264a82f21ccc669ebcc3102703", - "shasum": "" - }, - "require": { - "yiisoft/yii2": "*" - }, - "type": "yii2-extension", - "autoload": { - "psr-4": { - "codemix\\localeurls\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Härtl", - "email": "haertl.mike@gmail.com" - } - ], - "description": "Automatic locale/language management for URLs.", - "keywords": [ - "i18n", - "locale", - "yii2" - ], - "time": "2016-03-21 21:06:23" - }, - { - "name": "codemix/yii2-streamlog", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/codemix/yii2-streamlog.git", - "reference": "8a0f03900887651e00a4f26cf7c3a12043bc2784" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/codemix/yii2-streamlog/zipball/8a0f03900887651e00a4f26cf7c3a12043bc2784", - "reference": "8a0f03900887651e00a4f26cf7c3a12043bc2784", - "shasum": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "codemix\\streamlog\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Härtl", - "email": "haertl.mike@gmail.com" - } - ], - "description": "A Yii 2 log target for streams in URL format", - "keywords": [ - "log", - "stdout", - "stream", - "yii2" - ], - "time": "2015-04-28 08:24:33" - }, - { - "name": "creocoder/yii2-nested-sets", - "version": "0.9.0", - "source": { - "type": "git", - "url": "https://github.com/creocoder/yii2-nested-sets.git", - "reference": "cb8635a459b6246e5a144f096b992dcc30cf9954" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/creocoder/yii2-nested-sets/zipball/cb8635a459b6246e5a144f096b992dcc30cf9954", - "reference": "cb8635a459b6246e5a144f096b992dcc30cf9954", - "shasum": "" - }, - "require": { - "yiisoft/yii2": "*" - }, - "type": "yii2-extension", - "autoload": { - "psr-4": { - "creocoder\\nestedsets\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Alexander Kochetov", - "email": "creocoder@gmail.com" - } - ], - "description": "The nested sets behavior for the Yii framework", - "keywords": [ - "nested sets", - "yii2" - ], - "time": "2015-01-27 10:53:51" - }, - { - "name": "dektrium/yii2-rbac", - "version": "0.3.0", - "source": { - "type": "git", - "url": "https://github.com/dektrium/yii2-rbac.git", - "reference": "4c5c383f577256d34cbc37ed26809a8ff109b2ec" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dektrium/yii2-rbac/zipball/4c5c383f577256d34cbc37ed26809a8ff109b2ec", - "reference": "4c5c383f577256d34cbc37ed26809a8ff109b2ec", - "shasum": "" - }, - "require": { - "kartik-v/yii2-widget-select2": "*", - "yiisoft/yii2": "2.0.*" - }, - "type": "yii2-extension", - "extra": { - "bootstrap": "dektrium\\rbac\\Bootstrap" - }, - "autoload": { - "psr-4": { - "dektrium\\rbac\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Dmitry Erofeev", - "email": "dmeroff@gmail.com", - "homepage": "http://dmeroff.ru" - } - ], - "description": "RBAC management module for Yii2", - "keywords": [ - "dektrium", - "rbac gui", - "rbac management", - "rbac module", - "yii rbac", - "yii2", - "yii2-rbac" - ], - "time": "2016-03-30 12:19:16" - }, - { - "name": "dektrium/yii2-user", - "version": "0.9.6", - "source": { - "type": "git", - "url": "https://github.com/dektrium/yii2-user.git", - "reference": "ae737861ff170b9c4376b274244bd9994ee0d248" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dektrium/yii2-user/zipball/ae737861ff170b9c4376b274244bd9994ee0d248", - "reference": "ae737861ff170b9c4376b274244bd9994ee0d248", - "shasum": "" - }, - "require": { - "yiisoft/yii2": "~2.0", - "yiisoft/yii2-authclient": "~2.0", - "yiisoft/yii2-bootstrap": "~2.0", - "yiisoft/yii2-jui": "~2.0", - "yiisoft/yii2-swiftmailer": "~2.0" - }, - "require-dev": { - "codeception/aspect-mock": "*", - "codeception/specify": "*", - "codeception/verify": "*", - "yiisoft/yii2-codeception": "~2.0" - }, - "type": "yii2-extension", - "extra": { - "bootstrap": "dektrium\\user\\Bootstrap", - "branch-alias": { - "dev-master": "1.0.x-dev" - }, - "asset-installer-paths": { - "npm-asset-library": "vendor/npm", - "bower-asset-library": "vendor/bower" - } - }, - "autoload": { - "psr-4": { - "dektrium\\user\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Dmitry Erofeev", - "email": "dmeroff@gmail.com", - "homepage": "http://dmeroff.ru" - } - ], - "description": "Flexible user registration and authentication module for Yii2", - "keywords": [ - "User management", - "dektrium", - "yii2", - "yii2-user" - ], - "time": "2016-03-27 18:09:10" - }, - { - "name": "devgroup/yii2-jsoneditor", - "version": "v1.0.0", - "source": { - "type": "git", - "url": "https://github.com/DevGroup-ru/yii2-jsoneditor.git", - "reference": "b4656d7953d78e513fc5dfe42b4c9515c07a0c67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/DevGroup-ru/yii2-jsoneditor/zipball/b4656d7953d78e513fc5dfe42b4c9515c07a0c67", - "reference": "b4656d7953d78e513fc5dfe42b4c9515c07a0c67", - "shasum": "" - }, - "require": { - "bower-asset/jsoneditor": "~3.1", - "yiisoft/yii2": "2.0.*" - }, - "require-dev": { - "yiisoft/yii2-debug": "2.0.*" - }, - "type": "yii2-extension", - "autoload": { - "psr-4": { - "devgroup\\jsoneditor\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-3.0+" - ], - "authors": [ - { - "name": "Alexander Kozhevnikov", - "email": "b37hr3z3n@gmail.com" - }, - { - "name": "Evgeny Dubovitsky", - "email": "flynn068@gmail.com" - }, - { - "name": "Pavel Fedotov", - "email": "fps.06@mail.ru" - } - ], - "description": "Yii2 jsoneditor widget", - "keywords": [ - "editor", - "json", - "jsoneditor", - "yii2" - ], - "time": "2014-12-16 14:27:06" - }, - { - "name": "dmstr/yii2-adminlte-asset", - "version": "2.3.0", - "source": { - "type": "git", - "url": "https://github.com/dmstr/yii2-adminlte-asset.git", - "reference": "73eca05cf04d70f169a88b430d2c03c3b54d623a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dmstr/yii2-adminlte-asset/zipball/73eca05cf04d70f169a88b430d2c03c3b54d623a", - "reference": "73eca05cf04d70f169a88b430d2c03c3b54d623a", - "shasum": "" - }, - "require": { - "almasaeed2010/adminlte": "~2.0", - "cebe/yii2-gravatar": "1.*", - "rmrevin/yii2-fontawesome": "~2.9", - "yiisoft/yii2": "2.*", - "yiisoft/yii2-bootstrap": "2.*" - }, - "type": "yii2-extension", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "dmstr\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Tobias Munk", - "email": "tobias@diemeisterei.de" - }, - { - "name": "Evgeniy Tkachenko", - "email": "et.coder@gmail.com" - } - ], - "description": "Backend theme for Yii2 Framework", - "keywords": [ - "AdminLTE", - "extension", - "yii2" - ], - "time": "2016-03-23 04:18:15" - }, - { - "name": "dmstr/yii2-backend-module", - "version": "0.1.0", - "source": { - "type": "git", - "url": "https://github.com/dmstr/yii2-backend-module.git", - "reference": "de3e976dc8b04a8996c647ace1884e68c51b143a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dmstr/yii2-backend-module/zipball/de3e976dc8b04a8996c647ace1884e68c51b143a", - "reference": "de3e976dc8b04a8996c647ace1884e68c51b143a", - "shasum": "" - }, - "require": { - "yiisoft/yii2": "*" - }, - "type": "yii2-extension", - "autoload": { - "psr-4": { - "dmstr\\modules\\backend\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Tobias Munk", - "email": "tobias@diemeisterei.de" - } - ], - "description": "Admin Dashboard", - "keywords": [ - "extension", - "yii2" - ], - "time": "2016-04-06 03:27:52" - }, - { - "name": "dmstr/yii2-bootstrap", - "version": "0.1.2", - "source": { - "type": "git", - "url": "https://github.com/dmstr/yii2-bootstrap.git", - "reference": "c0fb26c0259b3c5fb42f2c0df852db2b3494c739" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dmstr/yii2-bootstrap/zipball/c0fb26c0259b3c5fb42f2c0df852db2b3494c739", - "reference": "c0fb26c0259b3c5fb42f2c0df852db2b3494c739", - "shasum": "" - }, - "require": { - "yiisoft/yii2": "2.0.*" - }, - "type": "yii2-extension", - "autoload": { - "psr-4": { - "dmstr\\bootstrap\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Christopher Stebe", - "email": "c.stebe@herzogkommunikation.de" - } - ], - "description": "yii2 bootstrap components and extensions from diemeisterei GmbH", - "keywords": [ - "bootstrap", - "extension", - "yii2" - ], - "time": "2016-04-13 00:33:37" - }, - { - "name": "dmstr/yii2-cms-metapackage", - "version": "4.2.0", - "source": { - "type": "git", - "url": "https://github.com/dmstr/yii2-cms-metapackage.git", - "reference": "ac3cfab030fe6d33ff60f9b465bbcd4bde242538" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dmstr/yii2-cms-metapackage/zipball/ac3cfab030fe6d33ff60f9b465bbcd4bde242538", - "reference": "ac3cfab030fe6d33ff60f9b465bbcd4bde242538", - "shasum": "" - }, - "require": { - "dektrium/yii2-rbac": "~0.2", - "dektrium/yii2-user": "^0.9.6", - "dmstr/yii2-adminlte-asset": "^2.2.4", - "dmstr/yii2-backend-module": "^0.1", - "dmstr/yii2-libs-metapackage": "~0.3", - "dmstr/yii2-pages-module": "0.14.*", - "dmstr/yii2-prototype-module": "~0.0", - "insolita/yii2-adminlte-widgets": "~1.1", - "lajax/yii2-translate-manager": "^1.5.1", - "pheme/yii2-settings": "~0.2", - "trntv/yii2-aceeditor": "~2.0" - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Tobias Munk", - "email": "tobias@diemeisterei.de" - } - ], - "description": "Content Management Extensions for Phundament 4 (Yii 2.0 Framework)", - "time": "2016-04-22 11:38:22" - }, - { - "name": "dmstr/yii2-db", - "version": "0.3.0", - "source": { - "type": "git", - "url": "https://github.com/dmstr/yii2-db.git", - "reference": "49e3227665c1f38b8da5d8b7cbe29b9f5b3fbab0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dmstr/yii2-db/zipball/49e3227665c1f38b8da5d8b7cbe29b9f5b3fbab0", - "reference": "49e3227665c1f38b8da5d8b7cbe29b9f5b3fbab0", - "shasum": "" - }, - "type": "yii2-extension", - "autoload": { - "psr-4": { - "dmstr\\db\\": "db/", - "dmstr\\console\\": "console/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Tobias Munk", - "email": "tobias@diemeisterei.de" - } - ], - "description": "Database extensions", - "keywords": [ - "database", - "db", - "extension", - "yii2" - ], - "time": "2015-12-21 10:01:49" - }, - { - "name": "dmstr/yii2-helpers", - "version": "0.3.0", - "source": { - "type": "git", - "url": "https://github.com/dmstr/yii2-helpers.git", - "reference": "034af22a34645d89baf6cc2dace9fffe2c37fe55" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dmstr/yii2-helpers/zipball/034af22a34645d89baf6cc2dace9fffe2c37fe55", - "reference": "034af22a34645d89baf6cc2dace9fffe2c37fe55", - "shasum": "" - }, - "require": { - "yiisoft/yii2": "*" - }, - "type": "yii2-extension", - "autoload": { - "psr-4": { - "dmstr\\helpers\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sergej Kunz", - "email": "s.kunz@herzogkommunikation.de" - }, - { - "name": "Tobias Munk", - "email": "t.munk@herzogkommunikation.de" - } - ], - "description": "Yii2 Helpers", - "keywords": [ - "extension", - "yii2" - ], - "time": "2016-03-07 08:57:01" - }, - { - "name": "dmstr/yii2-libs-metapackage", - "version": "0.3.0", - "source": { - "type": "git", - "url": "https://github.com/dmstr/yii2-libs-metapackage.git", - "reference": "0c58b65214397b7444e9d6b2ceb17f6fff9d7dff" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dmstr/yii2-libs-metapackage/zipball/0c58b65214397b7444e9d6b2ceb17f6fff9d7dff", - "reference": "0c58b65214397b7444e9d6b2ceb17f6fff9d7dff", - "shasum": "" - }, - "require": { - "codemix/yii2-localeurls": "^1.3", - "codemix/yii2-streamlog": "^1.0", - "dmstr/yii2-bootstrap": "~0.0", - "dmstr/yii2-db": "~0.3", - "dmstr/yii2-helpers": "~0.1", - "dmstr/yii2-migrate-command": "~0.3", - "dmstr/yii2-web": "~0.2", - "mikehaertl/php-shellcommand": "^1.2", - "schmunk42/retry": "~0.0", - "yiisoft/yii2-swiftmailer": "2.*" - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Tobias Munk", - "email": "tobias@diemeisterei.de" - } - ], - "description": "Core Library Extensions for Phundament 4 (Yii 2.0 Framework)", - "time": "2016-04-22 11:37:01" - }, - { - "name": "dmstr/yii2-migrate-command", - "version": "0.3.1", - "source": { - "type": "git", - "url": "https://github.com/dmstr/yii2-migrate-command.git", - "reference": "dcfe52c088b8039ce7e08e0b0fa5cff0002f2d79" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dmstr/yii2-migrate-command/zipball/dcfe52c088b8039ce7e08e0b0fa5cff0002f2d79", - "reference": "dcfe52c088b8039ce7e08e0b0fa5cff0002f2d79", - "shasum": "" - }, - "type": "yii2-extension", - "autoload": { - "psr-4": { - "dmstr\\console\\controllers\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Tobias Munk", - "email": "tobias@diemeisterei.de" - } - ], - "description": "Console Migration Command with multiple paths/aliases support", - "keywords": [ - "command", - "console", - "extension", - "migration", - "yii2" - ], - "time": "2016-01-19 17:31:24" - }, - { - "name": "dmstr/yii2-pages-module", - "version": "0.14.5", - "source": { - "type": "git", - "url": "https://github.com/dmstr/yii2-pages-module.git", - "reference": "2e8c9cec1b450cc569c4c58755f0dbf16485079c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dmstr/yii2-pages-module/zipball/2e8c9cec1b450cc569c4c58755f0dbf16485079c", - "reference": "2e8c9cec1b450cc569c4c58755f0dbf16485079c", - "shasum": "" - }, - "require": { - "devgroup/yii2-jsoneditor": "1.0.*", - "dmstr/yii2-web": "~0.1", - "kartik-v/yii2-tree-manager": "~1.0.3", - "kartik-v/yii2-widget-select2": "^2.0.1", - "rmrevin/yii2-fontawesome": "~2.9", - "yiisoft/yii2": "^2.0.6" - }, - "type": "yii2-extension", - "extra": { - "bootstrap": "dmstr\\modules\\pages\\Bootstrap" - }, - "autoload": { - "psr-4": { - "dmstr\\modules\\pages\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Tobias Munk", - "email": "tobias@diemeisterei.de" - }, - { - "name": "Christopher Stebe", - "email": "c.stebe@herzogkommunikation.de" - } - ], - "description": "Application sitemap and navigation manager module for Yii 2.0 Framework", - "keywords": [ - "Sitemap", - "extension", - "navigation", - "yii2" - ], - "time": "2016-04-19 14:12:37" - }, - { - "name": "dmstr/yii2-prototype-module", - "version": "0.0.3", - "source": { - "type": "git", - "url": "https://github.com/dmstr/yii2-prototype-module.git", - "reference": "602c008ab1240f4248252146a6ce568559467fb3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dmstr/yii2-prototype-module/zipball/602c008ab1240f4248252146a6ce568559467fb3", - "reference": "602c008ab1240f4248252146a6ce568559467fb3", - "shasum": "" - }, - "require": { - "yiisoft/yii2": "*" - }, - "type": "yii2-extension", - "autoload": { - "psr-4": { - "dmstr\\modules\\prototype\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Tobias Munk", - "email": "tobias@diemeisterei.de" - } - ], - "description": "Backend UI for static files", - "keywords": [ - "extension", - "yii2" - ], - "time": "2016-03-06 21:06:21" - }, - { - "name": "dmstr/yii2-web", - "version": "0.2.0", - "source": { - "type": "git", - "url": "https://github.com/dmstr/yii2-web.git", - "reference": "67b9e082af7e3109eb8d8224e65bc60f418bd20e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dmstr/yii2-web/zipball/67b9e082af7e3109eb8d8224e65bc60f418bd20e", - "reference": "67b9e082af7e3109eb8d8224e65bc60f418bd20e", - "shasum": "" - }, - "require": { - "yiisoft/yii2": "2.0.*" - }, - "type": "yii2-extension", - "autoload": { - "psr-4": { - "dmstr\\web\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Christopher Stebe", - "email": "c.stebe@herzogkommunikation.de" - } - ], - "description": "Yii2 Framework web traits", - "keywords": [ - "behaviors", - "extension", - "traits", - "yii2" - ], - "time": "2016-04-06 02:20:17" - }, - { - "name": "ezyang/htmlpurifier", - "version": "v4.6.0", - "source": { - "type": "git", - "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "6f389f0f25b90d0b495308efcfa073981177f0fd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/6f389f0f25b90d0b495308efcfa073981177f0fd", - "reference": "6f389f0f25b90d0b495308efcfa073981177f0fd", - "shasum": "" - }, - "require": { - "php": ">=5.2" - }, - "type": "library", - "autoload": { - "psr-0": { - "HTMLPurifier": "library/" - }, - "files": [ - "library/HTMLPurifier.composer.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL" - ], - "authors": [ - { - "name": "Edward Z. Yang", - "email": "admin@htmlpurifier.org", - "homepage": "http://ezyang.com" - } - ], - "description": "Standards compliant HTML filter written in PHP", - "homepage": "http://htmlpurifier.org/", - "keywords": [ - "html" - ], - "time": "2013-11-30 08:25:19" - }, - { - "name": "insolita/yii2-adminlte-widgets", - "version": "v1.1.4", - "source": { - "type": "git", - "url": "https://github.com/Insolita/yii2-adminlte-widgets.git", - "reference": "70a62bd50b4cad3a0f077f29e1458add061b192e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Insolita/yii2-adminlte-widgets/zipball/70a62bd50b4cad3a0f077f29e1458add061b192e", - "reference": "70a62bd50b4cad3a0f077f29e1458add061b192e", - "shasum": "" - }, - "require": { - "bower-asset/jquery-cookie": "*", - "yiisoft/yii2": "*" - }, - "type": "yii2-extension", - "autoload": { - "psr-4": { - "insolita\\wgadminlte\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "insolita", - "email": "donnainsolita@gmail.com" - } - ], - "description": "Widgets for AdminLTE theme (Box with remember collapse state, Timeline, Tile, Callout, SmallBox etc)", - "keywords": [ - "AdminLTE", - "widget", - "yii2" - ], - "time": "2016-03-24 05:01:55" - }, - { - "name": "kartik-v/bootstrap-popover-x", - "version": "v1.4.1", - "source": { - "type": "git", - "url": "https://github.com/kartik-v/bootstrap-popover-x.git", - "reference": "ce1d165af25f6e6caaf97083e20b5a3ad7c7b7c6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/kartik-v/bootstrap-popover-x/zipball/ce1d165af25f6e6caaf97083e20b5a3ad7c7b7c6", - "reference": "ce1d165af25f6e6caaf97083e20b5a3ad7c7b7c6", - "shasum": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "kartik\\plugins\\popover\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD 3-Clause" - ], - "authors": [ - { - "name": "Kartik Visweswaran", - "email": "kartikv2@gmail.com", - "homepage": "http://www.krajee.com/" - } - ], - "description": "Bootstrap Popover Extended - Popover with modal behavior, styling enhancements and more.", - "homepage": "https://github.com/kartik-v/bootstrap-popover-x", - "keywords": [ - "bootstrap", - "extended", - "jquery", - "modal", - "modal-popover", - "popover", - "popover-x" - ], - "time": "2015-03-18 13:08:39" - }, - { - "name": "kartik-v/yii2-dialog", - "version": "v1.0.1", - "source": { - "type": "git", - "url": "https://github.com/kartik-v/yii2-dialog.git", - "reference": "4aaf8918c6dbd90218b6ad9036b1aae211480716" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/kartik-v/yii2-dialog/zipball/4aaf8918c6dbd90218b6ad9036b1aae211480716", - "reference": "4aaf8918c6dbd90218b6ad9036b1aae211480716", - "shasum": "" - }, - "require": { - "bower-asset/bootstrap3-dialog": "~1.34", - "kartik-v/yii2-krajee-base": "~1.7" - }, - "type": "yii2-extension", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "kartik\\dialog\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Kartik Visweswaran", - "email": "kartikv2@gmail.com", - "homepage": "http://www.krajee.com/" - } - ], - "description": "An asset bundle for bootstrap3-dialog for Yii 2.0 framework.", - "homepage": "https://github.com/kartik-v/yii2-dialog", - "keywords": [ - "alert", - "bootstrap", - "dialog", - "extension", - "modal", - "yii2" - ], - "time": "2016-09-13 18:15:26" - }, - { - "name": "kartik-v/yii2-editable", - "version": "v1.7.4", - "source": { - "type": "git", - "url": "https://github.com/kartik-v/yii2-editable.git", - "reference": "7c25b5bb6b21027eaf11b6ee4bba5c9f00cf04cd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/kartik-v/yii2-editable/zipball/7c25b5bb6b21027eaf11b6ee4bba5c9f00cf04cd", - "reference": "7c25b5bb6b21027eaf11b6ee4bba5c9f00cf04cd", - "shasum": "" - }, - "require": { - "kartik-v/yii2-krajee-base": "~1.7", - "kartik-v/yii2-popover-x": "~1.3" - }, - "type": "yii2-extension", - "autoload": { - "psr-4": { - "kartik\\editable\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Kartik Visweswaran", - "email": "kartikv2@gmail.com", - "homepage": "http://www.krajee.com/" - } - ], - "description": "An enhanced editable widget for Yii 2.0 that allows easy editing of displayed data with numerous configuration possibilities.", - "homepage": "https://github.com/kartik-v/yii2-editable", - "keywords": [ - "bootstrap", - "editable", - "input", - "jquery", - "popover", - "popover-x", - "widget" - ], - "time": "2015-12-27 16:31:06" - }, - { - "name": "kartik-v/yii2-grid", - "version": "v3.1.2", - "source": { - "type": "git", - "url": "https://github.com/kartik-v/yii2-grid.git", - "reference": "f03b9c7cb8276eedd865fb3cad89ff12f2dd33c2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/kartik-v/yii2-grid/zipball/f03b9c7cb8276eedd865fb3cad89ff12f2dd33c2", - "reference": "f03b9c7cb8276eedd865fb3cad89ff12f2dd33c2", - "shasum": "" - }, - "require": { - "kartik-v/yii2-dialog": "~1.0", - "kartik-v/yii2-krajee-base": "~1.7" - }, - "type": "yii2-extension", - "extra": { - "branch-alias": { - "dev-master": "3.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "kartik\\grid\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Kartik Visweswaran", - "email": "kartikv2@gmail.com", - "homepage": "http://www.krajee.com/" - } - ], - "description": "Yii 2 GridView on steroids. Various enhancements and utilities for the Yii 2.0 GridView widget.", - "homepage": "https://github.com/kartik-v/yii2-grid", - "keywords": [ - "extension", - "grid", - "widget", - "yii2" - ], - "time": "2016-08-16 19:21:27" - }, - { - "name": "kartik-v/yii2-krajee-base", - "version": "v1.8.4", - "source": { - "type": "git", - "url": "https://github.com/kartik-v/yii2-krajee-base.git", - "reference": "3115b09aeb15a5e06f38dc16860baf153d9bf70e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/kartik-v/yii2-krajee-base/zipball/3115b09aeb15a5e06f38dc16860baf153d9bf70e", - "reference": "3115b09aeb15a5e06f38dc16860baf153d9bf70e", - "shasum": "" - }, - "require": { - "yiisoft/yii2-bootstrap": "@dev" - }, - "type": "yii2-extension", - "extra": { - "branch-alias": { - "dev-master": "1.8.x-dev" - } - }, - "autoload": { - "psr-4": { - "kartik\\base\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Kartik Visweswaran", - "email": "kartikv2@gmail.com", - "homepage": "http://www.krajee.com/" - } - ], - "description": "Base library and foundation components for all Yii2 Krajee extensions.", - "homepage": "https://github.com/kartik-v/yii2-krajee-base", - "keywords": [ - "base", - "extension", - "foundation", - "krajee", - "widget", - "yii2" - ], - "time": "2016-04-11 09:07:40" - }, - { - "name": "kartik-v/yii2-popover-x", - "version": "v1.3.3", - "source": { - "type": "git", - "url": "https://github.com/kartik-v/yii2-popover-x.git", - "reference": "38f2208cf92f8c4a7758f485575a881cade1970c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/kartik-v/yii2-popover-x/zipball/38f2208cf92f8c4a7758f485575a881cade1970c", - "reference": "38f2208cf92f8c4a7758f485575a881cade1970c", - "shasum": "" - }, - "require": { - "kartik-v/bootstrap-popover-x": "~1.4", - "kartik-v/yii2-krajee-base": "~1.7" - }, - "type": "yii2-extension", - "autoload": { - "psr-4": { - "kartik\\popover\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Kartik Visweswaran", - "email": "kartikv2@gmail.com", - "homepage": "http://www.krajee.com/" - } - ], - "description": "An extended bootstrap 3.0 popover widget which combines both the bootstrap popover and modal features and includes various new styling enhancements.", - "homepage": "https://github.com/kartik-v/yii2-popover-x", - "keywords": [ - "bootstrap", - "extended", - "jquery", - "modal", - "modal-popover", - "popover", - "popover-x" - ], - "time": "2016-01-12 16:59:09" - }, - { - "name": "kartik-v/yii2-tree-manager", - "version": "v1.0.5", - "source": { - "type": "git", - "url": "https://github.com/kartik-v/yii2-tree-manager.git", - "reference": "0fd506de3ef0c73ec8a3f0c9267ed8353f5e9f89" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/kartik-v/yii2-tree-manager/zipball/0fd506de3ef0c73ec8a3f0c9267ed8353f5e9f89", - "reference": "0fd506de3ef0c73ec8a3f0c9267ed8353f5e9f89", - "shasum": "" - }, - "require": { - "creocoder/yii2-nested-sets": "~0.9", - "kartik-v/yii2-widget-activeform": "~1.4" - }, - "type": "yii2-extension", - "autoload": { - "psr-4": { - "kartik\\tree\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Kartik Visweswaran", - "email": "kartikv2@gmail.com", - "homepage": "http://www.krajee.com/" - } - ], - "description": "An enhanced tree management module with tree node selection and manipulation using nested sets.", - "homepage": "https://github.com/kartik-v/yii2-tree-manager", - "keywords": [ - "ajax", - "bootstrap", - "hierarchy", - "jquery", - "krajee", - "nested", - "nestedset", - "set", - "tree", - "treeview" - ], - "time": "2015-12-27 18:48:51" - }, - { - "name": "kartik-v/yii2-widget-activeform", - "version": "v1.4.7", - "source": { - "type": "git", - "url": "https://github.com/kartik-v/yii2-widget-activeform.git", - "reference": "6acc1539c37d731c79a67989409ad76e389fd5f0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/kartik-v/yii2-widget-activeform/zipball/6acc1539c37d731c79a67989409ad76e389fd5f0", - "reference": "6acc1539c37d731c79a67989409ad76e389fd5f0", - "shasum": "" - }, - "require": { - "kartik-v/yii2-krajee-base": "~1.7" - }, - "type": "yii2-extension", - "autoload": { - "psr-4": { - "kartik\\form\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Kartik Visweswaran", - "email": "kartikv2@gmail.com", - "homepage": "http://www.krajee.com/" - } - ], - "description": "Enhanced Yii2 active-form and active-field with full bootstrap styling support (sub repo split from yii2-widgets).", - "homepage": "https://github.com/kartik-v/yii2-widget-activeform", - "keywords": [ - "activefield", - "activeform", - "extension", - "field", - "form", - "widget", - "yii2" - ], - "time": "2015-12-11 19:07:50" - }, - { - "name": "kartik-v/yii2-widget-select2", - "version": "v2.0.8", - "source": { - "type": "git", - "url": "https://github.com/kartik-v/yii2-widget-select2.git", - "reference": "4d03239c1e28ef8d3b96ab7fe360f5cbda34fb69" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/kartik-v/yii2-widget-select2/zipball/4d03239c1e28ef8d3b96ab7fe360f5cbda34fb69", - "reference": "4d03239c1e28ef8d3b96ab7fe360f5cbda34fb69", - "shasum": "" - }, - "require": { - "kartik-v/yii2-krajee-base": "~1.7" - }, - "type": "yii2-extension", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "kartik\\select2\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Kartik Visweswaran", - "email": "kartikv2@gmail.com", - "homepage": "http://www.krajee.com/" - } - ], - "description": "Enhanced Yii2 wrapper for the Select2 jQuery plugin (sub repo split from yii2-widgets).", - "homepage": "https://github.com/kartik-v/yii2-widget-select2", - "keywords": [ - "dropdown", - "extension", - "form", - "jquery", - "plugin", - "select2", - "widget", - "yii2" - ], - "time": "2016-02-17 11:49:30" - }, - { - "name": "lajax/yii2-translate-manager", - "version": "1.5.3", - "source": { - "type": "git", - "url": "https://github.com/lajax/yii2-translate-manager.git", - "reference": "dd7b21f7571e6f5835d8446088764dcdb261024f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/lajax/yii2-translate-manager/zipball/dd7b21f7571e6f5835d8446088764dcdb261024f", - "reference": "dd7b21f7571e6f5835d8446088764dcdb261024f", - "shasum": "" - }, - "require": { - "yiisoft/yii2": "*", - "yiisoft/yii2-bootstrap": "*", - "yiisoft/yii2-jui": "*" - }, - "type": "yii2-extension", - "autoload": { - "psr-4": { - "lajax\\translatemanager\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Lajos Molnar", - "email": "lajax.m@gmail.com" - } - ], - "description": "Online Translate", - "keywords": [ - "extension", - "language", - "module", - "translate", - "yii2" - ], - "time": "2016-04-05 16:56:56" - }, - { - "name": "mikehaertl/php-shellcommand", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/mikehaertl/php-shellcommand.git", - "reference": "c7bbaf2e01a6d6dbf39d54dd077a8f9061a845c2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mikehaertl/php-shellcommand/zipball/c7bbaf2e01a6d6dbf39d54dd077a8f9061a845c2", - "reference": "c7bbaf2e01a6d6dbf39d54dd077a8f9061a845c2", - "shasum": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "mikehaertl\\shellcommand\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Härtl", - "email": "haertl.mike@gmail.com" - } - ], - "description": "An object oriented interface to shell commands", - "keywords": [ - "shell" - ], - "time": "2015-09-22 18:26:51" - }, - { - "name": "pheme/yii2-settings", - "version": "0.4", - "source": { - "type": "git", - "url": "https://github.com/phemellc/yii2-settings.git", - "reference": "186a7123797a5459883043518a563b26bc0fd6f0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phemellc/yii2-settings/zipball/186a7123797a5459883043518a563b26bc0fd6f0", - "reference": "186a7123797a5459883043518a563b26bc0fd6f0", - "shasum": "" - }, - "require": { - "pheme/yii2-toggle-column": "*", - "yiisoft/yii2": ">=2.0.6" - }, - "type": "yii2-extension", - "autoload": { - "psr-4": { - "pheme\\settings\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Aris Karageorgos", - "email": "aris@phe.me" - } - ], - "description": "Yii2 Database settings", - "keywords": [ - "Settings", - "config", - "yii2" - ], - "time": "2016-03-03 05:34:35" - }, - { - "name": "pheme/yii2-toggle-column", - "version": "0.3", - "source": { - "type": "git", - "url": "https://github.com/phemellc/yii2-toggle-column.git", - "reference": "1b210a9c337bd842f80952cb2fe728b99bcad09b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phemellc/yii2-toggle-column/zipball/1b210a9c337bd842f80952cb2fe728b99bcad09b", - "reference": "1b210a9c337bd842f80952cb2fe728b99bcad09b", - "shasum": "" - }, - "require": { - "yiisoft/yii2": "*" - }, - "type": "yii2-extension", - "autoload": { - "psr-4": { - "\\pheme\\grid\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Aris Karageorgos", - "email": "aris@phe.me" - } - ], - "description": "Provides a toggle data column and action", - "keywords": [ - "column", - "extension", - "toggle", - "yii2" - ], - "time": "2016-03-10 03:36:52" - }, - { - "name": "rmrevin/yii2-fontawesome", - "version": "2.14.0", - "source": { - "type": "git", - "url": "https://github.com/rmrevin/yii2-fontawesome.git", - "reference": "baac28412963974940cbfb6b83940b3aa179b0ee" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/rmrevin/yii2-fontawesome/zipball/baac28412963974940cbfb6b83940b3aa179b0ee", - "reference": "baac28412963974940cbfb6b83940b3aa179b0ee", - "shasum": "" - }, - "require": { - "bower-asset/fontawesome": "4.6.*", - "php": ">=5.4.0", - "yiisoft/yii2": "2.0.*" - }, - "type": "yii2-extension", - "extra": { - "asset-installer-paths": { - "npm-asset-library": "vendor/npm", - "bower-asset-library": "vendor/bower" - } - }, - "autoload": { - "psr-4": { - "rmrevin\\yii\\fontawesome\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Revin Roman", - "email": "roman@rmrevin.com", - "homepage": "https://rmrevin.com/" - } - ], - "description": "Asset Bundle for Yii2 with Font Awesome", - "keywords": [ - "asset", - "awesome", - "bundle", - "font", - "yii" - ], - "time": "2016-04-21 11:55:25" - }, - { - "name": "schmunk42/retry", - "version": "0.0.1", - "source": { - "type": "git", - "url": "https://github.com/schmunk42/retry.git", - "reference": "c34c68c9e2a6e0f1bbab44c1dfceb73ba2a270a3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/schmunk42/retry/zipball/c34c68c9e2a6e0f1bbab44c1dfceb73ba2a270a3", - "reference": "c34c68c9e2a6e0f1bbab44c1dfceb73ba2a270a3", - "shasum": "" - }, - "require": { - "php": ">=5.4" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "files": [ - "src/retry.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - } - ], - "description": "A tiny library for retrying failing operations.", - "keywords": [ - "failure" - ], - "time": "2014-09-20 11:10:31" - }, - { - "name": "swiftmailer/swiftmailer", - "version": "v5.4.1", - "source": { - "type": "git", - "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "0697e6aa65c83edf97bb0f23d8763f94e3f11421" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/0697e6aa65c83edf97bb0f23d8763f94e3f11421", - "reference": "0697e6aa65c83edf97bb0f23d8763f94e3f11421", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "mockery/mockery": "~0.9.1,<0.9.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.4-dev" - } - }, - "autoload": { - "files": [ - "lib/swift_required.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Chris Corbyn" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Swiftmailer, free feature-rich PHP mailer", - "homepage": "http://swiftmailer.org", - "keywords": [ - "email", - "mail", - "mailer" - ], - "time": "2015-06-06 14:19:39" - }, - { - "name": "trntv/yii2-aceeditor", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/trntv/yii2-aceeditor.git", - "reference": "ba8cdfe2624f1e0793b0000c8f8ccd6d24b1bb57" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/trntv/yii2-aceeditor/zipball/ba8cdfe2624f1e0793b0000c8f8ccd6d24b1bb57", - "reference": "ba8cdfe2624f1e0793b0000c8f8ccd6d24b1bb57", - "shasum": "" - }, - "require": { - "bower-asset/ace-builds": "~1.1.8", - "yiisoft/yii2": "~2.0" - }, - "type": "yii2-extension", - "autoload": { - "psr-4": { - "trntv\\aceeditor\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Eugine Terentev", - "email": "eugine@terentev.net" - } - ], - "description": "Yii2 ajax.org Ace Editor widget", - "keywords": [ - "aceeditor", - "code editor", - "yii" - ], - "time": "2014-12-18 18:07:28" - }, - { - "name": "vlucas/phpdotenv", - "version": "v2.2.0", - "source": { - "type": "git", - "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "9caf304153dc2288e4970caec6f1f3b3bc205412" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/9caf304153dc2288e4970caec6f1f3b3bc205412", - "reference": "9caf304153dc2288e4970caec6f1f3b3bc205412", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "require-dev": { - "phpunit/phpunit": "^4.8|^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - } - }, - "autoload": { - "psr-4": { - "Dotenv\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD" - ], - "authors": [ - { - "name": "Vance Lucas", - "email": "vance@vancelucas.com", - "homepage": "http://www.vancelucas.com" - } - ], - "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", - "homepage": "http://github.com/vlucas/phpdotenv", - "keywords": [ - "dotenv", - "env", - "environment" - ], - "time": "2015-12-29 15:10:30" - }, - { - "name": "yiisoft/yii2", - "version": "2.0.7", - "source": { - "type": "git", - "url": "https://github.com/yiisoft/yii2-framework.git", - "reference": "f45651582cb853b4326730d9d187a0f7a44a45a3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-framework/zipball/f45651582cb853b4326730d9d187a0f7a44a45a3", - "reference": "f45651582cb853b4326730d9d187a0f7a44a45a3", - "shasum": "" - }, - "require": { - "bower-asset/jquery": "2.2.*@stable | 2.1.*@stable | 1.11.*@stable", - "bower-asset/jquery.inputmask": "~3.2.2", - "bower-asset/punycode": "1.3.*", - "bower-asset/yii2-pjax": "~2.0.1", - "cebe/markdown": "~1.0.0 | ~1.1.0", - "ext-ctype": "*", - "ext-mbstring": "*", - "ezyang/htmlpurifier": "4.6.*", - "lib-pcre": "*", - "php": ">=5.4.0", - "yiisoft/yii2-composer": "~2.0.4" - }, - "bin": [ - "yii" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "yii\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Qiang Xue", - "email": "qiang.xue@gmail.com", - "homepage": "http://www.yiiframework.com/", - "role": "Founder and project lead" - }, - { - "name": "Alexander Makarov", - "email": "sam@rmcreative.ru", - "homepage": "http://rmcreative.ru/", - "role": "Core framework development" - }, - { - "name": "Maurizio Domba", - "homepage": "http://mdomba.info/", - "role": "Core framework development" - }, - { - "name": "Carsten Brandt", - "email": "mail@cebe.cc", - "homepage": "http://cebe.cc/", - "role": "Core framework development" - }, - { - "name": "Timur Ruziev", - "email": "resurtm@gmail.com", - "homepage": "http://resurtm.com/", - "role": "Core framework development" - }, - { - "name": "Paul Klimov", - "email": "klimov.paul@gmail.com", - "role": "Core framework development" - }, - { - "name": "Dmitry Naumenko", - "email": "d.naumenko.a@gmail.com", - "role": "Core framework development" - } - ], - "description": "Yii PHP Framework Version 2", - "homepage": "http://www.yiiframework.com/", - "keywords": [ - "framework", - "yii2" - ], - "time": "2016-02-14 14:45:55" - }, - { - "name": "yiisoft/yii2-authclient", - "version": "2.0.5", - "source": { - "type": "git", - "url": "https://github.com/yiisoft/yii2-authclient.git", - "reference": "22910bfe0000538f5b3ca1102cd3de0b5d14a0e2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-authclient/zipball/22910bfe0000538f5b3ca1102cd3de0b5d14a0e2", - "reference": "22910bfe0000538f5b3ca1102cd3de0b5d14a0e2", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "yiisoft/yii2": ">=2.0.4" - }, - "type": "yii2-extension", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "yii\\authclient\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Paul Klimov", - "email": "klimov.paul@gmail.com" - } - ], - "description": "External authentication via OAuth and OpenID for the Yii framework", - "keywords": [ - "OpenId", - "auth", - "oauth", - "yii2" - ], - "time": "2015-09-23 17:26:02" - }, - { - "name": "yiisoft/yii2-bootstrap", - "version": "2.0.6", - "source": { - "type": "git", - "url": "https://github.com/yiisoft/yii2-bootstrap.git", - "reference": "3fd2b8c950cce79d60e9702d6bcb24eb3c80f6c5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-bootstrap/zipball/3fd2b8c950cce79d60e9702d6bcb24eb3c80f6c5", - "reference": "3fd2b8c950cce79d60e9702d6bcb24eb3c80f6c5", - "shasum": "" - }, - "require": { - "bower-asset/bootstrap": "3.3.* | 3.2.* | 3.1.*", - "yiisoft/yii2": ">=2.0.6" - }, - "type": "yii2-extension", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - }, - "asset-installer-paths": { - "npm-asset-library": "vendor/npm", - "bower-asset-library": "vendor/bower" - } - }, - "autoload": { - "psr-4": { - "yii\\bootstrap\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Qiang Xue", - "email": "qiang.xue@gmail.com" - } - ], - "description": "The Twitter Bootstrap extension for the Yii framework", - "keywords": [ - "bootstrap", - "yii2" - ], - "time": "2016-03-17 03:29:28" - }, - { - "name": "yiisoft/yii2-composer", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/yiisoft/yii2-composer.git", - "reference": "7452fd908a5023b8bb5ea1b123a174ca080de464" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-composer/zipball/7452fd908a5023b8bb5ea1b123a174ca080de464", - "reference": "7452fd908a5023b8bb5ea1b123a174ca080de464", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0" - }, - "type": "composer-plugin", - "extra": { - "class": "yii\\composer\\Plugin", - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "yii\\composer\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Qiang Xue", - "email": "qiang.xue@gmail.com" - } - ], - "description": "The composer plugin for Yii extension installer", - "keywords": [ - "composer", - "extension installer", - "yii2" - ], - "time": "2016-02-06 00:49:24" - }, - { - "name": "yiisoft/yii2-jui", - "version": "2.0.5", - "source": { - "type": "git", - "url": "https://github.com/yiisoft/yii2-jui.git", - "reference": "37991d06ad952eead7bd5bb839c9a352d9b5e34a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-jui/zipball/37991d06ad952eead7bd5bb839c9a352d9b5e34a", - "reference": "37991d06ad952eead7bd5bb839c9a352d9b5e34a", - "shasum": "" - }, - "require": { - "bower-asset/jquery-ui": "1.11.*@stable", - "yiisoft/yii2": ">=2.0.4" - }, - "type": "yii2-extension", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - }, - "asset-installer-paths": { - "npm-asset-library": "vendor/npm", - "bower-asset-library": "vendor/bower" - } - }, - "autoload": { - "psr-4": { - "yii\\jui\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Qiang Xue", - "email": "qiang.xue@gmail.com" - } - ], - "description": "The Jquery UI extension for the Yii framework", - "keywords": [ - "jQuery UI", - "yii2" - ], - "time": "2016-03-17 03:53:41" - }, - { - "name": "yiisoft/yii2-swiftmailer", - "version": "2.0.5", - "source": { - "type": "git", - "url": "https://github.com/yiisoft/yii2-swiftmailer.git", - "reference": "e2c6315caff30a9271a7afad4d684627721dc69a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-swiftmailer/zipball/e2c6315caff30a9271a7afad4d684627721dc69a", - "reference": "e2c6315caff30a9271a7afad4d684627721dc69a", - "shasum": "" - }, - "require": { - "swiftmailer/swiftmailer": "~5.0", - "yiisoft/yii2": ">=2.0.4" - }, - "type": "yii2-extension", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "yii\\swiftmailer\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Paul Klimov", - "email": "klimov.paul@gmail.com" - } - ], - "description": "The SwiftMailer integration for the Yii framework", - "keywords": [ - "email", - "mail", - "mailer", - "swift", - "swiftmailer", - "yii2" - ], - "time": "2016-03-17 03:58:49" - } - ], - "packages-dev": [ - { - "name": "bower-asset/typeahead.js", - "version": "v0.11.1", - "source": { - "type": "git", - "url": "https://github.com/twitter/typeahead.js.git", - "reference": "588440f66559714280628a4f9799f0c4eb880a4a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/twitter/typeahead.js/zipball/588440f66559714280628a4f9799f0c4eb880a4a", - "reference": "588440f66559714280628a4f9799f0c4eb880a4a", - "shasum": "" - }, - "require": { - "bower-asset/jquery": ">=1.7" - }, - "require-dev": { - "bower-asset/jasmine-ajax": "~1.3.1", - "bower-asset/jasmine-jquery": "~1.5.2", - "bower-asset/jquery": "~1.7" - }, - "type": "bower-asset-library", - "extra": { - "bower-asset-main": "dist/typeahead.bundle.js" - } - }, - { - "name": "cebe/js-search", - "version": "0.9.2", - "source": { - "type": "git", - "url": "https://github.com/cebe/js-search.git", - "reference": "db807790032146beb2e5624fc38799d126720200" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cebe/js-search/zipball/db807790032146beb2e5624fc38799d126720200", - "reference": "db807790032146beb2e5624fc38799d126720200", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "bin": [ - "bin/jsindex" - ], - "type": "library", - "autoload": { - "psr-4": { - "cebe\\jssearch\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Carsten Brandt", - "email": "mail@cebe.cc" - } - ], - "description": "A client side search engine for use on static pages.", - "time": "2015-05-06 22:41:18" - }, - { - "name": "cebe/markdown-latex", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/cebe/markdown-latex.git", - "reference": "9ba3e0d629aa3a3e61cc159a999209ab54e3ef43" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cebe/markdown-latex/zipball/9ba3e0d629aa3a3e61cc159a999209ab54e3ef43", - "reference": "9ba3e0d629aa3a3e61cc159a999209ab54e3ef43", - "shasum": "" - }, - "require": { - "cebe/markdown": "~1.0.0", - "mikevanriel/text-to-latex": "~1.0.0", - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "3.7.*" - }, - "bin": [ - "bin/markdown-latex" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "cebe\\markdown\\latex\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Carsten Brandt", - "email": "mail@cebe.cc", - "homepage": "http://cebe.cc/", - "role": "Creator" - } - ], - "description": "A super fast highly extensible markdown parser for PHP that converts markdown files into latex", - "homepage": "https://github.com/cebe/markdown-latex#readme", - "keywords": [ - "extensible", - "fast", - "gfm", - "latex", - "markdown", - "markdown-extra" - ], - "time": "2014-10-20 23:24:21" - }, - { - "name": "cmrcx/phptidy", - "version": "v2.16", - "source": { - "type": "git", - "url": "https://github.com/cmrcx/phptidy.git", - "reference": "7c84e830163e81cd4ac39ddb160cb0c20f89bd1f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cmrcx/phptidy/zipball/7c84e830163e81cd4ac39ddb160cb0c20f89bd1f", - "reference": "7c84e830163e81cd4ac39ddb160cb0c20f89bd1f", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=5.0" - }, - "suggest": { - "ext-mbstring": "*" - }, - "bin": [ - "phptidy" - ], - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Magnus Rosenbaum", - "email": "phptidy@cmr.cx", - "homepage": "http://cmr.cx", - "role": "Developer" - } - ], - "description": "PHP code formatter", - "homepage": "https://github.com/cmrcx/phptidy", - "time": "2015-10-27 09:29:21" - }, - { - "name": "dmstr/yii2-cms-dev-metapackage", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/dmstr/yii2-cms-dev-metapackage.git", - "reference": "ba46557bd34bbfbc167762b01c40bf2cbad75c98" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dmstr/yii2-cms-dev-metapackage/zipball/ba46557bd34bbfbc167762b01c40bf2cbad75c98", - "reference": "ba46557bd34bbfbc167762b01c40bf2cbad75c98", - "shasum": "" - }, - "require": { - "fabpot/php-cs-fixer": "1.* | 2.*", - "schmunk42/yii2-giiant": "~0.6.2 | ~0.7", - "schmunk42/yii2-markdocs-module": "~0.3", - "yiisoft/yii2-apidoc": "2.*", - "yiisoft/yii2-codeception": "2.*", - "yiisoft/yii2-coding-standards": "2.*", - "yiisoft/yii2-debug": "2.*", - "yiisoft/yii2-faker": "2.*", - "yiisoft/yii2-gii": "2.*" - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Tobias Munk", - "email": "tobias@diemeisterei.de" - } - ], - "description": "Content Management Development Extensions for Phundament 4 (Yii 2.0 Framework)", - "time": "2016-04-04 06:45:27" - }, - { - "name": "fabpot/php-cs-fixer", - "version": "v1.11.2", - "source": { - "type": "git", - "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", - "reference": "41f70154642ec0f9ea9ea9c290943f3b5dfa76fc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/41f70154642ec0f9ea9ea9c290943f3b5dfa76fc", - "reference": "41f70154642ec0f9ea9ea9c290943f3b5dfa76fc", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=5.3.6", - "sebastian/diff": "~1.1", - "symfony/console": "~2.3|~3.0", - "symfony/event-dispatcher": "~2.1|~3.0", - "symfony/filesystem": "~2.1|~3.0", - "symfony/finder": "~2.1|~3.0", - "symfony/process": "~2.3|~3.0", - "symfony/stopwatch": "~2.5|~3.0" - }, - "require-dev": { - "satooshi/php-coveralls": "0.7.*@dev" - }, - "bin": [ - "php-cs-fixer" - ], - "type": "application", - "autoload": { - "psr-4": { - "Symfony\\CS\\": "Symfony/CS/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Dariusz Rumiński", - "email": "dariusz.ruminski@gmail.com" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "A tool to automatically fix PHP code style", - "time": "2016-02-26 07:37:29" - }, - { - "name": "fzaninotto/faker", - "version": "v1.5.0", - "source": { - "type": "git", - "url": "https://github.com/fzaninotto/Faker.git", - "reference": "d0190b156bcca848d401fb80f31f504f37141c8d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/d0190b156bcca848d401fb80f31f504f37141c8d", - "reference": "d0190b156bcca848d401fb80f31f504f37141c8d", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~1.5" - }, - "suggest": { - "ext-intl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.5.x-dev" - } - }, - "autoload": { - "psr-4": { - "Faker\\": "src/Faker/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "François Zaninotto" - } - ], - "description": "Faker is a PHP library that generates fake data for you.", - "keywords": [ - "data", - "faker", - "fixtures" - ], - "time": "2015-05-29 06:29:14" - }, - { - "name": "mikevanriel/text-to-latex", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/mvriel/TextToLatex.git", - "reference": "c9f3a4d6b89f9449782455c848d5fa3dd0e216ba" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mvriel/TextToLatex/zipball/c9f3a4d6b89f9449782455c848d5fa3dd0e216ba", - "reference": "c9f3a4d6b89f9449782455c848d5fa3dd0e216ba", - "shasum": "" - }, - "require-dev": { - "phpunit/phpunit": "~3.7" - }, - "type": "library", - "autoload": { - "psr-0": { - "MikeVanRiel": [ - "src/", - "tests/unit/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A converter class that converts normal ASCII text to valid LaTeX", - "time": "2015-12-13 07:33:35" - }, - { - "name": "nikic/php-parser", - "version": "v0.9.5", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "ef70767475434bdb3615b43c327e2cae17ef12eb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/ef70767475434bdb3615b43c327e2cae17ef12eb", - "reference": "ef70767475434bdb3615b43c327e2cae17ef12eb", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=5.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.9-dev" - } - }, - "autoload": { - "psr-0": { - "PHPParser": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "time": "2014-07-23 18:24:17" - }, - { - "name": "phpdocumentor/reflection", - "version": "1.0.7", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/Reflection.git", - "reference": "fc40c3f604ac2287eb5c314174d5109b2c699372" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/Reflection/zipball/fc40c3f604ac2287eb5c314174d5109b2c699372", - "reference": "fc40c3f604ac2287eb5c314174d5109b2c699372", - "shasum": "" - }, - "require": { - "nikic/php-parser": "~0.9.4", - "php": ">=5.3.3", - "phpdocumentor/reflection-docblock": "~2.0", - "psr/log": "~1.0" - }, - "require-dev": { - "behat/behat": "~2.4", - "mockery/mockery": "~0.8", - "phpunit/phpunit": "~4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "phpDocumentor": [ - "src/", - "tests/unit/", - "tests/mocks/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Reflection library to do Static Analysis for PHP Projects", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "time": "2014-11-14 11:43:04" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8", - "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "suggest": { - "dflydev/markdown": "~1.0", - "erusev/parsedown": "~1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "phpDocumentor": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "mike.vanriel@naenius.com" - } - ], - "time": "2015-02-03 12:10:50" - }, - { - "name": "phpspec/php-diff", - "version": "v1.1.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/php-diff.git", - "reference": "0464787bfa7cd13576c5a1e318709768798bec6a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/php-diff/zipball/0464787bfa7cd13576c5a1e318709768798bec6a", - "reference": "0464787bfa7cd13576c5a1e318709768798bec6a", - "shasum": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "Diff": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Chris Boulton", - "homepage": "http://github.com/chrisboulton" - } - ], - "description": "A comprehensive library for generating differences between two hashable objects (strings or arrays).", - "time": "2016-04-07 12:29:16" - }, - { - "name": "psr/log", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b", - "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b", - "shasum": "" - }, - "type": "library", - "autoload": { - "psr-0": { - "Psr\\Log\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "time": "2012-12-21 11:40:51" - }, - { - "name": "schmunk42/yii2-giiant", - "version": "0.7.2", - "source": { - "type": "git", - "url": "https://github.com/schmunk42/yii2-giiant.git", - "reference": "da1bb5b40aa4b4e13ff542ce7f7b3d142a02fb29" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/schmunk42/yii2-giiant/zipball/da1bb5b40aa4b4e13ff542ce7f7b3d142a02fb29", - "reference": "da1bb5b40aa4b4e13ff542ce7f7b3d142a02fb29", - "shasum": "" - }, - "require": { - "cmrcx/phptidy": "2.*", - "dmstr/yii2-bootstrap": "*", - "dmstr/yii2-db": "*", - "dmstr/yii2-helpers": "*", - "yiisoft/yii2": "~2.0.4", - "yiisoft/yii2-gii": "~2.0.4" - }, - "type": "yii2-extension", - "extra": { - "bootstrap": "schmunk42\\giiant\\Bootstrap", - "asset-installer-paths": { - "npm-asset-library": "vendor/npm", - "bower-asset-library": "vendor/bower" - } - }, - "autoload": { - "psr-4": { - "schmunk42\\giiant\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Tobias Munk", - "email": "schmunk@usrbin.de", - "homepage": "http://www.usrbin.de" - } - ], - "description": "Gii CRUD generator for Yii 2 Framework", - "homepage": "https://github.com/schmunk42/yii2-giiant", - "keywords": [ - "crud", - "gii", - "yii2" - ], - "time": "2016-04-12 23:22:21" - }, - { - "name": "schmunk42/yii2-markdocs-module", - "version": "0.3.0", - "source": { - "type": "git", - "url": "https://github.com/schmunk42/yii2-markdocs-module.git", - "reference": "db4105721679c585426aaba21aaa6e5d04f35be1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/schmunk42/yii2-markdocs-module/zipball/db4105721679c585426aaba21aaa6e5d04f35be1", - "reference": "db4105721679c585426aaba21aaa6e5d04f35be1", - "shasum": "" - }, - "require": { - "pheme/yii2-settings": "~0.3", - "yiisoft/yii2": "*" - }, - "type": "yii2-extension", - "autoload": { - "psr-4": { - "schmunk42\\markdocs\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Tobias Munk", - "email": "schmunk@usrbin.de" - } - ], - "description": "Renders markdown files from local folder as views", - "keywords": [ - "extension", - "yii2" - ], - "time": "2015-12-22 20:50:40" - }, - { - "name": "scrivo/highlight.php", - "version": "v8.9.1", - "source": { - "type": "git", - "url": "https://github.com/scrivo/highlight.php.git", - "reference": "d861aee53999963aed4b742cfe21181bec178f35" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/scrivo/highlight.php/zipball/d861aee53999963aed4b742cfe21181bec178f35", - "reference": "d861aee53999963aed4b742cfe21181bec178f35", - "shasum": "" - }, - "type": "library", - "autoload": { - "psr-0": { - "Highlight\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Server side syntax highlighter that supports over 90 languages. It's a PHP port of highlight.js", - "keywords": [ - "code", - "highlight", - "highlight.js", - "highlight.php", - "syntax" - ], - "time": "2015-12-31 20:33:22" - }, - { - "name": "sebastian/diff", - "version": "1.4.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff" - ], - "time": "2015-12-08 07:14:41" - }, - { - "name": "squizlabs/php_codesniffer", - "version": "2.6.0", - "source": { - "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "1bcdf03b068a530ac1962ce671dead356eeba43b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/1bcdf03b068a530ac1962ce671dead356eeba43b", - "reference": "1bcdf03b068a530ac1962ce671dead356eeba43b", - "shasum": "" - }, - "require": { - "ext-simplexml": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": ">=5.1.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "bin": [ - "scripts/phpcs", - "scripts/phpcbf" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "autoload": { - "classmap": [ - "CodeSniffer.php", - "CodeSniffer/CLI.php", - "CodeSniffer/Exception.php", - "CodeSniffer/File.php", - "CodeSniffer/Fixer.php", - "CodeSniffer/Report.php", - "CodeSniffer/Reporting.php", - "CodeSniffer/Sniff.php", - "CodeSniffer/Tokens.php", - "CodeSniffer/Reports/", - "CodeSniffer/Tokenizers/", - "CodeSniffer/DocGenerators/", - "CodeSniffer/Standards/AbstractPatternSniff.php", - "CodeSniffer/Standards/AbstractScopeSniff.php", - "CodeSniffer/Standards/AbstractVariableSniff.php", - "CodeSniffer/Standards/IncorrectPatternException.php", - "CodeSniffer/Standards/Generic/Sniffs/", - "CodeSniffer/Standards/MySource/Sniffs/", - "CodeSniffer/Standards/PEAR/Sniffs/", - "CodeSniffer/Standards/PSR1/Sniffs/", - "CodeSniffer/Standards/PSR2/Sniffs/", - "CodeSniffer/Standards/Squiz/Sniffs/", - "CodeSniffer/Standards/Zend/Sniffs/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Greg Sherwood", - "role": "lead" - } - ], - "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "http://www.squizlabs.com/php-codesniffer", - "keywords": [ - "phpcs", - "standards" - ], - "time": "2016-04-03 22:58:34" - }, - { - "name": "symfony/console", - "version": "v3.0.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "6b1175135bc2a74c08a28d89761272de8beed8cd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/6b1175135bc2a74c08a28d89761272de8beed8cd", - "reference": "6b1175135bc2a74c08a28d89761272de8beed8cd", - "shasum": "" - }, - "require": { - "php": ">=5.5.9", - "symfony/polyfill-mbstring": "~1.0" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/event-dispatcher": "~2.8|~3.0", - "symfony/process": "~2.8|~3.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/process": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Console Component", - "homepage": "https://symfony.com", - "time": "2016-03-16 17:00:50" - }, - { - "name": "symfony/event-dispatcher", - "version": "v3.0.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "9002dcf018d884d294b1ef20a6f968efc1128f39" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9002dcf018d884d294b1ef20a6f968efc1128f39", - "reference": "9002dcf018d884d294b1ef20a6f968efc1128f39", - "shasum": "" - }, - "require": { - "php": ">=5.5.9" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0", - "symfony/dependency-injection": "~2.8|~3.0", - "symfony/expression-language": "~2.8|~3.0", - "symfony/stopwatch": "~2.8|~3.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony EventDispatcher Component", - "homepage": "https://symfony.com", - "time": "2016-03-10 10:34:12" - }, - { - "name": "symfony/filesystem", - "version": "v3.0.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "f82499a459dcade2ea56df94cc58b19c8bde3d20" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/f82499a459dcade2ea56df94cc58b19c8bde3d20", - "reference": "f82499a459dcade2ea56df94cc58b19c8bde3d20", - "shasum": "" - }, - "require": { - "php": ">=5.5.9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Filesystem Component", - "homepage": "https://symfony.com", - "time": "2016-03-27 10:24:39" - }, - { - "name": "symfony/finder", - "version": "v3.0.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "c54e407b35bc098916704e9fd090da21da4c4f52" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/c54e407b35bc098916704e9fd090da21da4c4f52", - "reference": "c54e407b35bc098916704e9fd090da21da4c4f52", - "shasum": "" - }, - "require": { - "php": ">=5.5.9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Finder Component", - "homepage": "https://symfony.com", - "time": "2016-03-10 11:13:05" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.1.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "1289d16209491b584839022f29257ad859b8532d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/1289d16209491b584839022f29257ad859b8532d", - "reference": "1289d16209491b584839022f29257ad859b8532d", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "time": "2016-01-20 09:13:37" - }, - { - "name": "symfony/process", - "version": "v3.0.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "e6f1f98bbd355d209a992bfff45e7edfbd4a0776" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/e6f1f98bbd355d209a992bfff45e7edfbd4a0776", - "reference": "e6f1f98bbd355d209a992bfff45e7edfbd4a0776", - "shasum": "" - }, - "require": { - "php": ">=5.5.9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Process Component", - "homepage": "https://symfony.com", - "time": "2016-03-30 10:41:14" - }, - { - "name": "symfony/stopwatch", - "version": "v3.0.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/stopwatch.git", - "reference": "6015187088421e9499d8f8316bdb396f8b806c06" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/6015187088421e9499d8f8316bdb396f8b806c06", - "reference": "6015187088421e9499d8f8316bdb396f8b806c06", - "shasum": "" - }, - "require": { - "php": ">=5.5.9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Stopwatch\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Stopwatch Component", - "homepage": "https://symfony.com", - "time": "2016-03-04 07:55:57" - }, - { - "name": "yiisoft/yii2-apidoc", - "version": "2.0.5", - "source": { - "type": "git", - "url": "https://github.com/yiisoft/yii2-apidoc.git", - "reference": "79d9575c241d54065fd5c489039ba30c0319608e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-apidoc/zipball/79d9575c241d54065fd5c489039ba30c0319608e", - "reference": "79d9575c241d54065fd5c489039ba30c0319608e", - "shasum": "" - }, - "require": { - "cebe/js-search": "*", - "cebe/markdown": "~1.0.0 | ~1.1.0", - "cebe/markdown-latex": "~1.0.0", - "nikic/php-parser": "0.9.*", - "phpdocumentor/reflection": "^1.0.3", - "phpdocumentor/reflection-docblock": "^2.0.1", - "scrivo/highlight.php": "~8.0", - "yiisoft/yii2": ">=2.0.4", - "yiisoft/yii2-bootstrap": "*" - }, - "bin": [ - "apidoc" - ], - "type": "yii2-extension", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - }, - "asset-installer-paths": { - "npm-asset-library": "vendor/npm", - "bower-asset-library": "vendor/bower" - } - }, - "autoload": { - "psr-4": { - "yii\\apidoc\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Carsten Brandt", - "email": "mail@cebe.cc" - } - ], - "description": "API Documentation generator for the Yii framework 2.0", - "keywords": [ - "api", - "apidoc", - "documentation", - "phpdoc", - "yii2" - ], - "time": "2016-03-17 04:25:50" - }, - { - "name": "yiisoft/yii2-codeception", - "version": "2.0.5", - "source": { - "type": "git", - "url": "https://github.com/yiisoft/yii2-codeception.git", - "reference": "c916a36d09fc128b05a374e7922bc56854334d56" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-codeception/zipball/c916a36d09fc128b05a374e7922bc56854334d56", - "reference": "c916a36d09fc128b05a374e7922bc56854334d56", - "shasum": "" - }, - "require": { - "yiisoft/yii2": ">=2.0.4" - }, - "type": "yii2-extension", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "yii\\codeception\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Mark Jebri", - "email": "mark.github@yandex.ru" - } - ], - "description": "The Codeception integration for the Yii framework", - "keywords": [ - "codeception", - "yii2" - ], - "time": "2016-03-17 03:41:26" - }, - { - "name": "yiisoft/yii2-coding-standards", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/yiisoft/yii2-coding-standards.git", - "reference": "5c4fa33f645927f705b5f1fab7ce836f80eb71fc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-coding-standards/zipball/5c4fa33f645927f705b5f1fab7ce836f80eb71fc", - "reference": "5c4fa33f645927f705b5f1fab7ce836f80eb71fc", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "squizlabs/php_codesniffer": "*" - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Qiang Xue", - "email": "qiang.xue@gmail.com", - "homepage": "http://www.yiiframework.com/", - "role": "Founder and project lead" - }, - { - "name": "Alexander Makarov", - "email": "sam@rmcreative.ru", - "homepage": "http://rmcreative.ru/", - "role": "Core framework development" - }, - { - "name": "Maurizio Domba", - "homepage": "http://mdomba.info/", - "role": "Core framework development" - }, - { - "name": "Carsten Brandt", - "email": "mail@cebe.cc", - "homepage": "http://cebe.cc/", - "role": "Core framework development" - }, - { - "name": "Timur Ruziev", - "email": "resurtm@gmail.com", - "homepage": "http://resurtm.com/", - "role": "Core framework development" - }, - { - "name": "Paul Klimov", - "email": "klimov.paul@gmail.com", - "role": "Core framework development" - } - ], - "description": "Yii PHP Framework Version 2 - Coding standard tools", - "homepage": "http://www.yiiframework.com/", - "keywords": [ - "codesniffer", - "framework", - "yii" - ], - "time": "2015-04-03 06:38:48" - }, - { - "name": "yiisoft/yii2-debug", - "version": "2.0.6", - "source": { - "type": "git", - "url": "https://github.com/yiisoft/yii2-debug.git", - "reference": "55ed2e853ed8050a34415f63a4da84f88a56f895" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-debug/zipball/55ed2e853ed8050a34415f63a4da84f88a56f895", - "reference": "55ed2e853ed8050a34415f63a4da84f88a56f895", - "shasum": "" - }, - "require": { - "yiisoft/yii2": ">=2.0.4", - "yiisoft/yii2-bootstrap": "*" - }, - "type": "yii2-extension", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "yii\\debug\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Qiang Xue", - "email": "qiang.xue@gmail.com" - } - ], - "description": "The debugger extension for the Yii framework", - "keywords": [ - "debug", - "debugger", - "yii2" - ], - "time": "2016-03-17 03:50:19" - }, - { - "name": "yiisoft/yii2-faker", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/yiisoft/yii2-faker.git", - "reference": "b88ca69ee226a3610b2c26c026c3203d7ac50f6c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-faker/zipball/b88ca69ee226a3610b2c26c026c3203d7ac50f6c", - "reference": "b88ca69ee226a3610b2c26c026c3203d7ac50f6c", - "shasum": "" - }, - "require": { - "fzaninotto/faker": "*", - "yiisoft/yii2": "*" - }, - "type": "yii2-extension", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "yii\\faker\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Mark Jebri", - "email": "mark.github@yandex.ru" - } - ], - "description": "Fixture generator. The Faker integration for the Yii framework.", - "keywords": [ - "Fixture", - "faker", - "yii2" - ], - "time": "2015-03-01 06:22:44" - }, - { - "name": "yiisoft/yii2-gii", - "version": "2.0.5", - "source": { - "type": "git", - "url": "https://github.com/yiisoft/yii2-gii.git", - "reference": "1bd6df6804ca077ec022587905a0d43eb286f507" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-gii/zipball/1bd6df6804ca077ec022587905a0d43eb286f507", - "reference": "1bd6df6804ca077ec022587905a0d43eb286f507", - "shasum": "" - }, - "require": { - "bower-asset/typeahead.js": "0.10.* | ~0.11.0", - "phpspec/php-diff": ">=1.0.2", - "yiisoft/yii2": ">=2.0.4", - "yiisoft/yii2-bootstrap": "~2.0" - }, - "type": "yii2-extension", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - }, - "asset-installer-paths": { - "npm-asset-library": "vendor/npm", - "bower-asset-library": "vendor/bower" - } - }, - "autoload": { - "psr-4": { - "yii\\gii\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Qiang Xue", - "email": "qiang.xue@gmail.com" - } - ], - "description": "The Gii extension for the Yii framework", - "keywords": [ - "code generator", - "gii", - "yii2" - ], - "time": "2016-03-18 14:09:46" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": [], - "platform-dev": [] -} diff --git a/tests/_config/local.php b/tests/_config/local.php deleted file mode 100644 index 93f23d93..00000000 --- a/tests/_config/local.php +++ /dev/null @@ -1,64 +0,0 @@ - [ - 'class' => 'app\modules\sakila\Module', - 'layout' => '@admin-views/layouts/main', - ], - 'backend2' => [ - 'class' => 'app\modules\backend\Module', - 'layout' => '@admin-views/layouts/main', - ] - ]; - break; - case 'employees': - $giiantTestModule = [ - 'employees' => [ - 'class' => 'app\modules\employees\Module', - 'layout' => '@admin-views/layouts/main', - ] - ]; - break; - - default: - $giiantTestModule = [ - getenv('GIIANT_TEST_DB') => [ - 'class' => 'app\modules\\'.getenv('GIIANT_TEST_DB').'\Module', - 'layout' => '@admin-views/layouts/main', - ] - ]; - -} - -// TODO: add note to dependencies for CRUDs to docs -$giiantTestModule['gridview'] = ['class' => 'kartik\grid\Module']; - -return [ - 'aliases' => [ - '@tests' => '@vendor/schmunk42/yii2-giiant/tests', - '@common' => '@app/common', - '@backend' => '@app/modules/backend' - ], - 'components' => [ - 'cache' => [ - 'class' => 'yii\caching\ApcCache', - ], - 'db' => [ - 'class' => 'yii\db\Connection', - 'dsn' => getenv('DATABASE_DSN_BASE').';dbname='.getenv('GIIANT_TEST_DB'), // DATABASE_DSN_DB - 'username' => getenv('DATABASE_USER'), - 'password' => getenv('DATABASE_PASSWORD'), - 'charset' => 'utf8', - 'tablePrefix' => getenv('DATABASE_TABLE_PREFIX'), - 'enableSchemaCache' => true, - ], - ], - 'modules' => (php_sapi_name() == 'cli') ? [] : $giiantTestModule, - 'params' => [ - 'yii.migrations' => [ - '@vendor/schmunk42/yii2-giiant/tests/_migrations' - ] - ] -]; \ No newline at end of file diff --git a/tests/_helpers/_generated/AcceptanceTesterActions.php b/tests/_helpers/_generated/AcceptanceTesterActions.php deleted file mode 100644 index 8fc95f10..00000000 --- a/tests/_helpers/_generated/AcceptanceTesterActions.php +++ /dev/null @@ -1,2685 +0,0 @@ -getScenario()->runStep(new \Codeception\Step\Action('debugWebDriverLogs', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Changes the subdomain for the 'url' configuration parameter. - * Does not open a page; use `amOnPage` for that. - * - * ``` php - * amOnSubdomain('user'); - * $I->amOnPage('/'); - * // moves to http://user.mysite.com/ - * ?> - * ``` - * - * @param $subdomain - * - * @return mixed - * @see \Codeception\Module\WebDriver::amOnSubdomain() - */ - public function amOnSubdomain($subdomain) { - return $this->getScenario()->runStep(new \Codeception\Step\Condition('amOnSubdomain', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Takes a screenshot of the current window and saves it to `tests/_output/debug`. - * - * ``` php - * amOnPage('/user/edit'); - * $I->makeScreenshot('edit_page'); - * // saved to: tests/_output/debug/edit_page.png - * ?> - * ``` - * - * @param $name - * @see \Codeception\Module\WebDriver::makeScreenshot() - */ - public function makeScreenshot($name) { - return $this->getScenario()->runStep(new \Codeception\Step\Action('makeScreenshot', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Resize the current window. - * - * ``` php - * resizeWindow(800, 600); - * - * ``` - * - * @param int $width - * @param int $height - * @see \Codeception\Module\WebDriver::resizeWindow() - */ - public function resizeWindow($width, $height) { - return $this->getScenario()->runStep(new \Codeception\Step\Action('resizeWindow', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that a cookie with the given name is set. - * You can set additional cookie params like `domain`, `path` as array passed in last argument. - * - * ``` php - * seeCookie('PHPSESSID'); - * ?> - * ``` - * - * @param $cookie - * @param array $params - * @return mixed - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::seeCookie() - */ - public function canSeeCookie($cookie, $params = null) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeCookie', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that a cookie with the given name is set. - * You can set additional cookie params like `domain`, `path` as array passed in last argument. - * - * ``` php - * seeCookie('PHPSESSID'); - * ?> - * ``` - * - * @param $cookie - * @param array $params - * @return mixed - * @see \Codeception\Module\WebDriver::seeCookie() - */ - public function seeCookie($cookie, $params = null) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeCookie', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that there isn't a cookie with the given name. - * You can set additional cookie params like `domain`, `path` as array passed in last argument. - * - * @param $cookie - * - * @param array $params - * @return mixed - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::dontSeeCookie() - */ - public function cantSeeCookie($cookie, $params = null) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeCookie', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that there isn't a cookie with the given name. - * You can set additional cookie params like `domain`, `path` as array passed in last argument. - * - * @param $cookie - * - * @param array $params - * @return mixed - * @see \Codeception\Module\WebDriver::dontSeeCookie() - */ - public function dontSeeCookie($cookie, $params = null) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeCookie', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Sets a cookie with the given name and value. - * You can set additional cookie params like `domain`, `path`, `expires`, `secure` in array passed as last argument. - * - * ``` php - * setCookie('PHPSESSID', 'el4ukv0kqbvoirg7nkp4dncpk3'); - * ?> - * ``` - * - * @param $name - * @param $val - * @param array $params - * - * @return mixed - * @see \Codeception\Module\WebDriver::setCookie() - */ - public function setCookie($cookie, $value, $params = null) { - return $this->getScenario()->runStep(new \Codeception\Step\Action('setCookie', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Unsets cookie with the given name. - * You can set additional cookie params like `domain`, `path` in array passed as last argument. - * - * @param $cookie - * - * @param array $params - * @return mixed - * @see \Codeception\Module\WebDriver::resetCookie() - */ - public function resetCookie($cookie, $params = null) { - return $this->getScenario()->runStep(new \Codeception\Step\Action('resetCookie', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Grabs a cookie value. - * You can set additional cookie params like `domain`, `path` in array passed as last argument. - * - * @param $cookie - * - * @param array $params - * @return mixed - * @see \Codeception\Module\WebDriver::grabCookie() - */ - public function grabCookie($cookie, $params = null) { - return $this->getScenario()->runStep(new \Codeception\Step\Action('grabCookie', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Open web page at the given absolute URL and sets its hostname as the base host. - * - * ``` php - * amOnUrl('http://codeception.com'); - * $I->amOnPage('/quickstart'); // moves to http://codeception.com/quickstart - * ?> - * ``` - * @see \Codeception\Module\WebDriver::amOnUrl() - */ - public function amOnUrl($url) { - return $this->getScenario()->runStep(new \Codeception\Step\Condition('amOnUrl', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Opens the page for the given relative URI. - * - * ``` php - * amOnPage('/'); - * // opens /register page - * $I->amOnPage('/register'); - * ``` - * - * @param $page - * @see \Codeception\Module\WebDriver::amOnPage() - */ - public function amOnPage($page) { - return $this->getScenario()->runStep(new \Codeception\Step\Condition('amOnPage', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the current page contains the given string (case insensitive). - * - * You can specify a specific HTML element (via CSS or XPath) as the second - * parameter to only search within that element. - * - * ``` php - * see('Logout'); // I can suppose user is logged in - * $I->see('Sign Up', 'h1'); // I can suppose it's a signup page - * $I->see('Sign Up', '//body/h1'); // with XPath - * ``` - * - * Note that the search is done after stripping all HTML tags from the body, - * so `$I->see('strong')` will return true for strings like: - * - * - `

I am Stronger than thou

` - * - `` - * - * But will *not* be true for strings like: - * - * - `Home` - * - `
Home` - * - `` - * - * For checking the raw source code, use `seeInSource()`. - * - * @param $text - * @param null $selector - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::see() - */ - public function canSee($text, $selector = null) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('see', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the current page contains the given string (case insensitive). - * - * You can specify a specific HTML element (via CSS or XPath) as the second - * parameter to only search within that element. - * - * ``` php - * see('Logout'); // I can suppose user is logged in - * $I->see('Sign Up', 'h1'); // I can suppose it's a signup page - * $I->see('Sign Up', '//body/h1'); // with XPath - * ``` - * - * Note that the search is done after stripping all HTML tags from the body, - * so `$I->see('strong')` will return true for strings like: - * - * - `

I am Stronger than thou

` - * - `` - * - * But will *not* be true for strings like: - * - * - `Home` - * - `
Home` - * - `` - * - * For checking the raw source code, use `seeInSource()`. - * - * @param $text - * @param null $selector - * @see \Codeception\Module\WebDriver::see() - */ - public function see($text, $selector = null) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('see', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the current page doesn't contain the text specified (case insensitive). - * Give a locator as the second parameter to match a specific region. - * - * ```php - * dontSee('Login'); // I can suppose user is already logged in - * $I->dontSee('Sign Up','h1'); // I can suppose it's not a signup page - * $I->dontSee('Sign Up','//body/h1'); // with XPath - * ``` - * - * Note that the search is done after stripping all HTML tags from the body, - * so `$I->dontSee('strong')` will fail on strings like: - * - * - `

I am Stronger than thou

` - * - `` - * - * But will ignore strings like: - * - * - `Home` - * - `
Home` - * - `` - * - * For checking the raw source code, use `seeInSource()`. - * - * @param $text - * @param null $selector - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::dontSee() - */ - public function cantSee($text, $selector = null) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSee', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the current page doesn't contain the text specified (case insensitive). - * Give a locator as the second parameter to match a specific region. - * - * ```php - * dontSee('Login'); // I can suppose user is already logged in - * $I->dontSee('Sign Up','h1'); // I can suppose it's not a signup page - * $I->dontSee('Sign Up','//body/h1'); // with XPath - * ``` - * - * Note that the search is done after stripping all HTML tags from the body, - * so `$I->dontSee('strong')` will fail on strings like: - * - * - `

I am Stronger than thou

` - * - `` - * - * But will ignore strings like: - * - * - `Home` - * - `
Home` - * - `` - * - * For checking the raw source code, use `seeInSource()`. - * - * @param $text - * @param null $selector - * @see \Codeception\Module\WebDriver::dontSee() - */ - public function dontSee($text, $selector = null) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSee', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the current page contains the given string in its - * raw source code. - * - * ``` php - * seeInSource('

Green eggs & ham

'); - * ``` - * - * @param $raw - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::seeInSource() - */ - public function canSeeInSource($raw) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeInSource', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the current page contains the given string in its - * raw source code. - * - * ``` php - * seeInSource('

Green eggs & ham

'); - * ``` - * - * @param $raw - * @see \Codeception\Module\WebDriver::seeInSource() - */ - public function seeInSource($raw) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeInSource', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the current page contains the given string in its - * raw source code. - * - * ```php - * dontSeeInSource('

Green eggs & ham

'); - * ``` - * - * @param $raw - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::dontSeeInSource() - */ - public function cantSeeInSource($raw) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeInSource', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the current page contains the given string in its - * raw source code. - * - * ```php - * dontSeeInSource('

Green eggs & ham

'); - * ``` - * - * @param $raw - * @see \Codeception\Module\WebDriver::dontSeeInSource() - */ - public function dontSeeInSource($raw) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeInSource', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the page source contains the given string. - * - * ```php - * seeInPageSource('getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeInPageSource', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the page source contains the given string. - * - * ```php - * seeInPageSource('getScenario()->runStep(new \Codeception\Step\Assertion('seeInPageSource', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the page source doesn't contain the given string. - * - * @param $text - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::dontSeeInPageSource() - */ - public function cantSeeInPageSource($text) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeInPageSource', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the page source doesn't contain the given string. - * - * @param $text - * @see \Codeception\Module\WebDriver::dontSeeInPageSource() - */ - public function dontSeeInPageSource($text) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeInPageSource', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Perform a click on a link or a button, given by a locator. - * If a fuzzy locator is given, the page will be searched for a button, link, or image matching the locator string. - * For buttons, the "value" attribute, "name" attribute, and inner text are searched. - * For links, the link text is searched. - * For images, the "alt" attribute and inner text of any parent links are searched. - * - * The second parameter is a context (CSS or XPath locator) to narrow the search. - * - * Note that if the locator matches a button of type `submit`, the form will be submitted. - * - * ``` php - * click('Logout'); - * // button of form - * $I->click('Submit'); - * // CSS button - * $I->click('#form input[type=submit]'); - * // XPath - * $I->click('//form/*[@type=submit]'); - * // link in context - * $I->click('Logout', '#nav'); - * // using strict locator - * $I->click(['link' => 'Login']); - * ?> - * ``` - * - * @param $link - * @param $context - * @see \Codeception\Module\WebDriver::click() - */ - public function click($link, $context = null) { - return $this->getScenario()->runStep(new \Codeception\Step\Action('click', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that there's a link with the specified text. - * Give a full URL as the second parameter to match links with that exact URL. - * - * ``` php - * seeLink('Logout'); // matches Logout - * $I->seeLink('Logout','/logout'); // matches Logout - * ?> - * ``` - * - * @param $text - * @param null $url - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::seeLink() - */ - public function canSeeLink($text, $url = null) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeLink', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that there's a link with the specified text. - * Give a full URL as the second parameter to match links with that exact URL. - * - * ``` php - * seeLink('Logout'); // matches Logout - * $I->seeLink('Logout','/logout'); // matches Logout - * ?> - * ``` - * - * @param $text - * @param null $url - * @see \Codeception\Module\WebDriver::seeLink() - */ - public function seeLink($text, $url = null) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeLink', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the page doesn't contain a link with the given string. - * If the second parameter is given, only links with a matching "href" attribute will be checked. - * - * ``` php - * dontSeeLink('Logout'); // I suppose user is not logged in - * $I->dontSeeLink('Checkout now', '/store/cart.php'); - * ?> - * ``` - * - * @param $text - * @param null $url - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::dontSeeLink() - */ - public function cantSeeLink($text, $url = null) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeLink', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the page doesn't contain a link with the given string. - * If the second parameter is given, only links with a matching "href" attribute will be checked. - * - * ``` php - * dontSeeLink('Logout'); // I suppose user is not logged in - * $I->dontSeeLink('Checkout now', '/store/cart.php'); - * ?> - * ``` - * - * @param $text - * @param null $url - * @see \Codeception\Module\WebDriver::dontSeeLink() - */ - public function dontSeeLink($text, $url = null) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeLink', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that current URI contains the given string. - * - * ``` php - * seeInCurrentUrl('home'); - * // to match: /users/1 - * $I->seeInCurrentUrl('/users/'); - * ?> - * ``` - * - * @param $uri - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::seeInCurrentUrl() - */ - public function canSeeInCurrentUrl($uri) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeInCurrentUrl', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that current URI contains the given string. - * - * ``` php - * seeInCurrentUrl('home'); - * // to match: /users/1 - * $I->seeInCurrentUrl('/users/'); - * ?> - * ``` - * - * @param $uri - * @see \Codeception\Module\WebDriver::seeInCurrentUrl() - */ - public function seeInCurrentUrl($uri) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeInCurrentUrl', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the current URL is equal to the given string. - * Unlike `seeInCurrentUrl`, this only matches the full URL. - * - * ``` php - * seeCurrentUrlEquals('/'); - * ?> - * ``` - * - * @param $uri - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::seeCurrentUrlEquals() - */ - public function canSeeCurrentUrlEquals($uri) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeCurrentUrlEquals', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the current URL is equal to the given string. - * Unlike `seeInCurrentUrl`, this only matches the full URL. - * - * ``` php - * seeCurrentUrlEquals('/'); - * ?> - * ``` - * - * @param $uri - * @see \Codeception\Module\WebDriver::seeCurrentUrlEquals() - */ - public function seeCurrentUrlEquals($uri) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeCurrentUrlEquals', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the current URL matches the given regular expression. - * - * ``` php - * seeCurrentUrlMatches('~$/users/(\d+)~'); - * ?> - * ``` - * - * @param $uri - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::seeCurrentUrlMatches() - */ - public function canSeeCurrentUrlMatches($uri) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeCurrentUrlMatches', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the current URL matches the given regular expression. - * - * ``` php - * seeCurrentUrlMatches('~$/users/(\d+)~'); - * ?> - * ``` - * - * @param $uri - * @see \Codeception\Module\WebDriver::seeCurrentUrlMatches() - */ - public function seeCurrentUrlMatches($uri) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeCurrentUrlMatches', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the current URI doesn't contain the given string. - * - * ``` php - * dontSeeInCurrentUrl('/users/'); - * ?> - * ``` - * - * @param $uri - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::dontSeeInCurrentUrl() - */ - public function cantSeeInCurrentUrl($uri) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeInCurrentUrl', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the current URI doesn't contain the given string. - * - * ``` php - * dontSeeInCurrentUrl('/users/'); - * ?> - * ``` - * - * @param $uri - * @see \Codeception\Module\WebDriver::dontSeeInCurrentUrl() - */ - public function dontSeeInCurrentUrl($uri) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeInCurrentUrl', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the current URL doesn't equal the given string. - * Unlike `dontSeeInCurrentUrl`, this only matches the full URL. - * - * ``` php - * dontSeeCurrentUrlEquals('/'); - * ?> - * ``` - * - * @param $uri - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::dontSeeCurrentUrlEquals() - */ - public function cantSeeCurrentUrlEquals($uri) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeCurrentUrlEquals', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the current URL doesn't equal the given string. - * Unlike `dontSeeInCurrentUrl`, this only matches the full URL. - * - * ``` php - * dontSeeCurrentUrlEquals('/'); - * ?> - * ``` - * - * @param $uri - * @see \Codeception\Module\WebDriver::dontSeeCurrentUrlEquals() - */ - public function dontSeeCurrentUrlEquals($uri) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeCurrentUrlEquals', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that current url doesn't match the given regular expression. - * - * ``` php - * dontSeeCurrentUrlMatches('~$/users/(\d+)~'); - * ?> - * ``` - * - * @param $uri - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::dontSeeCurrentUrlMatches() - */ - public function cantSeeCurrentUrlMatches($uri) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeCurrentUrlMatches', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that current url doesn't match the given regular expression. - * - * ``` php - * dontSeeCurrentUrlMatches('~$/users/(\d+)~'); - * ?> - * ``` - * - * @param $uri - * @see \Codeception\Module\WebDriver::dontSeeCurrentUrlMatches() - */ - public function dontSeeCurrentUrlMatches($uri) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeCurrentUrlMatches', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Executes the given regular expression against the current URI and returns the first match. - * If no parameters are provided, the full URI is returned. - * - * ``` php - * grabFromCurrentUrl('~$/user/(\d+)/~'); - * $uri = $I->grabFromCurrentUrl(); - * ?> - * ``` - * - * @param null $uri - * - * @return mixed - * @see \Codeception\Module\WebDriver::grabFromCurrentUrl() - */ - public function grabFromCurrentUrl($uri = null) { - return $this->getScenario()->runStep(new \Codeception\Step\Action('grabFromCurrentUrl', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the specified checkbox is checked. - * - * ``` php - * seeCheckboxIsChecked('#agree'); // I suppose user agreed to terms - * $I->seeCheckboxIsChecked('#signup_form input[type=checkbox]'); // I suppose user agreed to terms, If there is only one checkbox in form. - * $I->seeCheckboxIsChecked('//form/input[@type=checkbox and @name=agree]'); - * ?> - * ``` - * - * @param $checkbox - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::seeCheckboxIsChecked() - */ - public function canSeeCheckboxIsChecked($checkbox) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeCheckboxIsChecked', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the specified checkbox is checked. - * - * ``` php - * seeCheckboxIsChecked('#agree'); // I suppose user agreed to terms - * $I->seeCheckboxIsChecked('#signup_form input[type=checkbox]'); // I suppose user agreed to terms, If there is only one checkbox in form. - * $I->seeCheckboxIsChecked('//form/input[@type=checkbox and @name=agree]'); - * ?> - * ``` - * - * @param $checkbox - * @see \Codeception\Module\WebDriver::seeCheckboxIsChecked() - */ - public function seeCheckboxIsChecked($checkbox) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeCheckboxIsChecked', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Check that the specified checkbox is unchecked. - * - * ``` php - * dontSeeCheckboxIsChecked('#agree'); // I suppose user didn't agree to terms - * $I->seeCheckboxIsChecked('#signup_form input[type=checkbox]'); // I suppose user didn't check the first checkbox in form. - * ?> - * ``` - * - * @param $checkbox - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::dontSeeCheckboxIsChecked() - */ - public function cantSeeCheckboxIsChecked($checkbox) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeCheckboxIsChecked', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Check that the specified checkbox is unchecked. - * - * ``` php - * dontSeeCheckboxIsChecked('#agree'); // I suppose user didn't agree to terms - * $I->seeCheckboxIsChecked('#signup_form input[type=checkbox]'); // I suppose user didn't check the first checkbox in form. - * ?> - * ``` - * - * @param $checkbox - * @see \Codeception\Module\WebDriver::dontSeeCheckboxIsChecked() - */ - public function dontSeeCheckboxIsChecked($checkbox) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeCheckboxIsChecked', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the given input field or textarea contains the given value. - * For fuzzy locators, fields are matched by label text, the "name" attribute, CSS, and XPath. - * - * ``` php - * seeInField('Body','Type your comment here'); - * $I->seeInField('form textarea[name=body]','Type your comment here'); - * $I->seeInField('form input[type=hidden]','hidden_value'); - * $I->seeInField('#searchform input','Search'); - * $I->seeInField('//form/*[@name=search]','Search'); - * $I->seeInField(['name' => 'search'], 'Search'); - * ?> - * ``` - * - * @param $field - * @param $value - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::seeInField() - */ - public function canSeeInField($field, $value) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeInField', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the given input field or textarea contains the given value. - * For fuzzy locators, fields are matched by label text, the "name" attribute, CSS, and XPath. - * - * ``` php - * seeInField('Body','Type your comment here'); - * $I->seeInField('form textarea[name=body]','Type your comment here'); - * $I->seeInField('form input[type=hidden]','hidden_value'); - * $I->seeInField('#searchform input','Search'); - * $I->seeInField('//form/*[@name=search]','Search'); - * $I->seeInField(['name' => 'search'], 'Search'); - * ?> - * ``` - * - * @param $field - * @param $value - * @see \Codeception\Module\WebDriver::seeInField() - */ - public function seeInField($field, $value) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeInField', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that an input field or textarea doesn't contain the given value. - * For fuzzy locators, the field is matched by label text, CSS and XPath. - * - * ``` php - * dontSeeInField('Body','Type your comment here'); - * $I->dontSeeInField('form textarea[name=body]','Type your comment here'); - * $I->dontSeeInField('form input[type=hidden]','hidden_value'); - * $I->dontSeeInField('#searchform input','Search'); - * $I->dontSeeInField('//form/*[@name=search]','Search'); - * $I->dontSeeInField(['name' => 'search'], 'Search'); - * ?> - * ``` - * - * @param $field - * @param $value - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::dontSeeInField() - */ - public function cantSeeInField($field, $value) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeInField', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that an input field or textarea doesn't contain the given value. - * For fuzzy locators, the field is matched by label text, CSS and XPath. - * - * ``` php - * dontSeeInField('Body','Type your comment here'); - * $I->dontSeeInField('form textarea[name=body]','Type your comment here'); - * $I->dontSeeInField('form input[type=hidden]','hidden_value'); - * $I->dontSeeInField('#searchform input','Search'); - * $I->dontSeeInField('//form/*[@name=search]','Search'); - * $I->dontSeeInField(['name' => 'search'], 'Search'); - * ?> - * ``` - * - * @param $field - * @param $value - * @see \Codeception\Module\WebDriver::dontSeeInField() - */ - public function dontSeeInField($field, $value) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeInField', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks if the array of form parameters (name => value) are set on the form matched with the - * passed selector. - * - * ``` php - * seeInFormFields('form[name=myform]', [ - * 'input1' => 'value', - * 'input2' => 'other value', - * ]); - * ?> - * ``` - * - * For multi-select elements, or to check values of multiple elements with the same name, an - * array may be passed: - * - * ``` php - * seeInFormFields('.form-class', [ - * 'multiselect' => [ - * 'value1', - * 'value2', - * ], - * 'checkbox[]' => [ - * 'a checked value', - * 'another checked value', - * ], - * ]); - * ?> - * ``` - * - * Additionally, checkbox values can be checked with a boolean. - * - * ``` php - * seeInFormFields('#form-id', [ - * 'checkbox1' => true, // passes if checked - * 'checkbox2' => false, // passes if unchecked - * ]); - * ?> - * ``` - * - * Pair this with submitForm for quick testing magic. - * - * ``` php - * 'value', - * 'field2' => 'another value', - * 'checkbox1' => true, - * // ... - * ]; - * $I->submitForm('//form[@id=my-form]', $form, 'submitButton'); - * // $I->amOnPage('/path/to/form-page') may be needed - * $I->seeInFormFields('//form[@id=my-form]', $form); - * ?> - * ``` - * - * @param $formSelector - * @param $params - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::seeInFormFields() - */ - public function canSeeInFormFields($formSelector, $params) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeInFormFields', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks if the array of form parameters (name => value) are set on the form matched with the - * passed selector. - * - * ``` php - * seeInFormFields('form[name=myform]', [ - * 'input1' => 'value', - * 'input2' => 'other value', - * ]); - * ?> - * ``` - * - * For multi-select elements, or to check values of multiple elements with the same name, an - * array may be passed: - * - * ``` php - * seeInFormFields('.form-class', [ - * 'multiselect' => [ - * 'value1', - * 'value2', - * ], - * 'checkbox[]' => [ - * 'a checked value', - * 'another checked value', - * ], - * ]); - * ?> - * ``` - * - * Additionally, checkbox values can be checked with a boolean. - * - * ``` php - * seeInFormFields('#form-id', [ - * 'checkbox1' => true, // passes if checked - * 'checkbox2' => false, // passes if unchecked - * ]); - * ?> - * ``` - * - * Pair this with submitForm for quick testing magic. - * - * ``` php - * 'value', - * 'field2' => 'another value', - * 'checkbox1' => true, - * // ... - * ]; - * $I->submitForm('//form[@id=my-form]', $form, 'submitButton'); - * // $I->amOnPage('/path/to/form-page') may be needed - * $I->seeInFormFields('//form[@id=my-form]', $form); - * ?> - * ``` - * - * @param $formSelector - * @param $params - * @see \Codeception\Module\WebDriver::seeInFormFields() - */ - public function seeInFormFields($formSelector, $params) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeInFormFields', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks if the array of form parameters (name => value) are not set on the form matched with - * the passed selector. - * - * ``` php - * dontSeeInFormFields('form[name=myform]', [ - * 'input1' => 'non-existent value', - * 'input2' => 'other non-existent value', - * ]); - * ?> - * ``` - * - * To check that an element hasn't been assigned any one of many values, an array can be passed - * as the value: - * - * ``` php - * dontSeeInFormFields('.form-class', [ - * 'fieldName' => [ - * 'This value shouldn\'t be set', - * 'And this value shouldn\'t be set', - * ], - * ]); - * ?> - * ``` - * - * Additionally, checkbox values can be checked with a boolean. - * - * ``` php - * dontSeeInFormFields('#form-id', [ - * 'checkbox1' => true, // fails if checked - * 'checkbox2' => false, // fails if unchecked - * ]); - * ?> - * ``` - * - * @param $formSelector - * @param $params - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::dontSeeInFormFields() - */ - public function cantSeeInFormFields($formSelector, $params) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeInFormFields', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks if the array of form parameters (name => value) are not set on the form matched with - * the passed selector. - * - * ``` php - * dontSeeInFormFields('form[name=myform]', [ - * 'input1' => 'non-existent value', - * 'input2' => 'other non-existent value', - * ]); - * ?> - * ``` - * - * To check that an element hasn't been assigned any one of many values, an array can be passed - * as the value: - * - * ``` php - * dontSeeInFormFields('.form-class', [ - * 'fieldName' => [ - * 'This value shouldn\'t be set', - * 'And this value shouldn\'t be set', - * ], - * ]); - * ?> - * ``` - * - * Additionally, checkbox values can be checked with a boolean. - * - * ``` php - * dontSeeInFormFields('#form-id', [ - * 'checkbox1' => true, // fails if checked - * 'checkbox2' => false, // fails if unchecked - * ]); - * ?> - * ``` - * - * @param $formSelector - * @param $params - * @see \Codeception\Module\WebDriver::dontSeeInFormFields() - */ - public function dontSeeInFormFields($formSelector, $params) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeInFormFields', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Selects an option in a select tag or in radio button group. - * - * ``` php - * selectOption('form select[name=account]', 'Premium'); - * $I->selectOption('form input[name=payment]', 'Monthly'); - * $I->selectOption('//form/select[@name=account]', 'Monthly'); - * ?> - * ``` - * - * Provide an array for the second argument to select multiple options: - * - * ``` php - * selectOption('Which OS do you use?', array('Windows','Linux')); - * ?> - * ``` - * - * @param $select - * @param $option - * @see \Codeception\Module\WebDriver::selectOption() - */ - public function selectOption($select, $option) { - return $this->getScenario()->runStep(new \Codeception\Step\Action('selectOption', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * - * @see \Codeception\Module\WebDriver::unselectOption() - */ - public function unselectOption($select, $option) { - return $this->getScenario()->runStep(new \Codeception\Step\Action('unselectOption', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Ticks a checkbox. For radio buttons, use the `selectOption` method instead. - * - * ``` php - * checkOption('#agree'); - * ?> - * ``` - * - * @param $option - * @see \Codeception\Module\WebDriver::checkOption() - */ - public function checkOption($option) { - return $this->getScenario()->runStep(new \Codeception\Step\Action('checkOption', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Unticks a checkbox. - * - * ``` php - * uncheckOption('#notify'); - * ?> - * ``` - * - * @param $option - * @see \Codeception\Module\WebDriver::uncheckOption() - */ - public function uncheckOption($option) { - return $this->getScenario()->runStep(new \Codeception\Step\Action('uncheckOption', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Fills a text field or textarea with the given string. - * - * ``` php - * fillField("//input[@type='text']", "Hello World!"); - * $I->fillField(['name' => 'email'], 'jon@mail.com'); - * ?> - * ``` - * - * @param $field - * @param $value - * @see \Codeception\Module\WebDriver::fillField() - */ - public function fillField($field, $value) { - return $this->getScenario()->runStep(new \Codeception\Step\Action('fillField', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Attaches a file relative to the Codeception data directory to the given file upload field. - * - * ``` php - * attachFile('input[@type="file"]', 'prices.xls'); - * ?> - * ``` - * - * @param $field - * @param $filename - * @see \Codeception\Module\WebDriver::attachFile() - */ - public function attachFile($field, $filename) { - return $this->getScenario()->runStep(new \Codeception\Step\Action('attachFile', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Grabs all visible text from the current page. - * - * @return string - * @see \Codeception\Module\WebDriver::getVisibleText() - */ - public function getVisibleText() { - return $this->getScenario()->runStep(new \Codeception\Step\Action('getVisibleText', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Finds and returns the text contents of the given element. - * If a fuzzy locator is used, the element is found using CSS, XPath, and by matching the full page source by regular expression. - * - * ``` php - * grabTextFrom('h1'); - * $heading = $I->grabTextFrom('descendant-or-self::h1'); - * $value = $I->grabTextFrom('~ - * ``` - * - * @param $cssOrXPathOrRegex - * - * @return mixed - * @see \Codeception\Module\WebDriver::grabTextFrom() - */ - public function grabTextFrom($cssOrXPathOrRegex) { - return $this->getScenario()->runStep(new \Codeception\Step\Action('grabTextFrom', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Grabs the value of the given attribute value from the given element. - * Fails if element is not found. - * - * ``` php - * grabAttributeFrom('#tooltip', 'title'); - * ?> - * ``` - * - * - * @param $cssOrXpath - * @param $attribute - * - * @return mixed - * @see \Codeception\Module\WebDriver::grabAttributeFrom() - */ - public function grabAttributeFrom($cssOrXpath, $attribute) { - return $this->getScenario()->runStep(new \Codeception\Step\Action('grabAttributeFrom', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Finds the value for the given form field. - * If a fuzzy locator is used, the field is found by field name, CSS, and XPath. - * - * ``` php - * grabValueFrom('Name'); - * $name = $I->grabValueFrom('input[name=username]'); - * $name = $I->grabValueFrom('descendant-or-self::form/descendant::input[@name = 'username']'); - * $name = $I->grabValueFrom(['name' => 'username']); - * ?> - * ``` - * - * @param $field - * - * @return mixed - * @see \Codeception\Module\WebDriver::grabValueFrom() - */ - public function grabValueFrom($field) { - return $this->getScenario()->runStep(new \Codeception\Step\Action('grabValueFrom', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Grabs either the text content, or attribute values, of nodes - * matched by $cssOrXpath and returns them as an array. - * - * ```html - * First - * Second - * Third - * ``` - * - * ```php - * grabMultiple('a'); - * - * // would return ['#first', '#second', '#third'] - * $aLinks = $I->grabMultiple('a', 'href'); - * ?> - * ``` - * - * @param $cssOrXpath - * @param $attribute - * @return string[] - * @see \Codeception\Module\WebDriver::grabMultiple() - */ - public function grabMultiple($cssOrXpath, $attribute = null) { - return $this->getScenario()->runStep(new \Codeception\Step\Action('grabMultiple', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the given element exists on the page and is visible. - * You can also specify expected attributes of this element. - * - * ``` php - * seeElement('.error'); - * $I->seeElement('//form/input[1]'); - * $I->seeElement('input', ['name' => 'login']); - * $I->seeElement('input', ['value' => '123456']); - * - * // strict locator in first arg, attributes in second - * $I->seeElement(['css' => 'form input'], ['name' => 'login']); - * ?> - * ``` - * - * @param $selector - * @param array $attributes - * @return - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::seeElement() - */ - public function canSeeElement($selector, $attributes = null) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeElement', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the given element exists on the page and is visible. - * You can also specify expected attributes of this element. - * - * ``` php - * seeElement('.error'); - * $I->seeElement('//form/input[1]'); - * $I->seeElement('input', ['name' => 'login']); - * $I->seeElement('input', ['value' => '123456']); - * - * // strict locator in first arg, attributes in second - * $I->seeElement(['css' => 'form input'], ['name' => 'login']); - * ?> - * ``` - * - * @param $selector - * @param array $attributes - * @return - * @see \Codeception\Module\WebDriver::seeElement() - */ - public function seeElement($selector, $attributes = null) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeElement', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the given element is invisible or not present on the page. - * You can also specify expected attributes of this element. - * - * ``` php - * dontSeeElement('.error'); - * $I->dontSeeElement('//form/input[1]'); - * $I->dontSeeElement('input', ['name' => 'login']); - * $I->dontSeeElement('input', ['value' => '123456']); - * ?> - * ``` - * - * @param $selector - * @param array $attributes - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::dontSeeElement() - */ - public function cantSeeElement($selector, $attributes = null) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeElement', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the given element is invisible or not present on the page. - * You can also specify expected attributes of this element. - * - * ``` php - * dontSeeElement('.error'); - * $I->dontSeeElement('//form/input[1]'); - * $I->dontSeeElement('input', ['name' => 'login']); - * $I->dontSeeElement('input', ['value' => '123456']); - * ?> - * ``` - * - * @param $selector - * @param array $attributes - * @see \Codeception\Module\WebDriver::dontSeeElement() - */ - public function dontSeeElement($selector, $attributes = null) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeElement', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the given element exists on the page, even it is invisible. - * - * ``` php - * seeElementInDOM('//form/input[type=hidden]'); - * ?> - * ``` - * - * @param $selector - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::seeElementInDOM() - */ - public function canSeeElementInDOM($selector, $attributes = null) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeElementInDOM', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the given element exists on the page, even it is invisible. - * - * ``` php - * seeElementInDOM('//form/input[type=hidden]'); - * ?> - * ``` - * - * @param $selector - * @see \Codeception\Module\WebDriver::seeElementInDOM() - */ - public function seeElementInDOM($selector, $attributes = null) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeElementInDOM', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Opposite of `seeElementInDOM`. - * - * @param $selector - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::dontSeeElementInDOM() - */ - public function cantSeeElementInDOM($selector, $attributes = null) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeElementInDOM', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Opposite of `seeElementInDOM`. - * - * @param $selector - * @see \Codeception\Module\WebDriver::dontSeeElementInDOM() - */ - public function dontSeeElementInDOM($selector, $attributes = null) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeElementInDOM', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that there are a certain number of elements matched by the given locator on the page. - * - * ``` php - * seeNumberOfElements('tr', 10); - * $I->seeNumberOfElements('tr', [0,10]); //between 0 and 10 elements - * ?> - * ``` - * @param $selector - * @param mixed $expected : - * - string: strict number - * - array: range of numbers [0,10] - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::seeNumberOfElements() - */ - public function canSeeNumberOfElements($selector, $expected) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeNumberOfElements', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that there are a certain number of elements matched by the given locator on the page. - * - * ``` php - * seeNumberOfElements('tr', 10); - * $I->seeNumberOfElements('tr', [0,10]); //between 0 and 10 elements - * ?> - * ``` - * @param $selector - * @param mixed $expected : - * - string: strict number - * - array: range of numbers [0,10] - * @see \Codeception\Module\WebDriver::seeNumberOfElements() - */ - public function seeNumberOfElements($selector, $expected) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeNumberOfElements', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::seeNumberOfElementsInDOM() - */ - public function canSeeNumberOfElementsInDOM($selector, $expected) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeNumberOfElementsInDOM', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * - * @see \Codeception\Module\WebDriver::seeNumberOfElementsInDOM() - */ - public function seeNumberOfElementsInDOM($selector, $expected) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeNumberOfElementsInDOM', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the given option is selected. - * - * ``` php - * seeOptionIsSelected('#form input[name=payment]', 'Visa'); - * ?> - * ``` - * - * @param $selector - * @param $optionText - * - * @return mixed - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::seeOptionIsSelected() - */ - public function canSeeOptionIsSelected($selector, $optionText) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeOptionIsSelected', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the given option is selected. - * - * ``` php - * seeOptionIsSelected('#form input[name=payment]', 'Visa'); - * ?> - * ``` - * - * @param $selector - * @param $optionText - * - * @return mixed - * @see \Codeception\Module\WebDriver::seeOptionIsSelected() - */ - public function seeOptionIsSelected($selector, $optionText) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeOptionIsSelected', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the given option is not selected. - * - * ``` php - * dontSeeOptionIsSelected('#form input[name=payment]', 'Visa'); - * ?> - * ``` - * - * @param $selector - * @param $optionText - * - * @return mixed - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::dontSeeOptionIsSelected() - */ - public function cantSeeOptionIsSelected($selector, $optionText) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeOptionIsSelected', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the given option is not selected. - * - * ``` php - * dontSeeOptionIsSelected('#form input[name=payment]', 'Visa'); - * ?> - * ``` - * - * @param $selector - * @param $optionText - * - * @return mixed - * @see \Codeception\Module\WebDriver::dontSeeOptionIsSelected() - */ - public function dontSeeOptionIsSelected($selector, $optionText) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeOptionIsSelected', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the page title contains the given string. - * - * ``` php - * seeInTitle('Blog - Post #1'); - * ?> - * ``` - * - * @param $title - * - * @return mixed - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::seeInTitle() - */ - public function canSeeInTitle($title) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeInTitle', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the page title contains the given string. - * - * ``` php - * seeInTitle('Blog - Post #1'); - * ?> - * ``` - * - * @param $title - * - * @return mixed - * @see \Codeception\Module\WebDriver::seeInTitle() - */ - public function seeInTitle($title) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeInTitle', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the page title does not contain the given string. - * - * @param $title - * - * @return mixed - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::dontSeeInTitle() - */ - public function cantSeeInTitle($title) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeInTitle', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the page title does not contain the given string. - * - * @param $title - * - * @return mixed - * @see \Codeception\Module\WebDriver::dontSeeInTitle() - */ - public function dontSeeInTitle($title) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeInTitle', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Accepts the active JavaScript native popup window, as created by `window.alert`|`window.confirm`|`window.prompt`. - * Don't confuse popups with modal windows, as created by [various libraries](http://jster.net/category/windows-modals-popups). - * @see \Codeception\Module\WebDriver::acceptPopup() - */ - public function acceptPopup() { - return $this->getScenario()->runStep(new \Codeception\Step\Action('acceptPopup', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Dismisses the active JavaScript popup, as created by `window.alert`|`window.confirm`|`window.prompt`. - * @see \Codeception\Module\WebDriver::cancelPopup() - */ - public function cancelPopup() { - return $this->getScenario()->runStep(new \Codeception\Step\Action('cancelPopup', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the active JavaScript popup, as created by `window.alert`|`window.confirm`|`window.prompt`, contains the given string. - * - * @param $text - * Conditional Assertion: Test won't be stopped on fail - * @see \Codeception\Module\WebDriver::seeInPopup() - */ - public function canSeeInPopup($text) { - return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeInPopup', func_get_args())); - } - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Checks that the active JavaScript popup, as created by `window.alert`|`window.confirm`|`window.prompt`, contains the given string. - * - * @param $text - * @see \Codeception\Module\WebDriver::seeInPopup() - */ - public function seeInPopup($text) { - return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeInPopup', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Enters text into a native JavaScript prompt popup, as created by `window.prompt`. - * - * @param $keys - * @see \Codeception\Module\WebDriver::typeInPopup() - */ - public function typeInPopup($keys) { - return $this->getScenario()->runStep(new \Codeception\Step\Action('typeInPopup', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Reloads the current page. - * @see \Codeception\Module\WebDriver::reloadPage() - */ - public function reloadPage() { - return $this->getScenario()->runStep(new \Codeception\Step\Action('reloadPage', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Moves back in history. - * @see \Codeception\Module\WebDriver::moveBack() - */ - public function moveBack() { - return $this->getScenario()->runStep(new \Codeception\Step\Action('moveBack', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Moves forward in history. - * @see \Codeception\Module\WebDriver::moveForward() - */ - public function moveForward() { - return $this->getScenario()->runStep(new \Codeception\Step\Action('moveForward', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Submits the given form on the page, optionally with the given form - * values. Give the form fields values as an array. Note that hidden fields - * can't be accessed. - * - * Skipped fields will be filled by their values from the page. - * You don't need to click the 'Submit' button afterwards. - * This command itself triggers the request to form's action. - * - * You can optionally specify what button's value to include - * in the request with the last parameter as an alternative to - * explicitly setting its value in the second parameter, as - * button values are not otherwise included in the request. - * - * Examples: - * - * ``` php - * submitForm('#login', [ - * 'login' => 'davert', - * 'password' => '123456' - * ]); - * // or - * $I->submitForm('#login', [ - * 'login' => 'davert', - * 'password' => '123456' - * ], 'submitButtonName'); - * - * ``` - * - * For example, given this sample "Sign Up" form: - * - * ``` html - *
- * Login: - *
- * Password: - *
- * Do you agree to our terms? - *
- * Select pricing plan: - * - * - *
- * ``` - * - * You could write the following to submit it: - * - * ``` php - * submitForm( - * '#userForm', - * [ - * 'user[login]' => 'Davert', - * 'user[password]' => '123456', - * 'user[agree]' => true - * ], - * 'submitButton' - * ); - * ``` - * Note that "2" will be the submitted value for the "plan" field, as it is - * the selected option. - * - * Also note that this differs from PhpBrowser, in that - * ```'user' => [ 'login' => 'Davert' ]``` is not supported at the moment. - * Named array keys *must* be included in the name as above. - * - * Pair this with seeInFormFields for quick testing magic. - * - * ``` php - * 'value', - * 'field2' => 'another value', - * 'checkbox1' => true, - * // ... - * ]; - * $I->submitForm('//form[@id=my-form]', $form, 'submitButton'); - * // $I->amOnPage('/path/to/form-page') may be needed - * $I->seeInFormFields('//form[@id=my-form]', $form); - * ?> - * ``` - * - * Parameter values must be set to arrays for multiple input fields - * of the same name, or multi-select combo boxes. For checkboxes, - * either the string value can be used, or boolean values which will - * be replaced by the checkbox's value in the DOM. - * - * ``` php - * submitForm('#my-form', [ - * 'field1' => 'value', - * 'checkbox' => [ - * 'value of first checkbox', - * 'value of second checkbox, - * ], - * 'otherCheckboxes' => [ - * true, - * false, - * false - * ], - * 'multiselect' => [ - * 'first option value', - * 'second option value' - * ] - * ]); - * ?> - * ``` - * - * Mixing string and boolean values for a checkbox's value is not supported - * and may produce unexpected results. - * - * Field names ending in "[]" must be passed without the trailing square - * bracket characters, and must contain an array for its value. This allows - * submitting multiple values with the same name, consider: - * - * ```php - * $I->submitForm('#my-form', [ - * 'field[]' => 'value', - * 'field[]' => 'another value', // 'field[]' is already a defined key - * ]); - * ``` - * - * The solution is to pass an array value: - * - * ```php - * // this way both values are submitted - * $I->submitForm('#my-form', [ - * 'field' => [ - * 'value', - * 'another value', - * ] - * ]); - * ``` - * @param $selector - * @param $params - * @param $button - * @see \Codeception\Module\WebDriver::submitForm() - */ - public function submitForm($selector, $params, $button = null) { - return $this->getScenario()->runStep(new \Codeception\Step\Action('submitForm', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Waits up to $timeout seconds for the given element to change. - * Element "change" is determined by a callback function which is called repeatedly until the return value evaluates to true. - * - * ``` php - * waitForElementChange('#menu', function(WebDriverElement $el) { - * return $el->isDisplayed(); - * }, 100); - * ?> - * ``` - * - * @param $element - * @param \Closure $callback - * @param int $timeout seconds - * @throws \Codeception\Exception\ElementNotFound - * @see \Codeception\Module\WebDriver::waitForElementChange() - */ - public function waitForElementChange($element, $callback, $timeout = null) { - return $this->getScenario()->runStep(new \Codeception\Step\Action('waitForElementChange', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Waits up to $timeout seconds for an element to appear on the page. - * If the element doesn't appear, a timeout exception is thrown. - * - * ``` php - * waitForElement('#agree_button', 30); // secs - * $I->click('#agree_button'); - * ?> - * ``` - * - * @param $element - * @param int $timeout seconds - * @throws \Exception - * @see \Codeception\Module\WebDriver::waitForElement() - */ - public function waitForElement($element, $timeout = null) { - return $this->getScenario()->runStep(new \Codeception\Step\Action('waitForElement', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Waits up to $timeout seconds for the given element to be visible on the page. - * If element doesn't appear, a timeout exception is thrown. - * - * ``` php - * waitForElementVisible('#agree_button', 30); // secs - * $I->click('#agree_button'); - * ?> - * ``` - * - * @param $element - * @param int $timeout seconds - * @throws \Exception - * @see \Codeception\Module\WebDriver::waitForElementVisible() - */ - public function waitForElementVisible($element, $timeout = null) { - return $this->getScenario()->runStep(new \Codeception\Step\Action('waitForElementVisible', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Waits up to $timeout seconds for the given element to become invisible. - * If element stays visible, a timeout exception is thrown. - * - * ``` php - * waitForElementNotVisible('#agree_button', 30); // secs - * ?> - * ``` - * - * @param $element - * @param int $timeout seconds - * @throws \Exception - * @see \Codeception\Module\WebDriver::waitForElementNotVisible() - */ - public function waitForElementNotVisible($element, $timeout = null) { - return $this->getScenario()->runStep(new \Codeception\Step\Action('waitForElementNotVisible', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Waits up to $timeout seconds for the given string to appear on the page. - * Can also be passed a selector to search in. - * If the given text doesn't appear, a timeout exception is thrown. - * - * ``` php - * waitForText('foo', 30); // secs - * $I->waitForText('foo', 30, '.title'); // secs - * ?> - * ``` - * - * @param string $text - * @param int $timeout seconds - * @param null $selector - * @throws \Exception - * @see \Codeception\Module\WebDriver::waitForText() - */ - public function waitForText($text, $timeout = null, $selector = null) { - return $this->getScenario()->runStep(new \Codeception\Step\Action('waitForText', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Wait for $timeout seconds. - * - * @param int $timeout secs - * @throws \Codeception\Exception\TestRuntimeException - * @see \Codeception\Module\WebDriver::wait() - */ - public function wait($timeout) { - return $this->getScenario()->runStep(new \Codeception\Step\Action('wait', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Low-level API method. - * If Codeception commands are not enough, this allows you to use Selenium WebDriver methods directly: - * - * ``` php - * $I->executeInSelenium(function(\Facebook\WebDriver\Remote\RemoteWebDriver $webdriver) { - * $webdriver->get('http://google.com'); - * }); - * ``` - * - * This runs in the context of the [RemoteWebDriver class](https://github.com/facebook/php-webdriver/blob/master/lib/remote/RemoteWebDriver.php). - * Try not to use this command on a regular basis. - * If Codeception lacks a feature you need, please implement it and submit a patch. - * - * @param callable $function - * @see \Codeception\Module\WebDriver::executeInSelenium() - */ - public function executeInSelenium($function) { - return $this->getScenario()->runStep(new \Codeception\Step\Action('executeInSelenium', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Switch to another window identified by name. - * - * The window can only be identified by name. If the $name parameter is blank, the parent window will be used. - * - * Example: - * ``` html - * - * ``` - * - * ``` php - * click("Open window"); - * # switch to another window - * $I->switchToWindow("another_window"); - * # switch to parent window - * $I->switchToWindow(); - * ?> - * ``` - * - * If the window has no name, the only way to access it is via the `executeInSelenium()` method, like so: - * - * ``` php - * executeInSelenium(function (\Facebook\WebDriver\Remote\RemoteWebDriver $webdriver) { - * $handles=$webdriver->getWindowHandles(); - * $last_window = end($handles); - * $webdriver->switchTo()->window($last_window); - * }); - * ?> - * ``` - * - * @param string|null $name - * @see \Codeception\Module\WebDriver::switchToWindow() - */ - public function switchToWindow($name = null) { - return $this->getScenario()->runStep(new \Codeception\Step\Action('switchToWindow', func_get_args())); - } - - - /** - * [!] Method is generated. Documentation taken from corresponding module. - * - * Switch to another frame on the page. - * - * Example: - * ``` html - *