From 69574d93a4b71597c4531e5c343855019599ccb5 Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Fri, 10 May 2019 12:27:31 +0200 Subject: [PATCH 01/37] build(composer.json): update codeception/codeception requirement to >=2.5 --- .travis.yml | 3 +++ Makefile | 3 ++- composer.json | 4 ++-- composer.lock | 29 ++++++++++++++++------------- 4 files changed, 23 insertions(+), 16 deletions(-) diff --git a/.travis.yml b/.travis.yml index 105ba8ceb..ca21c903c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,6 +16,9 @@ matrix: fast_finish: true allow_failures: - php: nightly + env: + CODECEPTION_VERSION="^2.5" + CODECEPTION_VERSION="^3.0" services: - docker diff --git a/Makefile b/Makefile index 1a120b19e..fe1b7f5a4 100644 --- a/Makefile +++ b/Makefile @@ -14,6 +14,7 @@ TRAVIS_WP_SUBDOMAIN_2 ?= "test2" TRAVIS_WP_SUBDOMAIN_2_TITLE ?= "Test Subdomain 2" TRAVIS_WP_VERSION ?= "latest" COMPOSE_FILE ?= docker-compose.yml +CODECEPTION_VERSION ?= "^2.5" PROJECT := $(shell basename ${CURDIR}) .PHONY: wp_dump cs_sniff cs_fix cs_fix_n_sniff ci_before_install ci_before_script ci_docker_restart ci_install ci_local_prepare ci_run ci_script @@ -95,7 +96,7 @@ ci_before_install: ci_install: # Update Composer using the host machine PHP version. - composer update -a + composer require codeception/codeception:$${CODECEPTION_VERSION} -a # Copy over the wp-cli.yml configuration file. docker cp docker/wp-cli.yml wpbrowser_wp:/var/www/html/wp-cli.yml # Copy over the wp-config.php file. diff --git a/composer.json b/composer.json index ec2c0682e..10d01d689 100644 --- a/composer.json +++ b/composer.json @@ -24,7 +24,6 @@ "wp-cli/wp-cli-bundle": ">=2.0 <3.0.0", "symfony/process": ">=2.7 <5.0", "antecedent/patchwork": "^2.0", - "codeception/codeception": "~2.5.0", "gumlet/php-image-resize": "^1.6", "vlucas/phpdotenv": "^3.0" }, @@ -33,7 +32,8 @@ "victorjonsson/markdowndocs": "dev-master", "erusev/parsedown": "^1.7", "squizlabs/php_codesniffer": "^3.4", - "lucatume/codeception-snapshot-assertions": "^0.1" + "lucatume/codeception-snapshot-assertions": "^0.1", + "codeception/codeception": ">=2.5.0" }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock index 624140ffc..910e405fd 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "633c9bec8ef047509be75002dc8fb581", + "content-hash": "0385de790c6d2b1db51eaf759896b337", "packages": [ { "name": "antecedent/patchwork", @@ -2395,16 +2395,16 @@ }, { "name": "phpunit/phpunit", - "version": "7.5.9", + "version": "7.5.10", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "134669cf0eeac3f79bc7f0c793efbc158bffc160" + "reference": "d7d9cee051d03ed98df6023aad93f7902731a780" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/134669cf0eeac3f79bc7f0c793efbc158bffc160", - "reference": "134669cf0eeac3f79bc7f0c793efbc158bffc160", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d7d9cee051d03ed98df6023aad93f7902731a780", + "reference": "d7d9cee051d03ed98df6023aad93f7902731a780", "shasum": "" }, "require": { @@ -2475,7 +2475,7 @@ "testing", "xunit" ], - "time": "2019-04-19T15:50:46+00:00" + "time": "2019-05-09T05:06:47+00:00" }, { "name": "psr/container", @@ -3550,16 +3550,16 @@ }, { "name": "symfony/contracts", - "version": "v1.0.2", + "version": "v1.1.0", "source": { "type": "git", "url": "https://github.com/symfony/contracts.git", - "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf" + "reference": "d3636025e8253c6144358ec0a62773cae588395b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/contracts/zipball/1aa7ab2429c3d594dd70689604b5cf7421254cdf", - "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf", + "url": "https://api.github.com/repos/symfony/contracts/zipball/d3636025e8253c6144358ec0a62773cae588395b", + "reference": "d3636025e8253c6144358ec0a62773cae588395b", "shasum": "" }, "require": { @@ -3567,19 +3567,22 @@ }, "require-dev": { "psr/cache": "^1.0", - "psr/container": "^1.0" + "psr/container": "^1.0", + "symfony/polyfill-intl-idn": "^1.10" }, "suggest": { "psr/cache": "When using the Cache contracts", "psr/container": "When using the Service contracts", "symfony/cache-contracts-implementation": "", + "symfony/event-dispatcher-implementation": "", + "symfony/http-client-contracts-implementation": "", "symfony/service-contracts-implementation": "", "symfony/translation-contracts-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "1.1-dev" } }, "autoload": { @@ -3614,7 +3617,7 @@ "interoperability", "standards" ], - "time": "2018-12-05T08:06:11+00:00" + "time": "2019-04-27T14:29:50+00:00" }, { "name": "symfony/css-selector", From 0b7a92a24dba569f3d485be1269aba7070c14ec8 Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Fri, 10 May 2019 12:39:36 +0200 Subject: [PATCH 02/37] build(.travis.yml): fix a YAML syntax issue in the Travis CI config file --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index ca21c903c..ab22582d6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,8 +17,8 @@ matrix: allow_failures: - php: nightly env: - CODECEPTION_VERSION="^2.5" - CODECEPTION_VERSION="^3.0" + - CODECEPTION_VERSION="^2.5" + - CODECEPTION_VERSION="^3.0" services: - docker From 0bb83313383933cea5535c77098ac5571019e08b Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Fri, 10 May 2019 13:10:16 +0200 Subject: [PATCH 03/37] build(Makefile): correctly use the CODECEPTION_VERSION var --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index fe1b7f5a4..e8c1610c0 100644 --- a/Makefile +++ b/Makefile @@ -96,7 +96,7 @@ ci_before_install: ci_install: # Update Composer using the host machine PHP version. - composer require codeception/codeception:$${CODECEPTION_VERSION} -a + composer require codeception/codeception:${CODECEPTION_VERSION} -a # Copy over the wp-cli.yml configuration file. docker cp docker/wp-cli.yml wpbrowser_wp:/var/www/html/wp-cli.yml # Copy over the wp-config.php file. From 400ee46fe63a5b8d4eec6ba906b1d26d2538b769 Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Fri, 10 May 2019 14:08:07 +0200 Subject: [PATCH 04/37] build(.travis.yml): setup build matrix --- .travis.yml | 21 +++++++++++---------- Makefile | 2 +- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/.travis.yml b/.travis.yml index ab22582d6..5b03f4318 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,20 +5,21 @@ language: php notifications: email: false -php: - - '5.6' - - '7.0' - - '7.1' - - '7.2' - - 'nightly' - matrix: fast_finish: true allow_failures: - php: nightly - env: - - CODECEPTION_VERSION="^2.5" - - CODECEPTION_VERSION="^3.0" + include: + - php: '5.6' + env: CODECEPTION_VERSION="^2.5" + - php: '7.0' + env: CODECEPTION_VERSION="^2.5" + - php: '7.1' + env: CODECEPTION_VERSION="^2.5" + - php: '7.2' + env: CODECEPTION_VERSION="^2.5" + - php: '7.2' + env: CODECEPTION_VERSION="^3.0" services: - docker diff --git a/Makefile b/Makefile index e8c1610c0..524f32f6f 100644 --- a/Makefile +++ b/Makefile @@ -96,7 +96,7 @@ ci_before_install: ci_install: # Update Composer using the host machine PHP version. - composer require codeception/codeception:${CODECEPTION_VERSION} -a + composer require codeception/codeception:"${CODECEPTION_VERSION}" # Copy over the wp-cli.yml configuration file. docker cp docker/wp-cli.yml wpbrowser_wp:/var/www/html/wp-cli.yml # Copy over the wp-config.php file. From b519ac9ad5d3cb8bbe4a219a40e3ea14d3dfb857 Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Fri, 10 May 2019 14:09:47 +0200 Subject: [PATCH 05/37] build(.travis.yml): remove not used PHP entry --- .travis.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5b03f4318..2504854f8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,8 +7,6 @@ notifications: matrix: fast_finish: true - allow_failures: - - php: nightly include: - php: '5.6' env: CODECEPTION_VERSION="^2.5" From 12f59dbfe21b367e80c81e7ec4c323e84d7c36db Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Fri, 10 May 2019 14:33:48 +0200 Subject: [PATCH 06/37] build(dependencies): remove composer.lock file and fix codeception version --- .gitignore | 1 + composer.json | 6 +- composer.lock | 6625 ------------------------------------------------- 3 files changed, 4 insertions(+), 6628 deletions(-) delete mode 100644 composer.lock diff --git a/.gitignore b/.gitignore index 24bfaedbd..6027fec63 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ src/includes/patchwork.json docs/node_modules docs/_book tests/_support/_generated +composer.lock diff --git a/composer.json b/composer.json index 10d01d689..149e4b3ae 100644 --- a/composer.json +++ b/composer.json @@ -25,15 +25,15 @@ "symfony/process": ">=2.7 <5.0", "antecedent/patchwork": "^2.0", "gumlet/php-image-resize": "^1.6", - "vlucas/phpdotenv": "^3.0" + "vlucas/phpdotenv": "^3.0", + "codeception/codeception": ">=2.5" }, "require-dev": { "mikey179/vfsstream": "^1.6", "victorjonsson/markdowndocs": "dev-master", "erusev/parsedown": "^1.7", "squizlabs/php_codesniffer": "^3.4", - "lucatume/codeception-snapshot-assertions": "^0.1", - "codeception/codeception": ">=2.5.0" + "lucatume/codeception-snapshot-assertions": "^0.1" }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock deleted file mode 100644 index 910e405fd..000000000 --- a/composer.lock +++ /dev/null @@ -1,6625 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "0385de790c6d2b1db51eaf759896b337", - "packages": [ - { - "name": "antecedent/patchwork", - "version": "2.1.8", - "source": { - "type": "git", - "url": "https://github.com/antecedent/patchwork.git", - "reference": "3bb81ace3914c220aa273d1c0603d5e1b454c0d7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/antecedent/patchwork/zipball/3bb81ace3914c220aa273d1c0603d5e1b454c0d7", - "reference": "3bb81ace3914c220aa273d1c0603d5e1b454c0d7", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ignas Rudaitis", - "email": "ignas.rudaitis@gmail.com" - } - ], - "description": "Method redefinition (monkey-patching) functionality for PHP.", - "homepage": "http://patchwork2.org/", - "keywords": [ - "aop", - "aspect", - "interception", - "monkeypatching", - "redefinition", - "runkit", - "testing" - ], - "time": "2018-02-19T18:52:50+00:00" - }, - { - "name": "bacon/bacon-string-utils", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/Bacon/BaconStringUtils.git", - "reference": "3d7818aca25190149a9a2415a0928d4964d6007e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Bacon/BaconStringUtils/zipball/3d7818aca25190149a9a2415a0928d4964d6007e", - "reference": "3d7818aca25190149a9a2415a0928d4964d6007e", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~3.7", - "satooshi/php-coveralls": "~0.6", - "squizlabs/php_codesniffer": "~1.5", - "zendframework/zendframework": "~2.0" - }, - "suggest": { - "zendframework/zend-filter": "To use the Slugifier as a Zend\\Filter instance." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-0": { - "BaconStringUtils": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Ben Scholzen 'DASPRiD'", - "email": "mail@dasprids.de", - "homepage": "http://www.dasprids.de", - "role": "Developer" - } - ], - "description": "BaconStringUtils contain utitilies to work with strings.", - "homepage": "https://github.com/Bacon/BaconStringUtils", - "time": "2014-10-11T16:58:02+00:00" - }, - { - "name": "behat/gherkin", - "version": "v4.6.0", - "source": { - "type": "git", - "url": "https://github.com/Behat/Gherkin.git", - "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/ab0a02ea14893860bca00f225f5621d351a3ad07", - "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07", - "shasum": "" - }, - "require": { - "php": ">=5.3.1" - }, - "require-dev": { - "phpunit/phpunit": "~4.5|~5", - "symfony/phpunit-bridge": "~2.7|~3|~4", - "symfony/yaml": "~2.3|~3|~4" - }, - "suggest": { - "symfony/yaml": "If you want to parse features, represented in YAML files" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.4-dev" - } - }, - "autoload": { - "psr-0": { - "Behat\\Gherkin": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - } - ], - "description": "Gherkin DSL parser for PHP 5.3", - "homepage": "http://behat.org/", - "keywords": [ - "BDD", - "Behat", - "Cucumber", - "DSL", - "gherkin", - "parser" - ], - "time": "2019-01-16T14:22:17+00:00" - }, - { - "name": "codeception/codeception", - "version": "2.5.6", - "source": { - "type": "git", - "url": "https://github.com/Codeception/Codeception.git", - "reference": "b83a9338296e706fab2ceb49de8a352fbca3dc98" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Codeception/Codeception/zipball/b83a9338296e706fab2ceb49de8a352fbca3dc98", - "reference": "b83a9338296e706fab2ceb49de8a352fbca3dc98", - "shasum": "" - }, - "require": { - "behat/gherkin": "^4.4.0", - "codeception/phpunit-wrapper": "^6.0.9|^7.0.6", - "codeception/stub": "^2.0", - "ext-curl": "*", - "ext-json": "*", - "ext-mbstring": "*", - "facebook/webdriver": ">=1.1.3 <2.0", - "guzzlehttp/guzzle": ">=4.1.4 <7.0", - "guzzlehttp/psr7": "~1.0", - "php": ">=5.6.0 <8.0", - "symfony/browser-kit": ">=2.7 <5.0", - "symfony/console": ">=2.7 <5.0", - "symfony/css-selector": ">=2.7 <5.0", - "symfony/dom-crawler": ">=2.7 <5.0", - "symfony/event-dispatcher": ">=2.7 <5.0", - "symfony/finder": ">=2.7 <5.0", - "symfony/yaml": ">=2.7 <5.0" - }, - "require-dev": { - "codeception/specify": "~0.3", - "facebook/graph-sdk": "~5.3", - "flow/jsonpath": "~0.2", - "monolog/monolog": "~1.8", - "pda/pheanstalk": "~3.0", - "php-amqplib/php-amqplib": "~2.4", - "predis/predis": "^1.0", - "squizlabs/php_codesniffer": "~2.0", - "symfony/process": ">=2.7 <5.0", - "vlucas/phpdotenv": "^3.0" - }, - "suggest": { - "aws/aws-sdk-php": "For using AWS Auth in REST module and Queue module", - "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests", - "codeception/specify": "BDD-style code blocks", - "codeception/verify": "BDD-style assertions", - "flow/jsonpath": "For using JSONPath in REST module", - "league/factory-muffin": "For DataFactory module", - "league/factory-muffin-faker": "For Faker support in DataFactory module", - "phpseclib/phpseclib": "for SFTP option in FTP Module", - "stecman/symfony-console-completion": "For BASH autocompletion", - "symfony/phpunit-bridge": "For phpunit-bridge support" - }, - "bin": [ - "codecept" - ], - "type": "library", - "extra": { - "branch-alias": [] - }, - "autoload": { - "psr-4": { - "Codeception\\": "src/Codeception", - "Codeception\\Extension\\": "ext" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Bodnarchuk", - "email": "davert@mail.ua", - "homepage": "http://codegyre.com" - } - ], - "description": "BDD-style testing framework", - "homepage": "http://codeception.com/", - "keywords": [ - "BDD", - "TDD", - "acceptance testing", - "functional testing", - "unit testing" - ], - "time": "2019-04-24T11:28:19+00:00" - }, - { - "name": "codeception/phpunit-wrapper", - "version": "7.7.1", - "source": { - "type": "git", - "url": "https://github.com/Codeception/phpunit-wrapper.git", - "reference": "ab04a956264291505ea84998f43cf91639b4575d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/ab04a956264291505ea84998f43cf91639b4575d", - "reference": "ab04a956264291505ea84998f43cf91639b4575d", - "shasum": "" - }, - "require": { - "phpunit/php-code-coverage": "^6.0", - "phpunit/phpunit": "7.5.*", - "sebastian/comparator": "^3.0", - "sebastian/diff": "^3.0" - }, - "require-dev": { - "codeception/specify": "*", - "vlucas/phpdotenv": "^3.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Codeception\\PHPUnit\\": "src\\" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Davert", - "email": "davert.php@resend.cc" - } - ], - "description": "PHPUnit classes used by Codeception", - "time": "2019-02-26T20:35:32+00:00" - }, - { - "name": "codeception/stub", - "version": "2.1.0", - "source": { - "type": "git", - "url": "https://github.com/Codeception/Stub.git", - "reference": "853657f988942f7afb69becf3fd0059f192c705a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Codeception/Stub/zipball/853657f988942f7afb69becf3fd0059f192c705a", - "reference": "853657f988942f7afb69becf3fd0059f192c705a", - "shasum": "" - }, - "require": { - "codeception/phpunit-wrapper": ">6.0.15 <6.1.0 | ^6.6.1 | ^7.7.1 | ^8.0.3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Codeception\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Flexible Stub wrapper for PHPUnit's Mock Builder", - "time": "2019-03-02T15:35:10+00:00" - }, - { - "name": "composer/ca-bundle", - "version": "1.1.4", - "source": { - "type": "git", - "url": "https://github.com/composer/ca-bundle.git", - "reference": "558f321c52faeb4828c03e7dc0cfe39a09e09a2d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/558f321c52faeb4828c03e7dc0cfe39a09e09a2d", - "reference": "558f321c52faeb4828c03e7dc0cfe39a09e09a2d", - "shasum": "" - }, - "require": { - "ext-openssl": "*", - "ext-pcre": "*", - "php": "^5.3.2 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5", - "psr/log": "^1.0", - "symfony/process": "^2.5 || ^3.0 || ^4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\CaBundle\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", - "keywords": [ - "cabundle", - "cacert", - "certificate", - "ssl", - "tls" - ], - "time": "2019-01-28T09:30:10+00:00" - }, - { - "name": "composer/composer", - "version": "1.8.5", - "source": { - "type": "git", - "url": "https://github.com/composer/composer.git", - "reference": "949b116f9e7d98d8d276594fed74b580d125c0e6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/949b116f9e7d98d8d276594fed74b580d125c0e6", - "reference": "949b116f9e7d98d8d276594fed74b580d125c0e6", - "shasum": "" - }, - "require": { - "composer/ca-bundle": "^1.0", - "composer/semver": "^1.0", - "composer/spdx-licenses": "^1.2", - "composer/xdebug-handler": "^1.1", - "justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0", - "php": "^5.3.2 || ^7.0", - "psr/log": "^1.0", - "seld/jsonlint": "^1.4", - "seld/phar-utils": "^1.0", - "symfony/console": "^2.7 || ^3.0 || ^4.0", - "symfony/filesystem": "^2.7 || ^3.0 || ^4.0", - "symfony/finder": "^2.7 || ^3.0 || ^4.0", - "symfony/process": "^2.7 || ^3.0 || ^4.0" - }, - "conflict": { - "symfony/console": "2.8.38" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7", - "phpunit/phpunit-mock-objects": "^2.3 || ^3.0" - }, - "suggest": { - "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", - "ext-zip": "Enabling the zip extension allows you to unzip archives", - "ext-zlib": "Allow gzip compression of HTTP requests" - }, - "bin": [ - "bin/composer" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.8-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\": "src/Composer" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere.", - "homepage": "https://getcomposer.org/", - "keywords": [ - "autoload", - "dependency", - "package" - ], - "time": "2019-04-09T15:46:48+00:00" - }, - { - "name": "composer/semver", - "version": "1.5.0", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "46d9139568ccb8d9e7cdd4539cab7347568a5e2e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/46d9139568ccb8d9e7cdd4539cab7347568a5e2e", - "reference": "46d9139568ccb8d9e7cdd4539cab7347568a5e2e", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.5 || ^5.0.5", - "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Semver\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", - "keywords": [ - "semantic", - "semver", - "validation", - "versioning" - ], - "time": "2019-03-19T17:25:45+00:00" - }, - { - "name": "composer/spdx-licenses", - "version": "1.5.1", - "source": { - "type": "git", - "url": "https://github.com/composer/spdx-licenses.git", - "reference": "a1aa51cf3ab838b83b0867b14e56fc20fbd55b3d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/a1aa51cf3ab838b83b0867b14e56fc20fbd55b3d", - "reference": "a1aa51cf3ab838b83b0867b14e56fc20fbd55b3d", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 7" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Spdx\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "SPDX licenses list and validation library.", - "keywords": [ - "license", - "spdx", - "validator" - ], - "time": "2019-03-26T10:23:26+00:00" - }, - { - "name": "composer/xdebug-handler", - "version": "1.3.2", - "source": { - "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "d17708133b6c276d6e42ef887a877866b909d892" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/d17708133b6c276d6e42ef887a877866b909d892", - "reference": "d17708133b6c276d6e42ef887a877866b909d892", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0", - "psr/log": "^1.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Composer\\XdebugHandler\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" - } - ], - "description": "Restarts a process without xdebug.", - "keywords": [ - "Xdebug", - "performance" - ], - "time": "2019-01-28T20:25:53+00:00" - }, - { - "name": "dg/mysql-dump", - "version": "v1.5.0", - "source": { - "type": "git", - "url": "https://github.com/dg/MySQL-dump.git", - "reference": "6c9cf07092bcc4a140bef01c64d883ebfccfccfa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dg/MySQL-dump/zipball/6c9cf07092bcc4a140bef01c64d883ebfccfccfa", - "reference": "6c9cf07092bcc4a140bef01c64d883ebfccfccfa", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "http://davidgrudl.com" - } - ], - "description": "MySQL database dump.", - "homepage": "https://github.com/dg/MySQL-dump", - "keywords": [ - "mysql" - ], - "time": "2018-10-31T00:31:09+00:00" - }, - { - "name": "doctrine/inflector", - "version": "v1.3.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/inflector.git", - "reference": "5527a48b7313d15261292c149e55e26eae771b0a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a", - "reference": "5527a48b7313d15261292c149e55e26eae771b0a", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "require-dev": { - "phpunit/phpunit": "^6.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Common String Manipulations with regard to casing and singular/plural rules.", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "inflection", - "pluralize", - "singularize", - "string" - ], - "time": "2018-01-09T20:05:19+00:00" - }, - { - "name": "doctrine/instantiator", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "a2c590166b2133a4633738648b6b064edae0814a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/a2c590166b2133a4633738648b6b064edae0814a", - "reference": "a2c590166b2133a4633738648b6b064edae0814a", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "require-dev": { - "doctrine/coding-standard": "^6.0", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.13", - "phpstan/phpstan-phpunit": "^0.11", - "phpstan/phpstan-shim": "^0.11", - "phpunit/phpunit": "^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "time": "2019-03-17T17:37:11+00:00" - }, - { - "name": "facebook/webdriver", - "version": "1.6.0", - "source": { - "type": "git", - "url": "https://github.com/facebook/php-webdriver.git", - "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/bd8c740097eb9f2fc3735250fc1912bc811a954e", - "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "ext-json": "*", - "ext-mbstring": "*", - "ext-zip": "*", - "php": "^5.6 || ~7.0", - "symfony/process": "^2.8 || ^3.1 || ^4.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.0", - "jakub-onderka/php-parallel-lint": "^0.9.2", - "php-coveralls/php-coveralls": "^2.0", - "php-mock/php-mock-phpunit": "^1.1", - "phpunit/phpunit": "^5.7", - "sebastian/environment": "^1.3.4 || ^2.0 || ^3.0", - "squizlabs/php_codesniffer": "^2.6", - "symfony/var-dumper": "^3.3 || ^4.0" - }, - "suggest": { - "ext-SimpleXML": "For Firefox profile creation" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-community": "1.5-dev" - } - }, - "autoload": { - "psr-4": { - "Facebook\\WebDriver\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "description": "A PHP client for Selenium WebDriver", - "homepage": "https://github.com/facebook/php-webdriver", - "keywords": [ - "facebook", - "php", - "selenium", - "webdriver" - ], - "time": "2018-05-16T17:37:13+00:00" - }, - { - "name": "gettext/gettext", - "version": "v4.6.2", - "source": { - "type": "git", - "url": "https://github.com/oscarotero/Gettext.git", - "reference": "93176b272d61fb58a9767be71c50d19149cb1e48" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/oscarotero/Gettext/zipball/93176b272d61fb58a9767be71c50d19149cb1e48", - "reference": "93176b272d61fb58a9767be71c50d19149cb1e48", - "shasum": "" - }, - "require": { - "gettext/languages": "^2.3", - "php": ">=5.4.0" - }, - "require-dev": { - "illuminate/view": "*", - "phpunit/phpunit": "^4.8|^5.7|^6.5", - "squizlabs/php_codesniffer": "^3.0", - "symfony/yaml": "~2", - "twig/extensions": "*", - "twig/twig": "^1.31|^2.0" - }, - "suggest": { - "illuminate/view": "Is necessary if you want to use the Blade extractor", - "symfony/yaml": "Is necessary if you want to use the Yaml extractor/generator", - "twig/extensions": "Is necessary if you want to use the Twig extractor", - "twig/twig": "Is necessary if you want to use the Twig extractor" - }, - "type": "library", - "autoload": { - "psr-4": { - "Gettext\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Oscar Otero", - "email": "oom@oscarotero.com", - "homepage": "http://oscarotero.com", - "role": "Developer" - } - ], - "description": "PHP gettext manager", - "homepage": "https://github.com/oscarotero/Gettext", - "keywords": [ - "JS", - "gettext", - "i18n", - "mo", - "po", - "translation" - ], - "time": "2019-01-12T18:40:56+00:00" - }, - { - "name": "gettext/languages", - "version": "2.5.0", - "source": { - "type": "git", - "url": "https://github.com/mlocati/cldr-to-gettext-plural-rules.git", - "reference": "78db2d17933f0765a102f368a6663f057162ddbd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mlocati/cldr-to-gettext-plural-rules/zipball/78db2d17933f0765a102f368a6663f057162ddbd", - "reference": "78db2d17933f0765a102f368a6663f057162ddbd", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "require-dev": { - "phpunit/phpunit": "^4" - }, - "bin": [ - "bin/export-plural-rules", - "bin/export-plural-rules.php" - ], - "type": "library", - "autoload": { - "psr-4": { - "Gettext\\Languages\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michele Locati", - "email": "mlocati@gmail.com", - "role": "Developer" - } - ], - "description": "gettext languages with plural rules", - "homepage": "https://github.com/mlocati/cldr-to-gettext-plural-rules", - "keywords": [ - "cldr", - "i18n", - "internationalization", - "l10n", - "language", - "languages", - "localization", - "php", - "plural", - "plural rules", - "plurals", - "translate", - "translations", - "unicode" - ], - "time": "2018-11-13T22:06:07+00:00" - }, - { - "name": "gumlet/php-image-resize", - "version": "1.9.2", - "source": { - "type": "git", - "url": "https://github.com/gumlet/php-image-resize.git", - "reference": "06339a9c1b167acd58173db226f57957a6617547" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/gumlet/php-image-resize/zipball/06339a9c1b167acd58173db226f57957a6617547", - "reference": "06339a9c1b167acd58173db226f57957a6617547", - "shasum": "" - }, - "require": { - "ext-fileinfo": "*", - "ext-gd": "*", - "php": ">=5.5.0" - }, - "require-dev": { - "apigen/apigen": "^4.1", - "ext-exif": "*", - "ext-gd": "*", - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^4.8" - }, - "suggest": { - "ext-exif": "Auto-rotate jpeg files" - }, - "type": "library", - "autoload": { - "psr-4": { - "Gumlet\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Aditya Patadia", - "homepage": "http://aditya.patadia.org/" - } - ], - "description": "PHP class to re-size and scale images", - "homepage": "https://github.com/gumlet/php-image-resize", - "keywords": [ - "image", - "php", - "resize", - "scale" - ], - "time": "2019-01-01T13:53:00+00:00" - }, - { - "name": "guzzlehttp/guzzle", - "version": "6.3.3", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", - "shasum": "" - }, - "require": { - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.4", - "php": ">=5.5" - }, - "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.0" - }, - "suggest": { - "psr/log": "Required for using the Log middleware" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.3-dev" - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" - ], - "time": "2018-04-22T15:46:56+00:00" - }, - { - "name": "guzzlehttp/promises", - "version": "v1.3.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "shasum": "" - }, - "require": { - "php": ">=5.5.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "time": "2016-12-20T10:07:11+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "1.5.2", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "9f83dded91781a01c63574e387eaa769be769115" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115", - "reference": "9f83dded91781a01c63574e387eaa769be769115", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.5-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Schultze", - "homepage": "https://github.com/Tobion" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "time": "2018-12-04T20:46:45+00:00" - }, - { - "name": "hautelook/phpass", - "version": "0.3.5", - "source": { - "type": "git", - "url": "https://github.com/hautelook/phpass.git", - "reference": "b4cbd9b67ed3ef5672ec79d8e0c46d24bd844abd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/hautelook/phpass/zipball/b4cbd9b67ed3ef5672ec79d8e0c46d24bd844abd", - "reference": "b4cbd9b67ed3ef5672ec79d8e0c46d24bd844abd", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "psr-0": { - "Hautelook": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Public Domain" - ], - "authors": [ - { - "name": "Solar Designer", - "email": "solar@openwall.com", - "homepage": "http://openwall.com/phpass/" - } - ], - "description": "Portable PHP password hashing framework", - "homepage": "http://github.com/hautelook/phpass/", - "keywords": [ - "blowfish", - "crypt", - "password", - "security" - ], - "time": "2012-08-31T00:00:00+00:00" - }, - { - "name": "illuminate/contracts", - "version": "v5.8.15", - "source": { - "type": "git", - "url": "https://github.com/illuminate/contracts.git", - "reference": "0b3cbe19051c9a8c247091cc0867d3b65250d093" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/contracts/zipball/0b3cbe19051c9a8c247091cc0867d3b65250d093", - "reference": "0b3cbe19051c9a8c247091cc0867d3b65250d093", - "shasum": "" - }, - "require": { - "php": "^7.1.3", - "psr/container": "^1.0", - "psr/simple-cache": "^1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.8-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Contracts\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Contracts package.", - "homepage": "https://laravel.com", - "time": "2019-04-21T18:51:09+00:00" - }, - { - "name": "illuminate/support", - "version": "v5.8.15", - "source": { - "type": "git", - "url": "https://github.com/illuminate/support.git", - "reference": "7fbf8d76946ee53587955b670bd8a47e3d48e854" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/support/zipball/7fbf8d76946ee53587955b670bd8a47e3d48e854", - "reference": "7fbf8d76946ee53587955b670bd8a47e3d48e854", - "shasum": "" - }, - "require": { - "doctrine/inflector": "^1.1", - "ext-json": "*", - "ext-mbstring": "*", - "illuminate/contracts": "5.8.*", - "nesbot/carbon": "^1.26.3 || ^2.0", - "php": "^7.1.3" - }, - "conflict": { - "tightenco/collect": "<5.5.33" - }, - "suggest": { - "illuminate/filesystem": "Required to use the composer class (5.8.*).", - "moontoast/math": "Required to use ordered UUIDs (^1.1).", - "ramsey/uuid": "Required to use Str::uuid() (^3.7).", - "symfony/process": "Required to use the composer class (^4.2).", - "symfony/var-dumper": "Required to use the dd function (^4.2).", - "vlucas/phpdotenv": "Required to use the env helper (^3.3)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.8-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Support\\": "" - }, - "files": [ - "helpers.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Support package.", - "homepage": "https://laravel.com", - "time": "2019-04-25T14:06:24+00:00" - }, - { - "name": "justinrainbow/json-schema", - "version": "5.2.8", - "source": { - "type": "git", - "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "dcb6e1006bb5fd1e392b4daa68932880f37550d4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/dcb6e1006bb5fd1e392b4daa68932880f37550d4", - "reference": "dcb6e1006bb5fd1e392b4daa68932880f37550d4", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "~2.2.20", - "json-schema/json-schema-test-suite": "1.2.0", - "phpunit/phpunit": "^4.8.35" - }, - "bin": [ - "bin/validate-json" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "JsonSchema\\": "src/JsonSchema/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bruno Prieto Reis", - "email": "bruno.p.reis@gmail.com" - }, - { - "name": "Justin Rainbow", - "email": "justin.rainbow@gmail.com" - }, - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - }, - { - "name": "Robert Schönthal", - "email": "seroscho@googlemail.com" - } - ], - "description": "A library to validate a json schema.", - "homepage": "https://github.com/justinrainbow/json-schema", - "keywords": [ - "json", - "schema" - ], - "time": "2019-01-14T23:55:14+00:00" - }, - { - "name": "lucatume/wp-browser-commons", - "version": "1.2.10", - "source": { - "type": "git", - "url": "https://github.com/lucatume/wp-browser-commons.git", - "reference": "25b93939e1d123820cca02f2db175289a7d8949f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/lucatume/wp-browser-commons/zipball/25b93939e1d123820cca02f2db175289a7d8949f", - "reference": "25b93939e1d123820cca02f2db175289a7d8949f", - "shasum": "" - }, - "require": { - "bacon/bacon-string-utils": "~1.0", - "codeception/codeception": "~2.1", - "dg/mysql-dump": "^1.3", - "mikemclin/laravel-wp-password": "~2.0.0", - "php": ">=5.4.0", - "symfony/filesystem": "^3.0", - "xamin/handlebars.php": "~0.10" - }, - "require-dev": { - "mikey179/vfsstream": "^1.6" - }, - "type": "library", - "autoload": { - "psr-4": { - "tad\\": "src\\tad" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0" - ], - "authors": [ - { - "name": "Luca Tumedei", - "email": "luca@theaveragedev.com" - } - ], - "description": "Common libraries of the WP-Browser package.", - "time": "2019-05-08T14:31:06+00:00" - }, - { - "name": "mck89/peast", - "version": "v1.9.1", - "source": { - "type": "git", - "url": "https://github.com/mck89/peast.git", - "reference": "f4ce80caea99a894574f15b6bec50c05250b7a83" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mck89/peast/zipball/f4ce80caea99a894574f15b6bec50c05250b7a83", - "reference": "f4ce80caea99a894574f15b6bec50c05250b7a83", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0|^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9.1-dev" - } - }, - "autoload": { - "psr-4": { - "Peast\\": "lib/Peast/", - "Peast\\test\\": "test/Peast/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Marchiò", - "email": "marco.mm89@gmail.com" - } - ], - "description": "Peast is PHP library that generates AST for JavaScript code", - "time": "2019-01-16T11:24:32+00:00" - }, - { - "name": "mikemclin/laravel-wp-password", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/mikemclin/laravel-wp-password.git", - "reference": "84ff1113ff6866cdb0350c176dc3c843383e4819" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mikemclin/laravel-wp-password/zipball/84ff1113ff6866cdb0350c176dc3c843383e4819", - "reference": "84ff1113ff6866cdb0350c176dc3c843383e4819", - "shasum": "" - }, - "require": { - "hautelook/phpass": "0.3.*", - "illuminate/support": ">=4.0.0", - "php": ">=5.3.0" - }, - "replace": { - "mikemclin/laravel-wp-password": "self.version" - }, - "require-dev": { - "mockery/mockery": "~0.9", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master" - }, - "type": "laravel-package", - "extra": { - "laravel": { - "providers": [ - "MikeMcLin\\WpPassword\\WpPasswordProvider" - ], - "aliases": { - "WpPassword": "MikeMcLin\\WpPassword\\Facades\\WpPassword" - } - } - }, - "autoload": { - "psr-4": { - "MikeMcLin\\WpPassword\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike McLin", - "email": "mike@mikemclin.com", - "homepage": "http://mikemclin.net" - } - ], - "description": "Laravel package that checks and creates WordPress password hashes", - "homepage": "https://github.com/mikemclin/laravel-wp-password", - "keywords": [ - "hashing", - "laravel", - "password", - "wordpress" - ], - "time": "2018-01-11T14:12:02+00:00" - }, - { - "name": "mustache/mustache", - "version": "v2.12.0", - "source": { - "type": "git", - "url": "https://github.com/bobthecow/mustache.php.git", - "reference": "fe8fe72e9d580591854de404cc59a1b83ca4d19e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/bobthecow/mustache.php/zipball/fe8fe72e9d580591854de404cc59a1b83ca4d19e", - "reference": "fe8fe72e9d580591854de404cc59a1b83ca4d19e", - "shasum": "" - }, - "require": { - "php": ">=5.2.4" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "~1.11", - "phpunit/phpunit": "~3.7|~4.0|~5.0" - }, - "type": "library", - "autoload": { - "psr-0": { - "Mustache": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Justin Hileman", - "email": "justin@justinhileman.info", - "homepage": "http://justinhileman.com" - } - ], - "description": "A Mustache implementation in PHP.", - "homepage": "https://github.com/bobthecow/mustache.php", - "keywords": [ - "mustache", - "templating" - ], - "time": "2017-07-11T12:54:05+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.9.1", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", - "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "replace": { - "myclabs/deep-copy": "self.version" - }, - "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, - "files": [ - "src/DeepCopy/deep_copy.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "time": "2019-04-07T13:18:21+00:00" - }, - { - "name": "nb/oxymel", - "version": "v0.1.0", - "source": { - "type": "git", - "url": "https://github.com/nb/oxymel.git", - "reference": "cbe626ef55d5c4cc9b5e6e3904b395861ea76e3c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nb/oxymel/zipball/cbe626ef55d5c4cc9b5e6e3904b395861ea76e3c", - "reference": "cbe626ef55d5c4cc9b5e6e3904b395861ea76e3c", - "shasum": "" - }, - "require": { - "php": ">=5.2.4" - }, - "type": "library", - "autoload": { - "psr-0": { - "Oxymel": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nikolay Bachiyski", - "email": "nb@nikolay.bg", - "homepage": "http://extrapolate.me/" - } - ], - "description": "A sweet XML builder", - "homepage": "https://github.com/nb/oxymel", - "keywords": [ - "xml" - ], - "time": "2013-02-24T15:01:54+00:00" - }, - { - "name": "nesbot/carbon", - "version": "2.17.1", - "source": { - "type": "git", - "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "96acbc0c03782e8115156dd4dd8b736267155066" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/96acbc0c03782e8115156dd4dd8b736267155066", - "reference": "96acbc0c03782e8115156dd4dd8b736267155066", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": "^7.1.8 || ^8.0", - "symfony/translation": "^3.4 || ^4.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.14 || ^3.0", - "kylekatarnls/multi-tester": "^1.1", - "phpmd/phpmd": "^2.6", - "phpstan/phpstan": "^0.11", - "phpunit/phpunit": "^7.5 || ^8.0", - "squizlabs/php_codesniffer": "^3.4" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Carbon\\Laravel\\ServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Carbon\\": "src/Carbon/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Brian Nesbitt", - "email": "brian@nesbot.com", - "homepage": "http://nesbot.com" - } - ], - "description": "A simple API extension for DateTime.", - "homepage": "http://carbon.nesbot.com", - "keywords": [ - "date", - "datetime", - "time" - ], - "time": "2019-04-27T18:04:27+00:00" - }, - { - "name": "phar-io/manifest", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", - "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-phar": "*", - "phar-io/version": "^2.0", - "php": "^5.6 || ^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "time": "2018-07-08T19:23:20+00:00" - }, - { - "name": "phar-io/version", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "time": "2018-07-08T19:19:57+00:00" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "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" - }, - "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" - }, - { - "name": "phpoption/phpoption", - "version": "1.5.0", - "source": { - "type": "git", - "url": "https://github.com/schmittjoh/php-option.git", - "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/94e644f7d2051a5f0fcf77d81605f152eecff0ed", - "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "4.7.*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3-dev" - } - }, - "autoload": { - "psr-0": { - "PhpOption\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache2" - ], - "authors": [ - { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Option Type for PHP", - "keywords": [ - "language", - "option", - "php", - "type" - ], - "time": "2015-07-25T16:39:46+00:00" - }, - { - "name": "phpspec/prophecy", - "version": "1.8.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06", - "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06", - "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" - }, - "require-dev": { - "phpspec/phpspec": "^2.5|^3.2", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.8.x-dev" - } - }, - "autoload": { - "psr-0": { - "Prophecy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "time": "2018-08-05T17:53:17+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "6.1.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", - "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-xmlwriter": "*", - "php": "^7.1", - "phpunit/php-file-iterator": "^2.0", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^3.0", - "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^3.1 || ^4.0", - "sebastian/version": "^2.0.1", - "theseer/tokenizer": "^1.1" - }, - "require-dev": { - "phpunit/phpunit": "^7.0" - }, - "suggest": { - "ext-xdebug": "^2.6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "time": "2018-10-31T16:06:48+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "050bedf145a257b1ff02746c31894800e5122946" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", - "reference": "050bedf145a257b1ff02746c31894800e5122946", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "require-dev": { - "phpunit/phpunit": "^7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "time": "2018-09-13T20:33:42+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "time": "2015-06-21T13:50:34+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "2.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "8b389aebe1b8b0578430bda0c7c95a829608e059" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/8b389aebe1b8b0578430bda0c7c95a829608e059", - "reference": "8b389aebe1b8b0578430bda0c7c95a829608e059", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "require-dev": { - "phpunit/phpunit": "^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "time": "2019-02-20T10:12:59+00:00" - }, - { - "name": "phpunit/php-token-stream", - "version": "3.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "c99e3be9d3e85f60646f152f9002d46ed7770d18" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/c99e3be9d3e85f60646f152f9002d46ed7770d18", - "reference": "c99e3be9d3e85f60646f152f9002d46ed7770d18", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": "^7.1" - }, - "require-dev": { - "phpunit/phpunit": "^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", - "keywords": [ - "tokenizer" - ], - "time": "2018-10-30T05:52:18+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "7.5.10", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "d7d9cee051d03ed98df6023aad93f7902731a780" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d7d9cee051d03ed98df6023aad93f7902731a780", - "reference": "d7d9cee051d03ed98df6023aad93f7902731a780", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.1", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "myclabs/deep-copy": "^1.7", - "phar-io/manifest": "^1.0.2", - "phar-io/version": "^2.0", - "php": "^7.1", - "phpspec/prophecy": "^1.7", - "phpunit/php-code-coverage": "^6.0.7", - "phpunit/php-file-iterator": "^2.0.1", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^2.1", - "sebastian/comparator": "^3.0", - "sebastian/diff": "^3.0", - "sebastian/environment": "^4.0", - "sebastian/exporter": "^3.1", - "sebastian/global-state": "^2.0", - "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^2.0", - "sebastian/version": "^2.0.1" - }, - "conflict": { - "phpunit/phpunit-mock-objects": "*" - }, - "require-dev": { - "ext-pdo": "*" - }, - "suggest": { - "ext-soap": "*", - "ext-xdebug": "*", - "phpunit/php-invoker": "^2.0" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "7.5-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "time": "2019-05-09T05:06:47+00:00" - }, - { - "name": "psr/container", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "time": "2017-02-14T16:28:37+00:00" - }, - { - "name": "psr/http-message", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "time": "2016-08-06T14:39:51+00:00" - }, - { - "name": "psr/log", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", - "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "time": "2018-11-20T15:27:04+00:00" - }, - { - "name": "psr/simple-cache", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/simple-cache.git", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\SimpleCache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interfaces for simple caching", - "keywords": [ - "cache", - "caching", - "psr", - "psr-16", - "simple-cache" - ], - "time": "2017-10-23T01:57:42+00:00" - }, - { - "name": "ralouphie/getallheaders", - "version": "2.0.5", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/5601c8a83fbba7ef674a7369456d12f1e0d0eafa", - "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "require-dev": { - "phpunit/phpunit": "~3.7.0", - "satooshi/php-coveralls": ">=1.0" - }, - "type": "library", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders.", - "time": "2016-02-11T07:05:27+00:00" - }, - { - "name": "rmccue/requests", - "version": "v1.7.0", - "source": { - "type": "git", - "url": "https://github.com/rmccue/Requests.git", - "reference": "87932f52ffad70504d93f04f15690cf16a089546" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/rmccue/Requests/zipball/87932f52ffad70504d93f04f15690cf16a089546", - "reference": "87932f52ffad70504d93f04f15690cf16a089546", - "shasum": "" - }, - "require": { - "php": ">=5.2" - }, - "require-dev": { - "requests/test-server": "dev-master" - }, - "type": "library", - "autoload": { - "psr-0": { - "Requests": "library/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "ISC" - ], - "authors": [ - { - "name": "Ryan McCue", - "homepage": "http://ryanmccue.info" - } - ], - "description": "A HTTP library written in PHP, for human beings.", - "homepage": "http://github.com/rmccue/Requests", - "keywords": [ - "curl", - "fsockopen", - "http", - "idna", - "ipv6", - "iri", - "sockets" - ], - "time": "2016-10-13T00:11:37+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2017-03-04T06:30:41+00:00" - }, - { - "name": "sebastian/comparator", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", - "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", - "shasum": "" - }, - "require": { - "php": "^7.1", - "sebastian/diff": "^3.0", - "sebastian/exporter": "^3.1" - }, - "require-dev": { - "phpunit/phpunit": "^7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "time": "2018-07-12T15:12:46+00:00" - }, - { - "name": "sebastian/diff", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", - "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "require-dev": { - "phpunit/phpunit": "^7.5 || ^8.0", - "symfony/process": "^2 || ^3.3 || ^4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "time": "2019-02-04T06:01:07+00:00" - }, - { - "name": "sebastian/environment", - "version": "4.2.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "f2a2c8e1c97c11ace607a7a667d73d47c19fe404" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/f2a2c8e1c97c11ace607a7a667d73d47c19fe404", - "reference": "f2a2c8e1c97c11ace607a7a667d73d47c19fe404", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "require-dev": { - "phpunit/phpunit": "^7.5" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "time": "2019-05-05T09:05:15+00:00" - }, - { - "name": "sebastian/exporter", - "version": "3.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", - "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", - "shasum": "" - }, - "require": { - "php": "^7.0", - "sebastian/recursion-context": "^3.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "time": "2017-04-03T13:19:02+00:00" - }, - { - "name": "sebastian/global-state", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "time": "2017-04-27T15:39:26+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", - "shasum": "" - }, - "require": { - "php": "^7.0", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2017-08-03T12:35:26+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "773f97c67f28de00d397be301821b06708fca0be" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", - "reference": "773f97c67f28de00d397be301821b06708fca0be", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "time": "2017-03-29T09:07:27+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2017-03-03T06:23:57+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", - "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2018-10-04T04:07:39+00:00" - }, - { - "name": "sebastian/version", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "time": "2016-10-03T07:35:21+00:00" - }, - { - "name": "seld/jsonlint", - "version": "1.7.1", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/d15f59a67ff805a44c50ea0516d2341740f81a38", - "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38", - "shasum": "" - }, - "require": { - "php": "^5.3 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" - }, - "bin": [ - "bin/jsonlint" - ], - "type": "library", - "autoload": { - "psr-4": { - "Seld\\JsonLint\\": "src/Seld/JsonLint/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "JSON Linter", - "keywords": [ - "json", - "linter", - "parser", - "validator" - ], - "time": "2018-01-24T12:46:19+00:00" - }, - { - "name": "seld/phar-utils", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/phar-utils.git", - "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/7009b5139491975ef6486545a39f3e6dad5ac30a", - "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Seld\\PharUtils\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be" - } - ], - "description": "PHAR file format utilities, for when PHP phars you up", - "keywords": [ - "phra" - ], - "time": "2015-10-13T18:44:15+00:00" - }, - { - "name": "symfony/browser-kit", - "version": "v4.2.8", - "source": { - "type": "git", - "url": "https://github.com/symfony/browser-kit.git", - "reference": "c09c18cca96d7067152f78956faf55346c338283" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/c09c18cca96d7067152f78956faf55346c338283", - "reference": "c09c18cca96d7067152f78956faf55346c338283", - "shasum": "" - }, - "require": { - "php": "^7.1.3", - "symfony/dom-crawler": "~3.4|~4.0" - }, - "require-dev": { - "symfony/css-selector": "~3.4|~4.0", - "symfony/process": "~3.4|~4.0" - }, - "suggest": { - "symfony/process": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.2-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\BrowserKit\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony BrowserKit Component", - "homepage": "https://symfony.com", - "time": "2019-04-07T09:56:43+00:00" - }, - { - "name": "symfony/console", - "version": "v4.2.8", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "e2840bb38bddad7a0feaf85931e38fdcffdb2f81" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/e2840bb38bddad7a0feaf85931e38fdcffdb2f81", - "reference": "e2840bb38bddad7a0feaf85931e38fdcffdb2f81", - "shasum": "" - }, - "require": { - "php": "^7.1.3", - "symfony/contracts": "^1.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/dependency-injection": "<3.4", - "symfony/process": "<3.3" - }, - "provide": { - "psr/log-implementation": "1.0" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "~3.4|~4.0", - "symfony/lock": "~3.4|~4.0", - "symfony/process": "~3.4|~4.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.2-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Console Component", - "homepage": "https://symfony.com", - "time": "2019-04-08T14:23:48+00:00" - }, - { - "name": "symfony/contracts", - "version": "v1.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/contracts.git", - "reference": "d3636025e8253c6144358ec0a62773cae588395b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/contracts/zipball/d3636025e8253c6144358ec0a62773cae588395b", - "reference": "d3636025e8253c6144358ec0a62773cae588395b", - "shasum": "" - }, - "require": { - "php": "^7.1.3" - }, - "require-dev": { - "psr/cache": "^1.0", - "psr/container": "^1.0", - "symfony/polyfill-intl-idn": "^1.10" - }, - "suggest": { - "psr/cache": "When using the Cache contracts", - "psr/container": "When using the Service contracts", - "symfony/cache-contracts-implementation": "", - "symfony/event-dispatcher-implementation": "", - "symfony/http-client-contracts-implementation": "", - "symfony/service-contracts-implementation": "", - "symfony/translation-contracts-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\": "" - }, - "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": "A set of abstractions extracted out of the Symfony components", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "time": "2019-04-27T14:29:50+00:00" - }, - { - "name": "symfony/css-selector", - "version": "v4.2.8", - "source": { - "type": "git", - "url": "https://github.com/symfony/css-selector.git", - "reference": "48eddf66950fa57996e1be4a55916d65c10c604a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/48eddf66950fa57996e1be4a55916d65c10c604a", - "reference": "48eddf66950fa57996e1be4a55916d65c10c604a", - "shasum": "" - }, - "require": { - "php": "^7.1.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.2-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\CssSelector\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony CssSelector Component", - "homepage": "https://symfony.com", - "time": "2019-01-16T20:31:39+00:00" - }, - { - "name": "symfony/dom-crawler", - "version": "v4.2.8", - "source": { - "type": "git", - "url": "https://github.com/symfony/dom-crawler.git", - "reference": "53c97769814c80a84a8403efcf3ae7ae966d53bb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/53c97769814c80a84a8403efcf3ae7ae966d53bb", - "reference": "53c97769814c80a84a8403efcf3ae7ae966d53bb", - "shasum": "" - }, - "require": { - "php": "^7.1.3", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.0" - }, - "require-dev": { - "symfony/css-selector": "~3.4|~4.0" - }, - "suggest": { - "symfony/css-selector": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.2-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\DomCrawler\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony DomCrawler Component", - "homepage": "https://symfony.com", - "time": "2019-02-23T15:17:42+00:00" - }, - { - "name": "symfony/event-dispatcher", - "version": "v4.2.8", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "fbce53cd74ac509cbe74b6f227622650ab759b02" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/fbce53cd74ac509cbe74b6f227622650ab759b02", - "reference": "fbce53cd74ac509cbe74b6f227622650ab759b02", - "shasum": "" - }, - "require": { - "php": "^7.1.3", - "symfony/contracts": "^1.0" - }, - "conflict": { - "symfony/dependency-injection": "<3.4" - }, - "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/stopwatch": "~3.4|~4.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.2-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony EventDispatcher Component", - "homepage": "https://symfony.com", - "time": "2019-04-06T13:51:08+00:00" - }, - { - "name": "symfony/filesystem", - "version": "v3.4.27", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/acf99758b1df8e9295e6b85aa69f294565c9fedb", - "reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-ctype": "~1.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Filesystem Component", - "homepage": "https://symfony.com", - "time": "2019-02-04T21:34:32+00:00" - }, - { - "name": "symfony/finder", - "version": "v4.2.8", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "e45135658bd6c14b61850bf131c4f09a55133f69" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/e45135658bd6c14b61850bf131c4f09a55133f69", - "reference": "e45135658bd6c14b61850bf131c4f09a55133f69", - "shasum": "" - }, - "require": { - "php": "^7.1.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.2-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Finder Component", - "homepage": "https://symfony.com", - "time": "2019-04-06T13:51:08+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.11.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "82ebae02209c21113908c229e9883c419720738a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/82ebae02209c21113908c229e9883c419720738a", - "reference": "82ebae02209c21113908c229e9883c419720738a", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.11-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "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" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "time": "2019-02-06T07:57:58+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.11.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "fe5e94c604826c35a32fa832f35bd036b6799609" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fe5e94c604826c35a32fa832f35bd036b6799609", - "reference": "fe5e94c604826c35a32fa832f35bd036b6799609", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.11-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "time": "2019-02-06T07:57:58+00:00" - }, - { - "name": "symfony/process", - "version": "v4.2.8", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "8cf39fb4ccff793340c258ee7760fd40bfe745fe" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/8cf39fb4ccff793340c258ee7760fd40bfe745fe", - "reference": "8cf39fb4ccff793340c258ee7760fd40bfe745fe", - "shasum": "" - }, - "require": { - "php": "^7.1.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.2-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Process Component", - "homepage": "https://symfony.com", - "time": "2019-04-10T16:20:36+00:00" - }, - { - "name": "symfony/translation", - "version": "v4.2.8", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "181a426dd129cb496f12d7e7555f6d0b37a7615b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/181a426dd129cb496f12d7e7555f6d0b37a7615b", - "reference": "181a426dd129cb496f12d7e7555f6d0b37a7615b", - "shasum": "" - }, - "require": { - "php": "^7.1.3", - "symfony/contracts": "^1.0.2", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/config": "<3.4", - "symfony/dependency-injection": "<3.4", - "symfony/yaml": "<3.4" - }, - "provide": { - "symfony/translation-contracts-implementation": "1.0" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~3.4|~4.0", - "symfony/console": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/http-kernel": "~3.4|~4.0", - "symfony/intl": "~3.4|~4.0", - "symfony/var-dumper": "~3.4|~4.0", - "symfony/yaml": "~3.4|~4.0" - }, - "suggest": { - "psr/log-implementation": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.2-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Translation Component", - "homepage": "https://symfony.com", - "time": "2019-05-01T12:55:36+00:00" - }, - { - "name": "symfony/yaml", - "version": "v4.2.8", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "6712daf03ee25b53abb14e7e8e0ede1a770efdb1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/6712daf03ee25b53abb14e7e8e0ede1a770efdb1", - "reference": "6712daf03ee25b53abb14e7e8e0ede1a770efdb1", - "shasum": "" - }, - "require": { - "php": "^7.1.3", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/console": "<3.4" - }, - "require-dev": { - "symfony/console": "~3.4|~4.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.2-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com", - "time": "2019-03-30T15:58:42+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.1.2", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "1c42705be2b6c1de5904f8afacef5895cab44bf8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/1c42705be2b6c1de5904f8afacef5895cab44bf8", - "reference": "1c42705be2b6c1de5904f8afacef5895cab44bf8", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "time": "2019-04-04T09:56:43+00:00" - }, - { - "name": "vlucas/phpdotenv", - "version": "v3.3.3", - "source": { - "type": "git", - "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "dbcc609971dd9b55f48b8008b553d79fd372ddde" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/dbcc609971dd9b55f48b8008b553d79fd372ddde", - "reference": "dbcc609971dd9b55f48b8008b553d79fd372ddde", - "shasum": "" - }, - "require": { - "php": "^5.4 || ^7.0", - "phpoption/phpoption": "^1.5", - "symfony/polyfill-ctype": "^1.9" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.0 || ^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.3-dev" - } - }, - "autoload": { - "psr-4": { - "Dotenv\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Vance Lucas", - "email": "vance@vancelucas.com", - "homepage": "http://www.vancelucas.com" - } - ], - "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", - "keywords": [ - "dotenv", - "env", - "environment" - ], - "time": "2019-03-06T09:39:45+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9", - "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0", - "symfony/polyfill-ctype": "^1.8" - }, - "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "time": "2018-12-25T11:19:39+00:00" - }, - { - "name": "wp-cli/cache-command", - "version": "v2.0.2", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/cache-command.git", - "reference": "56e2a8186c28bc1edbb8bc1c0f3d3b30fa116ea8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/cache-command/zipball/56e2a8186c28bc1edbb8bc1c0f3d3b30fa116ea8", - "reference": "56e2a8186c28bc1edbb8bc1c0f3d3b30fa116ea8", - "shasum": "" - }, - "require": { - "wp-cli/wp-cli": "^2" - }, - "require-dev": { - "wp-cli/entity-command": "^1.3 || ^2", - "wp-cli/wp-cli-tests": "^2.1" - }, - "type": "wp-cli-package", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "bundled": true, - "commands": [ - "cache", - "cache add", - "cache decr", - "cache delete", - "cache flush", - "cache get", - "cache incr", - "cache replace", - "cache set", - "cache type", - "transient", - "transient delete", - "transient get", - "transient set", - "transient type", - "transient list" - ] - }, - "autoload": { - "psr-4": { - "": "src/" - }, - "files": [ - "cache-command.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Bachhuber", - "email": "daniel@runcommand.io", - "homepage": "https://runcommand.io" - } - ], - "description": "Manages object and transient caches.", - "homepage": "https://github.com/wp-cli/cache-command", - "time": "2019-04-19T15:13:51+00:00" - }, - { - "name": "wp-cli/checksum-command", - "version": "v2.0.3", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/checksum-command.git", - "reference": "7db66668ec116c5ccef7bc27b4354fa81b85018a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/checksum-command/zipball/7db66668ec116c5ccef7bc27b4354fa81b85018a", - "reference": "7db66668ec116c5ccef7bc27b4354fa81b85018a", - "shasum": "" - }, - "require": { - "wp-cli/wp-cli": "^2" - }, - "require-dev": { - "wp-cli/extension-command": "^1.2 || ^2", - "wp-cli/wp-cli-tests": "^2.1" - }, - "type": "wp-cli-package", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "bundled": true, - "commands": [ - "core verify-checksums", - "plugin verify-checksums" - ] - }, - "autoload": { - "psr-4": { - "": "src/" - }, - "files": [ - "checksum-command.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Bachhuber", - "email": "daniel@runcommand.io", - "homepage": "https://runcommand.io" - } - ], - "description": "Verifies file integrity by comparing to published checksums.", - "homepage": "https://github.com/wp-cli/checksum-command", - "time": "2019-04-25T00:28:02+00:00" - }, - { - "name": "wp-cli/config-command", - "version": "v2.0.4", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/config-command.git", - "reference": "b7e69946e4ec711d4568d11d2b7e08f5e872567d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/config-command/zipball/b7e69946e4ec711d4568d11d2b7e08f5e872567d", - "reference": "b7e69946e4ec711d4568d11d2b7e08f5e872567d", - "shasum": "" - }, - "require": { - "wp-cli/wp-cli": "^2", - "wp-cli/wp-config-transformer": "^1.2.1" - }, - "require-dev": { - "wp-cli/db-command": "^1.3 || ^2", - "wp-cli/wp-cli-tests": "^2.1" - }, - "type": "wp-cli-package", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "bundled": true, - "commands": [ - "config", - "config edit", - "config delete", - "config create", - "config get", - "config has", - "config list", - "config path", - "config set", - "config shuffle-salts" - ] - }, - "autoload": { - "psr-4": { - "": "src/" - }, - "files": [ - "config-command.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Bachhuber", - "email": "daniel@runcommand.io", - "homepage": "https://runcommand.io" - }, - { - "name": "Alain Schlesser", - "email": "alain.schlesser@gmail.com", - "homepage": "https://www.alainschlesser.com" - } - ], - "description": "Generates and reads the wp-config.php file.", - "homepage": "https://github.com/wp-cli/config-command", - "time": "2019-04-25T00:28:22+00:00" - }, - { - "name": "wp-cli/core-command", - "version": "v2.0.6", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/core-command.git", - "reference": "14634828e559f69e2525fa9489635f301783aee8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/core-command/zipball/14634828e559f69e2525fa9489635f301783aee8", - "reference": "14634828e559f69e2525fa9489635f301783aee8", - "shasum": "" - }, - "require": { - "composer/semver": "^1.4", - "wp-cli/wp-cli": "^2.2" - }, - "require-dev": { - "wp-cli/checksum-command": "^1 || ^2", - "wp-cli/db-command": "^1.3 || ^2", - "wp-cli/entity-command": "^1.3 || ^2", - "wp-cli/extension-command": "^1.2 || ^2", - "wp-cli/wp-cli-tests": "^2.1" - }, - "type": "wp-cli-package", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "bundled": true, - "commands": [ - "core", - "core check-update", - "core download", - "core install", - "core is-installed", - "core multisite-convert", - "core multisite-install", - "core update", - "core update-db", - "core version" - ] - }, - "autoload": { - "psr-4": { - "": "src/" - }, - "files": [ - "core-command.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Bachhuber", - "email": "daniel@runcommand.io", - "homepage": "https://runcommand.io" - } - ], - "description": "Downloads, installs, updates, and manages a WordPress installation.", - "homepage": "https://github.com/wp-cli/core-command", - "time": "2019-04-25T05:45:44+00:00" - }, - { - "name": "wp-cli/cron-command", - "version": "v2.0.3", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/cron-command.git", - "reference": "b6d0c8ff69cc56d5316a35a7a2fcc314c4069585" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/cron-command/zipball/b6d0c8ff69cc56d5316a35a7a2fcc314c4069585", - "reference": "b6d0c8ff69cc56d5316a35a7a2fcc314c4069585", - "shasum": "" - }, - "require": { - "wp-cli/wp-cli": "^2" - }, - "require-dev": { - "wp-cli/entity-command": "^1.3 || ^2", - "wp-cli/wp-cli-tests": "^2.1" - }, - "type": "wp-cli-package", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "bundled": true, - "commands": [ - "cron", - "cron test", - "cron event", - "cron event delete", - "cron event list", - "cron event run", - "cron event schedule", - "cron schedule", - "cron schedule list" - ] - }, - "autoload": { - "psr-4": { - "": "src/" - }, - "files": [ - "cron-command.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Bachhuber", - "email": "daniel@runcommand.io", - "homepage": "https://runcommand.io" - } - ], - "description": "Tests, runs, and deletes WP-Cron events; manages WP-Cron schedules.", - "homepage": "https://github.com/wp-cli/cron-command", - "time": "2019-04-24T07:31:46+00:00" - }, - { - "name": "wp-cli/db-command", - "version": "v2.0.3", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/db-command.git", - "reference": "dc0f8e4d5783d8a4ee01da1119b8fe8038fe1aa0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/db-command/zipball/dc0f8e4d5783d8a4ee01da1119b8fe8038fe1aa0", - "reference": "dc0f8e4d5783d8a4ee01da1119b8fe8038fe1aa0", - "shasum": "" - }, - "require": { - "wp-cli/wp-cli": "^2" - }, - "require-dev": { - "wp-cli/entity-command": "^1.3 || ^2", - "wp-cli/wp-cli-tests": "^2.1" - }, - "type": "wp-cli-package", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "bundled": true, - "commands": [ - "db", - "db clean", - "db create", - "db drop", - "db reset", - "db check", - "db optimize", - "db prefix", - "db repair", - "db cli", - "db query", - "db export", - "db import", - "db search", - "db tables", - "db size", - "db columns" - ] - }, - "autoload": { - "psr-4": { - "": "src/" - }, - "files": [ - "db-command.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Bachhuber", - "email": "daniel@runcommand.io", - "homepage": "https://runcommand.io" - } - ], - "description": "Performs basic database operations using credentials stored in wp-config.php.", - "homepage": "https://github.com/wp-cli/db-command", - "time": "2019-04-25T00:28:40+00:00" - }, - { - "name": "wp-cli/embed-command", - "version": "v2.0.3", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/embed-command.git", - "reference": "ce0c86217d9c0500666bd986ab17cae0ae33a41b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/embed-command/zipball/ce0c86217d9c0500666bd986ab17cae0ae33a41b", - "reference": "ce0c86217d9c0500666bd986ab17cae0ae33a41b", - "shasum": "" - }, - "require": { - "wp-cli/wp-cli": "^2" - }, - "require-dev": { - "wp-cli/entity-command": "^1.3 || ^2", - "wp-cli/wp-cli-tests": "^2.1" - }, - "type": "wp-cli-package", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "bundled": true, - "commands": [ - "embed", - "embed fetch", - "embed provider", - "embed provider list", - "embed provider match", - "embed handler", - "embed handler list", - "embed cache", - "embed cache clear", - "embed cache find", - "embed cache trigger" - ] - }, - "autoload": { - "psr-4": { - "WP_CLI\\Embeds\\": "src/" - }, - "files": [ - "embed-command.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Pascal Birchler", - "homepage": "https://pascalbirchler.com/" - } - ], - "description": "Inspects oEmbed providers, clears embed cache, and more.", - "homepage": "https://github.com/wp-cli/embed-command", - "time": "2019-04-25T00:28:56+00:00" - }, - { - "name": "wp-cli/entity-command", - "version": "v2.0.6", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/entity-command.git", - "reference": "250ed0da61162819f601fa110251c7e4c5173f27" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/entity-command/zipball/250ed0da61162819f601fa110251c7e4c5173f27", - "reference": "250ed0da61162819f601fa110251c7e4c5173f27", - "shasum": "" - }, - "require": { - "wp-cli/wp-cli": "^2" - }, - "require-dev": { - "wp-cli/cache-command": "^1 || ^2", - "wp-cli/db-command": "^1.3 || ^2", - "wp-cli/extension-command": "^1.2 || ^2", - "wp-cli/media-command": "^1.1 || ^2", - "wp-cli/wp-cli-tests": "^2.1" - }, - "type": "wp-cli-package", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "bundled": true, - "commands": [ - "comment", - "comment approve", - "comment count", - "comment create", - "comment delete", - "comment exists", - "comment generate", - "comment get", - "comment list", - "comment meta", - "comment meta add", - "comment meta delete", - "comment meta get", - "comment meta list", - "comment meta patch", - "comment meta pluck", - "comment meta update", - "comment recount", - "comment spam", - "comment status", - "comment trash", - "comment unapprove", - "comment unspam", - "comment untrash", - "comment update", - "menu", - "menu create", - "menu delete", - "menu item", - "menu item add-custom", - "menu item add-post", - "menu item add-term", - "menu item delete", - "menu item list", - "menu item update", - "menu list", - "menu location", - "menu location assign", - "menu location list", - "menu location remove", - "network meta", - "network meta add", - "network meta delete", - "network meta get", - "network meta list", - "network meta patch", - "network meta pluck", - "network meta update", - "option", - "option add", - "option delete", - "option get", - "option list", - "option patch", - "option pluck", - "option update", - "post", - "post create", - "post delete", - "post edit", - "post exists", - "post generate", - "post get", - "post list", - "post meta", - "post meta add", - "post meta delete", - "post meta get", - "post meta list", - "post meta patch", - "post meta pluck", - "post meta update", - "post term", - "post term add", - "post term list", - "post term remove", - "post term set", - "post update", - "post-type", - "post-type get", - "post-type list", - "site", - "site activate", - "site archive", - "site create", - "site deactivate", - "site delete", - "site empty", - "site list", - "site mature", - "site option", - "site private", - "site public", - "site spam", - "site unarchive", - "site unmature", - "site unspam", - "taxonomy", - "taxonomy get", - "taxonomy list", - "term", - "term create", - "term delete", - "term generate", - "term get", - "term list", - "term meta", - "term meta add", - "term meta delete", - "term meta get", - "term meta list", - "term meta patch", - "term meta pluck", - "term meta update", - "term recount", - "term update", - "user", - "user add-cap", - "user add-role", - "user create", - "user delete", - "user generate", - "user get", - "user import-csv", - "user list", - "user list-caps", - "user meta", - "user meta add", - "user meta delete", - "user meta get", - "user meta list", - "user meta patch", - "user meta pluck", - "user meta update", - "user remove-cap", - "user remove-role", - "user reset-password", - "user session", - "user session destroy", - "user session list", - "user set-role", - "user spam", - "user term", - "user term add", - "user term list", - "user term remove", - "user term set", - "user unspam", - "user update" - ] - }, - "autoload": { - "psr-4": { - "": "src/", - "WP_CLI\\": "src/WP_CLI" - }, - "files": [ - "entity-command.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Bachhuber", - "email": "daniel@runcommand.io", - "homepage": "https://runcommand.io" - } - ], - "description": "Manage WordPress comments, menus, options, posts, sites, terms, and users.", - "homepage": "https://github.com/wp-cli/entity-command", - "time": "2019-04-25T04:51:40+00:00" - }, - { - "name": "wp-cli/eval-command", - "version": "v2.0.4", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/eval-command.git", - "reference": "47a4f1a910b6d88f090d776a80d893cf19ca2047" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/eval-command/zipball/47a4f1a910b6d88f090d776a80d893cf19ca2047", - "reference": "47a4f1a910b6d88f090d776a80d893cf19ca2047", - "shasum": "" - }, - "require": { - "wp-cli/wp-cli": "^2" - }, - "require-dev": { - "wp-cli/wp-cli-tests": "^2.1" - }, - "type": "wp-cli-package", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "bundled": true, - "commands": [ - "eval", - "eval-file" - ] - }, - "autoload": { - "psr-4": { - "": "src/" - }, - "files": [ - "eval-command.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Bachhuber", - "email": "daniel@runcommand.io", - "homepage": "https://runcommand.io" - } - ], - "description": "Executes arbitrary PHP code or files.", - "homepage": "https://github.com/wp-cli/eval-command", - "time": "2019-04-20T18:22:05+00:00" - }, - { - "name": "wp-cli/export-command", - "version": "v2.0.2", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/export-command.git", - "reference": "941acde17ec056e7aaeb041ecaed7869f2e64801" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/export-command/zipball/941acde17ec056e7aaeb041ecaed7869f2e64801", - "reference": "941acde17ec056e7aaeb041ecaed7869f2e64801", - "shasum": "" - }, - "require": { - "nb/oxymel": "~0.1.0", - "wp-cli/wp-cli": "^2" - }, - "require-dev": { - "wp-cli/db-command": "^1.3 || ^2", - "wp-cli/entity-command": "^1.3 || ^2", - "wp-cli/extension-command": "^1.2 || ^2", - "wp-cli/import-command": "^1 || ^2", - "wp-cli/wp-cli-tests": "^2.1" - }, - "type": "wp-cli-package", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "bundled": true, - "commands": [ - "export" - ] - }, - "autoload": { - "psr-4": { - "": "src/" - }, - "files": [ - "export-command.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Bachhuber", - "email": "daniel@runcommand.io", - "homepage": "https://runcommand.io" - } - ], - "description": "Exports WordPress content to a WXR file.", - "homepage": "https://github.com/wp-cli/export-command", - "time": "2019-04-24T19:55:58+00:00" - }, - { - "name": "wp-cli/extension-command", - "version": "v2.0.5", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/extension-command.git", - "reference": "10b6f9d988f8972bfbf3e8d0483f61f2c338ed6d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/extension-command/zipball/10b6f9d988f8972bfbf3e8d0483f61f2c338ed6d", - "reference": "10b6f9d988f8972bfbf3e8d0483f61f2c338ed6d", - "shasum": "" - }, - "require": { - "composer/semver": "^1.4", - "wp-cli/wp-cli": "^2" - }, - "require-dev": { - "wp-cli/entity-command": "^1.3 || ^2", - "wp-cli/scaffold-command": "^1.2 || ^2", - "wp-cli/wp-cli-tests": "^2.1" - }, - "type": "wp-cli-package", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "bundled": true, - "commands": [ - "plugin", - "plugin activate", - "plugin deactivate", - "plugin delete", - "plugin get", - "plugin install", - "plugin is-installed", - "plugin list", - "plugin path", - "plugin search", - "plugin status", - "plugin toggle", - "plugin uninstall", - "plugin update", - "theme", - "theme activate", - "theme delete", - "theme disable", - "theme enable", - "theme get", - "theme install", - "theme is-installed", - "theme list", - "theme mod", - "theme mod get", - "theme mod set", - "theme mod remove", - "theme path", - "theme search", - "theme status", - "theme update", - "theme mod list" - ] - }, - "autoload": { - "psr-4": { - "": "src/" - }, - "files": [ - "extension-command.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Bachhuber", - "email": "daniel@runcommand.io", - "homepage": "https://runcommand.io" - } - ], - "description": "Manages plugins and themes, including installs, activations, and updates.", - "homepage": "https://github.com/wp-cli/extension-command", - "time": "2019-04-25T00:29:33+00:00" - }, - { - "name": "wp-cli/i18n-command", - "version": "v2.1.2", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/i18n-command.git", - "reference": "e52a9a602772339a0f844bd5e9a9ac8cc8b490ea" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/i18n-command/zipball/e52a9a602772339a0f844bd5e9a9ac8cc8b490ea", - "reference": "e52a9a602772339a0f844bd5e9a9ac8cc8b490ea", - "shasum": "" - }, - "require": { - "gettext/gettext": "^4.6", - "mck89/peast": "^1.8", - "wp-cli/wp-cli": "^2" - }, - "require-dev": { - "wp-cli/scaffold-command": "^1.2 || ^2", - "wp-cli/wp-cli-tests": "^2.1" - }, - "type": "wp-cli-package", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "bundled": true, - "commands": [ - "i18n", - "i18n make-pot", - "i18n make-json" - ] - }, - "autoload": { - "psr-4": { - "WP_CLI\\I18n\\": "src/" - }, - "files": [ - "i18n-command.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Pascal Birchler", - "homepage": "https://pascalbirchler.com/" - } - ], - "description": "Provides internationalization tools for WordPress projects.", - "homepage": "https://github.com/wp-cli/i18n-command", - "time": "2019-04-25T00:31:04+00:00" - }, - { - "name": "wp-cli/import-command", - "version": "v2.0.2", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/import-command.git", - "reference": "e28a7f55138ceb53f2ff5926874d8e5582c87db8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/import-command/zipball/e28a7f55138ceb53f2ff5926874d8e5582c87db8", - "reference": "e28a7f55138ceb53f2ff5926874d8e5582c87db8", - "shasum": "" - }, - "require": { - "wp-cli/wp-cli": "^2" - }, - "require-dev": { - "wp-cli/entity-command": "^1.3 || ^2", - "wp-cli/export-command": "^1 || ^2", - "wp-cli/extension-command": "^1.2 || ^2", - "wp-cli/wp-cli-tests": "^2.1" - }, - "type": "wp-cli-package", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "bundled": true, - "commands": [ - "import" - ] - }, - "autoload": { - "psr-4": { - "": "src/" - }, - "files": [ - "import-command.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Bachhuber", - "email": "daniel@runcommand.io", - "homepage": "https://runcommand.io" - } - ], - "description": "Imports content from a given WXR file.", - "homepage": "https://github.com/wp-cli/import-command", - "time": "2019-04-19T14:32:57+00:00" - }, - { - "name": "wp-cli/language-command", - "version": "v2.0.4", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/language-command.git", - "reference": "12197674eab3e1263fcadc9670cb57e916615c6c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/language-command/zipball/12197674eab3e1263fcadc9670cb57e916615c6c", - "reference": "12197674eab3e1263fcadc9670cb57e916615c6c", - "shasum": "" - }, - "require": { - "wp-cli/wp-cli": "^2" - }, - "require-dev": { - "wp-cli/db-command": "^1.3 || ^2", - "wp-cli/entity-command": "^1.3 || ^2", - "wp-cli/extension-command": "^1.2 || ^2", - "wp-cli/wp-cli-tests": "^2.1" - }, - "type": "wp-cli-package", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "bundled": true, - "commands": [ - "language", - "language core", - "language core activate", - "language core is-installed", - "language core install", - "language core list", - "language core uninstall", - "language core update", - "language plugin", - "language plugin is-installed", - "language plugin install", - "language plugin list", - "language plugin uninstall", - "language plugin update", - "language theme", - "language theme is-installed", - "language theme install", - "language theme list", - "language theme uninstall", - "language theme update" - ] - }, - "autoload": { - "psr-4": { - "": "src/" - }, - "files": [ - "language-command.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Bachhuber", - "email": "daniel@runcommand.io", - "homepage": "https://runcommand.io" - } - ], - "description": "Installs, activates, and manages language packs.", - "homepage": "https://github.com/wp-cli/language-command", - "time": "2019-04-25T00:31:43+00:00" - }, - { - "name": "wp-cli/maintenance-mode-command", - "version": "v2.0.1", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/maintenance-mode-command.git", - "reference": "db4671c14ea4c0c42f423a09cf8e9303778bb1a4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/maintenance-mode-command/zipball/db4671c14ea4c0c42f423a09cf8e9303778bb1a4", - "reference": "db4671c14ea4c0c42f423a09cf8e9303778bb1a4", - "shasum": "" - }, - "require": { - "wp-cli/wp-cli": "^2" - }, - "require-dev": { - "wp-cli/wp-cli-tests": "^2.1" - }, - "type": "wp-cli-package", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "bundled": true, - "commands": [ - "maintenance-mode", - "maintenance-mode activate", - "maintenance-mode deactivate", - "maintenance-mode status", - "maintenance-mode is-active" - ] - }, - "autoload": { - "psr-4": { - "WP_CLI\\MaintenanceMode\\": "src/" - }, - "files": [ - "maintenance-mode-command.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Thrijith Thankachan", - "email": "thrijith13@gmail.com", - "homepage": "https://thrijith.com" - } - ], - "description": "Activates, deactivates or checks the status of the maintenance mode of a site.", - "homepage": "https://github.com/wp-cli/maintenance-mode-command", - "time": "2019-04-19T15:37:30+00:00" - }, - { - "name": "wp-cli/media-command", - "version": "v2.0.3", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/media-command.git", - "reference": "68e2402dcef11ae10e8902cf93a1d370db07ed78" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/media-command/zipball/68e2402dcef11ae10e8902cf93a1d370db07ed78", - "reference": "68e2402dcef11ae10e8902cf93a1d370db07ed78", - "shasum": "" - }, - "require": { - "wp-cli/wp-cli": "^2" - }, - "require-dev": { - "wp-cli/entity-command": "^1.3 || ^2", - "wp-cli/wp-cli-tests": "^2.1" - }, - "type": "wp-cli-package", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "bundled": true, - "commands": [ - "media", - "media import", - "media regenerate", - "media image-size" - ] - }, - "autoload": { - "psr-4": { - "": "src/" - }, - "files": [ - "media-command.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Bachhuber", - "email": "daniel@runcommand.io", - "homepage": "https://runcommand.io" - } - ], - "description": "Imports files as attachments, regenerates thumbnails, or lists registered image sizes.", - "homepage": "https://github.com/wp-cli/media-command", - "time": "2019-04-21T04:50:58+00:00" - }, - { - "name": "wp-cli/mustangostang-spyc", - "version": "0.6.3", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/spyc.git", - "reference": "6aa0b4da69ce9e9a2c8402dab8d43cf32c581cc7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/spyc/zipball/6aa0b4da69ce9e9a2c8402dab8d43cf32c581cc7", - "reference": "6aa0b4da69ce9e9a2c8402dab8d43cf32c581cc7", - "shasum": "" - }, - "require": { - "php": ">=5.3.1" - }, - "require-dev": { - "phpunit/phpunit": "4.3.*@dev" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.5.x-dev" - } - }, - "autoload": { - "psr-4": { - "Mustangostang\\": "src/" - }, - "files": [ - "includes/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "mustangostang", - "email": "vlad.andersen@gmail.com" - } - ], - "description": "A simple YAML loader/dumper class for PHP (WP-CLI fork)", - "homepage": "https://github.com/mustangostang/spyc/", - "time": "2017-04-25T11:26:20+00:00" - }, - { - "name": "wp-cli/package-command", - "version": "v2.0.5", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/package-command.git", - "reference": "52fea16f3cec0577b9c417a19ebc0f328c38d853" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/package-command/zipball/52fea16f3cec0577b9c417a19ebc0f328c38d853", - "reference": "52fea16f3cec0577b9c417a19ebc0f328c38d853", - "shasum": "" - }, - "require": { - "composer/composer": ">=1.2.0 <1.7.0 || ^1.7.1", - "ext-json": "*", - "wp-cli/wp-cli": "^2.1" - }, - "require-dev": { - "wp-cli/scaffold-command": "^1 || ^2", - "wp-cli/wp-cli-tests": "^2.1" - }, - "type": "wp-cli-package", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "bundled": true, - "commands": [ - "package", - "package browse", - "package install", - "package list", - "package update", - "package uninstall" - ] - }, - "autoload": { - "psr-4": { - "": "src/" - }, - "files": [ - "package-command.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Bachhuber", - "email": "daniel@runcommand.io", - "homepage": "https://runcommand.io" - } - ], - "description": "Lists, installs, and removes WP-CLI packages.", - "homepage": "https://github.com/wp-cli/package-command", - "time": "2019-04-24T09:34:35+00:00" - }, - { - "name": "wp-cli/php-cli-tools", - "version": "v0.11.11", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/php-cli-tools.git", - "reference": "fe9c7c44a9e1bf2196ec51dc38da0593dbf2993f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/php-cli-tools/zipball/fe9c7c44a9e1bf2196ec51dc38da0593dbf2993f", - "reference": "fe9c7c44a9e1bf2196ec51dc38da0593dbf2993f", - "shasum": "" - }, - "require": { - "php": ">= 5.3.0" - }, - "type": "library", - "autoload": { - "psr-0": { - "cli": "lib/" - }, - "files": [ - "lib/cli/cli.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "James Logsdon", - "email": "jlogsdon@php.net", - "role": "Developer" - }, - { - "name": "Daniel Bachhuber", - "email": "daniel@handbuilt.co", - "role": "Maintainer" - } - ], - "description": "Console utilities for PHP", - "homepage": "http://github.com/wp-cli/php-cli-tools", - "keywords": [ - "cli", - "console" - ], - "time": "2018-09-04T13:28:00+00:00" - }, - { - "name": "wp-cli/rewrite-command", - "version": "v2.0.3", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/rewrite-command.git", - "reference": "eb8cbcf9c1c874a09b50257a0e588c31f29df597" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/rewrite-command/zipball/eb8cbcf9c1c874a09b50257a0e588c31f29df597", - "reference": "eb8cbcf9c1c874a09b50257a0e588c31f29df597", - "shasum": "" - }, - "require": { - "wp-cli/wp-cli": "^2" - }, - "require-dev": { - "wp-cli/entity-command": "^1.3 || ^2", - "wp-cli/wp-cli-tests": "^2.1" - }, - "type": "wp-cli-package", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "bundled": true, - "commands": [ - "rewrite", - "rewrite flush", - "rewrite list", - "rewrite structure" - ] - }, - "autoload": { - "psr-4": { - "": "src/" - }, - "files": [ - "rewrite-command.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Bachhuber", - "email": "daniel@runcommand.io", - "homepage": "https://runcommand.io" - } - ], - "description": "Lists or flushes the site's rewrite rules, updates the permalink structure.", - "homepage": "https://github.com/wp-cli/rewrite-command", - "time": "2019-04-25T00:32:04+00:00" - }, - { - "name": "wp-cli/role-command", - "version": "v2.0.2", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/role-command.git", - "reference": "c6071d06d64c165588734b0d1c96f5c3dfa75736" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/role-command/zipball/c6071d06d64c165588734b0d1c96f5c3dfa75736", - "reference": "c6071d06d64c165588734b0d1c96f5c3dfa75736", - "shasum": "" - }, - "require": { - "wp-cli/wp-cli": "^2" - }, - "require-dev": { - "wp-cli/wp-cli-tests": "^2.1" - }, - "type": "wp-cli-package", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "bundled": true, - "commands": [ - "role", - "role create", - "role delete", - "role exists", - "role list", - "role reset", - "cap", - "cap add", - "cap list", - "cap remove" - ] - }, - "autoload": { - "psr-4": { - "": "src/" - }, - "files": [ - "role-command.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Bachhuber", - "email": "daniel@runcommand.io", - "homepage": "https://runcommand.io" - } - ], - "description": "Adds, removes, lists, and resets roles and capabilities.", - "homepage": "https://github.com/wp-cli/role-command", - "time": "2019-04-25T00:32:18+00:00" - }, - { - "name": "wp-cli/scaffold-command", - "version": "v2.0.6", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/scaffold-command.git", - "reference": "9c6450e9ccf2d032913fced69f3188bc8ec4e3e6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/scaffold-command/zipball/9c6450e9ccf2d032913fced69f3188bc8ec4e3e6", - "reference": "9c6450e9ccf2d032913fced69f3188bc8ec4e3e6", - "shasum": "" - }, - "require": { - "wp-cli/wp-cli": "^2" - }, - "require-dev": { - "wp-cli/extension-command": "^1.2 || ^2", - "wp-cli/wp-cli-tests": "^2.1" - }, - "type": "wp-cli-package", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "bundled": true, - "commands": [ - "scaffold", - "scaffold underscores", - "scaffold block", - "scaffold child-theme", - "scaffold plugin", - "scaffold plugin-tests", - "scaffold post-type", - "scaffold taxonomy", - "scaffold theme-tests" - ] - }, - "autoload": { - "psr-4": { - "": "src/" - }, - "files": [ - "scaffold-command.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Bachhuber", - "email": "daniel@runcommand.io", - "homepage": "https://runcommand.io" - } - ], - "description": "Generates code for post types, taxonomies, blocks, plugins, child themes, etc.", - "homepage": "https://github.com/wp-cli/scaffold-command", - "time": "2019-04-25T00:44:34+00:00" - }, - { - "name": "wp-cli/search-replace-command", - "version": "v2.0.3", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/search-replace-command.git", - "reference": "7d02c54facf039577ff13c7b7bb100e4757d85fd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/search-replace-command/zipball/7d02c54facf039577ff13c7b7bb100e4757d85fd", - "reference": "7d02c54facf039577ff13c7b7bb100e4757d85fd", - "shasum": "" - }, - "require": { - "wp-cli/wp-cli": "^2" - }, - "require-dev": { - "wp-cli/db-command": "^1.3 || ^2", - "wp-cli/entity-command": "^1.3 || ^2", - "wp-cli/extension-command": "^1.2 || ^2", - "wp-cli/wp-cli-tests": "^2.1" - }, - "type": "wp-cli-package", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "bundled": true, - "commands": [ - "search-replace" - ] - }, - "autoload": { - "psr-4": { - "": "src/" - }, - "files": [ - "search-replace-command.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Bachhuber", - "email": "daniel@runcommand.io", - "homepage": "https://runcommand.io" - } - ], - "description": "Searches/replaces strings in the database.", - "homepage": "https://github.com/wp-cli/search-replace-command", - "time": "2019-04-25T00:32:46+00:00" - }, - { - "name": "wp-cli/server-command", - "version": "v2.0.2", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/server-command.git", - "reference": "c900a1036c29991420296b66a14ed771245c61a2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/server-command/zipball/c900a1036c29991420296b66a14ed771245c61a2", - "reference": "c900a1036c29991420296b66a14ed771245c61a2", - "shasum": "" - }, - "require": { - "wp-cli/wp-cli": "^2" - }, - "require-dev": { - "wp-cli/wp-cli-tests": "^2.1" - }, - "type": "wp-cli-package", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "bundled": true, - "commands": [ - "server" - ] - }, - "autoload": { - "psr-4": { - "": "src/" - }, - "files": [ - "server-command.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Bachhuber", - "email": "daniel@runcommand.io", - "homepage": "https://runcommand.io" - } - ], - "description": "Launches PHP's built-in web server for a specific WordPress installation.", - "homepage": "https://github.com/wp-cli/server-command", - "time": "2019-04-21T09:58:15+00:00" - }, - { - "name": "wp-cli/shell-command", - "version": "v2.0.3", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/shell-command.git", - "reference": "56f0ff1bc36f6da2fb73cb932214adcde58270d8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/shell-command/zipball/56f0ff1bc36f6da2fb73cb932214adcde58270d8", - "reference": "56f0ff1bc36f6da2fb73cb932214adcde58270d8", - "shasum": "" - }, - "require": { - "wp-cli/wp-cli": "^2" - }, - "require-dev": { - "wp-cli/wp-cli-tests": "^2.1" - }, - "type": "wp-cli-package", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "bundled": true, - "commands": [ - "shell" - ] - }, - "autoload": { - "psr-4": { - "": "src/", - "WP_CLI\\": "src/WP_CLI" - }, - "files": [ - "shell-command.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Bachhuber", - "email": "daniel@runcommand.io", - "homepage": "https://runcommand.io" - } - ], - "description": "Opens an interactive PHP console for running and testing PHP code.", - "homepage": "https://github.com/wp-cli/shell-command", - "time": "2019-04-22T13:16:49+00:00" - }, - { - "name": "wp-cli/super-admin-command", - "version": "v2.0.2", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/super-admin-command.git", - "reference": "bd1543c9a3360d0e21d7e00e1c597964bd805d7c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/super-admin-command/zipball/bd1543c9a3360d0e21d7e00e1c597964bd805d7c", - "reference": "bd1543c9a3360d0e21d7e00e1c597964bd805d7c", - "shasum": "" - }, - "require": { - "wp-cli/wp-cli": "^2" - }, - "require-dev": { - "wp-cli/entity-command": "^1.3 || ^2", - "wp-cli/wp-cli-tests": "^2.1" - }, - "type": "wp-cli-package", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "bundled": true, - "commands": [ - "super-admin", - "super-admin add", - "super-admin list", - "super-admin remove" - ] - }, - "autoload": { - "psr-4": { - "": "src/" - }, - "files": [ - "super-admin-command.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Bachhuber", - "email": "daniel@runcommand.io", - "homepage": "https://runcommand.io" - } - ], - "description": "Lists, adds, or removes super admin users on a multisite installation.", - "homepage": "https://github.com/wp-cli/super-admin-command", - "time": "2019-04-20T20:47:36+00:00" - }, - { - "name": "wp-cli/widget-command", - "version": "v2.0.2", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/widget-command.git", - "reference": "58a1b2d2221cee852eb8a589535aaadb1217bb74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/widget-command/zipball/58a1b2d2221cee852eb8a589535aaadb1217bb74", - "reference": "58a1b2d2221cee852eb8a589535aaadb1217bb74", - "shasum": "" - }, - "require": { - "wp-cli/wp-cli": "^2" - }, - "require-dev": { - "wp-cli/extension-command": "^1.2 || ^2", - "wp-cli/wp-cli-tests": "^2.1" - }, - "type": "wp-cli-package", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "bundled": true, - "commands": [ - "widget", - "widget add", - "widget deactivate", - "widget delete", - "widget list", - "widget move", - "widget reset", - "widget update", - "sidebar", - "sidebar list" - ] - }, - "autoload": { - "psr-4": { - "": "src/" - }, - "files": [ - "widget-command.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Bachhuber", - "email": "daniel@runcommand.io", - "homepage": "https://runcommand.io" - } - ], - "description": "Adds, moves, and removes widgets; lists sidebars.", - "homepage": "https://github.com/wp-cli/widget-command", - "time": "2019-04-25T00:25:21+00:00" - }, - { - "name": "wp-cli/wp-cli", - "version": "v2.2.0", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/wp-cli.git", - "reference": "193f08f48585326bc1f1648349201531eeda2ee5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/wp-cli/zipball/193f08f48585326bc1f1648349201531eeda2ee5", - "reference": "193f08f48585326bc1f1648349201531eeda2ee5", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "mustache/mustache": "~2.4", - "php": "^5.4 || ^7.0", - "rmccue/requests": "~1.6", - "symfony/finder": ">2.7", - "wp-cli/mustangostang-spyc": "^0.6.3", - "wp-cli/php-cli-tools": "~0.11.2" - }, - "require-dev": { - "roave/security-advisories": "dev-master", - "wp-cli/db-command": "^1.3 || ^2", - "wp-cli/entity-command": "^1.2 || ^2", - "wp-cli/extension-command": "^1.1 || ^2", - "wp-cli/package-command": "^1 || ^2", - "wp-cli/wp-cli-tests": "^2.1" - }, - "suggest": { - "ext-readline": "Include for a better --prompt implementation", - "ext-zip": "Needed to support extraction of ZIP archives when doing downloads or updates" - }, - "bin": [ - "bin/wp", - "bin/wp.bat" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1.x-dev" - } - }, - "autoload": { - "psr-0": { - "WP_CLI": "php" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "WP-CLI framework", - "homepage": "https://wp-cli.org", - "keywords": [ - "cli", - "wordpress" - ], - "time": "2019-04-25T05:38:33+00:00" - }, - { - "name": "wp-cli/wp-cli-bundle", - "version": "v2.2.0", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/wp-cli-bundle.git", - "reference": "ddf9a236ef0d85fcc5336f8c87cebe0dd62ee81f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/wp-cli-bundle/zipball/ddf9a236ef0d85fcc5336f8c87cebe0dd62ee81f", - "reference": "ddf9a236ef0d85fcc5336f8c87cebe0dd62ee81f", - "shasum": "" - }, - "require": { - "php": ">=5.4", - "wp-cli/cache-command": "^2", - "wp-cli/checksum-command": "^2", - "wp-cli/config-command": "^2", - "wp-cli/core-command": "^2", - "wp-cli/cron-command": "^2", - "wp-cli/db-command": "^2", - "wp-cli/embed-command": "^2", - "wp-cli/entity-command": "^2", - "wp-cli/eval-command": "^2", - "wp-cli/export-command": "^2", - "wp-cli/extension-command": "^2", - "wp-cli/i18n-command": "^2", - "wp-cli/import-command": "^2", - "wp-cli/language-command": "^2", - "wp-cli/maintenance-mode-command": "^2", - "wp-cli/media-command": "^2", - "wp-cli/package-command": "^2", - "wp-cli/rewrite-command": "^2", - "wp-cli/role-command": "^2", - "wp-cli/scaffold-command": "^2", - "wp-cli/search-replace-command": "^2", - "wp-cli/server-command": "^2", - "wp-cli/shell-command": "^2", - "wp-cli/super-admin-command": "^2", - "wp-cli/widget-command": "^2", - "wp-cli/wp-cli": "^2.2" - }, - "require-dev": { - "roave/security-advisories": "dev-master", - "wp-cli/wp-cli-tests": "^2.1" - }, - "suggest": { - "psy/psysh": "Enhanced `wp shell` functionality" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1.x-dev" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "WP-CLI bundle package with default commands.", - "homepage": "https://wp-cli.org", - "keywords": [ - "cli", - "wordpress" - ], - "time": "2019-04-25T06:30:44+00:00" - }, - { - "name": "wp-cli/wp-config-transformer", - "version": "v1.2.5", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/wp-config-transformer.git", - "reference": "46c6c3622196c55ea9b94e735e8c408425de8944" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/wp-config-transformer/zipball/46c6c3622196c55ea9b94e735e8c408425de8944", - "reference": "46c6c3622196c55ea9b94e735e8c408425de8944", - "shasum": "" - }, - "require": { - "php": ">=5.3.29" - }, - "require-dev": { - "composer/composer": "^1.5.6", - "phpunit/phpunit": "^6.5.5", - "wp-coding-standards/wpcs": "^0.14.0" - }, - "type": "library", - "autoload": { - "files": [ - "src/WPConfigTransformer.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frankie Jarrett", - "email": "fjarrett@gmail.com" - } - ], - "description": "Programmatically edit a wp-config.php file.", - "time": "2019-04-01T15:03:00+00:00" - }, - { - "name": "xamin/handlebars.php", - "version": "v0.10.4", - "source": { - "type": "git", - "url": "https://github.com/XaminProject/handlebars.php.git", - "reference": "b85cee07eae96db0e1eec224ca90f5ce1e4d857a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/XaminProject/handlebars.php/zipball/b85cee07eae96db0e1eec224ca90f5ce1e4d857a", - "reference": "b85cee07eae96db0e1eec224ca90f5ce1e4d857a", - "shasum": "" - }, - "require-dev": { - "phpunit/phpunit": "~4.4", - "squizlabs/php_codesniffer": "~1.5" - }, - "type": "library", - "autoload": { - "psr-0": { - "Handlebars": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "fzerorubigd", - "email": "fzerorubigd@gmail.com" - }, - { - "name": "Behrooz Shabani (everplays)", - "email": "everplays@gmail.com" - } - ], - "description": "Handlebars processor for php", - "homepage": "https://github.com/XaminProject/handlebars.php", - "time": "2016-12-12T13:51:02+00:00" - } - ], - "packages-dev": [ - { - "name": "erusev/parsedown", - "version": "1.7.3", - "source": { - "type": "git", - "url": "https://github.com/erusev/parsedown.git", - "reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/erusev/parsedown/zipball/6d893938171a817f4e9bc9e86f2da1e370b7bcd7", - "reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35" - }, - "type": "library", - "autoload": { - "psr-0": { - "Parsedown": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Emanuil Rusev", - "email": "hello@erusev.com", - "homepage": "http://erusev.com" - } - ], - "description": "Parser for Markdown.", - "homepage": "http://parsedown.org", - "keywords": [ - "markdown", - "parser" - ], - "time": "2019-03-17T18:48:37+00:00" - }, - { - "name": "gajus/dindent", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/gajus/dindent.git", - "reference": "d81c3a6f78fbe1ab26f5e753098bbbef6b6a9f3c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/gajus/dindent/zipball/d81c3a6f78fbe1ab26f5e753098bbbef6b6a9f3c", - "reference": "d81c3a6f78fbe1ab26f5e753098bbbef6b6a9f3c", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "require-dev": { - "satooshi/php-coveralls": "dev-master" - }, - "type": "library", - "autoload": { - "psr-4": { - "Gajus\\Dindent\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Gajus Kuizinas", - "email": "gk@anuary.com" - } - ], - "description": "HTML indentation library for development and testing.", - "homepage": "https://github.com/gajus/dindent", - "keywords": [ - "format", - "html", - "indent" - ], - "time": "2014-10-08T10:03:04+00:00" - }, - { - "name": "lucatume/codeception-snapshot-assertions", - "version": "0.1.0", - "source": { - "type": "git", - "url": "https://github.com/lucatume/codeception-snapshot-assertions.git", - "reference": "0778c1612aa87a257728b0c1f4e360b7e2f4c72d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/lucatume/codeception-snapshot-assertions/zipball/0778c1612aa87a257728b0c1f4e360b7e2f4c72d", - "reference": "0778c1612aa87a257728b0c1f4e360b7e2f4c72d", - "shasum": "" - }, - "require": { - "codeception/codeception": ">=2.5.0", - "ext-dom": "*", - "gajus/dindent": "^2.0" - }, - "require-dev": { - "squizlabs/php_codesniffer": "*" - }, - "type": "library", - "autoload": { - "psr-4": { - "tad\\Codeception\\SnapshotAssertions\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "theAverageDev (Luca Tumedei)", - "email": "luca@theaveragedev.com" - } - ], - "description": "Snapshot assertions sugar for Codeception.", - "time": "2019-05-07T09:29:06+00:00" - }, - { - "name": "mikey179/vfsStream", - "version": "v1.6.6", - "source": { - "type": "git", - "url": "https://github.com/bovigo/vfsStream.git", - "reference": "095238a0711c974ae5b4ebf4c4534a23f3f6c99d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/bovigo/vfsStream/zipball/095238a0711c974ae5b4ebf4c4534a23f3f6c99d", - "reference": "095238a0711c974ae5b4ebf4c4534a23f3f6c99d", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6.x-dev" - } - }, - "autoload": { - "psr-0": { - "org\\bovigo\\vfs\\": "src/main/php" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Frank Kleine", - "homepage": "http://frankkleine.de/", - "role": "Developer" - } - ], - "description": "Virtual file system to mock the real file system in unit tests.", - "homepage": "http://vfs.bovigo.org/", - "time": "2019-04-08T13:54:32+00:00" - }, - { - "name": "squizlabs/php_codesniffer", - "version": "3.4.2", - "source": { - "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8", - "reference": "b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8", - "shasum": "" - }, - "require": { - "ext-simplexml": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" - }, - "bin": [ - "bin/phpcs", - "bin/phpcbf" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Greg Sherwood", - "role": "lead" - } - ], - "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", - "keywords": [ - "phpcs", - "standards" - ], - "time": "2019-04-10T23:49:02+00:00" - }, - { - "name": "victorjonsson/markdowndocs", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator.git", - "reference": "f1f70b2bb9a59d1447796b271286eb409c4a3a60" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/victorjonsson/PHP-Markdown-Documentation-Generator/zipball/f1f70b2bb9a59d1447796b271286eb409c4a3a60", - "reference": "f1f70b2bb9a59d1447796b271286eb409c4a3a60", - "shasum": "" - }, - "require": { - "php": ">=5.5.0", - "symfony/console": ">=2.6" - }, - "require-dev": { - "phpunit/phpunit": "3.7.23" - }, - "bin": [ - "bin/phpdoc-md" - ], - "type": "library", - "autoload": { - "psr-0": { - "PHPDocsMD": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Victor Jonsson", - "email": "kontakt@victorjonsson.se" - } - ], - "description": "Command line tool for generating markdown-formatted class documentation", - "homepage": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator", - "time": "2019-04-03T19:52:24+00:00" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": { - "victorjonsson/markdowndocs": 20 - }, - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": ">=5.6.0", - "ext-pdo": "*", - "ext-fileinfo": "*" - }, - "platform-dev": [] -} From 5aee8a59d7f8a7781fe90dea5a78a603730c00cc Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Fri, 10 May 2019 15:19:32 +0200 Subject: [PATCH 07/37] build(wp-browser-commons): internalize wp-browser-common dependency --- Makefile | 4 +- composer.json | 1 - grumphp.yml | 2 +- phpcs.xml | 5 + src/tad/WPBrowser/Adapters/WP.php | 66 +++++++ src/tad/WPBrowser/Environment/Constants.php | 37 ++++ src/tad/WPBrowser/Environment/Executor.php | 61 ++++++ src/tad/WPBrowser/Environment/System.php | 23 +++ .../FileReplacers/AbstractFileReplacer.php | 61 ++++++ .../FileReplacers/HtaccesReplacer.php | 9 + .../FileReplacers/WPConfigReplacer.php | 9 + src/tad/WPBrowser/Filesystem/Filesystem.php | 101 ++++++++++ src/tad/WPBrowser/Filesystem/Utils.php | 124 ++++++++++++ src/tad/WPBrowser/Generators/Blog.php | 24 +++ src/tad/WPBrowser/Generators/Comment.php | 52 +++++ src/tad/WPBrowser/Generators/Date.php | 72 +++++++ src/tad/WPBrowser/Generators/Links.php | 30 +++ src/tad/WPBrowser/Generators/Post.php | 122 ++++++++++++ .../Generators/RedirectingWPConfig.php | 57 ++++++ .../Generators/SubdomainHtaccess.php | 52 +++++ .../Generators/SubfolderHtaccess.php | 52 +++++ src/tad/WPBrowser/Generators/Tables.php | 154 +++++++++++++++ .../Generators/TemplateProviderInterface.php | 13 ++ src/tad/WPBrowser/Generators/User.php | 123 ++++++++++++ src/tad/WPBrowser/Generators/User/Roles.php | 20 ++ src/tad/WPBrowser/Generators/WpPassword.php | 34 ++++ .../templates/blog_versions.handlebars | 7 + .../Generators/templates/blogs.handlebars | 17 ++ .../templates/drop-blog-tables.handlebars | 10 + .../Generators/templates/new-blog.handlebars | 157 +++++++++++++++ .../templates/registration_log.handlebars | 8 + .../Generators/templates/signups.handlebars | 18 ++ .../Generators/templates/site.handlebars | 6 + .../Generators/templates/site_meta.handlebars | 8 + .../templates/subdomain-htaccess.handlebars | 13 ++ .../templates/subfolder-htaccess.handlebars | 13 ++ .../Generators/templates/users.handlebars | 4 + .../Services/Db/MySQLDumpFactory.php | 27 +++ .../Services/Db/MySQLDumpFactoryInterface.php | 17 ++ .../Services/Db/MySQLDumpInterface.php | 27 +++ .../WPBrowser/Services/WP/Bootstrapper.php | 112 +++++++++++ src/tad/WPBrowser/support/wpBootstrap.php | 21 ++ tests/_data/dump.sql | 24 +-- tests/_data/wploader-wpdb-dump.sql | 0 .../FileReplacers/WPConfigReplacerTest.php | 180 +++++++++++++++++ .../tad/WPBrowser/Filesystem/UtilsTest.php | 187 ++++++++++++++++++ .../Services/WP/BootstrapperTest.php | 133 +++++++++++++ 47 files changed, 2282 insertions(+), 15 deletions(-) create mode 100644 src/tad/WPBrowser/Adapters/WP.php create mode 100644 src/tad/WPBrowser/Environment/Constants.php create mode 100644 src/tad/WPBrowser/Environment/Executor.php create mode 100644 src/tad/WPBrowser/Environment/System.php create mode 100644 src/tad/WPBrowser/Filesystem/FileReplacers/AbstractFileReplacer.php create mode 100644 src/tad/WPBrowser/Filesystem/FileReplacers/HtaccesReplacer.php create mode 100644 src/tad/WPBrowser/Filesystem/FileReplacers/WPConfigReplacer.php create mode 100644 src/tad/WPBrowser/Filesystem/Filesystem.php create mode 100644 src/tad/WPBrowser/Filesystem/Utils.php create mode 100644 src/tad/WPBrowser/Generators/Blog.php create mode 100644 src/tad/WPBrowser/Generators/Comment.php create mode 100644 src/tad/WPBrowser/Generators/Date.php create mode 100644 src/tad/WPBrowser/Generators/Links.php create mode 100644 src/tad/WPBrowser/Generators/Post.php create mode 100644 src/tad/WPBrowser/Generators/RedirectingWPConfig.php create mode 100644 src/tad/WPBrowser/Generators/SubdomainHtaccess.php create mode 100644 src/tad/WPBrowser/Generators/SubfolderHtaccess.php create mode 100644 src/tad/WPBrowser/Generators/Tables.php create mode 100644 src/tad/WPBrowser/Generators/TemplateProviderInterface.php create mode 100644 src/tad/WPBrowser/Generators/User.php create mode 100644 src/tad/WPBrowser/Generators/User/Roles.php create mode 100644 src/tad/WPBrowser/Generators/WpPassword.php create mode 100644 src/tad/WPBrowser/Generators/templates/blog_versions.handlebars create mode 100644 src/tad/WPBrowser/Generators/templates/blogs.handlebars create mode 100644 src/tad/WPBrowser/Generators/templates/drop-blog-tables.handlebars create mode 100644 src/tad/WPBrowser/Generators/templates/new-blog.handlebars create mode 100644 src/tad/WPBrowser/Generators/templates/registration_log.handlebars create mode 100644 src/tad/WPBrowser/Generators/templates/signups.handlebars create mode 100644 src/tad/WPBrowser/Generators/templates/site.handlebars create mode 100644 src/tad/WPBrowser/Generators/templates/site_meta.handlebars create mode 100644 src/tad/WPBrowser/Generators/templates/subdomain-htaccess.handlebars create mode 100644 src/tad/WPBrowser/Generators/templates/subfolder-htaccess.handlebars create mode 100644 src/tad/WPBrowser/Generators/templates/users.handlebars create mode 100644 src/tad/WPBrowser/Services/Db/MySQLDumpFactory.php create mode 100644 src/tad/WPBrowser/Services/Db/MySQLDumpFactoryInterface.php create mode 100644 src/tad/WPBrowser/Services/Db/MySQLDumpInterface.php create mode 100644 src/tad/WPBrowser/Services/WP/Bootstrapper.php create mode 100644 src/tad/WPBrowser/support/wpBootstrap.php mode change 100644 => 100755 tests/_data/wploader-wpdb-dump.sql create mode 100644 tests/unit/tad/WPBrowser/Filesystem/FileReplacers/WPConfigReplacerTest.php create mode 100644 tests/unit/tad/WPBrowser/Filesystem/UtilsTest.php create mode 100644 tests/unit/tad/WPBrowser/Services/WP/BootstrapperTest.php diff --git a/Makefile b/Makefile index 524f32f6f..6fbafe64d 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,7 @@ COMPOSE_FILE ?= docker-compose.yml CODECEPTION_VERSION ?= "^2.5" PROJECT := $(shell basename ${CURDIR}) -.PHONY: wp_dump cs_sniff cs_fix cs_fix_n_sniff ci_before_install ci_before_script ci_docker_restart ci_install ci_local_prepare ci_run ci_script +.PHONY: wp_dump cs_sniff cs_fix cs_fix_n_sniff ci_before_install ci_before_script ci_docker_restart ci_install ci_local_prepare ci_run ci_script pre_commit define wp_config_extra if ( filter_has_var( INPUT_SERVER, 'HTTP_HOST' ) ) { @@ -241,3 +241,5 @@ sync_hosts_entries: remove_hosts_entries wp_dump: docker run -it --rm --volumes-from wpbrowser_wp --network container:wpbrowser_wp wordpress:cli wp db export \ /project/tests/_data/dump.sql + +pre_commit: lint cs_sniff diff --git a/composer.json b/composer.json index 149e4b3ae..ef527903a 100644 --- a/composer.json +++ b/composer.json @@ -20,7 +20,6 @@ "php": ">=5.6.0", "ext-pdo": "*", "ext-fileinfo": "*", - "lucatume/wp-browser-commons": "^1.0", "wp-cli/wp-cli-bundle": ">=2.0 <3.0.0", "symfony/process": ">=2.7 <5.0", "antecedent/patchwork": "^2.0", diff --git a/grumphp.yml b/grumphp.yml index 8f26559af..996caf490 100644 --- a/grumphp.yml +++ b/grumphp.yml @@ -1,4 +1,4 @@ parameters: tasks: make: - task: cs_sniff + task: pre_commit diff --git a/phpcs.xml b/phpcs.xml index fe20e9666..e7d8ad2ca 100644 --- a/phpcs.xml +++ b/phpcs.xml @@ -29,4 +29,9 @@ */Codeception/TestCase/* + + + src/tad/WPBrowser/Filesystem + src/tad/WPBrowser/Adapters + \ No newline at end of file diff --git a/src/tad/WPBrowser/Adapters/WP.php b/src/tad/WPBrowser/Adapters/WP.php new file mode 100644 index 000000000..683008eb0 --- /dev/null +++ b/src/tad/WPBrowser/Adapters/WP.php @@ -0,0 +1,66 @@ +realExec($command); + + return $return_var; + } + + public function execAndOutput($command, &$return_var) + { + list($output, $return_var) = $this->realExec($command); + + return $output; + } + + /** + * @param $command + * @return array + */ + protected function realExec($command) + { + $process = new Process($command); + $process->run(); + + if (! $process->isSuccessful()) { + throw new ProcessFailedException($process); + } + + codecept_debug($process->getOutput()); + + return array( $process->getOutput(), $process->getStatus() ); + } +} diff --git a/src/tad/WPBrowser/Environment/System.php b/src/tad/WPBrowser/Environment/System.php new file mode 100644 index 000000000..1e659e247 --- /dev/null +++ b/src/tad/WPBrowser/Environment/System.php @@ -0,0 +1,23 @@ +targetFile)) { + throw new ModuleConfigException(__CLASS__, 'Root path must contain a "' . $this->targetFile . '" file.'); + } + + $this->path = $path; + $this->contentsProvider = $contentsProvider; + $this->moved = $this->path . 'original-' . trim($this->targetFile, '.'); + $this->original = $this->path . $this->targetFile; + } + + public function replaceOriginal() + { + rename($this->original, $this->moved); + file_put_contents($this->original, $this->contentsProvider->getContents()); + } + + public function restoreOriginal() + { + unlink($this->original); + rename($this->moved, $this->original); + } +} diff --git a/src/tad/WPBrowser/Filesystem/FileReplacers/HtaccesReplacer.php b/src/tad/WPBrowser/Filesystem/FileReplacers/HtaccesReplacer.php new file mode 100644 index 000000000..b0c7db55a --- /dev/null +++ b/src/tad/WPBrowser/Filesystem/FileReplacers/HtaccesReplacer.php @@ -0,0 +1,9 @@ +getUserHome(); + if (!(empty($userHome) && false !== strpos($path, '~'))) { + $path = str_replace('~', $userHome, $path); + } + return $path; + } + + public static function untrailslashit($path) + { + if (!is_string($path)) { + throw new \InvalidArgumentException('Path must be a string'); + } + return $path !== DIRECTORY_SEPARATOR ? rtrim($path, DIRECTORY_SEPARATOR) : $path; + } + + public static function unleadslashit($path) + { + if (!is_string($path)) { + throw new \InvalidArgumentException('Path must be a string'); + } + return $path !== DIRECTORY_SEPARATOR ? ltrim($path, DIRECTORY_SEPARATOR) : $path; + } + + /** + * Recursively copies a source to a destination. + * + * @param string $source The absolute path to the source. + * @param string $destination The absolute path to the destination. + */ + public static function recurseCopy($source, $destination) + { + $dir = opendir($source); + @mkdir($destination); + while (false !== ($file = readdir($dir))) { + if (($file != '.') && ($file != '..')) { + if (is_dir($source . '/' . $file)) { + static::recurseCopy($source . '/' . $file, $destination . '/' . $file); + } else { + copy($source . '/' . $file, $destination . '/' . $file); + } + } + } + closedir($dir); + } + + /** + * Recursively deletes a target directory. + * + * @param string $target The absolute path to a directory to remove. + */ + public static function recurseRemoveDir($target) + { + if (!file_exists($target)) { + return; + } + + $dir = opendir($target); + while (false !== ($file = readdir($dir))) { + if (($file != '.') && ($file != '..')) { + $full = $target . '/' . $file; + if (is_dir($full)) { + static::recurseRemoveDir($full); + } else { + unlink($full); + } + } + } + closedir($dir); + rmdir($target); + } +} diff --git a/src/tad/WPBrowser/Generators/Blog.php b/src/tad/WPBrowser/Generators/Blog.php new file mode 100644 index 000000000..e3874c197 --- /dev/null +++ b/src/tad/WPBrowser/Generators/Blog.php @@ -0,0 +1,24 @@ + 1, + 'domain' => 'subdomain', + 'path' => '/', + 'registered' => Date::now(), + 'last_updated' => Date::now(), + 'public' => 1, + 'archived' => 0, + 'mature' => 0, + 'spam' => 0, + 'deleted' => 0, + 'lang_id' => 0 + ]; + } +} diff --git a/src/tad/WPBrowser/Generators/Comment.php b/src/tad/WPBrowser/Generators/Comment.php new file mode 100644 index 000000000..5f63526ff --- /dev/null +++ b/src/tad/WPBrowser/Generators/Comment.php @@ -0,0 +1,52 @@ + $comment_post_ID, + 'comment_author' => 'Mr WordPress', + 'comment_author_email' => '', + 'comment_author_url' => 'https://wordpress.org/', + 'comment_author_IP' => '', + 'comment_date' => Date::now(), + 'comment_date_gmt' => Date::gmtNow(), + 'comment_content' => $content, + 'comment_karma' => '0', + 'comment_approved' => '1', + 'comment_agent' => '', + 'comment_type' => '', + 'comment_parent' => 0, + 'user_id' => 0, + ]; + return $defaults; + } +} diff --git a/src/tad/WPBrowser/Generators/Date.php b/src/tad/WPBrowser/Generators/Date.php new file mode 100644 index 000000000..2fc04daad --- /dev/null +++ b/src/tad/WPBrowser/Generators/Date.php @@ -0,0 +1,72 @@ + 'http://wordpress.org', + 'link_name' => 'WordPress', + 'link_image' => '', + 'link_target' => '', + 'link_description' => '', + 'link_visible' => 'Y', + 'link_owner' => 1, + 'link_rating' => 0, + 'link_updated' => Date::now(), + 'link_rel' => '', + 'link_notes' => '', + 'link_rss' => '', + ]; + } +} diff --git a/src/tad/WPBrowser/Generators/Post.php b/src/tad/WPBrowser/Generators/Post.php new file mode 100644 index 000000000..e6be1e9d0 --- /dev/null +++ b/src/tad/WPBrowser/Generators/Post.php @@ -0,0 +1,122 @@ + 1, + 'post_date' => Date::now(), + 'post_date_gmt' => Date::gmtNow(), + 'post_content' => self::generateContent($id), + 'post_title' => $title, + 'post_excerpt' => self::generateExcerpt($id), + 'post_status' => 'publish', + 'comment_status' => 'open', + 'ping_status' => 'open', + 'post_password' => '', + 'post_name' => ( new Slugifier() )->slugify($title), + 'to_ping' => '', + 'pinged' => '', + 'post_modified' => Date::now(), + 'post_modified_gmt' => Date::gmtNow(), + 'post_content_filtered' => '', + 'post_parent' => 0, + 'guid' => "{$url}/?p={$id}", + 'menu_order' => 0, + 'post_type' => 'post' + ); + + return $defaults; + } + + /** + * Generates a page guid. + * + * @param int $ID The page id. + * @param string $url The site url. + * + * @return string The database guid entry. + */ + protected static function generatePageGuid( + $ID, + $url + ) { + $guid = rtrim($url, '/') . '/?page_id=' . $ID; + + return $guid; + } + + /** + * Generates a post guid. + * + * @param int $ID The post id. + * @param string $url The site url. + * + * @return string The database guid entry. + */ + protected static function generatePostGuid( + $ID, + $url + ) { + $guid = rtrim($url, '/') . '/?p=' . $ID; + + return $guid; + } + + public static function makePost($id, $url = 'http://www.example.com', array $data = [ ]) + { + return array_merge(self::getDefaults($id, $url), $data); + } + + /** + * @return string + */ + protected static function generateTitle($id) + { + return sprintf('Post %d title', $id); + } + + /** + * @return string + */ + protected static function generateContent($id) + { + return sprintf('Post %d content', $id); + } + + private static function generateExcerpt($id) + { + return sprintf('Post %d excerpt', $id); + } +} diff --git a/src/tad/WPBrowser/Generators/RedirectingWPConfig.php b/src/tad/WPBrowser/Generators/RedirectingWPConfig.php new file mode 100644 index 000000000..bc9419a8f --- /dev/null +++ b/src/tad/WPBrowser/Generators/RedirectingWPConfig.php @@ -0,0 +1,57 @@ + {{subdomainInstall}}, + 'siteDomain' => "{{siteDomain}}" +); +\$multisiteConstants = array( + 'WP_ALLOW_MULTISITE' => true, + 'MULTISITE' => true, + 'SUBDOMAIN_INSTALL' => \$options['subdomainInstall'], + 'DOMAIN_CURRENT_SITE' => \$options['siteDomain'], + 'PATH_CURRENT_SITE' => '/', + 'SITE_ID_CURRENT_SITE' => 1, + 'BLOG_ID_CURRENT_SITE' => 1 +); +foreach (\$multisiteConstants as \$multisiteConstant => \$value) { + if (!defined(\$multisiteConstant)) { + define(\$multisiteConstant, \$value); + } +} +\$original = dirname(__FILE__) . '/original-wp-config.php'; +if(file_exists(\$original)){ + include \$original; +} else { + die("origina-wp-config.php file not found in '\$original'"); +} +PHP; + + /** + * @var Handlebars + */ + private $handlebars; + /** + * @var array + */ + private $data; + + public function __construct(Handlebars $handlebars, array $data = [ ]) + { + $this->handlebars = $handlebars; + $this->data = $data; + } + + public function getContents() + { + return $this->handlebars->render($this->template, $this->data); + } +} diff --git a/src/tad/WPBrowser/Generators/SubdomainHtaccess.php b/src/tad/WPBrowser/Generators/SubdomainHtaccess.php new file mode 100644 index 000000000..d71e42053 --- /dev/null +++ b/src/tad/WPBrowser/Generators/SubdomainHtaccess.php @@ -0,0 +1,52 @@ +handlebars = $handlebars; + $this->data = $data; + } + + public function getContents() + { + return $this->handlebars->render($this->template, $this->data); + } +} diff --git a/src/tad/WPBrowser/Generators/SubfolderHtaccess.php b/src/tad/WPBrowser/Generators/SubfolderHtaccess.php new file mode 100644 index 000000000..a2788798e --- /dev/null +++ b/src/tad/WPBrowser/Generators/SubfolderHtaccess.php @@ -0,0 +1,52 @@ +handlebars = $handlebars; + $this->data = $data; + } + + public function getContents() + { + return $this->handlebars->render($this->template, $this->data); + } +} diff --git a/src/tad/WPBrowser/Generators/Tables.php b/src/tad/WPBrowser/Generators/Tables.php new file mode 100644 index 000000000..c03ce4d10 --- /dev/null +++ b/src/tad/WPBrowser/Generators/Tables.php @@ -0,0 +1,154 @@ +handlebars = $handlebars ?: new Handlebars(); + $this->templatesDir = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'templates'; + } + + public static function newBlogTables() + { + return [ + 'commentmeta', + 'comments', + 'links', + 'options', + 'postmeta', + 'posts', + 'term_relationships', + 'term_taxonomy', + 'termmeta', + 'terms' + ]; + } + + public function getAlterTableQuery($table, $prefix) + { + $data = [ 'operation' => 'ALTER TABLE', 'prefix' => $prefix ]; + return in_array($table, $this->alterableTables()) ? $this->renderQuery($table, $data) : ''; + } + + private function alterableTables() + { + return [ + 'users' + ]; + } + + /** + * @param $table + * @param $data + */ + protected function renderQuery($table, $data) + { + if (!in_array($table, $this->tables())) { + throw new \InvalidArgumentException('Table ' . $table . ' is not a multisite table name'); + } + + $template = $this->templates($table); + return $this->handlebars->render($template, $data); + } + + private function tables() + { + return array_merge([ ], $this->multisiteTables()); + } + + public static function multisiteTables() + { + return [ + 'blogs', + 'blog_versions', + 'sitemeta', + 'site', + 'signups', + 'registration_log' + ]; + } + + private function templates($table) + { + $map = [ + 'blogs' => function () { + return file_get_contents($this->templatesDir . DIRECTORY_SEPARATOR . ( 'blogs.handlebars' )); + }, + 'drop-blog-tables' => function () { + return file_get_contents($this->templatesDir . DIRECTORY_SEPARATOR . ( 'drop-blog-tables.handlebars' )); + }, + 'blog_versions' => function () { + return file_get_contents($this->templatesDir . DIRECTORY_SEPARATOR . ( 'blog_versions.handlebars' )); + }, + 'registration_log' => function () { + return file_get_contents($this->templatesDir . DIRECTORY_SEPARATOR . ( 'registration_log.handlebars' )); + }, + 'signups' => function () { + return file_get_contents($this->templatesDir . DIRECTORY_SEPARATOR . ( 'signups.handlebars' )); + }, + 'site' => function () { + return file_get_contents($this->templatesDir . DIRECTORY_SEPARATOR . ( 'site.handlebars' )); + }, + 'sitemeta' => function () { + return file_get_contents($this->templatesDir . DIRECTORY_SEPARATOR . ( 'site_meta.handlebars' )); + }, + 'users' => function () { + return file_get_contents($this->templatesDir . DIRECTORY_SEPARATOR . ( 'users.handlebars' )); + }, + 'new-blog' => function () { + return file_get_contents($this->templatesDir . DIRECTORY_SEPARATOR . ( 'new-blog.handlebars' )); + } + ]; + + return $map[$table](); + } + + public function getCreateTableQuery($table, $prefix) + { + $data = [ 'operation' => 'CREATE TABLE IF NOT EXISTS', 'prefix' => $prefix ]; + return $this->renderQuery($table, $data); + } + + public function getBlogScaffoldQuery($prefix, $blogId, array $data) + { + $template = $this->templates('new-blog'); + $data = array_merge([ + 'prefix' => $prefix, + 'blog_id' => $blogId, + 'scheme' => 'http' + ], $data); + + return $this->handlebars->render($template, $data); + } + + public function getBlogDropQuery($tablePrefix, $blogId) + { + $template = $this->templates('drop-blog-tables'); + $data = [ + 'prefix' => $tablePrefix, + 'blog_id' => $blogId + ]; + + return $this->handlebars->render($template, $data); + } +} diff --git a/src/tad/WPBrowser/Generators/TemplateProviderInterface.php b/src/tad/WPBrowser/Generators/TemplateProviderInterface.php new file mode 100644 index 000000000..2f39428dc --- /dev/null +++ b/src/tad/WPBrowser/Generators/TemplateProviderInterface.php @@ -0,0 +1,13 @@ + '0', + 'contributor' => '1', + 'author' => '2', + 'editor' => '7', + 'administrator' => '10' + ); + + /** + * Generates a user entry to be inserted in a WordPress database + * + * @param string $user_login The user slug + * @param string $role The user role + * @param array $userData The user data to use overriding defaults. + * @return array An array containing key\value pairs for the "wp_user_level" "usermeta" table entry, the "users" + * table entry, the "wp_capabilities" "usermeta" table entry. + */ + public static function makeUser($user_login, $role, array $userData = array()) + { + if (!is_string($user_login)) { + throw new \BadMethodCallException('User login must be a string', 1); + } + if (!is_string($role)) { + throw new \BadMethodCallException('User role must be a string', 3); + } + $userTableDefaults = self::generateUserTableDataFrom($user_login, $role); + $userCapabilitiesDefaults = self::generateCapabilitiesDefaultsFrom($role); + $userLevelDefaults = self::generateUserLevelDefaultsFrom($role); + // merge user data with defaults + $userTableData = array_merge($userTableDefaults, $userData); + $userCapabilitiesData = array_merge($userCapabilitiesDefaults, $userData); + return array( $userLevelDefaults, $userTableData, $userCapabilitiesData ); + } + + /** + * Generated the entry for the users table. + * + * @param string $user_login The user login slug + * + * @return array An associtive array of column/values for the "users" table. + */ + public static function generateUserTableDataFrom($user_login, array $userData = array()) + { + $utils = new Slugifier(); + $login = $utils->slugify($user_login); + $usersTableDefaults = array( + 'user_login' => $login, + 'user_pass' => WpPassword::instance()->make($user_login), + 'user_nicename' => $user_login, + 'user_email' => $login . "@example.com", + 'user_url' => "http://{$login}.example.com", + 'user_registered' => Date::now(), + 'user_activation_key' => '', + 'user_status' => '0', + 'display_name' => $user_login + ); + if (!empty($userData['user_pass'])) { + $userData['user_pass'] = WpPassword::instance()->make($userData['user_pass']); + } + + return array_merge($usersTableDefaults, array_intersect_key($userData, $usersTableDefaults)); + } + + /** + * Generates the default values entry for the "wp_capabilities" "usermeta" table entry. + * + * @param int $user_id The user id. + * @param string $role The user role. + * + * @return array An associtive array of column/values for the "usermeta" table. + */ + protected static function generateCapabilitiesDefaultsFrom($user_id, $role) + { + $capabilitiesDefaults = array( + 'umeta_id' => null, + 'user_id' => $user_id, + 'meta_key' => 'wp_capabilities', + 'meta_value' => str_replace('"', '\"', serialize(array( $role => true ))) + ); + return $capabilitiesDefaults; + } + + /** + * Generates the default values entry for the "wp_user_level" "usermeta" table entry. + * + * @param int $user_id The user id. + * @param string $role The user role. + * + * @return array An associtive array of column/values for the "usermeta" table. + */ + protected static function generateUserLevelDefaultsFrom($user_id, $role) + { + $intRole = 0; + if (isset(self::$userRolesToLevels[$role])) { + $intRole = self::$userRolesToLevels[$role]; + } + $userLevelDefaults = array( + 'umeta_id' => null, + 'user_id' => $user_id, + 'meta_key' => 'wp_user_level', + 'meta_value' => $intRole + ); + return $userLevelDefaults; + } +} diff --git a/src/tad/WPBrowser/Generators/User/Roles.php b/src/tad/WPBrowser/Generators/User/Roles.php new file mode 100644 index 000000000..d46e513e9 --- /dev/null +++ b/src/tad/WPBrowser/Generators/User/Roles.php @@ -0,0 +1,20 @@ + 0, + 'contributor' => 1, + 'author' => 2, + 'editor' => 7, + 'administrator' => 10, + '' => 0 // no role for the site + ]; + return array_key_exists($role, $map) ? $map[$role] : $map['subscriber']; + } +} diff --git a/src/tad/WPBrowser/Generators/WpPassword.php b/src/tad/WPBrowser/Generators/WpPassword.php new file mode 100644 index 000000000..720fa1cc7 --- /dev/null +++ b/src/tad/WPBrowser/Generators/WpPassword.php @@ -0,0 +1,34 @@ +connect_error) { + throw new \PDOException('Could not connecto to [' . $dbName . '] database: ' . $mysqli->connect_error); + } + + return new \MySQLDump($mysqli, $charset); + } +} diff --git a/src/tad/WPBrowser/Services/Db/MySQLDumpFactoryInterface.php b/src/tad/WPBrowser/Services/Db/MySQLDumpFactoryInterface.php new file mode 100644 index 000000000..d909a6c52 --- /dev/null +++ b/src/tad/WPBrowser/Services/Db/MySQLDumpFactoryInterface.php @@ -0,0 +1,17 @@ +wpLoadPath = $wpLoadPath; + $this->bootstrapScriptFilePath = dirname(dirname(__DIR__)) . '/support/wpBootstrap.php'; + $this->system = $system ? $system : new System(); + } + + /** + * Generates a nonce for an action for a user. + * + * @param string $action + * @param array $credentials An array of credentials and cookies; usually generated by a login method. + * + * @return mixed + */ + public function createNonce($action, array $credentials) + { + $request = [ + 'action' => $action, + 'credentials' => [ + 'user_login' => $credentials['username'], + 'user_password' => $credentials['password'], + 'remember' => true + ], + 'cookies' => [ + $credentials['authCookie']->getName() => $credentials['authCookie']->getValue(), + $credentials['loginCookie']->getName() => $credentials['loginCookie']->getValue() + ] + ]; + + $output = $this->bootstrapWpAndExec($request); + + return !empty($output) ? $output : false; + } + + /** + * @param array $actions + * + * @return array + */ + public function bootstrapWpAndExec(array $actions) + { + $command = implode(' ', [ + PHP_BINARY, + escapeshellarg($this->bootstrapScriptFilePath), + escapeshellarg($this->wpLoadPath), + escapeshellarg(serialize($actions)) + ]); + $output = $this->system->system($command); + + return $output; + } + + public function getWpLoadPath() + { + return $this->wpLoadPath; + } + + /** + * @param string $wpLoadPath + */ + public function setWpLoadPath($wpLoadPath) + { + $this->wpLoadPath = $wpLoadPath; + } + + public function getBootstrapScriptFilePath() + { + return $this->bootstrapScriptFilePath; + } + + public function setBootstrapScriptFilePath($bootsrapScriptFilePath) + { + $this->bootstrapScriptFilePath = $bootsrapScriptFilePath; + } +} diff --git a/src/tad/WPBrowser/support/wpBootstrap.php b/src/tad/WPBrowser/support/wpBootstrap.php new file mode 100644 index 000000000..c72d32b4f --- /dev/null +++ b/src/tad/WPBrowser/support/wpBootstrap.php @@ -0,0 +1,21 @@ +ID, $user->user_login); + +$nonce = wp_create_nonce($request['action']); + +die($nonce); diff --git a/tests/_data/dump.sql b/tests/_data/dump.sql index ae4623a71..c6ee58450 100755 --- a/tests/_data/dump.sql +++ b/tests/_data/dump.sql @@ -80,7 +80,7 @@ CREATE TABLE `wp_2_comments` ( LOCK TABLES `wp_2_comments` WRITE; /*!40000 ALTER TABLE `wp_2_comments` DISABLE KEYS */; -INSERT INTO `wp_2_comments` VALUES (1,1,'A WordPress Commenter','wapuu@wordpress.example','http://wp.test/','','2019-04-05 07:17:45','2019-04-05 07:17:45','Hi, this is a comment.\nTo get started with moderating, editing, and deleting comments, please visit the Comments screen in the dashboard.\nCommenter avatars come from Gravatar.',0,'1','','',0,0); +INSERT INTO `wp_2_comments` VALUES (1,1,'A WordPress Commenter','wapuu@wordpress.example','http://wp.test/','','2019-05-10 11:08:22','2019-05-10 11:08:22','Hi, this is a comment.\nTo get started with moderating, editing, and deleting comments, please visit the Comments screen in the dashboard.\nCommenter avatars come from Gravatar.',0,'1','','',0,0); /*!40000 ALTER TABLE `wp_2_comments` ENABLE KEYS */; UNLOCK TABLES; @@ -219,7 +219,7 @@ CREATE TABLE `wp_2_posts` ( LOCK TABLES `wp_2_posts` WRITE; /*!40000 ALTER TABLE `wp_2_posts` DISABLE KEYS */; -INSERT INTO `wp_2_posts` VALUES (1,1,'2019-04-05 07:17:45','2019-04-05 07:17:45','Welcome to Test Sites. This is your first post. Edit or delete it, then start writing!','Hello world!','','publish','open','open','','hello-world','','','2019-04-05 07:17:45','2019-04-05 07:17:45','',0,'http://test1.wp.test/?p=1',0,'post','',1),(2,1,'2019-04-05 07:17:45','2019-04-05 07:17:45','\n

This is an example page. It\'s different from a blog post because it will stay in one place and will show up in your site navigation (in most themes). Most people start with an About page that introduces them to potential site visitors. It might say something like this:

\n\n\n\n

Hi there! I\'m a bike messenger by day, aspiring actor by night, and this is my website. I live in Los Angeles, have a great dog named Jack, and I like piña coladas. (And gettin\' caught in the rain.)

\n\n\n\n

...or something like this:

\n\n\n\n

The XYZ Doohickey Company was founded in 1971, and has been providing quality doohickeys to the public ever since. Located in Gotham City, XYZ employs over 2,000 people and does all kinds of awesome things for the Gotham community.

\n\n\n\n

As a new WordPress user, you should go to your dashboard to delete this page and create new pages for your content. Have fun!

\n','Sample Page','','publish','closed','open','','sample-page','','','2019-04-05 07:17:45','2019-04-05 07:17:45','',0,'http://test1.wp.test/?page_id=2',0,'page','',0); +INSERT INTO `wp_2_posts` VALUES (1,1,'2019-05-10 11:08:22','2019-05-10 11:08:22','Welcome to Test Sites. This is your first post. Edit or delete it, then start writing!','Hello world!','','publish','open','open','','hello-world','','','2019-05-10 11:08:22','2019-05-10 11:08:22','',0,'http://test1.wp.test/?p=1',0,'post','',1),(2,1,'2019-05-10 11:08:22','2019-05-10 11:08:22','\n

This is an example page. It\'s different from a blog post because it will stay in one place and will show up in your site navigation (in most themes). Most people start with an About page that introduces them to potential site visitors. It might say something like this:

\n\n\n\n

Hi there! I\'m a bike messenger by day, aspiring actor by night, and this is my website. I live in Los Angeles, have a great dog named Jack, and I like piña coladas. (And gettin\' caught in the rain.)

\n\n\n\n

...or something like this:

\n\n\n\n

The XYZ Doohickey Company was founded in 1971, and has been providing quality doohickeys to the public ever since. Located in Gotham City, XYZ employs over 2,000 people and does all kinds of awesome things for the Gotham community.

\n\n\n\n

As a new WordPress user, you should go to your dashboard to delete this page and create new pages for your content. Have fun!

\n','Sample Page','','publish','closed','open','','sample-page','','','2019-05-10 11:08:22','2019-05-10 11:08:22','',0,'http://test1.wp.test/?page_id=2',0,'page','',0); /*!40000 ALTER TABLE `wp_2_posts` ENABLE KEYS */; UNLOCK TABLES; @@ -399,7 +399,7 @@ CREATE TABLE `wp_3_comments` ( LOCK TABLES `wp_3_comments` WRITE; /*!40000 ALTER TABLE `wp_3_comments` DISABLE KEYS */; -INSERT INTO `wp_3_comments` VALUES (1,1,'A WordPress Commenter','wapuu@wordpress.example','http://wp.test/','','2019-04-05 07:17:52','2019-04-05 07:17:52','Hi, this is a comment.\nTo get started with moderating, editing, and deleting comments, please visit the Comments screen in the dashboard.\nCommenter avatars come from Gravatar.',0,'1','','',0,0); +INSERT INTO `wp_3_comments` VALUES (1,1,'A WordPress Commenter','wapuu@wordpress.example','http://wp.test/','','2019-05-10 11:08:25','2019-05-10 11:08:25','Hi, this is a comment.\nTo get started with moderating, editing, and deleting comments, please visit the Comments screen in the dashboard.\nCommenter avatars come from Gravatar.',0,'1','','',0,0); /*!40000 ALTER TABLE `wp_3_comments` ENABLE KEYS */; UNLOCK TABLES; @@ -538,7 +538,7 @@ CREATE TABLE `wp_3_posts` ( LOCK TABLES `wp_3_posts` WRITE; /*!40000 ALTER TABLE `wp_3_posts` DISABLE KEYS */; -INSERT INTO `wp_3_posts` VALUES (1,1,'2019-04-05 07:17:52','2019-04-05 07:17:52','Welcome to Test Sites. This is your first post. Edit or delete it, then start writing!','Hello world!','','publish','open','open','','hello-world','','','2019-04-05 07:17:52','2019-04-05 07:17:52','',0,'http://test2.wp.test/?p=1',0,'post','',1),(2,1,'2019-04-05 07:17:52','2019-04-05 07:17:52','\n

This is an example page. It\'s different from a blog post because it will stay in one place and will show up in your site navigation (in most themes). Most people start with an About page that introduces them to potential site visitors. It might say something like this:

\n\n\n\n

Hi there! I\'m a bike messenger by day, aspiring actor by night, and this is my website. I live in Los Angeles, have a great dog named Jack, and I like piña coladas. (And gettin\' caught in the rain.)

\n\n\n\n

...or something like this:

\n\n\n\n

The XYZ Doohickey Company was founded in 1971, and has been providing quality doohickeys to the public ever since. Located in Gotham City, XYZ employs over 2,000 people and does all kinds of awesome things for the Gotham community.

\n\n\n\n

As a new WordPress user, you should go to your dashboard to delete this page and create new pages for your content. Have fun!

\n','Sample Page','','publish','closed','open','','sample-page','','','2019-04-05 07:17:52','2019-04-05 07:17:52','',0,'http://test2.wp.test/?page_id=2',0,'page','',0); +INSERT INTO `wp_3_posts` VALUES (1,1,'2019-05-10 11:08:25','2019-05-10 11:08:25','Welcome to Test Sites. This is your first post. Edit or delete it, then start writing!','Hello world!','','publish','open','open','','hello-world','','','2019-05-10 11:08:25','2019-05-10 11:08:25','',0,'http://test2.wp.test/?p=1',0,'post','',1),(2,1,'2019-05-10 11:08:25','2019-05-10 11:08:25','\n

This is an example page. It\'s different from a blog post because it will stay in one place and will show up in your site navigation (in most themes). Most people start with an About page that introduces them to potential site visitors. It might say something like this:

\n\n\n\n

Hi there! I\'m a bike messenger by day, aspiring actor by night, and this is my website. I live in Los Angeles, have a great dog named Jack, and I like piña coladas. (And gettin\' caught in the rain.)

\n\n\n\n

...or something like this:

\n\n\n\n

The XYZ Doohickey Company was founded in 1971, and has been providing quality doohickeys to the public ever since. Located in Gotham City, XYZ employs over 2,000 people and does all kinds of awesome things for the Gotham community.

\n\n\n\n

As a new WordPress user, you should go to your dashboard to delete this page and create new pages for your content. Have fun!

\n','Sample Page','','publish','closed','open','','sample-page','','','2019-05-10 11:08:25','2019-05-10 11:08:25','',0,'http://test2.wp.test/?page_id=2',0,'page','',0); /*!40000 ALTER TABLE `wp_3_posts` ENABLE KEYS */; UNLOCK TABLES; @@ -737,7 +737,7 @@ CREATE TABLE `wp_blogs` ( LOCK TABLES `wp_blogs` WRITE; /*!40000 ALTER TABLE `wp_blogs` DISABLE KEYS */; -INSERT INTO `wp_blogs` VALUES (1,1,'wp.test','/','2019-04-05 07:17:42','0000-00-00 00:00:00',1,0,0,0,0,0),(2,1,'test1.wp.test','/','2019-04-05 07:17:45','2019-04-05 07:17:45',1,0,0,0,0,0),(3,1,'test2.wp.test','/','2019-04-05 07:17:52','2019-04-05 07:17:52',1,0,0,0,0,0); +INSERT INTO `wp_blogs` VALUES (1,1,'wp.test','/','2019-05-10 11:08:19','0000-00-00 00:00:00',1,0,0,0,0,0),(2,1,'test1.wp.test','/','2019-05-10 11:08:22','2019-05-10 11:08:22',1,0,0,0,0,0),(3,1,'test2.wp.test','/','2019-05-10 11:08:25','2019-05-10 11:08:25',1,0,0,0,0,0); /*!40000 ALTER TABLE `wp_blogs` ENABLE KEYS */; UNLOCK TABLES; @@ -858,7 +858,7 @@ CREATE TABLE `wp_options` ( `autoload` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'yes', PRIMARY KEY (`option_id`), UNIQUE KEY `option_name` (`option_name`) -) ENGINE=InnoDB AUTO_INCREMENT=114 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=115 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -867,7 +867,7 @@ CREATE TABLE `wp_options` ( LOCK TABLES `wp_options` WRITE; /*!40000 ALTER TABLE `wp_options` DISABLE KEYS */; -INSERT INTO `wp_options` VALUES (1,'siteurl','http://wp.test','yes'),(2,'home','http://wp.test','yes'),(3,'blogname','Test','yes'),(4,'blogdescription','Just another Fake Site site','yes'),(5,'users_can_register','0','yes'),(6,'admin_email','admin@wp.test','yes'),(7,'start_of_week','1','yes'),(8,'use_balanceTags','0','yes'),(9,'use_smilies','1','yes'),(10,'require_name_email','1','yes'),(11,'comments_notify','1','yes'),(12,'posts_per_rss','10','yes'),(13,'rss_use_excerpt','0','yes'),(14,'mailserver_url','mail.example.com','yes'),(15,'mailserver_login','login@example.com','yes'),(16,'mailserver_pass','password','yes'),(17,'mailserver_port','110','yes'),(18,'default_category','1','yes'),(19,'default_comment_status','open','yes'),(20,'default_ping_status','open','yes'),(21,'default_pingback_flag','1','yes'),(22,'posts_per_page','10','yes'),(23,'date_format','F j, Y','yes'),(24,'time_format','g:i a','yes'),(25,'links_updated_date_format','F j, Y g:i a','yes'),(26,'comment_moderation','0','yes'),(27,'moderation_notify','1','yes'),(28,'permalink_structure','/%year%/%monthnum%/%day%/%postname%/','yes'),(29,'rewrite_rules','a:77:{s:11:\"^wp-json/?$\";s:22:\"index.php?rest_route=/\";s:14:\"^wp-json/(.*)?\";s:33:\"index.php?rest_route=/$matches[1]\";s:21:\"^index.php/wp-json/?$\";s:22:\"index.php?rest_route=/\";s:24:\"^index.php/wp-json/(.*)?\";s:33:\"index.php?rest_route=/$matches[1]\";s:12:\"robots\\.txt$\";s:18:\"index.php?robots=1\";s:48:\".*wp-(atom|rdf|rss|rss2|feed|commentsrss2)\\.php$\";s:18:\"index.php?feed=old\";s:20:\".*wp-app\\.php(/.*)?$\";s:19:\"index.php?error=403\";s:16:\".*wp-signup.php$\";s:21:\"index.php?signup=true\";s:18:\".*wp-activate.php$\";s:23:\"index.php?activate=true\";s:18:\".*wp-register.php$\";s:23:\"index.php?register=true\";s:32:\"feed/(feed|rdf|rss|rss2|atom)/?$\";s:27:\"index.php?&feed=$matches[1]\";s:27:\"(feed|rdf|rss|rss2|atom)/?$\";s:27:\"index.php?&feed=$matches[1]\";s:8:\"embed/?$\";s:21:\"index.php?&embed=true\";s:20:\"page/?([0-9]{1,})/?$\";s:28:\"index.php?&paged=$matches[1]\";s:41:\"comments/feed/(feed|rdf|rss|rss2|atom)/?$\";s:42:\"index.php?&feed=$matches[1]&withcomments=1\";s:36:\"comments/(feed|rdf|rss|rss2|atom)/?$\";s:42:\"index.php?&feed=$matches[1]&withcomments=1\";s:17:\"comments/embed/?$\";s:21:\"index.php?&embed=true\";s:44:\"search/(.+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:40:\"index.php?s=$matches[1]&feed=$matches[2]\";s:39:\"search/(.+)/(feed|rdf|rss|rss2|atom)/?$\";s:40:\"index.php?s=$matches[1]&feed=$matches[2]\";s:20:\"search/(.+)/embed/?$\";s:34:\"index.php?s=$matches[1]&embed=true\";s:32:\"search/(.+)/page/?([0-9]{1,})/?$\";s:41:\"index.php?s=$matches[1]&paged=$matches[2]\";s:14:\"search/(.+)/?$\";s:23:\"index.php?s=$matches[1]\";s:47:\"author/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:50:\"index.php?author_name=$matches[1]&feed=$matches[2]\";s:42:\"author/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:50:\"index.php?author_name=$matches[1]&feed=$matches[2]\";s:23:\"author/([^/]+)/embed/?$\";s:44:\"index.php?author_name=$matches[1]&embed=true\";s:35:\"author/([^/]+)/page/?([0-9]{1,})/?$\";s:51:\"index.php?author_name=$matches[1]&paged=$matches[2]\";s:17:\"author/([^/]+)/?$\";s:33:\"index.php?author_name=$matches[1]\";s:69:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/feed/(feed|rdf|rss|rss2|atom)/?$\";s:80:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&feed=$matches[4]\";s:64:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/(feed|rdf|rss|rss2|atom)/?$\";s:80:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&feed=$matches[4]\";s:45:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/embed/?$\";s:74:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&embed=true\";s:57:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/page/?([0-9]{1,})/?$\";s:81:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&paged=$matches[4]\";s:39:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/?$\";s:63:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]\";s:56:\"([0-9]{4})/([0-9]{1,2})/feed/(feed|rdf|rss|rss2|atom)/?$\";s:64:\"index.php?year=$matches[1]&monthnum=$matches[2]&feed=$matches[3]\";s:51:\"([0-9]{4})/([0-9]{1,2})/(feed|rdf|rss|rss2|atom)/?$\";s:64:\"index.php?year=$matches[1]&monthnum=$matches[2]&feed=$matches[3]\";s:32:\"([0-9]{4})/([0-9]{1,2})/embed/?$\";s:58:\"index.php?year=$matches[1]&monthnum=$matches[2]&embed=true\";s:44:\"([0-9]{4})/([0-9]{1,2})/page/?([0-9]{1,})/?$\";s:65:\"index.php?year=$matches[1]&monthnum=$matches[2]&paged=$matches[3]\";s:26:\"([0-9]{4})/([0-9]{1,2})/?$\";s:47:\"index.php?year=$matches[1]&monthnum=$matches[2]\";s:43:\"([0-9]{4})/feed/(feed|rdf|rss|rss2|atom)/?$\";s:43:\"index.php?year=$matches[1]&feed=$matches[2]\";s:38:\"([0-9]{4})/(feed|rdf|rss|rss2|atom)/?$\";s:43:\"index.php?year=$matches[1]&feed=$matches[2]\";s:19:\"([0-9]{4})/embed/?$\";s:37:\"index.php?year=$matches[1]&embed=true\";s:31:\"([0-9]{4})/page/?([0-9]{1,})/?$\";s:44:\"index.php?year=$matches[1]&paged=$matches[2]\";s:13:\"([0-9]{4})/?$\";s:26:\"index.php?year=$matches[1]\";s:58:\"[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/attachment/([^/]+)/?$\";s:32:\"index.php?attachment=$matches[1]\";s:68:\"[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/attachment/([^/]+)/trackback/?$\";s:37:\"index.php?attachment=$matches[1]&tb=1\";s:88:\"[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:83:\"[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:83:\"[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/attachment/([^/]+)/comment-page-([0-9]{1,})/?$\";s:50:\"index.php?attachment=$matches[1]&cpage=$matches[2]\";s:64:\"[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/attachment/([^/]+)/embed/?$\";s:43:\"index.php?attachment=$matches[1]&embed=true\";s:53:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([^/]+)/embed/?$\";s:91:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&name=$matches[4]&embed=true\";s:57:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([^/]+)/trackback/?$\";s:85:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&name=$matches[4]&tb=1\";s:77:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:97:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&name=$matches[4]&feed=$matches[5]\";s:72:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:97:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&name=$matches[4]&feed=$matches[5]\";s:65:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([^/]+)/page/?([0-9]{1,})/?$\";s:98:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&name=$matches[4]&paged=$matches[5]\";s:72:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([^/]+)/comment-page-([0-9]{1,})/?$\";s:98:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&name=$matches[4]&cpage=$matches[5]\";s:61:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([^/]+)(?:/([0-9]+))?/?$\";s:97:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&name=$matches[4]&page=$matches[5]\";s:47:\"[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/([^/]+)/?$\";s:32:\"index.php?attachment=$matches[1]\";s:57:\"[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/([^/]+)/trackback/?$\";s:37:\"index.php?attachment=$matches[1]&tb=1\";s:77:\"[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:72:\"[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:72:\"[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/([^/]+)/comment-page-([0-9]{1,})/?$\";s:50:\"index.php?attachment=$matches[1]&cpage=$matches[2]\";s:53:\"[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/([^/]+)/embed/?$\";s:43:\"index.php?attachment=$matches[1]&embed=true\";s:64:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/comment-page-([0-9]{1,})/?$\";s:81:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&cpage=$matches[4]\";s:51:\"([0-9]{4})/([0-9]{1,2})/comment-page-([0-9]{1,})/?$\";s:65:\"index.php?year=$matches[1]&monthnum=$matches[2]&cpage=$matches[3]\";s:38:\"([0-9]{4})/comment-page-([0-9]{1,})/?$\";s:44:\"index.php?year=$matches[1]&cpage=$matches[2]\";s:27:\".?.+?/attachment/([^/]+)/?$\";s:32:\"index.php?attachment=$matches[1]\";s:37:\".?.+?/attachment/([^/]+)/trackback/?$\";s:37:\"index.php?attachment=$matches[1]&tb=1\";s:57:\".?.+?/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:52:\".?.+?/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:52:\".?.+?/attachment/([^/]+)/comment-page-([0-9]{1,})/?$\";s:50:\"index.php?attachment=$matches[1]&cpage=$matches[2]\";s:33:\".?.+?/attachment/([^/]+)/embed/?$\";s:43:\"index.php?attachment=$matches[1]&embed=true\";s:16:\"(.?.+?)/embed/?$\";s:41:\"index.php?pagename=$matches[1]&embed=true\";s:20:\"(.?.+?)/trackback/?$\";s:35:\"index.php?pagename=$matches[1]&tb=1\";s:40:\"(.?.+?)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:47:\"index.php?pagename=$matches[1]&feed=$matches[2]\";s:35:\"(.?.+?)/(feed|rdf|rss|rss2|atom)/?$\";s:47:\"index.php?pagename=$matches[1]&feed=$matches[2]\";s:28:\"(.?.+?)/page/?([0-9]{1,})/?$\";s:48:\"index.php?pagename=$matches[1]&paged=$matches[2]\";s:35:\"(.?.+?)/comment-page-([0-9]{1,})/?$\";s:48:\"index.php?pagename=$matches[1]&cpage=$matches[2]\";s:24:\"(.?.+?)(?:/([0-9]+))?/?$\";s:47:\"index.php?pagename=$matches[1]&page=$matches[2]\";}','yes'),(30,'hack_file','0','yes'),(31,'blog_charset','UTF-8','yes'),(32,'moderation_keys','','no'),(33,'active_plugins','a:1:{i:0;s:31:\"airplane-mode/airplane-mode.php\";}','yes'),(34,'category_base','','yes'),(35,'ping_sites','http://rpc.pingomatic.com/','yes'),(36,'comment_max_links','2','yes'),(37,'gmt_offset','0','yes'),(38,'default_email_category','1','yes'),(39,'recently_edited','','no'),(40,'template','twentynineteen','yes'),(41,'stylesheet','twentynineteen','yes'),(42,'comment_whitelist','1','yes'),(43,'blacklist_keys','','no'),(44,'comment_registration','0','yes'),(45,'html_type','text/html','yes'),(46,'use_trackback','0','yes'),(47,'default_role','subscriber','yes'),(48,'db_version','44719','yes'),(49,'uploads_use_yearmonth_folders','1','yes'),(50,'upload_path','','yes'),(51,'blog_public','1','yes'),(52,'default_link_category','2','yes'),(53,'show_on_front','posts','yes'),(54,'tag_base','','yes'),(55,'show_avatars','1','yes'),(56,'avatar_rating','G','yes'),(57,'upload_url_path','','yes'),(58,'thumbnail_size_w','150','yes'),(59,'thumbnail_size_h','150','yes'),(60,'thumbnail_crop','1','yes'),(61,'medium_size_w','300','yes'),(62,'medium_size_h','300','yes'),(63,'avatar_default','mystery','yes'),(64,'large_size_w','1024','yes'),(65,'large_size_h','1024','yes'),(66,'image_default_link_type','none','yes'),(67,'image_default_size','','yes'),(68,'image_default_align','','yes'),(69,'close_comments_for_old_posts','0','yes'),(70,'close_comments_days_old','14','yes'),(71,'thread_comments','1','yes'),(72,'thread_comments_depth','5','yes'),(73,'page_comments','0','yes'),(74,'comments_per_page','50','yes'),(75,'default_comments_page','newest','yes'),(76,'comment_order','asc','yes'),(77,'sticky_posts','a:0:{}','yes'),(78,'widget_categories','a:2:{i:2;a:4:{s:5:\"title\";s:0:\"\";s:5:\"count\";i:0;s:12:\"hierarchical\";i:0;s:8:\"dropdown\";i:0;}s:12:\"_multiwidget\";i:1;}','yes'),(79,'widget_text','a:0:{}','yes'),(80,'widget_rss','a:0:{}','yes'),(81,'uninstall_plugins','a:0:{}','no'),(82,'timezone_string','','yes'),(83,'page_for_posts','0','yes'),(84,'page_on_front','0','yes'),(85,'default_post_format','0','yes'),(86,'link_manager_enabled','0','yes'),(87,'finished_splitting_shared_terms','1','yes'),(88,'site_icon','0','yes'),(89,'medium_large_size_w','768','yes'),(90,'medium_large_size_h','0','yes'),(91,'wp_page_for_privacy_policy','0','yes'),(92,'show_comments_cookies_opt_in','1','yes'),(93,'wp_user_roles','a:5:{s:13:\"administrator\";a:2:{s:4:\"name\";s:13:\"Administrator\";s:12:\"capabilities\";a:61:{s:13:\"switch_themes\";b:1;s:11:\"edit_themes\";b:1;s:16:\"activate_plugins\";b:1;s:12:\"edit_plugins\";b:1;s:10:\"edit_users\";b:1;s:10:\"edit_files\";b:1;s:14:\"manage_options\";b:1;s:17:\"moderate_comments\";b:1;s:17:\"manage_categories\";b:1;s:12:\"manage_links\";b:1;s:12:\"upload_files\";b:1;s:6:\"import\";b:1;s:15:\"unfiltered_html\";b:1;s:10:\"edit_posts\";b:1;s:17:\"edit_others_posts\";b:1;s:20:\"edit_published_posts\";b:1;s:13:\"publish_posts\";b:1;s:10:\"edit_pages\";b:1;s:4:\"read\";b:1;s:8:\"level_10\";b:1;s:7:\"level_9\";b:1;s:7:\"level_8\";b:1;s:7:\"level_7\";b:1;s:7:\"level_6\";b:1;s:7:\"level_5\";b:1;s:7:\"level_4\";b:1;s:7:\"level_3\";b:1;s:7:\"level_2\";b:1;s:7:\"level_1\";b:1;s:7:\"level_0\";b:1;s:17:\"edit_others_pages\";b:1;s:20:\"edit_published_pages\";b:1;s:13:\"publish_pages\";b:1;s:12:\"delete_pages\";b:1;s:19:\"delete_others_pages\";b:1;s:22:\"delete_published_pages\";b:1;s:12:\"delete_posts\";b:1;s:19:\"delete_others_posts\";b:1;s:22:\"delete_published_posts\";b:1;s:20:\"delete_private_posts\";b:1;s:18:\"edit_private_posts\";b:1;s:18:\"read_private_posts\";b:1;s:20:\"delete_private_pages\";b:1;s:18:\"edit_private_pages\";b:1;s:18:\"read_private_pages\";b:1;s:12:\"delete_users\";b:1;s:12:\"create_users\";b:1;s:17:\"unfiltered_upload\";b:1;s:14:\"edit_dashboard\";b:1;s:14:\"update_plugins\";b:1;s:14:\"delete_plugins\";b:1;s:15:\"install_plugins\";b:1;s:13:\"update_themes\";b:1;s:14:\"install_themes\";b:1;s:11:\"update_core\";b:1;s:10:\"list_users\";b:1;s:12:\"remove_users\";b:1;s:13:\"promote_users\";b:1;s:18:\"edit_theme_options\";b:1;s:13:\"delete_themes\";b:1;s:6:\"export\";b:1;}}s:6:\"editor\";a:2:{s:4:\"name\";s:6:\"Editor\";s:12:\"capabilities\";a:34:{s:17:\"moderate_comments\";b:1;s:17:\"manage_categories\";b:1;s:12:\"manage_links\";b:1;s:12:\"upload_files\";b:1;s:15:\"unfiltered_html\";b:1;s:10:\"edit_posts\";b:1;s:17:\"edit_others_posts\";b:1;s:20:\"edit_published_posts\";b:1;s:13:\"publish_posts\";b:1;s:10:\"edit_pages\";b:1;s:4:\"read\";b:1;s:7:\"level_7\";b:1;s:7:\"level_6\";b:1;s:7:\"level_5\";b:1;s:7:\"level_4\";b:1;s:7:\"level_3\";b:1;s:7:\"level_2\";b:1;s:7:\"level_1\";b:1;s:7:\"level_0\";b:1;s:17:\"edit_others_pages\";b:1;s:20:\"edit_published_pages\";b:1;s:13:\"publish_pages\";b:1;s:12:\"delete_pages\";b:1;s:19:\"delete_others_pages\";b:1;s:22:\"delete_published_pages\";b:1;s:12:\"delete_posts\";b:1;s:19:\"delete_others_posts\";b:1;s:22:\"delete_published_posts\";b:1;s:20:\"delete_private_posts\";b:1;s:18:\"edit_private_posts\";b:1;s:18:\"read_private_posts\";b:1;s:20:\"delete_private_pages\";b:1;s:18:\"edit_private_pages\";b:1;s:18:\"read_private_pages\";b:1;}}s:6:\"author\";a:2:{s:4:\"name\";s:6:\"Author\";s:12:\"capabilities\";a:10:{s:12:\"upload_files\";b:1;s:10:\"edit_posts\";b:1;s:20:\"edit_published_posts\";b:1;s:13:\"publish_posts\";b:1;s:4:\"read\";b:1;s:7:\"level_2\";b:1;s:7:\"level_1\";b:1;s:7:\"level_0\";b:1;s:12:\"delete_posts\";b:1;s:22:\"delete_published_posts\";b:1;}}s:11:\"contributor\";a:2:{s:4:\"name\";s:11:\"Contributor\";s:12:\"capabilities\";a:5:{s:10:\"edit_posts\";b:1;s:4:\"read\";b:1;s:7:\"level_1\";b:1;s:7:\"level_0\";b:1;s:12:\"delete_posts\";b:1;}}s:10:\"subscriber\";a:2:{s:4:\"name\";s:10:\"Subscriber\";s:12:\"capabilities\";a:2:{s:4:\"read\";b:1;s:7:\"level_0\";b:1;}}}','yes'),(94,'fresh_site','1','yes'),(95,'widget_search','a:2:{i:2;a:1:{s:5:\"title\";s:0:\"\";}s:12:\"_multiwidget\";i:1;}','yes'),(96,'widget_recent-posts','a:2:{i:2;a:2:{s:5:\"title\";s:0:\"\";s:6:\"number\";i:5;}s:12:\"_multiwidget\";i:1;}','yes'),(97,'widget_recent-comments','a:2:{i:2;a:2:{s:5:\"title\";s:0:\"\";s:6:\"number\";i:5;}s:12:\"_multiwidget\";i:1;}','yes'),(98,'widget_archives','a:2:{i:2;a:3:{s:5:\"title\";s:0:\"\";s:5:\"count\";i:0;s:8:\"dropdown\";i:0;}s:12:\"_multiwidget\";i:1;}','yes'),(99,'widget_meta','a:2:{i:2;a:1:{s:5:\"title\";s:0:\"\";}s:12:\"_multiwidget\";i:1;}','yes'),(100,'sidebars_widgets','a:3:{s:19:\"wp_inactive_widgets\";a:0:{}s:9:\"sidebar-1\";a:6:{i:0;s:8:\"search-2\";i:1;s:14:\"recent-posts-2\";i:2;s:17:\"recent-comments-2\";i:3;s:10:\"archives-2\";i:4;s:12:\"categories-2\";i:5;s:6:\"meta-2\";}s:13:\"array_version\";i:3;}','yes'),(101,'widget_pages','a:1:{s:12:\"_multiwidget\";i:1;}','yes'),(102,'widget_calendar','a:1:{s:12:\"_multiwidget\";i:1;}','yes'),(103,'widget_media_audio','a:1:{s:12:\"_multiwidget\";i:1;}','yes'),(104,'widget_media_image','a:1:{s:12:\"_multiwidget\";i:1;}','yes'),(105,'widget_media_gallery','a:1:{s:12:\"_multiwidget\";i:1;}','yes'),(106,'widget_media_video','a:1:{s:12:\"_multiwidget\";i:1;}','yes'),(107,'widget_tag_cloud','a:1:{s:12:\"_multiwidget\";i:1;}','yes'),(108,'widget_nav_menu','a:1:{s:12:\"_multiwidget\";i:1;}','yes'),(109,'widget_custom_html','a:1:{s:12:\"_multiwidget\";i:1;}','yes'),(110,'cron','a:2:{i:1554448664;a:4:{s:34:\"wp_privacy_delete_old_export_files\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"hourly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:3600;}}s:16:\"wp_version_check\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:10:\"twicedaily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:43200;}}s:17:\"wp_update_plugins\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:10:\"twicedaily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:43200;}}s:16:\"wp_update_themes\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:10:\"twicedaily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:43200;}}}s:7:\"version\";i:2;}','yes'),(111,'_transient_doing_cron','1554448667.2799539566040039062500','yes'),(112,'_transient_timeout_wporg_theme_feature_list','1001554448681','no'),(113,'_transient_wporg_theme_feature_list','a:0:{}','no'); +INSERT INTO `wp_options` VALUES (1,'siteurl','http://wp.test','yes'),(2,'home','http://wp.test','yes'),(3,'blogname','Test','yes'),(4,'blogdescription','Just another Fake Site site','yes'),(5,'users_can_register','0','yes'),(6,'admin_email','admin@wp.test','yes'),(7,'start_of_week','1','yes'),(8,'use_balanceTags','0','yes'),(9,'use_smilies','1','yes'),(10,'require_name_email','1','yes'),(11,'comments_notify','1','yes'),(12,'posts_per_rss','10','yes'),(13,'rss_use_excerpt','0','yes'),(14,'mailserver_url','mail.example.com','yes'),(15,'mailserver_login','login@example.com','yes'),(16,'mailserver_pass','password','yes'),(17,'mailserver_port','110','yes'),(18,'default_category','1','yes'),(19,'default_comment_status','open','yes'),(20,'default_ping_status','open','yes'),(21,'default_pingback_flag','1','yes'),(22,'posts_per_page','10','yes'),(23,'date_format','F j, Y','yes'),(24,'time_format','g:i a','yes'),(25,'links_updated_date_format','F j, Y g:i a','yes'),(26,'comment_moderation','0','yes'),(27,'moderation_notify','1','yes'),(28,'permalink_structure','/%year%/%monthnum%/%day%/%postname%/','yes'),(29,'rewrite_rules','a:77:{s:11:\"^wp-json/?$\";s:22:\"index.php?rest_route=/\";s:14:\"^wp-json/(.*)?\";s:33:\"index.php?rest_route=/$matches[1]\";s:21:\"^index.php/wp-json/?$\";s:22:\"index.php?rest_route=/\";s:24:\"^index.php/wp-json/(.*)?\";s:33:\"index.php?rest_route=/$matches[1]\";s:12:\"robots\\.txt$\";s:18:\"index.php?robots=1\";s:48:\".*wp-(atom|rdf|rss|rss2|feed|commentsrss2)\\.php$\";s:18:\"index.php?feed=old\";s:20:\".*wp-app\\.php(/.*)?$\";s:19:\"index.php?error=403\";s:16:\".*wp-signup.php$\";s:21:\"index.php?signup=true\";s:18:\".*wp-activate.php$\";s:23:\"index.php?activate=true\";s:18:\".*wp-register.php$\";s:23:\"index.php?register=true\";s:32:\"feed/(feed|rdf|rss|rss2|atom)/?$\";s:27:\"index.php?&feed=$matches[1]\";s:27:\"(feed|rdf|rss|rss2|atom)/?$\";s:27:\"index.php?&feed=$matches[1]\";s:8:\"embed/?$\";s:21:\"index.php?&embed=true\";s:20:\"page/?([0-9]{1,})/?$\";s:28:\"index.php?&paged=$matches[1]\";s:41:\"comments/feed/(feed|rdf|rss|rss2|atom)/?$\";s:42:\"index.php?&feed=$matches[1]&withcomments=1\";s:36:\"comments/(feed|rdf|rss|rss2|atom)/?$\";s:42:\"index.php?&feed=$matches[1]&withcomments=1\";s:17:\"comments/embed/?$\";s:21:\"index.php?&embed=true\";s:44:\"search/(.+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:40:\"index.php?s=$matches[1]&feed=$matches[2]\";s:39:\"search/(.+)/(feed|rdf|rss|rss2|atom)/?$\";s:40:\"index.php?s=$matches[1]&feed=$matches[2]\";s:20:\"search/(.+)/embed/?$\";s:34:\"index.php?s=$matches[1]&embed=true\";s:32:\"search/(.+)/page/?([0-9]{1,})/?$\";s:41:\"index.php?s=$matches[1]&paged=$matches[2]\";s:14:\"search/(.+)/?$\";s:23:\"index.php?s=$matches[1]\";s:47:\"author/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:50:\"index.php?author_name=$matches[1]&feed=$matches[2]\";s:42:\"author/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:50:\"index.php?author_name=$matches[1]&feed=$matches[2]\";s:23:\"author/([^/]+)/embed/?$\";s:44:\"index.php?author_name=$matches[1]&embed=true\";s:35:\"author/([^/]+)/page/?([0-9]{1,})/?$\";s:51:\"index.php?author_name=$matches[1]&paged=$matches[2]\";s:17:\"author/([^/]+)/?$\";s:33:\"index.php?author_name=$matches[1]\";s:69:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/feed/(feed|rdf|rss|rss2|atom)/?$\";s:80:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&feed=$matches[4]\";s:64:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/(feed|rdf|rss|rss2|atom)/?$\";s:80:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&feed=$matches[4]\";s:45:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/embed/?$\";s:74:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&embed=true\";s:57:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/page/?([0-9]{1,})/?$\";s:81:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&paged=$matches[4]\";s:39:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/?$\";s:63:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]\";s:56:\"([0-9]{4})/([0-9]{1,2})/feed/(feed|rdf|rss|rss2|atom)/?$\";s:64:\"index.php?year=$matches[1]&monthnum=$matches[2]&feed=$matches[3]\";s:51:\"([0-9]{4})/([0-9]{1,2})/(feed|rdf|rss|rss2|atom)/?$\";s:64:\"index.php?year=$matches[1]&monthnum=$matches[2]&feed=$matches[3]\";s:32:\"([0-9]{4})/([0-9]{1,2})/embed/?$\";s:58:\"index.php?year=$matches[1]&monthnum=$matches[2]&embed=true\";s:44:\"([0-9]{4})/([0-9]{1,2})/page/?([0-9]{1,})/?$\";s:65:\"index.php?year=$matches[1]&monthnum=$matches[2]&paged=$matches[3]\";s:26:\"([0-9]{4})/([0-9]{1,2})/?$\";s:47:\"index.php?year=$matches[1]&monthnum=$matches[2]\";s:43:\"([0-9]{4})/feed/(feed|rdf|rss|rss2|atom)/?$\";s:43:\"index.php?year=$matches[1]&feed=$matches[2]\";s:38:\"([0-9]{4})/(feed|rdf|rss|rss2|atom)/?$\";s:43:\"index.php?year=$matches[1]&feed=$matches[2]\";s:19:\"([0-9]{4})/embed/?$\";s:37:\"index.php?year=$matches[1]&embed=true\";s:31:\"([0-9]{4})/page/?([0-9]{1,})/?$\";s:44:\"index.php?year=$matches[1]&paged=$matches[2]\";s:13:\"([0-9]{4})/?$\";s:26:\"index.php?year=$matches[1]\";s:58:\"[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/attachment/([^/]+)/?$\";s:32:\"index.php?attachment=$matches[1]\";s:68:\"[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/attachment/([^/]+)/trackback/?$\";s:37:\"index.php?attachment=$matches[1]&tb=1\";s:88:\"[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:83:\"[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:83:\"[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/attachment/([^/]+)/comment-page-([0-9]{1,})/?$\";s:50:\"index.php?attachment=$matches[1]&cpage=$matches[2]\";s:64:\"[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/attachment/([^/]+)/embed/?$\";s:43:\"index.php?attachment=$matches[1]&embed=true\";s:53:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([^/]+)/embed/?$\";s:91:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&name=$matches[4]&embed=true\";s:57:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([^/]+)/trackback/?$\";s:85:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&name=$matches[4]&tb=1\";s:77:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:97:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&name=$matches[4]&feed=$matches[5]\";s:72:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:97:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&name=$matches[4]&feed=$matches[5]\";s:65:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([^/]+)/page/?([0-9]{1,})/?$\";s:98:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&name=$matches[4]&paged=$matches[5]\";s:72:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([^/]+)/comment-page-([0-9]{1,})/?$\";s:98:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&name=$matches[4]&cpage=$matches[5]\";s:61:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([^/]+)(?:/([0-9]+))?/?$\";s:97:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&name=$matches[4]&page=$matches[5]\";s:47:\"[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/([^/]+)/?$\";s:32:\"index.php?attachment=$matches[1]\";s:57:\"[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/([^/]+)/trackback/?$\";s:37:\"index.php?attachment=$matches[1]&tb=1\";s:77:\"[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:72:\"[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:72:\"[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/([^/]+)/comment-page-([0-9]{1,})/?$\";s:50:\"index.php?attachment=$matches[1]&cpage=$matches[2]\";s:53:\"[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/([^/]+)/embed/?$\";s:43:\"index.php?attachment=$matches[1]&embed=true\";s:64:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/comment-page-([0-9]{1,})/?$\";s:81:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&cpage=$matches[4]\";s:51:\"([0-9]{4})/([0-9]{1,2})/comment-page-([0-9]{1,})/?$\";s:65:\"index.php?year=$matches[1]&monthnum=$matches[2]&cpage=$matches[3]\";s:38:\"([0-9]{4})/comment-page-([0-9]{1,})/?$\";s:44:\"index.php?year=$matches[1]&cpage=$matches[2]\";s:27:\".?.+?/attachment/([^/]+)/?$\";s:32:\"index.php?attachment=$matches[1]\";s:37:\".?.+?/attachment/([^/]+)/trackback/?$\";s:37:\"index.php?attachment=$matches[1]&tb=1\";s:57:\".?.+?/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:52:\".?.+?/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:52:\".?.+?/attachment/([^/]+)/comment-page-([0-9]{1,})/?$\";s:50:\"index.php?attachment=$matches[1]&cpage=$matches[2]\";s:33:\".?.+?/attachment/([^/]+)/embed/?$\";s:43:\"index.php?attachment=$matches[1]&embed=true\";s:16:\"(.?.+?)/embed/?$\";s:41:\"index.php?pagename=$matches[1]&embed=true\";s:20:\"(.?.+?)/trackback/?$\";s:35:\"index.php?pagename=$matches[1]&tb=1\";s:40:\"(.?.+?)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:47:\"index.php?pagename=$matches[1]&feed=$matches[2]\";s:35:\"(.?.+?)/(feed|rdf|rss|rss2|atom)/?$\";s:47:\"index.php?pagename=$matches[1]&feed=$matches[2]\";s:28:\"(.?.+?)/page/?([0-9]{1,})/?$\";s:48:\"index.php?pagename=$matches[1]&paged=$matches[2]\";s:35:\"(.?.+?)/comment-page-([0-9]{1,})/?$\";s:48:\"index.php?pagename=$matches[1]&cpage=$matches[2]\";s:24:\"(.?.+?)(?:/([0-9]+))?/?$\";s:47:\"index.php?pagename=$matches[1]&page=$matches[2]\";}','yes'),(30,'hack_file','0','yes'),(31,'blog_charset','UTF-8','yes'),(32,'moderation_keys','','no'),(33,'active_plugins','a:1:{i:0;s:31:\"airplane-mode/airplane-mode.php\";}','yes'),(34,'category_base','','yes'),(35,'ping_sites','http://rpc.pingomatic.com/','yes'),(36,'comment_max_links','2','yes'),(37,'gmt_offset','0','yes'),(38,'default_email_category','1','yes'),(39,'recently_edited','','no'),(40,'template','twentynineteen','yes'),(41,'stylesheet','twentynineteen','yes'),(42,'comment_whitelist','1','yes'),(43,'blacklist_keys','','no'),(44,'comment_registration','0','yes'),(45,'html_type','text/html','yes'),(46,'use_trackback','0','yes'),(47,'default_role','subscriber','yes'),(48,'db_version','44719','yes'),(49,'uploads_use_yearmonth_folders','1','yes'),(50,'upload_path','','yes'),(51,'blog_public','1','yes'),(52,'default_link_category','2','yes'),(53,'show_on_front','posts','yes'),(54,'tag_base','','yes'),(55,'show_avatars','1','yes'),(56,'avatar_rating','G','yes'),(57,'upload_url_path','','yes'),(58,'thumbnail_size_w','150','yes'),(59,'thumbnail_size_h','150','yes'),(60,'thumbnail_crop','1','yes'),(61,'medium_size_w','300','yes'),(62,'medium_size_h','300','yes'),(63,'avatar_default','mystery','yes'),(64,'large_size_w','1024','yes'),(65,'large_size_h','1024','yes'),(66,'image_default_link_type','none','yes'),(67,'image_default_size','','yes'),(68,'image_default_align','','yes'),(69,'close_comments_for_old_posts','0','yes'),(70,'close_comments_days_old','14','yes'),(71,'thread_comments','1','yes'),(72,'thread_comments_depth','5','yes'),(73,'page_comments','0','yes'),(74,'comments_per_page','50','yes'),(75,'default_comments_page','newest','yes'),(76,'comment_order','asc','yes'),(77,'sticky_posts','a:0:{}','yes'),(78,'widget_categories','a:2:{i:2;a:4:{s:5:\"title\";s:0:\"\";s:5:\"count\";i:0;s:12:\"hierarchical\";i:0;s:8:\"dropdown\";i:0;}s:12:\"_multiwidget\";i:1;}','yes'),(79,'widget_text','a:0:{}','yes'),(80,'widget_rss','a:0:{}','yes'),(81,'uninstall_plugins','a:0:{}','no'),(82,'timezone_string','','yes'),(83,'page_for_posts','0','yes'),(84,'page_on_front','0','yes'),(85,'default_post_format','0','yes'),(86,'link_manager_enabled','0','yes'),(87,'finished_splitting_shared_terms','1','yes'),(88,'site_icon','0','yes'),(89,'medium_large_size_w','768','yes'),(90,'medium_large_size_h','0','yes'),(91,'wp_page_for_privacy_policy','0','yes'),(92,'show_comments_cookies_opt_in','1','yes'),(93,'wp_user_roles','a:5:{s:13:\"administrator\";a:2:{s:4:\"name\";s:13:\"Administrator\";s:12:\"capabilities\";a:61:{s:13:\"switch_themes\";b:1;s:11:\"edit_themes\";b:1;s:16:\"activate_plugins\";b:1;s:12:\"edit_plugins\";b:1;s:10:\"edit_users\";b:1;s:10:\"edit_files\";b:1;s:14:\"manage_options\";b:1;s:17:\"moderate_comments\";b:1;s:17:\"manage_categories\";b:1;s:12:\"manage_links\";b:1;s:12:\"upload_files\";b:1;s:6:\"import\";b:1;s:15:\"unfiltered_html\";b:1;s:10:\"edit_posts\";b:1;s:17:\"edit_others_posts\";b:1;s:20:\"edit_published_posts\";b:1;s:13:\"publish_posts\";b:1;s:10:\"edit_pages\";b:1;s:4:\"read\";b:1;s:8:\"level_10\";b:1;s:7:\"level_9\";b:1;s:7:\"level_8\";b:1;s:7:\"level_7\";b:1;s:7:\"level_6\";b:1;s:7:\"level_5\";b:1;s:7:\"level_4\";b:1;s:7:\"level_3\";b:1;s:7:\"level_2\";b:1;s:7:\"level_1\";b:1;s:7:\"level_0\";b:1;s:17:\"edit_others_pages\";b:1;s:20:\"edit_published_pages\";b:1;s:13:\"publish_pages\";b:1;s:12:\"delete_pages\";b:1;s:19:\"delete_others_pages\";b:1;s:22:\"delete_published_pages\";b:1;s:12:\"delete_posts\";b:1;s:19:\"delete_others_posts\";b:1;s:22:\"delete_published_posts\";b:1;s:20:\"delete_private_posts\";b:1;s:18:\"edit_private_posts\";b:1;s:18:\"read_private_posts\";b:1;s:20:\"delete_private_pages\";b:1;s:18:\"edit_private_pages\";b:1;s:18:\"read_private_pages\";b:1;s:12:\"delete_users\";b:1;s:12:\"create_users\";b:1;s:17:\"unfiltered_upload\";b:1;s:14:\"edit_dashboard\";b:1;s:14:\"update_plugins\";b:1;s:14:\"delete_plugins\";b:1;s:15:\"install_plugins\";b:1;s:13:\"update_themes\";b:1;s:14:\"install_themes\";b:1;s:11:\"update_core\";b:1;s:10:\"list_users\";b:1;s:12:\"remove_users\";b:1;s:13:\"promote_users\";b:1;s:18:\"edit_theme_options\";b:1;s:13:\"delete_themes\";b:1;s:6:\"export\";b:1;}}s:6:\"editor\";a:2:{s:4:\"name\";s:6:\"Editor\";s:12:\"capabilities\";a:34:{s:17:\"moderate_comments\";b:1;s:17:\"manage_categories\";b:1;s:12:\"manage_links\";b:1;s:12:\"upload_files\";b:1;s:15:\"unfiltered_html\";b:1;s:10:\"edit_posts\";b:1;s:17:\"edit_others_posts\";b:1;s:20:\"edit_published_posts\";b:1;s:13:\"publish_posts\";b:1;s:10:\"edit_pages\";b:1;s:4:\"read\";b:1;s:7:\"level_7\";b:1;s:7:\"level_6\";b:1;s:7:\"level_5\";b:1;s:7:\"level_4\";b:1;s:7:\"level_3\";b:1;s:7:\"level_2\";b:1;s:7:\"level_1\";b:1;s:7:\"level_0\";b:1;s:17:\"edit_others_pages\";b:1;s:20:\"edit_published_pages\";b:1;s:13:\"publish_pages\";b:1;s:12:\"delete_pages\";b:1;s:19:\"delete_others_pages\";b:1;s:22:\"delete_published_pages\";b:1;s:12:\"delete_posts\";b:1;s:19:\"delete_others_posts\";b:1;s:22:\"delete_published_posts\";b:1;s:20:\"delete_private_posts\";b:1;s:18:\"edit_private_posts\";b:1;s:18:\"read_private_posts\";b:1;s:20:\"delete_private_pages\";b:1;s:18:\"edit_private_pages\";b:1;s:18:\"read_private_pages\";b:1;}}s:6:\"author\";a:2:{s:4:\"name\";s:6:\"Author\";s:12:\"capabilities\";a:10:{s:12:\"upload_files\";b:1;s:10:\"edit_posts\";b:1;s:20:\"edit_published_posts\";b:1;s:13:\"publish_posts\";b:1;s:4:\"read\";b:1;s:7:\"level_2\";b:1;s:7:\"level_1\";b:1;s:7:\"level_0\";b:1;s:12:\"delete_posts\";b:1;s:22:\"delete_published_posts\";b:1;}}s:11:\"contributor\";a:2:{s:4:\"name\";s:11:\"Contributor\";s:12:\"capabilities\";a:5:{s:10:\"edit_posts\";b:1;s:4:\"read\";b:1;s:7:\"level_1\";b:1;s:7:\"level_0\";b:1;s:12:\"delete_posts\";b:1;}}s:10:\"subscriber\";a:2:{s:4:\"name\";s:10:\"Subscriber\";s:12:\"capabilities\";a:2:{s:4:\"read\";b:1;s:7:\"level_0\";b:1;}}}','yes'),(94,'fresh_site','1','yes'),(95,'widget_search','a:2:{i:2;a:1:{s:5:\"title\";s:0:\"\";}s:12:\"_multiwidget\";i:1;}','yes'),(96,'widget_recent-posts','a:2:{i:2;a:2:{s:5:\"title\";s:0:\"\";s:6:\"number\";i:5;}s:12:\"_multiwidget\";i:1;}','yes'),(97,'widget_recent-comments','a:2:{i:2;a:2:{s:5:\"title\";s:0:\"\";s:6:\"number\";i:5;}s:12:\"_multiwidget\";i:1;}','yes'),(98,'widget_archives','a:2:{i:2;a:3:{s:5:\"title\";s:0:\"\";s:5:\"count\";i:0;s:8:\"dropdown\";i:0;}s:12:\"_multiwidget\";i:1;}','yes'),(99,'widget_meta','a:2:{i:2;a:1:{s:5:\"title\";s:0:\"\";}s:12:\"_multiwidget\";i:1;}','yes'),(100,'sidebars_widgets','a:3:{s:19:\"wp_inactive_widgets\";a:0:{}s:9:\"sidebar-1\";a:6:{i:0;s:8:\"search-2\";i:1;s:14:\"recent-posts-2\";i:2;s:17:\"recent-comments-2\";i:3;s:10:\"archives-2\";i:4;s:12:\"categories-2\";i:5;s:6:\"meta-2\";}s:13:\"array_version\";i:3;}','yes'),(101,'widget_pages','a:1:{s:12:\"_multiwidget\";i:1;}','yes'),(102,'widget_calendar','a:1:{s:12:\"_multiwidget\";i:1;}','yes'),(103,'widget_media_audio','a:1:{s:12:\"_multiwidget\";i:1;}','yes'),(104,'widget_media_image','a:1:{s:12:\"_multiwidget\";i:1;}','yes'),(105,'widget_media_gallery','a:1:{s:12:\"_multiwidget\";i:1;}','yes'),(106,'widget_media_video','a:1:{s:12:\"_multiwidget\";i:1;}','yes'),(107,'widget_tag_cloud','a:1:{s:12:\"_multiwidget\";i:1;}','yes'),(108,'widget_nav_menu','a:1:{s:12:\"_multiwidget\";i:1;}','yes'),(109,'widget_custom_html','a:1:{s:12:\"_multiwidget\";i:1;}','yes'),(110,'cron','a:3:{i:1557490101;a:1:{s:34:\"wp_privacy_delete_old_export_files\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"hourly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:3600;}}}i:1557529701;a:3:{s:16:\"wp_version_check\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:10:\"twicedaily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:43200;}}s:17:\"wp_update_plugins\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:10:\"twicedaily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:43200;}}s:16:\"wp_update_themes\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:10:\"twicedaily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:43200;}}}s:7:\"version\";i:2;}','yes'),(113,'_transient_timeout_wporg_theme_feature_list','1001557486514','no'),(114,'_transient_wporg_theme_feature_list','a:0:{}','no'); /*!40000 ALTER TABLE `wp_options` ENABLE KEYS */; UNLOCK TABLES; @@ -970,7 +970,7 @@ CREATE TABLE `wp_registration_log` ( LOCK TABLES `wp_registration_log` WRITE; /*!40000 ALTER TABLE `wp_registration_log` DISABLE KEYS */; -INSERT INTO `wp_registration_log` VALUES (1,'admin@wp.test','127.0.0.1',2,'2019-04-05 07:17:45'),(2,'admin@wp.test','127.0.0.1',3,'2019-04-05 07:17:52'); +INSERT INTO `wp_registration_log` VALUES (1,'admin@wp.test','127.0.0.1',2,'2019-05-10 11:08:22'),(2,'admin@wp.test','127.0.0.1',3,'2019-05-10 11:08:26'); /*!40000 ALTER TABLE `wp_registration_log` ENABLE KEYS */; UNLOCK TABLES; @@ -1051,7 +1051,7 @@ CREATE TABLE `wp_sitemeta` ( PRIMARY KEY (`meta_id`), KEY `meta_key` (`meta_key`(191)), KEY `site_id` (`site_id`) -) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1060,7 +1060,7 @@ CREATE TABLE `wp_sitemeta` ( LOCK TABLES `wp_sitemeta` WRITE; /*!40000 ALTER TABLE `wp_sitemeta` DISABLE KEYS */; -INSERT INTO `wp_sitemeta` VALUES (1,1,'user_count','1'),(2,1,'site_name','Test Sites'),(3,1,'admin_email','admin@wp.test'),(4,1,'admin_user_id','1'),(5,1,'registration','none'),(6,1,'upload_filetypes','jpg jpeg png gif mov avi mpg 3gp 3g2 midi mid pdf doc ppt odt pptx docx pps ppsx xls xlsx key mp3 ogg flac m4a wav mp4 m4v webm ogv flv'),(7,1,'blog_upload_space','100'),(8,1,'fileupload_maxk','1500'),(10,1,'allowedthemes','a:1:{s:14:\"twentynineteen\";b:1;}'),(11,1,'illegal_names','a:8:{i:0;s:3:\"www\";i:1;s:3:\"web\";i:2;s:4:\"root\";i:3;s:5:\"admin\";i:4;s:4:\"main\";i:5;s:6:\"invite\";i:6;s:13:\"administrator\";i:7;s:5:\"files\";}'),(12,1,'wpmu_upgrade_site','44719'),(13,1,'welcome_email','Howdy USERNAME,\n\nYour new SITE_NAME site has been successfully set up at:\nBLOG_URL\n\nYou can log in to the administrator account with the following information:\n\nUsername: USERNAME\nPassword: PASSWORD\nLog in here: BLOG_URLwp-login.php\n\nWe hope you enjoy your new site. Thanks!\n\n--The Team @ SITE_NAME'),(14,1,'first_post','Welcome to %s. This is your first post. Edit or delete it, then start writing!'),(15,1,'siteurl','http://wp.test/'),(16,1,'add_new_users','0'),(18,1,'subdomain_install','1'),(19,1,'global_terms_enabled','0'),(20,1,'ms_files_rewriting',''),(21,1,'initial_db_version',''),(22,1,'active_sitewide_plugins','a:0:{}'),(23,1,'WPLANG','en_US'),(24,1,'upload_space_check_disabled','1'),(25,1,'site_admins','a:1:{i:0;s:5:\"admin\";}'),(26,1,'blog_count','3'),(27,1,'site_meta_supported','1'),(28,1,'airplane-mode','on'); +INSERT INTO `wp_sitemeta` VALUES (1,1,'user_count','1'),(2,1,'site_name','Test Sites'),(3,1,'admin_email','admin@wp.test'),(4,1,'admin_user_id','1'),(5,1,'registration','none'),(6,1,'upload_filetypes','jpg jpeg png gif mov avi mpg 3gp 3g2 midi mid pdf doc ppt odt pptx docx pps ppsx xls xlsx key mp3 ogg flac m4a wav mp4 m4v webm ogv flv'),(7,1,'blog_upload_space','100'),(8,1,'fileupload_maxk','1500'),(10,1,'allowedthemes','a:1:{s:14:\"twentynineteen\";b:1;}'),(11,1,'illegal_names','a:8:{i:0;s:3:\"www\";i:1;s:3:\"web\";i:2;s:4:\"root\";i:3;s:5:\"admin\";i:4;s:4:\"main\";i:5;s:6:\"invite\";i:6;s:13:\"administrator\";i:7;s:5:\"files\";}'),(12,1,'wpmu_upgrade_site','44719'),(13,1,'welcome_email','Howdy USERNAME,\n\nYour new SITE_NAME site has been successfully set up at:\nBLOG_URL\n\nYou can log in to the administrator account with the following information:\n\nUsername: USERNAME\nPassword: PASSWORD\nLog in here: BLOG_URLwp-login.php\n\nWe hope you enjoy your new site. Thanks!\n\n--The Team @ SITE_NAME'),(14,1,'first_post','Welcome to %s. This is your first post. Edit or delete it, then start writing!'),(15,1,'siteurl','http://wp.test/'),(16,1,'add_new_users','0'),(18,1,'subdomain_install','1'),(19,1,'global_terms_enabled','0'),(20,1,'ms_files_rewriting',''),(21,1,'initial_db_version',''),(22,1,'active_sitewide_plugins','a:0:{}'),(23,1,'WPLANG','en_US'),(24,1,'upload_space_check_disabled','1'),(25,1,'site_admins','a:1:{i:0;s:5:\"admin\";}'),(26,1,'blog_count','3'),(27,1,'site_meta_supported','1'),(28,1,'_site_transient_update_core','O:8:\"stdClass\":4:{s:7:\"updates\";a:3:{i:0;O:8:\"stdClass\":10:{s:8:\"response\";s:11:\"development\";s:8:\"download\";s:57:\"https://wordpress.org/nightly-builds/wordpress-latest.zip\";s:6:\"locale\";s:5:\"en_US\";s:8:\"packages\";O:8:\"stdClass\":5:{s:4:\"full\";s:57:\"https://wordpress.org/nightly-builds/wordpress-latest.zip\";s:10:\"no_content\";b:0;s:11:\"new_bundled\";b:0;s:7:\"partial\";b:0;s:8:\"rollback\";b:0;}s:7:\"current\";s:15:\"5.3-alpha-45301\";s:7:\"version\";s:15:\"5.3-alpha-45301\";s:11:\"php_version\";s:6:\"5.6.20\";s:13:\"mysql_version\";s:3:\"5.0\";s:11:\"new_bundled\";s:3:\"5.0\";s:15:\"partial_version\";s:0:\"\";}i:1;O:8:\"stdClass\":10:{s:8:\"response\";s:6:\"latest\";s:8:\"download\";s:57:\"https://downloads.wordpress.org/release/wordpress-5.2.zip\";s:6:\"locale\";s:5:\"en_US\";s:8:\"packages\";O:8:\"stdClass\":5:{s:4:\"full\";s:57:\"https://downloads.wordpress.org/release/wordpress-5.2.zip\";s:10:\"no_content\";s:68:\"https://downloads.wordpress.org/release/wordpress-5.2-no-content.zip\";s:11:\"new_bundled\";s:69:\"https://downloads.wordpress.org/release/wordpress-5.2-new-bundled.zip\";s:7:\"partial\";b:0;s:8:\"rollback\";b:0;}s:7:\"current\";s:3:\"5.2\";s:7:\"version\";s:3:\"5.2\";s:11:\"php_version\";s:6:\"5.6.20\";s:13:\"mysql_version\";s:3:\"5.0\";s:11:\"new_bundled\";s:3:\"5.0\";s:15:\"partial_version\";s:0:\"\";}i:2;O:8:\"stdClass\":11:{s:8:\"response\";s:10:\"autoupdate\";s:8:\"download\";s:57:\"https://wordpress.org/nightly-builds/wordpress-latest.zip\";s:6:\"locale\";s:5:\"en_US\";s:8:\"packages\";O:8:\"stdClass\":5:{s:4:\"full\";s:57:\"https://wordpress.org/nightly-builds/wordpress-latest.zip\";s:10:\"no_content\";b:0;s:11:\"new_bundled\";b:0;s:7:\"partial\";b:0;s:8:\"rollback\";b:0;}s:7:\"current\";s:15:\"5.3-alpha-45301\";s:7:\"version\";s:15:\"5.3-alpha-45301\";s:11:\"php_version\";s:6:\"5.6.20\";s:13:\"mysql_version\";s:3:\"5.0\";s:11:\"new_bundled\";s:3:\"5.0\";s:15:\"partial_version\";s:0:\"\";s:9:\"new_files\";s:1:\"1\";}}s:12:\"last_checked\";i:1557486506;s:15:\"version_checked\";s:15:\"5.3-alpha-45292\";s:12:\"translations\";a:0:{}}'),(29,1,'_site_transient_update_plugins','O:8:\"stdClass\":5:{s:12:\"last_checked\";i:1557486507;s:7:\"checked\";a:2:{s:31:\"airplane-mode/airplane-mode.php\";s:5:\"0.2.4\";s:9:\"hello.php\";s:5:\"1.7.2\";}s:8:\"response\";a:0:{}s:12:\"translations\";a:0:{}s:9:\"no_update\";a:1:{s:9:\"hello.php\";O:8:\"stdClass\":9:{s:2:\"id\";s:25:\"w.org/plugins/hello-dolly\";s:4:\"slug\";s:11:\"hello-dolly\";s:6:\"plugin\";s:9:\"hello.php\";s:11:\"new_version\";s:3:\"1.6\";s:3:\"url\";s:42:\"https://wordpress.org/plugins/hello-dolly/\";s:7:\"package\";s:58:\"https://downloads.wordpress.org/plugin/hello-dolly.1.6.zip\";s:5:\"icons\";a:2:{s:2:\"2x\";s:64:\"https://ps.w.org/hello-dolly/assets/icon-256x256.jpg?rev=2052855\";s:2:\"1x\";s:64:\"https://ps.w.org/hello-dolly/assets/icon-128x128.jpg?rev=2052855\";}s:7:\"banners\";a:1:{s:2:\"1x\";s:66:\"https://ps.w.org/hello-dolly/assets/banner-772x250.jpg?rev=2052855\";}s:11:\"banners_rtl\";a:0:{}}}}'),(30,1,'_site_transient_timeout_theme_roots','1557488306'),(31,1,'_site_transient_theme_roots','a:9:{s:12:\"twentyeleven\";s:7:\"/themes\";s:13:\"twentyfifteen\";s:7:\"/themes\";s:14:\"twentyfourteen\";s:7:\"/themes\";s:14:\"twentynineteen\";s:7:\"/themes\";s:15:\"twentyseventeen\";s:7:\"/themes\";s:13:\"twentysixteen\";s:7:\"/themes\";s:9:\"twentyten\";s:7:\"/themes\";s:14:\"twentythirteen\";s:7:\"/themes\";s:12:\"twentytwelve\";s:7:\"/themes\";}'),(32,1,'_site_transient_update_themes','O:8:\"stdClass\":4:{s:12:\"last_checked\";i:1557486507;s:7:\"checked\";a:9:{s:12:\"twentyeleven\";s:3:\"3.3\";s:13:\"twentyfifteen\";s:3:\"2.5\";s:14:\"twentyfourteen\";s:3:\"2.7\";s:14:\"twentynineteen\";s:3:\"1.4\";s:15:\"twentyseventeen\";s:3:\"2.2\";s:13:\"twentysixteen\";s:3:\"2.0\";s:9:\"twentyten\";s:3:\"2.9\";s:14:\"twentythirteen\";s:3:\"2.9\";s:12:\"twentytwelve\";s:3:\"3.0\";}s:8:\"response\";a:0:{}s:12:\"translations\";a:0:{}}'),(33,1,'airplane-mode','on'); /*!40000 ALTER TABLE `wp_sitemeta` ENABLE KEYS */; UNLOCK TABLES; @@ -1235,7 +1235,7 @@ CREATE TABLE `wp_users` ( LOCK TABLES `wp_users` WRITE; /*!40000 ALTER TABLE `wp_users` DISABLE KEYS */; -INSERT INTO `wp_users` VALUES (1,'admin','$P$BUl/.AeGaGomKUjmjTTbK/QR5RNr6I/','admin','admin@wp.test','','2019-04-05 07:17:42','',0,'admin',0,0); +INSERT INTO `wp_users` VALUES (1,'admin','$P$BgZXqluJETJSpa3AQa1Di7Y1fO4y8y1','admin','admin@wp.test','','2019-05-10 11:08:19','',0,'admin',0,0); /*!40000 ALTER TABLE `wp_users` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; @@ -1248,4 +1248,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2019-04-05 7:18:18 +-- Dump completed on 2019-05-10 11:09:43 diff --git a/tests/_data/wploader-wpdb-dump.sql b/tests/_data/wploader-wpdb-dump.sql old mode 100644 new mode 100755 diff --git a/tests/unit/tad/WPBrowser/Filesystem/FileReplacers/WPConfigReplacerTest.php b/tests/unit/tad/WPBrowser/Filesystem/FileReplacers/WPConfigReplacerTest.php new file mode 100644 index 000000000..980dcaca5 --- /dev/null +++ b/tests/unit/tad/WPBrowser/Filesystem/FileReplacers/WPConfigReplacerTest.php @@ -0,0 +1,180 @@ +fsRoot = vfsStream::setup('root', null, [ + 'missing-wp-config' => [ ], + 'wordpress' => [ 'wp-config.php' => 'original' ] + ]); + } + + protected function _after() + { + } + + /** + * @test + * it should throw if destination path is not a string + */ + public function it_should_throw_if_destination_path_is_not_a_string() + { + $path = 23; + $wpconfigContents = $this->contentsProvider(); + $this->setExpectedException('\Codeception\Exception\ModuleConfigException'); + + $sut = new WPConfigReplacer($path, $wpconfigContents->reveal()); + } + + /** + * @test + * it should throw if destination path is not a folder + */ + public function it_should_throw_if_destination_path_is_not_a_folder() + { + $path = 23; + $wpconfigContents = $this->contentsProvider(); + $this->setExpectedException('\Codeception\Exception\ModuleConfigException'); + + $sut = new WPConfigReplacer(vfsStream::url('root') . '/wordpress/wp-config.php', $wpconfigContents->reveal()); + } + + /** + * @test + * it should throw if destination path is not readable + */ + public function it_should_throw_if_destination_path_is_not_readable() + { + $path = 23; + $wpconfigContents = $this->contentsProvider(); + $this->setExpectedException('\Codeception\Exception\ModuleConfigException'); + vfsStream::setup('writeable', 0222, [ 'wordpress' => [ 'wp-config.php' ] ]); + + $sut = new WPConfigReplacer(vfsStream::url('writeable') . '/wordpress/wp-config.php', $wpconfigContents->reveal()); + } + + /** + * @test + * it should throw if destination file is not writeable + */ + public function it_should_throw_if_destination_file_is_not_writeable() + { + $path = 23; + $wpconfigContents = $this->contentsProvider(); + $this->setExpectedException('\Codeception\Exception\ModuleConfigException'); + vfsStream::setup('readable', 0444, [ 'wordpress' => [ 'wp-config.php' ] ]); + + $sut = new WPConfigReplacer(vfsStream::url('readable') . '/wordpress/wp-config.php', $wpconfigContents->reveal()); + } + + /** + * @test + * it should throw if the root folder does not containa a wp-config.php file + */ + public function it_should_throw_if_the_root_folder_does_not_containa_a_wp_config_php_file() + { + $path = 23; + $wpconfigContents = $this->contentsProvider(); + $this->setExpectedException('\Codeception\Exception\ModuleConfigException'); + + $sut = new WPConfigReplacer(vfsStream::url('root') . '/missing-wp-config', $wpconfigContents->reveal()); + } + + /** + * @test + * it should not throw if root folder is write and read able + */ + public function it_should_not_throw_if_root_folder_is_write_and_read_able() + { + $wpconfigContents = $this->contentsProvider(); + $path = 23; + + $sut = new WPConfigReplacer(vfsStream::url('root') . '/wordpress', $wpconfigContents->reveal()); + } + + /** + * @test + * it should move the original wp-config.php file to original-wp-config.php + */ + public function it_should_move_the_original_wp_config_php_file_to_original_wp_config_php() + { + $original = vfsStream::url('root') . '/wordpress/wp-config.php'; + $moved = vfsStream::url('root') . '/wordpress/original-wp-config.php'; + $wpconfigContents = $this->contentsProvider(); + + $sut = new WPConfigReplacer(vfsStream::url('root') . '/wordpress', $wpconfigContents->reveal()); + $sut->replaceOriginal(); + + $this->assertFileExists($moved); + $this->assertEquals('original', file_get_contents($moved)); + } + + /** + * @test + * it should create an alternative wp-config.php file + */ + public function it_should_create_an_alternative_wp_config_php_file() + { + $wpconfigContents = $this->contentsProvider(); + $sut = new WPConfigReplacer(vfsStream::url('root') . '/wordpress', $wpconfigContents->reveal()); + $sut->replaceOriginal(); + + $file = vfsStream::url('root') . '/wordpress/wp-config.php'; + $this->assertFileExists($file); + $this->assertEquals('modified', file_get_contents($file)); + } + + /** + * @test + * it should restore the original wp-config.php file + */ + public function it_should_restore_the_original_wp_config_php_file() + { + $wpconfigContents = $this->contentsProvider(); + $sut = new WPConfigReplacer(vfsStream::url('root') . '/wordpress', $wpconfigContents->reveal()); + + $sut->replaceOriginal(); + $sut->restoreOriginal(); + + $file = vfsStream::url('root') . '/wordpress/wp-config.php'; + $this->assertFileExists($file); + $this->assertEquals('original', file_get_contents($file)); + } + + /** + * @test + * it should unlink the alternative wp-config.php file + */ + public function it_should_unlink_the_alternative_wp_config_php_file() + { + $wpconfigContents = $this->contentsProvider(); + $sut = new WPConfigReplacer(vfsStream::url('root') . '/wordpress', $wpconfigContents->reveal()); + + $sut->replaceOriginal(); + $sut->restoreOriginal(); + + $file = vfsStream::url('root') . '/wordpress/original-wp-config.php'; + $this->assertFileNotExists($file); + } + + /** + * @return \Prophecy\Prophecy\ObjectProphecy + */ + protected function contentsProvider() + { + $wpconfigContents = $this->prophesize('\tad\WPBrowser\Generators\RedirectingWPConfig'); + $wpconfigContents->getContents()->willReturn('modified'); + return $wpconfigContents; + } +} diff --git a/tests/unit/tad/WPBrowser/Filesystem/UtilsTest.php b/tests/unit/tad/WPBrowser/Filesystem/UtilsTest.php new file mode 100644 index 000000000..9f592c040 --- /dev/null +++ b/tests/unit/tad/WPBrowser/Filesystem/UtilsTest.php @@ -0,0 +1,187 @@ +setExpectedException('InvalidArgumentException'); + Utils::homeify(23); + } + + public function noHomeSymbolPaths() + { + return [ + [ 'foo' ], + [ 'foo/bar' ], + [ '/foo/baz/bar' ], + [ '../some/path.here' ], + [ '/../../foo/bar/baz.php' ], + [ '' ] + ]; + } + + /** + * @test + * it should return same string if no home symbol + * @dataProvider noHomeSymbolPaths + */ + public function it_should_return_same_string_if_no_home_symbol($path) + { + $this->assertEquals($path, Utils::homeify($path)); + } + + public function homeSymbolPahts() + { + return [ + [ '~/some/folder/path.php', '/foo/bar/some/folder/path.php', '/foo/bar' ], + [ '~/another/path', '/foo/bar/another/path', '/foo/bar' ], + [ '~', '/foo/bar', '/foo/bar' ] + ]; + } + + /** + * @test + * it should return replaced home symbol + * @dataProvider homeSymbolPahts + */ + public function it_should_return_replaced_home_symbol($path, $expected, $home) + { + $filesystem = $this->prophesize('\tad\WPBrowser\Filesystem\Filesystem'); + $filesystem->getUserHome()->willReturn($home); + $this->assertEquals($expected, Utils::homeify($path, $filesystem->reveal())); + } + + public function untrailslashPaths() + { + return [ + [ '/some', '/some' ], + [ '/some/path', '/some/path' ], + [ '/some/path/', '/some/path' ], + [ 'some/path/', 'some/path' ], + [ '../some/path/', '../some/path' ], + [ '/some/path/../', '/some/path/..' ], + [ '/', '/' ], + [ '', '' ] + ]; + } + + /** + * @test + * it should allow untrailslash paths + * @dataProvider untrailslashPaths + */ + public function it_should_allow_untrailslash_paths($path, $expected) + { + $this->assertEquals($expected, Utils::untrailslashit($path)); + } + + public function unleadslashPaths() + { + return [ + [ '/some', 'some' ], + [ '/some/path', 'some/path' ], + [ '/some/path/', 'some/path/' ], + [ 'some/path/', 'some/path/' ], + [ '../some/path/', '../some/path/' ], + [ '/some/path/../', 'some/path/../' ], + [ '/', '/' ], + [ '', '' ] + ]; + } + + /** + * @test + * it should allow unleadslash paths + * @dataProvider unleadslashPaths + */ + public function it_should_allow_unleadslash_paths($path, $expected) + { + $this->assertEquals($expected, Utils::unleadslashit($path)); + } + + /** + * @test + * it should allow finding file in current dir + */ + public function it_should_allow_finding_file_in_current_dir() + { + $path = dirname(__FILE__) . '/foo.php'; + touch($path); + $this->assertEquals($path, Utils::findHereOrInParent('/foo.php', dirname(__FILE__))); + unlink($path); + } + + /** + * @test + * it should not find non existing file + */ + public function it_should_not_find_non_existing_file() + { + $this->assertFalse(Utils::findHereOrInParent('/bar.php', dirname(__FILE__))); + } + + /** + * @test + * it should find file in parent + */ + public function it_should_find_file_in_parent() + { + $path = dirname(dirname(dirname(__FILE__))) . '/foo.php'; + touch($path); + $this->assertEquals($path, Utils::findHereOrInParent('/foo.php', dirname(__FILE__))); + unlink($path); + } + + /** + * @test + * it should find file with just name + */ + public function it_should_find_file_with_just_name() + { + $path = dirname(dirname(dirname(__FILE__))) . '/foo.php'; + touch($path); + $this->assertEquals($path, Utils::findHereOrInParent('foo.php', dirname(__FILE__))); + unlink($path); + } + + /** + * @test + * it should find file with relative path + */ + public function it_should_find_file_with_relative_path() + { + $folder = dirname(dirname(dirname(__FILE__))) . '/someFolder'; + mkdir($folder); + $path = dirname(dirname(dirname(__FILE__))) . '/someFolder/foo.php'; + touch($path); + $this->assertEquals($path, Utils::findHereOrInParent('someFolder/foo.php', dirname(__FILE__))); + unlink($path); + rmdir($folder); + } + + /** + * @test + * it should find files with relative dirnname + */ + public function it_should_find_files_with_relative_dirnname() + { + $path = dirname(dirname(dirname(__FILE__))) . '/foo.php'; + touch($path); + $this->assertEquals($path, Utils::findHereOrInParent('../../foo.php', dirname(__FILE__))); + unlink($path); + } +} diff --git a/tests/unit/tad/WPBrowser/Services/WP/BootstrapperTest.php b/tests/unit/tad/WPBrowser/Services/WP/BootstrapperTest.php new file mode 100644 index 000000000..b5d91bc3f --- /dev/null +++ b/tests/unit/tad/WPBrowser/Services/WP/BootstrapperTest.php @@ -0,0 +1,133 @@ +make_instance(); + + $this->assertInstanceOf('tad\WPBrowser\Services\WP\Bootstrapper', $sut); + } + + /** + * @return Bootstrapper + */ + private function make_instance() + { + return new Bootstrapper($this->wpLoadPath, $this->system->reveal()); + } + + /** + * @test + * it should allow setting the wpLoadPath + */ + public function it_should_allow_setting_the_wp_load_path() + { + $sut = $this->make_instance(); + + $sut->setWpLoadPath('foo'); + + $this->assertEquals('foo', $sut->getWpLoadPath()); + } + + /** + * @test + * it should allow setting the bootstrap file path + */ + public function it_should_allow_setting_the_bootstrap_file_path() + { + $sut = $this->make_instance(); + + $sut->setBootstrapScriptFilePath('foo'); + + $this->assertEquals('foo', $sut->getBootstrapScriptFilePath()); + } + + /** + * @test + * it should exec bootstrap script with request + */ + public function it_should_exec_bootstrap_script_with_request() + { + $sut = $this->make_instance(); + $sut->setBootstrapScriptFilePath('foo'); + $request = ['some' => 'request']; + + $this->system->system(PHP_BINARY . ' ' . escapeshellarg('foo') . ' ' . escapeshellarg($this->wpLoadPath) . ' ' . escapeshellarg(serialize($request))) + ->willReturn(serialize(['some' => 'output'])); + + $sut->bootstrapWpAndExec($request); + } + + /** + * @test + * it should exec bootstrap with proper parameters when requesting nonces + */ + public function it_should_exec_bootstrap_with_proper_parameters_when_requesting_nonces() + { + $sut = $this->make_instance(); + $sut->setBootstrapScriptFilePath('foo'); + $credentials = [ + 'username' => 'foo', + 'password' => 'bar', + 'authCookie' => new Cookie('auth', 'foo'), + 'loginCookie' => new Cookie('login', 'bar') + ]; + + $request = [ + 'action' => 'some_action', + 'credentials' => [ + 'user_login' => $credentials['username'], + 'user_password' => $credentials['password'], + 'remember' => true + ], + 'cookies' => [ + 'auth' => 'foo', + 'login' => 'bar' + ] + ]; + $this->system->system(PHP_BINARY . ' ' . escapeshellarg('foo') . ' ' . escapeshellarg($this->wpLoadPath) . ' ' . escapeshellarg(serialize($request))) + ->willReturn(serialize(['some' => 'output'])); + + $sut->createNonce('some_action', $credentials); + } + + protected function _before() + { + $wp = vfsStream::newDirectory('wp'); + $wpLoadFile = vfsStream::newFile('wp-load.php'); + $wpLoadFile->setContent('foo'); + $wp->addChild($wpLoadFile); + $this->wpLoadPath = $wp->url() . '/wp-load.php'; + $this->system = $this->prophesize(System::class); + } + + protected function _after() + { + } +} From a7d1ccfee3c01849a9bb891e13387f86dab921a6 Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Fri, 10 May 2019 15:27:42 +0200 Subject: [PATCH 08/37] build(.travis.yml): cover all codeception and version combinations --- .travis.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.travis.yml b/.travis.yml index 2504854f8..cd0b2b139 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,10 +10,16 @@ matrix: include: - php: '5.6' env: CODECEPTION_VERSION="^2.5" + - php: '5.6' + env: CODECEPTION_VERSION="^3.0" - php: '7.0' env: CODECEPTION_VERSION="^2.5" + - php: '7.0' + env: CODECEPTION_VERSION="^3.0" - php: '7.1' env: CODECEPTION_VERSION="^2.5" + - php: '7.1' + env: CODECEPTION_VERSION="^3.0" - php: '7.2' env: CODECEPTION_VERSION="^2.5" - php: '7.2' From 848e53b632334bb60f144cfe14457f80d0623ac0 Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Fri, 10 May 2019 17:24:33 +0200 Subject: [PATCH 09/37] build(composer.json): add missing dependencies from wp-browser-commons --- composer.json | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/composer.json b/composer.json index ef527903a..92395c416 100644 --- a/composer.json +++ b/composer.json @@ -20,19 +20,24 @@ "php": ">=5.6.0", "ext-pdo": "*", "ext-fileinfo": "*", - "wp-cli/wp-cli-bundle": ">=2.0 <3.0.0", - "symfony/process": ">=2.7 <5.0", "antecedent/patchwork": "^2.0", + "bacon/bacon-string-utils": "~1.0", + "codeception/codeception": ">=2.5", "gumlet/php-image-resize": "^1.6", + "dg/mysql-dump": "^1.3", + "symfony/filesystem": "^3.0", + "symfony/process": ">=2.7 <5.0", + "mikemclin/laravel-wp-password": "~2.0.0", "vlucas/phpdotenv": "^3.0", - "codeception/codeception": ">=2.5" + "xamin/handlebars.php": "~0.10", + "wp-cli/wp-cli-bundle": ">=2.0 <3.0.0" }, "require-dev": { - "mikey179/vfsstream": "^1.6", - "victorjonsson/markdowndocs": "dev-master", "erusev/parsedown": "^1.7", + "lucatume/codeception-snapshot-assertions": "^0.1", + "mikey179/vfsstream": "^1.6", "squizlabs/php_codesniffer": "^3.4", - "lucatume/codeception-snapshot-assertions": "^0.1" + "victorjonsson/markdowndocs": "dev-master" }, "autoload": { "psr-4": { From 566302d3b7c6d4e3500ed3ab1fa92d55f6b9df51 Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Sat, 11 May 2019 11:18:14 +0200 Subject: [PATCH 10/37] fix(UtilsTest.php): extend the namespaced version of PHPUnit test case in place of the global one --- tests/unit/tad/WPBrowser/Filesystem/UtilsTest.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/unit/tad/WPBrowser/Filesystem/UtilsTest.php b/tests/unit/tad/WPBrowser/Filesystem/UtilsTest.php index 9f592c040..0a143e927 100644 --- a/tests/unit/tad/WPBrowser/Filesystem/UtilsTest.php +++ b/tests/unit/tad/WPBrowser/Filesystem/UtilsTest.php @@ -1,7 +1,9 @@ Date: Sat, 11 May 2019 19:00:18 +0200 Subject: [PATCH 11/37] test(UtilsTest): fix use of deprectaed PHPUnit function --- tests/unit/tad/WPBrowser/Filesystem/UtilsTest.php | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/tests/unit/tad/WPBrowser/Filesystem/UtilsTest.php b/tests/unit/tad/WPBrowser/Filesystem/UtilsTest.php index 0a143e927..ba7a6164c 100644 --- a/tests/unit/tad/WPBrowser/Filesystem/UtilsTest.php +++ b/tests/unit/tad/WPBrowser/Filesystem/UtilsTest.php @@ -1,26 +1,18 @@ setExpectedException('InvalidArgumentException'); + $this->expectException(InvalidArgumentException::class); Utils::homeify(23); } From af1d3270d6eef6a92af0ee50c67c1749fc2fab34 Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Mon, 13 May 2019 15:06:06 +0200 Subject: [PATCH 12/37] fix(PHPUnit method deprecation): remove usages of the `TestCase::setExpectedException` method --- src/Codeception/TestCase/WPAjaxTestCase.php | 4 ++-- src/includes/testcase-ajax.php | 4 ++-- .../Filesystem/FileReplacers/WPConfigReplacerTest.php | 10 +++++----- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Codeception/TestCase/WPAjaxTestCase.php b/src/Codeception/TestCase/WPAjaxTestCase.php index 04138c847..1124546c4 100644 --- a/src/Codeception/TestCase/WPAjaxTestCase.php +++ b/src/Codeception/TestCase/WPAjaxTestCase.php @@ -212,12 +212,12 @@ public function getDieHandler() * Error conditions (no output, just die) will throw WPAjaxDieStopException( $message ) * You can test for this with: * - * $this->setExpectedException( 'WPAjaxDieStopException', 'something contained in $message' ); + * $this->expectException( WPAjaxDieStopException::classs, 'something contained in $message' ); * * Normal program termination (wp_die called at then end of output) will throw WPAjaxDieContinueException( * $message ) You can test for this with: * - * $this->setExpectedException( 'WPAjaxDieContinueException', 'something contained in $message' ); + * $this->expectException( WPAjaxDieContinueException::class, 'something contained in $message' ); * * * @param string $message diff --git a/src/includes/testcase-ajax.php b/src/includes/testcase-ajax.php index 787e6bf5f..e24db8864 100644 --- a/src/includes/testcase-ajax.php +++ b/src/includes/testcase-ajax.php @@ -139,12 +139,12 @@ public function getDieHandler() { * Error conditions (no output, just die) will throw WPAjaxDieStopException( $message ) * You can test for this with: * - * $this->setExpectedException( 'WPAjaxDieStopException', 'something contained in $message' ); + * $this->expectException( WPAjaxDieStopException::class, 'something contained in $message' ); * * Normal program termination (wp_die called at then end of output) will throw WPAjaxDieContinueException( $message ) * You can test for this with: * - * $this->setExpectedException( 'WPAjaxDieContinueException', 'something contained in $message' ); + * $this->expectException( WPAjaxDieContinueException::class, 'something contained in $message' ); * * @param string $message */ diff --git a/tests/unit/tad/WPBrowser/Filesystem/FileReplacers/WPConfigReplacerTest.php b/tests/unit/tad/WPBrowser/Filesystem/FileReplacers/WPConfigReplacerTest.php index 980dcaca5..e95aa153a 100644 --- a/tests/unit/tad/WPBrowser/Filesystem/FileReplacers/WPConfigReplacerTest.php +++ b/tests/unit/tad/WPBrowser/Filesystem/FileReplacers/WPConfigReplacerTest.php @@ -32,7 +32,7 @@ public function it_should_throw_if_destination_path_is_not_a_string() { $path = 23; $wpconfigContents = $this->contentsProvider(); - $this->setExpectedException('\Codeception\Exception\ModuleConfigException'); + $this->expectException( ModuleConfigException::class ); $sut = new WPConfigReplacer($path, $wpconfigContents->reveal()); } @@ -45,7 +45,7 @@ public function it_should_throw_if_destination_path_is_not_a_folder() { $path = 23; $wpconfigContents = $this->contentsProvider(); - $this->setExpectedException('\Codeception\Exception\ModuleConfigException'); + $this->expectException( ModuleConfigException::class ); $sut = new WPConfigReplacer(vfsStream::url('root') . '/wordpress/wp-config.php', $wpconfigContents->reveal()); } @@ -58,7 +58,7 @@ public function it_should_throw_if_destination_path_is_not_readable() { $path = 23; $wpconfigContents = $this->contentsProvider(); - $this->setExpectedException('\Codeception\Exception\ModuleConfigException'); + $this->expectException( ModuleConfigException::class ); vfsStream::setup('writeable', 0222, [ 'wordpress' => [ 'wp-config.php' ] ]); $sut = new WPConfigReplacer(vfsStream::url('writeable') . '/wordpress/wp-config.php', $wpconfigContents->reveal()); @@ -72,7 +72,7 @@ public function it_should_throw_if_destination_file_is_not_writeable() { $path = 23; $wpconfigContents = $this->contentsProvider(); - $this->setExpectedException('\Codeception\Exception\ModuleConfigException'); + $this->expectException( ModuleConfigException::class ); vfsStream::setup('readable', 0444, [ 'wordpress' => [ 'wp-config.php' ] ]); $sut = new WPConfigReplacer(vfsStream::url('readable') . '/wordpress/wp-config.php', $wpconfigContents->reveal()); @@ -86,7 +86,7 @@ public function it_should_throw_if_the_root_folder_does_not_containa_a_wp_config { $path = 23; $wpconfigContents = $this->contentsProvider(); - $this->setExpectedException('\Codeception\Exception\ModuleConfigException'); + $this->expectException( ModuleConfigException::class ); $sut = new WPConfigReplacer(vfsStream::url('root') . '/missing-wp-config', $wpconfigContents->reveal()); } From 29440365b53c96861eeef39b0a79988a2db9efae Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Mon, 13 May 2019 15:06:55 +0200 Subject: [PATCH 13/37] style(WPConfigReplacerTest.php): fix code style --- .../Filesystem/FileReplacers/WPConfigReplacerTest.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/unit/tad/WPBrowser/Filesystem/FileReplacers/WPConfigReplacerTest.php b/tests/unit/tad/WPBrowser/Filesystem/FileReplacers/WPConfigReplacerTest.php index e95aa153a..ee056e859 100644 --- a/tests/unit/tad/WPBrowser/Filesystem/FileReplacers/WPConfigReplacerTest.php +++ b/tests/unit/tad/WPBrowser/Filesystem/FileReplacers/WPConfigReplacerTest.php @@ -32,7 +32,7 @@ public function it_should_throw_if_destination_path_is_not_a_string() { $path = 23; $wpconfigContents = $this->contentsProvider(); - $this->expectException( ModuleConfigException::class ); + $this->expectException(ModuleConfigException::class); $sut = new WPConfigReplacer($path, $wpconfigContents->reveal()); } @@ -45,7 +45,7 @@ public function it_should_throw_if_destination_path_is_not_a_folder() { $path = 23; $wpconfigContents = $this->contentsProvider(); - $this->expectException( ModuleConfigException::class ); + $this->expectException(ModuleConfigException::class); $sut = new WPConfigReplacer(vfsStream::url('root') . '/wordpress/wp-config.php', $wpconfigContents->reveal()); } @@ -58,7 +58,7 @@ public function it_should_throw_if_destination_path_is_not_readable() { $path = 23; $wpconfigContents = $this->contentsProvider(); - $this->expectException( ModuleConfigException::class ); + $this->expectException(ModuleConfigException::class); vfsStream::setup('writeable', 0222, [ 'wordpress' => [ 'wp-config.php' ] ]); $sut = new WPConfigReplacer(vfsStream::url('writeable') . '/wordpress/wp-config.php', $wpconfigContents->reveal()); @@ -72,7 +72,7 @@ public function it_should_throw_if_destination_file_is_not_writeable() { $path = 23; $wpconfigContents = $this->contentsProvider(); - $this->expectException( ModuleConfigException::class ); + $this->expectException(ModuleConfigException::class); vfsStream::setup('readable', 0444, [ 'wordpress' => [ 'wp-config.php' ] ]); $sut = new WPConfigReplacer(vfsStream::url('readable') . '/wordpress/wp-config.php', $wpconfigContents->reveal()); @@ -86,7 +86,7 @@ public function it_should_throw_if_the_root_folder_does_not_containa_a_wp_config { $path = 23; $wpconfigContents = $this->contentsProvider(); - $this->expectException( ModuleConfigException::class ); + $this->expectException(ModuleConfigException::class); $sut = new WPConfigReplacer(vfsStream::url('root') . '/missing-wp-config', $wpconfigContents->reveal()); } From a721f66340b662c00e5a029bedcf13ce2dbe5d02 Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Mon, 13 May 2019 15:53:01 +0200 Subject: [PATCH 14/37] docs(docs/WPLoader.md): regenerate the WPLoader module documentation --- docs/modules/WPLoader.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/modules/WPLoader.md b/docs/modules/WPLoader.md index 12b04cfb1..54989f2ee 100644 --- a/docs/modules/WPLoader.md +++ b/docs/modules/WPLoader.md @@ -141,7 +141,7 @@ modules:
-

Accessor method to get the object storing the factories for things. This methods gives access to the same factories provided by the PHPUnit Core test suite.

+

Accessor method to get the object storing the factories for things. This methods gives access to the same factories provided by the Core test suite.

    $postId = $I->factory()->post->create();
     $userId = $I->factory()->user->create(['role' => 'administrator']);
From 26c8df04d100dcf0ba9bef89fe2420fe2506866c Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Mon, 13 May 2019 15:57:37 +0200 Subject: [PATCH 15/37] docs(changelog.md): add release changelog entry --- docs/changelog.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/changelog.md b/docs/changelog.md index 1cd18d28a..8a2d33b5e 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -4,6 +4,11 @@ This project adheres to [Semantic Versioning](http://semver.org/). ## [unreleased] Unreleased +## [2.2.8] 2019-05-13; +### Changed +- udpated requirement of `codeception/codeception` to include version `3.0` +- internalized the classes and functions provided by the `lucatume/wp-browser-commons` package + ## [2.2.7] 2019-05-08; ### Changed - replaced `wp-cli/wp-cli:1.1.*` dependecy with the `wp-cli/wp-cli-bundle:^2.0` one @@ -866,7 +871,8 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Fixed - Reference to ModuleConfigException class in WPLoader class. -[unreleased]: https://github.com/lucatume/wp-browser/compare/2.2.7...HEAD +[unreleased]: https://github.com/lucatume/wp-browser/compare/2.2.8...HEAD +[2.2.8]: https://github.com/lucatume/wp-browser/compare/2.2.7...2.2.8: [2.2.7]: https://github.com/lucatume/wp-browser/compare/2.2.6...2.2.7: [2.2.6]: https://github.com/lucatume/wp-browser/compare/2.2.5...2.2.6: [2.2.5]: https://github.com/lucatume/wp-browser/compare/2.2.4...2.2.5 From 7eb4a86dad81f04a3c48245c1615040b01e0c4dc Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Mon, 13 May 2019 19:58:26 +0200 Subject: [PATCH 16/37] fix(testcases): update testcases to override the PHPUnit wrapper class --- src/Codeception/TestCase/WPAjaxTestCase.php | 6 +++--- src/Codeception/TestCase/WPCanonicalTestCase.php | 2 +- src/Codeception/TestCase/WPRestControllerTestCase.php | 4 ++-- src/Codeception/TestCase/WPTestCase.php | 8 ++++---- src/Codeception/TestCase/WPXMLRPCTestCase.php | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Codeception/TestCase/WPAjaxTestCase.php b/src/Codeception/TestCase/WPAjaxTestCase.php index 1124546c4..e56fb26ae 100644 --- a/src/Codeception/TestCase/WPAjaxTestCase.php +++ b/src/Codeception/TestCase/WPAjaxTestCase.php @@ -124,7 +124,7 @@ abstract class WPAjaxTestCase extends WPTestCase 'get-post-thumbnail-html', ); - public static function setUpBeforeClass() + public static function _setUpBeforeClass() { if (!defined('DOING_AJAX')) { define('DOING_AJAX', true); @@ -148,7 +148,7 @@ public static function setUpBeforeClass() * Set up the test fixture. * Override wp_die(), pretend to be ajax, and suppres E_WARNINGs */ - public function setUp() + public function _setUp() { parent::setUp(); @@ -171,7 +171,7 @@ public function setUp() * Tear down the test fixture. * Reset $_POST, remove the wp_die() override, restore error reporting */ - public function tearDown() + public function _tearDown() { parent::tearDown(); $_POST = array(); diff --git a/src/Codeception/TestCase/WPCanonicalTestCase.php b/src/Codeception/TestCase/WPCanonicalTestCase.php index f87bba9b9..5728933c2 100644 --- a/src/Codeception/TestCase/WPCanonicalTestCase.php +++ b/src/Codeception/TestCase/WPCanonicalTestCase.php @@ -28,7 +28,7 @@ public static function wpTearDownAfterClass() self::delete_shared_fixtures(); } - public function setUp() + public function _setUp() { parent::setUp(); diff --git a/src/Codeception/TestCase/WPRestControllerTestCase.php b/src/Codeception/TestCase/WPRestControllerTestCase.php index 14d8e889c..dbb638381 100644 --- a/src/Codeception/TestCase/WPRestControllerTestCase.php +++ b/src/Codeception/TestCase/WPRestControllerTestCase.php @@ -7,7 +7,7 @@ abstract class WPRestControllerTestCase extends WPRestApiTestCase protected $server; - public function setUp() + public function _setUp() { parent::setUp(); add_filter('rest_url', array($this, 'filter_rest_url_for_leading_slash'), 10, 2); @@ -17,7 +17,7 @@ public function setUp() do_action('rest_api_init'); } - public function tearDown() + public function _tearDown() { parent::tearDown(); remove_filter('rest_url', array($this, 'test_rest_url_for_leading_slash'), 10, 2); diff --git a/src/Codeception/TestCase/WPTestCase.php b/src/Codeception/TestCase/WPTestCase.php index 05039bc63..c2b925952 100644 --- a/src/Codeception/TestCase/WPTestCase.php +++ b/src/Codeception/TestCase/WPTestCase.php @@ -35,7 +35,7 @@ class WPTestCase extends \Codeception\Test\Unit protected $backupGlobals = false; - public static function setUpBeforeClass() + public static function _setUpBeforeClass() { global $wpdb; @@ -93,7 +93,7 @@ protected static function factory() return $factory; } - public static function tearDownAfterClass() + public static function _tearDownAfterClass() { parent::tearDownAfterClass(); @@ -170,7 +170,7 @@ public function __get($name) } } - public function setUp() + public function _setUp() { parent::setUp(); @@ -388,7 +388,7 @@ public function expectDeprecated() /** * After a test method runs, reset any state in WordPress the test method might have changed. */ - public function tearDown() + public function _tearDown() { global $wpdb, $wp_query, $wp; $wpdb->query('ROLLBACK'); diff --git a/src/Codeception/TestCase/WPXMLRPCTestCase.php b/src/Codeception/TestCase/WPXMLRPCTestCase.php index aa068dfed..168901f0c 100644 --- a/src/Codeception/TestCase/WPXMLRPCTestCase.php +++ b/src/Codeception/TestCase/WPXMLRPCTestCase.php @@ -12,7 +12,7 @@ class WPXMLRPCTestCase extends WPTestCase { protected $myxmlrpcserver; - public function setUp() + public function _setUp() { parent::setUp(); @@ -21,7 +21,7 @@ public function setUp() $this->myxmlrpcserver = new \wp_xmlrpc_server(); } - public function tearDown() + public function _tearDown() { remove_filter('pre_option_enable_xmlrpc', '__return_true'); From 866dd01d3f929c07c43646f10230c345fefed649 Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Mon, 13 May 2019 23:22:56 +0200 Subject: [PATCH 17/37] Update WPTestCase.php --- src/Codeception/TestCase/WPTestCase.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Codeception/TestCase/WPTestCase.php b/src/Codeception/TestCase/WPTestCase.php index c2b925952..3886bac03 100644 --- a/src/Codeception/TestCase/WPTestCase.php +++ b/src/Codeception/TestCase/WPTestCase.php @@ -44,7 +44,7 @@ public static function _setUpBeforeClass() $wpdb->db_connect(); ini_set('display_errors', 1); - parent::setUpBeforeClass(); + parent::_setUpBeforeClass(); $c = self::get_called_class(); if (!method_exists($c, 'wpSetUpBeforeClass')) { @@ -95,7 +95,7 @@ protected static function factory() public static function _tearDownAfterClass() { - parent::tearDownAfterClass(); + parent::_tearDownAfterClass(); _delete_all_data(); self::flush_cache(); @@ -172,7 +172,7 @@ public function __get($name) public function _setUp() { - parent::setUp(); + parent::_setUp(); set_time_limit(0); @@ -424,7 +424,7 @@ public function _tearDown() $this->_restore_hooks(); wp_set_current_user(0); - parent::tearDown(); + parent::_tearDown(); } /** From 2291659ca93ece358991219bb67c0c705fba6e14 Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Mon, 13 May 2019 23:57:34 +0200 Subject: [PATCH 18/37] Update WPTestCase.php --- src/Codeception/TestCase/WPTestCase.php | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/Codeception/TestCase/WPTestCase.php b/src/Codeception/TestCase/WPTestCase.php index 3886bac03..89fdd4b4f 100644 --- a/src/Codeception/TestCase/WPTestCase.php +++ b/src/Codeception/TestCase/WPTestCase.php @@ -44,8 +44,6 @@ public static function _setUpBeforeClass() $wpdb->db_connect(); ini_set('display_errors', 1); - parent::_setUpBeforeClass(); - $c = self::get_called_class(); if (!method_exists($c, 'wpSetUpBeforeClass')) { self::commit_transaction(); @@ -95,8 +93,6 @@ protected static function factory() public static function _tearDownAfterClass() { - parent::_tearDownAfterClass(); - _delete_all_data(); self::flush_cache(); @@ -172,8 +168,6 @@ public function __get($name) public function _setUp() { - parent::_setUp(); - set_time_limit(0); if (!self::$ignore_files) { @@ -423,8 +417,6 @@ public function _tearDown() remove_filter('wp_die_handler', array($this, 'get_wp_die_handler')); $this->_restore_hooks(); wp_set_current_user(0); - - parent::_tearDown(); } /** From 61864428bbbd8822c41c7fc818247bc3afb4565d Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Tue, 14 May 2019 12:46:42 +0200 Subject: [PATCH 19/37] fix(PHPUnit compat): Add a compatibility layer for PHPUnit test case This fix adds a compatibility layer around the PHPUnit test case wrapper provided by the `codeception/phpunit-wrapper` package to make sure the `WPTestCase` will keep its compatibility with PHPUnit on version 8 too. --- Makefile | 7 ++-- composer.json | 3 +- src/Codeception/TestCase/WPTestCase.php | 7 ++-- .../Compat/PHPUnit/Base/Testcase.php | 35 +++++++++++++++++++ .../Compat/PHPUnit/Version8/Testcase.php | 33 +++++++++++++++++ src/tad/WPBrowser/functions.php | 3 +- src/tad/WPBrowser/phpunit-compat.php | 18 ++++++++++ 7 files changed, 98 insertions(+), 8 deletions(-) create mode 100644 src/tad/WPBrowser/Compat/PHPUnit/Base/Testcase.php create mode 100644 src/tad/WPBrowser/Compat/PHPUnit/Version8/Testcase.php create mode 100644 src/tad/WPBrowser/phpunit-compat.php diff --git a/Makefile b/Makefile index 6fbafe64d..31b85d62f 100644 --- a/Makefile +++ b/Makefile @@ -55,10 +55,13 @@ docker/parallel-lint/id: # Lints the source files with PHP Parallel Lint, requires the parallel-lint:5.6 image to be built. lint: docker/parallel-lint/id - docker run --rm -v ${CURDIR}:/app lucatume/parallel-lint:5.6 --colors /app/src + docker run --rm -v ${CURDIR}:/app lucatume/parallel-lint:5.6 \ + --exclude /app/src/tad/WPBrowser/Compat/PHPUnit/Version8 \ + --colors \ + /app/src cs_sniff: - vendor/bin/phpcs --colors -p --standard=phpcs.xml $(SRC) --ignore=src/data,src/includes,src/tad/scripts -s src + vendor/bin/phpcs --colors -p --standard=phpcs.xml $(SRC) --ignore=src/data,src/includes,src/tad/scripts,src/tad/WPBrowser/Compat -s src cs_fix: vendor/bin/phpcbf --colors -p --standard=phpcs.xml $(SRC) --ignore=src/data,src/includes,src/tad/scripts -s src tests diff --git a/composer.json b/composer.json index 92395c416..7a1b2881c 100644 --- a/composer.json +++ b/composer.json @@ -45,7 +45,8 @@ "tad\\": "src/tad" }, "files": [ - "src/tad/WPBrowser/functions.php" + "src/tad/WPBrowser/functions.php", + "src/tad/WPBrowser/phpunit-compat.php" ] } } diff --git a/src/Codeception/TestCase/WPTestCase.php b/src/Codeception/TestCase/WPTestCase.php index 89fdd4b4f..4bc501769 100644 --- a/src/Codeception/TestCase/WPTestCase.php +++ b/src/Codeception/TestCase/WPTestCase.php @@ -1,5 +1,4 @@ expectedDeprecated(); } diff --git a/src/tad/WPBrowser/Compat/PHPUnit/Base/Testcase.php b/src/tad/WPBrowser/Compat/PHPUnit/Base/Testcase.php new file mode 100644 index 000000000..806c4a8c2 --- /dev/null +++ b/src/tad/WPBrowser/Compat/PHPUnit/Base/Testcase.php @@ -0,0 +1,35 @@ += 8.0. + * + * @package tad\WPBrowser\Compat\PHPUnit + */ + +namespace tad\WPBrowser\Compat\PHPUnit; + +use Codeception\Test\Unit; + +/** + * Class Testcase + * + * @package tad\WPBrowser\Compat\PHPUnit + */ +class Testcase extends Unit +{ + protected function assertPreConditions(): void + { + if (method_exists(get_called_class(), '_assertPreConditions')) { + static::_assertPreConditions(); + } + } + protected function assertPostConditions(): void + { + if (method_exists(get_called_class(), '_assertPostConditions')) { + static::_assertPostConditions(); + } + } +} diff --git a/src/tad/WPBrowser/functions.php b/src/tad/WPBrowser/functions.php index 0f434f53e..0b8732d3d 100644 --- a/src/tad/WPBrowser/functions.php +++ b/src/tad/WPBrowser/functions.php @@ -7,9 +7,10 @@ /** * Gets the absolute path to the `vendor` dir optionally appending a path. * - * @param string $path The relative path. + * @param string $path The relative path. * * @return string The absolute path to the file. + * @throws \ReflectionException */ function wpbrowser_vendor_path($path = '') { diff --git a/src/tad/WPBrowser/phpunit-compat.php b/src/tad/WPBrowser/phpunit-compat.php new file mode 100644 index 000000000..fa3c7790a --- /dev/null +++ b/src/tad/WPBrowser/phpunit-compat.php @@ -0,0 +1,18 @@ + Date: Tue, 14 May 2019 13:44:17 +0200 Subject: [PATCH 20/37] fix(PHPUnit compat): load the PHPUnit compatibility file on demand in the WPTestCase --- src/Codeception/TestCase/WPTestCase.php | 7 +++++-- src/tad/WPBrowser/phpunit-compat.php | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Codeception/TestCase/WPTestCase.php b/src/Codeception/TestCase/WPTestCase.php index 4bc501769..6a9d2411a 100644 --- a/src/Codeception/TestCase/WPTestCase.php +++ b/src/Codeception/TestCase/WPTestCase.php @@ -1,8 +1,6 @@ Date: Tue, 14 May 2019 13:53:46 +0200 Subject: [PATCH 21/37] style(WPTestCase): --- src/Codeception/TestCase/WPTestCase.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Codeception/TestCase/WPTestCase.php b/src/Codeception/TestCase/WPTestCase.php index 6a9d2411a..dd3f7aaf4 100644 --- a/src/Codeception/TestCase/WPTestCase.php +++ b/src/Codeception/TestCase/WPTestCase.php @@ -10,8 +10,7 @@ } // Load the PHPUnit compatibility layer. -require_once __DIR__.'/../../tad/WPBrowser/phpunit-compat.php'; - +require_once __DIR__ . '/../../tad/WPBrowser/phpunit-compat.php'; // phpcs:enable From 25209f097049200fc4562cf3b36ed0d82dc894c1 Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Wed, 15 May 2019 16:22:38 +0200 Subject: [PATCH 22/37] build(composer.json): clean up and remove phpunit-compat file autoloading --- composer.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index 7a1b2881c..eb28f11c6 100644 --- a/composer.json +++ b/composer.json @@ -22,7 +22,7 @@ "ext-fileinfo": "*", "antecedent/patchwork": "^2.0", "bacon/bacon-string-utils": "~1.0", - "codeception/codeception": ">=2.5", + "codeception/codeception": "^2.5 || ^3.0", "gumlet/php-image-resize": "^1.6", "dg/mysql-dump": "^1.3", "symfony/filesystem": "^3.0", @@ -45,8 +45,7 @@ "tad\\": "src/tad" }, "files": [ - "src/tad/WPBrowser/functions.php", - "src/tad/WPBrowser/phpunit-compat.php" + "src/tad/WPBrowser/functions.php" ] } } From 85c34f8ed7d1e65092a66532dcd5314b06230855 Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Wed, 15 May 2019 16:23:14 +0200 Subject: [PATCH 23/37] chore(todos): remove/clean/update todos --- src/Codeception/Module/WPLoader.php | 5 +++++ .../TestCase/WPRestPostTypeControllerTestCase.php | 4 ---- src/includes/same-scope-install.php | 2 -- src/includes/testcase-rest-post-type-controller.php | 6 +----- tests/_data/classes/test-cases/PublicTestCase.php | 10 ---------- 5 files changed, 6 insertions(+), 21 deletions(-) diff --git a/src/Codeception/Module/WPLoader.php b/src/Codeception/Module/WPLoader.php index a08125c86..e839e43bb 100644 --- a/src/Codeception/Module/WPLoader.php +++ b/src/Codeception/Module/WPLoader.php @@ -186,6 +186,11 @@ protected function initialize() $this->ensureDbModuleCompat(); } + /* + * @todo Populate the db if *Db module is available. + * @body WPLoader will fail and exit if `loadOnly` and the database is not setup. + */ + $this->ensureWPRoot($this->getWpRootFolder()); // WordPress will deal with database connection errors diff --git a/src/Codeception/TestCase/WPRestPostTypeControllerTestCase.php b/src/Codeception/TestCase/WPRestPostTypeControllerTestCase.php index 42b1dd0ad..3f73ff503 100644 --- a/src/Codeception/TestCase/WPRestPostTypeControllerTestCase.php +++ b/src/Codeception/TestCase/WPRestPostTypeControllerTestCase.php @@ -108,7 +108,6 @@ protected function check_post_data($post, $data, $context, $links) } if (post_type_supports($post->post_type, 'editor')) { - // TODO: apply content filter for more accurate testing. if (!$post->post_password) { $this->assertEquals(wpautop($post->post_content), $data['content']['rendered']); } @@ -124,10 +123,7 @@ protected function check_post_data($post, $data, $context, $links) if (post_type_supports($post->post_type, 'excerpt')) { if (empty($post->post_password)) { - // TODO: apply excerpt filter for more accurate testing. $this->assertEquals(wpautop($post->post_excerpt), $data['excerpt']['rendered']); - } else { - // TODO: better testing for excerpts for password protected posts. } if ('edit' === $context) { $this->assertEquals($post->post_excerpt, $data['excerpt']['raw']); diff --git a/src/includes/same-scope-install.php b/src/includes/same-scope-install.php index 7bc755d48..dd5102637 100644 --- a/src/includes/same-scope-install.php +++ b/src/includes/same-scope-install.php @@ -1,8 +1,6 @@ post_type, 'editor' ) ) { - // TODO: apply content filter for more accurate testing. if ( ! $post->post_password ) { $this->assertEquals( wpautop( $post->post_content ), $data['content']['rendered'] ); } @@ -120,11 +119,8 @@ protected function check_post_data( $post, $data, $context, $links ) { if ( post_type_supports( $post->post_type, 'excerpt' ) ) { if ( empty( $post->post_password ) ) { - // TODO: apply excerpt filter for more accurate testing. $this->assertEquals( wpautop( $post->post_excerpt ), $data['excerpt']['rendered'] ); - } else { - // TODO: better testing for excerpts for password protected posts. - } + } if ( 'edit' === $context ) { $this->assertEquals( $post->post_excerpt, $data['excerpt']['raw'] ); } else { diff --git a/tests/_data/classes/test-cases/PublicTestCase.php b/tests/_data/classes/test-cases/PublicTestCase.php index b009d9dc4..7721da960 100755 --- a/tests/_data/classes/test-cases/PublicTestCase.php +++ b/tests/_data/classes/test-cases/PublicTestCase.php @@ -6,14 +6,4 @@ class PublicTestCase extends TestCase { - - public function setUp() - { - parent::setUp(); // TODO: Change the autogenerated stub - } - - public function tearDown() - { - parent::tearDown(); // TODO: Change the autogenerated stub - } } From 54dadf51f8d7186301a91cefd4cbe844d70b4d93 Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Wed, 15 May 2019 23:28:32 +0200 Subject: [PATCH 24/37] Update DbDumpTest.php --- tests/unit/tad/WPBrowser/Module/Support/DbDumpTest.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/unit/tad/WPBrowser/Module/Support/DbDumpTest.php b/tests/unit/tad/WPBrowser/Module/Support/DbDumpTest.php index 18ad15250..53beac361 100644 --- a/tests/unit/tad/WPBrowser/Module/Support/DbDumpTest.php +++ b/tests/unit/tad/WPBrowser/Module/Support/DbDumpTest.php @@ -203,8 +203,7 @@ public function it_should_replace_the_site_domain_in_an_array_sql_dump() $sut = $this->make_instance(); $replaced = $sut->replaceSiteDomainInSqlArray($sql); - - $this->assertInternalType('array', $replaced); + $this->assertEquals($expectedSql, $replaced); } @@ -266,7 +265,6 @@ public function it_should_replace_the_site_domain_in_a_multisite_array_sql_dump( $sut = $this->make_instance(); $replaced = $sut->replaceSiteDomainInMultisiteSqlArray($sql); - $this->assertInternalType('array', $replaced); $this->assertEquals($expectedSql, $replaced); } From 818cc4628b03c5e593a3abe4dd9be8b0a06ae907 Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Thu, 16 May 2019 09:12:15 +0200 Subject: [PATCH 25/37] test(PluginActivationTest): remove empty `tearDown` method --- tests/wploadersuite/PluginActivationTest.php | 8 -------- 1 file changed, 8 deletions(-) diff --git a/tests/wploadersuite/PluginActivationTest.php b/tests/wploadersuite/PluginActivationTest.php index 053354215..67214edbf 100644 --- a/tests/wploadersuite/PluginActivationTest.php +++ b/tests/wploadersuite/PluginActivationTest.php @@ -3,14 +3,6 @@ class PluginActivationTest extends \Codeception\TestCase\WPTestCase { - public function tearDown() - { - // your tear down methods here - - // then - parent::tearDown(); - } - /** * @test * it should network not activate network plugins on non mu installation From 88ee71965d31145055fbc894ddffdf5c2b47cb5f Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Thu, 16 May 2019 11:47:11 +0200 Subject: [PATCH 26/37] test(wplodersuite): update test code for PHPUnit cross-compat --- tests/wploadersuite/TablePrefixTest.php | 6 +++--- tests/wploadersuite/ThemeActivationTest.php | 16 ---------------- tests/wploadersuite/factoriesTest.php | 17 ----------------- tests/wploadersuite/wpdbAccessTest.php | 17 ----------------- 4 files changed, 3 insertions(+), 53 deletions(-) diff --git a/tests/wploadersuite/TablePrefixTest.php b/tests/wploadersuite/TablePrefixTest.php index 78e8cc1ba..1d52bbce9 100644 --- a/tests/wploadersuite/TablePrefixTest.php +++ b/tests/wploadersuite/TablePrefixTest.php @@ -8,10 +8,10 @@ class TablePrefixTest extends \Codeception\TestCase\WPTestCase public static $otherInstallationPrefix = 'foo_'; - public static function setUpBeforeClass() + public static function _setUpBeforeClass() { self::importOtherPrefixInstallation(); - parent::setUpBeforeClass(); + parent::_setUpBeforeClass(); } protected static function importOtherPrefixInstallation() @@ -21,7 +21,7 @@ protected static function importOtherPrefixInstallation() if (!importDump($dumpFile, $dbName, $dbUser, $dbPass, $dbHost)) { throw new AssertionFailedError("Test failed as MySQL import failed\nCredentials: " . - print_r(self::getDbAccessCredentials(), true) . "\nPath: " . self::getDumpFilePath()); + print_r(self::getDbAccessCredentials(), true) . "\nPath: " . self::getDumpFilePath()); } } diff --git a/tests/wploadersuite/ThemeActivationTest.php b/tests/wploadersuite/ThemeActivationTest.php index a2795606f..0484cf12f 100644 --- a/tests/wploadersuite/ThemeActivationTest.php +++ b/tests/wploadersuite/ThemeActivationTest.php @@ -2,22 +2,6 @@ class ThemeActivationTest extends \Codeception\TestCase\WPTestCase { - public function setUp() - { - // before - parent::setUp(); - - // your set up methods here - } - - public function tearDown() - { - // your tear down methods here - - // then - parent::tearDown(); - } - /** * @test * it should switch to the theme during installation diff --git a/tests/wploadersuite/factoriesTest.php b/tests/wploadersuite/factoriesTest.php index e852d8429..e60ee5cd8 100644 --- a/tests/wploadersuite/factoriesTest.php +++ b/tests/wploadersuite/factoriesTest.php @@ -3,23 +3,6 @@ class factoriesTest extends \Codeception\TestCase\WPTestCase { - - public function setUp() - { - // before - parent::setUp(); - - // your set up methods here - } - - public function tearDown() - { - // your tear down methods here - - // then - parent::tearDown(); - } - /** * @test * it should allow using the posts factory diff --git a/tests/wploadersuite/wpdbAccessTest.php b/tests/wploadersuite/wpdbAccessTest.php index 77052b35a..8e8b25d04 100644 --- a/tests/wploadersuite/wpdbAccessTest.php +++ b/tests/wploadersuite/wpdbAccessTest.php @@ -3,23 +3,6 @@ class wpdbAccessTest extends \Codeception\TestCase\WPTestCase { - - public function setUp() - { - // before - parent::setUp(); - - // your set up methods here - } - - public function tearDown() - { - // your tear down methods here - - // then - parent::tearDown(); - } - /** * @test * it should allow accessing the wpdb instance in tests From 82bad6e90a55b606b37f6f7590d66fb14a443df1 Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Thu, 16 May 2019 16:39:00 +0200 Subject: [PATCH 27/37] test(TablePrefixTest): Use `wpSetUpBeforeClass` in place of `setUpBeforeClass` --- tests/wploadersuite/TablePrefixTest.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/wploadersuite/TablePrefixTest.php b/tests/wploadersuite/TablePrefixTest.php index 1d52bbce9..06615c56e 100644 --- a/tests/wploadersuite/TablePrefixTest.php +++ b/tests/wploadersuite/TablePrefixTest.php @@ -8,10 +8,9 @@ class TablePrefixTest extends \Codeception\TestCase\WPTestCase public static $otherInstallationPrefix = 'foo_'; - public static function _setUpBeforeClass() + public static function wpSetUpBeforeClass() { self::importOtherPrefixInstallation(); - parent::_setUpBeforeClass(); } protected static function importOtherPrefixInstallation() From 4c95f650629141f17773525e9d7bd948f2b7be7c Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Thu, 16 May 2019 22:48:21 +0200 Subject: [PATCH 28/37] test(TablePrefixTest.php): fix setUp method name --- tests/wploadersuite/TablePrefixTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/wploadersuite/TablePrefixTest.php b/tests/wploadersuite/TablePrefixTest.php index 06615c56e..ee2c52e34 100644 --- a/tests/wploadersuite/TablePrefixTest.php +++ b/tests/wploadersuite/TablePrefixTest.php @@ -8,7 +8,7 @@ class TablePrefixTest extends \Codeception\TestCase\WPTestCase public static $otherInstallationPrefix = 'foo_'; - public static function wpSetUpBeforeClass() + public static function _setUpBeforeClass() { self::importOtherPrefixInstallation(); } From 9fcc74581fe0d0f403f500a3952c2aad7a0dc993 Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Fri, 17 May 2019 11:26:06 +0200 Subject: [PATCH 29/37] fix(PHPUnit and wrapper compat): make `WPTestCase` extend base Codeception testcase --- .../WPBrowser/Compat/PHPUnit/Base/Testcase.php | 2 +- .../Compat/PHPUnit/Version8/Testcase.php | 17 ++++++++++++++--- tests/wploadersuite/TablePrefixTest.php | 2 +- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/tad/WPBrowser/Compat/PHPUnit/Base/Testcase.php b/src/tad/WPBrowser/Compat/PHPUnit/Base/Testcase.php index 806c4a8c2..b08a337d2 100644 --- a/src/tad/WPBrowser/Compat/PHPUnit/Base/Testcase.php +++ b/src/tad/WPBrowser/Compat/PHPUnit/Base/Testcase.php @@ -16,7 +16,7 @@ * * @package tad\WPBrowser\Compat\PHPUnit */ -class Testcase extends Unit +class Testcase extends \Codeception\PHPUnit\TestCase { protected function assertPreConditions() diff --git a/src/tad/WPBrowser/Compat/PHPUnit/Version8/Testcase.php b/src/tad/WPBrowser/Compat/PHPUnit/Version8/Testcase.php index 5c1475145..76d941206 100644 --- a/src/tad/WPBrowser/Compat/PHPUnit/Version8/Testcase.php +++ b/src/tad/WPBrowser/Compat/PHPUnit/Version8/Testcase.php @@ -9,15 +9,26 @@ namespace tad\WPBrowser\Compat\PHPUnit; -use Codeception\Test\Unit; - /** * Class Testcase * * @package tad\WPBrowser\Compat\PHPUnit */ -class Testcase extends Unit +class Testcase extends \Codeception\PHPUnit\TestCase { + public static function setUpBeforeClass() + { + if (method_exists(get_called_class(), '_setUpBeforeClass')) { + static::_setUpBeforeClass(); + } + } + + public static function tearDownAfterClass() + { + if (method_exists(get_called_class(), '_tearDownAfterClass')) { + static::_tearDownAfterClass(); + } + } protected function assertPreConditions(): void { if (method_exists(get_called_class(), '_assertPreConditions')) { diff --git a/tests/wploadersuite/TablePrefixTest.php b/tests/wploadersuite/TablePrefixTest.php index ee2c52e34..06615c56e 100644 --- a/tests/wploadersuite/TablePrefixTest.php +++ b/tests/wploadersuite/TablePrefixTest.php @@ -8,7 +8,7 @@ class TablePrefixTest extends \Codeception\TestCase\WPTestCase public static $otherInstallationPrefix = 'foo_'; - public static function _setUpBeforeClass() + public static function wpSetUpBeforeClass() { self::importOtherPrefixInstallation(); } From c63a30e2c68eb7dc17f13e059a161aa8e9a68b33 Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Fri, 17 May 2019 15:35:16 +0200 Subject: [PATCH 30/37] fix(PHPUnit v8 compat): add more methods to the PHPUnit wrapper compat testcase --- .../Compat/PHPUnit/Version8/Testcase.php | 40 +++++++++++++------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/src/tad/WPBrowser/Compat/PHPUnit/Version8/Testcase.php b/src/tad/WPBrowser/Compat/PHPUnit/Version8/Testcase.php index 76d941206..c803cd08f 100644 --- a/src/tad/WPBrowser/Compat/PHPUnit/Version8/Testcase.php +++ b/src/tad/WPBrowser/Compat/PHPUnit/Version8/Testcase.php @@ -9,6 +9,8 @@ namespace tad\WPBrowser\Compat\PHPUnit; +use PHPUnit\Framework\MockObject\MockObject; + /** * Class Testcase * @@ -16,19 +18,19 @@ */ class Testcase extends \Codeception\PHPUnit\TestCase { - public static function setUpBeforeClass() - { - if (method_exists(get_called_class(), '_setUpBeforeClass')) { - static::_setUpBeforeClass(); - } - } + public static function setUpBeforeClass() : void + { + if (method_exists(get_called_class(), '_setUpBeforeClass')) { + static::_setUpBeforeClass(); + } + } - public static function tearDownAfterClass() - { - if (method_exists(get_called_class(), '_tearDownAfterClass')) { - static::_tearDownAfterClass(); - } - } + public static function tearDownAfterClass() : void + { + if (method_exists(get_called_class(), '_tearDownAfterClass')) { + static::_tearDownAfterClass(); + } + } protected function assertPreConditions(): void { if (method_exists(get_called_class(), '_assertPreConditions')) { @@ -41,4 +43,18 @@ protected function assertPostConditions(): void static::_assertPostConditions(); } } + + protected function setUp(): void + { + if (method_exists($this, '_setUp')) { + $this->_setUp(); + } + } + + protected function tearDown(): void + { + if (method_exists($this, '_tearDown')) { + $this->_tearDown(); + } + } } From da0630b888c2632390b22cc5de2b680904d4e7bf Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Fri, 17 May 2019 17:13:16 +0200 Subject: [PATCH 31/37] docs(changelog.md): add changelog entry about PHPUnit v8 compat --- docs/changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/changelog.md b/docs/changelog.md index 8a2d33b5e..2a74853cc 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -7,6 +7,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). ## [2.2.8] 2019-05-13; ### Changed - udpated requirement of `codeception/codeception` to include version `3.0` +- updated `WPTestCase` to handle PHPUnit v8 compatibility - internalized the classes and functions provided by the `lucatume/wp-browser-commons` package ## [2.2.7] 2019-05-08; From c53947d5b2b818a92645b56cbcc9b15c8bbe0cc0 Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Sun, 19 May 2019 14:08:03 +0200 Subject: [PATCH 32/37] chore(.gitignore): ignore local tags folder --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 6027fec63..d4dddb9b1 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,4 @@ docs/node_modules docs/_book tests/_support/_generated composer.lock +tags From 010fa08a1ef04480ffae6bff6df5854ef6352d93 Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Sun, 19 May 2019 16:41:35 +0200 Subject: [PATCH 33/37] fix(WPLoader): Delay initialization until SUITE_INIT when only loading When the `loadOnly` configuration parameter is set to `true` then the WPLoader module will not try to install and initialize WordPress in the database. This makes the module inherently dependant, in its WordPress bootstrap phase, from other *Db modules setting up a valid, initial, database fixture. If the module initializes before those other modules did then WordPress will `exit` not finding a valid installation. This fix makes it so that the module will hook on the `run` command event bus to initialize after all other modules did. --- Makefile | 1 + src/Codeception/Module/WPLoader.php | 203 ++++++++++-------- .../WPBrowser/Module/Traits/EventListener.php | 96 +++++++++ .../wploader_wpdb_interaction.suite.dist.yml | 1 + .../wploader_wpdb_interaction/LoadingCest.php | 16 ++ 5 files changed, 227 insertions(+), 90 deletions(-) create mode 100644 src/tad/WPBrowser/Module/Traits/EventListener.php create mode 100644 tests/wploader_wpdb_interaction/LoadingCest.php diff --git a/Makefile b/Makefile index 31b85d62f..c6b3b281f 100644 --- a/Makefile +++ b/Makefile @@ -157,6 +157,7 @@ ci_script: codecept run wpfunctional codecept run wploadersuite codecept run wpmodule + codecept run wploader_wpdb_interaction # Restarts the project containers. ci_docker_restart: diff --git a/src/Codeception/Module/WPLoader.php b/src/Codeception/Module/WPLoader.php index e839e43bb..0a447141f 100644 --- a/src/Codeception/Module/WPLoader.php +++ b/src/Codeception/Module/WPLoader.php @@ -2,15 +2,17 @@ namespace Codeception\Module; +use Codeception\Events; use Codeception\Exception\ModuleConfigException; use Codeception\Exception\ModuleConflictException; use Codeception\Lib\ModuleContainer; use Codeception\Module; use Symfony\Component\Console\Output\ConsoleOutput; -use Symfony\Component\Console\Output\ConsoleOutputInterface; use Symfony\Component\Console\Output\OutputInterface; use tad\WPBrowser\Adapters\WP; use tad\WPBrowser\Filesystem\Utils; +use tad\WPBrowser\Module\Traits\Delayable; +use tad\WPBrowser\Module\Traits\EventListener; use tad\WPBrowser\Module\WPLoader\FactoryStore; /** @@ -29,6 +31,8 @@ class WPLoader extends Module { + use EventListener; + public static $includeInheritedActions = true; public static $onlyActions = []; @@ -151,6 +155,12 @@ class WPLoader extends Module * @var bool */ protected $wpDidLoadCorrectly = false; + /** + * An array of the database populating modules found in the module container. + * + * @var Module[] + */ + protected $dbModules; /** * @var WP @@ -181,47 +191,26 @@ public function _initialize() protected function initialize() { - if (empty($this->config['loadOnly'])) { - // let's make sure *Db Module is either not running or properly configured if we have to run alongside it - $this->ensureDbModuleCompat(); - } - - /* - * @todo Populate the db if *Db module is available. - * @body WPLoader will fail and exit if `loadOnly` and the database is not setup. - */ - $this->ensureWPRoot($this->getWpRootFolder()); // WordPress will deal with database connection errors $this->wpBootstrapFile = dirname(dirname(__DIR__)) . '/includes/bootstrap.php'; - $this->loadWordPress(); - } - protected function ensureDbModuleCompat() - { - $interference_candidates = ['Db', 'WPDb']; - $allModules = $this->moduleContainer->all(); - foreach ($interference_candidates as $moduleName) { - if (!$this->moduleContainer->hasModule($moduleName)) { - continue; - } - /** @var \Codeception\Module $module */ - $module = $allModules[$moduleName]; - $cleanup_config = $module->_getConfig('cleanup'); - if (!empty($cleanup_config)) { - throw new ModuleConflictException( - __CLASS__, - "{$moduleName}\nThe WP Loader module is being used together with the {$moduleName} module: " - . "the {$moduleName} module should have the 'cleanup' parameter set to 'false' not to interfere " - . "with the WP Loader module." - ); - } + if (empty($this->config['loadOnly'])) { + // Any *Db Module should either not be running or properly configured if this has to run alongside it. + $this->ensureDbModuleCompat(); + } else { + $this->debug('WPLoader module will load WordPress when all other modules initialized.'); + $this->addAction(Events::SUITE_INIT, [$this, '_loadWordpress'], 99); + + return; } + + $this->_loadWordpress(); } /** - * @param string $wpRootFolder + * @param string $wpRootFolder * * @throws \Codeception\Exception\ModuleConfigException If the specified * WordPress root @@ -230,7 +219,7 @@ protected function ensureDbModuleCompat() */ protected function ensureWPRoot($wpRootFolder) { - if (!file_exists($wpRootFolder . DIRECTORY_SEPARATOR . 'wp-settings.php')) { + if ( ! file_exists($wpRootFolder . DIRECTORY_SEPARATOR . 'wp-settings.php')) { throw new ModuleConfigException( __CLASS__, "\nThe path `{$wpRootFolder}` is not pointing to a valid WordPress installation folder." @@ -260,6 +249,28 @@ protected function getWpRootFolder() return $this->wpRootFolder; } + protected function ensureDbModuleCompat() + { + $interference_candidates = ['Db', 'WPDb']; + $allModules = $this->moduleContainer->all(); + foreach ($interference_candidates as $moduleName) { + if ( ! $this->moduleContainer->hasModule($moduleName)) { + continue; + } + /** @var \Codeception\Module $module */ + $module = $allModules[$moduleName]; + $cleanup_config = $module->_getConfig('cleanup'); + if ( ! empty($cleanup_config)) { + throw new ModuleConflictException( + __CLASS__, + "{$moduleName}\nThe WP Loader module is being used together with the {$moduleName} module: " + . "the {$moduleName} module should have the 'cleanup' parameter set to 'false' not to interfere " + . "with the WP Loader module." + ); + } + } + } + /** * Loads WordPress calling the bootstrap file * @@ -267,7 +278,7 @@ protected function getWpRootFolder() * original automated testing bootstrap file and taking charge of replacing * the original "wp-tests-config.php" file in setting up the globals. */ - protected function loadWordPress() + public function _loadWordpress() { $this->defineGlobals(); @@ -279,7 +290,7 @@ protected function loadWordPress() require_once dirname(dirname(__DIR__)) . '/includes/functions.php'; - if (!empty($this->config['loadOnly'])) { + if ( ! empty($this->config['loadOnly'])) { $this->bootstrapWP(); } else { $this->installAndBootstrapInstallation(); @@ -321,19 +332,19 @@ protected function defineGlobals() ]; foreach ($constants as $key => $value) { - if (!defined($key)) { + if ( ! defined($key)) { define($key, $value); } } - if (!defined('WP_PLUGIN_DIR') && !empty($this->config['pluginsFolder'])) { + if ( ! defined('WP_PLUGIN_DIR') && ! empty($this->config['pluginsFolder'])) { define('WP_PLUGIN_DIR', $this->getPluginsFolder()); } } /** - * @param string $folder = null The absolute path to the WordPress root - * installation folder. + * @param string $folder = null The absolute path to the WordPress root + * installation folder. * * @throws ModuleConfigException */ @@ -343,9 +354,9 @@ protected function loadConfigFile($folder = null) $frags = $this->config['configFile']; $frags = is_array($frags) ?: [$frags]; foreach ($frags as $frag) { - if (!empty($frag)) { + if ( ! empty($frag)) { $configFile = Utils::findHereOrInParent($frag, $folder); - if (!file_exists($configFile)) { + if ( ! file_exists($configFile)) { throw new ModuleConfigException( __CLASS__, "\nConfig file `{$frag}` could not be found in WordPress root folder or above." @@ -374,7 +385,7 @@ protected function getPluginsFolder() $path = empty($this->config['pluginsFolder']) ? WP_PLUGIN_DIR : realpath($this->getWpRootFolder() . Utils::unleadslashit($this->config['pluginsFolder'])); - if (!file_exists($path)) { + if ( ! file_exists($path)) { throw new ModuleConfigException( __CLASS__, "The path to the plugins folder ('{$path}') doesn't exist." @@ -392,7 +403,7 @@ protected function bootstrapWP() $this->ensureServerVars(); register_shutdown_function([$this, '_wordpressExitHandler']); - include_once Utils::untrailslashit($this->wpRootFolder).'/wp-load.php'; + include_once Utils::untrailslashit($this->wpRootFolder) . '/wp-load.php'; $this->wpDidLoadCorrectly = true; $this->setupCurrentSite(); @@ -400,6 +411,20 @@ protected function bootstrapWP() $this->factoryStore->setupFactories(); } + protected function ensureServerVars() + { + $serverDefaults = [ + 'SERVER_PROTOCOL' => 'HTTP/1.1', + 'HTTP_HOST' => getenv('WP_DOMAIN') ? getenv('WP_DOMAIN') : $this->config['domain'], + ]; + + foreach ($serverDefaults as $key => $value) { + if (empty($_SERVER[$key])) { + $_SERVER[$key] = $value; + } + } + } + /** * Sets up the `current_site` global handling multisite and single site * installation cases. @@ -411,15 +436,15 @@ protected function setupCurrentSite() $current_site = new \stdClass; - if (!empty($wpdb->get_results("SHOW TABLES LIKE '{$wpdb->prefix}blogs'"))) { - $query = "SELECT domain, path FROM {$wpdb->prefix}blogs WHERE blog_id = 1 AND site_id = 1"; + if ( ! empty($wpdb->get_results("SHOW TABLES LIKE '{$wpdb->prefix}blogs'"))) { + $query = "SELECT domain, path FROM {$wpdb->prefix}blogs WHERE blog_id = 1 AND site_id = 1"; $data = $wpdb->get_row($query); $current_site->domain = $data->domain; $current_site->path = $data->path; $current_site->site_name = ucfirst($data->domain); } else { $site_url = $wpdb->get_var("SELECT option_value FROM {$wpdb->options} WHERE option_name = 'siteurl'"); - if (!empty($site_url)) { + if ( ! empty($site_url)) { $current_site->domain = parse_url($site_url, PHP_URL_HOST); if ($port = parse_url($site_url, PHP_URL_PORT)) { $current_site->domain .= ":{$port}"; @@ -438,7 +463,7 @@ protected function installAndBootstrapInstallation() $this->setActivePlugins(); $this->_setActiveTheme(); - if (!$this->requiresIsolatedInstallation()) { + if ( ! $this->requiresIsolatedInstallation()) { tests_add_filter('muplugins_loaded', [$this, '_loadPlugins']); tests_add_filter('wp_install', [$this, '_activatePlugins'], 100); tests_add_filter( @@ -463,7 +488,7 @@ protected function setActivePlugins() return; } - if (!empty($GLOBALS['wp_tests_options']['active_plugins'])) { + if ( ! empty($GLOBALS['wp_tests_options']['active_plugins'])) { $GLOBALS['wp_tests_options']['active_plugins'] = array_merge( $GLOBALS['wp_tests_options']['active_plugins'], $this->config['plugins'] @@ -483,7 +508,7 @@ public function _setActiveTheme() return; } - if (!is_array($this->config['theme'])) { + if ( ! is_array($this->config['theme'])) { $template = $this->config['theme']; $stylesheet = $this->config['theme']; } else { @@ -507,7 +532,7 @@ public function _bootstrapActions() } foreach ($this->config['bootstrapActions'] as $action) { - if (!is_callable($action)) { + if ( ! is_callable($action)) { do_action($action); } else { call_user_func($action); @@ -517,7 +542,7 @@ public function _bootstrapActions() public function _switchTheme() { - if (!empty($this->config['theme'])) { + if ( ! empty($this->config['theme'])) { $stylesheet = is_array($this->config['theme']) ? end($this->config['theme']) : $this->config['theme']; @@ -556,14 +581,14 @@ public function _activatePlugins() */ public function _loadPlugins() { - if (empty($this->config['plugins']) || !defined('WP_PLUGIN_DIR')) { + if (empty($this->config['plugins']) || ! defined('WP_PLUGIN_DIR')) { return; } $pluginsPath = $this->getPluginsFolder() . DIRECTORY_SEPARATOR; $plugins = $this->config['plugins']; foreach ($plugins as $plugin) { $path = $pluginsPath . $plugin; - if (!file_exists($path)) { + if ( ! file_exists($path)) { throw new ModuleConfigException( __CLASS__, "The '{$plugin}' plugin file was not found in the {$pluginsPath} directory; " @@ -596,24 +621,10 @@ public function factory() return $this->factoryStore; } - protected function ensureServerVars() - { - $serverDefaults = [ - 'SERVER_PROTOCOL' => 'HTTP/1.1', - 'HTTP_HOST' => getenv('WP_DOMAIN') ? getenv('WP_DOMAIN') : $this->config['domain'], - ]; - - foreach ($serverDefaults as $key => $value) { - if (empty($_SERVER[$key])) { - $_SERVER[$key] = $value; - } - } - } - /** * Returns a closure to handle the exit of WordPress during the bootstrap process. * - * @param OutputInterface|null $output An output stream. + * @param OutputInterface|null $output An output stream. */ public function _wordpressExitHandler(OutputInterface $output = null) { @@ -626,12 +637,12 @@ public function _wordpressExitHandler(OutputInterface $output = null) $lines = [ 'The WPLoader module could not correctly load WordPress.', 'If you do not see any other output beside this, probably a call to `die` or `exit` might have been' - .' made while loading WordPress files.', + . ' made while loading WordPress files.', 'There are a number of reasons why this might happen and the most common is an empty, incomplete or' - .' incoherent database status.', + . ' incoherent database status.', '', 'E.g. you are trying to bootstrap WordPress as multisite on a database that does not contain ' - .'multisite tables.' + . 'multisite tables.', ]; $moduleContainer = $this->moduleContainer; @@ -639,40 +650,52 @@ public function _wordpressExitHandler(OutputInterface $output = null) if ($moduleContainer->hasModule('WPDb') || $moduleContainer->hasModule('Db')) { $dbModule = $moduleContainer->hasModule('WPDb') ? 'WPDb' : 'Db'; $lines [] = ''; - $lines[] = "It looks like, alongside the WPLoader module, you are using the {$dbModule} one."; + $lines[] = "It looks like, alongside the WPLoader module, you are using the {$dbModule} one."; if (empty($this->config['loadOnly'])) { $lines[] = 'Since the `WPLoader::loadOnly` parameter is not set or set to `false` both the ' - ."WPLoader module and the {$dbModule} one are trying to populate the database."; + . "WPLoader module and the {$dbModule} one are trying to populate the database."; $lines[] = "If you want to fill the database with a dump then keep using the {$dbModule} " - .'module but set the `WPLoader::loadOnly` parameter to `true` and make sure that, ' - ."in the suite configuration file, in the `modules` section, the {$dbModule} module comes" - .' before the WPLoader one.'; + . 'module but set the `WPLoader::loadOnly` parameter to `true` and make sure that, ' + . "in the suite configuration file, in the `modules` section, the {$dbModule} module comes" + . ' before the WPLoader one.'; $lines[] = ''; $lines[] = 'If you are, instead, trying to run integration tests you do not probably need the' - ." {$dbModule} module or should set the `populate` and `cleanup` arguments to `false`"; + . " {$dbModule} module or should set the `populate` and `cleanup` arguments to `false`"; } else { $lines[] = 'Since the `WPLoader::loadOnly` parameter is set to `true` the WPLoader module' - .' will not try to populate the database.'; + . ' will not try to populate the database.'; $lines[] = "The database should be populated from a dump using the {$dbModule} modules."; $lines[] = 'Make sure the SQL dump you\'re trying to use is not empty and correct for the kind ' - .'of installation you are trying to test.'; - $lines[] = 'Make also sure that, in the suite configuration file, in the `modules` section, '. - "the {$dbModule} modules comes before the WPLoader one.". - $lines[] = ''; + . 'of installation you are trying to test.'; + $lines[] = 'Make also sure that, in the suite configuration file, in the `modules` section, ' . + "the {$dbModule} modules comes before the WPLoader one." . + $lines[] = ''; $lines[] = 'If you are, instead, trying to run integration tests you do not probably need the' - ." {$dbModule} module or should set the `populate` and `cleanup` arguments to `false` and " - .'set the `WPLoader::loadOnly` parameter to `false` to let the WPLoader module populate the' - .' database for you.'; + . " {$dbModule} module or should set the `populate` and `cleanup` arguments to `false` and " + . 'set the `WPLoader::loadOnly` parameter to `false` to let the WPLoader module populate the' + . ' database for you.'; } $lines[] = 'Find out more about this at ' - .'https://wpbrowser.wptestkit.dev/summary/modules/wploader' - .'#wploader-to-only-bootstrap-wordpress'; + . 'https://wpbrowser.wptestkit.dev/summary/modules/wploader' + . '#wploader-to-only-bootstrap-wordpress'; } else { $lines[] = 'Since the `WPLoader::loadOnly` parameter is set to `true` the WPLoader module' - .' will not try to populate the database.'; + . ' will not try to populate the database.'; $lines[] = 'The database should be populated from a dump using the WPDb/Db modules.'; } - $output->writeln(''.implode(PHP_EOL, $lines).''); + $output->writeln('' . implode(PHP_EOL, $lines) . ''); + } + + protected function loadWordPressAfterDb() + { + $matchingModule = null; + + $this->debug(sprintf( + 'Module WPLoader will initialize after module %s initialized', + $matchingModule + )); + + $this->_loadWordpress(); } } diff --git a/src/tad/WPBrowser/Module/Traits/EventListener.php b/src/tad/WPBrowser/Module/Traits/EventListener.php new file mode 100644 index 000000000..67d581008 --- /dev/null +++ b/src/tad/WPBrowser/Module/Traits/EventListener.php @@ -0,0 +1,96 @@ +getEventDispatcher()->addListener($event, $callback, $priority); + } + + /** + * Returns the instance of the event dispatcher used by the `codecept run` command instance. + * + * @return EventDispatcher The event dispatcher instance used by the `run` command. + * + * @throws ModuleException If the global application instance is not a Codeception\Application instance; if the + * `run` command dispatcher property cannot be accessed or is not an `EventDispatcher` + * instance. + */ + protected function getEventDispatcher() + { + if ($this->dispatcher instanceof EventDispatcher) { + return $this->dispatcher; + } + + /** @var \Codeception\Application $app */ + global $app; + + if ( ! $app instanceof Application) { + throw new ModuleException( + $this, + 'Global `app` object is either empty or not an instance of the \Codeception\Application class.' + ); + } + + /** @var \Codeception\Command\Run $runCommand */ + $runCommand = $app->find('run'); + + try { + /** @var \Codeception\Codecept $codecept */ + $codecept = ReflectionHelper::readPrivateProperty($runCommand, 'codecept'); + $dispatcher = $codecept->getDispatcher(); + } catch (\ReflectionException $e) { + throw new ModuleException( + $this, + 'Could not get the value of the `\Codeception\Command\Run::$codecept` property, message:' . + $e->getMessage() + ); + } + if ( ! $dispatcher instanceof EventDispatcher) { + throw new ModuleException($this, sprintf( + '\\Codeception\\Codecept::$eventDispatcher property is not an instance of %s; value is instead: %s', + EventDispatcher::class, + print_r($dispatcher, true) + )); + } + + $this->dispatcher = $dispatcher; + + return $this->dispatcher; + } +} diff --git a/tests/wploader_wpdb_interaction.suite.dist.yml b/tests/wploader_wpdb_interaction.suite.dist.yml index 1f373ad2c..ebc1f2223 100644 --- a/tests/wploader_wpdb_interaction.suite.dist.yml +++ b/tests/wploader_wpdb_interaction.suite.dist.yml @@ -4,6 +4,7 @@ modules: - \Helper\Wploader_wpdb_interaction - WPLoader - WPDb + - Asserts config: WPDb: dsn: 'mysql:host=%DB_HOST%;dbname=%DB_NAME%' diff --git a/tests/wploader_wpdb_interaction/LoadingCest.php b/tests/wploader_wpdb_interaction/LoadingCest.php new file mode 100644 index 000000000..e118c6332 --- /dev/null +++ b/tests/wploader_wpdb_interaction/LoadingCest.php @@ -0,0 +1,16 @@ +assertTrue(function_exists('wp')); + } +} From 4cc4650c3c2b2638c5803e5fcf79e00995c0503e Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Sun, 19 May 2019 16:42:16 +0200 Subject: [PATCH 34/37] style(WPLoader and EventListener trait): some code style cleanup --- src/Codeception/Module/WPLoader.php | 64 +++++++++---------- .../WPBrowser/Module/Traits/EventListener.php | 4 +- 2 files changed, 34 insertions(+), 34 deletions(-) diff --git a/src/Codeception/Module/WPLoader.php b/src/Codeception/Module/WPLoader.php index 0a447141f..4911fd7f4 100644 --- a/src/Codeception/Module/WPLoader.php +++ b/src/Codeception/Module/WPLoader.php @@ -219,7 +219,7 @@ protected function initialize() */ protected function ensureWPRoot($wpRootFolder) { - if ( ! file_exists($wpRootFolder . DIRECTORY_SEPARATOR . 'wp-settings.php')) { + if (! file_exists($wpRootFolder . DIRECTORY_SEPARATOR . 'wp-settings.php')) { throw new ModuleConfigException( __CLASS__, "\nThe path `{$wpRootFolder}` is not pointing to a valid WordPress installation folder." @@ -252,15 +252,15 @@ protected function getWpRootFolder() protected function ensureDbModuleCompat() { $interference_candidates = ['Db', 'WPDb']; - $allModules = $this->moduleContainer->all(); + $allModules = $this->moduleContainer->all(); foreach ($interference_candidates as $moduleName) { - if ( ! $this->moduleContainer->hasModule($moduleName)) { + if (! $this->moduleContainer->hasModule($moduleName)) { continue; } /** @var \Codeception\Module $module */ - $module = $allModules[$moduleName]; + $module = $allModules[$moduleName]; $cleanup_config = $module->_getConfig('cleanup'); - if ( ! empty($cleanup_config)) { + if (! empty($cleanup_config)) { throw new ModuleConflictException( __CLASS__, "{$moduleName}\nThe WP Loader module is being used together with the {$moduleName} module: " @@ -290,7 +290,7 @@ public function _loadWordpress() require_once dirname(dirname(__DIR__)) . '/includes/functions.php'; - if ( ! empty($this->config['loadOnly'])) { + if (! empty($this->config['loadOnly'])) { $this->bootstrapWP(); } else { $this->installAndBootstrapInstallation(); @@ -332,12 +332,12 @@ protected function defineGlobals() ]; foreach ($constants as $key => $value) { - if ( ! defined($key)) { + if (! defined($key)) { define($key, $value); } } - if ( ! defined('WP_PLUGIN_DIR') && ! empty($this->config['pluginsFolder'])) { + if (! defined('WP_PLUGIN_DIR') && ! empty($this->config['pluginsFolder'])) { define('WP_PLUGIN_DIR', $this->getPluginsFolder()); } } @@ -351,12 +351,12 @@ protected function defineGlobals() protected function loadConfigFile($folder = null) { $folder = $folder ?: codecept_root_dir(); - $frags = $this->config['configFile']; - $frags = is_array($frags) ?: [$frags]; + $frags = $this->config['configFile']; + $frags = is_array($frags) ?: [$frags]; foreach ($frags as $frag) { - if ( ! empty($frag)) { + if (! empty($frag)) { $configFile = Utils::findHereOrInParent($frag, $folder); - if ( ! file_exists($configFile)) { + if (! file_exists($configFile)) { throw new ModuleConfigException( __CLASS__, "\nConfig file `{$frag}` could not be found in WordPress root folder or above." @@ -385,7 +385,7 @@ protected function getPluginsFolder() $path = empty($this->config['pluginsFolder']) ? WP_PLUGIN_DIR : realpath($this->getWpRootFolder() . Utils::unleadslashit($this->config['pluginsFolder'])); - if ( ! file_exists($path)) { + if (! file_exists($path)) { throw new ModuleConfigException( __CLASS__, "The path to the plugins folder ('{$path}') doesn't exist." @@ -436,15 +436,15 @@ protected function setupCurrentSite() $current_site = new \stdClass; - if ( ! empty($wpdb->get_results("SHOW TABLES LIKE '{$wpdb->prefix}blogs'"))) { - $query = "SELECT domain, path FROM {$wpdb->prefix}blogs WHERE blog_id = 1 AND site_id = 1"; - $data = $wpdb->get_row($query); - $current_site->domain = $data->domain; - $current_site->path = $data->path; + if (! empty($wpdb->get_results("SHOW TABLES LIKE '{$wpdb->prefix}blogs'"))) { + $query = "SELECT domain, path FROM {$wpdb->prefix}blogs WHERE blog_id = 1 AND site_id = 1"; + $data = $wpdb->get_row($query); + $current_site->domain = $data->domain; + $current_site->path = $data->path; $current_site->site_name = ucfirst($data->domain); } else { $site_url = $wpdb->get_var("SELECT option_value FROM {$wpdb->options} WHERE option_name = 'siteurl'"); - if ( ! empty($site_url)) { + if (! empty($site_url)) { $current_site->domain = parse_url($site_url, PHP_URL_HOST); if ($port = parse_url($site_url, PHP_URL_PORT)) { $current_site->domain .= ":{$port}"; @@ -455,7 +455,7 @@ protected function setupCurrentSite() $current_site->path = '/'; } $current_site->site_name = ucfirst($current_site->domain); - $current_site->id = 1; + $current_site->id = 1; } protected function installAndBootstrapInstallation() @@ -463,7 +463,7 @@ protected function installAndBootstrapInstallation() $this->setActivePlugins(); $this->_setActiveTheme(); - if ( ! $this->requiresIsolatedInstallation()) { + if (! $this->requiresIsolatedInstallation()) { tests_add_filter('muplugins_loaded', [$this, '_loadPlugins']); tests_add_filter('wp_install', [$this, '_activatePlugins'], 100); tests_add_filter( @@ -488,7 +488,7 @@ protected function setActivePlugins() return; } - if ( ! empty($GLOBALS['wp_tests_options']['active_plugins'])) { + if (! empty($GLOBALS['wp_tests_options']['active_plugins'])) { $GLOBALS['wp_tests_options']['active_plugins'] = array_merge( $GLOBALS['wp_tests_options']['active_plugins'], $this->config['plugins'] @@ -508,15 +508,15 @@ public function _setActiveTheme() return; } - if ( ! is_array($this->config['theme'])) { - $template = $this->config['theme']; + if (! is_array($this->config['theme'])) { + $template = $this->config['theme']; $stylesheet = $this->config['theme']; } else { - $template = reset($this->config['theme']); + $template = reset($this->config['theme']); $stylesheet = end($this->config['theme']); } - $GLOBALS['wp_tests_options']['template'] = $template; + $GLOBALS['wp_tests_options']['template'] = $template; $GLOBALS['wp_tests_options']['stylesheet'] = $stylesheet; codecept_debug('Set template to [' . $template . '] and stylesheet to [' . $stylesheet . ']'); @@ -532,7 +532,7 @@ public function _bootstrapActions() } foreach ($this->config['bootstrapActions'] as $action) { - if ( ! is_callable($action)) { + if (! is_callable($action)) { do_action($action); } else { call_user_func($action); @@ -542,8 +542,8 @@ public function _bootstrapActions() public function _switchTheme() { - if ( ! empty($this->config['theme'])) { - $stylesheet = is_array($this->config['theme']) ? + if (! empty($this->config['theme'])) { + $stylesheet = is_array($this->config['theme']) ? end($this->config['theme']) : $this->config['theme']; $functionsFile = $this->wp->WP_CONTENT_DIR() . '/themes/' . $stylesheet . '/functions.php'; @@ -585,10 +585,10 @@ public function _loadPlugins() return; } $pluginsPath = $this->getPluginsFolder() . DIRECTORY_SEPARATOR; - $plugins = $this->config['plugins']; + $plugins = $this->config['plugins']; foreach ($plugins as $plugin) { $path = $pluginsPath . $plugin; - if ( ! file_exists($path)) { + if (! file_exists($path)) { throw new ModuleConfigException( __CLASS__, "The '{$plugin}' plugin file was not found in the {$pluginsPath} directory; " @@ -650,7 +650,7 @@ public function _wordpressExitHandler(OutputInterface $output = null) if ($moduleContainer->hasModule('WPDb') || $moduleContainer->hasModule('Db')) { $dbModule = $moduleContainer->hasModule('WPDb') ? 'WPDb' : 'Db'; $lines [] = ''; - $lines[] = "It looks like, alongside the WPLoader module, you are using the {$dbModule} one."; + $lines[] = "It looks like, alongside the WPLoader module, you are using the {$dbModule} one."; if (empty($this->config['loadOnly'])) { $lines[] = 'Since the `WPLoader::loadOnly` parameter is not set or set to `false` both the ' . "WPLoader module and the {$dbModule} one are trying to populate the database."; diff --git a/src/tad/WPBrowser/Module/Traits/EventListener.php b/src/tad/WPBrowser/Module/Traits/EventListener.php index 67d581008..60b29ad01 100644 --- a/src/tad/WPBrowser/Module/Traits/EventListener.php +++ b/src/tad/WPBrowser/Module/Traits/EventListener.php @@ -60,7 +60,7 @@ protected function getEventDispatcher() /** @var \Codeception\Application $app */ global $app; - if ( ! $app instanceof Application) { + if (! $app instanceof Application) { throw new ModuleException( $this, 'Global `app` object is either empty or not an instance of the \Codeception\Application class.' @@ -81,7 +81,7 @@ protected function getEventDispatcher() $e->getMessage() ); } - if ( ! $dispatcher instanceof EventDispatcher) { + if (! $dispatcher instanceof EventDispatcher) { throw new ModuleException($this, sprintf( '\\Codeception\\Codecept::$eventDispatcher property is not an instance of %s; value is instead: %s', EventDispatcher::class, From 8cfc7dce53564fb4af34f6540e25dad6b4793c73 Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Sun, 19 May 2019 16:43:00 +0200 Subject: [PATCH 35/37] build(.travis.yml): do not finish fast --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index cd0b2b139..add96b653 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,6 @@ notifications: email: false matrix: - fast_finish: true include: - php: '5.6' env: CODECEPTION_VERSION="^2.5" From 8bf7ff783c64207306992285ea6281f076002c92 Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" Date: Mon, 20 May 2019 09:08:52 +0200 Subject: [PATCH 36/37] docs(docs/changelog.md): add missing changelog entry --- docs/changelog.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/changelog.md b/docs/changelog.md index 2a74853cc..fb8c21fbb 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -10,6 +10,9 @@ This project adheres to [Semantic Versioning](http://semver.org/). - updated `WPTestCase` to handle PHPUnit v8 compatibility - internalized the classes and functions provided by the `lucatume/wp-browser-commons` package +### Fixed +- initialize the WPLoader module after all other modules initialized when `loadOnly` is `true` to avoid WordPress exiting due to a non-initialized database fixture + ## [2.2.7] 2019-05-08; ### Changed - replaced `wp-cli/wp-cli:1.1.*` dependecy with the `wp-cli/wp-cli-bundle:^2.0` one From afe52b8b5b37e90ca3cf952edb3e8f4dd8bf79a0 Mon Sep 17 00:00:00 2001 From: Luca Tumedei Date: Mon, 20 May 2019 13:32:42 +0200 Subject: [PATCH 37/37] docs(CHANGELOG.md): moved the changelog file to the root folder --- docs/changelog.md => CHANGELOG.md | 6 +++--- docs/summary.md | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) rename docs/changelog.md => CHANGELOG.md (99%) diff --git a/docs/changelog.md b/CHANGELOG.md similarity index 99% rename from docs/changelog.md rename to CHANGELOG.md index fb8c21fbb..64fd5c7ef 100644 --- a/docs/changelog.md +++ b/CHANGELOG.md @@ -4,10 +4,10 @@ This project adheres to [Semantic Versioning](http://semver.org/). ## [unreleased] Unreleased -## [2.2.8] 2019-05-13; +## [2.2.8] 2019-05-20; ### Changed -- udpated requirement of `codeception/codeception` to include version `3.0` -- updated `WPTestCase` to handle PHPUnit v8 compatibility +- updated requirement of `codeception/codeception` to include version `3.0` +- updated `WPTestCase` to handle PHPUnit version `8.0+` compatibility - internalized the classes and functions provided by the `lucatume/wp-browser-commons` package ### Fixed diff --git a/docs/summary.md b/docs/summary.md index 008bd0fec..7084f6f39 100644 --- a/docs/summary.md +++ b/docs/summary.md @@ -20,5 +20,5 @@ * [Commands](commands.md) * [Extensions](extensions.md) * [Contributing](contributing.md) -* [Changelog](changelog.md) +* [Changelog](https://github.com/lucatume/wp-browser/blob/master/CHANGELOG.md) \ No newline at end of file