From d3b373375aa673f75c4b81a649ec8e15ca275b70 Mon Sep 17 00:00:00 2001 From: Wilmer Arambula <42547589+terabytesoftw@users.noreply.github.com> Date: Tue, 10 Oct 2023 07:17:20 -0300 Subject: [PATCH] Apply `Vertical Slices`. (#4) --- .codeclimate.yml | 28 - .editorconfig | 4 + .github/ISSUE_TEMPLATE.md | 13 + .github/PULL_REQUEST_TEMPLATE.md | 6 + .github/dependabot.yml | 16 + .github/workflows/build.yml | 33 + .github/workflows/dependency-check.yml | 35 + .github/workflows/static.yml | 33 + .scrutinizer.yml | 23 - .travis.yml | 67 - LICENSE | 21 + LICENSE.md | 29 - README.md | 156 +- changelog.md | 17 - codeception.yml | 20 +- composer-require-checker.json | 5 + composer.json | 95 +- composer.lock | 5218 ++++++++++------- config/appbasic.php | 87 - config/console.php | 57 +- config/defines.php | 12 - config/messages.php | 64 + config/params.php | 24 +- config/test.php | 71 +- config/web.php | 83 +- docs/CONFIG.md | 81 - docs/about.png | Bin 0 -> 79785 bytes docs/home.png | Bin 0 -> 80078 bytes docs/images/about.jpg | Bin 51408 -> 0 bytes docs/images/contact.jpg | Bin 74011 -> 0 bytes docs/images/home.jpg | Bin 50863 -> 0 bytes phpstan-yii-config.php | 5 + phpstan.neon | 22 + src/Framework/Asset/AppAsset.php | 36 + .../resource}/css/site.css | 0 src/Framework/resource/js/site.js | 89 + .../resource/layout/component/menu.php | 36 + src/Framework/resource/layout/footer.php | 106 + src/Framework/resource/layout/head.php | 20 + src/Framework/resource/layout/main.php | 59 + .../resource/message}/.gitkeep | 0 src/UseCase/About/AboutController.php | 20 + src/UseCase/About/view/index.php | 20 + src/UseCase/Contact/ContactController.php | 61 + src/UseCase/Contact/ContactForm.php | 44 + src/UseCase/Contact/view/index.php | 166 + src/UseCase/Controller.php | 37 + src/UseCase/Site/SiteController.php | 43 + .../site => UseCase/Site/view}/error.php | 28 +- .../site => UseCase/Site/view}/index.php | 16 +- src/assets/AppAsset.php | 27 - src/controllers/SiteController.php | 123 - src/forms/ContactForm.php | 34 - src/views/layouts/main.php | 124 - src/views/site/about.php | 22 - src/views/site/contact.php | 160 - tests/Acceptance.suite.yml | 18 + tests/Acceptance/About/IndexCest.php | 21 + tests/Acceptance/Contact/IndexCest.php | 21 + tests/Acceptance/Site/IndexCest.php | 21 + ...ctional.suite.yml => Functional.suite.yml} | 10 +- tests/Functional/Contact/IndexCest.php | 66 + .../AcceptanceTester.php | 15 +- tests/{_data => Support/Data}/.gitkeep | 0 .../FunctionalTester.php | 15 +- tests/{_support => Support}/UnitTester.php | 15 +- .../_generated}/.gitignore | 0 tests/{unit.suite.yml => Unit.suite.yml} | 8 +- tests/Unit/Contact/ContactFormTest.php | 42 + tests/_bootstrap.php | 34 +- tests/_data/stubs/UserIdentity.php | 61 - tests/_data/views/main.php | 4 - tests/_output/.gitignore | 2 +- tests/_output/c3tmp/codecoverage.serialized | Bin 23038 -> 0 bytes tests/_output/coverage.serialized | 1366 ----- tests/_output/coverage.xml | 172 - tests/_support/Helper/Acceptance.php | 10 - tests/_support/Helper/Functional.php | 10 - tests/_support/Helper/Unit.php | 10 - tests/_support/_generated/.gitignore | 2 - tests/acceptance.suite.yml | 20 - tests/acceptance/AboutCest.php | 32 - tests/acceptance/ContactCest.php | 85 - tests/acceptance/ErrorCest.php | 32 - tests/acceptance/IndexCest.php | 32 - tests/acceptance/_bootstrap.php | 0 tests/functional/ContactFormCest.php | 92 - tests/functional/_bootstrap.php | 0 tests/public/index.php | 18 - tests/unit/AppAssetTest.php | 126 - tests/unit/AppUserTest.php | 131 - tests/unit/ContactFormTest.php | 105 - tests/unit/_bootstrap.php | 0 {tests/public => web}/.htaccess | 0 {tests/public => web}/assets/.gitignore | 0 {tests/public => web}/favicon.ico | Bin web/image/yii.svg | 42 + web/image/yiiframework.svg | 8 + web/index-test.php | 17 + web/index.php | 25 + {tests/public => web}/robots.txt | 0 web/runtime/.gitignore | 2 + yii.bat | 4 +- 103 files changed, 4620 insertions(+), 5670 deletions(-) delete mode 100644 .codeclimate.yml create mode 100644 .github/ISSUE_TEMPLATE.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/dependency-check.yml create mode 100644 .github/workflows/static.yml delete mode 100644 .scrutinizer.yml delete mode 100644 .travis.yml create mode 100644 LICENSE delete mode 100644 LICENSE.md delete mode 100644 changelog.md create mode 100644 composer-require-checker.json delete mode 100644 config/appbasic.php delete mode 100644 config/defines.php create mode 100644 config/messages.php delete mode 100644 docs/CONFIG.md create mode 100644 docs/about.png create mode 100644 docs/home.png delete mode 100644 docs/images/about.jpg delete mode 100644 docs/images/contact.jpg delete mode 100644 docs/images/home.jpg create mode 100644 phpstan-yii-config.php create mode 100644 phpstan.neon create mode 100644 src/Framework/Asset/AppAsset.php rename src/{assets => Framework/resource}/css/site.css (100%) create mode 100644 src/Framework/resource/js/site.js create mode 100644 src/Framework/resource/layout/component/menu.php create mode 100644 src/Framework/resource/layout/footer.php create mode 100644 src/Framework/resource/layout/head.php create mode 100644 src/Framework/resource/layout/main.php rename src/{messages => Framework/resource/message}/.gitkeep (100%) create mode 100644 src/UseCase/About/AboutController.php create mode 100644 src/UseCase/About/view/index.php create mode 100644 src/UseCase/Contact/ContactController.php create mode 100644 src/UseCase/Contact/ContactForm.php create mode 100644 src/UseCase/Contact/view/index.php create mode 100644 src/UseCase/Controller.php create mode 100644 src/UseCase/Site/SiteController.php rename src/{views/site => UseCase/Site/view}/error.php (61%) rename src/{views/site => UseCase/Site/view}/index.php (76%) delete mode 100644 src/assets/AppAsset.php delete mode 100644 src/controllers/SiteController.php delete mode 100644 src/forms/ContactForm.php delete mode 100644 src/views/layouts/main.php delete mode 100644 src/views/site/about.php delete mode 100644 src/views/site/contact.php create mode 100644 tests/Acceptance.suite.yml create mode 100644 tests/Acceptance/About/IndexCest.php create mode 100644 tests/Acceptance/Contact/IndexCest.php create mode 100644 tests/Acceptance/Site/IndexCest.php rename tests/{functional.suite.yml => Functional.suite.yml} (61%) create mode 100644 tests/Functional/Contact/IndexCest.php rename tests/{_support => Support}/AcceptanceTester.php (77%) rename tests/{_data => Support/Data}/.gitkeep (100%) rename tests/{_support => Support}/FunctionalTester.php (77%) rename tests/{_support => Support}/UnitTester.php (77%) rename tests/{public/@runtime => Support/_generated}/.gitignore (100%) rename tests/{unit.suite.yml => Unit.suite.yml} (59%) create mode 100644 tests/Unit/Contact/ContactFormTest.php delete mode 100644 tests/_data/stubs/UserIdentity.php delete mode 100644 tests/_data/views/main.php delete mode 100644 tests/_output/c3tmp/codecoverage.serialized delete mode 100644 tests/_output/coverage.serialized delete mode 100644 tests/_output/coverage.xml delete mode 100644 tests/_support/Helper/Acceptance.php delete mode 100644 tests/_support/Helper/Functional.php delete mode 100644 tests/_support/Helper/Unit.php delete mode 100644 tests/_support/_generated/.gitignore delete mode 100644 tests/acceptance.suite.yml delete mode 100644 tests/acceptance/AboutCest.php delete mode 100644 tests/acceptance/ContactCest.php delete mode 100644 tests/acceptance/ErrorCest.php delete mode 100644 tests/acceptance/IndexCest.php delete mode 100644 tests/acceptance/_bootstrap.php delete mode 100644 tests/functional/ContactFormCest.php delete mode 100644 tests/functional/_bootstrap.php delete mode 100644 tests/public/index.php delete mode 100644 tests/unit/AppAssetTest.php delete mode 100644 tests/unit/AppUserTest.php delete mode 100644 tests/unit/ContactFormTest.php delete mode 100644 tests/unit/_bootstrap.php rename {tests/public => web}/.htaccess (100%) rename {tests/public => web}/assets/.gitignore (100%) rename {tests/public => web}/favicon.ico (100%) create mode 100644 web/image/yii.svg create mode 100644 web/image/yiiframework.svg create mode 100644 web/index-test.php create mode 100644 web/index.php rename {tests/public => web}/robots.txt (100%) create mode 100644 web/runtime/.gitignore diff --git a/.codeclimate.yml b/.codeclimate.yml deleted file mode 100644 index 8911a62..0000000 --- a/.codeclimate.yml +++ /dev/null @@ -1,28 +0,0 @@ -version: "2" -checks: - method-complexity: - config: - threshold: 10 - method-lines: - config: - threshold: 40 -plugins: - stylelint: - enabled: true - duplication: - enabled: true - checks: - Similar code: - enabled: false - config: - languages: - - javascript - - php - fixme: - enabled: true - phpmd: - enabled: true -exclude_patterns: -- "config/" -- "docs/" -- "tests/" \ No newline at end of file diff --git a/.editorconfig b/.editorconfig index 8570db5..59dffe4 100644 --- a/.editorconfig +++ b/.editorconfig @@ -10,3 +10,7 @@ trim_trailing_whitespace = true [*.md] trim_trailing_whitespace = false + + +[*.yml] +indent_size = 2 diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..a7c47a8 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,13 @@ +### What steps will reproduce the problem? + +### What is the expected result? + +### What do you get instead? + +### Additional info + +| Q | A +| ---------------- | --- +| Version | 1.0.? +| PHP version | +| Operating system | diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..0c07f8d --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,6 @@ +| Q | A +| ------------ | --- +| Is bugfix | ✔️/❌ +| New feature | ✔️/❌ +| Breaks BC | ✔️/❌ +| Fixed issues | comma-separated list of tickets # fixed by the PR, if any diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..d7ebdbf --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,16 @@ +version: 2 +updates: + # Maintain dependencies for GitHub Actions. + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" + # Too noisy. See https://github.community/t/increase-if-necessary-for-github-actions-in-dependabot/179581 + open-pull-requests-limit: 0 + + # Maintain dependencies for Composer + - package-ecosystem: "composer" + directory: "/" + schedule: + interval: "daily" + versioning-strategy: increase-if-necessary diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..ab108d5 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,33 @@ +on: + pull_request: + paths-ignore: + - 'docs/**' + - 'README.md' + - 'CHANGELOG.md' + - '.gitignore' + - '.gitattributes' + - 'infection.json.dist' + - 'psalm.xml' + + push: + paths-ignore: + - 'docs/**' + - 'README.md' + - 'CHANGELOG.md' + - '.gitignore' + - '.gitattributes' + - 'infection.json.dist' + - 'psalm.xml' + +name: build + +jobs: + codeception: + uses: php-forge/actions/.github/workflows/codeception.yml@main + secrets: + AUTH_TOKEN: ${{ secrets.AUTH_TOKEN }} + with: + os: >- + ['ubuntu-latest'] + php: >- + ['8.1', '8.2', '8.3'] diff --git a/.github/workflows/dependency-check.yml b/.github/workflows/dependency-check.yml new file mode 100644 index 0000000..6c5736d --- /dev/null +++ b/.github/workflows/dependency-check.yml @@ -0,0 +1,35 @@ +on: + pull_request: + paths-ignore: + - 'docs/**' + - 'README.md' + - 'CHANGELOG.md' + - '.gitignore' + - '.gitattributes' + - 'infection.json.dist' + - 'phpunit.xml.dist' + - 'psalm.xml' + + push: + paths-ignore: + - 'docs/**' + - 'README.md' + - 'CHANGELOG.md' + - '.gitignore' + - '.gitattributes' + - 'infection.json.dist' + - 'phpunit.xml.dist' + - 'psalm.xml' + +name: dependency-check + +jobs: + composer-require-checker: + uses: php-forge/actions/.github/workflows/composer-require-checker.yml@main + secrets: + AUTH_TOKEN: ${{ secrets.AUTH_TOKEN }} + with: + os: >- + ['ubuntu-latest'] + php: >- + ['8.1'] diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml new file mode 100644 index 0000000..35b6019 --- /dev/null +++ b/.github/workflows/static.yml @@ -0,0 +1,33 @@ +on: + pull_request: + paths-ignore: + - 'docs/**' + - 'README.md' + - 'CHANGELOG.md' + - '.gitignore' + - '.gitattributes' + - 'infection.json.dist' + - 'phpunit.xml.dist' + + push: + paths-ignore: + - 'docs/**' + - 'README.md' + - 'CHANGELOG.md' + - '.gitignore' + - '.gitattributes' + - 'infection.json.dist' + - 'phpunit.xml.dist' + +name: static analysis + +jobs: + psalm: + uses: php-forge/actions/.github/workflows/phpstan.yml@main + secrets: + AUTH_TOKEN: ${{ secrets.AUTH_TOKEN }} + with: + os: >- + ['ubuntu-latest'] + php: >- + ['8.1'] diff --git a/.scrutinizer.yml b/.scrutinizer.yml deleted file mode 100644 index f19bbe9..0000000 --- a/.scrutinizer.yml +++ /dev/null @@ -1,23 +0,0 @@ -imports: - - php -checks: - php: - code_rating: true - duplication: true - excluded_dependencies: - - hiqdev/composer-config-plugin - - phpunit/phpunit - - fzaninotto/faker - -tools: - external_code_coverage: true - external_code_coverage: - timeout: 2100 - php_sim: false - php_cpd: false -filter: - excluded_paths: - - config/* - - docs/* - - tests/* - - vendor/* diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 7170aff..0000000 --- a/.travis.yml +++ /dev/null @@ -1,67 +0,0 @@ -language: php - -php: - - '7.2' - - '7.3' - -dist: trusty - -addons: - chrome: stable - -# faster builds on new travis setup not using sudo -sudo: false - -# cache vendor dirs -cache: - directories: - - $HOME/.composer/cache - -install: - - travis_retry composer self-update && composer --version - - travis_retry composer update --prefer-dist --no-interaction - # install php extensions - - | - if (php --version | grep -i HipHop > /dev/null); then - echo "Skipping imagick and gmagick tests on HHVM" - else - pear config-set preferred_state beta - printf "\n" | pecl install imagick - fi - -before_script: - - echo "Config required" - - "export DISPLAY=:99.0" - - "sh -e /etc/init.d/xvfb start" - - sleep 3 # give xvfb some time to start - - - echo "Download selenium-server-standalone jar file" - - wget -c -nc --retry-connrefused --tries=0 https://bit.ly/2TlkRyu -O selenium-server-standalone.jar - - - echo "Run selenium-server" - - nohup bash -c "java -jar selenium-server-standalone.jar -port 9515 &" && sleep 1; cat nohup.out - - - echo "Download chromedriver" - - wget https://chromedriver.storage.googleapis.com/75.0.3770.90/chromedriver_linux64.zip - - unzip -o -q chromedriver_linux64.zip - - chromedriver --port=9515 --url-base=wd/hub/ > /dev/null 2>&1& - - - | - if [ $TRAVIS_PHP_VERSION = '7.2' ]; - then CODECEPTION_FLAGS="unit,functional"; - else CODECEPTION_FLAGS="--coverage-xml"; - fi -script: - - | - cd tests - php -S 127.0.0.1:8080 -t public > /dev/null 2>&1& - cd .. - vendor/bin/codecept build - vendor/bin/codecept run $CODECEPTION_FLAGS - -after_script: - - | - if [ $TRAVIS_PHP_VERSION = '7.3' ]; then - travis_retry wget https://scrutinizer-ci.com/ocular.phar - php ocular.phar code-coverage:upload --format=php-clover tests/_output/coverage.xml - fi diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d89684f --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 yii2-extensions + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/LICENSE.md b/LICENSE.md deleted file mode 100644 index 82cce93..0000000 --- a/LICENSE.md +++ /dev/null @@ -1,29 +0,0 @@ - BSD 3-Clause License - -Copyright (c) 2019, Terabytesoft SA -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/README.md b/README.md index ed824a8..1cfd92e 100644 --- a/README.md +++ b/README.md @@ -6,173 +6,137 @@

- - Unstable Version + + php-version - - Build Status - - - Build Status + + yii2-version - - Build Status - - - Code Quality + + build - - Code Intelligence Status + + codecov + + + static analysis - - Maintainability - + + static analysis +


-App Web Application Basic of Yii Version 2.0. Yii Framework application best for rapidly creating projects with Bootstrap 4. +Web Application Basic of Yii Version 2.2. Yii Framework application best for rapidly creating projects with Bootstrap 5.


-![app-basic](docs/images/home.jpg) +![app-basic](docs/home.png)
-### **DIRECTORY STRUCTURE:** - -``` -config/ contains application configurations -docs/ contains documentation application basic -src/ - assets/ contains assets definition - controllers/ contains controller class - forms/ contains forms class - messages/ contains messages translate application - views/ contains views files for web application -tests/ contains tests codeception for the web application -vendor/ contains dependent 3rd-party packages +## Directory structure + +```text +root +├── config Configuration files. +├── src +│ └── Framework +│ └── Asset Asset bundles. +│ └── resources +│ └── css Css files. +│ └── js Js files. +│ └── layout Layout files. +│ └── message Translation files. +│ └── UseCase +│ └── About About use case. +│ └── Contact Contact use case. +│ └── Site Site use case. +├── tests Tests codeception. +├── vendor Composer dependencies. +├── web Web server public. ``` -### **FEATURES:** +## Features -The App Web Application contains: +The web application contains: - [x] Pages - [Screenshots]: - - [about](docs/images/about.jpg) - - [contact](docs/images/contact.jpg) + - [about](docs/about.jpg) + - [contact](docs/contact.jpg)

It includes all commonly used configurations that would allow you to focus on adding new features to your application.

-### **REQUIREMENTS:** - -- The minimum requirement by this project template that your Web server supports: - - PHP 7.2 or higher. - - [Composer Config Plugin](https://github.com/hiqdev/composer-config-plugin) - -### **INSTALLATION:** +## Installation

If you do not have Composer, you may install it by following the instructions at getcomposer.org.

-You can then install this project template using the following command: +You can then install this project app-basic using the following command: ~~~ -composer create-project --prefer-dist --stability=dev terabytesoftw/app-template-basic myapp +composer create-project --prefer-dist --stability=dev yii2-extensions/app-basic myapp ~~~

-Now you should be able to access the application through the following URL, assuming `public` is the directory +Now you should be able to access the application through the following URL, assuming `web` is the directory directly under the Web root.

-

-App Web Application Basic (terabytesoftw/app-basic) is installed automatically together with the Web Project Skeleton Application Basic (terabytesoftw/app-template-basic), both try the necessary packages to start your Web Application Basic in Yii 2.0. -

- __*Virtual Host:*__ ~~~ -http://localhost/ +http://localhost:8080/ ~~~ __*Server Yii:*__ -Directory - [app-template-basic] - ~~~ -php -S 127.0.0.1:8080 -t public > /dev/null 2>&1& +./yii serve > /dev/null 2>&1& ~~~ -### **CONFIGURATION:** - -- [Detailed Settings](docs/CONFIG.md). - -**NOTE:** +## Generate translations

-All the configuration is customizable through parameters, there is no need to modify any configuration of Yii 2.0 Web Application Basic, if you need any extra configuration you can open an issue with pleasure we will add it. -

- -Very important when changing any configuration run `composer du`, to apply it. - -### **GENERATE MESSAGES TRANSLATION:** - -

-To generate the Yii 2.0 Web Application Basic translations, you can change the language settings in: +To generate the Yii 2.2 Web Application Basic translations, you can change the language settings in the configuration file.

``` -config/messages.php - [app-template-basic]: - -'languages' => ['en'], +config/messages.php ``` +

- Automatically the generator will create the folder of your language in /messages - [app-template-basic], If any translation is needed, you can open an issue to add it. + Automatically the generator will create the folder of your language in `src/Framework/resource/message`, + If any translation is needed, you can open an issue to add it.

+Root directory + ``` -root directory - [app-template-basic]: -./vendor/bin/yii message config/messages.php +./yii message config/messages.php ``` -### **RUN TESTS CODECEPTION:** +## Tests ~~~ // download all composer dependencies root project $ composer update --prefer-dist -vvv -// download & run crhomedriver version chrome desktop -$ wget -P vendor/bin https://chromedriver.storage.googleapis.com/75.0.3770.90/chromedriver_linux64.zip -$ unzip -o -q vendor/bin/chromedriver_linux64.zip -$ vendor/bin/chromedriver --port=9515 --url-base=wd/hub/ > /dev/null 2>&1& - -// run web server cli php -$ php -S 127.0.0.1:8080 -t tests/public > /dev/null 2>&1& - // run all tests with code coverage $ vendor/bin/codecept run --coverage-xml ~~~ -### **WEB SERVER SUPPORT:** - -- Apache. -- Nginx. -- OpenLiteSpeed. - -### **DOCUMENTATION STYLE GUIDE:** +## Our social networks -[Style CI Documentation PSR2.](https://docs.styleci.io/presets#psr2) +[![Twitter](https://img.shields.io/badge/twitter-follow-1DA1F2?logo=twitter&logoColor=1DA1F2&labelColor=555555?style=flat)](https://twitter.com/Terabytesoftw) -### **LICENCE:** +## License -[![License](https://poser.pugx.org/terabytesoftw/app-basic/license)](LICENSE.md) -[![YiiFramework](https://img.shields.io/badge/Powered_by-Yii_Framework-green.svg?style=flat)](https://www.yiiframework.com/) -[![Total Downloads](https://poser.pugx.org/terabytesoftw/app-basic/downloads)](https://packagist.org/packages/terabytesoftw/app-basic) -[![Total Downloads](https://github.styleci.io/repos/165419144/shield?branch=master)](https://github.styleci.io/repos/165419144) +The MIT License. Please see [License File](LICENSE.md) for more information. diff --git a/changelog.md b/changelog.md deleted file mode 100644 index 378eff0..0000000 --- a/changelog.md +++ /dev/null @@ -1,17 +0,0 @@ -Yii 2.0 Web Application Basic Change Log -======================================== - -1.0.0 under development ------------------------ - -- Enh 2: Web Application Basic: (terabytesoftw). - - config - - docs - - src: - - assets - - controllers - - forms - - messages - - views - - tests -- Enh 1: Init Repositorie - (terabytesoftw). diff --git a/codeception.yml b/codeception.yml index 8afc327..78bc34e 100644 --- a/codeception.yml +++ b/codeception.yml @@ -1,29 +1,25 @@ -namespace: terabytesoft\app\basic\tests +namespace: App\Tests +bootstrap: _bootstrap.php +support_namespace: Support paths: tests: tests output: tests/_output - data: tests/_data - support: tests/_support + data: tests/Support/Data + support: tests/Support envs: tests/_envs actor_suffix: Tester -extensions: - enabled: - - Codeception\Extension\RunFailed - - Codeception\Extension\Logger settings: - bootstrap: _bootstrap.php - suite_class: \PHPUnit_Framework_TestSuite memory_limit: 1024M colors: true modules: config: Yii2: configFile: 'config/test.php' +extensions: + enabled: + - Codeception\Extension\RunFailed coverage: enabled: true whitelist: include: - src/* - exclude: - - src/assets/css/* - - src/messages/* diff --git a/composer-require-checker.json b/composer-require-checker.json new file mode 100644 index 0000000..e6a9190 --- /dev/null +++ b/composer-require-checker.json @@ -0,0 +1,5 @@ +{ + "symbol-whitelist": [ + "YII_ENV" + ] +} diff --git a/composer.json b/composer.json index 172b4ec..2644906 100644 --- a/composer.json +++ b/composer.json @@ -1,80 +1,56 @@ { - "name": "terabytesoftw/app-basic", - "type": "yii2-extension", + "name": "yii2-extensions/app-basic", + "type": "project", "description": "Web Application Basic", "keywords": [ "application", "basic", "web", - "yii" - ], - "homepage": "https://github.com/terabytesoftw/app-basic", - "license": "BSD-3-Clause", - "authors": [ - { - "name": "Wilmer Arambula", - "email": "wilmer.arambula@gmail.com" - } + "yii2" ], "minimum-stability": "dev", "prefer-stable": true, "require": { - "php": "^7.2.0", - "oomphinc/composer-installers-extender": "^1.1", - "terabytesoftw/helper-mailer": "^1.0@dev", - "terabytesoftw/widget-alert": "^1.0@dev", - "yiisoft/yii2": "^2.0.23", - "yiisoft/yii2-bootstrap4": "^2.0.3" + "php": ">=8.1", + "npm-asset/fortawesome--fontawesome-free": "^6.0", + "sjaakp/yii2-icon": "^1.0", + "oomphinc/composer-installers-extender": "^2.0", + "yiisoft/yii2": "^2.2", + "yiisoft/yii2-bootstrap5": "^2.0", + "yiisoft/yii2-symfonymailer": "^3.0" }, "require-dev": { - "codeception/codeception": "^3.0", - "codeception/c3": "2.*", - "dms/phpunit-arraysubset-asserts": "^0.1.0", - "hiqdev/composer-config-plugin": "^0.3.0", - "monolog/monolog": "*", - "yiisoft/yii2-debug": "~2.1.0", - "yiisoft/yii2-gii": "~2.1.0", - "yiisoft/yii2-faker": "~2.0.0" + "codeception/c3": "^2.8", + "codeception/codeception": "^5.0.0", + "codeception/lib-innerbrowser": "^4.0", + "codeception/module-asserts": "^3.0", + "codeception/module-filesystem": "^3.0", + "codeception/module-yii2": "^1.1", + "codeception/verify": "^3.0", + "maglnet/composer-require-checker": "^4.6", + "symfony/browser-kit": "^6.3", + "symfony/process": "^6.3", + "yii2-extensions/debug": "dev-main", + "yii2-extensions/gii": "dev-main", + "yii2-extensions/phpstan": "dev-main" }, "autoload": { - "psr-4": {"terabytesoft\\app\\basic\\": "src/"} + "psr-4": { + "App\\": "src/" + } }, "autoload-dev": { - "psr-4": {"terabytesoft\\app\\basic\\tests\\": "tests/"} - }, - "config": { - "process-timeout": 1800, - "fxp-asset": { - "enabled": false + "psr-4": { + "App\\Tests\\": "tests/" } }, "extra": { "branch-alias": { "dev-master": "1.0.x-dev" }, - "config-plugin": { - "params": [ - "config/appbasic.php", - "config/params.php" - ], - "defines": "config/defines.php", - "console": "config/console.php", - "tests": [ - "config/test.php" - ], - "web": [ - "config/web.php" - ] - }, - "installer-types": [ - "bower-asset", - "npm-asset" - ], + "installer-types": ["bower-asset", "npm-asset"], "installer-paths": { - "./node_modules/{$name}": [ - "type:bower-asset", - "type:npm-asset" - ] + "./node_modules/{$name}/": ["type:bower-asset", "type:npm-asset"] } }, "repositories": [ @@ -82,5 +58,14 @@ "type": "composer", "url": "https://asset-packagist.org" } - ] + ], + "config": { + "allow-plugins": { + "codeception/c3": true, + "yiisoft/yii2-composer": true, + "composer/installers": true, + "hiqdev/composer-config-plugin": true, + "oomphinc/composer-installers-extender": true + } + } } diff --git a/composer.lock b/composer.lock index 2b51cbd..1dd4db0 100644 --- a/composer.lock +++ b/composer.lock @@ -4,21 +4,35 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "6ec7f4e61be1cc67718e96e59b080d92", + "content-hash": "6e52c131f539b53884edb86cca41e70e", "packages": [ + { + "name": "bower-asset/bootstrap", + "version": "v5.3.2", + "source": { + "type": "git", + "url": "https://github.com/twbs/bootstrap.git", + "reference": "344e912d04b5b6a04482113eff20ab416ff01048" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twbs/bootstrap/zipball/344e912d04b5b6a04482113eff20ab416ff01048", + "reference": "344e912d04b5b6a04482113eff20ab416ff01048" + }, + "type": "bower-asset" + }, { "name": "bower-asset/inputmask", "version": "3.3.11", "source": { "type": "git", - "url": "https://github.com/RobinHerbots/Inputmask.git", + "url": "git@github.com:RobinHerbots/Inputmask.git", "reference": "5e670ad62f50c738388d4dcec78d2888505ad77b" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/RobinHerbots/Inputmask/zipball/5e670ad62f50c738388d4dcec78d2888505ad77b", - "reference": "5e670ad62f50c738388d4dcec78d2888505ad77b", - "shasum": null + "reference": "5e670ad62f50c738388d4dcec78d2888505ad77b" }, "require": { "bower-asset/jquery": ">=1.7" @@ -30,17 +44,16 @@ }, { "name": "bower-asset/jquery", - "version": "3.4.1", + "version": "3.7.1", "source": { "type": "git", "url": "https://github.com/jquery/jquery-dist.git", - "reference": "15bc73803f76bc53b654b9fdbbbc096f56d7c03d" + "reference": "fde1f76e2799dd877c176abde0ec836553246991" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jquery/jquery-dist/zipball/15bc73803f76bc53b654b9fdbbbc096f56d7c03d", - "reference": "15bc73803f76bc53b654b9fdbbbc096f56d7c03d", - "shasum": null + "url": "https://api.github.com/repos/jquery/jquery-dist/zipball/fde1f76e2799dd877c176abde0ec836553246991", + "reference": "fde1f76e2799dd877c176abde0ec836553246991" }, "type": "bower-asset", "license": [ @@ -52,30 +65,28 @@ "version": "v1.3.2", "source": { "type": "git", - "url": "https://github.com/bestiejs/punycode.js.git", + "url": "https://github.com/mathiasbynens/punycode.js.git", "reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bestiejs/punycode.js/zipball/38c8d3131a82567bfef18da09f7f4db68c84f8a3", - "reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3", - "shasum": null + "url": "https://api.github.com/repos/mathiasbynens/punycode.js/zipball/38c8d3131a82567bfef18da09f7f4db68c84f8a3", + "reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3" }, "type": "bower-asset" }, { "name": "bower-asset/yii2-pjax", - "version": "2.0.7.1", + "version": "2.0.8", "source": { "type": "git", "url": "git@github.com:yiisoft/jquery-pjax.git", - "reference": "aef7b953107264f00234902a3880eb50dafc48be" + "reference": "a9298d57da63d14a950f1b94366a864bc62264fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/jquery-pjax/zipball/aef7b953107264f00234902a3880eb50dafc48be", - "reference": "aef7b953107264f00234902a3880eb50dafc48be", - "shasum": null + "url": "https://api.github.com/repos/yiisoft/jquery-pjax/zipball/a9298d57da63d14a950f1b94366a864bc62264fb", + "reference": "a9298d57da63d14a950f1b94366a864bc62264fb" }, "require": { "bower-asset/jquery": ">=1.8" @@ -143,39 +154,45 @@ "markdown", "markdown-extra" ], + "support": { + "issues": "https://github.com/cebe/markdown/issues", + "source": "https://github.com/cebe/markdown" + }, "time": "2018-03-26T11:24:36+00:00" }, { "name": "composer/installers", - "version": "v1.6.0", + "version": "v2.2.0", "source": { "type": "git", "url": "https://github.com/composer/installers.git", - "reference": "cfcca6b1b60bc4974324efb5783c13dca6932b5b" + "reference": "c29dc4b93137acb82734f672c37e029dfbd95b35" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/installers/zipball/cfcca6b1b60bc4974324efb5783c13dca6932b5b", - "reference": "cfcca6b1b60bc4974324efb5783c13dca6932b5b", + "url": "https://api.github.com/repos/composer/installers/zipball/c29dc4b93137acb82734f672c37e029dfbd95b35", + "reference": "c29dc4b93137acb82734f672c37e029dfbd95b35", "shasum": "" }, "require": { - "composer-plugin-api": "^1.0" - }, - "replace": { - "roundcube/plugin-installer": "*", - "shama/baton": "*" + "composer-plugin-api": "^1.0 || ^2.0", + "php": "^7.2 || ^8.0" }, "require-dev": { - "composer/composer": "1.0.*@dev", - "phpunit/phpunit": "^4.8.36" + "composer/composer": "1.6.* || ^2.0", + "composer/semver": "^1 || ^3", + "phpstan/phpstan": "^0.12.55", + "phpstan/phpstan-phpunit": "^0.12.16", + "symfony/phpunit-bridge": "^5.3", + "symfony/process": "^5" }, "type": "composer-plugin", "extra": { "class": "Composer\\Installers\\Plugin", "branch-alias": { - "dev-master": "1.0-dev" - } + "dev-main": "2.x-dev" + }, + "plugin-modifies-install-path": true }, "autoload": { "psr-4": { @@ -196,7 +213,6 @@ "description": "A multi-framework Composer library installer", "homepage": "https://composer.github.io/installers/", "keywords": [ - "Craft", "Dolibarr", "Eliasis", "Hurad", @@ -204,6 +220,7 @@ "Kanboard", "Lan Management System", "MODX Evo", + "MantisBT", "Mautic", "Maya", "OXID", @@ -211,10 +228,11 @@ "Porto", "RadPHP", "SMF", + "Starbug", "Thelia", + "Whmcs", "WolfCMS", "agl", - "aimeos", "annotatecms", "attogram", "bitrix", @@ -233,7 +251,7 @@ "grav", "installer", "itop", - "joomla", + "known", "kohana", "laravel", "lavalite", @@ -241,14 +259,18 @@ "magento", "majima", "mako", + "matomo", "mediawiki", + "miaoxing", "modulework", "modx", "moodle", "osclass", + "pantheon", "phpbb", "piwik", "ppi", + "processwire", "puppet", "pxcms", "reindex", @@ -256,44 +278,61 @@ "shopware", "silverstripe", "sydes", - "symfony", - "typo3", + "sylius", + "tastyigniter", "wordpress", "yawik", "zend", "zikula" ], - "time": "2018-08-27T06:10:37+00:00" + "support": { + "issues": "https://github.com/composer/installers/issues", + "source": "https://github.com/composer/installers/tree/v2.2.0" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-08-20T06:45:11+00:00" }, { "name": "doctrine/lexer", - "version": "1.0.2", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8" + "reference": "84a527db05647743d50373e0ec53a152f2cde568" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/1febd6c3ef84253d7c815bed85fc622ad207a9f8", - "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/84a527db05647743d50373e0ec53a152f2cde568", + "reference": "84a527db05647743d50373e0ec53a152f2cde568", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": "^8.1" }, "require-dev": { - "phpunit/phpunit": "^4.5" + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.9", + "phpunit/phpunit": "^9.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + "Doctrine\\Common\\Lexer\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -301,14 +340,14 @@ "MIT" ], "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, { "name": "Guilherme Blanco", "email": "guilhermeblanco@gmail.com" }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, { "name": "Johannes Schmitt", "email": "schmittjoh@gmail.com" @@ -323,31 +362,48 @@ "parser", "php" ], - "time": "2019-06-08T11:03:04+00:00" + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/3.0.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2022-12-15T16:57:16+00:00" }, { "name": "egulias/email-validator", - "version": "2.1.10", + "version": "4.0.2", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "a6c8d7101b19a451c1707b1b79bbbc56e4bdb7ec" + "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/a6c8d7101b19a451c1707b1b79bbbc56e4bdb7ec", - "reference": "a6c8d7101b19a451c1707b1b79bbbc56e4bdb7ec", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ebaaf5be6c0286928352e054f2d5125608e5405e", + "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e", "shasum": "" }, "require": { - "doctrine/lexer": "^1.0.1", - "php": ">= 5.5" + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" }, "require-dev": { - "dominicsayers/isemail": "dev-master", - "phpunit/phpunit": "^4.8.35||^5.7||^6.0", - "satooshi/php-coveralls": "^1.0.1", - "symfony/phpunit-bridge": "^4.4@dev" + "phpunit/phpunit": "^10.2", + "vimeo/psalm": "^5.12" }, "suggest": { "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" @@ -355,12 +411,12 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "4.0.x-dev" } }, "autoload": { "psr-4": { - "Egulias\\EmailValidator\\": "EmailValidator" + "Egulias\\EmailValidator\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -381,35 +437,55 @@ "validation", "validator" ], - "time": "2019-07-19T20:52:08+00:00" + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/4.0.2" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2023-10-06T06:47:41+00:00" }, { "name": "ezyang/htmlpurifier", - "version": "v4.11.0", + "version": "v4.16.0", "source": { "type": "git", "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "83ab08bc1af7d808a9e0fbf024f1c24bfd73c0a7" + "reference": "523407fb06eb9e5f3d59889b3978d5bfe94299c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/83ab08bc1af7d808a9e0fbf024f1c24bfd73c0a7", - "reference": "83ab08bc1af7d808a9e0fbf024f1c24bfd73c0a7", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/523407fb06eb9e5f3d59889b3978d5bfe94299c8", + "reference": "523407fb06eb9e5f3d59889b3978d5bfe94299c8", "shasum": "" }, "require": { - "php": ">=5.2" + "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0" }, "require-dev": { - "simpletest/simpletest": "dev-master#72de02a7b80c6bb8864ef9bf66d41d2f58f826bd" + "cerdic/css-tidy": "^1.7 || ^2.0", + "simpletest/simpletest": "dev-master" + }, + "suggest": { + "cerdic/css-tidy": "If you want to use the filter 'Filter.ExtractStyleBlocks'.", + "ext-bcmath": "Used for unit conversion and imagecrash protection", + "ext-iconv": "Converts text to and from non-UTF-8 encodings", + "ext-tidy": "Used for pretty-printing HTML" }, "type": "library", "autoload": { + "files": [ + "library/HTMLPurifier.composer.php" + ], "psr-0": { "HTMLPurifier": "library/" }, - "files": [ - "library/HTMLPurifier.composer.php" + "exclude-from-classmap": [ + "/library/HTMLPurifier/Language/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -428,39 +504,47 @@ "keywords": [ "html" ], - "time": "2019-07-14T18:58:38+00:00" + "support": { + "issues": "https://github.com/ezyang/htmlpurifier/issues", + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.16.0" + }, + "time": "2022-09-18T07:06:19+00:00" }, { - "name": "npm-asset/bootstrap", - "version": "4.3.1", + "name": "npm-asset/fortawesome--fontawesome-free", + "version": "6.4.2", "dist": { "type": "tar", - "url": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.3.1.tgz", - "reference": null, - "shasum": null + "url": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.4.2.tgz" }, "type": "npm-asset", "license": [ - "MIT" + "(CC-BY-4.0 AND OFL-1.1 AND MIT)" ] }, { "name": "oomphinc/composer-installers-extender", - "version": "v1.1.2", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/oomphinc/composer-installers-extender.git", - "reference": "ca1c4b16b0905c81d1e77e608f36a2eff1a56f56" + "reference": "cbf4b6f9a24153b785d09eee755b995ba87bd5f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/oomphinc/composer-installers-extender/zipball/ca1c4b16b0905c81d1e77e608f36a2eff1a56f56", - "reference": "ca1c4b16b0905c81d1e77e608f36a2eff1a56f56", + "url": "https://api.github.com/repos/oomphinc/composer-installers-extender/zipball/cbf4b6f9a24153b785d09eee755b995ba87bd5f9", + "reference": "cbf4b6f9a24153b785d09eee755b995ba87bd5f9", "shasum": "" }, "require": { - "composer-plugin-api": "^1.0", - "composer/installers": "^1.0" + "composer-plugin-api": "^1.1 || ^2.0", + "composer/installers": "^1.0 || ^2.0", + "php": ">=7.1" + }, + "require-dev": { + "composer/composer": "^2.0", + "phpunit/phpunit": "^7.2", + "squizlabs/php_codesniffer": "^3.3" }, "type": "composer-plugin", "extra": { @@ -480,107 +564,98 @@ "name": "Stephen Beemsterboer", "email": "stephen@oomphinc.com", "homepage": "https://github.com/balbuf" + }, + { + "name": "Nathan Dentzau", + "email": "nate@oomphinc.com", + "homepage": "http://oomph.is/ndentzau" } ], "description": "Extend the composer/installers plugin to accept any arbitrary package type.", "homepage": "http://www.oomphinc.com/", - "time": "2017-03-31T16:57:39+00:00" + "support": { + "issues": "https://github.com/oomphinc/composer-installers-extender/issues", + "source": "https://github.com/oomphinc/composer-installers-extender/tree/2.0.1" + }, + "time": "2021-12-15T12:32:42+00:00" }, { - "name": "swiftmailer/swiftmailer", - "version": "v6.2.1", + "name": "paragonie/random_compat", + "version": "v9.99.100", "source": { "type": "git", - "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a" + "url": "https://github.com/paragonie/random_compat.git", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a", - "reference": "5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", "shasum": "" }, "require": { - "egulias/email-validator": "~2.0", - "php": ">=7.0.0", - "symfony/polyfill-iconv": "^1.0", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" + "php": ">= 7" }, "require-dev": { - "mockery/mockery": "~0.9.1", - "symfony/phpunit-bridge": "^3.4.19|^4.1.8" + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" }, "suggest": { - "ext-intl": "Needed to support internationalized email addresses", - "true/punycode": "Needed to support internationalized email addresses, if ext-intl is not installed" + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.2-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" + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" } ], - "description": "Swiftmailer, free feature-rich PHP mailer", - "homepage": "https://swiftmailer.symfony.com", + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", "keywords": [ - "email", - "mail", - "mailer" + "csprng", + "polyfill", + "pseudorandom", + "random" ], - "time": "2019-04-21T09:21:45+00:00" + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/random_compat/issues", + "source": "https://github.com/paragonie/random_compat" + }, + "time": "2020-10-15T08:29:30+00:00" }, { - "name": "symfony/polyfill-iconv", - "version": "v1.11.0", + "name": "psr/container", + "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "f037ea22acfaee983e271dd9c3b8bb4150bd8ad7" + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/f037ea22acfaee983e271dd9c3b8bb4150bd8ad7", - "reference": "f037ea22acfaee983e271dd9c3b8bb4150bd8ad7", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", "shasum": "" }, "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-iconv": "For best performance" + "php": ">=7.4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Iconv\\": "" - }, - "files": [ - "bootstrap.php" - ] + "Psr\\Container\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -588,60 +663,52 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" } ], - "description": "Symfony polyfill for the Iconv extension", - "homepage": "https://symfony.com", + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", "keywords": [ - "compatibility", - "iconv", - "polyfill", - "portable", - "shim" + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" ], - "time": "2019-02-06T07:57:58+00:00" + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" }, { - "name": "symfony/polyfill-intl-idn", - "version": "v1.11.0", + "name": "psr/event-dispatcher", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "c766e95bec706cdd89903b1eda8afab7d7a6b7af" + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c766e95bec706cdd89903b1eda8afab7d7a6b7af", - "reference": "c766e95bec706cdd89903b1eda8afab7d7a6b7af", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", "shasum": "" }, "require": { - "php": ">=5.3.3", - "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php72": "^1.9" - }, - "suggest": { - "ext-intl": "For best performance" + "php": ">=7.2.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - }, - "files": [ - "bootstrap.php" - ] + "Psr\\EventDispatcher\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -649,59 +716,49 @@ ], "authors": [ { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - }, - { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "homepage": "https://symfony.com", + "description": "Standard interfaces for event handling.", "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" + "events", + "psr", + "psr-14" ], - "time": "2019-03-04T13:44:35+00:00" + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.11.0", + "name": "psr/log", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "fe5e94c604826c35a32fa832f35bd036b6799609" + "url": "https://github.com/php-fig/log.git", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fe5e94c604826c35a32fa832f35bd036b6799609", - "reference": "fe5e94c604826c35a32fa832f35bd036b6799609", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", "shasum": "" }, "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-mbstring": "For best performance" + "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-master": "3.x-dev" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.php" - ] + "Psr\\Log\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -709,55 +766,44 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" } ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" + "log", + "psr", + "psr-3" ], - "time": "2019-02-06T07:57:58+00:00" + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.0" + }, + "time": "2021-07-14T16:46:02+00:00" }, { - "name": "symfony/polyfill-php72", - "version": "v1.11.0", + "name": "sjaakp/yii2-icon", + "version": "1.2.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c" + "url": "https://github.com/sjaakp/yii2-icon.git", + "reference": "1ed03cb3ca66301a1e9e3cb84708d465bdcd8e7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/ab50dcf166d5f577978419edd37aa2bb8eabce0c", - "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c", + "url": "https://api.github.com/repos/sjaakp/yii2-icon/zipball/1ed03cb3ca66301a1e9e3cb84708d465bdcd8e7d", + "reference": "1ed03cb3ca66301a1e9e3cb84708d465bdcd8e7d", "shasum": "" }, "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.11-dev" - } + "yiisoft/yii2": "*" }, + "type": "yii2-extension", "autoload": { "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, - "files": [ - "bootstrap.php" - ] + "sjaakp\\icon\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -765,485 +811,539 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sjaak Priester", + "email": "sjaak@sjaakpriester.nl", + "homepage": "https://sjaakpriester.nl" } ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", + "description": "Raw SVG icons in Yii2", "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" + "FontAwesome", + "icon", + "svg", + "yii", + "yii2" ], - "time": "2019-02-06T07:57:58+00:00" + "support": { + "issues": "https://github.com/sjaakp/yii2-icon/issues", + "source": "https://github.com/sjaakp/yii2-icon/tree/1.2.0" + }, + "time": "2022-05-03T14:15:01+00:00" }, { - "name": "terabytesoftw/helper-mailer", - "version": "dev-master", + "name": "symfony/deprecation-contracts", + "version": "v3.3.0", "source": { "type": "git", - "url": "https://github.com/terabytesoftw/helper-mailer.git", - "reference": "c8ed1ac09b4959ec81109b1a48ce8dabd1196953" + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/terabytesoftw/helper-mailer/zipball/c8ed1ac09b4959ec81109b1a48ce8dabd1196953", - "reference": "c8ed1ac09b4959ec81109b1a48ce8dabd1196953", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", "shasum": "" }, "require": { - "oomphinc/composer-installers-extender": "^1.1", - "php": "^7.2.0", - "yiisoft/yii2": "^2.0.20", - "yiisoft/yii2-swiftmailer": "^2.1.2" + "php": ">=8.1" }, - "require-dev": { - "codeception/c3": "2.*", - "codeception/codeception": "^3.0", - "dms/phpunit-arraysubset-asserts": "^0.1.0", - "hiqdev/composer-config-plugin": "^0.3.0", - "monolog/monolog": "*", - "yiisoft/yii2-debug": "~2.1.0", - "yiisoft/yii2-faker": "~2.0.0", - "yiisoft/yii2-gii": "~2.1.0" - }, - "type": "yii2-extension", + "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-main": "3.4-dev" }, - "config-plugin": { - "params": [ - "config/maileruser.php" - ], - "tests": [ - "config/test.php" - ], - "web": [ - "config/web.php" - ] - }, - "installer-types": [ - "bower-asset", - "npm-asset" - ], - "installer-paths": { - "./node_modules/{$name}": [ - "type:bower-asset", - "type:npm-asset" - ] + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { - "psr-4": { - "terabytesoft\\helpers\\": "src/" - } + "files": [ + "function.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Wilmer Arambula", - "email": "wilmer.arambula@gmail.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Component Mailer User Core", - "homepage": "https://github.com/terabytesoftw/helper-mailer", - "keywords": [ - "component", - "core", - "mailer", - "user", - "yii" + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } ], - "time": "2019-07-30T15:27:42+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { - "name": "terabytesoftw/widget-alert", - "version": "dev-master", + "name": "symfony/event-dispatcher", + "version": "v6.3.2", "source": { "type": "git", - "url": "https://github.com/terabytesoftw/widget-alert.git", - "reference": "8cfcd2a0bac0587c587f02881dcf774affc6da79" + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/terabytesoftw/widget-alert/zipball/8cfcd2a0bac0587c587f02881dcf774affc6da79", - "reference": "8cfcd2a0bac0587c587f02881dcf774affc6da79", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/adb01fe097a4ee930db9258a3cc906b5beb5cf2e", + "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e", "shasum": "" }, "require": { - "oomphinc/composer-installers-extender": "^1.1", - "php": ">=5.4.0", - "yiisoft/yii2": "^2.0.20", - "yiisoft/yii2-bootstrap4": "^2.0.3" + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<5.4", + "symfony/service-contracts": "<2.5" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" }, "require-dev": { - "codeception/c3": "2.*", - "codeception/codeception": "^3.0", - "hiqdev/composer-config-plugin": "^1.0@dev", - "monolog/monolog": "*" - }, - "type": "yii2-extension", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - }, - "installer-types": [ - "bower-asset", - "npm-asset" - ], - "installer-paths": { - "./node_modules/{$name}": [ - "type:bower-asset", - "type:npm-asset" - ] - } + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/error-handler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^5.4|^6.0" }, + "type": "library", "autoload": { "psr-4": { - "terabytesoft\\widgets\\": "src" - } + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Wilmer Arambula", - "email": "wilmer.arambula@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Widget Alert with Bootstrap4", - "homepage": "https://github.com/terabytesoftw/alert", - "keywords": [ - "alert", - "bootstrap4", - "widget", - "yii" + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v6.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } ], - "time": "2019-06-25T13:48:52+00:00" + "time": "2023-07-06T06:56:43+00:00" }, { - "name": "yiisoft/yii2", - "version": "2.0.23", + "name": "symfony/event-dispatcher-contracts", + "version": "v3.3.0", "source": { "type": "git", - "url": "https://github.com/yiisoft/yii2-framework.git", - "reference": "d430bf78cf59e341bf4a1cb401a4ae71a889a492" + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "a76aed96a42d2b521153fb382d418e30d18b59df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-framework/zipball/d430bf78cf59e341bf4a1cb401a4ae71a889a492", - "reference": "d430bf78cf59e341bf4a1cb401a4ae71a889a492", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/a76aed96a42d2b521153fb382d418e30d18b59df", + "reference": "a76aed96a42d2b521153fb382d418e30d18b59df", "shasum": "" }, "require": { - "bower-asset/inputmask": "~3.2.2 | ~3.3.5", - "bower-asset/jquery": "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" + "php": ">=8.1", + "psr/event-dispatcher": "^1" }, - "bin": [ - "yii" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-main": "3.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { "psr-4": { - "yii\\": "" + "Symfony\\Contracts\\EventDispatcher\\": "" } }, "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": "Carsten Brandt", - "email": "mail@cebe.cc", - "homepage": "http://cebe.cc/", - "role": "Core framework development" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "Timur Ruziev", - "email": "resurtm@gmail.com", - "homepage": "http://resurtm.com/", - "role": "Core framework development" - }, + "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" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.3.0" + }, + "funding": [ { - "name": "Paul Klimov", - "email": "klimov.paul@gmail.com", - "role": "Core framework development" + "url": "https://symfony.com/sponsor", + "type": "custom" }, { - "name": "Dmitry Naumenko", - "email": "d.naumenko.a@gmail.com", - "role": "Core framework development" + "url": "https://github.com/fabpot", + "type": "github" }, { - "name": "Boudewijn Vahrmeijer", - "email": "info@dynasource.eu", - "homepage": "http://dynasource.eu", - "role": "Core framework development" + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "description": "Yii PHP Framework Version 2", - "homepage": "http://www.yiiframework.com/", - "keywords": [ - "framework", - "yii2" - ], - "time": "2019-07-16T19:44:09+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { - "name": "yiisoft/yii2-bootstrap4", - "version": "2.0.6", + "name": "symfony/mailer", + "version": "v6.3.5", "source": { "type": "git", - "url": "https://github.com/yiisoft/yii2-bootstrap4.git", - "reference": "c47ec7b53f45ce16f63d6e65cc952d517b432931" + "url": "https://github.com/symfony/mailer.git", + "reference": "d89611a7830d51b5e118bca38e390dea92f9ea06" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-bootstrap4/zipball/c47ec7b53f45ce16f63d6e65cc952d517b432931", - "reference": "c47ec7b53f45ce16f63d6e65cc952d517b432931", + "url": "https://api.github.com/repos/symfony/mailer/zipball/d89611a7830d51b5e118bca38e390dea92f9ea06", + "reference": "d89611a7830d51b5e118bca38e390dea92f9ea06", "shasum": "" }, "require": { - "npm-asset/bootstrap": "^4.3", - "yiisoft/yii2": "~2.0" + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=8.1", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/mime": "^6.2", + "symfony/service-contracts": "^2.5|^3" }, - "require-dev": { - "phpunit/phpunit": "<7", - "yiisoft/yii2-coding-standards": "~2.0" + "conflict": { + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<5.4", + "symfony/messenger": "<6.2", + "symfony/mime": "<6.2", + "symfony/twig-bridge": "<6.2.1" }, - "type": "yii2-extension", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } + "require-dev": { + "symfony/console": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/messenger": "^6.2", + "symfony/twig-bridge": "^6.2" }, + "type": "library", "autoload": { "psr-4": { - "yii\\bootstrap4\\": "src" - } + "Symfony\\Component\\Mailer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "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/" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Alexander Makarov", - "email": "sam@rmcreative.ru", - "homepage": "http://rmcreative.ru/" - }, + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps sending emails", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailer/tree/v6.3.5" + }, + "funding": [ { - "name": "Antonio Ramirez", - "email": "amigo.cobos@gmail.com" + "url": "https://symfony.com/sponsor", + "type": "custom" }, { - "name": "Paul Klimov", - "email": "klimov.paul@gmail.com" + "url": "https://github.com/fabpot", + "type": "github" }, { - "name": "Simon Karlen", - "email": "simi.albi@outlook.com" + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "description": "The Twitter Bootstrap extension for the Yii framework", - "keywords": [ - "bootstrap", - "bootstrap4", - "yii2" - ], - "time": "2019-07-23T16:25:05+00:00" + "time": "2023-09-06T09:47:15+00:00" }, { - "name": "yiisoft/yii2-composer", - "version": "2.0.8", + "name": "symfony/mime", + "version": "v6.3.5", "source": { "type": "git", - "url": "https://github.com/yiisoft/yii2-composer.git", - "reference": "5c7ca9836cf80b34db265332a7f2f8438eb469b9" + "url": "https://github.com/symfony/mime.git", + "reference": "d5179eedf1cb2946dbd760475ebf05c251ef6a6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-composer/zipball/5c7ca9836cf80b34db265332a7f2f8438eb469b9", - "reference": "5c7ca9836cf80b34db265332a7f2f8438eb469b9", + "url": "https://api.github.com/repos/symfony/mime/zipball/d5179eedf1cb2946dbd760475ebf05c251ef6a6e", + "reference": "d5179eedf1cb2946dbd760475ebf05c251ef6a6e", "shasum": "" }, "require": { - "composer-plugin-api": "^1.0" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" }, - "require-dev": { - "composer/composer": "^1.0", - "phpunit/phpunit": "<7" + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<5.4", + "symfony/serializer": "<6.2.13|>=6.3,<6.3.2" }, - "type": "composer-plugin", - "extra": { - "class": "yii\\composer\\Plugin", - "branch-alias": { - "dev-master": "2.0.x-dev" - } + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/property-info": "^5.4|^6.0", + "symfony/serializer": "~6.2.13|^6.3.2" }, + "type": "library", "autoload": { "psr-4": { - "yii\\composer\\": "" - } + "Symfony\\Component\\Mime\\": "" + }, + "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": "Carsten Brandt", - "email": "mail@cebe.cc" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "The composer plugin for Yii extension installer", + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", "keywords": [ - "composer", - "extension installer", - "yii2" + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v6.3.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } ], - "time": "2019-07-16T13:22:30+00:00" + "time": "2023-09-29T06:59:36+00:00" }, { - "name": "yiisoft/yii2-swiftmailer", - "version": "2.1.2", + "name": "symfony/polyfill-intl-idn", + "version": "v1.28.0", "source": { "type": "git", - "url": "https://github.com/yiisoft/yii2-swiftmailer.git", - "reference": "09659a55959f9e64b8178d842b64a9ffae42b994" + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "ecaafce9f77234a6a449d29e49267ba10499116d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-swiftmailer/zipball/09659a55959f9e64b8178d842b64a9ffae42b994", - "reference": "09659a55959f9e64b8178d842b64a9ffae42b994", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d", + "reference": "ecaafce9f77234a6a449d29e49267ba10499116d", "shasum": "" }, "require": { - "swiftmailer/swiftmailer": "~6.0", - "yiisoft/yii2": ">=2.0.4" + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" }, - "type": "yii2-extension", + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1.x-dev" + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "yii\\swiftmailer\\": "src" + "Symfony\\Polyfill\\Intl\\Idn\\": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Paul Klimov", - "email": "klimov.paul@gmail.com" + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "The SwiftMailer integration for the Yii framework", + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", "keywords": [ - "email", - "mail", - "mailer", - "swift", - "swiftmailer", - "yii2" + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" ], - "time": "2018-09-23T22:00:47+00:00" - } - ], - "packages-dev": [ + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-26T09:30:37+00:00" + }, { - "name": "behat/gherkin", - "version": "v4.6.0", + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.28.0", "source": { "type": "git", - "url": "https://github.com/Behat/Gherkin.git", - "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07" + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/ab0a02ea14893860bca00f225f5621d351a3ad07", - "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", "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" + "php": ">=7.1" }, "suggest": { - "symfony/yaml": "If you want to parse features, represented in YAML files" + "ext-intl": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.4-dev" + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "psr-0": { - "Behat\\Gherkin": "src/" - } + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1251,143 +1351,82 @@ ], "authors": [ { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Gherkin DSL parser for PHP 5.3", - "homepage": "http://behat.org/", + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", "keywords": [ - "BDD", - "Behat", - "Cucumber", - "DSL", - "gherkin", - "parser" + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" ], - "time": "2019-01-16T14:22:17+00:00" - }, - { - "name": "codeception/c3", - "version": "2.4.1", - "source": { - "type": "git", - "url": "https://github.com/Codeception/c3.git", - "reference": "d841be32a6785e2f565b9f88f5ff36c905931a9a" + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Codeception/c3/zipball/d841be32a6785e2f565b9f88f5ff36c905931a9a", - "reference": "d841be32a6785e2f565b9f88f5ff36c905931a9a", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0", - "php": ">=5.4.0" - }, - "type": "composer-plugin", - "extra": { - "class": "Codeception\\c3\\Installer" - }, - "autoload": { - "psr-4": { - "Codeception\\c3\\": "." - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ + "funding": [ { - "name": "Tiger Seo", - "email": "tiger.seo@gmail.com" + "url": "https://symfony.com/sponsor", + "type": "custom" }, { - "name": "Michael Bodnarchuk", - "email": "davert.php@codegyre.com", - "homepage": "http://codegyre.com" + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "description": "CodeCoverage collector for Codeception", - "homepage": "http://codeception.com/", - "keywords": [ - "code coverage", - "codecoverage" - ], - "time": "2018-05-26T22:34:28+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { - "name": "codeception/codeception", - "version": "3.0.3", + "name": "symfony/polyfill-mbstring", + "version": "v1.28.0", "source": { "type": "git", - "url": "https://github.com/Codeception/Codeception.git", - "reference": "feb566a9dc26993611602011ae3834d8e3c1dd7f" + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "42292d99c55abe617799667f454222c54c60e229" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/Codeception/zipball/feb566a9dc26993611602011ae3834d8e3c1dd7f", - "reference": "feb566a9dc26993611602011ae3834d8e3c1dd7f", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", + "reference": "42292d99c55abe617799667f454222c54c60e229", "shasum": "" }, "require": { - "behat/gherkin": "^4.4.0", - "codeception/phpunit-wrapper": ">6.0.15 <6.1.0 | ^6.6.1 | ^7.7.1 | ^8.0.3", - "codeception/stub": "^2.0", - "ext-curl": "*", - "ext-json": "*", - "ext-mbstring": "*", - "facebook/webdriver": "^1.6.0", - "guzzlehttp/guzzle": "^6.3.0", - "guzzlehttp/psr7": "~1.4", - "hoa/console": "~3.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" + "php": ">=7.1" }, - "require-dev": { - "codeception/specify": "~0.3", - "doctrine/annotations": "^1", - "doctrine/orm": "^2", - "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" + "provide": { + "ext-mbstring": "*" }, "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" + "ext-mbstring": "For best performance" }, - "bin": [ - "codecept" - ], "type": "library", "extra": { - "branch-alias": [] + "branch-alias": { + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Codeception\\": "src/Codeception", - "Codeception\\Extension\\": "ext" + "Symfony\\Polyfill\\Mbstring\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -1396,51 +1435,75 @@ ], "authors": [ { - "name": "Michael Bodnarchuk", - "email": "davert@mail.ua", - "homepage": "http://codegyre.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "BDD-style testing framework", - "homepage": "http://codeception.com/", + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", "keywords": [ - "BDD", - "TDD", - "acceptance testing", - "functional testing", - "unit testing" + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" ], - "time": "2019-07-18T16:21:08+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-28T09:04:16+00:00" }, { - "name": "codeception/phpunit-wrapper", - "version": "8.0.4", + "name": "symfony/polyfill-php72", + "version": "v1.28.0", "source": { "type": "git", - "url": "https://github.com/Codeception/phpunit-wrapper.git", - "reference": "7090736f36b4398cae6ef838b9a2bdfe8d8d104b" + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/7090736f36b4398cae6ef838b9a2bdfe8d8d104b", - "reference": "7090736f36b4398cae6ef838b9a2bdfe8d8d104b", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/70f4aebd92afca2f865444d30a4d2151c13c3179", + "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179", "shasum": "" }, "require": { - "php": ">=7.2", - "phpunit/php-code-coverage": "^7.0", - "phpunit/phpunit": "^8.0", - "sebastian/comparator": "^3.0", - "sebastian/diff": "^3.0" - }, - "require-dev": { - "codeception/specify": "*", - "vlucas/phpdotenv": "^3.0" + "php": ">=7.1" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Codeception\\PHPUnit\\": "src\\" + "Symfony\\Polyfill\\Php72\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -1449,289 +1512,517 @@ ], "authors": [ { - "name": "Davert", - "email": "davert.php@resend.cc" + "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" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "description": "PHPUnit classes used by Codeception", - "time": "2019-02-27T12:58:57+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { - "name": "codeception/stub", - "version": "2.1.0", + "name": "symfony/service-contracts", + "version": "v3.3.0", "source": { "type": "git", - "url": "https://github.com/Codeception/Stub.git", - "reference": "853657f988942f7afb69becf3fd0059f192c705a" + "url": "https://github.com/symfony/service-contracts.git", + "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/Stub/zipball/853657f988942f7afb69becf3fd0059f192c705a", - "reference": "853657f988942f7afb69becf3fd0059f192c705a", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", + "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", "shasum": "" }, "require": { - "codeception/phpunit-wrapper": ">6.0.15 <6.1.0 | ^6.6.1 | ^7.7.1 | ^8.0.3" + "php": ">=8.1", + "psr/container": "^2.0" + }, + "conflict": { + "ext-psr": "<1.1|>=2" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, "autoload": { "psr-4": { - "Codeception\\": "src/" - } + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "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" + "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" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-05-23T14:45:45+00:00" }, { - "name": "dms/phpunit-arraysubset-asserts", - "version": "v0.1.0", + "name": "yiisoft/yii2", + "version": "2.2.x-dev", "source": { "type": "git", - "url": "https://github.com/rdohms/phpunit-arraysubset-asserts.git", - "reference": "d618ece5d53e05be87eba835b079377eaafbd7c8" + "url": "https://github.com/yiisoft/yii2-framework.git", + "reference": "ab8a9feda3b3fdf5c28c3b5f53bcc7bd85a8af2c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rdohms/phpunit-arraysubset-asserts/zipball/d618ece5d53e05be87eba835b079377eaafbd7c8", - "reference": "d618ece5d53e05be87eba835b079377eaafbd7c8", + "url": "https://api.github.com/repos/yiisoft/yii2-framework/zipball/ab8a9feda3b3fdf5c28c3b5f53bcc7bd85a8af2c", + "reference": "ab8a9feda3b3fdf5c28c3b5f53bcc7bd85a8af2c", "shasum": "" }, "require": { - "php": "^7.2", - "phpunit/phpunit": "^8.0" - }, - "require-dev": { - "dms/coding-standard": "^1.0", - "squizlabs/php_codesniffer": "^3.4" + "bower-asset/inputmask": "~3.2.2 | ~3.3.5", + "bower-asset/jquery": "3.7.*@stable | 3.6.*@stable | 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": "*", + "paragonie/random_compat": ">=1", + "php": ">=8.1", + "yiisoft/yii2-composer": "~2.0.4" }, + "bin": [ + "yii" + ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, "autoload": { "psr-4": { - "DMS\\PHPUnitExtensions\\ArraySubset\\": "src" + "yii\\": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Rafael Dohms", - "email": "rdohms@gmail.com" + "name": "Qiang Xue", + "email": "qiang.xue@gmail.com", + "homepage": "https://www.yiiframework.com/", + "role": "Founder and project lead" + }, + { + "name": "Alexander Makarov", + "email": "sam@rmcreative.ru", + "homepage": "https://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": "https://www.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": "https://www.yiiframework.com/", + "keywords": [ + "framework", + "yii2" + ], + "support": { + "forum": "https://forum.yiiframework.com/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/yii2/issues?state=open", + "source": "https://github.com/yiisoft/yii2", + "wiki": "https://www.yiiframework.com/wiki" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/yiisoft/yii2", + "type": "tidelift" } ], - "description": "This package provides Array Subset and related asserts once depracated in PHPunit 8", - "time": "2019-02-17T14:29:58+00:00" + "time": "2023-09-30T11:52:51+00:00" }, { - "name": "doctrine/instantiator", - "version": "1.2.0", + "name": "yiisoft/yii2-bootstrap5", + "version": "2.0.4", "source": { "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "a2c590166b2133a4633738648b6b064edae0814a" + "url": "https://github.com/yiisoft/yii2-bootstrap5.git", + "reference": "0ce35f80ca07763fa2c6f38d1c0a1aaf65c76d2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/a2c590166b2133a4633738648b6b064edae0814a", - "reference": "a2c590166b2133a4633738648b6b064edae0814a", + "url": "https://api.github.com/repos/yiisoft/yii2-bootstrap5/zipball/0ce35f80ca07763fa2c6f38d1c0a1aaf65c76d2e", + "reference": "0ce35f80ca07763fa2c6f38d1c0a1aaf65c76d2e", "shasum": "" }, "require": { - "php": "^7.1" + "bower-asset/bootstrap": "^5.1.0", + "ext-json": "*", + "php": ">=7.0", + "yiisoft/yii2": "^2.0.42" }, "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" + "phpunit/phpunit": "^6.5.14", + "twbs/bootstrap-icons": "^1.7.2", + "yiisoft/yii2-coding-standards": "~2.0" }, - "type": "library", + "suggest": { + "twbs/bootstrap-icons": "Add this package to the `require` section of your `composer.json` if you'd like to use the bootstrap icon asset." + }, + "type": "yii2-extension", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" - } + "dev-master": "2.0.x-dev" + }, + "bootstrap": "yii\\bootstrap5\\i18n\\TranslationBootstrap" }, "autoload": { "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + "yii\\bootstrap5\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" + "name": "Sergey Zhukovskiy", + "email": "mylistryx@gmail.com", + "homepage": "https://net23.ru/" + }, + { + "name": "Simon Karlen", + "email": "simi.albi@outlook.com" } ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "description": "The Twitter Bootstrap v5 extension for the Yii framework", "keywords": [ - "constructor", - "instantiate" + "bootstrap", + "bootstrap5", + "yii2" + ], + "support": { + "issues": "https://github.com/yiisoft/yii2-bootstrap5/issues", + "source": "https://github.com/yiisoft/yii2-bootstrap5" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/yiisoft/yii2-bootstrap5", + "type": "tidelift" + } ], - "time": "2019-03-17T17:37:11+00:00" + "time": "2022-11-30T08:25:21+00:00" }, { - "name": "facebook/webdriver", - "version": "1.7.1", + "name": "yiisoft/yii2-composer", + "version": "2.0.10", "source": { "type": "git", - "url": "https://github.com/facebook/php-webdriver.git", - "reference": "e43de70f3c7166169d0f14a374505392734160e5" + "url": "https://github.com/yiisoft/yii2-composer.git", + "reference": "94bb3f66e779e2774f8776d6e1bdeab402940510" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/e43de70f3c7166169d0f14a374505392734160e5", - "reference": "e43de70f3c7166169d0f14a374505392734160e5", + "url": "https://api.github.com/repos/yiisoft/yii2-composer/zipball/94bb3f66e779e2774f8776d6e1bdeab402940510", + "reference": "94bb3f66e779e2774f8776d6e1bdeab402940510", "shasum": "" }, "require": { - "ext-curl": "*", - "ext-json": "*", - "ext-mbstring": "*", - "ext-zip": "*", - "php": "^5.6 || ~7.0", - "symfony/process": "^2.8 || ^3.1 || ^4.0" + "composer-plugin-api": "^1.0 | ^2.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" + "composer/composer": "^1.0 | ^2.0@dev", + "phpunit/phpunit": "<7" }, - "type": "library", + "type": "composer-plugin", "extra": { + "class": "yii\\composer\\Plugin", "branch-alias": { - "dev-community": "1.5-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { "psr-4": { - "Facebook\\WebDriver\\": "lib/" + "yii\\composer\\": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache-2.0" + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Qiang Xue", + "email": "qiang.xue@gmail.com" + }, + { + "name": "Carsten Brandt", + "email": "mail@cebe.cc" + } ], - "description": "A PHP client for Selenium WebDriver", - "homepage": "https://github.com/facebook/php-webdriver", + "description": "The composer plugin for Yii extension installer", "keywords": [ - "facebook", - "php", - "selenium", - "webdriver" + "composer", + "extension installer", + "yii2" + ], + "support": { + "forum": "http://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/yii2-composer/issues", + "source": "https://github.com/yiisoft/yii2-composer", + "wiki": "http://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/yiisoft/yii2-composer", + "type": "tidelift" + } ], - "time": "2019-06-13T08:02:18+00:00" + "time": "2020-06-24T00:04:01+00:00" }, { - "name": "fzaninotto/faker", - "version": "v1.8.0", + "name": "yiisoft/yii2-symfonymailer", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/fzaninotto/Faker.git", - "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de" + "url": "https://github.com/yiisoft/yii2-symfonymailer.git", + "reference": "291c00979a9bf14e89bb5230ddd700a6dc130e51" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/f72816b43e74063c8b10357394b6bba8cb1c10de", - "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de", + "url": "https://api.github.com/repos/yiisoft/yii2-symfonymailer/zipball/291c00979a9bf14e89bb5230ddd700a6dc130e51", + "reference": "291c00979a9bf14e89bb5230ddd700a6dc130e51", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": ">=7.4.0", + "symfony/mailer": ">=5.4.0", + "yiisoft/yii2": ">=2.0.4" }, "require-dev": { - "ext-intl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7", - "squizlabs/php_codesniffer": "^1.5" + "captainhook/captainhook": "^5.10", + "captainhook/plugin-composer": "^5.3", + "phpunit/phpunit": "9.5.10", + "symplify/easy-coding-standard": "^10.1", + "vimeo/psalm": "^4.22" }, - "type": "library", + "type": "yii2-extension", "extra": { "branch-alias": { - "dev-master": "1.8-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { "psr-4": { - "Faker\\": "src/Faker/" + "yii\\symfonymailer\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "François Zaninotto" + "name": "Kirill Petrov", + "email": "archibeardrinker@gmail.com" } ], - "description": "Faker is a PHP library that generates fake data for you.", + "description": "The SymfonyMailer integration for the Yii framework", "keywords": [ - "data", - "faker", - "fixtures" + "email", + "mail", + "mailer", + "symfony", + "symfonymailer", + "yii2" ], - "time": "2018-07-12T10:23:15+00:00" - }, + "support": { + "forum": "http://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/yii2-symfonymailer/issues", + "source": "https://github.com/yiisoft/yii2-symfonymailer", + "wiki": "http://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/yiisoft/yii2-symfonymailer", + "type": "tidelift" + } + ], + "time": "2022-12-05T08:20:13+00:00" + } + ], + "packages-dev": [ { - "name": "guzzlehttp/guzzle", - "version": "6.3.3", + "name": "behat/gherkin", + "version": "v4.9.0", "source": { "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" + "url": "https://github.com/Behat/Gherkin.git", + "reference": "0bc8d1e30e96183e4f36db9dc79caead300beff4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/0bc8d1e30e96183e4f36db9dc79caead300beff4", + "reference": "0bc8d1e30e96183e4f36db9dc79caead300beff4", "shasum": "" }, "require": { - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.4", - "php": ">=5.5" + "php": "~7.2|~8.0" }, "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.0" + "cucumber/cucumber": "dev-gherkin-22.0.0", + "phpunit/phpunit": "~8|~9", + "symfony/yaml": "~3|~4|~5" }, "suggest": { - "psr/log": "Required for using the Log middleware" + "symfony/yaml": "If you want to parse features, represented in YAML files" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "6.3-dev" + "dev-master": "4.x-dev" } }, "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\": "src/" + "psr-0": { + "Behat\\Gherkin": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1740,57 +2031,56 @@ ], "authors": [ { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" } ], - "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", + "description": "Gherkin DSL parser for PHP", + "homepage": "http://behat.org/", "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" + "BDD", + "Behat", + "Cucumber", + "DSL", + "gherkin", + "parser" ], - "time": "2018-04-22T15:46:56+00:00" + "support": { + "issues": "https://github.com/Behat/Gherkin/issues", + "source": "https://github.com/Behat/Gherkin/tree/v4.9.0" + }, + "time": "2021-10-12T13:05:09+00:00" }, { - "name": "guzzlehttp/promises", - "version": "v1.3.1", + "name": "codeception/c3", + "version": "2.8.1", "source": { "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + "url": "https://github.com/Codeception/c3.git", + "reference": "0b16f22ec0c46bc131063a3f704bdf9761192d6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "url": "https://api.github.com/repos/Codeception/c3/zipball/0b16f22ec0c46bc131063a3f704bdf9761192d6e", + "reference": "0b16f22ec0c46bc131063a3f704bdf9761192d6e", "shasum": "" }, "require": { + "composer-plugin-api": "^1.0 || ^2.0", "php": ">=5.5.0" }, "require-dev": { - "phpunit/phpunit": "^4.0" + "composer/composer": "^1.0 || ^2.0" }, - "type": "library", + "type": "composer-plugin", "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } + "class": "Codeception\\c3\\Installer" }, "autoload": { "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] + "Codeception\\c3\\": "." + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1798,58 +2088,109 @@ ], "authors": [ { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" + "name": "Tiger Seo", + "email": "tiger.seo@gmail.com" + }, + { + "name": "Michael Bodnarchuk", + "email": "davert.php@codegyre.com", + "homepage": "http://codegyre.com" } ], - "description": "Guzzle promises library", + "description": "CodeCoverage collector for Codeception", + "homepage": "http://codeception.com/", "keywords": [ - "promise" + "code coverage", + "codecoverage" ], - "time": "2016-12-20T10:07:11+00:00" + "support": { + "issues": "https://github.com/Codeception/c3/issues", + "source": "https://github.com/Codeception/c3/tree/2.8.1" + }, + "time": "2023-02-10T18:07:43+00:00" }, { - "name": "guzzlehttp/psr7", - "version": "1.6.1", + "name": "codeception/codeception", + "version": "5.0.11", "source": { "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a" + "url": "https://github.com/Codeception/Codeception.git", + "reference": "1998a287a3d7f2771c9591aef1c528d9d44cc4b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a", + "url": "https://api.github.com/repos/Codeception/Codeception/zipball/1998a287a3d7f2771c9591aef1c528d9d44cc4b4", + "reference": "1998a287a3d7f2771c9591aef1c528d9d44cc4b4", "shasum": "" }, "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" + "behat/gherkin": "^4.6.2", + "codeception/lib-asserts": "^2.0", + "codeception/stub": "^4.1", + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "php": "^8.0", + "phpunit/php-code-coverage": "^9.2 || ^10.0", + "phpunit/php-text-template": "^2.0 || ^3.0", + "phpunit/php-timer": "^5.0.3 || ^6.0", + "phpunit/phpunit": "^9.5.20 || ^10.0", + "psy/psysh": "^0.11.2", + "sebastian/comparator": "^4.0.5 || ^5.0", + "sebastian/diff": "^4.0.3 || ^5.0", + "symfony/console": ">=4.4.24 <7.0", + "symfony/css-selector": ">=4.4.24 <7.0", + "symfony/event-dispatcher": ">=4.4.24 <7.0", + "symfony/finder": ">=4.4.24 <7.0", + "symfony/var-dumper": ">=4.4.24 < 7.0", + "symfony/yaml": ">=4.4.24 <7.0" }, - "provide": { - "psr/http-message-implementation": "1.0" + "conflict": { + "codeception/lib-innerbrowser": "<3.1.3", + "codeception/module-filesystem": "<3.0", + "codeception/module-phpbrowser": "<2.5" + }, + "replace": { + "codeception/phpunit-wrapper": "*" }, "require-dev": { - "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + "codeception/lib-innerbrowser": "*@dev", + "codeception/lib-web": "^1.0", + "codeception/module-asserts": "*@dev", + "codeception/module-cli": "*@dev", + "codeception/module-db": "*@dev", + "codeception/module-filesystem": "*@dev", + "codeception/module-phpbrowser": "*@dev", + "codeception/util-universalframework": "*@dev", + "ext-simplexml": "*", + "jetbrains/phpstorm-attributes": "^1.0", + "symfony/dotenv": ">=4.4.24 <7.0", + "symfony/process": ">=4.4.24 <7.0", + "vlucas/phpdotenv": "^5.1" }, "suggest": { - "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" + "codeception/specify": "BDD-style code blocks", + "codeception/verify": "BDD-style assertions", + "ext-simplexml": "For loading params from XML files", + "stecman/symfony-console-completion": "For BASH autocompletion", + "symfony/dotenv": "For loading params from .env files", + "symfony/phpunit-bridge": "For phpunit-bridge support", + "vlucas/phpdotenv": "For loading params from .env files" }, + "bin": [ + "codecept" + ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6-dev" - } - }, "autoload": { + "files": [ + "functions.php" + ], "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" + "Codeception\\": "src/Codeception", + "Codeception\\Extension\\": "ext" }, - "files": [ - "src/functions_include.php" + "classmap": [ + "src/PHPUnit/TestCase.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -1858,710 +2199,683 @@ ], "authors": [ { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Schultze", - "homepage": "https://github.com/Tobion" + "name": "Michael Bodnarchuk", + "email": "davert.ua@gmail.com", + "homepage": "https://codeception.com" } ], - "description": "PSR-7 message implementation that also provides common utility methods", + "description": "BDD-style testing framework", + "homepage": "https://codeception.com/", "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" + "BDD", + "TDD", + "acceptance testing", + "functional testing", + "unit testing" + ], + "support": { + "issues": "https://github.com/Codeception/Codeception/issues", + "source": "https://github.com/Codeception/Codeception/tree/5.0.11" + }, + "funding": [ + { + "url": "https://opencollective.com/codeception", + "type": "open_collective" + } ], - "time": "2019-07-01T23:21:34+00:00" + "time": "2023-08-22T06:42:39+00:00" }, { - "name": "hiqdev/composer-config-plugin", - "version": "0.3.0", + "name": "codeception/lib-asserts", + "version": "2.1.0", "source": { "type": "git", - "url": "https://github.com/hiqdev/composer-config-plugin.git", - "reference": "f8155eb6f5e3a6974dcd96f0bc6bce49e72b51ba" + "url": "https://github.com/Codeception/lib-asserts.git", + "reference": "b8c7dff552249e560879c682ba44a4b963af91bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hiqdev/composer-config-plugin/zipball/f8155eb6f5e3a6974dcd96f0bc6bce49e72b51ba", - "reference": "f8155eb6f5e3a6974dcd96f0bc6bce49e72b51ba", + "url": "https://api.github.com/repos/Codeception/lib-asserts/zipball/b8c7dff552249e560879c682ba44a4b963af91bc", + "reference": "b8c7dff552249e560879c682ba44a4b963af91bc", "shasum": "" }, "require": { - "composer-plugin-api": "^1.0", - "php": ">=7.0.0" - }, - "require-dev": { - "composer/composer": "~1.0@dev" - }, - "suggest": { - "symfony/yaml": "^2.0 || ^3.0 || ^4.0 for YAML files support", - "vlucas/phpdotenv": "^2.0 for `.env` files support" - }, - "type": "composer-plugin", - "extra": { - "class": "hiqdev\\composer\\config\\Plugin", - "branch-alias": { - "dev-master": "1.0.x-dev" - } + "codeception/phpunit-wrapper": "^7.7.1 | ^8.0.3 | ^9.0", + "ext-dom": "*", + "php": "^7.4 | ^8.0" }, + "type": "library", "autoload": { - "psr-4": { - "hiqdev\\composer\\config\\": "src" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Andrii Vasyliev", - "role": "Project lead", - "email": "sol@hiqdev.com", - "homepage": "http://hipanel.com/" - }, - { - "name": "Dmitry Naumenko", - "role": "Lead backend developer", - "email": "d.naumenko.a@gmail.com", - "homepage": "http://silverfire.me/" + "name": "Michael Bodnarchuk", + "email": "davert@mail.ua", + "homepage": "http://codegyre.com" }, { - "name": "Andrey Klochok", - "role": "Lead frontend developer", - "email": "andreyklochok@gmail.com", - "homepage": "http://hiqdev.com/" + "name": "Gintautas Miselis" }, { - "name": "Yuriy Myronchuk", - "role": "QA Lead", - "email": "bladeroot@gmail.com", - "homepage": "http://hiqdev.com/" + "name": "Gustavo Nieves", + "homepage": "https://medium.com/@ganieves" } ], - "description": "Composer plugin for config assembling", - "homepage": "https://github.com/hiqdev/composer-config-plugin", + "description": "Assertion methods used by Codeception core and Asserts module", + "homepage": "https://codeception.com/", "keywords": [ - "assembling", - "composer", - "config", - "plugin" + "codeception" ], - "time": "2019-04-11T08:32:27+00:00" + "support": { + "issues": "https://github.com/Codeception/lib-asserts/issues", + "source": "https://github.com/Codeception/lib-asserts/tree/2.1.0" + }, + "time": "2023-02-10T18:36:23+00:00" }, { - "name": "hoa/consistency", - "version": "1.17.05.02", + "name": "codeception/lib-innerbrowser", + "version": "4.0.0", "source": { "type": "git", - "url": "https://github.com/hoaproject/Consistency.git", - "reference": "fd7d0adc82410507f332516faf655b6ed22e4c2f" + "url": "https://github.com/Codeception/lib-innerbrowser.git", + "reference": "32e9a19a39bbb5165cdb845dc3618b412a17e6da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hoaproject/Consistency/zipball/fd7d0adc82410507f332516faf655b6ed22e4c2f", - "reference": "fd7d0adc82410507f332516faf655b6ed22e4c2f", + "url": "https://api.github.com/repos/Codeception/lib-innerbrowser/zipball/32e9a19a39bbb5165cdb845dc3618b412a17e6da", + "reference": "32e9a19a39bbb5165cdb845dc3618b412a17e6da", "shasum": "" }, "require": { - "hoa/exception": "~1.0", - "php": ">=5.5.0" + "codeception/codeception": "^5.0.8", + "codeception/lib-web": "^1.0.1", + "ext-dom": "*", + "ext-json": "*", + "ext-mbstring": "*", + "php": "^8.1", + "phpunit/phpunit": "^10.0", + "symfony/browser-kit": "^4.4.24 || ^5.4 || ^6.0", + "symfony/dom-crawler": "^4.4.30 || ^5.4 || ^6.0" }, "require-dev": { - "hoa/stream": "~1.0", - "hoa/test": "~2.0" + "codeception/util-universalframework": "^1.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, "autoload": { - "psr-4": { - "Hoa\\Consistency\\": "." - }, - "files": [ - "Prelude.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Ivan Enderlin", - "email": "ivan.enderlin@hoa-project.net" + "name": "Michael Bodnarchuk", + "email": "davert@mail.ua", + "homepage": "https://codegyre.com" }, { - "name": "Hoa community", - "homepage": "https://hoa-project.net/" + "name": "Gintautas Miselis" } ], - "description": "The Hoa\\Consistency library.", - "homepage": "https://hoa-project.net/", + "description": "Parent library for all Codeception framework modules and PhpBrowser", + "homepage": "https://codeception.com/", "keywords": [ - "autoloader", - "callable", - "consistency", - "entity", - "flex", - "keyword", - "library" - ], - "time": "2017-05-02T12:18:12+00:00" + "codeception" + ], + "support": { + "issues": "https://github.com/Codeception/lib-innerbrowser/issues", + "source": "https://github.com/Codeception/lib-innerbrowser/tree/4.0.0" + }, + "time": "2023-02-03T19:31:45+00:00" }, { - "name": "hoa/console", - "version": "3.17.05.02", + "name": "codeception/lib-web", + "version": "1.0.2", "source": { "type": "git", - "url": "https://github.com/hoaproject/Console.git", - "reference": "e231fd3ea70e6d773576ae78de0bdc1daf331a66" + "url": "https://github.com/Codeception/lib-web.git", + "reference": "f488ff9bc08c8985d43796db28da0bd18813bcae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hoaproject/Console/zipball/e231fd3ea70e6d773576ae78de0bdc1daf331a66", - "reference": "e231fd3ea70e6d773576ae78de0bdc1daf331a66", + "url": "https://api.github.com/repos/Codeception/lib-web/zipball/f488ff9bc08c8985d43796db28da0bd18813bcae", + "reference": "f488ff9bc08c8985d43796db28da0bd18813bcae", "shasum": "" }, "require": { - "hoa/consistency": "~1.0", - "hoa/event": "~1.0", - "hoa/exception": "~1.0", - "hoa/file": "~1.0", - "hoa/protocol": "~1.0", - "hoa/stream": "~1.0", - "hoa/ustring": "~4.0" + "ext-mbstring": "*", + "guzzlehttp/psr7": "^2.0", + "php": "^8.0", + "symfony/css-selector": ">=4.4.24 <7.0" }, - "require-dev": { - "hoa/test": "~2.0" + "conflict": { + "codeception/codeception": "<5.0.0-alpha3" }, - "suggest": { - "ext-pcntl": "To enable hoa://Event/Console/Window:resize.", - "hoa/dispatcher": "To use the console kit.", - "hoa/router": "To use the console kit." + "require-dev": { + "php-webdriver/webdriver": "^1.12", + "phpunit/phpunit": "^9.5 | ^10.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, "autoload": { - "psr-4": { - "Hoa\\Console\\": "." - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Ivan Enderlin", - "email": "ivan.enderlin@hoa-project.net" - }, - { - "name": "Hoa community", - "homepage": "https://hoa-project.net/" + "name": "Gintautas Miselis" } ], - "description": "The Hoa\\Console library.", - "homepage": "https://hoa-project.net/", + "description": "Library containing files used by module-webdriver and lib-innerbrowser or module-phpbrowser", + "homepage": "https://codeception.com/", "keywords": [ - "autocompletion", - "chrome", - "cli", - "console", - "cursor", - "getoption", - "library", - "option", - "parser", - "processus", - "readline", - "terminfo", - "tput", - "window" + "codeception" ], - "time": "2017-05-02T12:26:19+00:00" + "support": { + "issues": "https://github.com/Codeception/lib-web/issues", + "source": "https://github.com/Codeception/lib-web/tree/1.0.2" + }, + "time": "2023-04-18T20:32:51+00:00" }, { - "name": "hoa/event", - "version": "1.17.01.13", + "name": "codeception/module-asserts", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/hoaproject/Event.git", - "reference": "6c0060dced212ffa3af0e34bb46624f990b29c54" + "url": "https://github.com/Codeception/module-asserts.git", + "reference": "1b6b150b30586c3614e7e5761b31834ed7968603" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hoaproject/Event/zipball/6c0060dced212ffa3af0e34bb46624f990b29c54", - "reference": "6c0060dced212ffa3af0e34bb46624f990b29c54", + "url": "https://api.github.com/repos/Codeception/module-asserts/zipball/1b6b150b30586c3614e7e5761b31834ed7968603", + "reference": "1b6b150b30586c3614e7e5761b31834ed7968603", "shasum": "" }, "require": { - "hoa/consistency": "~1.0", - "hoa/exception": "~1.0" + "codeception/codeception": "*@dev", + "codeception/lib-asserts": "^2.0", + "php": "^8.0" }, - "require-dev": { - "hoa/test": "~2.0" + "conflict": { + "codeception/codeception": "<5.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, "autoload": { - "psr-4": { - "Hoa\\Event\\": "." - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Ivan Enderlin", - "email": "ivan.enderlin@hoa-project.net" + "name": "Michael Bodnarchuk" }, { - "name": "Hoa community", - "homepage": "https://hoa-project.net/" + "name": "Gintautas Miselis" + }, + { + "name": "Gustavo Nieves", + "homepage": "https://medium.com/@ganieves" } ], - "description": "The Hoa\\Event library.", - "homepage": "https://hoa-project.net/", + "description": "Codeception module containing various assertions", + "homepage": "https://codeception.com/", "keywords": [ - "event", - "library", - "listener", - "observer" + "assertions", + "asserts", + "codeception" ], - "time": "2017-01-13T15:30:50+00:00" + "support": { + "issues": "https://github.com/Codeception/module-asserts/issues", + "source": "https://github.com/Codeception/module-asserts/tree/3.0.0" + }, + "time": "2022-02-16T19:48:08+00:00" }, { - "name": "hoa/exception", - "version": "1.17.01.16", + "name": "codeception/module-filesystem", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/hoaproject/Exception.git", - "reference": "091727d46420a3d7468ef0595651488bfc3a458f" + "url": "https://github.com/Codeception/module-filesystem.git", + "reference": "326ef1c1edf90f52ceec2965ff240a8d93c1ba63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hoaproject/Exception/zipball/091727d46420a3d7468ef0595651488bfc3a458f", - "reference": "091727d46420a3d7468ef0595651488bfc3a458f", + "url": "https://api.github.com/repos/Codeception/module-filesystem/zipball/326ef1c1edf90f52ceec2965ff240a8d93c1ba63", + "reference": "326ef1c1edf90f52ceec2965ff240a8d93c1ba63", "shasum": "" }, "require": { - "hoa/consistency": "~1.0", - "hoa/event": "~1.0" + "codeception/codeception": "*@dev", + "php": "^8.0", + "symfony/finder": "^4.4 || ^5.4 || ^6.0" }, - "require-dev": { - "hoa/test": "~2.0" + "conflict": { + "codeception/codeception": "<5.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, "autoload": { - "psr-4": { - "Hoa\\Exception\\": "." - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Ivan Enderlin", - "email": "ivan.enderlin@hoa-project.net" + "name": "Michael Bodnarchuk" }, { - "name": "Hoa community", - "homepage": "https://hoa-project.net/" + "name": "Gintautas Miselis" } ], - "description": "The Hoa\\Exception library.", - "homepage": "https://hoa-project.net/", + "description": "Codeception module for testing local filesystem", + "homepage": "https://codeception.com/", "keywords": [ - "exception", - "library" + "codeception", + "filesystem" ], - "time": "2017-01-16T07:53:27+00:00" + "support": { + "issues": "https://github.com/Codeception/module-filesystem/issues", + "source": "https://github.com/Codeception/module-filesystem/tree/3.0.0" + }, + "time": "2022-03-14T18:48:55+00:00" }, { - "name": "hoa/file", - "version": "1.17.07.11", + "name": "codeception/module-yii2", + "version": "1.1.9", "source": { "type": "git", - "url": "https://github.com/hoaproject/File.git", - "reference": "35cb979b779bc54918d2f9a4e02ed6c7a1fa67ca" + "url": "https://github.com/Codeception/module-yii2.git", + "reference": "70ad7544fc256363acd082b4ef9e7220a18017a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hoaproject/File/zipball/35cb979b779bc54918d2f9a4e02ed6c7a1fa67ca", - "reference": "35cb979b779bc54918d2f9a4e02ed6c7a1fa67ca", + "url": "https://api.github.com/repos/Codeception/module-yii2/zipball/70ad7544fc256363acd082b4ef9e7220a18017a0", + "reference": "70ad7544fc256363acd082b4ef9e7220a18017a0", "shasum": "" }, "require": { - "hoa/consistency": "~1.0", - "hoa/event": "~1.0", - "hoa/exception": "~1.0", - "hoa/iterator": "~2.0", - "hoa/stream": "~1.0" + "codeception/codeception": "^5.0.8", + "codeception/lib-innerbrowser": "^3.0 | ^4.0", + "php": "^8.0" }, "require-dev": { - "hoa/test": "~2.0" + "codeception/module-asserts": "^3.0", + "codeception/module-filesystem": "^3.0", + "codeception/verify": "^3.0", + "codemix/yii2-localeurls": "^1.7", + "yiisoft/yii2": "dev-master", + "yiisoft/yii2-app-advanced": "dev-master" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, "autoload": { - "psr-4": { - "Hoa\\File\\": "." - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Ivan Enderlin", - "email": "ivan.enderlin@hoa-project.net" + "name": "Alexander Makarov" + }, + { + "name": "Sam Mouse" }, { - "name": "Hoa community", - "homepage": "https://hoa-project.net/" + "name": "Michael Bodnarchuk" } ], - "description": "The Hoa\\File library.", - "homepage": "https://hoa-project.net/", + "description": "Codeception module for Yii2 framework", + "homepage": "https://codeception.com/", "keywords": [ - "Socket", - "directory", - "file", - "finder", - "library", - "link", - "temporary" - ], - "time": "2017-07-11T07:42:15+00:00" + "codeception", + "yii2" + ], + "support": { + "issues": "https://github.com/Codeception/module-yii2/issues", + "source": "https://github.com/Codeception/module-yii2/tree/1.1.9" + }, + "time": "2023-06-16T03:48:50+00:00" }, { - "name": "hoa/iterator", - "version": "2.17.01.10", + "name": "codeception/stub", + "version": "4.1.2", "source": { "type": "git", - "url": "https://github.com/hoaproject/Iterator.git", - "reference": "d1120ba09cb4ccd049c86d10058ab94af245f0cc" + "url": "https://github.com/Codeception/Stub.git", + "reference": "f6bc56e33e3f5ba7a831dfb968c49b27cf1676ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hoaproject/Iterator/zipball/d1120ba09cb4ccd049c86d10058ab94af245f0cc", - "reference": "d1120ba09cb4ccd049c86d10058ab94af245f0cc", + "url": "https://api.github.com/repos/Codeception/Stub/zipball/f6bc56e33e3f5ba7a831dfb968c49b27cf1676ad", + "reference": "f6bc56e33e3f5ba7a831dfb968c49b27cf1676ad", "shasum": "" }, "require": { - "hoa/consistency": "~1.0", - "hoa/exception": "~1.0" + "php": "^7.4 | ^8.0", + "phpunit/phpunit": "^8.4 | ^9.0 | ^10.0 | 10.0.x-dev" + }, + "conflict": { + "codeception/codeception": "<5.0.6" }, "require-dev": { - "hoa/test": "~2.0" + "consolidation/robo": "^3.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, "autoload": { "psr-4": { - "Hoa\\Iterator\\": "." + "Codeception\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Ivan Enderlin", - "email": "ivan.enderlin@hoa-project.net" - }, - { - "name": "Hoa community", - "homepage": "https://hoa-project.net/" - } - ], - "description": "The Hoa\\Iterator library.", - "homepage": "https://hoa-project.net/", - "keywords": [ - "iterator", - "library" + "MIT" ], - "time": "2017-01-10T10:34:47+00:00" + "description": "Flexible Stub wrapper for PHPUnit's Mock Builder", + "support": { + "issues": "https://github.com/Codeception/Stub/issues", + "source": "https://github.com/Codeception/Stub/tree/4.1.2" + }, + "time": "2023-10-07T19:22:36+00:00" }, { - "name": "hoa/protocol", - "version": "1.17.01.14", + "name": "codeception/verify", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/hoaproject/Protocol.git", - "reference": "5c2cf972151c45f373230da170ea015deecf19e2" + "url": "https://github.com/Codeception/Verify.git", + "reference": "25b84a96f0fe7dcf28e8021f02b57643b751a707" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hoaproject/Protocol/zipball/5c2cf972151c45f373230da170ea015deecf19e2", - "reference": "5c2cf972151c45f373230da170ea015deecf19e2", + "url": "https://api.github.com/repos/Codeception/Verify/zipball/25b84a96f0fe7dcf28e8021f02b57643b751a707", + "reference": "25b84a96f0fe7dcf28e8021f02b57643b751a707", "shasum": "" }, "require": { - "hoa/consistency": "~1.0", - "hoa/exception": "~1.0" - }, - "require-dev": { - "hoa/test": "~2.0" + "ext-dom": "*", + "php": "^7.4 || ^8.0", + "phpunit/phpunit": "^9.5 | ^10.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, "autoload": { - "psr-4": { - "Hoa\\Protocol\\": "." - }, "files": [ - "Wrapper.php" - ] + "src/Codeception/bootstrap.php" + ], + "psr-4": { + "Codeception\\": "src\\Codeception" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Ivan Enderlin", - "email": "ivan.enderlin@hoa-project.net" + "name": "Michael Bodnarchuk", + "email": "davert@codeception.com" }, { - "name": "Hoa community", - "homepage": "https://hoa-project.net/" + "name": "Gustavo Nieves", + "homepage": "https://medium.com/@ganieves" } ], - "description": "The Hoa\\Protocol library.", - "homepage": "https://hoa-project.net/", - "keywords": [ - "library", - "protocol", - "resource", - "stream", - "wrapper" - ], - "time": "2017-01-14T12:26:10+00:00" + "description": "BDD assertion library for PHPUnit", + "support": { + "issues": "https://github.com/Codeception/Verify/issues", + "source": "https://github.com/Codeception/Verify/tree/3.0.0" + }, + "time": "2023-02-09T07:33:00+00:00" }, { - "name": "hoa/stream", - "version": "1.17.02.21", + "name": "guzzlehttp/psr7", + "version": "2.6.1", "source": { "type": "git", - "url": "https://github.com/hoaproject/Stream.git", - "reference": "3293cfffca2de10525df51436adf88a559151d82" + "url": "https://github.com/guzzle/psr7.git", + "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hoaproject/Stream/zipball/3293cfffca2de10525df51436adf88a559151d82", - "reference": "3293cfffca2de10525df51436adf88a559151d82", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/be45764272e8873c72dbe3d2edcfdfcc3bc9f727", + "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727", "shasum": "" }, "require": { - "hoa/consistency": "~1.0", - "hoa/event": "~1.0", - "hoa/exception": "~1.0", - "hoa/protocol": "~1.0" + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" }, "require-dev": { - "hoa/test": "~2.0" + "bamarni/composer-bin-plugin": "^1.8.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.29 || ^9.5.23" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.x-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": false } }, "autoload": { "psr-4": { - "Hoa\\Stream\\": "." + "GuzzleHttp\\Psr7\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Ivan Enderlin", - "email": "ivan.enderlin@hoa-project.net" + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" }, { - "name": "Hoa community", - "homepage": "https://hoa-project.net/" + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" } ], - "description": "The Hoa\\Stream library.", - "homepage": "https://hoa-project.net/", + "description": "PSR-7 message implementation that also provides common utility methods", "keywords": [ - "Context", - "bucket", - "composite", - "filter", - "in", - "library", - "out", - "protocol", + "http", + "message", + "psr-7", + "request", + "response", "stream", - "wrapper" + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.6.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } ], - "time": "2017-02-21T16:01:06+00:00" + "time": "2023-08-27T10:13:57+00:00" }, { - "name": "hoa/ustring", - "version": "4.17.01.16", + "name": "maglnet/composer-require-checker", + "version": "4.7.1", "source": { "type": "git", - "url": "https://github.com/hoaproject/Ustring.git", - "reference": "e6326e2739178799b1fe3fdd92029f9517fa17a0" + "url": "https://github.com/maglnet/ComposerRequireChecker.git", + "reference": "e49c58b18fef21e37941a642c1a70d3962e86f28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hoaproject/Ustring/zipball/e6326e2739178799b1fe3fdd92029f9517fa17a0", - "reference": "e6326e2739178799b1fe3fdd92029f9517fa17a0", + "url": "https://api.github.com/repos/maglnet/ComposerRequireChecker/zipball/e49c58b18fef21e37941a642c1a70d3962e86f28", + "reference": "e49c58b18fef21e37941a642c1a70d3962e86f28", "shasum": "" }, "require": { - "hoa/consistency": "~1.0", - "hoa/exception": "~1.0" + "composer-runtime-api": "^2.0.0", + "ext-phar": "*", + "nikic/php-parser": "^4.17.1", + "php": "~8.1.0 || ~8.2.0 || ~8.3.0", + "symfony/console": "^6.3.4", + "webmozart/assert": "^1.11.0", + "webmozart/glob": "^4.6.0" }, "require-dev": { - "hoa/test": "~2.0" - }, - "suggest": { - "ext-iconv": "ext/iconv must be present (or a third implementation) to use Hoa\\Ustring::transcode().", - "ext-intl": "To get a better Hoa\\Ustring::toAscii() and Hoa\\Ustring::compareTo()." + "doctrine/coding-standard": "^12.0.0", + "ext-zend-opcache": "*", + "mikey179/vfsstream": "^1.6.11", + "phing/phing": "^2.17.4", + "phpstan/phpstan": "^1.10.34", + "phpunit/phpunit": "^10.3.4", + "roave/infection-static-analysis-plugin": "^1.33", + "vimeo/psalm": "^5.15" }, + "bin": [ + "bin/composer-require-checker" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "4.x-dev" + "dev-master": "2.1-dev" } }, "autoload": { "psr-4": { - "Hoa\\Ustring\\": "." + "ComposerRequireChecker\\": "src/ComposerRequireChecker" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Ivan Enderlin", - "email": "ivan.enderlin@hoa-project.net" + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.io/" }, { - "name": "Hoa community", - "homepage": "https://hoa-project.net/" + "name": "Matthias Glaub", + "email": "magl@magl.net", + "homepage": "http://magl.net" } ], - "description": "The Hoa\\Ustring library.", - "homepage": "https://hoa-project.net/", + "description": "CLI tool to analyze composer dependencies and verify that no unknown symbols are used in the sources of a package", + "homepage": "https://github.com/maglnet/ComposerRequireChecker", "keywords": [ - "library", - "search", - "string", - "unicode" + "analysis", + "cli", + "composer", + "dependency", + "imports", + "require", + "requirements" ], - "time": "2017-01-16T07:08:25+00:00" + "support": { + "issues": "https://github.com/maglnet/ComposerRequireChecker/issues", + "source": "https://github.com/maglnet/ComposerRequireChecker/tree/4.7.1" + }, + "time": "2023-09-27T14:57:19+00:00" }, { - "name": "monolog/monolog", - "version": "1.24.0", + "name": "masterminds/html5", + "version": "2.8.1", "source": { "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266" + "url": "https://github.com/Masterminds/html5-php.git", + "reference": "f47dcf3c70c584de14f21143c55d9939631bc6cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266", - "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f47dcf3c70c584de14f21143c55d9939631bc6cf", + "reference": "f47dcf3c70c584de14f21143c55d9939631bc6cf", "shasum": "" }, "require": { - "php": ">=5.3.0", - "psr/log": "~1.0" - }, - "provide": { - "psr/log-implementation": "1.0.0" + "ext-dom": "*", + "php": ">=5.3.0" }, "require-dev": { - "aws/aws-sdk-php": "^2.4.9 || ^3.0", - "doctrine/couchdb": "~1.0@dev", - "graylog2/gelf-php": "~1.0", - "jakub-onderka/php-parallel-lint": "0.9", - "php-amqplib/php-amqplib": "~2.4", - "php-console/php-console": "^3.1.3", - "phpunit/phpunit": "~4.5", - "phpunit/phpunit-mock-objects": "2.3.0", - "ruflin/elastica": ">=0.90 <3.0", - "sentry/sentry": "^0.13", - "swiftmailer/swiftmailer": "^5.3|^6.0" - }, - "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-mongo": "Allow sending log messages to a MongoDB server", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", - "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "php-console/php-console": "Allow sending log messages to Google Chrome", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server", - "sentry/sentry": "Allow sending log messages to a Sentry server" + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "2.7-dev" } }, "autoload": { "psr-4": { - "Monolog\\": "src/Monolog" + "Masterminds\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -2570,53 +2884,69 @@ ], "authors": [ { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "name": "Matt Butcher", + "email": "technosophos@gmail.com" + }, + { + "name": "Matt Farina", + "email": "matt@mattfarina.com" + }, + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" } ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "http://github.com/Seldaek/monolog", + "description": "An HTML5 parser and serializer.", + "homepage": "http://masterminds.github.io/html5-php", "keywords": [ - "log", - "logging", - "psr-3" + "HTML5", + "dom", + "html", + "parser", + "querypath", + "serializer", + "xml" ], - "time": "2018-11-05T09:00:11+00:00" + "support": { + "issues": "https://github.com/Masterminds/html5-php/issues", + "source": "https://github.com/Masterminds/html5-php/tree/2.8.1" + }, + "time": "2023-05-10T11:58:31+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.9.1", + "version": "1.11.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72" + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", - "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.1 || ^8.0" }, - "replace": { - "myclabs/deep-copy": "self.version" + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" }, "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, "files": [ "src/DeepCopy/deep_copy.php" - ] + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2630,93 +2960,99 @@ "object", "object graph" ], - "time": "2019-04-07T13:18:21+00:00" + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2023-03-08T13:26:56+00:00" }, { - "name": "opis/closure", - "version": "3.3.1", + "name": "nikic/php-parser", + "version": "v4.17.1", "source": { "type": "git", - "url": "https://github.com/opis/closure.git", - "reference": "92927e26d7fc3f271efe1f55bdbb073fbb2f0722" + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/92927e26d7fc3f271efe1f55bdbb073fbb2f0722", - "reference": "92927e26d7fc3f271efe1f55bdbb073fbb2f0722", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", + "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", "shasum": "" }, "require": { - "php": "^5.4 || ^7.0" + "ext-tokenizer": "*", + "php": ">=7.0" }, "require-dev": { - "jeremeamia/superclosure": "^2.0", - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" }, + "bin": [ + "bin/php-parse" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3.x-dev" + "dev-master": "4.9-dev" } }, "autoload": { "psr-4": { - "Opis\\Closure\\": "src/" - }, - "files": [ - "functions.php" - ] + "PhpParser\\": "lib/PhpParser" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Marius Sarca", - "email": "marius.sarca@gmail.com" - }, - { - "name": "Sorin Sarca", - "email": "sarca_sorin@hotmail.com" + "name": "Nikita Popov" } ], - "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", - "homepage": "https://opis.io/closure", + "description": "A PHP parser written in PHP", "keywords": [ - "anonymous functions", - "closure", - "function", - "serializable", - "serialization", - "serialize" - ], - "time": "2019-07-09T21:58:11+00:00" + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1" + }, + "time": "2023-08-13T19:53:39+00:00" }, { "name": "phar-io/manifest", - "version": "1.0.3", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", - "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", "shasum": "" }, "require": { "ext-dom": "*", "ext-phar": "*", - "phar-io/version": "^2.0", - "php": "^5.6 || ^7.0" + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -2746,24 +3082,28 @@ } ], "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "time": "2018-07-08T19:23:20+00:00" + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.3" + }, + "time": "2021-07-20T11:28:43+00:00" }, { "name": "phar-io/version", - "version": "2.0.1", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { @@ -2793,172 +3133,24 @@ } ], "description": "Library for handling version information and constraints", - "time": "2018-07-08T19:19:57+00:00" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.6" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.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": "2017-09-11T18:02:19+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "4.3.1", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", - "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", - "shasum": "" - }, - "require": { - "php": "^7.0", - "phpdocumentor/reflection-common": "^1.0.0", - "phpdocumentor/type-resolver": "^0.4.0", - "webmozart/assert": "^1.0" - }, - "require-dev": { - "doctrine/instantiator": "~1.0.5", - "mockery/mockery": "^1.0", - "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-04-30T17:48:53+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "0.4.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", - "shasum": "" - }, - "require": { - "php": "^5.5 || ^7.0", - "phpdocumentor/reflection-common": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.2||^4.8.24" + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.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" - } - ], - "time": "2017-07-14T14:27:02+00:00" + "time": "2022-02-21T01:04:05+00:00" }, { "name": "phpspec/php-diff", - "version": "v1.1.0", + "version": "v1.1.3", "source": { "type": "git", "url": "https://github.com/phpspec/php-diff.git", - "reference": "0464787bfa7cd13576c5a1e318709768798bec6a" + "reference": "fc1156187f9f6c8395886fe85ed88a0a245d72e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/php-diff/zipball/0464787bfa7cd13576c5a1e318709768798bec6a", - "reference": "0464787bfa7cd13576c5a1e318709768798bec6a", + "url": "https://api.github.com/repos/phpspec/php-diff/zipball/fc1156187f9f6c8395886fe85ed88a0a245d72e9", + "reference": "fc1156187f9f6c8395886fe85ed88a0a245d72e9", "shasum": "" }, "type": "library", @@ -2983,107 +3175,113 @@ } ], "description": "A comprehensive library for generating differences between two hashable objects (strings or arrays).", - "time": "2016-04-07T12:29:16+00:00" + "support": { + "source": "https://github.com/phpspec/php-diff/tree/v1.1.3" + }, + "time": "2020-09-18T13:47:07+00:00" }, { - "name": "phpspec/prophecy", - "version": "1.8.1", + "name": "phpstan/phpstan", + "version": "1.10.38", "source": { "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76" + "url": "https://github.com/phpstan/phpstan.git", + "reference": "5302bb402c57f00fb3c2c015bac86e0827e4b691" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/1927e75f4ed19131ec9bcc3b002e07fb1173ee76", - "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/5302bb402c57f00fb3c2c015bac86e0827e4b691", + "reference": "5302bb402c57f00fb3c2c015bac86e0827e4b691", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", - "sebastian/comparator": "^1.1|^2.0|^3.0", - "sebastian/recursion-context": "^1.0|^2.0|^3.0" + "php": "^7.2|^8.0" }, - "require-dev": { - "phpspec/phpspec": "^2.5|^3.2", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" + "conflict": { + "phpstan/phpstan-shim": "*" }, + "bin": [ + "phpstan", + "phpstan.phar" + ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.8.x-dev" - } - }, "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } + "files": [ + "bootstrap.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" + }, + "funding": [ { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" + "url": "https://github.com/ondrejmirtes", + "type": "github" }, { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" + "url": "https://github.com/phpstan", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", + "type": "tidelift" } ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "time": "2019-06-13T12:50:23+00:00" + "time": "2023-10-06T14:19:14+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "7.0.7", + "version": "10.1.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "7743bbcfff2a907e9ee4a25be13d0f8ec5e73800" + "reference": "355324ca4980b8916c18b9db29f3ef484078f26e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7743bbcfff2a907e9ee4a25be13d0f8ec5e73800", - "reference": "7743bbcfff2a907e9ee4a25be13d0f8ec5e73800", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/355324ca4980b8916c18b9db29f3ef484078f26e", + "reference": "355324ca4980b8916c18b9db29f3ef484078f26e", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-xmlwriter": "*", - "php": "^7.2", - "phpunit/php-file-iterator": "^2.0.2", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^3.1.0", - "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^4.2.2", - "sebastian/version": "^2.0.1", - "theseer/tokenizer": "^1.1.3" + "nikic/php-parser": "^4.15", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-text-template": "^3.0", + "sebastian/code-unit-reverse-lookup": "^3.0", + "sebastian/complexity": "^3.0", + "sebastian/environment": "^6.0", + "sebastian/lines-of-code": "^2.0", + "sebastian/version": "^4.0", + "theseer/tokenizer": "^1.2.0" }, "require-dev": { - "phpunit/phpunit": "^8.2.2" + "phpunit/phpunit": "^10.1" }, "suggest": { - "ext-xdebug": "^2.7.2" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "7.0-dev" + "dev-main": "10.1-dev" } }, "autoload": { @@ -3098,8 +3296,8 @@ "authors": [ { "name": "Sebastian Bergmann", - "role": "lead", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", @@ -3109,32 +3307,43 @@ "testing", "xunit" ], - "time": "2019-07-25T05:31:54+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.7" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-10-04T15:34:17+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "2.0.2", + "version": "4.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "050bedf145a257b1ff02746c31894800e5122946" + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", - "reference": "050bedf145a257b1ff02746c31894800e5122946", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", "shasum": "" }, "require": { - "php": "^7.1" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^7.1" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -3159,26 +3368,49 @@ "filesystem", "iterator" ], - "time": "2018-09-13T20:33:42+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-31T06:24:48+00:00" }, { - "name": "phpunit/php-text-template", - "version": "1.2.1", + "name": "phpunit/php-invoker", + "version": "4.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", "shasum": "" }, - "require": { - "php": ">=5.3.3" + "require": { + "php": ">=8.1" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-pcntl": "*" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -3195,37 +3427,47 @@ "role": "lead" } ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", "keywords": [ - "template" + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } ], - "time": "2015-06-21T13:50:34+00:00" + "time": "2023-02-03T06:56:09+00:00" }, { - "name": "phpunit/php-timer", - "version": "2.1.2", + "name": "phpunit/php-text-template", + "version": "3.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", - "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", "shasum": "" }, "require": { - "php": "^7.1" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -3244,38 +3486,48 @@ "role": "lead" } ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ - "timer" + "template" ], - "time": "2019-06-07T04:22:29+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-31T14:07:24+00:00" }, { - "name": "phpunit/php-token-stream", - "version": "3.1.0", + "name": "phpunit/php-timer", + "version": "6.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "e899757bb3df5ff6e95089132f32cd59aac2220a" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/e899757bb3df5ff6e95089132f32cd59aac2220a", - "reference": "e899757bb3df5ff6e95089132f32cd59aac2220a", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": "^7.1" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -3290,64 +3542,71 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", "keywords": [ - "tokenizer" + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } ], - "time": "2019-07-25T05:29:42+00:00" + "time": "2023-02-03T06:57:52+00:00" }, { "name": "phpunit/phpunit", - "version": "8.2.5", + "version": "10.4.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "c1b8534b3730f20f58600124129197bf1183dc92" + "reference": "62bd7af13d282deeb95650077d28ba3600ca321c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c1b8534b3730f20f58600124129197bf1183dc92", - "reference": "c1b8534b3730f20f58600124129197bf1183dc92", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/62bd7af13d282deeb95650077d28ba3600ca321c", + "reference": "62bd7af13d282deeb95650077d28ba3600ca321c", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.2.0", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.9.1", - "phar-io/manifest": "^1.0.3", - "phar-io/version": "^2.0.1", - "php": "^7.2", - "phpspec/prophecy": "^1.8.1", - "phpunit/php-code-coverage": "^7.0.5", - "phpunit/php-file-iterator": "^2.0.2", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^2.1.2", - "sebastian/comparator": "^3.0.2", - "sebastian/diff": "^3.0.2", - "sebastian/environment": "^4.2.2", - "sebastian/exporter": "^3.1.0", - "sebastian/global-state": "^3.0.0", - "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^2.0.1", - "sebastian/type": "^1.1.3", - "sebastian/version": "^2.0.1" - }, - "require-dev": { - "ext-pdo": "*" + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.1.5", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-invoker": "^4.0", + "phpunit/php-text-template": "^3.0", + "phpunit/php-timer": "^6.0", + "sebastian/cli-parser": "^2.0", + "sebastian/code-unit": "^2.0", + "sebastian/comparator": "^5.0", + "sebastian/diff": "^5.0", + "sebastian/environment": "^6.0", + "sebastian/exporter": "^5.1", + "sebastian/global-state": "^6.0.1", + "sebastian/object-enumerator": "^5.0", + "sebastian/recursion-context": "^5.0", + "sebastian/type": "^4.0", + "sebastian/version": "^4.0" }, "suggest": { - "ext-soap": "*", - "ext-xdebug": "*", - "phpunit/php-invoker": "^2.0.0" + "ext-soap": "To be able to generate mocks based on WSDL files" }, "bin": [ "phpunit" @@ -3355,10 +3614,13 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "8.2-dev" + "dev-main": "10.4-dev" } }, "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], "classmap": [ "src/" ] @@ -3381,24 +3643,44 @@ "testing", "xunit" ], - "time": "2019-07-15T06:26:24+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.4.1" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2023-10-08T05:01:11+00:00" }, { - "name": "psr/container", - "version": "1.0.0", + "name": "psr/http-factory", + "version": "1.0.2", "source": { "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + "url": "https://github.com/php-fig/http-factory.git", + "reference": "e616d01114759c4c489f93b099585439f795fe35" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", + "reference": "e616d01114759c4c489f93b099585439f795fe35", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.0.0", + "psr/http-message": "^1.0 || ^2.0" }, "type": "library", "extra": { @@ -3408,7 +3690,7 @@ }, "autoload": { "psr-4": { - "Psr\\Container\\": "src/" + "Psr\\Http\\Message\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -3418,41 +3700,46 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", + "description": "Common interfaces for PSR-7 HTTP message factories", "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" ], - "time": "2017-02-14T16:28:37+00:00" + "support": { + "source": "https://github.com/php-fig/http-factory/tree/1.0.2" + }, + "time": "2023-04-10T20:10:41+00:00" }, { "name": "psr/http-message", - "version": "1.0.1", + "version": "2.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -3467,7 +3754,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for HTTP messages", @@ -3480,34 +3767,64 @@ "request", "response" ], - "time": "2016-08-06T14:39:51+00:00" + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" }, { - "name": "psr/log", - "version": "1.1.0", + "name": "psy/psysh", + "version": "v0.11.21", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" + "url": "https://github.com/bobthecow/psysh.git", + "reference": "bcb22101107f3bf770523b65630c9d547f60c540" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", - "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/bcb22101107f3bf770523b65630c9d547f60c540", + "reference": "bcb22101107f3bf770523b65630c9d547f60c540", "shasum": "" }, "require": { - "php": ">=5.3.0" + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "^4.0 || ^3.1", + "php": "^8.0 || ^7.0.8", + "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^6.0 || ^5.0 || ^4.0 || ^3.4" + }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2" + }, + "suggest": { + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", + "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history." }, + "bin": [ + "bin/psysh" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-main": "0.11.x-dev" + }, + "bamarni-bin": { + "bin-links": false, + "forward-command": false } }, "autoload": { + "files": [ + "src/functions.php" + ], "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "Psy\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -3516,18 +3833,24 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" } ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", "keywords": [ - "log", - "psr", - "psr-3" + "REPL", + "console", + "interactive", + "shell" ], - "time": "2018-11-20T15:27:04+00:00" + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.11.21" + }, + "time": "2023-09-17T21:15:54+00:00" }, { "name": "ralouphie/getallheaders", @@ -3567,32 +3890,148 @@ } ], "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, "time": "2019-03-08T08:55:37+00:00" }, + { + "name": "sebastian/cli-parser", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/efdc130dbbbb8ef0b545a994fd811725c5282cae", + "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-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 for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:58:15+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-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": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:58:43+00:00" + }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.1", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.0" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -3612,34 +4051,46 @@ ], "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" + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:59:15+00:00" }, { "name": "sebastian/comparator", - "version": "3.0.2", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" + "reference": "2db5010a484d53ebf536087a70b4a5423c102372" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", - "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372", + "reference": "2db5010a484d53ebf536087a70b4a5423c102372", "shasum": "" }, "require": { - "php": "^7.1", - "sebastian/diff": "^3.0", - "sebastian/exporter": "^3.1" + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/diff": "^5.0", + "sebastian/exporter": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^7.1" + "phpunit/phpunit": "^10.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -3652,6 +4103,10 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" @@ -3663,10 +4118,6 @@ { "name": "Bernhard Schussek", "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" } ], "description": "Provides the functionality to compare PHP values for equality", @@ -3676,33 +4127,102 @@ "compare", "equality" ], - "time": "2018-07-12T15:12:46+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-14T13:18:12+00:00" + }, + { + "name": "sebastian/complexity", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "68cfb347a44871f01e33ab0ef8215966432f6957" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68cfb347a44871f01e33ab0ef8215966432f6957", + "reference": "68cfb347a44871f01e33ab0ef8215966432f6957", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.10", + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.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 for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/3.1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-09-28T11:50:59+00:00" }, { "name": "sebastian/diff", - "version": "3.0.2", + "version": "5.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" + "reference": "912dc2fbe3e3c1e7873313cc801b100b6c68c87b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", - "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/912dc2fbe3e3c1e7873313cc801b100b6c68c87b", + "reference": "912dc2fbe3e3c1e7873313cc801b100b6c68c87b", "shasum": "" }, "require": { - "php": "^7.1" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^7.5 || ^8.0", - "symfony/process": "^2 || ^3.3 || ^4" + "phpunit/phpunit": "^10.0", + "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -3715,13 +4235,13 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" } ], "description": "Diff implementation", @@ -3732,27 +4252,38 @@ "unidiff", "unified diff" ], - "time": "2019-02-04T06:01:07+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-05-01T07:48:21+00:00" }, { "name": "sebastian/environment", - "version": "4.2.2", + "version": "6.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "f2a2c8e1c97c11ace607a7a667d73d47c19fe404" + "reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/f2a2c8e1c97c11ace607a7a667d73d47c19fe404", - "reference": "f2a2c8e1c97c11ace607a7a667d73d47c19fe404", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/43c751b41d74f96cbbd4e07b7aec9675651e2951", + "reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951", "shasum": "" }, "require": { - "php": "^7.1" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^7.5" + "phpunit/phpunit": "^10.0" }, "suggest": { "ext-posix": "*" @@ -3760,7 +4291,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -3779,40 +4310,51 @@ } ], "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", + "homepage": "https://github.com/sebastianbergmann/environment", "keywords": [ "Xdebug", "environment", "hhvm" ], - "time": "2019-05-05T09:05:15+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/6.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-04-11T05:39:26+00:00" }, { "name": "sebastian/exporter", - "version": "3.1.0", + "version": "5.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" + "reference": "64f51654862e0f5e318db7e9dcc2292c63cdbddc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", - "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/64f51654862e0f5e318db7e9dcc2292c63cdbddc", + "reference": "64f51654862e0f5e318db7e9dcc2292c63cdbddc", "shasum": "" }, "require": { - "php": "^7.0", - "sebastian/recursion-context": "^3.0" + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1.x-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -3825,6 +4367,10 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" @@ -3833,57 +4379,61 @@ "name": "Volker Dusch", "email": "github@wallbash.com" }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, { "name": "Adam Harvey", "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", + "homepage": "https://www.github.com/sebastianbergmann/exporter", "keywords": [ "export", "exporter" ], - "time": "2017-04-03T13:19:02+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-09-24T13:22:09+00:00" }, { "name": "sebastian/global-state", - "version": "3.0.0", + "version": "6.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4" + "reference": "7ea9ead78f6d380d2a667864c132c2f7b83055e4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", - "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/7ea9ead78f6d380d2a667864c132c2f7b83055e4", + "reference": "7ea9ead78f6d380d2a667864c132c2f7b83055e4", "shasum": "" }, "require": { - "php": "^7.2", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^8.0" - }, - "suggest": { - "ext-uopz": "*" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -3906,34 +4456,44 @@ "keywords": [ "global state" ], - "time": "2019-02-01T05:30:01+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-07-19T07:19:23+00:00" }, { - "name": "sebastian/object-enumerator", - "version": "3.0.3", + "name": "sebastian/lines-of-code", + "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "649e40d279e243d985aa8fb6e74dd5bb28dc185d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/649e40d279e243d985aa8fb6e74dd5bb28dc185d", + "reference": "649e40d279e243d985aa8fb6e74dd5bb28dc185d", "shasum": "" }, "require": { - "php": "^7.0", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" + "nikic/php-parser": "^4.10", + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -3948,37 +4508,51 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "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" + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-31T09:25:50+00:00" }, { - "name": "sebastian/object-reflector", - "version": "1.1.1", + "name": "sebastian/object-enumerator", + "version": "5.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "773f97c67f28de00d397be301821b06708fca0be" + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", - "reference": "773f97c67f28de00d397be301821b06708fca0be", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", "shasum": "" }, "require": { - "php": "^7.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -3996,34 +4570,44 @@ "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" + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:08:32+00:00" }, { - "name": "sebastian/recursion-context", + "name": "sebastian/object-reflector", "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", "shasum": "" }, "require": { - "php": "^7.0" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -4036,44 +4620,49 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, { "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/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" + }, + "funding": [ { - "name": "Adam Harvey", - "email": "aharvey@php.net" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2017-03-03T06:23:57+00:00" + "time": "2023-02-03T07:06:18+00:00" }, { - "name": "sebastian/resource-operations", - "version": "2.0.1", + "name": "sebastian/recursion-context", + "version": "5.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", - "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712", "shasum": "" }, "require": { - "php": "^7.1" + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -4089,36 +4678,54 @@ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "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" + "time": "2023-02-03T07:05:40+00:00" }, { "name": "sebastian/type", - "version": "1.1.3", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3" + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/3aaaa15fa71d27650d62a948be022fe3b48541a3", - "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", "shasum": "" }, "require": { - "php": "^7.2" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^8.2" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -4139,29 +4746,39 @@ ], "description": "Collection of value objects that represent the types of the PHP type system", "homepage": "https://github.com/sebastianbergmann/type", - "time": "2019-07-02T08:10:15+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:10:45+00:00" }, { "name": "sebastian/version", - "version": "2.0.1", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", "shasum": "" }, "require": { - "php": ">=5.6" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -4182,41 +4799,43 @@ ], "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" + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-07T11:34:05+00:00" }, { "name": "symfony/browser-kit", - "version": "v4.3.3", + "version": "v6.3.2", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "a29dd02a1f3f81b9a15c7730cc3226718ddb55ca" + "reference": "ca4a988488f61ac18f8f845445eabdd36f89aa8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/a29dd02a1f3f81b9a15c7730cc3226718ddb55ca", - "reference": "a29dd02a1f3f81b9a15c7730cc3226718ddb55ca", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/ca4a988488f61ac18f8f845445eabdd36f89aa8d", + "reference": "ca4a988488f61ac18f8f845445eabdd36f89aa8d", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/dom-crawler": "~3.4|~4.0" + "php": ">=8.1", + "symfony/dom-crawler": "^5.4|^6.0" }, "require-dev": { - "symfony/css-selector": "~3.4|~4.0", - "symfony/http-client": "^4.3", - "symfony/mime": "^4.3", - "symfony/process": "~3.4|~4.0" - }, - "suggest": { - "symfony/process": "" + "symfony/css-selector": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/mime": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\BrowserKit\\": "" @@ -4239,59 +4858,68 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony BrowserKit Component", + "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", "homepage": "https://symfony.com", - "time": "2019-06-11T15:41:59+00:00" + "support": { + "source": "https://github.com/symfony/browser-kit/tree/v6.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-06T06:56:43+00:00" }, { "name": "symfony/console", - "version": "v4.3.3", + "version": "v6.3.4", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "8b0ae5742ce9aaa8b0075665862c1ca397d1c1d9" + "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/8b0ae5742ce9aaa8b0075665862c1ca397d1c1d9", - "reference": "8b0ae5742ce9aaa8b0075665862c1ca397d1c1d9", + "url": "https://api.github.com/repos/symfony/console/zipball/eca495f2ee845130855ddf1cf18460c38966c8b6", + "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6", "shasum": "" }, "require": { - "php": "^7.1.3", + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8", - "symfony/service-contracts": "^1.1" + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^5.4|^6.0" }, "conflict": { - "symfony/dependency-injection": "<3.4", - "symfony/event-dispatcher": "<4.3", - "symfony/process": "<3.3" + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" }, "provide": { - "psr/log-implementation": "1.0" + "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "^4.3", - "symfony/lock": "~3.4|~4.0", - "symfony/process": "~3.4|~4.0", - "symfony/var-dumper": "^4.3" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Console\\": "" @@ -4314,33 +4942,51 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Console Component", + "description": "Eases the creation of beautiful and testable command line interfaces", "homepage": "https://symfony.com", - "time": "2019-07-24T17:13:59+00:00" + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v6.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-08-16T10:10:12+00:00" }, { "name": "symfony/css-selector", - "version": "v4.3.3", + "version": "v6.3.2", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d" + "reference": "883d961421ab1709877c10ac99451632a3d6fa57" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/105c98bb0c5d8635bea056135304bd8edcc42b4d", - "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/883d961421ab1709877c10ac99451632a3d6fa57", + "reference": "883d961421ab1709877c10ac99451632a3d6fa57", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": ">=8.1" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\CssSelector\\": "" @@ -4367,118 +5013,54 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony CssSelector Component", + "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", - "time": "2019-01-16T21:53:39+00:00" - }, - { - "name": "symfony/dom-crawler", - "version": "v4.3.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/dom-crawler.git", - "reference": "291397232a2eefb3347eaab9170409981eaad0e2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/291397232a2eefb3347eaab9170409981eaad0e2", - "reference": "291397232a2eefb3347eaab9170409981eaad0e2", - "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" + "support": { + "source": "https://github.com/symfony/css-selector/tree/v6.3.2" }, - "suggest": { - "symfony/css-selector": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\DomCrawler\\": "" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "url": "https://github.com/fabpot", + "type": "github" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "description": "Symfony DomCrawler Component", - "homepage": "https://symfony.com", - "time": "2019-06-13T11:03:18+00:00" + "time": "2023-07-12T16:00:22+00:00" }, { - "name": "symfony/event-dispatcher", - "version": "v4.3.3", + "name": "symfony/dom-crawler", + "version": "v6.3.4", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "212b020949331b6531250584531363844b34a94e" + "url": "https://github.com/symfony/dom-crawler.git", + "reference": "3fdd2a3d5fdc363b2e8dbf817f9726a4d013cbd1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/212b020949331b6531250584531363844b34a94e", - "reference": "212b020949331b6531250584531363844b34a94e", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/3fdd2a3d5fdc363b2e8dbf817f9726a4d013cbd1", + "reference": "3fdd2a3d5fdc363b2e8dbf817f9726a4d013cbd1", "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" + "masterminds/html5": "^2.6", + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/expression-language": "~3.4|~4.0", - "symfony/http-foundation": "^3.4|^4.0", - "symfony/service-contracts": "^1.1", - "symfony/stopwatch": "~3.4|~4.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" + "symfony/css-selector": "^5.4|^6.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, "autoload": { "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" + "Symfony\\Component\\DomCrawler\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -4498,91 +5080,48 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony EventDispatcher Component", + "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", - "time": "2019-06-27T06:42:14+00:00" - }, - { - "name": "symfony/event-dispatcher-contracts", - "version": "v1.1.5", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "c61766f4440ca687de1084a5c00b08e167a2575c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/c61766f4440ca687de1084a5c00b08e167a2575c", - "reference": "c61766f4440ca687de1084a5c00b08e167a2575c", - "shasum": "" - }, - "require": { - "php": "^7.1.3" - }, - "suggest": { - "psr/event-dispatcher": "", - "symfony/event-dispatcher-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } + "support": { + "source": "https://github.com/symfony/dom-crawler/tree/v6.3.4" }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ + "funding": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "url": "https://symfony.com/sponsor", + "type": "custom" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "description": "Generic abstractions related to dispatching event", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "time": "2019-06-20T06:46:26+00:00" + "time": "2023-08-01T07:43:40+00:00" }, { "name": "symfony/finder", - "version": "v4.3.3", + "version": "v6.3.5", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "9638d41e3729459860bb96f6247ccb61faaa45f2" + "reference": "a1b31d88c0e998168ca7792f222cbecee47428c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/9638d41e3729459860bb96f6247ccb61faaa45f2", - "reference": "9638d41e3729459860bb96f6247ccb61faaa45f2", + "url": "https://api.github.com/repos/symfony/finder/zipball/a1b31d88c0e998168ca7792f222cbecee47428c4", + "reference": "a1b31d88c0e998168ca7792f222cbecee47428c4", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": ">=8.1" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } + "require-dev": { + "symfony/filesystem": "^6.0" }, + "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\Finder\\": "" @@ -4605,26 +5144,46 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Finder Component", + "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", - "time": "2019-06-28T13:16:30+00:00" + "support": { + "source": "https://github.com/symfony/finder/tree/v6.3.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-09-26T12:56:25+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.11.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "82ebae02209c21113908c229e9883c419720738a" + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/82ebae02209c21113908c229e9883c419720738a", - "reference": "82ebae02209c21113908c229e9883c419720738a", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" }, "suggest": { "ext-ctype": "For best performance" @@ -4632,29 +5191,33 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - }, { "name": "Gert de Pagter", "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], "description": "Symfony polyfill for ctype functions", @@ -4665,41 +5228,62 @@ "polyfill", "portable" ], - "time": "2019-02-06T07:57:58+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-26T09:26:14+00:00" }, { - "name": "symfony/polyfill-php73", - "version": "v1.11.0", + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.28.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "d1fb4abcc0c47be136208ad9d68bf59f1ee17abd" + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "875e90aeea2777b6f135677f618529449334a612" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/d1fb4abcc0c47be136208ad9d68bf59f1ee17abd", - "reference": "d1fb4abcc0c47be136208ad9d68bf59f1ee17abd", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", + "reference": "875e90aeea2777b6f135677f618529449334a612", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, "files": [ "bootstrap.php" ], - "classmap": [ - "Resources/stubs" - ] + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4715,39 +5299,53 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "description": "Symfony polyfill for intl's grapheme_* functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", + "grapheme", + "intl", "polyfill", "portable", "shim" ], - "time": "2019-02-06T07:57:58+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/process", - "version": "v4.3.3", + "version": "v6.3.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "856d35814cf287480465bb7a6c413bb7f5f5e69c" + "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/856d35814cf287480465bb7a6c413bb7f5f5e69c", - "reference": "856d35814cf287480465bb7a6c413bb7f5f5e69c", + "url": "https://api.github.com/repos/symfony/process/zipball/0b5c29118f2e980d455d2e34a5659f4579847c54", + "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": ">=8.1" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Process\\": "" @@ -4770,41 +5368,157 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Process Component", + "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", - "time": "2019-05-30T16:10:05+00:00" + "support": { + "source": "https://github.com/symfony/process/tree/v6.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-08-07T10:39:22+00:00" }, { - "name": "symfony/service-contracts", - "version": "v1.1.5", + "name": "symfony/string", + "version": "v6.3.5", "source": { "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d" + "url": "https://github.com/symfony/string.git", + "reference": "13d76d0fb049051ed12a04bef4f9de8715bea339" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d", - "reference": "f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d", + "url": "https://api.github.com/repos/symfony/string/zipball/13d76d0fb049051ed12a04bef4f9de8715bea339", + "reference": "13d76d0fb049051ed12a04bef4f9de8715bea339", "shasum": "" }, "require": { - "php": "^7.1.3", - "psr/container": "^1.0" + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" }, - "suggest": { - "symfony/service-implementation": "" + "conflict": { + "symfony/translation-contracts": "<2.5" + }, + "require-dev": { + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/intl": "^6.2", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^5.4|^6.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "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": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v6.3.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } + ], + "time": "2023-09-18T10:38:32+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v6.3.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "3d9999376be5fea8de47752837a3e1d1c5f69ef5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/3d9999376be5fea8de47752837a3e1d1c5f69ef5", + "reference": "3d9999376be5fea8de47752837a3e1d1c5f69ef5", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/console": "<5.4" }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/uid": "^5.4|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", "autoload": { + "files": [ + "Resources/functions/dump.php" + ], "psr-4": { - "Symfony\\Contracts\\Service\\": "" - } + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4820,51 +5534,60 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Generic abstractions related to writing services", + "description": "Provides mechanisms for walking through any arbitrary PHP variable", "homepage": "https://symfony.com", "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v6.3.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } ], - "time": "2019-06-13T11:15:36+00:00" + "time": "2023-09-12T10:11:35+00:00" }, { "name": "symfony/yaml", - "version": "v4.3.3", + "version": "v6.3.3", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "34d29c2acd1ad65688f58452fd48a46bd996d5a6" + "reference": "e23292e8c07c85b971b44c1c4b87af52133e2add" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/34d29c2acd1ad65688f58452fd48a46bd996d5a6", - "reference": "34d29c2acd1ad65688f58452fd48a46bd996d5a6", + "url": "https://api.github.com/repos/symfony/yaml/zipball/e23292e8c07c85b971b44c1c4b87af52133e2add", + "reference": "e23292e8c07c85b971b44c1c4b87af52133e2add", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/polyfill-ctype": "~1.8" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<3.4" + "symfony/console": "<5.4" }, "require-dev": { - "symfony/console": "~3.4|~4.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" + "symfony/console": "^5.4|^6.0" }, + "bin": [ + "Resources/bin/yaml-lint" + ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Yaml\\": "" @@ -4887,29 +5610,46 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Yaml Component", + "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", - "time": "2019-07-24T14:47:54+00:00" + "support": { + "source": "https://github.com/symfony/yaml/tree/v6.3.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-31T07:08:24+00:00" }, { "name": "theseer/tokenizer", - "version": "1.1.3", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", - "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", "shasum": "" }, "require": { "ext-dom": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*", - "php": "^7.0" + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { @@ -4929,34 +5669,47 @@ } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "time": "2019-06-13T22:48:21+00:00" + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2021-07-28T10:34:58+00:00" }, { "name": "webmozart/assert", - "version": "1.4.0", + "version": "1.11.0", "source": { "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9" + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9", - "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0", - "symfony/polyfill-ctype": "^1.8" + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" }, "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" + "phpunit/phpunit": "^8.5.13" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.10-dev" } }, "autoload": { @@ -4980,57 +5733,105 @@ "check", "validate" ], - "time": "2018-12-25T11:19:39+00:00" + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" }, { - "name": "yiisoft/yii2-debug", - "version": "2.1.7", + "name": "webmozart/glob", + "version": "4.6.0", "source": { "type": "git", - "url": "https://github.com/yiisoft/yii2-debug.git", - "reference": "c54717af9172cf6233fea3eec113c0e0293e2bb2" + "url": "https://github.com/webmozarts/glob.git", + "reference": "3c17f7dec3d9d0e87b575026011f2e75a56ed655" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-debug/zipball/c54717af9172cf6233fea3eec113c0e0293e2bb2", - "reference": "c54717af9172cf6233fea3eec113c0e0293e2bb2", + "url": "https://api.github.com/repos/webmozarts/glob/zipball/3c17f7dec3d9d0e87b575026011f2e75a56ed655", + "reference": "3c17f7dec3d9d0e87b575026011f2e75a56ed655", "shasum": "" }, "require": { - "ext-mbstring": "*", - "opis/closure": "^3.3", - "php": ">=5.4", - "yiisoft/yii2": "~2.0.13" + "php": "^7.3 || ^8.0.0" }, "require-dev": { - "phpunit/phpunit": "<7", - "yiisoft/yii2-coding-standards": "~2.0", - "yiisoft/yii2-swiftmailer": "*" + "phpunit/phpunit": "^9.5", + "symfony/filesystem": "^5.3" }, - "type": "yii2-extension", + "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "4.1-dev" } }, "autoload": { "psr-4": { - "yii\\debug\\": "src" + "Webmozart\\Glob\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Qiang Xue", - "email": "qiang.xue@gmail.com" - }, - { - "name": "Simon Karlen", - "email": "simi.albi@outlook.com" + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "A PHP implementation of Ant's glob.", + "support": { + "issues": "https://github.com/webmozarts/glob/issues", + "source": "https://github.com/webmozarts/glob/tree/4.6.0" + }, + "time": "2022-05-24T19:45:58+00:00" + }, + { + "name": "yii2-extensions/debug", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/yii2-extensions/debug.git", + "reference": "a6b3e206e811a182d805856b1559b88a05181f2e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yii2-extensions/debug/zipball/a6b3e206e811a182d805856b1559b88a05181f2e", + "reference": "a6b3e206e811a182d805856b1559b88a05181f2e", + "shasum": "" + }, + "require": { + "ext-intl": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "symfony/mime": "^6.3", + "yiisoft/yii2": "^2.2", + "yiisoft/yii2-symfonymailer": "^3.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.6", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.2", + "rector/rector": "^0.18", + "yii2-extensions/phpstan": "dev-main" + }, + "default-branch": true, + "type": "yii2-extension", + "extra": { + "branch-alias": { + "dev-main": "1.0.x-dev" } + }, + "autoload": { + "psr-4": { + "yii\\debug\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "mit" ], "description": "The debugger extension for the Yii framework", "keywords": [ @@ -5038,117 +5839,130 @@ "debugger", "yii2" ], - "time": "2019-07-30T12:40:16+00:00" + "support": { + "issues": "https://github.com/yii2-extensions/debug/issues", + "source": "https://github.com/yii2-extensions/debug/tree/main" + }, + "time": "2023-10-09T18:19:23+00:00" }, { - "name": "yiisoft/yii2-faker", - "version": "2.0.4", + "name": "yii2-extensions/gii", + "version": "dev-main", "source": { "type": "git", - "url": "https://github.com/yiisoft/yii2-faker.git", - "reference": "3df62b1dcb272a8413f9c6e532c9d73f325ccde1" + "url": "https://github.com/yii2-extensions/gii.git", + "reference": "008f6b3ccbe0f6e76f22eac6f00fe3caa37f684c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-faker/zipball/3df62b1dcb272a8413f9c6e532c9d73f325ccde1", - "reference": "3df62b1dcb272a8413f9c6e532c9d73f325ccde1", + "url": "https://api.github.com/repos/yii2-extensions/gii/zipball/008f6b3ccbe0f6e76f22eac6f00fe3caa37f684c", + "reference": "008f6b3ccbe0f6e76f22eac6f00fe3caa37f684c", "shasum": "" }, "require": { - "fzaninotto/faker": "~1.4", - "yiisoft/yii2": "~2.0.0" + "ext-ctype": "*", + "php": ">=8.1", + "phpspec/php-diff": "^1.1", + "yiisoft/yii2": "^2.2" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.6", + "phpunit/phpunit": "^10.3", + "yii2-extensions/phpstan": "dev-main" }, + "default-branch": true, "type": "yii2-extension", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-main": "1.0.x-dev" } }, "autoload": { "psr-4": { - "yii\\faker\\": "" + "yii\\gii\\": "src" } }, "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.", + "description": "The Gii extension for the Yii framework", "keywords": [ - "Fixture", - "faker", + "code generator", + "gii", "yii2" ], - "time": "2018-02-19T20:27:10+00:00" + "support": { + "issues": "https://github.com/yii2-extensions/gii/issues", + "source": "https://github.com/yii2-extensions/gii/tree/main" + }, + "time": "2023-10-06T14:39:00+00:00" }, { - "name": "yiisoft/yii2-gii", - "version": "2.1.0", + "name": "yii2-extensions/phpstan", + "version": "dev-main", "source": { "type": "git", - "url": "https://github.com/yiisoft/yii2-gii.git", - "reference": "d1c18f0dcbd72ab285acd320c56b1aa2554e06fa" + "url": "https://github.com/yii2-extensions/phpstan.git", + "reference": "ef049c6d1d8c1388184346c6e5374734a98ed9fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-gii/zipball/d1c18f0dcbd72ab285acd320c56b1aa2554e06fa", - "reference": "d1c18f0dcbd72ab285acd320c56b1aa2554e06fa", + "url": "https://api.github.com/repos/yii2-extensions/phpstan/zipball/ef049c6d1d8c1388184346c6e5374734a98ed9fb", + "reference": "ef049c6d1d8c1388184346c6e5374734a98ed9fb", "shasum": "" }, "require": { - "phpspec/php-diff": "^1.1.0", - "yiisoft/yii2": "~2.0.14" + "nikic/php-parser": "^4.1.0", + "php": ">=8.1", + "phpstan/phpstan": "^1.0", + "yiisoft/yii2": "^2.2" }, "require-dev": { - "phpunit/phpunit": "<7", - "yiisoft/yii2-coding-standards": "~2.0" + "maglnet/composer-require-checker": "^4.6", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^10.2" }, - "type": "yii2-extension", + "default-branch": true, + "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-main": "1.0.x-dev" } }, "autoload": { "psr-4": { - "yii\\gii\\": "src" + "Yii\\PHPStan\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Qiang Xue", - "email": "qiang.xue@gmail.com" - } + "mit" ], - "description": "The Gii extension for the Yii framework", + "description": "PHPStan extension for Yii2", "keywords": [ - "code generator", - "gii", + "PHPStan", "yii2" ], - "time": "2019-03-17T19:23:15+00:00" + "support": { + "issues": "https://github.com/yii2-extensions/phpstan/issues", + "source": "https://github.com/yii2-extensions/phpstan/tree/main" + }, + "time": "2023-10-09T13:08:23+00:00" } ], "aliases": [], "minimum-stability": "dev", "stability-flags": { - "terabytesoftw/helper-mailer": 20, - "terabytesoftw/widget-alert": 20 + "yii2-extensions/debug": 20, + "yii2-extensions/gii": 20, + "yii2-extensions/phpstan": 20 }, "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": "^7.2.0" + "php": ">=8.1" }, - "platform-dev": [] + "platform-dev": [], + "plugin-api-version": "2.6.0" } diff --git a/config/appbasic.php b/config/appbasic.php deleted file mode 100644 index cebba96..0000000 --- a/config/appbasic.php +++ /dev/null @@ -1,87 +0,0 @@ - '@root/node_modules', - 'app.basic.alias.path.npm' => '@root/node_modules', - 'app.basic.alias.path.public' => '@root/public', - 'app.basic.alias.path.runtime' => '@root/public/@runtime', - 'app.basic.base.path' => '@vendor/terabytesoftw/app-basic/src', - 'app.basic.bootstrap' => ['log'], - 'app.basic.controller.namespace' => 'terabytesoft\app\basic\controllers', - 'app.basic.footer.autor' => '©' . date('Y') . '. ' . \Yii::t('app.basic', 'TerabyteSoft SA - Wilmer Arambula.'), - 'app.basic.id' => 'app.basic', - 'app.basic.language' => 'en-US', - 'app.basic.name' => 'My Project Basic', - 'app.basic.vendor.path' => '@root/vendor', - - // menu default without extension ['terabytesoftw/app-user'] - 'app.basic.menu.isguest' => [ - [ - 'label' => \Yii::t('app.basic', 'About'), - 'url' => ['/site/about'] - ], - [ - 'label' => \Yii::t('app.basic', 'Contact'), - 'url' => ['/site/contact'] - ], - ], - - // menu default with extension ['terabytesoftw/app-user'] - 'app.basic.setting.menu.user.isguest' => [ - [ - 'label' => \Yii::t('app.basic', 'Sign up'), - 'url' => ['/user/registration/register'], - ], - [ - 'label' => \Yii::t('app.basic', 'Login'), - 'url' => ['/user/security/login'] - ], - ], - 'app.basic.setting.menu.user.logged' => [ - [ - 'label' => \Yii::t('app.basic', 'Manage Users'), - 'url' => ['/user/admin/index'], - ], - [ - 'label' => \Yii::t('app.basic', 'Settings Account'), - 'url' => ['/user/settings/account'], - ], - [ - 'label' => \Yii::t('app.basic', 'Settings Profile'), - 'url' => ['/user/settings/profile'], - ], - [ - 'label' => \Yii::t('app.basic', 'Logout'), - 'url' => ['/user/security/logout'], - 'linkOptions' => ['data-method' => 'POST'], - ], - ], - - // component assetmanager - 'app.basic.assetmanager.base.path' => '@public/assets', - - // component errorHandler - 'app.basic.errorhandler.erroraction' => 'site/error', - - // component log - 'app.basic.log.levels' => ['error', 'warning', 'info'], - 'app.basic.log.logFile' => '@runtime/logs/app.log', - - // component mailer - 'app.basic.mailer.usefiletransport' => true, - - // component request - 'app.basic.request.cookievalidationkey' => 'testme-codeception', - 'app.basic.request.enablecsrfvalidation' => true, - - // component urlmanager - 'app.basic.urlmanager.enableprettyurl' => true, - 'app.basic.urlmanager.showscriptname' => true, -]; diff --git a/config/console.php b/config/console.php index c7dabd1..555d25b 100644 --- a/config/console.php +++ b/config/console.php @@ -1,8 +1,57 @@ 'basic-console', + 'basePath' => dirname(__DIR__), + 'bootstrap' => ['log'], + 'aliases' => [ + '@bower' => '@vendor/bower-asset', + '@npm' => '@vendor/npm-asset', + '@root' => dirname(__DIR__), + '@resource' => dirname(__DIR__) . '/src/Framework/resource', + '@tests' => '@app/tests', + ], + 'components' => [ + 'cache' => [ + 'class' => 'yii\caching\FileCache', + ], + 'log' => [ + 'targets' => [ + [ + 'class' => 'yii\log\FileTarget', + 'levels' => ['error', 'warning'], + ], + ], + ], + ], + 'params' => $params, + /* + 'controllerMap' => [ + 'fixture' => [ // Fixture generation command line. + 'class' => 'yii\faker\FixtureController', + ], + ], + */ ]; + +if (YII_ENV_DEV) { + // configuration adjustments for 'dev' environment + $config['bootstrap'][] = 'gii'; + $config['modules']['gii'] = [ + 'class' => 'yii\gii\Module', + ]; + // configuration adjustments for 'dev' environment + // requires version `2.1.21` of yii2-debug module + $config['bootstrap'][] = 'debug'; + $config['modules']['debug'] = [ + 'class' => 'yii\debug\Module', + // uncomment the following to add your IP if you are not connecting from localhost. + //'allowedIPs' => ['127.0.0.1', '::1'], + ]; +} + +return $config; diff --git a/config/defines.php b/config/defines.php deleted file mode 100644 index 103a209..0000000 --- a/config/defines.php +++ /dev/null @@ -1,12 +0,0 @@ - '@root/src', + // array, required, list of language codes that the extracted messages + // should be translated to. For example, ['zh-CN', 'de']. + 'languages' => ['es', 'ru', 'fr', 'pt'], + // string, the name of the function for translating messages. + // Defaults to 'Yii::t'. This is used as a mark to find the messages to be + // translated. You may use a string for single function name or an array for + // multiple function names. + 'translator' => ['\Yii::t'], + // boolean, whether to sort messages by keys when merging new messages + // with the existing ones. Defaults to false, which means the new (untranslated) + // messages will be separated from the old (translated) ones. + 'sort' => true, + // boolean, whether to remove messages that no longer appear in the source code. + // Defaults to false, which means each of these messages will be enclosed with a pair of '@@' marks. + 'removeUnused' => false, + // array, list of patterns that specify which files (not directories) should be processed. + // If empty or not set, all files will be processed. + // Please refer to "except" for details about the patterns. + 'only' => ['*.php'], + // array, list of patterns that specify which files/directories should NOT be processed. + // If empty or not set, all files/directories will be processed. + // A path matches a pattern if it contains the pattern string at its end. For example, + // '/a/b' will match all files and directories ending with '/a/b'; + // the '*.svn' will match all files and directories whose name ends with '.svn'. + // and the '.svn' will match all files and directories named exactly '.svn'. + // Note, the '/' characters in a pattern matches both '/' and '\'. + // See helpers/FileHelper::findFiles() description for more details on pattern matching rules. + // If a file/directory matches both a pattern in "only" and "except", it will NOT be processed. + 'except' => [ + '.svn', + '.git', + '.gitignore', + '.gitkeep', + '.hg', + '.hgignore', + '.hgkeep', + '/messages', + '/migrations', + ], + // 'php' output format is for saving messages to php files. + 'format' => 'php', + // Root directory containing message translations. + 'messagePath' => '@resource/message', + // boolean, whether the message file should be overwritten with the merged messages + 'overwrite' => true, + // Message categories to ignore + 'ignoreCategories' => [ + 'yii', + ], +]; diff --git a/config/params.php b/config/params.php index ee1b6e8..70af4d2 100644 --- a/config/params.php +++ b/config/params.php @@ -1,10 +1,24 @@ 'noreply@appbasic.com', - 'helper.mailer.sender.name' => 'app basic example', + // menu default without extension ['yii2-extensions/app-user'] + 'app.basic.menu.isguest' => [ + [ + 'label' => \Yii::t('app.basic', 'About'), + 'url' => ['/about/index'] + ], + [ + 'label' => \Yii::t('app.basic', 'Contact'), + 'url' => ['/contact/index'] + ], + ], + + 'app.basic.setting.menu.user.isguest' => [], + + 'mailer.sender' => 'noreply@example.com', + 'mailer.sender.name' => 'app basic example', + + 'icons' => '@npm/fortawesome--fontawesome-free/svgs/{family}/{name}.svg', ]; diff --git a/config/test.php b/config/test.php index abca379..be8b946 100644 --- a/config/test.php +++ b/config/test.php @@ -1,69 +1,58 @@ 'test.app.basic', - 'name' => $params['app.basic.name'], +return [ + 'id' => 'basic-tests', 'aliases' => [ + '@root' => dirname(__DIR__), '@bower' => '@root/node_modules', '@npm' => '@root/node_modules', - '@public' => '@root/tests/public', - '@runtime' => '@root/tests/public/@runtime', - '@terabytesoft/app/basic/tests' => '@root/tests', + '@resource' => '@root/src/Framework/resource', + '@web' => '@root/web', + '@runtime' => '@web/runtime', + ], + 'basePath' => dirname(__DIR__), + 'bootstrap' => ['log'], + 'controllerMap' => [ + 'about' => [ + 'class' => \App\UseCase\About\AboutController::class, + ], + 'contact' => [ + 'class' => \App\UseCase\Contact\ContactController::class, + ], + 'site' => [ + 'class' => \App\UseCase\Site\SiteController::class, + ], ], - 'basePath' => '@root/src', - 'bootstrap' => $params['app.basic.bootstrap'], - 'controllerNamespace' => $params['app.basic.controller.namespace'], - 'language' => $params['app.basic.language'], - 'vendorPath' => $params['app.basic.vendor.path'], + 'language' => 'en-US', 'components' => [ 'assetManager' => [ - 'basePath' => $params['app.basic.assetmanager.base.path'], + 'basePath' => dirname(__DIR__) . '/web/assets', ], 'errorHandler' => [ - 'errorAction' => $params['app.basic.errorhandler.erroraction'], + 'errorAction' => 'site/error', ], 'i18n' => [ 'translations' => [ 'app.basic' => [ - 'class' => yii\i18n\PhpMessageSource::class, - ], - ], - ], - 'log' => [ - 'traceLevel' => 'YII_DEBUG' ? 3 : 0, - 'targets' => [ - [ - 'class' => yii\log\FileTarget::class, - 'levels' => $params['app.basic.log.levels'], - 'logFile' => $params['app.basic.log.logFile'], + 'class' => \yii\i18n\PhpMessageSource::class, ], ], ], 'mailer' => [ - 'useFileTransport' => $params['app.basic.mailer.usefiletransport'], - ], - 'request' => [ - 'cookieValidationKey' => $params['app.basic.request.cookievalidationkey'], - 'enableCsrfValidation' => $params['app.basic.request.enablecsrfvalidation'], + 'class' => \yii\symfonymailer\Mailer::class, + 'useFileTransport' => true, ], 'urlManager' => [ - 'enablePrettyUrl' => $params['app.basic.urlmanager.enableprettyurl'], - 'showScriptName' => $params['app.basic.urlmanager.showscriptname'], + 'showScriptName' => true, ], - 'user' => [ - 'identityClass' => \yii\web\User::class, + 'request' => [ + 'cookieValidationKey' => 'test', + 'enableCsrfValidation' => false, ], ], 'params' => $params, ]; - -return $config; diff --git a/config/web.php b/config/web.php index 3400db7..625f3be 100644 --- a/config/web.php +++ b/config/web.php @@ -1,34 +1,47 @@ $params['app.basic.id'], - 'name' => $params['app.basic.name'], + 'id' => 'app.basic', + 'name' => 'My Project Basic', 'aliases' => [ - '@bower' => $params['app.basic.alias.path.bower'], - '@npm' => $params['app.basic.alias.path.npm'], - '@public' => $params['app.basic.alias.path.public'], - '@runtime' => $params['app.basic.alias.path.runtime'], + '@root' => dirname(__DIR__), + '@bower' => '@root/node_modules', + '@npm' => '@root/node_modules', + '@resource' => '@root/src/Framework/resource', + '@web' => '@root/web', + '@runtime' => '@web/runtime', + ], + 'basePath' => dirname(__DIR__), + 'bootstrap' => ['log'], + 'controllerMap' => [ + 'about' => [ + 'class' => \App\UseCase\About\AboutController::class, + ], + 'contact' => [ + 'class' => \App\UseCase\Contact\ContactController::class, + ], + 'site' => [ + 'class' => \App\UseCase\Site\SiteController::class, + ], ], - 'basePath' => $params['app.basic.base.path'], - 'bootstrap' => $params['app.basic.bootstrap'], - 'controllerNamespace' => $params['app.basic.controller.namespace'], - 'language' => $params['app.basic.language'], - 'vendorPath' => $params['app.basic.vendor.path'], + 'language' => 'en-US', 'components' => [ - 'assetManager' => [ - 'basePath' => $params['app.basic.assetmanager.base.path'], + 'cache' => [ + 'class' => \yii\caching\FileCache::class, ], 'errorHandler' => [ - 'errorAction' => $params['app.basic.errorhandler.erroraction'], + 'errorAction' => 'site/error', ], 'i18n' => [ 'translations' => [ 'app.basic' => [ - 'class' => yii\i18n\PhpMessageSource::class, + 'class' => \yii\i18n\PhpMessageSource::class, ], ], ], @@ -36,25 +49,43 @@ 'traceLevel' => 'YII_DEBUG' ? 3 : 0, 'targets' => [ [ - 'class' => yii\log\FileTarget::class, - 'levels' => $params['app.basic.log.levels'], - 'logFile' => $params['app.basic.log.logFile'], + 'class' => \yii\log\FileTarget::class, + 'levels' => ['error', 'warning', 'info'], + 'logFile' => '@runtime/logs/app.log', ], ], ], 'mailer' => [ - 'useFileTransport' => $params['app.basic.mailer.usefiletransport'], + 'class' => \yii\symfonymailer\Mailer::class, + 'useFileTransport' => true, ], 'request' => [ - 'cookieValidationKey' => $params['app.basic.request.cookievalidationkey'], - 'enableCsrfValidation' => $params['app.basic.request.enablecsrfvalidation'], + 'cookieValidationKey' => 'your secret key here', + 'enableCsrfValidation' => true, ], 'urlManager' => [ - 'enablePrettyUrl' => $params['app.basic.urlmanager.enableprettyurl'], - 'showScriptName' => $params['app.basic.urlmanager.showscriptname'], + 'enablePrettyUrl' => true, + 'showScriptName' => false, ], ], 'params' => $params, ]; +if (YII_ENV_DEV) { + // configuration adjustments for 'dev' environment + $config['bootstrap'][] = 'debug'; + $config['modules']['debug'] = [ + 'class' => 'yii\debug\Module', + // uncomment the following to add your IP if you are not connecting from localhost. + // 'allowedIPs' => ['127.0.0.1', '::1'], + ]; + + $config['bootstrap'][] = 'gii'; + $config['modules']['gii'] = [ + 'class' => 'yii\gii\Module', + // uncomment the following to add your IP if you are not connecting from localhost. + //'allowedIPs' => ['127.0.0.1', '::1'], + ]; +} + return $config; diff --git a/docs/CONFIG.md b/docs/CONFIG.md deleted file mode 100644 index 0805037..0000000 --- a/docs/CONFIG.md +++ /dev/null @@ -1,81 +0,0 @@ -### **Example: appbasic.php** - -``` -// app basic web applications options -'app.basic.alias.path.bower' => '@root/node_modules', -'app.basic.alias.path.npm' => '@root/node_modules', -'app.basic.alias.path.public' => '@root/public', -'app.basic.alias.path.runtime' => '@root/public/@runtime', -'app.basic.base.path' => '@vendor/terabytesoftw/app-basic/src', -'app.basic.bootstrap' => ['log'], -'app.basic.controller.namespace' => 'terabytesoft\app\basic\controllers', -'app.basic.footer.autor' => '©' . date('Y') . '. ' . \Yii::t('app.basic', 'TerabyteSoft SA - Wilmer Arambula.'), -'app.basic.id' => 'app.basic', -'app.basic.language' => 'en-US', -'app.basic.name' => 'My Project Basic', -'app.basic.vendor.path' => '@root/vendor', - -// menu default without extension ['terabytesoftw/app-user'] -'app.basic.menu.isguest' => [ - [ - 'label' => \Yii::t('app.basic', 'About'), - 'url' => ['/site/about'] - ], - [ - 'label' => \Yii::t('app.basic', 'Contact'), - 'url' => ['/site/contact'] - ], -], - -// menu default with extension ['terabytesoftw/app-user'] -'app.basic.setting.menu.user.isguest' => [ - [ - 'label' => \Yii::t('app.basic', 'Sign up'), - 'url' => ['/user/registration/register'], - ], - [ - 'label' => \Yii::t('app.basic', 'Login'), - 'url' => ['/user/security/login'] - ], -], -'app.basic.setting.menu.user.logged' => [ - [ - 'label' => \Yii::t('app.basic', 'Manage Users'), - 'url' => ['/user/admin/index'], - ], - [ - 'label' => \Yii::t('app.basic', 'Settings Account'), - 'url' => ['/user/settings/account'], - ], - [ - 'label' => \Yii::t('app.basic', 'Settings Profile'), - 'url' => ['/user/settings/profile'], - ], - [ - 'label' => \Yii::t('app.basic', 'Logout'), - 'url' => ['/user/security/logout'], - 'linkOptions' => ['data-method' => 'POST'], - ], -], - -// component assetmanager -'app.basic.assetmanager.base.path' => '@public/assets', - -// component errorHandler -'app.basic.errorhandler.erroraction' => 'site/error', - -// component log -'app.basic.log.levels' => ['error', 'warning', 'info'], -'app.basic.log.logFile' => '@runtime/logs/app.log', - -// component mailer -'app.basic.mailer.usefiletransport' => true, - -// component request -'app.basic.request.cookievalidationkey' => 'testme-codeception', -'app.basic.request.enablecsrfvalidation' => true, - -// component urlmanager -'app.basic.urlmanager.enableprettyurl' => true, -'app.basic.urlmanager.showscriptname' => true, -``` diff --git a/docs/about.png b/docs/about.png new file mode 100644 index 0000000000000000000000000000000000000000..3c509761fb6861b612265360ae90ccf811c2b915 GIT binary patch literal 79785 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 L|M6Xp|Dpa5b$suq diff --git a/docs/images/contact.jpg b/docs/images/contact.jpg deleted file mode 100644 index ae203e8415bac6b402657f5cf9f53094504625d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74011 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 diff --git a/docs/images/home.jpg b/docs/images/home.jpg deleted file mode 100644 index a59bc0c364924078eb831e93779e88fc3de6d707..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50863 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 View::POS_HEAD, + ]; + + public $depends = [ + YiiAsset::class, + BootstrapAsset::class, + ]; +} diff --git a/src/assets/css/site.css b/src/Framework/resource/css/site.css similarity index 100% rename from src/assets/css/site.css rename to src/Framework/resource/css/site.css diff --git a/src/Framework/resource/js/site.js b/src/Framework/resource/js/site.js new file mode 100644 index 0000000..c41936f --- /dev/null +++ b/src/Framework/resource/js/site.js @@ -0,0 +1,89 @@ +/*! + * Color mode toggler for Bootstrap's docs (https://getbootstrap.com/) + * Copyright 2011-2023 The Bootstrap Authors + * Licensed under the Creative Commons Attribution 3.0 Unported License. + */ +(() => { + 'use strict' + + const getStoredTheme = () => localStorage.getItem('theme') + const setStoredTheme = theme => localStorage.setItem('theme', theme) + + const getPreferredTheme = () => { + const storedTheme = getStoredTheme() + if (storedTheme) { + return storedTheme + } + + return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' + } + + const setTheme = theme => { + if (theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches) { + document.documentElement.setAttribute('data-bs-theme', 'dark') + } else { + document.documentElement.setAttribute('data-bs-theme', theme) + } + } + + setTheme(getPreferredTheme()) + + const showActiveTheme = (theme, focus = false) => { + const themeSwitcher = document.querySelector('#bd-theme') + + if (!themeSwitcher) { + return + } + + const themeSwitcherText = document.querySelector('#bd-theme-text') + const activeThemeIcon = document.querySelector('.theme-icon-active use') + const btnToActive = document.querySelector(`[data-bs-theme-value="${theme}"]`) + const svgOfActiveBtn = btnToActive.querySelector('svg use').getAttribute('href') + + // Añade las siguientes líneas para mostrar el icono de verificación en el botón activo. + const activeCheckIcon = btnToActive.querySelector('.bi'); + activeCheckIcon.classList.remove('d-none'); + + document.querySelectorAll('[data-bs-theme-value]').forEach(element => { + const checkIcon = element.querySelector('.bi'); + if (element === btnToActive) { + checkIcon.classList.remove('d-none'); + } else { + checkIcon.classList.add('d-none'); + } + element.classList.remove('active') + element.setAttribute('aria-pressed', 'false') + }) + + btnToActive.classList.add('active') + btnToActive.setAttribute('aria-pressed', 'true') + activeThemeIcon.setAttribute('href', svgOfActiveBtn) + const themeSwitcherLabel = `${themeSwitcherText.textContent} (${btnToActive.dataset.bsThemeValue})` + themeSwitcher.setAttribute('aria-label', themeSwitcherLabel) + + if (focus) { + themeSwitcher.focus() + } + } + + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => { + const storedTheme = getStoredTheme() + if (storedTheme !== 'light' && storedTheme !== 'dark') { + setTheme(getPreferredTheme()) + } + }) + + window.addEventListener('DOMContentLoaded', () => { + showActiveTheme(getPreferredTheme()) + + document.querySelectorAll('[data-bs-theme-value]') + .forEach(toggle => { + toggle.addEventListener('click', () => { + const theme = toggle.getAttribute('data-bs-theme-value') + setStoredTheme(theme) + setTheme(theme) + showActiveTheme(theme, true) + }) + }) + }) +})() diff --git a/src/Framework/resource/layout/component/menu.php b/src/Framework/resource/layout/component/menu.php new file mode 100644 index 0000000..0ecd9ef --- /dev/null +++ b/src/Framework/resource/layout/component/menu.php @@ -0,0 +1,36 @@ +params['app.basic.menu.isguest']; + +NavBar::begin( + [ + 'brandLabel' => Html::img( + \Yii::getAlias('@web/image/yiiframework.svg'), + [ + 'alt' => \Yii::$app->name, + 'width' => '200', + ], + ), + 'brandUrl' => \Yii::$app->homeUrl, + 'collapseOptions' => [ + 'class' => 'justify-content-end', + ], + 'options' => [ + 'class' => 'navbar navbar bg-body-tertiary navbar-expand-lg', + ], + ] +); +echo Nav::widget( + [ + 'options' => ['class' => 'navbar-nav'], + 'items' => $menuItems, + ] +); + +NavBar::end(); diff --git a/src/Framework/resource/layout/footer.php b/src/Framework/resource/layout/footer.php new file mode 100644 index 0000000..cbca60c --- /dev/null +++ b/src/Framework/resource/layout/footer.php @@ -0,0 +1,106 @@ + + 'container']) ?> + 'd-flex flex-wrap justify-content-between align-items-center py-3 my-4 border-top']) ?> + 'col-md-4']) ?> + 'mb-3 me-2 mb-md-0 text-body-secondary text-decoration-none lh-1', + 'href' => 'https://www.yiiframework.com/', + 'aria-label' => 'Yii Framework', + ], + ) ?> + YiiFramework', ['class' => 'mb-3 mb-md-0 text-body-secondary']) ?> + + + 'nav col-md-4 justify-content-end list-unstyled d-flex align-items-center']) ?> + 'fa-solid fa-xl']), + 'https://x.com/Terabytesoftw', + [ + 'class' => 'text-body-secondary', + 'rel' => 'noopener', + 'target' => '_blank', + 'title' => 'Terabytesoftw on en X', + ] + ), + ['class' => 'ms-3'], + ) ?> + 'fa-solid fa-xl']), + 'https://github.com/yiisoft/yii2/tree/2.2', + [ + 'class' => 'text-body-secondary', + 'rel' => 'noopener', + 'target' => '_blank', + 'title' => 'Yii Framework v.2.2 on GitHub', + ] + ), + ['class' => 'ms-3'], + ) ?> + 'fa-solid fa-xl']), + 'https://t.me/yii_framework_in_english', + [ + 'class' => 'text-body-secondary', + 'rel' => 'noopener', + 'target' => '_blank', + 'title' => 'Yii Framework v.2.2 on Telegram', + ] + ), + ['class' => 'ms-3'], + ) ?> +
  • + + + +
  • + + + diff --git a/src/Framework/resource/layout/head.php b/src/Framework/resource/layout/head.php new file mode 100644 index 0000000..5fd05a1 --- /dev/null +++ b/src/Framework/resource/layout/head.php @@ -0,0 +1,20 @@ + + + + Yii::$app->charset]) ?> + 'X-UA-Compatible', 'content' => 'IE=edge']) ?> + 'viewport', 'content' => 'width=device-width, initial-scale=1']) ?> + + title)) ?> + head() ?> + diff --git a/src/Framework/resource/layout/main.php b/src/Framework/resource/layout/main.php new file mode 100644 index 0000000..7cc1964 --- /dev/null +++ b/src/Framework/resource/layout/main.php @@ -0,0 +1,59 @@ + +beginPage() ?> + + Yii::$app->language, 'data-bs-theme' => 'auto']) ?> + render('head') ?> + + beginBody() ?> + + + + + + 'd-flex flex-column']) ?> + render('component/menu') ?> + in_array( + $this->context->action->uniqueId, + [ + 'site/index', + 'about/index' + ] + ) + ? 'd-flex flex-fill align-items-center justify-content-center' + : 'container flex-fill' + ] + ) ?> + isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], + ] + ) ?> + + + render('footer') ?> + + + endBody() ?> + + +endPage(); diff --git a/src/messages/.gitkeep b/src/Framework/resource/message/.gitkeep similarity index 100% rename from src/messages/.gitkeep rename to src/Framework/resource/message/.gitkeep diff --git a/src/UseCase/About/AboutController.php b/src/UseCase/About/AboutController.php new file mode 100644 index 0000000..394c38f --- /dev/null +++ b/src/UseCase/About/AboutController.php @@ -0,0 +1,20 @@ +render('index'); + } + + public function getViewPath(): string + { + return __DIR__ . '/view'; + } +} diff --git a/src/UseCase/About/view/index.php b/src/UseCase/About/view/index.php new file mode 100644 index 0000000..35afe2f --- /dev/null +++ b/src/UseCase/About/view/index.php @@ -0,0 +1,20 @@ +title = Yii::t('app.basic', 'About'); +?> + 'site-about']) ?> + '. Html::encode($this->title) . '
    ', ['class' => 'c-grey-900 mb-40 display-4']) ?> + + + diff --git a/src/UseCase/Contact/ContactController.php b/src/UseCase/Contact/ContactController.php new file mode 100644 index 0000000..7525623 --- /dev/null +++ b/src/UseCase/Contact/ContactController.php @@ -0,0 +1,61 @@ + [ + 'class' => CaptchaAction::class, + 'fixedVerifyCode' => (YII_ENV === 'tests') ? 'testme' : null, + ], + ], + parent::actions(), + ); + } + + public function __construct( + $id, + Module $module, + private ContactForm $formModel, + array $config = [] + ) { + parent::__construct($id, $module, $config); + } + + public function actionIndex(): Response|string + { + if ($this->formModel->load($this->module->request->post()) && $this->formModel->validate()) { + if ($this->formModel->sendContact($this->module)) { + $this->module->session->setFlash('contactFormSubmitted'); + } + + return $this->refresh(); + } + + return $this->render( + 'index', + [ + 'model' => $this->formModel, + 'module' => $this->module, + ], + ); + } + + public function getViewPath(): string + { + return __DIR__ . '/view'; + } +} diff --git a/src/UseCase/Contact/ContactForm.php b/src/UseCase/Contact/ContactForm.php new file mode 100644 index 0000000..d721e8e --- /dev/null +++ b/src/UseCase/Contact/ContactForm.php @@ -0,0 +1,44 @@ + '/contact/captcha'], + ]; + } + + public function sendContact(Module $module): bool + { + return $module->mailer->compose() + ->setTo($this->email) + ->setFrom([$module->params['mailer.sender'] => $module->params['mailer.sender.name']]) + ->setReplyTo([$this->email => $this->name]) + ->setSubject($this->subject) + ->setTextBody($this->body) + ->send(); + } +} diff --git a/src/UseCase/Contact/view/index.php b/src/UseCase/Contact/view/index.php new file mode 100644 index 0000000..f7214d1 --- /dev/null +++ b/src/UseCase/Contact/view/index.php @@ -0,0 +1,166 @@ +title = $this->title = Yii::t('app.basic', 'Contact'); +?> + 'site-contact']) ?> + '.Html::encode($this->title).'', + ['class' => 'text-center c-grey-900 mb-40 display-4'] + ) ?> + session->hasFlash('contactFormSubmitted')) : ?> + 'btn-close', 'data-bs-dismiss' => 'alert', 'aria-label' => 'Close'] + ), + ['class' => 'alert alert-success alert-dismissible fade show', 'role' => 'alert'], + ) ?> + 'mb-2']) ?> +
    + + + mailer->useFileTransport) : ?> + + ' . Yii::getAlias($module->mailer->fileTransportPath) . '' ?> + useFileTransport property of the mail application component to be false to enable email sending.' + ) ?> + + + session->setFlash( + 'success', + Yii::t( + 'app.basic', + 'Thank you for contacting us. We will respond to you as soon as possible.' + ) + ) ?> + session->removeFlash('contactFormSubmitted') ?> + + 'text-center mb-4']) ?> + please fill out the following form to contact us.
    Thank you.' + ) ?> + + 'contact-form', + 'layout' => 'default', + 'fieldConfig' => [ + 'template' => '{input}{label}{hint}{error}', + 'horizontalCssClasses' => [ + 'error' => 'text-center', + 'field' => 'form-label-group', + ], + 'options' => ['class' => 'form-label-group'], + ], + 'options' => ['class' => 'form-contact'], + 'validateOnType' => false, + 'validateOnChange' => false, + ] + ) ?> + field($model, 'name') + ->textInput( + [ + 'autofocus' => true, + 'oninput' => 'this.setCustomValidity("")', + 'oninvalid' => 'this.setCustomValidity("' . Yii::t('app.basic', 'Enter Username Here') .'")', + 'placeholder' => Yii::t('app.basic', 'Username'), + 'required' => (YII_ENV === 'test') ? false : true, + 'tabindex' => '1', + ] + ) + ->label(Yii::t('app.basic', 'Username')) + ?> + field($model, 'email') + ->textInput( + [ + 'oninput' => 'this.setCustomValidity("")', + 'oninvalid' => 'this.setCustomValidity("' . Yii::t('app.basic', 'Enter Email Here') . '")', + 'placeholder' => Yii::t('app.basic', 'Email'), + 'required' => (YII_ENV === 'tests') ? false : true, + 'tabindex' => '2', + ] + ) + ->label(Yii::t('app.basic', 'Email')) + ?> + field($model, 'subject') + ->textInput( + [ + 'oninput' => 'this.setCustomValidity("")', + 'oninvalid' => 'this.setCustomValidity("' . Yii::t('app.basic', 'Enter Subject Here').'")', + 'placeholder' => Yii::t('app.basic', 'Subject'), + 'required' => (YII_ENV === 'test') ? false : true, + 'tabindex' => '3', + ] + ) + ->label(Yii::t('app.basic', 'Subject')) + ?> + field($model, 'body') + ->textarea( + [ + 'oninput' => 'this.setCustomValidity("")', + 'oninvalid' => 'this.setCustomValidity("' . Yii::t('app.basic', 'Enter Body Here') . '")', + 'placeholder' => Yii::t('app.basic', 'Body'), + 'required' => (YII_ENV === 'test') ? false : true, + 'rows' => 6, + 'tabindex' => '4', + ] + ) + ->label(Yii::t('app.basic', 'Body')) + ?> + field($model, 'verifyCode', ['labelOptions' => ['id' => 'verifyCode']]) + ->widget( + Captcha::class, + [ + 'captchaAction' => 'contact/captcha', + 'template' => '{input}
    ' . '' . Yii::t('app.basic', 'Captcha Code') . ': ' . '' . '{image}
    ', + 'options' => [ + 'class' => 'form-control', + 'oninput' => 'this.setCustomValidity("")', + 'oninvalid' => 'this.setCustomValidity("' . Yii::t('app.basic', 'Enter Captcha Code Here') . '")', + 'placeholder' => Yii::t('app.basic', 'Captcha Code'), + 'required' => (YII_ENV === 'test') ? false : true, + 'style' => 'margin-bottom:10px', + 'tabindex' => '5', + ], + ] + ) + ->label(Yii::t('app.basic', 'Captcha Code')) + ?> + 'd-grid gap-2']) ?> + 'btn btn-lg btn-primary btn-block', 'name' => 'contact-button', 'tabindex' => '6'] + ) ?> + + + + [ + 'class' => ErrorAction::class, + ], + ]; + } + + public function behaviors(): array + { + return [ + 'verbs' => [ + 'class' => VerbFilter::class, + 'actions' => [ + 'logout' => ['post'], + ], + ], + ]; + } +} diff --git a/src/UseCase/Site/SiteController.php b/src/UseCase/Site/SiteController.php new file mode 100644 index 0000000..730a589 --- /dev/null +++ b/src/UseCase/Site/SiteController.php @@ -0,0 +1,43 @@ + [ + 'class' => ErrorAction::class, + ], + ]; + } + + public function behaviors(): array + { + return [ + 'verbs' => [ + 'class' => VerbFilter::class, + 'actions' => [ + 'logout' => ['post'], + ], + ], + ]; + } + + public function actionIndex(): string + { + return $this->render('index'); + } + + public function getViewPath(): string + { + return __DIR__ . '/view'; + } +} diff --git a/src/views/site/error.php b/src/UseCase/Site/view/error.php similarity index 61% rename from src/views/site/error.php rename to src/UseCase/Site/view/error.php index 40efa7d..1f804e8 100644 --- a/src/views/site/error.php +++ b/src/UseCase/Site/view/error.php @@ -1,30 +1,26 @@ title = $name; +use yii\bootstrap5\Html; +use yii\web\View; +/** + * @var string $message + * @var string $name + * @var View $this + */ +$this->title = $name; ?> - 'site-error']) ?> - title), ['class' => 'c-grey-900 mb-40']) ?> - 'alert alert-danger']) ?> - - + - - + - -title = \Yii::t('app.basic', 'Index'); - ?> - 'jumbotron jumbotron-fluid text-center']) ?> 'display-2']) ?> Web Application 'lead']) ?> - Basic Yii.2.0. + Yii v.2.2 diff --git a/src/assets/AppAsset.php b/src/assets/AppAsset.php deleted file mode 100644 index eae133f..0000000 --- a/src/assets/AppAsset.php +++ /dev/null @@ -1,27 +0,0 @@ - [ - 'class' => VerbFilter::class, - 'actions' => [ - 'logout' => ['post'], - ], - ], - ]; - } - - - /** - * actions - */ - public function actions() - { - return [ - 'error' => [ - 'class' => ErrorAction::class, - ], - 'captcha' => [ - 'class' => CaptchaAction::class, - 'fixedVerifyCode' => (YII_ENV === 'test') ? 'testme' : null, - ], - ]; - } - - /** - * __construct - */ - public function __construct($id, Module $module, array $config = []) - { - $this->mailer = new Mailer(); - parent::__construct($id, $module, $config); - } - - /** - * actionIndex - */ - public function actionIndex(): string - { - return $this->render('index'); - } - - /** - * actionAbout - **/ - public function actionAbout(): string - { - return $this->render('about'); - } - - /** - * actionContact - * @return response|string - **/ - public function actionContact() - { - $model = new ContactForm(); - - if ($model->load($this->module->request->post()) && $model->validate()) { - $this->sendContact($model); - - $this->module->session->setFlash('contactFormSubmitted'); - - return $this->refresh(); - } - - return $this->render('contact', [ - 'model' => $model, - ]); - } - - /** - * sendContact - * @param Model $model - **/ - public function sendContact(Model $model): void - { - $this->mailer->sendMessage( - $model->email, - $model->subject, - [ - 'replyTo' => [ - $model->email => $model->name - ], - 'textBody' => $model->body - ] - ); - } -} diff --git a/src/forms/ContactForm.php b/src/forms/ContactForm.php deleted file mode 100644 index 73ae7ec..0000000 --- a/src/forms/ContactForm.php +++ /dev/null @@ -1,34 +0,0 @@ -params['app.basic.menu.isguest']; - -if (isset(\Yii::$app->extensions['terabytesoftw/app-user']) || (YII_ENV === 'test')) { - switch (\Yii::$app->user->isGuest) { - case true: - $menuItems = array_merge($menuItems, \Yii::$app->params['app.basic.setting.menu.user.isguest']); - break; - case false: - $menuItems = \Yii::$app->params['app.basic.setting.menu.user.logged']; - break; - } -} -?> - -beginPage() ?> - - - \Yii::$app->language]) ?> - - - \Yii::$app->charset]) ?> - 'X-UA-Compatible', 'content' => 'IE=edge']) ?> - 'viewport', 'content' => 'width=device-width, initial-scale=1']) ?> - - title)) ?> - head() ?> - - - beginBody() ?> - - - - 'd-flex flex-column']) ?> - - \Yii::t('app.basic', \Yii::$app->name), - 'brandUrl' => \Yii::$app->homeUrl, - 'options' => [ - 'class' => 'navbar navbar-dark bg-dark navbar-expand-lg', - ], - ]); - - echo Nav::widget([ - 'options' => ['class' => 'navbar-nav float-right ml-auto'], - 'items' => $menuItems, - ]); - - NavBar::end(); ?> - - - - in_array( - $this->context->action->uniqueId, - [ - 'site/index', - 'site/about' - ] - ) - ? 'd-flex flex-fill align-items-center justify-content-center' - : 'container flex-fill' - ] - ) ?> - - isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], - ]) ?> - - - - - - 'footer']) ?> - - 'container flex-fill']) ?> - - 'float-left']) ?> - params['app.basic.footer.autor']?> - - - 'float-right']) ?> - - 'external'] - ) ?> - - - - - - - - - - - endBody() ?> - - - -endPage() ?> diff --git a/src/views/site/about.php b/src/views/site/about.php deleted file mode 100644 index cfa449b..0000000 --- a/src/views/site/about.php +++ /dev/null @@ -1,22 +0,0 @@ -title = Yii::t('app.basic', 'About'); - -?> - - 'site-about']) ?> - - '.Html::encode($this->title).'', ['class' => 'c-grey-900 mb-40 display-4']) ?> - - - - - diff --git a/src/views/site/contact.php b/src/views/site/contact.php deleted file mode 100644 index cbbfc7c..0000000 --- a/src/views/site/contact.php +++ /dev/null @@ -1,160 +0,0 @@ -title = $this->title = \Yii::t('app.basic', 'Contact'); - -?> - - 'site-contact']) ?> - - '.Html::encode($this->title).'', - ['class' => 'text-center c-grey-900 mb-40 display-4'] - ) ?> - - context->module->session->hasFlash('contactFormSubmitted')) : ?> - - 'mb-2']) ?> - -
    - - -
    ' - ?> - context->module->mailer->useFileTransport) : ?> - ' ?> - '.\Yii::getAlias($this->context->module->mailer->fileTransportPath).''.'

    ' ?> - useFileTransport property of the mail '. - 'application component to be false to enable email sending.' - ) ?> - - - - context->module->session->setFlash( - 'success', - \Yii::t( - 'app.basic', - 'Thank you for contacting us. We will respond to you as soon as possible.' - ) - ) ?> - - - 'text-center mb-4']) ?> - please fill out the '. - 'following form to contact us.
    Thank you.') - ?> - - - 'contact-form', - 'layout' => 'default', - 'fieldConfig' => [ - 'template' => '{input}{label}{hint}{error}', - 'horizontalCssClasses' => [ - 'label' => '', - 'offset' => '', - 'wrapper' => '', - 'error' => 'text-center', - 'hint' => '', - 'field' => 'form-label-group', - ], - 'options' => ['class' => 'form-label-group'], - ], - 'options' => ['class' => 'form-contact'], - 'validateOnType' => false, - 'validateOnChange' => false, - ]) ?> - - field($model, 'name') - ->textInput([ - 'autofocus' => true, - 'oninput' => 'this.setCustomValidity("")', - 'oninvalid' => 'this.setCustomValidity("'.\Yii::t('app.basic', 'Enter Username Here').'")', - 'placeholder' => \Yii::t('app.basic', 'Username'), - 'required' => (YII_ENV === 'test') ? false : true, - 'tabindex' => '1', - ]) - ->label(\Yii::t('app.basic', 'Username')) - ?> - - field($model, 'email') - ->textInput([ - 'oninput' => 'this.setCustomValidity("")', - 'oninvalid' => 'this.setCustomValidity("'.\Yii::t('app.basic', 'Enter Email Here').'")', - 'placeholder' => \Yii::t('app.basic', 'Email'), - 'required' => (YII_ENV === 'test') ? false : true, - 'tabindex' => '2', - ]) - ->label(\Yii::t('app.basic', 'Email')) - ?> - - field($model, 'subject') - ->textInput([ - 'oninput' => 'this.setCustomValidity("")', - 'oninvalid' => 'this.setCustomValidity("'.\Yii::t('app.basic', 'Enter Subject Here').'")', - 'placeholder' => \Yii::t('app.basic', 'Subject'), - 'required' => (YII_ENV === 'test') ? false : true, - 'tabindex' => '3', - ]) - ->label(\Yii::t('app.basic', 'Subject')) - ?> - - field($model, 'body') - ->textarea([ - 'oninput' => 'this.setCustomValidity("")', - 'oninvalid' => 'this.setCustomValidity("'.\Yii::t('app.basic', 'Enter Body Here').'")', - 'placeholder' => \Yii::t('app.basic', 'Body'), - 'required' => (YII_ENV === 'test') ? false : true, - 'rows' => 6, - 'tabindex' => '4', - ]) - ->label(\Yii::t('app.basic', 'Body')) - ?> - - field($model, 'verifyCode', [ - 'labelOptions' => ['id' => 'verifyCode'], - ])->widget( - Captcha::class, - [ - 'template' => '{input}
    '.''. - \Yii::t('app.basic', 'Captcha Code').':'.''.'{image}
    ', - 'options' => [ - 'class' => 'form-control', - 'oninput' => 'this.setCustomValidity("")', - 'oninvalid' => 'this.setCustomValidity("'. - \Yii::t('app.basic', 'Enter Captcha Code Here').'")', - 'placeholder' => \Yii::t('app.basic', 'Captcha Code'), - 'required' => (YII_ENV === 'test') ? false : true, - 'style' => 'margin-bottom:10px', - 'tabindex' => '5', - ], - ] - ) - ->label(\Yii::t('app.basic', 'Captcha Code')) - ?> - - 'form-group']) ?> - 'btn btn-lg btn-primary btn-block', 'name' => 'contact-button', 'tabindex' => '6', - ]) ?> - - - - - - -amGoingTo('navigate to the About page.'); + $I->amOnRoute('about/index'); + + $I->wantTo('ensure that About page works.'); + $I->expectTo('see page index.'); + $I->see('About'); + $I->see('This is the About page.'); + } +} diff --git a/tests/Acceptance/Contact/IndexCest.php b/tests/Acceptance/Contact/IndexCest.php new file mode 100644 index 0000000..d492521 --- /dev/null +++ b/tests/Acceptance/Contact/IndexCest.php @@ -0,0 +1,21 @@ +amGoingTo('navigate to the Contact page.'); + $I->amOnRoute('contact/index'); + + $I->wantTo('ensure that Contact page works.'); + $I->expectTo('see page index.'); + $I->see('Contact'); + $I->see('If you have business inquiries or other questions, please fill out the following form to contact us. Thank you.'); + } +} diff --git a/tests/Acceptance/Site/IndexCest.php b/tests/Acceptance/Site/IndexCest.php new file mode 100644 index 0000000..c6aeee6 --- /dev/null +++ b/tests/Acceptance/Site/IndexCest.php @@ -0,0 +1,21 @@ +amGoingTo('navigate to the Home page.'); + $I->amOnRoute('/'); + + $I->wantTo('ensure that Home page works.'); + $I->expectTo('see page index.'); + $I->see('Web Application'); + $I->see('Yii v.2.2'); + } +} diff --git a/tests/functional.suite.yml b/tests/Functional.suite.yml similarity index 61% rename from tests/functional.suite.yml rename to tests/Functional.suite.yml index fc066a0..3e33c70 100644 --- a/tests/functional.suite.yml +++ b/tests/Functional.suite.yml @@ -4,12 +4,10 @@ # Emulate web requests and make application process them # Include one of framework modules (Symfony2, Yii2, Laravel5) to use it # Remove this suite if you don't use frameworks - actor: FunctionalTester modules: enabled: - - PhpBrowser: - url: http://127.0.0.1:8080 - # add a framework module here - - \terabytesoft\app\basic\tests\Helper\Functional - step_decorators: ~ + - Filesystem + - Yii2 + - Asserts +step_decorators: ~ diff --git a/tests/Functional/Contact/IndexCest.php b/tests/Functional/Contact/IndexCest.php new file mode 100644 index 0000000..641fcaf --- /dev/null +++ b/tests/Functional/Contact/IndexCest.php @@ -0,0 +1,66 @@ +amGoingTo('navigate to the Contact page.'); + $I->amOnRoute('contact/index'); + } + + public function contactFormSubmitFormEmptyData(FunctionalTester $I): void + { + $I->amGoingTo('contact form submit form with empty data.'); + $I->submitForm('#contact-form', []); + + $I->expectTo('see validations errors.'); + $I->see('Name cannot be blank.'); + $I->see('Email cannot be blank.'); + $I->see('Subject cannot be blank.'); + $I->see('Body cannot be blank.'); + } + + public function contactFormSubmitFormEmailWrongData(FunctionalTester $I): void + { + $I->amGoingTo('contact form submit form with email wrong.'); + $I->submitForm('#contact-form', [ + 'ContactForm[name]' => 'tester', + 'ContactForm[email]' => 'tester.email', + 'ContactForm[subject]' => 'test subject', + 'ContactForm[body]' => 'test content', + 'ContactForm[verifyCode]' => 'testme', + ]); + + $I->expectTo('Email is not a valid email address'); + $I->dontSee('Name cannot be blank'); + $I->see('Email is not a valid email address.'); + $I->dontSee('Subject cannot be blank'); + $I->dontSee('Body cannot be blank'); + $I->dontSee('The verification code is incorrect'); + } + + public function contactFormSubmitFormSuccessData(FunctionalTester $I): void + { + $I->amGoingTo('contact form submit form with success data.'); + $I->submitForm('#contact-form', [ + 'ContactForm[name]' => 'tester', + 'ContactForm[email]' => 'tester@example.com', + 'ContactForm[subject]' => 'test subject', + 'ContactForm[body]' => 'test content', + 'ContactForm[verifyCode]' => 'testme', + ]); + + $I->expectTo('success.'); + $I->dontSeeElement('#contact-form'); + $I->see('Thank you for contacting us. We will respond to you as soon as possible.'); + $I->see( + 'Note that if you turn on the Yii debugger, you should be able to view the mail message on the mail panel of the debugger.' + ); + } +} diff --git a/tests/_support/AcceptanceTester.php b/tests/Support/AcceptanceTester.php similarity index 77% rename from tests/_support/AcceptanceTester.php rename to tests/Support/AcceptanceTester.php index a89ae72..66c95bc 100644 --- a/tests/_support/AcceptanceTester.php +++ b/tests/Support/AcceptanceTester.php @@ -1,10 +1,13 @@ attributes = [ + 'name' => 'Tester', + 'email' => 'tester@example.com', + 'subject' => 'very important letter subject', + 'body' => 'body of current message', + 'verifyCode' => 'testme', + ]; + + verify($formModel->sendContact(\Yii::$app))->notEmpty(); + + // using Yii2 module actions to check email was sent + $this->tester->seeEmailIsSent(); + + /** @var MessageInterface $emailMessage */ + $emailMessage = $this->tester->grabLastSentEmail(); + + verify($emailMessage)->instanceOf(MessageInterface::class); + + verify($emailMessage->getTo())->arrayHasKey('tester@example.com'); + verify($emailMessage->getFrom())->arrayHasKey('noreply@example.com'); + verify($emailMessage->getReplyTo())->arrayHasKey('tester@example.com'); + verify($emailMessage->getSubject())->equals('very important letter subject'); + verify($emailMessage->toString())->stringContainsString('body of current message'); + } +} diff --git a/tests/_bootstrap.php b/tests/_bootstrap.php index 71800be..0f260c2 100644 --- a/tests/_bootstrap.php +++ b/tests/_bootstrap.php @@ -1,33 +1,7 @@ 'admin' - - ]; - - private $id; - - private $token; - - public static function findIdentity($id) - { - if (in_array($id, static::$ids)) { - $identitiy = new static(); - $identitiy->id = $id; - return $identitiy; - } - } - - public static function findIdentityByAccessToken($token, $type = null) - { - if (isset(static::$tokens[$token])) { - $id = static::$tokens[$token]; - $identitiy = new static(); - $identitiy->id = $id; - $identitiy->token = $token; - return $identitiy; - } - } - - public function getId() - { - return $this->id; - } - - public function getAuthKey() - { - throw new NotSupportedException(); - } - public function validateAuthKey($authKey) - { - throw new NotSupportedException(); - } -} diff --git a/tests/_data/views/main.php b/tests/_data/views/main.php deleted file mode 100644 index eaba028..0000000 --- a/tests/_data/views/main.php +++ /dev/null @@ -1,4 +0,0 @@ - -beginPage();?>1head();?>2beginBody();?>3endBody();?>4endPage(); diff --git a/tests/_output/.gitignore b/tests/_output/.gitignore index c96a04f..d6b7ef3 100644 --- a/tests/_output/.gitignore +++ b/tests/_output/.gitignore @@ -1,2 +1,2 @@ * -!.gitignore \ No newline at end of file +!.gitignore diff --git a/tests/_output/c3tmp/codecoverage.serialized b/tests/_output/c3tmp/codecoverage.serialized deleted file mode 100644 index f38da245ab014e898e3a849d06f00d932287d0e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23038 zcmeHPOK;ma5cY5JJ%y;3W%`tLHb8)Gy4a-19(184#vvk8f+#gji~RSUq3qah?b@^q z6d3GHPBgxE-1qo*!z0Fr z0|&W5UMo;HoP6S8c(BDQ`*QkkE@$l=nzSvB54X4_H^@ZxByZcrN2R41P6P+b-@tU= zRnem=n$GrMbkO$e?&YP?(c!i_fx*j@YGk2IBXjsmXK;d!#~vSE@pP`5i=xa#k%BE^ z_S#5OJ~l6@sHzJXK9!}W&Qf8FY)pDtRhRhmp?a!@lNo0d!$&Y=N9)N--PC1K$l9cL zVA%Bi_om7iy7Fk1k7d0uFqw2CvgR6oY-xgNc(kT3O1_x15U*tmzAl8)TdG|A>{J=> zFcmXUx24G4CaVbh4qV()b)rqOuFLuyij>af*R>*C2FFiLWpGALMNyb3t|?qgk)4|E zJ+yb!+*R%E>@zKx^UdzFFTJ-n96?tMeq7>M%|pNgXYm*HP1L!C@OU2#e%7k_M*`9t z`LQgY+bVtNq-K3ajT{%nCd4IuMT`i0p|!dlgl6nMpv!d|Dt(ZiIvw{5e_M zb*r;RmHJ&D4$XdrJHu)htM1EZiE3utL%cpB;BCg~0j$jI8Gsc!KsQpOO|WENZG+%6 zg!Gl_U--M*JizX(O9;%R)@375`AXYp|5)tSwl-9Lm01fBZ-A6+8 z%i1GwZ>w8Ho`2RECPT}}d|j7|hgGzGkFKtxwVaIyRO3X5T`g8~UDonSR<+E8?cMdz zN6v%Q)-_C~8(8?aU`*)hXD%9X-hd&vKjPmNXEDT~5TCG@d=-ou}U z6L=Y336h^)xoc+&WwVh#7gh6m1;(xM@S0Zo)6B@;R1heJi=>0LGGi(u^VT;M0nDSbT$o2`yYE8Bs8XjU}HK3t}z`18`D9sF`dkqd34US7^%|} zIv~b8Iw;0GIxxmON;pO*t7ME$TFEFK-cY(l%?RNbBZOm&5RMT#B4mUP)|gMH@XCBb zd9qIk$9zIK77*Ga2ZVAaQ#ywBHX1<;ejdOtv>(8CX_iP3PcX0lomdaOu+tdXOXDPN1L9$}0oi6k|UHbT*$M zgML!LbVKH*TtsJZ;3_5#PE5z6n9ddq>59z^F$|C zwb!>!zqW4g8TAmy!sY4W%%c-^Xk9`H?UHA#-}fZlA#jiR!4Q}F$RkAek;lSG4|#id zbgI1NF9b5xJ*<1XdE+`>v-}4>*I!Tp?pBj4gJgm?mL+Yat>fH_VB_Ls60&?*;y>7h z9^fFe+YsOe<3ppq0Tmyl?|j(mXI;Jkl^$%G;2%J&*Md65FBsnHyljRHA^P2IjmaqvH|G!&}sY m=BaFpe7Ynyypkfn)Idhq0*B>_chH%|vzAp^10^18ApZkjEihvM diff --git a/tests/_output/coverage.serialized b/tests/_output/coverage.serialized deleted file mode 100644 index 3451e88..0000000 --- a/tests/_output/coverage.serialized +++ /dev/null @@ -1,1366 +0,0 @@ -setData(array ( - 'D:\\git-local\\terabytesoftw\\app-basic\\src\\views\\layouts\\main.php' => - array ( - 16 => - array ( - 0 => 'testAboutPage', - 1 => 'testContactPage', - 2 => 'testContactSubmitFormEmptyData', - 3 => 'testContactSubmitFormEmailWrongData', - 4 => 'testContactSubmitFormSuccessData', - 5 => 'testErrorPage', - 6 => 'testIndexPage', - 7 => 'testContactFormPageTest', - 8 => 'testContactFormSubmitFormEmptyDataTest', - 9 => 'testContactFormSubmitFormEmailWrongDataTest', - 10 => 'testContactFormSubmitFormSuccessDataTest', - 11 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 18 => - array ( - 0 => 'testAboutPage', - 1 => 'testContactPage', - 2 => 'testContactSubmitFormEmptyData', - 3 => 'testContactSubmitFormEmailWrongData', - 4 => 'testContactSubmitFormSuccessData', - 5 => 'testErrorPage', - 6 => 'testIndexPage', - 7 => 'testContactFormPageTest', - 8 => 'testContactFormSubmitFormEmptyDataTest', - 9 => 'testContactFormSubmitFormEmailWrongDataTest', - 10 => 'testContactFormSubmitFormSuccessDataTest', - 11 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 20 => - array ( - 0 => 'testAboutPage', - 1 => 'testContactPage', - 2 => 'testContactSubmitFormEmptyData', - 3 => 'testContactSubmitFormEmailWrongData', - 4 => 'testContactSubmitFormSuccessData', - 5 => 'testErrorPage', - 6 => 'testIndexPage', - 7 => 'testContactFormPageTest', - 8 => 'testContactFormSubmitFormEmptyDataTest', - 9 => 'testContactFormSubmitFormEmailWrongDataTest', - 10 => 'testContactFormSubmitFormSuccessDataTest', - 11 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 21 => - array ( - 0 => 'testAboutPage', - 1 => 'testContactPage', - 2 => 'testContactSubmitFormEmptyData', - 3 => 'testContactSubmitFormEmailWrongData', - 4 => 'testContactSubmitFormSuccessData', - 5 => 'testErrorPage', - 6 => 'testIndexPage', - 7 => 'testContactFormPageTest', - 8 => 'testContactFormSubmitFormEmptyDataTest', - 9 => 'testContactFormSubmitFormEmailWrongDataTest', - 10 => 'testContactFormSubmitFormSuccessDataTest', - 11 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 23 => - array ( - 0 => 'testAboutPage', - 1 => 'testContactPage', - 2 => 'testContactSubmitFormEmptyData', - 3 => 'testContactSubmitFormEmailWrongData', - 4 => 'testContactSubmitFormSuccessData', - 5 => 'testErrorPage', - 6 => 'testIndexPage', - 7 => 'testContactFormPageTest', - 8 => 'testContactFormSubmitFormEmptyDataTest', - 9 => 'testContactFormSubmitFormEmailWrongDataTest', - 10 => 'testContactFormSubmitFormSuccessDataTest', - 11 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 24 => - array ( - 0 => 'testAboutPage', - 1 => 'testContactPage', - 2 => 'testContactSubmitFormEmptyData', - 3 => 'testContactSubmitFormEmailWrongData', - 4 => 'testContactSubmitFormSuccessData', - 5 => 'testErrorPage', - 6 => 'testIndexPage', - 7 => 'testContactFormPageTest', - 8 => 'testContactFormSubmitFormEmptyDataTest', - 9 => 'testContactFormSubmitFormEmailWrongDataTest', - 10 => 'testContactFormSubmitFormSuccessDataTest', - 11 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 25 => - array ( - 0 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 26 => - array ( - 0 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 27 => - array ( - 0 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 53 => - array ( - 0 => 'testAboutPage', - 1 => 'testContactPage', - 2 => 'testContactSubmitFormEmptyData', - 3 => 'testContactSubmitFormEmailWrongData', - 4 => 'testContactSubmitFormSuccessData', - 5 => 'testErrorPage', - 6 => 'testIndexPage', - 7 => 'testContactFormPageTest', - 8 => 'testContactFormSubmitFormEmptyDataTest', - 9 => 'testContactFormSubmitFormEmailWrongDataTest', - 10 => 'testContactFormSubmitFormSuccessDataTest', - 11 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 54 => - array ( - 0 => 'testAboutPage', - 1 => 'testContactPage', - 2 => 'testContactSubmitFormEmptyData', - 3 => 'testContactSubmitFormEmailWrongData', - 4 => 'testContactSubmitFormSuccessData', - 5 => 'testErrorPage', - 6 => 'testIndexPage', - 7 => 'testContactFormPageTest', - 8 => 'testContactFormSubmitFormEmptyDataTest', - 9 => 'testContactFormSubmitFormEmailWrongDataTest', - 10 => 'testContactFormSubmitFormSuccessDataTest', - 11 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 60 => - array ( - 0 => 'testAboutPage', - 1 => 'testContactPage', - 2 => 'testContactSubmitFormEmptyData', - 3 => 'testContactSubmitFormEmailWrongData', - 4 => 'testContactSubmitFormSuccessData', - 5 => 'testErrorPage', - 6 => 'testIndexPage', - 7 => 'testContactFormPageTest', - 8 => 'testContactFormSubmitFormEmptyDataTest', - 9 => 'testContactFormSubmitFormEmailWrongDataTest', - 10 => 'testContactFormSubmitFormSuccessDataTest', - 11 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 61 => - array ( - 0 => 'testAboutPage', - 1 => 'testContactPage', - 2 => 'testContactSubmitFormEmptyData', - 3 => 'testContactSubmitFormEmailWrongData', - 4 => 'testContactSubmitFormSuccessData', - 5 => 'testErrorPage', - 6 => 'testIndexPage', - 7 => 'testContactFormPageTest', - 8 => 'testContactFormSubmitFormEmptyDataTest', - 9 => 'testContactFormSubmitFormEmailWrongDataTest', - 10 => 'testContactFormSubmitFormSuccessDataTest', - 11 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 62 => - array ( - 0 => 'testAboutPage', - 1 => 'testContactPage', - 2 => 'testContactSubmitFormEmptyData', - 3 => 'testContactSubmitFormEmailWrongData', - 4 => 'testContactSubmitFormSuccessData', - 5 => 'testErrorPage', - 6 => 'testIndexPage', - 7 => 'testContactFormPageTest', - 8 => 'testContactFormSubmitFormEmptyDataTest', - 9 => 'testContactFormSubmitFormEmailWrongDataTest', - 10 => 'testContactFormSubmitFormSuccessDataTest', - 11 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 69 => - array ( - 0 => 'testAboutPage', - 1 => 'testContactPage', - 2 => 'testContactSubmitFormEmptyData', - 3 => 'testContactSubmitFormEmailWrongData', - 4 => 'testContactSubmitFormSuccessData', - 5 => 'testErrorPage', - 6 => 'testIndexPage', - 7 => 'testContactFormPageTest', - 8 => 'testContactFormSubmitFormEmptyDataTest', - 9 => 'testContactFormSubmitFormEmailWrongDataTest', - 10 => 'testContactFormSubmitFormSuccessDataTest', - 11 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 70 => - array ( - 0 => 'testAboutPage', - 1 => 'testContactPage', - 2 => 'testContactSubmitFormEmptyData', - 3 => 'testContactSubmitFormEmailWrongData', - 4 => 'testContactSubmitFormSuccessData', - 5 => 'testErrorPage', - 6 => 'testIndexPage', - 7 => 'testContactFormPageTest', - 8 => 'testContactFormSubmitFormEmptyDataTest', - 9 => 'testContactFormSubmitFormEmailWrongDataTest', - 10 => 'testContactFormSubmitFormSuccessDataTest', - 11 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 73 => - array ( - 0 => 'testAboutPage', - 1 => 'testContactPage', - 2 => 'testContactSubmitFormEmptyData', - 3 => 'testContactSubmitFormEmailWrongData', - 4 => 'testContactSubmitFormSuccessData', - 5 => 'testErrorPage', - 6 => 'testIndexPage', - 7 => 'testContactFormPageTest', - 8 => 'testContactFormSubmitFormEmptyDataTest', - 9 => 'testContactFormSubmitFormEmailWrongDataTest', - 10 => 'testContactFormSubmitFormSuccessDataTest', - 11 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 79 => - array ( - 0 => 'testAboutPage', - 1 => 'testIndexPage', - 2 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 80 => - array ( - 0 => 'testAboutPage', - 1 => 'testContactPage', - 2 => 'testContactSubmitFormEmptyData', - 3 => 'testContactSubmitFormEmailWrongData', - 4 => 'testContactSubmitFormSuccessData', - 5 => 'testErrorPage', - 6 => 'testIndexPage', - 7 => 'testContactFormPageTest', - 8 => 'testContactFormSubmitFormEmptyDataTest', - 9 => 'testContactFormSubmitFormEmailWrongDataTest', - 10 => 'testContactFormSubmitFormSuccessDataTest', - 11 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 84 => - array ( - 0 => 'testAboutPage', - 1 => 'testContactPage', - 2 => 'testContactSubmitFormEmptyData', - 3 => 'testContactSubmitFormEmailWrongData', - 4 => 'testContactSubmitFormSuccessData', - 5 => 'testErrorPage', - 6 => 'testIndexPage', - 7 => 'testContactFormPageTest', - 8 => 'testContactFormSubmitFormEmptyDataTest', - 9 => 'testContactFormSubmitFormEmailWrongDataTest', - 10 => 'testContactFormSubmitFormSuccessDataTest', - 11 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 85 => - array ( - 0 => 'testAboutPage', - 1 => 'testContactPage', - 2 => 'testContactSubmitFormEmptyData', - 3 => 'testContactSubmitFormEmailWrongData', - 4 => 'testContactSubmitFormSuccessData', - 5 => 'testErrorPage', - 6 => 'testIndexPage', - 7 => 'testContactFormPageTest', - 8 => 'testContactFormSubmitFormEmptyDataTest', - 9 => 'testContactFormSubmitFormEmailWrongDataTest', - 10 => 'testContactFormSubmitFormSuccessDataTest', - 11 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 102 => - array ( - 0 => 'testAboutPage', - 1 => 'testContactPage', - 2 => 'testContactSubmitFormEmptyData', - 3 => 'testContactSubmitFormEmailWrongData', - 4 => 'testContactSubmitFormSuccessData', - 5 => 'testErrorPage', - 6 => 'testIndexPage', - 7 => 'testContactFormPageTest', - 8 => 'testContactFormSubmitFormEmptyDataTest', - 9 => 'testContactFormSubmitFormEmailWrongDataTest', - 10 => 'testContactFormSubmitFormSuccessDataTest', - 11 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 103 => - array ( - 0 => 'testAboutPage', - 1 => 'testContactPage', - 2 => 'testContactSubmitFormEmptyData', - 3 => 'testContactSubmitFormEmailWrongData', - 4 => 'testContactSubmitFormSuccessData', - 5 => 'testErrorPage', - 6 => 'testIndexPage', - 7 => 'testContactFormPageTest', - 8 => 'testContactFormSubmitFormEmptyDataTest', - 9 => 'testContactFormSubmitFormEmailWrongDataTest', - 10 => 'testContactFormSubmitFormSuccessDataTest', - 11 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 104 => - array ( - 0 => 'testAboutPage', - 1 => 'testContactPage', - 2 => 'testContactSubmitFormEmptyData', - 3 => 'testContactSubmitFormEmailWrongData', - 4 => 'testContactSubmitFormSuccessData', - 5 => 'testErrorPage', - 6 => 'testIndexPage', - 7 => 'testContactFormPageTest', - 8 => 'testContactFormSubmitFormEmptyDataTest', - 9 => 'testContactFormSubmitFormEmailWrongDataTest', - 10 => 'testContactFormSubmitFormSuccessDataTest', - 11 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 105 => - array ( - 0 => 'testAboutPage', - 1 => 'testContactPage', - 2 => 'testContactSubmitFormEmptyData', - 3 => 'testContactSubmitFormEmailWrongData', - 4 => 'testContactSubmitFormSuccessData', - 5 => 'testErrorPage', - 6 => 'testIndexPage', - 7 => 'testContactFormPageTest', - 8 => 'testContactFormSubmitFormEmptyDataTest', - 9 => 'testContactFormSubmitFormEmailWrongDataTest', - 10 => 'testContactFormSubmitFormSuccessDataTest', - 11 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 107 => - array ( - 0 => 'testAboutPage', - 1 => 'testContactPage', - 2 => 'testContactSubmitFormEmptyData', - 3 => 'testContactSubmitFormEmailWrongData', - 4 => 'testContactSubmitFormSuccessData', - 5 => 'testErrorPage', - 6 => 'testIndexPage', - 7 => 'testContactFormPageTest', - 8 => 'testContactFormSubmitFormEmptyDataTest', - 9 => 'testContactFormSubmitFormEmailWrongDataTest', - 10 => 'testContactFormSubmitFormSuccessDataTest', - 11 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 108 => - array ( - 0 => 'testAboutPage', - 1 => 'testContactPage', - 2 => 'testContactSubmitFormEmptyData', - 3 => 'testContactSubmitFormEmailWrongData', - 4 => 'testContactSubmitFormSuccessData', - 5 => 'testErrorPage', - 6 => 'testIndexPage', - 7 => 'testContactFormPageTest', - 8 => 'testContactFormSubmitFormEmptyDataTest', - 9 => 'testContactFormSubmitFormEmailWrongDataTest', - 10 => 'testContactFormSubmitFormSuccessDataTest', - 11 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - ), - 'D:\\git-local\\terabytesoftw\\app-basic\\src\\views\\site\\about.php' => - array ( - 10 => - array ( - 0 => 'testAboutPage', - ), - 17 => - array ( - 0 => 'testAboutPage', - ), - ), - 'D:\\git-local\\terabytesoftw\\app-basic\\src\\assets\\AppAsset.php' => - array ( - ), - 'D:\\git-local\\terabytesoftw\\app-basic\\src\\controllers\\SiteController.php' => - array ( - 35 => - array ( - 0 => 'testAboutPage', - 1 => 'testContactPage', - 2 => 'testContactSubmitFormEmptyData', - 3 => 'testContactSubmitFormEmailWrongData', - 4 => 'testContactSubmitFormSuccessData', - 5 => 'testErrorPage', - 6 => 'testIndexPage', - 7 => 'testContactFormPageTest', - 8 => 'testContactFormSubmitFormEmptyDataTest', - 9 => 'testContactFormSubmitFormEmailWrongDataTest', - 10 => 'testContactFormSubmitFormSuccessDataTest', - 11 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 41 => NULL, - 51 => - array ( - 0 => 'testAboutPage', - 1 => 'testContactPage', - 2 => 'testContactSubmitFormEmptyData', - 3 => 'testContactSubmitFormEmailWrongData', - 4 => 'testContactSubmitFormSuccessData', - 5 => 'testErrorPage', - 6 => 'testIndexPage', - 7 => 'testContactFormPageTest', - 8 => 'testContactFormSubmitFormEmptyDataTest', - 9 => 'testContactFormSubmitFormEmailWrongDataTest', - 10 => 'testContactFormSubmitFormSuccessDataTest', - 11 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 55 => - array ( - 0 => 'testAboutPage', - 1 => 'testContactPage', - 2 => 'testContactSubmitFormEmptyData', - 3 => 'testContactSubmitFormEmailWrongData', - 4 => 'testContactSubmitFormSuccessData', - 5 => 'testErrorPage', - 6 => 'testIndexPage', - 7 => 'testContactFormPageTest', - 8 => 'testContactFormSubmitFormEmptyDataTest', - 9 => 'testContactFormSubmitFormEmailWrongDataTest', - 10 => 'testContactFormSubmitFormSuccessDataTest', - 11 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 58 => NULL, - 65 => - array ( - 0 => 'testAboutPage', - 1 => 'testContactPage', - 2 => 'testContactSubmitFormEmptyData', - 3 => 'testContactSubmitFormEmailWrongData', - 4 => 'testContactSubmitFormSuccessData', - 5 => 'testErrorPage', - 6 => 'testIndexPage', - 7 => 'testContactFormPageTest', - 8 => 'testContactFormSubmitFormEmptyDataTest', - 9 => 'testContactFormSubmitFormEmailWrongDataTest', - 10 => 'testContactFormSubmitFormSuccessDataTest', - 11 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - 12 => 'terabytesoft\\app\\basic\\tests\\ContactFormTest::testContactFormRules', - 13 => 'terabytesoft\\app\\basic\\tests\\ContactFormTest::testContactFormSentEmail', - ), - 66 => - array ( - 0 => 'testAboutPage', - 1 => 'testContactPage', - 2 => 'testContactSubmitFormEmptyData', - 3 => 'testContactSubmitFormEmailWrongData', - 4 => 'testContactSubmitFormSuccessData', - 5 => 'testErrorPage', - 6 => 'testIndexPage', - 7 => 'testContactFormPageTest', - 8 => 'testContactFormSubmitFormEmptyDataTest', - 9 => 'testContactFormSubmitFormEmailWrongDataTest', - 10 => 'testContactFormSubmitFormSuccessDataTest', - 11 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - 12 => 'terabytesoft\\app\\basic\\tests\\ContactFormTest::testContactFormRules', - 13 => 'terabytesoft\\app\\basic\\tests\\ContactFormTest::testContactFormSentEmail', - ), - 67 => - array ( - 0 => 'testAboutPage', - 1 => 'testContactPage', - 2 => 'testContactSubmitFormEmptyData', - 3 => 'testContactSubmitFormEmailWrongData', - 4 => 'testContactSubmitFormSuccessData', - 5 => 'testErrorPage', - 6 => 'testIndexPage', - 7 => 'testContactFormPageTest', - 8 => 'testContactFormSubmitFormEmptyDataTest', - 9 => 'testContactFormSubmitFormEmailWrongDataTest', - 10 => 'testContactFormSubmitFormSuccessDataTest', - 11 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - 12 => 'terabytesoft\\app\\basic\\tests\\ContactFormTest::testContactFormRules', - 13 => 'terabytesoft\\app\\basic\\tests\\ContactFormTest::testContactFormSentEmail', - ), - 74 => - array ( - 0 => 'testIndexPage', - 1 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 75 => NULL, - 82 => - array ( - 0 => 'testAboutPage', - ), - 83 => NULL, - 91 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 93 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 94 => - array ( - 0 => 'testContactSubmitFormSuccessData', - 1 => 'testContactFormSubmitFormSuccessDataTest', - ), - 96 => - array ( - 0 => 'testContactSubmitFormSuccessData', - 1 => 'testContactFormSubmitFormSuccessDataTest', - ), - 98 => - array ( - 0 => 'testContactSubmitFormSuccessData', - 1 => 'testContactFormSubmitFormSuccessDataTest', - ), - 101 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 102 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 104 => NULL, - 112 => - array ( - 0 => 'testContactSubmitFormSuccessData', - 1 => 'testContactFormSubmitFormSuccessDataTest', - 2 => 'terabytesoft\\app\\basic\\tests\\ContactFormTest::testContactFormSentEmail', - ), - 113 => - array ( - 0 => 'testContactSubmitFormSuccessData', - 1 => 'testContactFormSubmitFormSuccessDataTest', - 2 => 'terabytesoft\\app\\basic\\tests\\ContactFormTest::testContactFormSentEmail', - ), - 114 => - array ( - 0 => 'testContactSubmitFormSuccessData', - 1 => 'testContactFormSubmitFormSuccessDataTest', - 2 => 'terabytesoft\\app\\basic\\tests\\ContactFormTest::testContactFormSentEmail', - ), - 117 => - array ( - 0 => 'testContactSubmitFormSuccessData', - 1 => 'testContactFormSubmitFormSuccessDataTest', - 2 => 'terabytesoft\\app\\basic\\tests\\ContactFormTest::testContactFormSentEmail', - ), - 119 => - array ( - 0 => 'testContactSubmitFormSuccessData', - 1 => 'testContactFormSubmitFormSuccessDataTest', - 2 => 'terabytesoft\\app\\basic\\tests\\ContactFormTest::testContactFormSentEmail', - ), - 122 => - array ( - 0 => 'testContactSubmitFormSuccessData', - 1 => 'testContactFormSubmitFormSuccessDataTest', - 2 => 'terabytesoft\\app\\basic\\tests\\ContactFormTest::testContactFormSentEmail', - ), - ), - 'D:\\git-local\\terabytesoftw\\app-basic\\src\\views\\site\\contact.php' => - array ( - 13 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 19 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 20 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 21 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 22 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 32 => - array ( - 0 => 'testContactSubmitFormSuccessData', - 1 => 'testContactFormSubmitFormSuccessDataTest', - ), - 33 => - array ( - 0 => 'testContactSubmitFormSuccessData', - 1 => 'testContactFormSubmitFormSuccessDataTest', - ), - 36 => - array ( - 0 => 'testContactSubmitFormSuccessData', - 1 => 'testContactFormSubmitFormSuccessDataTest', - ), - 39 => - array ( - 0 => 'testContactSubmitFormSuccessData', - 1 => 'testContactFormSubmitFormSuccessDataTest', - ), - 40 => - array ( - 0 => 'testContactSubmitFormSuccessData', - 1 => 'testContactFormSubmitFormSuccessDataTest', - ), - 42 => - array ( - 0 => 'testContactSubmitFormSuccessData', - 1 => 'testContactFormSubmitFormSuccessDataTest', - ), - 47 => - array ( - 0 => 'testContactSubmitFormSuccessData', - 1 => 'testContactFormSubmitFormSuccessDataTest', - ), - 48 => - array ( - 0 => 'testContactSubmitFormSuccessData', - 1 => 'testContactFormSubmitFormSuccessDataTest', - ), - 49 => - array ( - 0 => 'testContactSubmitFormSuccessData', - 1 => 'testContactFormSubmitFormSuccessDataTest', - ), - 50 => - array ( - 0 => 'testContactSubmitFormSuccessData', - 1 => 'testContactFormSubmitFormSuccessDataTest', - ), - 51 => - array ( - 0 => 'testContactSubmitFormSuccessData', - 1 => 'testContactFormSubmitFormSuccessDataTest', - ), - 57 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 58 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 63 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 82 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 83 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 84 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 85 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 86 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 87 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 89 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 91 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 94 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 95 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 96 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 97 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 98 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 100 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 102 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 105 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 106 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 107 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 108 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 109 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 111 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 113 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 116 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 117 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 118 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 119 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 120 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 122 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 123 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 125 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 128 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 129 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 130 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 131 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 133 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 134 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 136 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 137 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 139 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 140 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 142 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 143 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 147 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 151 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - 152 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - ), - ), - 'D:\\git-local\\terabytesoftw\\app-basic\\src\\forms\\ContactForm.php' => - array ( - 27 => - array ( - 0 => 'testContactPage', - 1 => 'testContactSubmitFormEmptyData', - 2 => 'testContactSubmitFormEmailWrongData', - 3 => 'testContactSubmitFormSuccessData', - 4 => 'testContactFormPageTest', - 5 => 'testContactFormSubmitFormEmptyDataTest', - 6 => 'testContactFormSubmitFormEmailWrongDataTest', - 7 => 'testContactFormSubmitFormSuccessDataTest', - 8 => 'terabytesoft\\app\\basic\\tests\\ContactFormTest::testContactFormRules', - 9 => 'terabytesoft\\app\\basic\\tests\\ContactFormTest::testContactFormSentEmail', - ), - 33 => NULL, - ), - 'D:\\git-local\\terabytesoftw\\app-basic\\src\\views\\site\\error.php' => - array ( - 10 => - array ( - 0 => 'testErrorPage', - ), - ), - 'D:\\git-local\\terabytesoftw\\app-basic\\src\\views\\site\\index.php' => - array ( - 11 => - array ( - 0 => 'testIndexPage', - 1 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 17 => - array ( - 0 => 'testIndexPage', - 1 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - 20 => - array ( - 0 => 'testIndexPage', - 1 => 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser', - ), - ), -)); -$coverage->setTests(array ( - 'testAboutPage' => - array ( - 'size' => 'unknown', - 'status' => -1, - ), - 'testContactPage' => - array ( - 'size' => 'unknown', - 'status' => -1, - ), - 'testContactSubmitFormEmptyData' => - array ( - 'size' => 'unknown', - 'status' => -1, - ), - 'testContactSubmitFormEmailWrongData' => - array ( - 'size' => 'unknown', - 'status' => -1, - ), - 'testContactSubmitFormSuccessData' => - array ( - 'size' => 'unknown', - 'status' => -1, - ), - 'testErrorPage' => - array ( - 'size' => 'unknown', - 'status' => -1, - ), - 'testIndexPage' => - array ( - 'size' => 'unknown', - 'status' => -1, - ), - 'testContactFormPageTest' => - array ( - 'size' => 'unknown', - 'status' => -1, - ), - 'testContactFormSubmitFormEmptyDataTest' => - array ( - 'size' => 'unknown', - 'status' => -1, - ), - 'testContactFormSubmitFormEmailWrongDataTest' => - array ( - 'size' => 'unknown', - 'status' => -1, - ), - 'testContactFormSubmitFormSuccessDataTest' => - array ( - 'size' => 'unknown', - 'status' => -1, - ), - 'terabytesoft\\app\\basic\\tests\\AppAssetTest::testAppAssetSimpleDependency' => - array ( - 'size' => 'unknown', - 'status' => 0, - ), - 'terabytesoft\\app\\basic\\tests\\AppUserTest::testMenuAppUser' => - array ( - 'size' => 'unknown', - 'status' => 0, - ), - 'terabytesoft\\app\\basic\\tests\\ContactFormTest::testContactFormRules' => - array ( - 'size' => 'unknown', - 'status' => 0, - ), - 'terabytesoft\\app\\basic\\tests\\ContactFormTest::testContactFormSentEmail' => - array ( - 'size' => 'unknown', - 'status' => 0, - ), -)); - -$filter = $coverage->filter(); -$filter->setWhitelistedFiles(array ( - 'D:\\git-local\\terabytesoftw\\app-basic\\src\\assets\\AppAsset.php' => true, - 'D:\\git-local\\terabytesoftw\\app-basic\\src\\controllers\\SiteController.php' => true, - 'D:\\git-local\\terabytesoftw\\app-basic\\src\\forms\\ContactForm.php' => true, - 'D:\\git-local\\terabytesoftw\\app-basic\\src\\views\\layouts\\main.php' => true, - 'D:\\git-local\\terabytesoftw\\app-basic\\src\\views\\site\\about.php' => true, - 'D:\\git-local\\terabytesoftw\\app-basic\\src\\views\\site\\contact.php' => true, - 'D:\\git-local\\terabytesoftw\\app-basic\\src\\views\\site\\error.php' => true, - 'D:\\git-local\\terabytesoftw\\app-basic\\src\\views\\site\\index.php' => true, -)); - -return $coverage; \ No newline at end of file diff --git a/tests/_output/coverage.xml b/tests/_output/coverage.xml deleted file mode 100644 index f631fbf..0000000 --- a/tests/_output/coverage.xml +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/_support/Helper/Acceptance.php b/tests/_support/Helper/Acceptance.php deleted file mode 100644 index f6953ed..0000000 --- a/tests/_support/Helper/Acceptance.php +++ /dev/null @@ -1,10 +0,0 @@ -wantTo('about page works.'); - $I->amOnPage('/site/about'); - $I->wait(5); // secs - } - - /** - * testAboutPage - */ - public function testAboutPage(AcceptanceTester $I): void - { - $I->expectTo('see page about.'); - $I->see(\Yii::t('app.basic', 'About')); - } -} diff --git a/tests/acceptance/ContactCest.php b/tests/acceptance/ContactCest.php deleted file mode 100644 index 0874da9..0000000 --- a/tests/acceptance/ContactCest.php +++ /dev/null @@ -1,85 +0,0 @@ -wantTo('contact page works.'); - $I->amOnPage('/site/contact'); - $I->wait(5); // secs - } - - /** - * testContactPage - */ - public function testContactPage(AcceptanceTester $I): void - { - $I->expectTo('see page contact.'); - $I->see(\Yii::t('app.basic', 'Contact')); - } - - /** - * testcontactSubmitFormEmptyData - */ - public function testContactSubmitFormEmptyData(AcceptanceTester $I): void - { - $I->amGoingTo('contact submit form with empty data.'); - $I->click('contact-button'); - $I->wait(5); // secs - - $I->expectTo('see validations errors.'); - $I->see(\Yii::t('app.basic', 'Name cannot be blank.')); - $I->see(\Yii::t('app.basic', 'Email cannot be blank.')); - $I->see(\Yii::t('app.basic', 'Subject cannot be blank.')); - $I->see(\Yii::t('app.basic', 'Body cannot be blank.')); - } - - /** - * testContactSubmitFormEmailWrongData - */ - public function testContactSubmitFormEmailWrongData(AcceptanceTester $I): void - { - $I->amGoingTo('contact submit form with email wrong.'); - $I->fillField('#contactform-name', 'tester'); - $I->fillField('#contactform-email', 'tester@example'); - $I->fillField('#contactform-subject', 'test subject'); - $I->fillField('#contactform-body', 'test content'); - $I->fillField('#contactform-verifycode', 'testme'); - $I->click('contact-button'); - $I->wait(5); // secs - - $I->expectTo('Email is not a valid email address.'); - $I->see(\Yii::t('app.basic', 'Email is not a valid email address.')); - } - - /** - * testContactSubmitFormSuccessData - */ - public function testContactSubmitFormSuccessData(AcceptanceTester $I):void - { - $I->amGoingTo('contact submit form with success data.'); - $I->fillField('#contactform-name', 'tester'); - $I->fillField('#contactform-email', 'tester@example.com'); - $I->fillField('#contactform-subject', 'test subject'); - $I->fillField('#contactform-body', 'test content'); - $I->fillField('#contactform-verifycode', 'testme'); - $I->click('contact-button'); - $I->wait(5); // secs - - $I->expectTo('success.'); - $I->dontSeeElement('#contact-form'); - $I->see(\Yii::t('app.basic', 'Thank you for contacting us. We will respond to you as soon as possible.')); - } -} diff --git a/tests/acceptance/ErrorCest.php b/tests/acceptance/ErrorCest.php deleted file mode 100644 index 96fb603..0000000 --- a/tests/acceptance/ErrorCest.php +++ /dev/null @@ -1,32 +0,0 @@ -wantTo('error page works.'); - $I->amOnPage('/site/index1'); - $I->wait(5); // secs - } - - /** - * testErrorPage - */ - public function testErrorPage(AcceptanceTester $I): void - { - $I->expectTo('see page error.'); - $I->see(\Yii::t('app.basic', 'Page not found.')); - } -} diff --git a/tests/acceptance/IndexCest.php b/tests/acceptance/IndexCest.php deleted file mode 100644 index ccaf838..0000000 --- a/tests/acceptance/IndexCest.php +++ /dev/null @@ -1,32 +0,0 @@ -wantTo('index page works.'); - $I->amOnPage('/site/index'); - $I->wait(5); // secs - } - - /** - * testIndexPage - */ - public function testIndexPage(AcceptanceTester $I): void - { - $I->expectTo('see page index.'); - $I->see(\Yii::t('app.basic', 'Web Application')); - } -} diff --git a/tests/acceptance/_bootstrap.php b/tests/acceptance/_bootstrap.php deleted file mode 100644 index e69de29..0000000 diff --git a/tests/functional/ContactFormCest.php b/tests/functional/ContactFormCest.php deleted file mode 100644 index 30f4959..0000000 --- a/tests/functional/ContactFormCest.php +++ /dev/null @@ -1,92 +0,0 @@ -wantTo('contact page works.'); - $I->amOnPage('/site/contact'); - } - - /** - * testContactFormPageTest - * - * @param FunctionalTester $I - */ - public function testContactFormPageTest(FunctionalTester $I): void - { - $I->expectTo('see page contact.'); - $I->see(\Yii::t('app.basic', 'Contact'), 'h1'); - } - - /** - * testContactFormSubmitFormEmptyDataTest - */ - public function testContactFormSubmitFormEmptyDataTest(FunctionalTester $I): void - { - $I->amGoingTo('contact form submit form with empty data.'); - $I->submitForm('#contact-form', []); - - $I->expectTo('see validations errors.'); - $I->see(\Yii::t('app.basic', 'Name cannot be blank.'), '.invalid-feedback'); - $I->see(\Yii::t('app.basic', 'Email cannot be blank.'), '.invalid-feedback'); - $I->see(\Yii::t('app.basic', 'Subject cannot be blank.'), '.invalid-feedback'); - $I->see(\Yii::t('app.basic', 'Body cannot be blank.'), '.invalid-feedback'); - } - - /** - * testContactFormSubmitFormEmailWrongDataTest - */ - public function testContactFormSubmitFormEmailWrongDataTest(FunctionalTester $I): void - { - $I->amGoingTo('contact form submit form with email wrong.'); - $I->submitForm('#contact-form', [ - 'ContactForm[name]' => 'tester', - 'ContactForm[email]' => 'tester.email', - 'ContactForm[subject]' => 'test subject', - 'ContactForm[body]' => 'test content', - 'ContactForm[verifyCode]' => 'testme', - ]); - - $I->expectTo('Email is not a valid email address'); - $I->dontSee('Name cannot be blank', '.invalid-feedback'); - $I->see(\Yii::t('app.basic', 'Email is not a valid email address.'), '.invalid-feedback'); - $I->dontSee(\Yii::t('app.basic', 'Subject cannot be blank'), '.invalid-feedback'); - $I->dontSee(\Yii::t('app.basic', 'Body cannot be blank'), '.invalid-feedback'); - $I->dontSee(\Yii::t('app.basic', 'The verification code is incorrect'), '.invalid-feedback'); - } - - /** - * testContactFormSubmitFormSuccessDataTest - */ - public function testContactFormSubmitFormSuccessDataTest(FunctionalTester $I): void - { - $I->amGoingTo('contact form submit form with success data.'); - $I->submitForm('#contact-form', [ - 'ContactForm[name]' => 'tester', - 'ContactForm[email]' => 'tester@example.com', - 'ContactForm[subject]' => 'test subject', - 'ContactForm[body]' => 'test content', - 'ContactForm[verifyCode]' => 'testme', - ]); - - $I->expectTo('success.'); - $I->dontSeeElement('#contact-form'); - $I->see(\Yii::t( - 'app.basic', - 'Thank you for contacting us. We will respond to you as soon as possible.' - ), '.alert'); - } -} diff --git a/tests/functional/_bootstrap.php b/tests/functional/_bootstrap.php deleted file mode 100644 index e69de29..0000000 diff --git a/tests/public/index.php b/tests/public/index.php deleted file mode 100644 index e2b57fd..0000000 --- a/tests/public/index.php +++ /dev/null @@ -1,18 +0,0 @@ -run(); -})(); diff --git a/tests/unit/AppAssetTest.php b/tests/unit/AppAssetTest.php deleted file mode 100644 index 2fb0f90..0000000 --- a/tests/unit/AppAssetTest.php +++ /dev/null @@ -1,126 +0,0 @@ -view = new View(); - } - - /** - *_after - */ - protected function _after(): void - { - unset($this->bundle); - unset($this->tester); - unset($this->view); - } - - /** - * testAppAssetSimpleDependency - */ - public function testAppAssetSimpleDependency(): void - { - \PHPUnit_Framework_Assert::assertEmpty($this->view->assetBundles); - - AppAsset::register($this->view); - - \PHPUnit_Framework_Assert::assertCount(4, $this->view->assetBundles); - \PHPUnit_Framework_Assert::assertArrayHasKey(AppAsset::class, $this->view->assetBundles); - \PHPUnit_Framework_Assert::assertArrayHasKey(YiiAsset::class, $this->view->assetBundles); - \PHPUnit_Framework_Assert::assertArrayHasKey(JqueryAsset::class, $this->view->assetBundles); - \PHPUnit_Framework_Assert::assertArrayHasKey(BootstrapAsset::class, $this->view->assetBundles); - \PHPUnit_Framework_Assert::assertInstanceOf(AssetBundle::class, $this->view->assetBundles[AppAsset::class]); - \PHPUnit_Framework_Assert::assertInstanceOf(AssetBundle::class, $this->view->assetBundles[YiiAsset::class]); - \PHPUnit_Framework_Assert::assertInstanceOf(AssetBundle::class, $this->view->assetBundles[JqueryAsset::class]); - \PHPUnit_Framework_Assert::assertInstanceOf( - AssetBundle::class, - $this->view->assetBundles[BootstrapAsset::class] - ); - } - - /** - * testAppAssetSourcesPublish - */ - public function testAppAssetSourcesPublish(): void - { - $this->bundle = AppAsset::register($this->view); - - \PHPUnit_Framework_Assert::assertTrue(is_dir($this->bundle->basePath)); - - $this->sourcesPublishVerifyFiles('css', $this->bundle); - } - - /** - * testAppAssetRegister - */ - public function testAppAssetRegister(): void - { - \PHPUnit_Framework_Assert::assertEmpty($this->view->assetBundles); - - AppAsset::register($this->view); - - \PHPUnit_Framework_Assert::assertCount(4, $this->view->assetBundles); - \PHPUnit_Framework_Assert::assertArrayHasKey(AppAsset::class, $this->view->assetBundles); - \PHPUnit_Framework_Assert::assertArrayHasKey(YiiAsset::class, $this->view->assetBundles); - \PHPUnit_Framework_Assert::assertArrayHasKey(JqueryAsset::class, $this->view->assetBundles); - \PHPUnit_Framework_Assert::assertArrayHasKey(BootstrapAsset::class, $this->view->assetBundles); - - $result = $this->view->renderFile(codecept_data_dir() . '/views/main.php'); - - \PHPUnit_Framework_Assert::assertRegexp('/site.css/', $result); - \PHPUnit_Framework_Assert::assertRegexp('/yii.js/', $result); - \PHPUnit_Framework_Assert::assertRegexp('/jquery.js/', $result); - \PHPUnit_Framework_Assert::assertRegexp('/bootstrap.css/', $result); - } - - /** - * sourcesPublishVerifyFiles - */ - protected function sourcesPublishVerifyFiles(string $type, AssetBundle $bundle): void - { - foreach ($bundle->$type as $filename) { - $publishedFile = $bundle->basePath . DIRECTORY_SEPARATOR . $filename; - $sourceFile = $bundle->sourcePath . DIRECTORY_SEPARATOR . $filename; - - \PHPUnit_Framework_Assert::assertFileExists($publishedFile); - \PHPUnit_Framework_Assert::assertFileEquals($publishedFile, $sourceFile); - } - - \PHPUnit_Framework_Assert::assertTrue(is_dir($bundle->basePath)); - } -} diff --git a/tests/unit/AppUserTest.php b/tests/unit/AppUserTest.php deleted file mode 100644 index 27cd8ae..0000000 --- a/tests/unit/AppUserTest.php +++ /dev/null @@ -1,131 +0,0 @@ - [ - 'assetManager' => [ - 'basePath' => \Yii::$app->params['app.basic.assetmanager.base.path'], - ], - 'i18n' => [ - 'translations' => [ - 'app.basic' => [ - 'class' => \yii\i18n\PhpMessageSource::class, - ], - ], - ], - 'request' => [ - 'cookieValidationKey' => $params['app.basic.request.cookievalidationkey'], - 'enableCsrfValidation' => $params['app.basic.request.enablecsrfvalidation'], - 'scriptFile' => dirname(__DIR__, 1) . '/public/index.php', - 'scriptUrl' => '/baseUrl/index.php', - - ], - 'user' => [ - 'identityClass' => UserIdentity::className(), - ], - ], - 'params' => $params - ]; - $this->mockWebApplication($appConfig); - $this->controller = new SiteController('site', \Yii::$app, []); - $this->view = new View(); - } - - /** - * _after - */ - protected function _after(): void - { - unset($this->controller); - unset($this->tester); - unset($this->view); - $this->destroyApplication(); - } - - /** - * testMenuAppUser - */ - public function testMenuAppUser(): void - { - // run actionIndex - $viewRender = $this->controller->runAction('index'); - - // show menu is (\Yii::$app->user->isGuest) - \PHPUnit_Framework_Assert::assertStringContainsString('Sign up', $viewRender); - \PHPUnit_Framework_Assert::assertStringContainsString('Login', $viewRender); - \PHPUnit_Framework_Assert::assertStringNotContainsString('Manage Users', $viewRender); - \PHPUnit_Framework_Assert::assertStringNotContainsString('Settings Account', $viewRender); - \PHPUnit_Framework_Assert::assertStringNotContainsString('Settings Profile', $viewRender); - \PHPUnit_Framework_Assert::assertStringNotContainsString('Logout', $viewRender); - - // login user admin - \Yii::$app->user->login(UserIdentity::findIdentity('admin')); - - // run actionIndex - $viewRender = $this->controller->runAction('index'); - - // show menu is (!\Yii::$app->user->isGuest) - \PHPUnit_Framework_Assert::assertStringContainsString('Manage Users', $viewRender); - \PHPUnit_Framework_Assert::assertStringContainsString('Settings Account', $viewRender); - \PHPUnit_Framework_Assert::assertStringContainsString('Settings Profile', $viewRender); - \PHPUnit_Framework_Assert::assertStringContainsString('Logout', $viewRender); - \PHPUnit_Framework_Assert::assertStringNotContainsString('Sign up', $viewRender); - \PHPUnit_Framework_Assert::assertStringNotContainsString('Login', $viewRender); - } - - /** - * mockWebApplication - */ - protected function mockWebApplication($config = [], $appClass = \yii\web\Application::class): void - { - new $appClass(ArrayHelper::merge([ - 'id' => \Yii::$app->params['app.basic.id'], - 'basePath' => '@root/src', - 'vendorPath' => \Yii::$app->params['app.basic.vendor.path'], - 'aliases' => [ - '@bower' => \Yii::$app->params['app.basic.alias.path.bower'], - '@npm' => \Yii::$app->params['app.basic.alias.path.npm'] - ], - ], $config)); - } - - /** - * destroyApplication - */ - protected function destroyApplication(): void - { - if (\Yii::$app && \Yii::$app->has('session', true)) { - \Yii::$app->session->close(); - } - \Yii::$app = null; - } -} diff --git a/tests/unit/ContactFormTest.php b/tests/unit/ContactFormTest.php deleted file mode 100644 index a310f5b..0000000 --- a/tests/unit/ContactFormTest.php +++ /dev/null @@ -1,105 +0,0 @@ -controller = new SiteController('SiteController', \Yii::$app, []); - $this->model = new ContactForm(); - } - /** - * _after - */ - public function _after(): void - { - unset($this->controller); - unset($this->model); - unset($this->tester); - } - - /** - * testContactFormRules - */ - public function testContactFormRules(): void - { - // test rules form model. - $this->rules = [ - // name, email, subject and body are required - [['name', 'email', 'subject', 'body'], 'required'], - // email has to be a valid email address - ['email', 'email'], - // verifyCode needs to be entered correctly - ['verifyCode', \yii\captcha\CaptchaValidator::class], - ]; - - Assert::AssertArraySubset($this->model->rules(), $this->rules, true); - } - - /** - * testContactFormSentEmail - */ - public function testContactFormSentEmail(): void - { - /** @var ContactForm $model */ - $this->model = $this->getMockBuilder('terabytesoft\app\basic\forms\ContactForm') - ->setMethods(['validate']) - ->getMock(); - - $this->model->expects($this->once()) - ->method('validate') - ->willReturn(true); - - $this->model->attributes = [ - 'name' => 'Tester', - 'email' => 'tester@example.com', - 'subject' => 'very important letter subject', - 'body' => 'body of current message', - ]; - - \PHPUnit_Framework_Assert::assertTrue($this->model->validate()); - - $this->controller->sendContact($this->model); - - // using Yii2 module actions to check email was sent - $this->tester->seeEmailIsSent(); - - /** @var MessageInterface $emailMessage */ - $emailMessage = $this->tester->grabLastSentEmail(); - - \PHPUnit_Framework_Assert::assertInstanceOf(\yii\mail\MessageInterface::class, $emailMessage); - \PHPUnit_Framework_Assert::assertArrayHasKey('tester@example.com', $emailMessage->getTo()); - \PHPUnit_Framework_Assert::assertArrayHasKey('noreply@appbasic.com', $emailMessage->getFrom()); - \PHPUnit_Framework_Assert::assertArrayHasKey('tester@example.com', $emailMessage->getReplyTo()); - \PHPUnit_Framework_Assert::assertEquals('very important letter subject', $emailMessage->getSubject()); - \PHPUnit_Framework_Assert::assertStringContainsString('body of current message', $emailMessage); - } -} diff --git a/tests/unit/_bootstrap.php b/tests/unit/_bootstrap.php deleted file mode 100644 index e69de29..0000000 diff --git a/tests/public/.htaccess b/web/.htaccess similarity index 100% rename from tests/public/.htaccess rename to web/.htaccess diff --git a/tests/public/assets/.gitignore b/web/assets/.gitignore similarity index 100% rename from tests/public/assets/.gitignore rename to web/assets/.gitignore diff --git a/tests/public/favicon.ico b/web/favicon.ico similarity index 100% rename from tests/public/favicon.ico rename to web/favicon.ico diff --git a/web/image/yii.svg b/web/image/yii.svg new file mode 100644 index 0000000..af27210 --- /dev/null +++ b/web/image/yii.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/web/image/yiiframework.svg b/web/image/yiiframework.svg new file mode 100644 index 0000000..cd637ff --- /dev/null +++ b/web/image/yiiframework.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/web/index-test.php b/web/index-test.php new file mode 100644 index 0000000..5c009c3 --- /dev/null +++ b/web/index-test.php @@ -0,0 +1,17 @@ +run(); diff --git a/web/index.php b/web/index.php new file mode 100644 index 0000000..e54bdab --- /dev/null +++ b/web/index.php @@ -0,0 +1,25 @@ +run(); diff --git a/tests/public/robots.txt b/web/robots.txt similarity index 100% rename from tests/public/robots.txt rename to web/robots.txt diff --git a/web/runtime/.gitignore b/web/runtime/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/web/runtime/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/yii.bat b/yii.bat index d516b3a..ce14c92 100644 --- a/yii.bat +++ b/yii.bat @@ -4,9 +4,9 @@ rem ------------------------------------------------------------- rem Yii command line bootstrap script for Windows. rem rem @author Qiang Xue -rem @link http://www.yiiframework.com/ +rem @link https://www.yiiframework.com/ rem @copyright Copyright (c) 2008 Yii Software LLC -rem @license http://www.yiiframework.com/license/ +rem @license https://www.yiiframework.com/license/ rem ------------------------------------------------------------- @setlocal