From 26e0f36846bb8fd7782c612a8f5f177061ed30d9 Mon Sep 17 00:00:00 2001 From: Geoff Taylor Date: Fri, 10 Jul 2020 11:41:23 -0400 Subject: [PATCH 1/3] GravityForms connector test implemented. --- composer.json | 1 + composer.lock | 121 +- connectors/class-connector-gravityforms.php | 127 +- phpunit.xml | 2 +- .../test-class-connector-gravityforms.php | 1054 +++++++++++++++++ 5 files changed, 1178 insertions(+), 127 deletions(-) create mode 100644 tests/tests/connectors/test-class-connector-gravityforms.php diff --git a/composer.json b/composer.json index b04a148fe..dc6c7dea9 100644 --- a/composer.json +++ b/composer.json @@ -25,6 +25,7 @@ "wpackagist-plugin/advanced-custom-fields": "5.8.12", "wpackagist-plugin/easy-digital-downloads": "^2.9.23", "wpackagist-plugin/user-switching": "^1.5.5", + "wp-premium/gravityforms": "^2.4.17", "wpsh/local": "^0.2.3" }, "config": { diff --git a/composer.lock b/composer.lock index 03b357a70..36ef3b2ee 100644 --- a/composer.lock +++ b/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c025a44ff83e162076363f15803df9da", + "content-hash": "e63176af94fa736801d3e5c6835ebc1a", "packages": [ { "name": "composer/installers", - "version": "v1.9.0", + "version": "v1.10.0", "source": { "type": "git", "url": "https://github.com/composer/installers.git", - "reference": "b93bcf0fa1fccb0b7d176b0967d969691cd74cca" + "reference": "1a0357fccad9d1cc1ea0c9a05b8847fbccccb78d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/installers/zipball/b93bcf0fa1fccb0b7d176b0967d969691cd74cca", - "reference": "b93bcf0fa1fccb0b7d176b0967d969691cd74cca", + "url": "https://api.github.com/repos/composer/installers/zipball/1a0357fccad9d1cc1ea0c9a05b8847fbccccb78d", + "reference": "1a0357fccad9d1cc1ea0c9a05b8847fbccccb78d", "shasum": "" }, "require": { @@ -28,17 +28,18 @@ "shama/baton": "*" }, "require-dev": { - "composer/composer": "1.6.* || 2.0.*@dev", - "composer/semver": "1.0.* || 2.0.*@dev", - "phpunit/phpunit": "^4.8.36", - "sebastian/comparator": "^1.2.4", + "composer/composer": "1.6.* || ^2.0", + "composer/semver": "^1 || ^3", + "phpstan/phpstan": "^0.12.55", + "phpstan/phpstan-phpunit": "^0.12.16", + "symfony/phpunit-bridge": "^4.2 || ^5", "symfony/process": "^2.3" }, "type": "composer-plugin", "extra": { "class": "Composer\\Installers\\Plugin", "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "1.x-dev" } }, "autoload": { @@ -76,6 +77,7 @@ "Porto", "RadPHP", "SMF", + "Starbug", "Thelia", "Whmcs", "WolfCMS", @@ -116,6 +118,7 @@ "phpbb", "piwik", "ppi", + "processwire", "puppet", "pxcms", "reindex", @@ -133,19 +136,23 @@ ], "support": { "issues": "https://github.com/composer/installers/issues", - "source": "https://github.com/composer/installers/tree/v1.9.0" + "source": "https://github.com/composer/installers/tree/v1.10.0" }, "funding": [ { "url": "https://packagist.com", "type": "custom" }, + { + "url": "https://github.com/composer", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/composer/composer", "type": "tidelift" } ], - "time": "2020-04-07T06:57:05+00:00" + "time": "2021-01-14T11:07:16+00:00" } ], "packages-dev": [ @@ -279,16 +286,16 @@ }, { "name": "composer/composer", - "version": "1.10.19", + "version": "1.10.20", "source": { "type": "git", "url": "https://github.com/composer/composer.git", - "reference": "196601d50c08c3fae389a417a7689367fcf37cef" + "reference": "e55d297525f0ecc805c813a0f63a40114fd670f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/196601d50c08c3fae389a417a7689367fcf37cef", - "reference": "196601d50c08c3fae389a417a7689367fcf37cef", + "url": "https://api.github.com/repos/composer/composer/zipball/e55d297525f0ecc805c813a0f63a40114fd670f6", + "reference": "e55d297525f0ecc805c813a0f63a40114fd670f6", "shasum": "" }, "require": { @@ -358,7 +365,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/composer/issues", - "source": "https://github.com/composer/composer/tree/1.10.19" + "source": "https://github.com/composer/composer/tree/1.10.20" }, "funding": [ { @@ -374,7 +381,7 @@ "type": "tidelift" } ], - "time": "2020-12-04T08:14:16+00:00" + "time": "2021-01-27T14:41:06+00:00" }, { "name": "composer/semver", @@ -1079,20 +1086,20 @@ }, { "name": "johnpbloch/wordpress", - "version": "5.6.0", + "version": "5.6.1", "source": { "type": "git", "url": "https://github.com/johnpbloch/wordpress.git", - "reference": "3055975734646c8d0b8caf7b5af168ced6ec4309" + "reference": "d7a597988102967cdfc28851b6b897d018613823" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/johnpbloch/wordpress/zipball/3055975734646c8d0b8caf7b5af168ced6ec4309", - "reference": "3055975734646c8d0b8caf7b5af168ced6ec4309", + "url": "https://api.github.com/repos/johnpbloch/wordpress/zipball/d7a597988102967cdfc28851b6b897d018613823", + "reference": "d7a597988102967cdfc28851b6b897d018613823", "shasum": "" }, "require": { - "johnpbloch/wordpress-core": "5.6.0", + "johnpbloch/wordpress-core": "5.6.1", "johnpbloch/wordpress-core-installer": "^1.0 || ^2.0", "php": ">=5.6.20" }, @@ -1121,20 +1128,20 @@ "source": "http://core.trac.wordpress.org/browser", "wiki": "http://codex.wordpress.org/" }, - "time": "2020-12-08T22:34:35+00:00" + "time": "2021-02-03T21:27:41+00:00" }, { "name": "johnpbloch/wordpress-core", - "version": "5.6.0", + "version": "5.6.1", "source": { "type": "git", "url": "https://github.com/johnpbloch/wordpress-core.git", - "reference": "f074617dd69f466302836d1ae5de75c0bd7b6dfd" + "reference": "82592ec73d42cf784da38adb0028a24dbacab1b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/johnpbloch/wordpress-core/zipball/f074617dd69f466302836d1ae5de75c0bd7b6dfd", - "reference": "f074617dd69f466302836d1ae5de75c0bd7b6dfd", + "url": "https://api.github.com/repos/johnpbloch/wordpress-core/zipball/82592ec73d42cf784da38adb0028a24dbacab1b4", + "reference": "82592ec73d42cf784da38adb0028a24dbacab1b4", "shasum": "" }, "require": { @@ -1142,7 +1149,7 @@ "php": ">=5.6.20" }, "provide": { - "wordpress/core-implementation": "5.6.0" + "wordpress/core-implementation": "5.6.1" }, "type": "wordpress-core", "notification-url": "https://packagist.org/downloads/", @@ -1169,7 +1176,7 @@ "source": "https://core.trac.wordpress.org/browser", "wiki": "https://codex.wordpress.org/" }, - "time": "2020-12-08T22:34:23+00:00" + "time": "2021-02-03T21:27:35+00:00" }, { "name": "johnpbloch/wordpress-core-installer", @@ -3145,16 +3152,16 @@ }, { "name": "sirbrillig/phpcs-variable-analysis", - "version": "v2.10.1", + "version": "v2.10.2", "source": { "type": "git", "url": "https://github.com/sirbrillig/phpcs-variable-analysis.git", - "reference": "c6716a98fe7bee25d31306e14fb62c3ffa16d70a" + "reference": "0775e0c683badad52c03b11c2cd86a9fdecb937a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sirbrillig/phpcs-variable-analysis/zipball/c6716a98fe7bee25d31306e14fb62c3ffa16d70a", - "reference": "c6716a98fe7bee25d31306e14fb62c3ffa16d70a", + "url": "https://api.github.com/repos/sirbrillig/phpcs-variable-analysis/zipball/0775e0c683badad52c03b11c2cd86a9fdecb937a", + "reference": "0775e0c683badad52c03b11c2cd86a9fdecb937a", "shasum": "" }, "require": { @@ -3194,7 +3201,7 @@ "source": "https://github.com/sirbrillig/phpcs-variable-analysis", "wiki": "https://github.com/sirbrillig/phpcs-variable-analysis/wiki" }, - "time": "2020-12-12T18:28:57+00:00" + "time": "2021-01-08T16:31:05+00:00" }, { "name": "squizlabs/php_codesniffer", @@ -4288,12 +4295,12 @@ "version": "1.9.1", "source": { "type": "git", - "url": "https://github.com/webmozart/assert.git", + "url": "https://github.com/webmozarts/assert.git", "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", "shasum": "" }, @@ -4331,8 +4338,8 @@ "validate" ], "support": { - "issues": "https://github.com/webmozart/assert/issues", - "source": "https://github.com/webmozart/assert/tree/master" + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.9.1" }, "time": "2020-07-08T17:02:28+00:00" }, @@ -6476,16 +6483,16 @@ }, { "name": "wp-phpunit/wp-phpunit", - "version": "5.6.0", + "version": "5.6.1", "source": { "type": "git", "url": "https://github.com/wp-phpunit/wp-phpunit.git", - "reference": "7130a214573cc8c12a0f8fe8a74b18b453bce1e9" + "reference": "f6b3fb65bccc0ff70b3bc7cc241935597dbd5562" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wp-phpunit/wp-phpunit/zipball/7130a214573cc8c12a0f8fe8a74b18b453bce1e9", - "reference": "7130a214573cc8c12a0f8fe8a74b18b453bce1e9", + "url": "https://api.github.com/repos/wp-phpunit/wp-phpunit/zipball/f6b3fb65bccc0ff70b3bc7cc241935597dbd5562", + "reference": "f6b3fb65bccc0ff70b3bc7cc241935597dbd5562", "shasum": "" }, "type": "library", @@ -6520,7 +6527,33 @@ "issues": "https://github.com/wp-phpunit/issues", "source": "https://github.com/wp-phpunit/wp-phpunit" }, - "time": "2020-12-09T18:06:02+00:00" + "time": "2021-02-04T18:24:14+00:00" + }, + { + "name": "wp-premium/gravityforms", + "version": "2.4.20", + "source": { + "type": "git", + "url": "https://github.com/wp-premium/gravityforms.git", + "reference": "a9c8f2de051e016e096069210ecd5fb8f5a19801" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/wp-premium/gravityforms/zipball/a9c8f2de051e016e096069210ecd5fb8f5a19801", + "reference": "a9c8f2de051e016e096069210ecd5fb8f5a19801", + "shasum": "" + }, + "type": "wordpress-plugin", + "autoload": { + "classmap": [ + "." + ] + }, + "notification-url": "https://packagist.org/downloads/", + "support": { + "source": "https://github.com/wp-premium/gravityforms/tree/2.4.20" + }, + "time": "2020-10-01T12:09:03+00:00" }, { "name": "wpackagist-plugin/advanced-custom-fields", diff --git a/connectors/class-connector-gravityforms.php b/connectors/class-connector-gravityforms.php index 667aca24d..321428575 100644 --- a/connectors/class-connector-gravityforms.php +++ b/connectors/class-connector-gravityforms.php @@ -45,6 +45,7 @@ class Connector_GravityForms extends Connector { 'gform_post_form_views_deleted', 'gform_post_export_entries', 'gform_forms_post_import', + 'gform_export_form', 'gform_delete_lead', 'gform_post_note_added', 'gform_pre_note_deleted', @@ -225,16 +226,11 @@ public function callback_gform_after_save_form( $form, $is_new ) { $id = $form['id']; $this->log( - sprintf( - /* translators: %1$s a form title, %2$s a status (e.g. "Contact Form", "created") */ - __( '"%1$s" form %2$s', 'stream' ), - $title, - $is_new ? esc_html__( 'created', 'stream' ) : esc_html__( 'updated', 'stream' ) - ), + /* translators: %1$s a form title, %2$s an action (e.g. "Contact Form", "created") */ + __( '"%1$s" form %2$s', 'stream' ), array( - 'action' => $is_new, - 'id' => $id, 'title' => $title, + 'action' => $is_new ? esc_html__( 'created', 'stream' ) : esc_html__( 'updated', 'stream' ), ), $id, 'forms', @@ -255,16 +251,12 @@ public function callback_gform_pre_confirmation_save( $confirmation, $form, $is_ } $this->log( - sprintf( - /* translators: %1$s: a confirmation name, %2$s: a status, %3$s: a form title (e.g. "Email", "created", "Contact Form") */ - __( '"%1$s" confirmation %2$s for "%3$s"', 'stream' ), - $confirmation['name'], - $is_new ? esc_html__( 'created', 'stream' ) : esc_html__( 'updated', 'stream' ), - $form['title'] - ), + /* translators: %1$s: a confirmation name, %2$s: a status, %3$s: a form title (e.g. "Email", "created", "Contact Form") */ + __( '"%1$s" confirmation %2$s for "%3$s"', 'stream' ), array( - 'is_new' => $is_new, - 'form_id' => $form['id'], + 'title' => $confirmation['name'], + 'action' => $is_new ? esc_html__( 'created', 'stream' ) : esc_html__( 'updated', 'stream' ), + 'form_title' => $form['title'], ), $form['id'], 'forms', @@ -288,16 +280,12 @@ public function callback_gform_pre_notification_save( $notification, $form, $is_ } $this->log( - sprintf( - /* translators: %1$s: a notification name, %2$s: a status, %3$s: a form title (e.g. "Email", "created", "Contact Form") */ - __( '"%1$s" notification %2$s for "%3$s"', 'stream' ), - $notification['name'], - $is_new ? esc_html__( 'created', 'stream' ) : esc_html__( 'updated', 'stream' ), - $form['title'] - ), + /* translators: %1$s: a notification name, %2$s: a status, %3$s: a form title (e.g. "Email", "created", "Contact Form") */ + __( '"%1$s" notification %2$s for "%3$s"', 'stream' ), array( - 'is_update' => $is_new, - 'form_id' => $form['id'], + 'title' => $notification['name'], + 'action' => $is_new ? esc_html__( 'created', 'stream' ) : esc_html__( 'updated', 'stream' ), + 'form_title' => $form['title'], ), $form['id'], 'forms', @@ -315,15 +303,11 @@ public function callback_gform_pre_notification_save( $notification, $form, $is_ */ public function callback_gform_pre_notification_deleted( $notification, $form ) { $this->log( - sprintf( - /* translators: %1$s: a notification name, %2$s: a form title (e.g. "Email", "Contact Form") */ - __( '"%1$s" notification deleted from "%2$s"', 'stream' ), - $notification['name'], - $form['title'] - ), + /* translators: %1$s: a notification name, %2$s: a form title (e.g. "Email", "Contact Form") */ + __( '"%1$s" notification deleted from "%2$s"', 'stream' ), array( - 'form_id' => $form['id'], - 'notification' => $notification, + 'title' => $notification['name'], + 'form_title' => $form['title'], ), $form['id'], 'forms', @@ -339,15 +323,11 @@ public function callback_gform_pre_notification_deleted( $notification, $form ) */ public function callback_gform_pre_confirmation_deleted( $confirmation, $form ) { $this->log( - sprintf( - /* translators: %1$s: a confirmation name, %2$s: a form title (e.g. "Email", "Contact Form") */ - __( '"%1$s" confirmation deleted from "%2$s"', 'stream' ), - $confirmation['name'], - $form['title'] - ), + /* translators: %1$s: a confirmation name, %2$s: a form title (e.g. "Email", "Contact Form") */ + __( '"%1$s" confirmation deleted from "%2$s"', 'stream' ), array( - 'form_id' => $form['id'], - 'confirmation' => $confirmation, + 'title' => $confirmation['name'], + 'form_title' => $form['title'], ), $form['id'], 'forms', @@ -361,6 +341,9 @@ public function callback_gform_pre_confirmation_deleted( $confirmation, $form ) * @param array $confirmation Confirmation data. * @param array $form Form data. * @param bool $is_active Is this form active?. + * + * @TODO See if this needs to be removed. + * Can't find action or logic relating to status of the confirmation in the GF code. */ public function callback_gform_confirmation_status( $confirmation, $form, $is_active ) { $this->log( @@ -388,6 +371,9 @@ public function callback_gform_confirmation_status( $confirmation, $form, $is_ac * @param array $notification Notification data. * @param array $form Form data. * @param bool $is_active Is this form active?. + * + * @TODO See if this needs to be removed. + * Can't find action or logic relating to status of the confirmation in the GF code. */ public function callback_gform_notification_status( $notification, $form, $is_active ) { $this->log( @@ -581,25 +567,22 @@ public function callback_gform_forms_post_import( $forms ) { * * @action gform_export_separator * - * @param string $dummy Unused. - * @param int $form_id Form ID. + * @param array $form Form object. */ - public function callback_gform_export_separator( $dummy, $form_id ) { - $form = $this->get_form( $form_id ); - + public function callback_gform_export_form( $form ) { $this->log( /* translators: %s: a form title (e.g. "Contact Form") */ __( '"%s" form exported', 'stream' ), array( 'form_title' => $form['title'], - 'form_id' => $form_id, + 'form_id' => $form['id'], ), - $form_id, + $form['id'], 'export', 'exported' ); - return $dummy; + return $form; } /** @@ -607,6 +590,8 @@ public function callback_gform_export_separator( $dummy, $form_id ) { * * @param string $dummy Unused. * @param array $forms Form data. + * + * @TODO See if this callback should be removed. */ public function callback_gform_export_options( $dummy, $forms ) { $ids = wp_list_pluck( $forms, 'id' ); @@ -746,17 +731,12 @@ public function callback_gform_update_status( $lead_id, $status, $prev = '' ) { } $this->log( - sprintf( - /* translators: %1$d: an ID, %2$s: a status, %3$s: a form title (e.g. "42", "activated", "Contact Form") */ - __( 'Lead #%1$d %2$s on "%3$s" form', 'stream' ), - $lead_id, - $actions[ $status ], - $form['title'] - ), + /* translators: %1$d: an ID, %2$s: a status, %3$s: a form title (e.g. "42", "activated", "Contact Form") */ + __( 'Lead #%1$d %2$s on "%3$s" form', 'stream' ), array( 'lead_id' => $lead_id, + 'action' => $actions[ $status ], 'form_title' => $form['title'], - 'form_id' => $form['id'], 'status' => $status, 'prev' => $prev, ), @@ -780,14 +760,8 @@ public function callback_gform_update_is_read( $lead_id, $status ) { $status = ( ! empty( $status ) ) ? esc_html__( 'read', 'stream' ) : esc_html__( 'unread', 'stream' ); $this->log( - sprintf( - /* translators: %1$d: a lead ID, %2$s: a status, %3$s: a form ID, %4$s: a form title (e.g. "42", "unread", "Contact Form") */ - __( 'Entry #%1$d marked as %2$s on form #%3$d ("%4$s")', 'stream' ), - $lead_id, - $status, - $form['id'], - $form['title'] - ), + /* translators: %1$d: a lead ID, %2$s: a status, %3$s: a form ID, %4$s: a form title (e.g. "42", "unread", "Contact Form") */ + __( 'Entry #%1$d marked as %2$s on form #%3$d ("%4$s")', 'stream' ), array( 'lead_id' => $lead_id, 'lead_status' => $status, @@ -815,14 +789,8 @@ public function callback_gform_update_is_starred( $lead_id, $status ) { $action = $status; $this->log( - sprintf( - /* translators: %1$d: an ID, %2$s: a status, %3$d: a form title (e.g. "42", "starred", "Contact Form") */ - __( 'Entry #%1$d %2$s on form #%3$d ("%4$s")', 'stream' ), - $lead_id, - $status, - $form['id'], - $form['title'] - ), + /* translators: %1$d: an ID, %2$s: a status, %3$d: a form title (e.g. "42", "starred", "Contact Form") */ + __( 'Entry #%1$d %2$s on form #%3$d ("%4$s")', 'stream' ), array( 'lead_id' => $lead_id, 'lead_status' => $status, @@ -936,17 +904,12 @@ public function log_form_action( $form_id, $action ) { ); $this->log( - sprintf( - /* translators: %1$d: an ID, %2$s: a form title, %3$s: a status (e.g. "42", "Contact Form", "Activated") */ - __( 'Form #%1$d ("%2$s") %3$s', 'stream' ), - $form_id, - $form['title'], - strtolower( $actions[ $action ] ) - ), + /* translators: %1$d: an ID, %2$s: a form title, %3$s: a status (e.g. "42", "Contact Form", "Activated") */ + __( 'Form #%1$d ("%2$s") %3$s', 'stream' ), array( 'form_id' => $form_id, 'form_title' => $form['title'], - 'form_status' => strtolower( $action ), + 'form_status' => strtolower( $actions[ $action ] ), ), $form['id'], 'forms', diff --git a/phpunit.xml b/phpunit.xml index af2b1c44b..8df86a355 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -10,7 +10,7 @@ diff --git a/tests/tests/connectors/test-class-connector-gravityforms.php b/tests/tests/connectors/test-class-connector-gravityforms.php new file mode 100644 index 000000000..5ab9785bf --- /dev/null +++ b/tests/tests/connectors/test-class-connector-gravityforms.php @@ -0,0 +1,1054 @@ +plugin->connectors->unload_connectors(); + + $post_connector = new Connector_Posts(); + $post_connector->register(); + + // Make partial of Connector_GravityForms class, with mocked "log" function. + $this->mock = $this->getMockBuilder( Connector_GravityForms::class ) + ->setMethods( array( 'log' ) ) + ->getMock(); + + $this->mock->register(); + } + + /** + * Runs after each test + */ + public function tearDown() { + parent::tearDown(); + } + + public function test_gravityforms_installed_and_activated() { + $this->assertTrue( class_exists( 'GFForms' ) ); + } + + /** + * Creates a new form. + * + * @param array $form Form configurations. + * @param array $fields Form fields configurations. + * + * @return int + */ + public function create_form( $form = array(), $fields = array() ) { + $form = array_merge( + $form, + array( + 'title' => 'Test form', + 'description' => 'Form for Field Tests Description', + 'fields' => $this->create_fields( $fields ) + ) + ); + $form_id = \GFAPI::add_form( $form ); + + return $form_id; + } + + /** + * Returns form field object. + * + * @param array $fields Form field configurations. + * + * @return array + */ + public function create_fields( $fields = array() ) { + $fields = ! empty( $fields ) ? $fields : array( + array( + 'type' => 'text', + 'id' => 1, + 'label' => 'Single Line Text', + 'adminLabel' => '', + 'isRequired' => false, + 'size' => 'medium', + 'errorMessage' => '', + 'visibility' => 'visible', + 'inputs' => null, + 'formId' => 2, + 'description' => 'I am a single line text field.', + 'allowsPrepopulate' => false, + 'inputMask' => false, + 'inputMaskValue' => '', + 'inputMaskIsCustom' => false, + 'maxLength' => '', + 'inputType' => '', + 'labelPlacement' => '', + 'descriptionPlacement' => '', + 'subLabelPlacement' => '', + 'placeholder' => '', + 'cssClass' => '', + 'inputName' => '', + 'noDuplicates' => false, + 'defaultValue' => '', + 'choices' => '', + 'productField' => '', + 'enablePasswordInput' => '', + 'multipleFiles' => false, + 'maxFiles' => '', + 'calculationFormula' => '', + 'calculationRounding' => '', + 'enableCalculation' => '', + 'disableQuantity' => false, + 'displayAllCategories' => false, + 'useRichTextEditor' => false, + 'checkboxLabel' => '', + 'pageNumber' => 1, + 'fields' => '', + 'displayOnly' => '', + ), + ); + + return $fields; + } + + public function test_callback_gform_after_save_form() { + // Expected log calls. + $this->mock->expects( $this->once() ) + ->method( 'log' ) + ->with( + $this->equalTo( __( '"%1$s" form %2$s', 'stream' ) ), + $this->equalTo( + array( + 'title' => 'Test form', + 'action' => 'created', + ) + ), + $this->greaterThan( 0 ), + $this->equalTo( 'forms' ), + $this->equalTo( 'created' ) + ); + + // Create form to trigger save callback. + $form_id = $this->create_form(); + + $form_meta = \GFFormsModel::get_form_meta( $form_id ); + do_action( 'gform_after_save_form', $form_meta, true, array() ); + + // Check callback test action. + $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_after_save_form' ) ); + } + + public function test_callback_gform_pre_confirmation_save() { + // Expected log calls. + $this->mock->expects( $this->once() ) + ->method( 'log' ) + ->with( + $this->equalTo( __( '"%1$s" confirmation %2$s for "%3$s"', 'stream' ) ), + $this->equalTo( + array( + 'title' => 'Test confirmation', + 'action' => 'created', + 'form_title' => 'Test form', + ) + ), + $this->greaterThan( 0 ), + $this->equalTo( 'forms' ), + $this->equalTo( 'updated' ) + ); + + // Create form and confirmation to trigger callback. + $confirmation = array( + 'id' => uniqid(), + 'name' => 'Test confirmation', + 'isDefault' => true, + 'type' => 'message', + 'message' => 'Lorem ipsum dolor...', + 'url' => '', + 'pageId' => '', + 'queryString' => '', + ); + + $form_id = $this->create_form( + array( 'confirmations' => array( $confirmation['id'] => $confirmation ) ) + ); + $form = \GFAPI::get_form( $form_id ); + + \gf_apply_filters( array( 'gform_pre_confirmation_save', $form_id ), $confirmation, $form, true ); + + // Check callback test action. + $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_pre_confirmation_save' ) ); + } + + public function test_callback_gform_pre_notification_save() { + // Expected log calls. + $this->mock->expects( $this->once() ) + ->method( 'log' ) + ->with( + $this->equalTo( __( '"%1$s" notification %2$s for "%3$s"', 'stream' ) ), + $this->equalTo( + array( + 'title' => 'Test notification', + 'action' => 'created', + 'form_title' => 'Test form', + ) + ), + $this->greaterThan( 0 ), + $this->equalTo( 'forms' ), + $this->equalTo( 'updated' ) + ); + + // Create form and notification to trigger callback. + $notification = array( + 'id' => uniqid(), + 'to' => '{admin_email}', + 'name' => 'Test notification', + 'event' => 'form_submission', + 'toType' => 'email', + 'subject' => 'New submission from {form_title}', + 'message' => '{all_fields}', + ); + + $form_id = $this->create_form( + array( 'notifications' => array( $notification['id'] => $notification ) ) + ); + $form = \GFAPI::get_form( $form_id ); + + \gf_apply_filters( array( 'gform_pre_notification_save', $form_id ), $notification, $form, true ); + + // Check callback test action. + $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_pre_notification_save' ) ); + } + + public function test_callback_gform_pre_notification_deleted() { + // Create form and notification for later use. + $notification = array( + 'id' => uniqid(), + 'to' => '{admin_email}', + 'name' => 'Test notification', + 'event' => 'form_submission', + 'toType' => 'email', + 'subject' => 'New submission from {form_title}', + 'message' => '{all_fields}', + ); + + $form_id = $this->create_form( + array( 'notifications' => array( $notification['id'] => $notification ) ) + ); + $form = \GFAPI::get_form( $form_id ); + + // Expected log calls. + $this->mock->expects( $this->once() ) + ->method( 'log' ) + ->with( + $this->equalTo( __( '"%1$s" notification deleted from "%2$s"', 'stream' ) ), + $this->equalTo( + array( + 'title' => 'Test notification', + 'form_title' => 'Test form', + ) + ), + $this->greaterThan( 0 ), + $this->equalTo( 'forms' ), + $this->equalTo( 'updated' ) + ); + + // Delete notification to trigger callback. + \GFNotification::delete_notification( $notification['id'], $form_id ); + + // Check callback test action.. + $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_pre_notification_deleted' ) ); + } + + public function test_callback_gform_pre_confirmation_deleted() { + // Create form and notification for later use. + $confirmation = array( + 'id' => uniqid(), + 'name' => 'Test confirmation', + 'isDefault' => true, + 'type' => 'message', + 'message' => 'Lorem ipsum dolor...', + 'url' => '', + 'pageId' => '', + 'queryString' => '', + ); + + $form_id = $this->create_form( + array( 'confirmations' => array( $confirmation['id'] => $confirmation ) ) + ); + $form = \GFAPI::get_form( $form_id ); + + // Expected log calls. + $this->mock->expects( $this->once() ) + ->method( 'log' ) + ->with( + $this->equalTo( __( '"%1$s" confirmation deleted from "%2$s"', 'stream' ) ), + $this->equalTo( + array( + 'title' => 'Test confirmation', + 'form_title' => 'Test form', + ) + ), + $this->greaterThan( 0 ), + $this->equalTo( 'forms' ), + $this->equalTo( 'updated' ) + ); + + // Delete confirmation to trigger callback. + \GFFormSettings::delete_confirmation( $confirmation['id'], $form_id ); + + // Check callback test action. + $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_pre_confirmation_deleted' ) ); + } + + public function test_check() { + // Expected log calls. + $this->mock->expects( $this->exactly( 4 ) ) + ->method( 'log' ) + ->withConsecutive( + array( + $this->equalTo( __( '"%s" setting updated', 'stream' ) ), + $this->equalTo( + array( + 'option_title' => 'Currency', + 'option' => 'rg_gforms_currency', + 'old_value' => null, + 'new_value' => '$', + ) + ), + $this->equalTo( null ), + $this->equalTo( 'settings' ), + $this->equalTo( 'updated' ), + ), + array( + $this->equalTo( 'Gravity Forms license key updated' ), + $this->equalTo( + array( + 'option' => 'rg_gforms_key', + 'old_value' => null, + 'new_value' => 'blahblahblah' + ) + ), + $this->equalTo( null ), + $this->equalTo( 'settings' ), + $this->equalTo( 'updated' ), + ), + array( + $this->equalTo( __( '"%s" setting updated', 'stream' ) ), + $this->equalTo( + array( + 'option_title' => 'Currency', + 'option' => 'rg_gforms_currency', + 'old_value' => '$', + 'new_value' => '£', + ) + ), + $this->equalTo( null ), + $this->equalTo( 'settings' ), + $this->equalTo( 'updated' ), + ), + array( + $this->equalTo( 'Gravity Forms license key deleted' ), + $this->equalTo( + array( + 'option' => 'rg_gforms_key', + 'old_value' => 'blahblahblah', + 'new_value' => '' + ) + ), + $this->equalTo( null ), + $this->equalTo( 'settings' ), + $this->equalTo( 'deleted' ), + ) + ); + + // Update options to trigger callbacks. + update_option( 'rg_gforms_currency', '$' ); + update_option( 'rg_gforms_key', 'blahblahblah' ); + update_option( 'rg_gforms_currency', '£' ); + update_option( 'rg_gforms_key', '' ); + + // Check callback test action. + $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_add_option' ) ); + $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_update_option' ) ); + } + + public function test_callback_gform_delete_lead() { + // Create form and entry for later use. + $form_id = $this->create_form(); + $form = \GFAPI::get_form( $form_id ); + $entry_id = \GFAPI::add_entry( + array( + 'id' => '1', + 'form_id' => $form_id, + 'date_created' => '2016-03-22 19 => 13 => 19', + 'is_starred' => 0, + 'is_read' => 0, + 'ip' => '192.168.50.1', + 'source_url' => 'http => \/\/local.wordpress.dev\/?gf_page=preview&id=1', + 'post_id' => null, + 'currency' => 'USD', + 'payment_status' => null, + 'payment_date' => null, + 'transaction_id' => null, + 'payment_amount' => null, + 'payment_method' => null, + 'is_fulfilled' => null, + 'created_by' => '1', + 'transaction_type' => null, + 'user_agent' => 'Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/48.0.2564.116 Safari\/537.36', + 'status' => 'active', + ) + ); + + // Expected log calls. + $this->mock->expects( $this->once() ) + ->method( 'log' ) + ->with( + $this->equalTo( __( 'Lead #%1$d from "%2$s" deleted', 'stream' ) ), + $this->equalTo( + array( + 'lead_id' => $entry_id, + 'form_title' => 'Test form', + 'form_id' => $form_id, + ) + ), + $this->equalTo( $entry_id ), + $this->equalTo( 'entries' ), + $this->equalTo( 'deleted' ) + ); + + // Delete entry to trigger callback. + \GFFormsModel::delete_entry( $entry_id ); + + // Check callback test action. + $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_delete_lead' ) ); + } + + public function test_callback_gform_post_note_added() { + // Create and authenticate user. + $user_id = self::factory()->user->create( + array( + 'username' => 'johndoe', + 'user_role' => 'admin', + ) + ); + \wp_set_current_user( $user_id ); + + // Create form and entry for later use. + $form_id = $this->create_form(); + $form = \GFAPI::get_form( $form_id ); + $entry_id = \GFAPI::add_entry( + array( + 'id' => '1', + 'form_id' => $form_id, + 'date_created' => '2016-03-22 19 => 13 => 19', + 'is_starred' => 0, + 'is_read' => 0, + 'ip' => '192.168.50.1', + 'source_url' => 'http => \/\/local.wordpress.dev\/?gf_page=preview&id=1', + 'post_id' => null, + 'currency' => 'USD', + 'payment_status' => null, + 'payment_date' => null, + 'transaction_id' => null, + 'payment_amount' => null, + 'payment_method' => null, + 'is_fulfilled' => null, + 'created_by' => '1', + 'transaction_type' => null, + 'user_agent' => 'Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/48.0.2564.116 Safari\/537.36', + 'status' => 'active', + ) + ); + + // Expected log calls. + $this->mock->expects( $this->once() ) + ->method( 'log' ) + ->with( + $this->equalTo( __( 'Note #%1$d added to lead #%2$d on "%3$s" form', 'stream' ) ), + $this->callback( + function( $args ) { + return ! empty( $args['form_title' ] ) && $args['form_title'] === 'Test form'; + } + ), + $this->greaterThan( 0 ), + $this->equalTo( 'notes' ), + $this->equalTo( 'added' ) + ); + + // Create note to trigger callback. + $note = 'Lorem ipsum dolor...'; + \GFFormsModel::add_note( $entry_id, $user_id, 'johndoe', $note, 'user' ); + + // Check callback test action. + $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_post_note_added' ) ); + } + + public function test_callback_gform_pre_note_deleted() { + global $wpdb; + + // Create and authenticate user. + $user_id = self::factory()->user->create( + array( + 'username' => 'johndoe', + 'user_role' => 'admin', + ) + ); + \wp_set_current_user( $user_id ); + + // Create form, entry, and note for later use. + $form_id = $this->create_form(); + $form = \GFAPI::get_form( $form_id ); + $entry_id = \GFAPI::add_entry( + array( + 'id' => '1', + 'form_id' => $form_id, + 'date_created' => '2016-03-22 19 => 13 => 19', + 'is_starred' => 0, + 'is_read' => 0, + 'ip' => '192.168.50.1', + 'source_url' => 'http => \/\/local.wordpress.dev\/?gf_page=preview&id=1', + 'post_id' => null, + 'currency' => 'USD', + 'payment_status' => null, + 'payment_date' => null, + 'transaction_id' => null, + 'payment_amount' => null, + 'payment_method' => null, + 'is_fulfilled' => null, + 'created_by' => '1', + 'transaction_type' => null, + 'user_agent' => 'Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/48.0.2564.116 Safari\/537.36', + 'status' => 'active', + ) + ); + + // Wow, I actually had to do this just to get the Note ID. + $note_id = null; + add_action( + 'gform_post_note_added', + function( $id ) use ( &$note_id ) { + $note_id = $id; + } + ); + \GFFormsModel::add_note( $entry_id, $user_id, 'johndoe', 'Lorem ipsum dolor...' ); + + // Expected log calls. + $this->mock->expects( $this->once() ) + ->method( 'log' ) + ->with( + $this->equalTo( __( 'Note #%1$d deleted from lead #%2$d on "%3$s" form', 'stream' ) ), + $this->equalTo( + array( + 'note_id' => $note_id, + 'lead_id' => $entry_id, + 'form_title' => $form['title'], + 'form_id' => $form['id'], + ) + ), + $this->equalTo( $note_id ), + $this->equalTo( 'notes' ), + $this->equalTo( 'deleted' ) + ); + + // Delete note and trigger callback. + \GFFormsModel::delete_note( $note_id ); + + // Check callback test action. + $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_pre_note_deleted' ) ); + } + + public function test_callback_gform_update_status() { + // Create form and entry for later use. + $form_id = $this->create_form(); + $form = \GFAPI::get_form( $form_id ); + $entry_id = \GFAPI::add_entry( + array( + 'id' => '1', + 'form_id' => $form_id, + 'date_created' => '2016-03-22 19 => 13 => 19', + 'is_starred' => 0, + 'is_read' => 0, + 'ip' => '192.168.50.1', + 'source_url' => 'http => \/\/local.wordpress.dev\/?gf_page=preview&id=1', + 'post_id' => null, + 'currency' => 'USD', + 'payment_status' => null, + 'payment_date' => null, + 'transaction_id' => null, + 'payment_amount' => null, + 'payment_method' => null, + 'is_fulfilled' => null, + 'created_by' => '1', + 'transaction_type' => null, + 'user_agent' => 'Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/48.0.2564.116 Safari\/537.36', + 'status' => 'active', + ) + ); + + // Expected log calls. + $this->mock->expects( $this->exactly( 2 ) ) + ->method( 'log' ) + ->withConsecutive( + array( + $this->equalTo( __( 'Lead #%1$d %2$s on "%3$s" form', 'stream' ) ), + $this->equalTo( + array( + 'lead_id' => $entry_id, + 'action' => 'trashed', + 'form_title' => 'Test form', + 'status' => 'trash', + 'prev' => 'active', + ) + ), + $this->equalTo( $entry_id ), + $this->equalTo( 'entries' ), + $this->equalTo( 'trash' ), + ), + array( + $this->equalTo( __( 'Lead #%1$d %2$s on "%3$s" form', 'stream' ) ), + $this->equalTo( + array( + 'lead_id' => $entry_id, + 'action' => 'restored', + 'form_title' => 'Test form', + 'status' => 'restore', + 'prev' => 'trash', + ) + ), + $this->equalTo( $entry_id ), + $this->equalTo( 'entries' ), + $this->equalTo( 'restore' ) + ) + ); + + // Update form status and manually trigger callback. + \gform_update_meta( $entry_id, 'status', 'trash' ); + do_action( 'gform_update_status', $entry_id, 'trash', 'active' ); + \gform_update_meta( $entry_id, 'status', 'active' ); + do_action( 'gform_update_status', $entry_id, 'active', 'trash' ); + + // Check callback test action. + $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_update_status' ) ); + } + + public function test_callback_gform_update_is_read() { + // Create form for later use. + $form_id = $this->create_form(); + $form = \GFAPI::get_form( $form_id ); + $entry_id = \GFAPI::add_entry( + array( + 'id' => '1', + 'form_id' => $form_id, + 'date_created' => '2016-03-22 19 => 13 => 19', + 'is_starred' => 0, + 'is_read' => 0, + 'ip' => '192.168.50.1', + 'source_url' => 'http => \/\/local.wordpress.dev\/?gf_page=preview&id=1', + 'post_id' => null, + 'currency' => 'USD', + 'payment_status' => null, + 'payment_date' => null, + 'transaction_id' => null, + 'payment_amount' => null, + 'payment_method' => null, + 'is_fulfilled' => null, + 'created_by' => '1', + 'transaction_type' => null, + 'user_agent' => 'Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/48.0.2564.116 Safari\/537.36', + 'status' => 'active', + ) + ); + + // Expected log calls. + $this->mock->expects( $this->exactly( 2 ) ) + ->method( 'log' ) + ->withConsecutive( + array( + $this->equalTo( __( 'Entry #%1$d marked as %2$s on form #%3$d ("%4$s")', 'stream' ) ), + $this->equalTo( + array( + 'lead_id' => $entry_id, + 'lead_status' => 'read', + 'form_id' => $form['id'], + 'form_title' => $form['title'], + ) + ), + $this->equalTo( $entry_id ), + $this->equalTo( 'entries' ), + $this->equalTo( 'updated' ) + ), + array( + $this->equalTo( __( 'Entry #%1$d marked as %2$s on form #%3$d ("%4$s")', 'stream' ) ), + $this->equalTo( + array( + 'lead_id' => $entry_id, + 'lead_status' => 'unread', + 'form_id' => $form['id'], + 'form_title' => $form['title'], + ) + ), + $this->equalTo( $entry_id ), + $this->equalTo( 'entries' ), + $this->equalTo( 'updated' ) + ) + ); + + // Update entry "is_read" and trigger callback. + \GFFormsModel::update_entry_property( $entry_id, 'is_read', 1 ); + \GFFormsModel::update_entry_property( $entry_id, 'is_read', 0 ); + + // Check callback test action. + $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_update_is_read' ) ); + } + + public function test_callback_gform_update_is_starred() { + // Create form and entry for later use. + $form_id = $this->create_form(); + $form = \GFAPI::get_form( $form_id ); + $entry_id = \GFAPI::add_entry( + array( + 'id' => '1', + 'form_id' => $form_id, + 'date_created' => '2016-03-22 19 => 13 => 19', + 'is_starred' => 0, + 'is_read' => 0, + 'ip' => '192.168.50.1', + 'source_url' => 'http => \/\/local.wordpress.dev\/?gf_page=preview&id=1', + 'post_id' => null, + 'currency' => 'USD', + 'payment_status' => null, + 'payment_date' => null, + 'transaction_id' => null, + 'payment_amount' => null, + 'payment_method' => null, + 'is_fulfilled' => null, + 'created_by' => '1', + 'transaction_type' => null, + 'user_agent' => 'Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/48.0.2564.116 Safari\/537.36', + 'status' => 'active', + ) + ); + + // Expected log calls. + $this->mock->expects( $this->exactly( 2 ) ) + ->method( 'log' ) + ->withConsecutive( + array( + $this->equalTo( __( 'Entry #%1$d %2$s on form #%3$d ("%4$s")', 'stream' ) ), + $this->equalTo( + array( + 'lead_id' => $entry_id, + 'lead_status' => 'starred', + 'form_id' => $form['id'], + 'form_title' => $form['title'], + ) + ), + $this->equalTo( $entry_id ), + $this->equalTo( 'entries' ), + $this->equalTo( 'starred' ) + ), + array( + $this->equalTo( __( 'Entry #%1$d %2$s on form #%3$d ("%4$s")', 'stream' ) ), + $this->equalTo( + array( + 'lead_id' => $entry_id, + 'lead_status' => 'unstarred', + 'form_id' => $form['id'], + 'form_title' => $form['title'], + ) + ), + $this->equalTo( $entry_id ), + $this->equalTo( 'entries' ), + $this->equalTo( 'unstarred' ) + ) + ); + + // Update entry "is_starred" and trigger callback. + \GFFormsModel::update_entry_property( $entry_id, 'is_starred', 1 ); + \GFFormsModel::update_entry_property( $entry_id, 'is_starred', 0 ); + + // Check callback test action. + $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_update_is_starred' ) ); + } + + public function test_log_form_action() { + // Create form and entry for later use. + $form_id = $this->create_form(); + $form = \GFAPI::get_form( $form_id ); + $entry_id = \GFAPI::add_entry( + array( + 'id' => '1', + 'form_id' => $form_id, + 'date_created' => '2016-03-22 19 => 13 => 19', + 'is_starred' => 0, + 'is_read' => 0, + 'ip' => '192.168.50.1', + 'source_url' => 'http => \/\/local.wordpress.dev\/?gf_page=preview&id=1', + 'post_id' => null, + 'currency' => 'USD', + 'payment_status' => null, + 'payment_date' => null, + 'transaction_id' => null, + 'payment_amount' => null, + 'payment_method' => null, + 'is_fulfilled' => null, + 'created_by' => '1', + 'transaction_type' => null, + 'user_agent' => 'Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/48.0.2564.116 Safari\/537.36', + 'status' => 'active', + ) + ); + + // Expected log calls. + $this->mock->expects( $this->exactly( 10 ) ) + ->method( 'log' ) + ->withConsecutive( + array( + $this->equalTo( __( 'Form #%1$d ("%2$s") %3$s', 'stream' ) ), + $this->equalTo( + array( + 'form_id' => $form_id, + 'form_title' => 'Test form', + 'form_status' => 'deactivated', + ) + ), + $this->equalTo( $form_id ), + $this->equalTo( 'forms' ), + $this->equalTo( 'deactivated' ) + ), + array( + $this->equalTo( __( 'Form #%1$d ("%2$s") %3$s', 'stream' ) ), + $this->equalTo( + array( + 'form_id' => $form_id, + 'form_title' => 'Test form', + 'form_status' => 'activated', + ) + ), + $this->equalTo( $form_id ), + $this->equalTo( 'forms' ), + $this->equalTo( 'activated' ) + ), + array( + $this->equalTo( __( 'Form #%1$d ("%2$s") %3$s', 'stream' ) ), + $this->equalTo( + array( + 'form_id' => $form_id, + 'form_title' => 'Test form', + 'form_status' => 'trashed', + ) + ), + $this->equalTo( $form_id ), + $this->equalTo( 'forms' ), + $this->equalTo( 'trashed' ) + ), + array( + $this->equalTo( __( 'Form #%1$d ("%2$s") %3$s', 'stream' ) ), + $this->equalTo( + array( + 'form_id' => $form_id, + 'form_title' => 'Test form', + 'form_status' => 'restored', + ) + ), + $this->equalTo( $form_id ), + $this->equalTo( 'forms' ), + $this->equalTo( 'untrashed' ) + ), + array( + $this->equalTo( __( 'Form #%1$d ("%2$s") %3$s', 'stream' ) ), + $this->equalTo( + array( + 'form_id' => $form_id + 1, + 'form_title' => 'Test form (1)', + 'form_status' => 'activated', + ) + ), + $this->equalTo( $form_id + 1 ), + $this->equalTo( 'forms' ), + $this->equalTo( 'activated' ) + ), + array( + $this->equalTo( __( 'Form #%1$d ("%2$s") %3$s', 'stream' ) ), + $this->equalTo( + array( + 'form_id' => $form_id, + 'form_title' => 'Test form', + 'form_status' => 'duplicated', + ) + ), + $this->equalTo( $form_id ), + $this->equalTo( 'forms' ), + $this->equalTo( 'duplicated' ) + ), + array( + $this->equalTo( __( 'Form #%1$d ("%2$s") %3$s', 'stream' ) ), + $this->equalTo( + array( + 'form_id' => $form_id, + 'form_title' => 'Test form', + 'form_status' => 'views reset', + ) + ), + $this->equalTo( $form_id ), + $this->equalTo( 'forms' ), + $this->equalTo( 'views_deleted' ) + ), + array( + $this->equalTo( __( 'Form #%1$d ("%2$s") %3$s', 'stream' ) ), + $this->equalTo( + array( + 'form_id' => $form_id, + 'form_title' => 'Test form', + 'form_status' => 'deleted', + ) + ), + $this->equalTo( $form_id ), + $this->equalTo( 'forms' ), + $this->equalTo( 'deleted' ) + ), + array( + $this->equalTo( __( 'Lead #%1$d from "%2$s" deleted', 'stream' ) ), + $this->equalTo( + array( + 'lead_id' => $entry_id, + 'form_title' => 'Test form', + 'form_id' => $form_id, + ) + ), + $this->equalTo( $entry_id ), + $this->equalTo( 'entries' ), + $this->equalTo( 'deleted' ) + ), + array( + $this->equalTo( __( 'Form #%1$d ("%2$s") %3$s', 'stream' ) ), + $this->equalTo( + array( + 'form_id' => $form_id, + 'form_title' => 'Test form', + 'form_status' => 'views reset', + ) + ), + $this->equalTo( $form_id ), + $this->equalTo( 'forms' ), + $this->equalTo( 'views_deleted' ) + ) + ); + + // Update form "status" to trigger callback. + \GFFormsModel::update_form_active( $form_id, 0 ); + \GFFormsModel::update_form_active( $form_id, 1 ); + \RGFormsModel::trash_form( $form_id ); + \RGFormsModel::restore_form( $form_id ); + \RGFormsModel::duplicate_form( $form_id ); + \GFFormsModel::delete_views( $form_id ); + \RGFormsModel::delete_form( $form_id ); + + // Check callback test action. + $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_before_delete_form' ) ); + $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_post_form_trashed' ) ); + $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_post_form_restored' ) ); + $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_post_form_activated' ) ); + $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_post_form_deactivated' ) ); + $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_post_form_duplicated' ) ); + $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_post_form_views_deleted' ) ); + } + + public function test_callback_gform_post_export_entries() { + // Create form for later use. + $form_id = $this->create_form(); + + // Expected log calls. + $this->mock->expects( $this->once() ) + ->method( 'log' ) + ->with( + $this->equalTo( __( '"%s" form entries exported', 'stream' ) ), + $this->equalTo( + array( + 'form_title' => 'Test form', + 'form_id' => $form_id, + 'start_date' => null, + 'end_date' => null, + ) + ), + $this->equalTo( $form_id ), + $this->equalTo( 'export' ), + $this->equalTo( 'exported' ) + ); + + // Execute form export and trigger callback. + $form = \RGFormsModel::get_form_meta( $form_id ); + $export_id = sanitize_key( wp_hash( uniqid( 'export', true ) ) ); + $_POST['export_field'] = array( 'id' ); + \GFExport::start_export( $form, 0, $export_id ); + + // Check callback test action. + $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_post_export_entries' ) ); + } + + public function test_callback_gform_forms_post_import() { + // Create form and export as json string for later use. + $form_id = $this->create_form(); + $forms = \GFFormsModel::get_form_meta_by_id( [ $form_id ] ); + $forms = \GFExport::prepare_forms_for_export( $forms ); + $forms['version'] = \GFForms::$version; + $forms_json = json_encode( $forms ); + + // Expected log calls. + $this->mock->expects( $this->once() ) + ->method( 'log' ) + ->with( + $this->equalTo( '%d form imported' ), + $this->equalTo( + array( + 'count' => 1, + 'ids' => [ $form_id + 1 ], + 'titles' => [ 'Test form(2)' ], + ) + ), + $this->equalTo( null ), + $this->equalTo( 'export' ), + $this->equalTo( 'imported' ) + ); + + // Import form and trigger callback. + \GFExport::import_json( $forms_json ); + + // Check callback test action. + $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_forms_post_import' ) ); + } + + public function test_callback_gform_export_form() { + // Create form for later use. + $form_id = $this->create_form(); + + // Expected log calls. + $this->mock->expects( $this->once() ) + ->method( 'log' ) + ->with( + $this->equalTo( __( '"%s" form exported', 'stream' ) ), + $this->equalTo( + array( + 'form_title' => 'Test form', + 'form_id' => $form_id, + ) + ), + $this->equalTo( $form_id ), + $this->equalTo( 'export' ), + $this->equalTo( 'exported' ) + ); + + // Export forms to trigger callback. + $forms = \GFFormsModel::get_form_meta_by_id( array( $form_id ) ); + \GFExport::prepare_forms_for_export( $forms ); + + // Check callback test action. + $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_export_form' ) ); + } +} From 74148a30ebdcd0b857cffe2e3945ca6c249bedd5 Mon Sep 17 00:00:00 2001 From: Geoff Taylor Date: Wed, 25 Nov 2020 12:23:42 -0500 Subject: [PATCH 2/3] GravityForms dependencies updated. --- .gitignore | 1 + composer.json | 25 +- composer.lock | 1350 ++++++++++++----- .../test-class-connector-gravityforms.php | 51 +- 4 files changed, 1026 insertions(+), 401 deletions(-) diff --git a/.gitignore b/.gitignore index e896aa6a1..4d1d2ccbf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ .env .idea +.env .DS_Store /node_modules/ /vendor/ diff --git a/composer.json b/composer.json index dc6c7dea9..8cd4a9adf 100644 --- a/composer.json +++ b/composer.json @@ -7,7 +7,23 @@ "repositories": [ { "type": "composer", - "url": "https://wpackagist.org" + "url":"https://wpackagist.org" + }, + { + "type": "package", + "package": { + "name": "gravityforms/gravityforms", + "version": "2.4.21.3", + "type": "wordpress-plugin", + "dist": { + "type": "zip", + "url": "https://www.gravityhelp.com/wp-content/plugins/gravitymanager/api.php?op=get_plugin&slug=gravityforms&key={%GRAVITYFORMS_KEY}" + }, + "require": { + "composer/installers": "^1.4", + "gotoandplay/gravityforms-composer-installer": "^2.3" + } + } } ], "require": { @@ -25,15 +41,12 @@ "wpackagist-plugin/advanced-custom-fields": "5.8.12", "wpackagist-plugin/easy-digital-downloads": "^2.9.23", "wpackagist-plugin/user-switching": "^1.5.5", - "wp-premium/gravityforms": "^2.4.17", + "gravityforms/gravityforms": "2.4.21.3", "wpsh/local": "^0.2.3" }, "config": { "process-timeout": 600, - "sort-packages": true, - "platform": { - "php": "5.6.20" - } + "sort-packages": true }, "extra": { "wordpress-install-dir": "local/public", diff --git a/composer.lock b/composer.lock index 36ef3b2ee..13c0c536d 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": "e63176af94fa736801d3e5c6835ebc1a", + "content-hash": "f6757958447b446aa2346fea9edc0d7c", "packages": [ { "name": "composer/installers", @@ -655,34 +655,31 @@ }, { "name": "doctrine/instantiator", - "version": "1.0.5", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", "shasum": "" }, "require": { - "php": ">=5.3,<8.0-DEV" + "php": "^7.1 || ^8.0" }, "require-dev": { - "athletic/athletic": "~0.1.8", + "doctrine/coding-standard": "^8.0", "ext-pdo": "*", "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" + "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" @@ -696,20 +693,101 @@ { "name": "Marco Pivetta", "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" + "homepage": "https://ocramius.github.io/" } ], "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", "keywords": [ "constructor", "instantiate" ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/master" + "source": "https://github.com/doctrine/instantiator/tree/1.4.0" }, - "time": "2015-06-14T21:17:01+00:00" + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2020-11-10T18:47:58+00:00" + }, + { + "name": "ffraenz/private-composer-installer", + "version": "v5.0.1", + "source": { + "type": "git", + "url": "https://github.com/ffraenz/private-composer-installer.git", + "reference": "8655e3da4e8f99203f13ccca33b9ab953ad30a31" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ffraenz/private-composer-installer/zipball/8655e3da4e8f99203f13ccca33b9ab953ad30a31", + "reference": "8655e3da4e8f99203f13ccca33b9ab953ad30a31", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0 || ^2.0", + "php": "^7.1 || ^8.0", + "vlucas/phpdotenv": "^4.1 || ^5.2" + }, + "require-dev": { + "composer/composer": "^1.0 || ^2.0", + "laminas/laminas-coding-standard": "^2.0", + "symfony/phpunit-bridge": "^5.1", + "symfony/process": "^4.4 || ^5.1" + }, + "type": "composer-plugin", + "extra": { + "class": "FFraenz\\PrivateComposerInstaller\\Plugin", + "plugin-modifies-downloads": true + }, + "autoload": { + "psr-4": { + "FFraenz\\PrivateComposerInstaller\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fränz Friederes", + "email": "fraenz@frieder.es", + "homepage": "https://fraenz.frieder.es" + } + ], + "description": "A composer install helper for private packages", + "keywords": [ + "composer", + "env", + "plugin", + "private", + "wordpress", + "wp" + ], + "support": { + "issues": "https://github.com/ffraenz/private-composer-installer/issues", + "source": "https://github.com/ffraenz/private-composer-installer/tree/v5.0.1" + }, + "funding": [ + { + "url": "https://github.com/ffraenz", + "type": "github" + } + ], + "time": "2020-10-30T09:35:33+00:00" }, { "name": "gettext/gettext", @@ -843,39 +921,185 @@ }, "time": "2019-11-13T10:30:21+00:00" }, + { + "name": "gotoandplay/gravityforms-composer-installer", + "version": "v2.3.0", + "source": { + "type": "git", + "url": "https://github.com/gtap-dev/gravityforms-composer-installer.git", + "reference": "00b70f94660f7819aa3746cc7f96f4a85bf1977c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/gtap-dev/gravityforms-composer-installer/zipball/00b70f94660f7819aa3746cc7f96f4a85bf1977c", + "reference": "00b70f94660f7819aa3746cc7f96f4a85bf1977c", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0 || ^2.0", + "ffraenz/private-composer-installer": "^5.0", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "composer/composer": "^1.0 || ^2.0", + "phpunit/phpunit": "^8.0", + "zendframework/zend-coding-standard": "^1.0" + }, + "type": "composer-plugin", + "extra": { + "class": "gotoAndDev\\GravityFormsComposerInstaller\\Plugin", + "plugin-modifies-downloads": true + }, + "autoload": { + "psr-4": { + "gotoAndDev\\GravityFormsComposerInstaller\\": "src/GravityFormsComposerInstaller" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mihkel Eidast", + "email": "mihkel@play.ee", + "homepage": "https://play.ee" + } + ], + "description": "A composer install helper for Gravity Forms", + "keywords": [ + "composer", + "env", + "gravityforms", + "plugin", + "private", + "wordpress", + "wp" + ], + "support": { + "issues": "https://github.com/gtap-dev/gravityforms-composer-installer/issues", + "source": "https://github.com/gtap-dev/gravityforms-composer-installer/tree/v2.3.0" + }, + "time": "2020-11-02T18:05:49+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "7e279d2cd5d7fbb156ce46daada972355cea27bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/7e279d2cd5d7fbb156ce46daada972355cea27bb", + "reference": "7e279d2cd5d7fbb156ce46daada972355cea27bb", + "shasum": "" + }, + "require": { + "php": "^7.0|^8.0", + "phpoption/phpoption": "^1.7.3" + }, + "require-dev": { + "phpunit/phpunit": "^6.5|^7.5|^8.5|^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "graham@alt-three.com" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2020-04-13T13:17:36+00:00" + }, + { + "name": "gravityforms/gravityforms", + "version": "2.4.21.3", + "dist": { + "type": "zip", + "url": "https://www.gravityhelp.com/wp-content/plugins/gravitymanager/api.php?op=get_plugin&slug=gravityforms&key={%GRAVITYFORMS_KEY}" + }, + "require": { + "composer/installers": "^1.4", + "gotoandplay/gravityforms-composer-installer": "^2.3" + }, + "type": "wordpress-plugin" + }, { "name": "guzzlehttp/guzzle", - "version": "6.5.5", + "version": "7.2.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e" + "reference": "0aa74dfb41ae110835923ef10a9d803a22d50e79" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", - "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/0aa74dfb41ae110835923ef10a9d803a22d50e79", + "reference": "0aa74dfb41ae110835923ef10a9d803a22d50e79", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.6.1", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.17.0" + "guzzlehttp/promises": "^1.4", + "guzzlehttp/psr7": "^1.7", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" }, "require-dev": { "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "php-http/client-integration-tests": "^3.0", + "phpunit/phpunit": "^8.5.5 || ^9.3.5", "psr/log": "^1.1" }, "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", "psr/log": "Required for using the Log middleware" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "6.5-dev" + "dev-master": "7.1-dev" } }, "autoload": { @@ -895,6 +1119,11 @@ "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" } ], "description": "Guzzle is a PHP HTTP client library", @@ -905,14 +1134,34 @@ "framework", "http", "http client", + "psr-18", + "psr-7", "rest", "web service" ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/6.5" + "source": "https://github.com/guzzle/guzzle/tree/7.2.0" }, - "time": "2020-06-16T21:01:06+00:00" + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://github.com/alexeyshockov", + "type": "github" + }, + { + "url": "https://github.com/gmponos", + "type": "github" + } + ], + "time": "2020-10-10T11:47:56+00:00" }, { "name": "guzzlehttp/promises", @@ -1403,25 +1652,28 @@ }, { "name": "myclabs/deep-copy", - "version": "1.7.0", + "version": "1.10.2", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", - "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.1 || ^8.0" + }, + "replace": { + "myclabs/deep-copy": "self.version" }, "require-dev": { "doctrine/collections": "^1.0", "doctrine/common": "^2.6", - "phpunit/phpunit": "^4.1" + "phpunit/phpunit": "^7.1" }, "type": "library", "autoload": { @@ -1446,9 +1698,15 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.x" + "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" }, - "time": "2017-10-19T19:58:43+00:00" + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2020-11-13T09:40:50+00:00" }, { "name": "nb/oxymel", @@ -1495,60 +1753,6 @@ }, "time": "2013-02-24T15:01:54+00:00" }, - { - "name": "paragonie/random_compat", - "version": "v2.0.19", - "source": { - "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "446fc9faa5c2a9ddf65eb7121c0af7e857295241" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/446fc9faa5c2a9ddf65eb7121c0af7e857295241", - "reference": "446fc9faa5c2a9ddf65eb7121c0af7e857295241", - "shasum": "" - }, - "require": { - "php": ">=5.2.0" - }, - "require-dev": { - "phpunit/phpunit": "4.*|5.*" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." - }, - "type": "library", - "autoload": { - "files": [ - "lib/random.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" - ], - "support": { - "email": "info@paragonie.com", - "issues": "https://github.com/paragonie/random_compat/issues", - "source": "https://github.com/paragonie/random_compat" - }, - "time": "2020-10-15T10:06:57+00:00" - }, { "name": "php-coveralls/php-coveralls", "version": "v2.4.3", @@ -1634,35 +1838,30 @@ }, { "name": "phpdocumentor/reflection-common", - "version": "1.0.1", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", "shasum": "" }, "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.6" + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-2.x": "2.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src" - ] + "phpDocumentor\\Reflection\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1686,40 +1885,43 @@ ], "support": { "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/master" + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" }, - "time": "2017-09-11T18:02:19+00:00" + "time": "2020-06-27T09:03:43+00:00" }, { "name": "phpdocumentor/reflection-docblock", - "version": "3.3.2", + "version": "5.2.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2" + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bf329f6c1aadea3299f08ee804682b7c45b326a2", - "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0", - "phpdocumentor/reflection-common": "^1.0.0", - "phpdocumentor/type-resolver": "^0.4.0", - "webmozart/assert": "^1.0" + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.4" + "mockery/mockery": "~1.3.2" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] + "phpDocumentor\\Reflection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1730,48 +1932,49 @@ { "name": "Mike van Riel", "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/release/3.x" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" }, - "time": "2017-11-10T14:09:06+00:00" + "time": "2020-09-03T19:13:55+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "0.4.0", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", "shasum": "" }, "require": { - "php": "^5.5 || ^7.0", - "phpdocumentor/reflection-common": "^1.0" + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.2||^4.8.24" + "ext-tokenizer": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-1.x": "1.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] + "phpDocumentor\\Reflection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1784,11 +1987,81 @@ "email": "me@mikevanriel.com" } ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/master" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" }, - "time": "2017-07-14T14:27:02+00:00" + "time": "2020-09-17T18:55:26+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.7.5", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/994ecccd8f3283ecf5ac33254543eb0ac946d525", + "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "phpunit/phpunit": "^4.8.35 || ^5.7.27 || ^6.5.6 || ^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.7.5" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2020-07-20T17:29:33+00:00" }, { "name": "phpspec/prophecy", @@ -2077,29 +2350,29 @@ }, { "name": "phpunit/php-token-stream", - "version": "1.4.12", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16" + "reference": "791198a2c6254db10131eecfe8c06670700904db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16", - "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", + "reference": "791198a2c6254db10131eecfe8c06670700904db", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": ">=5.3.3" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.2" + "phpunit/phpunit": "^6.2.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -2124,10 +2397,10 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-token-stream/issues", - "source": "https://github.com/sebastianbergmann/php-token-stream/tree/1.4" + "source": "https://github.com/sebastianbergmann/php-token-stream/tree/master" }, "abandoned": true, - "time": "2017-12-04T08:55:13+00:00" + "time": "2017-11-27T05:48:46+00:00" }, { "name": "phpunit/phpunit", @@ -2230,55 +2503,160 @@ "shasum": "" }, "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.6 || ^7.0", - "phpunit/php-text-template": "^1.2", - "sebastian/exporter": "^1.2 || ^2.0" - }, - "conflict": { - "phpunit/phpunit": "<5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.4" - }, - "suggest": { - "ext-soap": "*" + "doctrine/instantiator": "^1.0.2", + "php": "^5.6 || ^7.0", + "phpunit/php-text-template": "^1.2", + "sebastian/exporter": "^1.2 || ^2.0" + }, + "conflict": { + "phpunit/phpunit": "<5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "support": { + "irc": "irc://irc.freenode.net/phpunit", + "issues": "https://github.com/sebastianbergmann/phpunit-mock-objects/issues", + "source": "https://github.com/sebastianbergmann/phpunit-mock-objects/tree/3.4" + }, + "abandoned": true, + "time": "2017-06-30T09:13:00+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" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/master" + }, + "time": "2017-02-14T16:28:37+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", "keywords": [ - "mock", - "xunit" + "http", + "http-client", + "psr", + "psr-18" ], "support": { - "irc": "irc://irc.freenode.net/phpunit", - "issues": "https://github.com/sebastianbergmann/phpunit-mock-objects/issues", - "source": "https://github.com/sebastianbergmann/phpunit-mock-objects/tree/3.4" + "source": "https://github.com/php-fig/http-client/tree/master" }, - "abandoned": true, - "time": "2017-06-30T09:13:00+00:00" + "time": "2020-06-29T06:28:15+00:00" }, { "name": "psr/http-message", @@ -3261,32 +3639,34 @@ }, { "name": "symfony/config", - "version": "v3.4.47", + "version": "v5.2.3", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f" + "reference": "50e0e1314a3b2609d32b6a5a0d0fb5342494c4ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f", - "reference": "bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f", + "url": "https://api.github.com/repos/symfony/config/zipball/50e0e1314a3b2609d32b6a5a0d0fb5342494c4ab", + "reference": "50e0e1314a3b2609d32b6a5a0d0fb5342494c4ab", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/filesystem": "~2.8|~3.0|~4.0", - "symfony/polyfill-ctype": "~1.8" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/filesystem": "^4.4|^5.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.15" }, "conflict": { - "symfony/dependency-injection": "<3.3", - "symfony/finder": "<3.3" + "symfony/finder": "<4.4" }, "require-dev": { - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/event-dispatcher": "~3.3|~4.0", - "symfony/finder": "~3.3|~4.0", - "symfony/yaml": "~3.0|~4.0" + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/messenger": "^4.4|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/yaml": "^4.4|^5.0" }, "suggest": { "symfony/yaml": "To use the yaml reference dumper" @@ -3314,10 +3694,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Config Component", + "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v3.4.47" + "source": "https://github.com/symfony/config/tree/v5.2.3" }, "funding": [ { @@ -3333,41 +3713,48 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2021-01-27T10:15:41+00:00" }, { "name": "symfony/console", - "version": "v3.4.47", + "version": "v5.2.3", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "a10b1da6fc93080c180bba7219b5ff5b7518fe81" + "reference": "89d4b176d12a2946a1ae4e34906a025b7b6b135a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/a10b1da6fc93080c180bba7219b5ff5b7518fe81", - "reference": "a10b1da6fc93080c180bba7219b5ff5b7518fe81", + "url": "https://api.github.com/repos/symfony/console/zipball/89d4b176d12a2946a1ae4e34906a025b7b6b135a", + "reference": "89d4b176d12a2946a1ae4e34906a025b7b6b135a", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/debug": "~2.8|~3.0|~4.0", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1|^2", + "symfony/string": "^5.1" }, "conflict": { - "symfony/dependency-injection": "<3.4", - "symfony/process": "<3.3" + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" }, "provide": { "psr/log-implementation": "1.0" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~3.3|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", - "symfony/lock": "~3.4|~4.0", - "symfony/process": "~3.3|~4.0" + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/lock": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.0" }, "suggest": { "psr/log": "For using the console logger", @@ -3398,10 +3785,16 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Console Component", + "description": "Eases the creation of beautiful and testable command line interfaces", "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], "support": { - "source": "https://github.com/symfony/console/tree/v3.4.47" + "source": "https://github.com/symfony/console/tree/v5.2.3" }, "funding": [ { @@ -3417,39 +3810,38 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2021-01-28T22:06:19+00:00" }, { - "name": "symfony/debug", - "version": "v3.4.47", + "name": "symfony/deprecation-contracts", + "version": "v2.2.0", "source": { "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "ab42889de57fdfcfcc0759ab102e2fd4ea72dcae" + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/ab42889de57fdfcfcc0759ab102e2fd4ea72dcae", - "reference": "ab42889de57fdfcfcc0759ab102e2fd4ea72dcae", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665", + "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "psr/log": "~1.0" - }, - "conflict": { - "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" - }, - "require-dev": { - "symfony/http-kernel": "~2.8|~3.0|~4.0" + "php": ">=7.1" }, "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Debug\\": "" + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" }, - "exclude-from-classmap": [ - "/Tests/" + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3458,18 +3850,18 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Debug Component", + "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/debug/tree/v3.4.47" + "source": "https://github.com/symfony/deprecation-contracts/tree/master" }, "funding": [ { @@ -3485,24 +3877,24 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2020-09-07T11:33:47+00:00" }, { "name": "symfony/filesystem", - "version": "v3.4.47", + "version": "v5.2.3", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "e58d7841cddfed6e846829040dca2cca0ebbbbb3" + "reference": "262d033b57c73e8b59cd6e68a45c528318b15038" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/e58d7841cddfed6e846829040dca2cca0ebbbbb3", - "reference": "e58d7841cddfed6e846829040dca2cca0ebbbbb3", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/262d033b57c73e8b59cd6e68a45c528318b15038", + "reference": "262d033b57c73e8b59cd6e68a45c528318b15038", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": ">=7.2.5", "symfony/polyfill-ctype": "~1.8" }, "type": "library", @@ -3528,10 +3920,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Filesystem Component", + "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v3.4.47" + "source": "https://github.com/symfony/filesystem/tree/v5.2.3" }, "funding": [ { @@ -3547,24 +3939,24 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2021-01-27T10:01:46+00:00" }, { "name": "symfony/finder", - "version": "v3.4.47", + "version": "v5.2.3", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "b6b6ad3db3edb1b4b1c1896b1975fb684994de6e" + "reference": "4adc8d172d602008c204c2e16956f99257248e03" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/b6b6ad3db3edb1b4b1c1896b1975fb684994de6e", - "reference": "b6b6ad3db3edb1b4b1c1896b1975fb684994de6e", + "url": "https://api.github.com/repos/symfony/finder/zipball/4adc8d172d602008c204c2e16956f99257248e03", + "reference": "4adc8d172d602008c204c2e16956f99257248e03", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.2.5" }, "type": "library", "autoload": { @@ -3589,10 +3981,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Finder Component", + "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v3.4.47" + "source": "https://github.com/symfony/finder/tree/v5.2.3" }, "funding": [ { @@ -3608,24 +4000,24 @@ "type": "tidelift" } ], - "time": "2020-11-16T17:02:08+00:00" + "time": "2021-01-28T22:06:19+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.19.0", + "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "aed596913b70fae57be53d86faa2e9ef85a2297b" + "reference": "c6c942b1ac76c82448322025e084cadc56048b4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/aed596913b70fae57be53d86faa2e9ef85a2297b", - "reference": "aed596913b70fae57be53d86faa2e9ef85a2297b", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e", + "reference": "c6c942b1ac76c82448322025e084cadc56048b4e", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "suggest": { "ext-ctype": "For best performance" @@ -3633,7 +4025,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.19-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3671,7 +4063,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.19.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.1" }, "funding": [ { @@ -3687,27 +4079,24 @@ "type": "tidelift" } ], - "time": "2020-10-23T09:01:57+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { - "name": "symfony/polyfill-intl-idn", - "version": "v1.19.0", + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.22.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "4ad5115c0f5d5172a9fe8147675ec6de266d8826" + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/4ad5115c0f5d5172a9fe8147675ec6de266d8826", - "reference": "4ad5115c0f5d5172a9fe8147675ec6de266d8826", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5601e09b69f26c1828b13b6bb87cb07cddba3170", + "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170", "shasum": "" }, "require": { - "php": ">=5.3.3", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php70": "^1.10", - "symfony/polyfill-php72": "^1.10" + "php": ">=7.1" }, "suggest": { "ext-intl": "For best performance" @@ -3715,7 +4104,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.19-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3724,7 +4113,7 @@ }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" }, "files": [ "bootstrap.php" @@ -3736,30 +4125,26 @@ ], "authors": [ { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Trevor Rowbotham", - "email": "trevor.rowbotham@pm.me" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "description": "Symfony polyfill for intl's grapheme_* functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "idn", + "grapheme", "intl", "polyfill", "portable", "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.19.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.22.1" }, "funding": [ { @@ -3775,24 +4160,24 @@ "type": "tidelift" } ], - "time": "2020-10-21T09:57:48+00:00" + "time": "2021-01-22T09:19:47+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.19.0", + "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8db0ae7936b42feb370840cf24de1a144fb0ef27" + "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8db0ae7936b42feb370840cf24de1a144fb0ef27", - "reference": "8db0ae7936b42feb370840cf24de1a144fb0ef27", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/43a0283138253ed1d48d352ab6d0bdb3f809f248", + "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "suggest": { "ext-intl": "For best performance" @@ -3800,7 +4185,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.19-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3843,7 +4228,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.19.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.22.1" }, "funding": [ { @@ -3859,24 +4244,24 @@ "type": "tidelift" } ], - "time": "2020-10-23T09:01:57+00:00" + "time": "2021-01-22T09:19:47+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.19.0", + "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "b5f7b932ee6fa802fc792eabd77c4c88084517ce" + "reference": "5232de97ee3b75b0360528dae24e73db49566ab1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/b5f7b932ee6fa802fc792eabd77c4c88084517ce", - "reference": "b5f7b932ee6fa802fc792eabd77c4c88084517ce", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1", + "reference": "5232de97ee3b75b0360528dae24e73db49566ab1", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "suggest": { "ext-mbstring": "For best performance" @@ -3884,7 +4269,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.19-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3923,7 +4308,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.19.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.1" }, "funding": [ { @@ -3939,30 +4324,29 @@ "type": "tidelift" } ], - "time": "2020-10-23T09:01:57+00:00" + "time": "2021-01-22T09:19:47+00:00" }, { - "name": "symfony/polyfill-php70", - "version": "v1.19.0", + "name": "symfony/polyfill-php73", + "version": "v1.22.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "3fe414077251a81a1b15b1c709faf5c2fbae3d4e" + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/3fe414077251a81a1b15b1c709faf5c2fbae3d4e", - "reference": "3fe414077251a81a1b15b1c709faf5c2fbae3d4e", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a678b42e92f86eca04b7fa4c0f6f19d097fb69e2", + "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2", "shasum": "" }, "require": { - "paragonie/random_compat": "~1.0|~2.0|~9.99", - "php": ">=5.3.3" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.19-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3971,7 +4355,7 @@ }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Php70\\": "" + "Symfony\\Polyfill\\Php73\\": "" }, "files": [ "bootstrap.php" @@ -3994,7 +4378,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -4003,7 +4387,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php70/tree/v1.19.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.22.1" }, "funding": [ { @@ -4019,29 +4403,29 @@ "type": "tidelift" } ], - "time": "2020-10-23T09:01:57+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { - "name": "symfony/polyfill-php72", - "version": "v1.19.0", + "name": "symfony/polyfill-php80", + "version": "v1.22.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "beecef6b463b06954638f02378f52496cb84bacc" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/beecef6b463b06954638f02378f52496cb84bacc", - "reference": "beecef6b463b06954638f02378f52496cb84bacc", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91", + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.19-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4050,10 +4434,13 @@ }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" + "Symfony\\Polyfill\\Php80\\": "" }, "files": [ "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -4061,6 +4448,10 @@ "MIT" ], "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -4070,7 +4461,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -4079,7 +4470,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.19.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.1" }, "funding": [ { @@ -4095,24 +4486,25 @@ "type": "tidelift" } ], - "time": "2020-10-23T09:01:57+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { "name": "symfony/process", - "version": "v3.4.47", + "version": "v5.2.3", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "b8648cf1d5af12a44a51d07ef9bf980921f15fca" + "reference": "313a38f09c77fbcdc1d223e57d368cea76a2fd2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/b8648cf1d5af12a44a51d07ef9bf980921f15fca", - "reference": "b8648cf1d5af12a44a51d07ef9bf980921f15fca", + "url": "https://api.github.com/repos/symfony/process/zipball/313a38f09c77fbcdc1d223e57d368cea76a2fd2f", + "reference": "313a38f09c77fbcdc1d223e57d368cea76a2fd2f", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.15" }, "type": "library", "autoload": { @@ -4137,10 +4529,89 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Process Component", + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v5.2.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-01-27T10:15:41+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v2.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1", + "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.0" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], "support": { - "source": "https://github.com/symfony/process/tree/v3.4.47" + "source": "https://github.com/symfony/service-contracts/tree/master" }, "funding": [ { @@ -4156,24 +4627,25 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2020-09-07T11:33:47+00:00" }, { "name": "symfony/stopwatch", - "version": "v3.4.47", + "version": "v5.2.3", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "298b81faad4ce60e94466226b2abbb8c9bca7462" + "reference": "b12274acfab9d9850c52583d136a24398cdf1a0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/298b81faad4ce60e94466226b2abbb8c9bca7462", - "reference": "298b81faad4ce60e94466226b2abbb8c9bca7462", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/b12274acfab9d9850c52583d136a24398cdf1a0c", + "reference": "b12274acfab9d9850c52583d136a24398cdf1a0c", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.2.5", + "symfony/service-contracts": "^1.0|^2" }, "type": "library", "autoload": { @@ -4198,10 +4670,93 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Stopwatch Component", + "description": "Provides a way to profile code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/stopwatch/tree/v5.2.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-01-27T10:15:41+00:00" + }, + { + "name": "symfony/string", + "version": "v5.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "c95468897f408dd0aca2ff582074423dd0455122" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/c95468897f408dd0aca2ff582074423dd0455122", + "reference": "c95468897f408dd0aca2ff582074423dd0455122", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" + }, + "require-dev": { + "symfony/error-handler": "^4.4|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "files": [ + "Resources/functions.php" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], "support": { - "source": "https://github.com/symfony/stopwatch/tree/v3.4.47" + "source": "https://github.com/symfony/string/tree/v5.2.3" }, "funding": [ { @@ -4217,31 +4772,31 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2021-01-25T15:14:59+00:00" }, { "name": "symfony/yaml", - "version": "v3.4.47", + "version": "v4.4.19", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "88289caa3c166321883f67fe5130188ebbb47094" + "reference": "17ed9f14c1aa05b1a5cf2e2c5ef2d0be28058ef9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/88289caa3c166321883f67fe5130188ebbb47094", - "reference": "88289caa3c166321883f67fe5130188ebbb47094", + "url": "https://api.github.com/repos/symfony/yaml/zipball/17ed9f14c1aa05b1a5cf2e2c5ef2d0be28058ef9", + "reference": "17ed9f14c1aa05b1a5cf2e2c5ef2d0be28058ef9", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": ">=7.1.3", "symfony/polyfill-ctype": "~1.8" }, "conflict": { "symfony/console": "<3.4" }, "require-dev": { - "symfony/console": "~3.4|~4.0" + "symfony/console": "^3.4|^4.0|^5.0" }, "suggest": { "symfony/console": "For validating YAML files using the lint command" @@ -4269,10 +4824,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Yaml Component", + "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v3.4.47" + "source": "https://github.com/symfony/yaml/tree/v4.4.19" }, "funding": [ { @@ -4288,7 +4843,87 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2021-01-27T09:09:26+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.3.0", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "b3eac5c7ac896e52deab4a99068e3f4ab12d9e56" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/b3eac5c7ac896e52deab4a99068e3f4ab12d9e56", + "reference": "b3eac5c7ac896e52deab4a99068e3f4ab12d9e56", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.0.1", + "php": "^7.1.3 || ^8.0", + "phpoption/phpoption": "^1.7.4", + "symfony/polyfill-ctype": "^1.17", + "symfony/polyfill-mbstring": "^1.17", + "symfony/polyfill-php80": "^1.17" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-filter": "*", + "phpunit/phpunit": "^7.5.20 || ^8.5.14 || ^9.5.1" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.3-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "homepage": "https://gjcampbell.co.uk/" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://vancelucas.com/" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.3.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2021-01-20T15:23:13+00:00" }, { "name": "webmozart/assert", @@ -6529,32 +7164,6 @@ }, "time": "2021-02-04T18:24:14+00:00" }, - { - "name": "wp-premium/gravityforms", - "version": "2.4.20", - "source": { - "type": "git", - "url": "https://github.com/wp-premium/gravityforms.git", - "reference": "a9c8f2de051e016e096069210ecd5fb8f5a19801" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-premium/gravityforms/zipball/a9c8f2de051e016e096069210ecd5fb8f5a19801", - "reference": "a9c8f2de051e016e096069210ecd5fb8f5a19801", - "shasum": "" - }, - "type": "wordpress-plugin", - "autoload": { - "classmap": [ - "." - ] - }, - "notification-url": "https://packagist.org/downloads/", - "support": { - "source": "https://github.com/wp-premium/gravityforms/tree/2.4.20" - }, - "time": "2020-10-01T12:09:03+00:00" - }, { "name": "wpackagist-plugin/advanced-custom-fields", "version": "5.8.12", @@ -6643,8 +7252,5 @@ "prefer-lowest": false, "platform": [], "platform-dev": [], - "platform-overrides": { - "php": "5.6.20" - }, "plugin-api-version": "2.0.0" } diff --git a/tests/tests/connectors/test-class-connector-gravityforms.php b/tests/tests/connectors/test-class-connector-gravityforms.php index 5ab9785bf..63a0da8d0 100644 --- a/tests/tests/connectors/test-class-connector-gravityforms.php +++ b/tests/tests/connectors/test-class-connector-gravityforms.php @@ -25,6 +25,11 @@ public function setUp() { ->getMock(); $this->mock->register(); + + // Load needed Gravity Forms files. + require_once( \GFCommon::get_base_path() . '/form_settings.php' ); + require_once( \GFCommon::get_base_path() . '/notification.php' ); + require_once( \GFCommon::get_base_path() . '/export.php' ); } /** @@ -140,7 +145,7 @@ public function test_callback_gform_after_save_form() { do_action( 'gform_after_save_form', $form_meta, true, array() ); // Check callback test action. - $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_after_save_form' ) ); + $this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_gform_after_save_form' ) ); } public function test_callback_gform_pre_confirmation_save() { @@ -181,7 +186,7 @@ public function test_callback_gform_pre_confirmation_save() { \gf_apply_filters( array( 'gform_pre_confirmation_save', $form_id ), $confirmation, $form, true ); // Check callback test action. - $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_pre_confirmation_save' ) ); + $this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_gform_pre_confirmation_save' ) ); } public function test_callback_gform_pre_notification_save() { @@ -221,7 +226,7 @@ public function test_callback_gform_pre_notification_save() { \gf_apply_filters( array( 'gform_pre_notification_save', $form_id ), $notification, $form, true ); // Check callback test action. - $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_pre_notification_save' ) ); + $this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_gform_pre_notification_save' ) ); } public function test_callback_gform_pre_notification_deleted() { @@ -261,7 +266,7 @@ public function test_callback_gform_pre_notification_deleted() { \GFNotification::delete_notification( $notification['id'], $form_id ); // Check callback test action.. - $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_pre_notification_deleted' ) ); + $this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_gform_pre_notification_deleted' ) ); } public function test_callback_gform_pre_confirmation_deleted() { @@ -302,7 +307,7 @@ public function test_callback_gform_pre_confirmation_deleted() { \GFFormSettings::delete_confirmation( $confirmation['id'], $form_id ); // Check callback test action. - $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_pre_confirmation_deleted' ) ); + $this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_gform_pre_confirmation_deleted' ) ); } public function test_check() { @@ -373,8 +378,8 @@ public function test_check() { update_option( 'rg_gforms_key', '' ); // Check callback test action. - $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_add_option' ) ); - $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_update_option' ) ); + $this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_add_option' ) ); + $this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_update_option' ) ); } public function test_callback_gform_delete_lead() { @@ -426,7 +431,7 @@ public function test_callback_gform_delete_lead() { \GFFormsModel::delete_entry( $entry_id ); // Check callback test action. - $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_delete_lead' ) ); + $this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_gform_delete_lead' ) ); } public function test_callback_gform_post_note_added() { @@ -486,7 +491,7 @@ function( $args ) { \GFFormsModel::add_note( $entry_id, $user_id, 'johndoe', $note, 'user' ); // Check callback test action. - $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_post_note_added' ) ); + $this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_gform_post_note_added' ) ); } public function test_callback_gform_pre_note_deleted() { @@ -560,7 +565,7 @@ function( $id ) use ( &$note_id ) { \GFFormsModel::delete_note( $note_id ); // Check callback test action. - $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_pre_note_deleted' ) ); + $this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_gform_pre_note_deleted' ) ); } public function test_callback_gform_update_status() { @@ -634,7 +639,7 @@ public function test_callback_gform_update_status() { do_action( 'gform_update_status', $entry_id, 'active', 'trash' ); // Check callback test action. - $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_update_status' ) ); + $this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_gform_update_status' ) ); } public function test_callback_gform_update_is_read() { @@ -704,7 +709,7 @@ public function test_callback_gform_update_is_read() { \GFFormsModel::update_entry_property( $entry_id, 'is_read', 0 ); // Check callback test action. - $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_update_is_read' ) ); + $this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_gform_update_is_read' ) ); } public function test_callback_gform_update_is_starred() { @@ -774,7 +779,7 @@ public function test_callback_gform_update_is_starred() { \GFFormsModel::update_entry_property( $entry_id, 'is_starred', 0 ); // Check callback test action. - $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_update_is_starred' ) ); + $this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_gform_update_is_starred' ) ); } public function test_log_form_action() { @@ -951,13 +956,13 @@ public function test_log_form_action() { \RGFormsModel::delete_form( $form_id ); // Check callback test action. - $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_before_delete_form' ) ); - $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_post_form_trashed' ) ); - $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_post_form_restored' ) ); - $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_post_form_activated' ) ); - $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_post_form_deactivated' ) ); - $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_post_form_duplicated' ) ); - $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_post_form_views_deleted' ) ); + $this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_gform_before_delete_form' ) ); + $this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_gform_post_form_trashed' ) ); + $this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_gform_post_form_restored' ) ); + $this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_gform_post_form_activated' ) ); + $this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_gform_post_form_deactivated' ) ); + $this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_gform_post_form_duplicated' ) ); + $this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_gform_post_form_views_deleted' ) ); } public function test_callback_gform_post_export_entries() { @@ -989,7 +994,7 @@ public function test_callback_gform_post_export_entries() { \GFExport::start_export( $form, 0, $export_id ); // Check callback test action. - $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_post_export_entries' ) ); + $this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_gform_post_export_entries' ) ); } public function test_callback_gform_forms_post_import() { @@ -1021,7 +1026,7 @@ public function test_callback_gform_forms_post_import() { \GFExport::import_json( $forms_json ); // Check callback test action. - $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_forms_post_import' ) ); + $this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_gform_forms_post_import' ) ); } public function test_callback_gform_export_form() { @@ -1049,6 +1054,6 @@ public function test_callback_gform_export_form() { \GFExport::prepare_forms_for_export( $forms ); // Check callback test action. - $this->assertFalse( 0 === did_action( 'wp_stream_test_callback_gform_export_form' ) ); + $this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_gform_export_form' ) ); } } From 595d5ae20d7e8ddca4c6be3f958fca89644934cb Mon Sep 17 00:00:00 2001 From: Geoff Taylor Date: Mon, 1 Mar 2021 20:13:02 -0500 Subject: [PATCH 3/3] "GravityForms" installation added to .travis.yml --- .travis.yml | 19 ++++++++++++ composer.json | 17 ----------- composer.lock | 30 +++++++++---------- .../test-class-connector-gravityforms.php | 4 +++ 4 files changed, 38 insertions(+), 32 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1e235e49f..d0a000236 100644 --- a/.travis.yml +++ b/.travis.yml @@ -50,6 +50,7 @@ jobs: if: branch IS present AND type = push script: npm run release before_deploy: + - git restore composer.json - openssl aes-256-cbc -K $encrypted_49634e5b1863_key -iv $encrypted_49634e5b1863_iv -in ./local/travis/travis_deploy_key.enc -out ~/.ssh/id_rsa -d - chmod 600 ~/.ssh/id_rsa deploy: @@ -71,7 +72,25 @@ before_install: - composer self-update --1 install: + - | + composer config repositories."1" "{ + \"type\": \"package\", + \"package\": { + \"name\": \"gravityforms/gravityforms\", + \"version\": \"2.4.21.3\", + \"type\": \"wordpress-plugin\", + \"dist\": { + \"type\": \"zip\", + \"url\": \"https://www.gravityhelp.com/wp-content/plugins/gravitymanager/api.php?op=get_plugin&slug=gravityforms&key=$GRAVITYFORMS_KEY\" + }, + \"require\": { + \"composer/installers\": \"^1.4\", + \"gotoandplay/gravityforms-composer-installer\": \"^2.3\" + } + } + }" - npm install + - composer require --dev gravityforms/gravityforms:2.4.21.3 script: - npm run lint diff --git a/composer.json b/composer.json index 8cd4a9adf..86c7261f6 100644 --- a/composer.json +++ b/composer.json @@ -8,22 +8,6 @@ { "type": "composer", "url":"https://wpackagist.org" - }, - { - "type": "package", - "package": { - "name": "gravityforms/gravityforms", - "version": "2.4.21.3", - "type": "wordpress-plugin", - "dist": { - "type": "zip", - "url": "https://www.gravityhelp.com/wp-content/plugins/gravitymanager/api.php?op=get_plugin&slug=gravityforms&key={%GRAVITYFORMS_KEY}" - }, - "require": { - "composer/installers": "^1.4", - "gotoandplay/gravityforms-composer-installer": "^2.3" - } - } } ], "require": { @@ -41,7 +25,6 @@ "wpackagist-plugin/advanced-custom-fields": "5.8.12", "wpackagist-plugin/easy-digital-downloads": "^2.9.23", "wpackagist-plugin/user-switching": "^1.5.5", - "gravityforms/gravityforms": "2.4.21.3", "wpsh/local": "^0.2.3" }, "config": { diff --git a/composer.lock b/composer.lock index 13c0c536d..683c0ba61 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": "f6757958447b446aa2346fea9edc0d7c", + "content-hash": "f99215c75138a90c45a7b929cf25d346", "packages": [ { "name": "composer/installers", @@ -1053,7 +1053,7 @@ "version": "2.4.21.3", "dist": { "type": "zip", - "url": "https://www.gravityhelp.com/wp-content/plugins/gravitymanager/api.php?op=get_plugin&slug=gravityforms&key={%GRAVITYFORMS_KEY}" + "url": "https://www.gravityhelp.com/wp-content/plugins/gravitymanager/api.php?op=get_plugin&slug=gravityforms&key=77b1a7aadef0a06dac8c535d992a4e97" }, "require": { "composer/installers": "^1.4", @@ -1335,20 +1335,20 @@ }, { "name": "johnpbloch/wordpress", - "version": "5.6.1", + "version": "5.6.2", "source": { "type": "git", "url": "https://github.com/johnpbloch/wordpress.git", - "reference": "d7a597988102967cdfc28851b6b897d018613823" + "reference": "784b3440c9a11c3b65b988cc441db332ab0e6c49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/johnpbloch/wordpress/zipball/d7a597988102967cdfc28851b6b897d018613823", - "reference": "d7a597988102967cdfc28851b6b897d018613823", + "url": "https://api.github.com/repos/johnpbloch/wordpress/zipball/784b3440c9a11c3b65b988cc441db332ab0e6c49", + "reference": "784b3440c9a11c3b65b988cc441db332ab0e6c49", "shasum": "" }, "require": { - "johnpbloch/wordpress-core": "5.6.1", + "johnpbloch/wordpress-core": "5.6.2", "johnpbloch/wordpress-core-installer": "^1.0 || ^2.0", "php": ">=5.6.20" }, @@ -1377,20 +1377,20 @@ "source": "http://core.trac.wordpress.org/browser", "wiki": "http://codex.wordpress.org/" }, - "time": "2021-02-03T21:27:41+00:00" + "time": "2021-02-22T15:30:37+00:00" }, { "name": "johnpbloch/wordpress-core", - "version": "5.6.1", + "version": "5.6.2", "source": { "type": "git", "url": "https://github.com/johnpbloch/wordpress-core.git", - "reference": "82592ec73d42cf784da38adb0028a24dbacab1b4" + "reference": "e48e723c0d7e38c5580631e6ffea29a4388c5dd0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/johnpbloch/wordpress-core/zipball/82592ec73d42cf784da38adb0028a24dbacab1b4", - "reference": "82592ec73d42cf784da38adb0028a24dbacab1b4", + "url": "https://api.github.com/repos/johnpbloch/wordpress-core/zipball/e48e723c0d7e38c5580631e6ffea29a4388c5dd0", + "reference": "e48e723c0d7e38c5580631e6ffea29a4388c5dd0", "shasum": "" }, "require": { @@ -1398,7 +1398,7 @@ "php": ">=5.6.20" }, "provide": { - "wordpress/core-implementation": "5.6.1" + "wordpress/core-implementation": "5.6.2" }, "type": "wordpress-core", "notification-url": "https://packagist.org/downloads/", @@ -1425,7 +1425,7 @@ "source": "https://core.trac.wordpress.org/browser", "wiki": "https://codex.wordpress.org/" }, - "time": "2021-02-03T21:27:35+00:00" + "time": "2021-02-22T15:30:31+00:00" }, { "name": "johnpbloch/wordpress-core-installer", @@ -7118,7 +7118,7 @@ }, { "name": "wp-phpunit/wp-phpunit", - "version": "5.6.1", + "version": "5.6.2", "source": { "type": "git", "url": "https://github.com/wp-phpunit/wp-phpunit.git", diff --git a/tests/tests/connectors/test-class-connector-gravityforms.php b/tests/tests/connectors/test-class-connector-gravityforms.php index 63a0da8d0..52dc1f837 100644 --- a/tests/tests/connectors/test-class-connector-gravityforms.php +++ b/tests/tests/connectors/test-class-connector-gravityforms.php @@ -26,6 +26,10 @@ public function setUp() { $this->mock->register(); + if ( ! $this->mock->is_dependency_satisfied() ) { + $this->markTestSkipped( 'A GravityForms is needed to run this test.' ); + } + // Load needed Gravity Forms files. require_once( \GFCommon::get_base_path() . '/form_settings.php' ); require_once( \GFCommon::get_base_path() . '/notification.php' );