From bb7ecdf68733b52b9a22b47bea6c6bd4b149e466 Mon Sep 17 00:00:00 2001 From: Anderson Grudtner Martins Date: Mon, 13 Apr 2020 17:32:05 -0300 Subject: [PATCH 01/66] Fix typo in the maintenance tasks --- modules/byline-migration/byline-migration.php | 2 +- modules/bylines-migration/bylines-migration.php | 2 +- modules/multiple-authors/multiple-authors.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/byline-migration/byline-migration.php b/modules/byline-migration/byline-migration.php index c3f6a930..a83e59ff 100644 --- a/modules/byline-migration/byline-migration.php +++ b/modules/byline-migration/byline-migration.php @@ -165,7 +165,7 @@ public function registerMaintenanceAction($actions) { $actions['copy_byline_data'] = [ 'title' => __('Copy Byline Data', 'publishpress-authors'), - 'description' => 'This action copy the authors from the plugin Byline allowing you to migrate to PublishPress Authors without lose any data. This action can be run multiple times.', + 'description' => 'This action will copy the authors from the plugin Byline allowing you to migrate to PublishPress Authors without losing any data. This action can be run multiple times.', 'button_link' => '', 'after' => '
', ]; diff --git a/modules/bylines-migration/bylines-migration.php b/modules/bylines-migration/bylines-migration.php index f401577d..7dad98e8 100644 --- a/modules/bylines-migration/bylines-migration.php +++ b/modules/bylines-migration/bylines-migration.php @@ -165,7 +165,7 @@ public function registerMaintenanceAction($actions) { $actions['copy_bylines_data'] = [ 'title' => __('Copy Bylines Data', 'publishpress-authors'), - 'description' => 'This action copy the authors from the plugin Bylines allowing you to migrate to PublishPress Authors without lose any data. This action can be run multiple times.', + 'description' => 'This action will copy the authors from the plugin Bylines allowing you to migrate to PublishPress Authors without losing any data. This action can be run multiple times.', 'button_link' => '', 'after' => '
', ]; diff --git a/modules/multiple-authors/multiple-authors.php b/modules/multiple-authors/multiple-authors.php index 7813b99c..b62e9142 100644 --- a/modules/multiple-authors/multiple-authors.php +++ b/modules/multiple-authors/multiple-authors.php @@ -669,7 +669,7 @@ public function settings_maintenance_option($args = []) if (isset($GLOBALS['coauthors_plus']) && !empty($GLOBALS['coauthors_plus'])) { $actions['copy_coauthor_plus_data'] = [ 'title' => __('Copy Co-Authors Plus Data', 'publishpress-authors'), - 'description' => 'This action copy the authors from the plugin Co-Authors Plus allowing you to migrate to PublishPress Authors without lose any data. This action can be run multiple times.', + 'description' => 'This action will copy the authors from the plugin Co-Authors Plus allowing you to migrate to PublishPress Authors without losing any data. This action can be run multiple times.', 'button_link' => '', 'after' => '
', ]; From 19c91b3a013a25cbc66c4c2c8bd01c900f7a9f33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valenti=CC=81n=20Garci=CC=81a?= Date: Tue, 14 Apr 2020 16:50:53 -0500 Subject: [PATCH 02/66] User pointer cursor when hovering the "x" from author's list #91 --- assets/css/multiple-authors.css | 1 + 1 file changed, 1 insertion(+) diff --git a/assets/css/multiple-authors.css b/assets/css/multiple-authors.css index 492925b6..8dfebdda 100644 --- a/assets/css/multiple-authors.css +++ b/assets/css/multiple-authors.css @@ -172,6 +172,7 @@ ul.authors-list.authors-current-user-can-assign li .author-remove { top: 50%; -webkit-transform: translateY(-50%); transform: translateY(-50%); + cursor: pointer; } ul.authors-list.authors-current-user-can-assign li .author-remove .dashicons { From f5229d00e300a2bc3bffb366745c82a969b21634 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valenti=CC=81n=20Garci=CC=81a?= Date: Tue, 14 Apr 2020 18:22:17 -0500 Subject: [PATCH 03/66] Design improvement for simle list layout #40 --- assets/css/multiple-authors-widget.css | 9 +++++---- twig/author_layout/simple_list.twig | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/assets/css/multiple-authors-widget.css b/assets/css/multiple-authors-widget.css index 307e261f..41f58a30 100644 --- a/assets/css/multiple-authors-widget.css +++ b/assets/css/multiple-authors-widget.css @@ -1,25 +1,26 @@ .pp-multiple-authors-layout-simple_list ul, .pp-multiple-authors-layout-boxed ul { padding-left: 0; + margin-left: 0; } .pp-multiple-authors-layout-simple_list ul li { list-style: none; position: relative; min-height: 35px; + line-height: 35px; border-bottom: 1px solid #dddddd; border-top: 1px solid #dddddd; border-bottom: 1px solid #dddddd; border-top: 1px solid #dddddd; padding: 0.5em 0; - margin-top: -1px; + margin: -1px 0 0 0; } .pp-multiple-authors-layout-simple_list .avatar, .pp-multiple-authors-layout-simple_list .photo { - position: absolute; - right: 0; - top: 5px; + float: left; + margin-right: 10px; width: 35px; height: 35px; display: block; diff --git a/twig/author_layout/simple_list.twig b/twig/author_layout/simple_list.twig index 381bb1db..254fd359 100644 --- a/twig/author_layout/simple_list.twig +++ b/twig/author_layout/simple_list.twig @@ -6,7 +6,7 @@
    {% for author in authors %}
  • - - {{ author.age }} + {{ author.age }} {% if author.get_avatar %} {{ author.get_avatar(50)|raw }} {% else %} From 16149354ed94d4d53bc39f00b3032904c9701691 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valenti=CC=81n=20Garci=CC=81a?= Date: Tue, 14 Apr 2020 18:52:48 -0500 Subject: [PATCH 04/66] Center avatar in centered layout #38 --- assets/css/multiple-authors-widget.css | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/assets/css/multiple-authors-widget.css b/assets/css/multiple-authors-widget.css index 41f58a30..9c261dc5 100644 --- a/assets/css/multiple-authors-widget.css +++ b/assets/css/multiple-authors-widget.css @@ -72,6 +72,11 @@ box-shadow: none; } +.pp-multiple-authors-layout-centered ul{ + margin: 0; + padding: 0; +} + .pp-multiple-authors-layout-centered ul li { list-style: none; position: relative; @@ -90,6 +95,7 @@ -moz-border-radius: 50%; -webkit-border-radius: 50%; min-height: 80px; + margin: 0 auto; } .pp-multiple-authors-layout-centered a { From 92b57c15e59a3af43ef495d56bb1444c9d96c074 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valenti=CC=81n=20Garci=CC=81a?= Date: Tue, 14 Apr 2020 19:10:27 -0500 Subject: [PATCH 05/66] Minor CSS tweaks for centered layout #38 --- assets/css/multiple-authors-widget.css | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/assets/css/multiple-authors-widget.css b/assets/css/multiple-authors-widget.css index 9c261dc5..dbc7d352 100644 --- a/assets/css/multiple-authors-widget.css +++ b/assets/css/multiple-authors-widget.css @@ -100,12 +100,18 @@ .pp-multiple-authors-layout-centered a { font-size: 1.2em; - margin-bottom: 10px; - display: inline-block; +} + +.pp-multiple-authors-layout-centered a .dashicons, +.pp-multiple-authors-layout-centered a:hover .dashicons, +.pp-multiple-authors-layout-centered a:focus .dashicons, +.pp-multiple-authors-layout-centered a:active .dashicons { + text-decoration: none; } .pp-multiple-authors-layout-centered p { font-size: 0.85em; + margin: 5px 0; } .pp-multiple-authors-layout-inline .avatar, From 1279f9088578e69900ca657f7f50bf8e6f4162ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valenti=CC=81n=20Garci=CC=81a?= Date: Tue, 14 Apr 2020 19:10:50 -0500 Subject: [PATCH 06/66] Minor layout adjustments for centered layout #38 --- twig/author_layout/centered.twig | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/twig/author_layout/centered.twig b/twig/author_layout/centered.twig index 248a508f..7394f02f 100644 --- a/twig/author_layout/centered.twig +++ b/twig/author_layout/centered.twig @@ -11,10 +11,12 @@ {% else %} {{ get_avatar(author.user_email, 160)|raw }} {% endif %} -
    - -

    {{ author.description }}

    - +

    + +

    + {% if author.description %} +

    {{ author.description }}

    + {% endif %} {% if show_email or show_site %}
      {% for author in authors %}
    • - {{ author.age }} + {% if author.get_avatar %} {{ author.get_avatar(50)|raw }} {% else %} From b1ab3fb8a10bd99afbb53d310c0087806c8b981a Mon Sep 17 00:00:00 2001 From: Anderson Grudtner Martins Date: Thu, 16 Apr 2020 12:32:10 -0300 Subject: [PATCH 08/66] Fix #93 - Fix undefined method add_piece_language --- .../src/Schema/Article.php | 3 +- .../src/Schema/Webpage.php | 3 +- .../yoast-seo-integration/src/SchemaUtils.php | 30 +++++++++++++++++++ 3 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 modules/yoast-seo-integration/src/SchemaUtils.php diff --git a/modules/yoast-seo-integration/src/Schema/Article.php b/modules/yoast-seo-integration/src/Schema/Article.php index a1c38fb4..827bbfc6 100644 --- a/modules/yoast-seo-integration/src/Schema/Article.php +++ b/modules/yoast-seo-integration/src/Schema/Article.php @@ -25,6 +25,7 @@ namespace PPAuthors\YoastSEO\Schema; use MultipleAuthors\Classes\Authors_Iterator; +use PPAuthors\YoastSEO\SchemaUtils; /** * Returns schema Article data. @@ -115,7 +116,7 @@ public function generate() $data = $this->add_image($data); $data = $this->add_keywords($data); $data = $this->add_sections($data); - $data = \WPSEO_Schema_Utils::add_piece_language($data); + $data = SchemaUtils::addPieceLanguage($data); if (post_type_supports($post->post_type, 'comments') && $post->comment_status === 'open') { $data = $this->add_potential_action($data); diff --git a/modules/yoast-seo-integration/src/Schema/Webpage.php b/modules/yoast-seo-integration/src/Schema/Webpage.php index 3428449e..315e9f50 100644 --- a/modules/yoast-seo-integration/src/Schema/Webpage.php +++ b/modules/yoast-seo-integration/src/Schema/Webpage.php @@ -26,6 +26,7 @@ use MultipleAuthors\Classes\Authors_Iterator; +use PPAuthors\YoastSEO\SchemaUtils; /** * Returns schema Article data. @@ -90,7 +91,7 @@ public function generate() ], ]; - $data = \WPSEO_Schema_Utils::add_piece_language($data); + $data = SchemaUtils::addPieceLanguage($data); if (is_front_page()) { if ($this->context->site_represents_reference) { diff --git a/modules/yoast-seo-integration/src/SchemaUtils.php b/modules/yoast-seo-integration/src/SchemaUtils.php new file mode 100644 index 00000000..db8c94e8 --- /dev/null +++ b/modules/yoast-seo-integration/src/SchemaUtils.php @@ -0,0 +1,30 @@ + Date: Thu, 16 Apr 2020 12:33:10 -0300 Subject: [PATCH 09/66] Update version to 3.2.4-hotfix-issue-93 --- includes.php | 2 +- publishpress-authors.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/includes.php b/includes.php index 89304de3..05ebcccf 100644 --- a/includes.php +++ b/includes.php @@ -12,7 +12,7 @@ defined('ABSPATH') or die('No direct script access allowed.'); if ( ! defined('PP_AUTHORS_LOADED')) { - define('PP_AUTHORS_VERSION', '3.2.4'); + define('PP_AUTHORS_VERSION', '3.2.4-hotfix-issue-93'); define('PP_AUTHORS_FILE', 'publishpress-authors/publishpress-authors.php'); define('PP_AUTHORS_BASE_PATH', plugin_dir_path(__FILE__)); define('PP_AUTHORS_MODULES_PATH', PP_AUTHORS_BASE_PATH . 'modules'); diff --git a/publishpress-authors.php b/publishpress-authors.php index 9aec44c4..9544bacd 100644 --- a/publishpress-authors.php +++ b/publishpress-authors.php @@ -12,7 +12,7 @@ * @publishpress-authors * Plugin Name: PublishPress Authors * Plugin URI: https://publishpress.com/ - * Version: 3.2.4 + * Version: 3.2.4-hotfix-issue-93 * Description: Add support for multiple authors * Author: PublishPress * Author URI: https://publishpress.com From 435bdae33505c4353600cc10086ac66499a89f64 Mon Sep 17 00:00:00 2001 From: Anderson Grudtner Martins Date: Thu, 16 Apr 2020 19:24:54 -0300 Subject: [PATCH 10/66] Fix #93 - Improve the Yoast SEO check and catch exceptions --- core/Classes/Legacy/LegacyPlugin.php | 27 +++------ .../yoast-seo-integration.php | 60 ++++++++++++++----- 2 files changed, 52 insertions(+), 35 deletions(-) diff --git a/core/Classes/Legacy/LegacyPlugin.php b/core/Classes/Legacy/LegacyPlugin.php index 23c4a039..c94dd8c9 100644 --- a/core/Classes/Legacy/LegacyPlugin.php +++ b/core/Classes/Legacy/LegacyPlugin.php @@ -144,27 +144,16 @@ private function load_modules() private function getModulesDirs() { $defaultDirs = [ - 'modules-settings' => PP_AUTHORS_MODULES_PATH, - 'settings' => PP_AUTHORS_MODULES_PATH, - 'multiple-authors' => PP_AUTHORS_MODULES_PATH, - 'default-layouts' => PP_AUTHORS_MODULES_PATH, - 'byline-migration' => PP_AUTHORS_MODULES_PATH, - 'bylines-migration' => PP_AUTHORS_MODULES_PATH, + 'modules-settings' => PP_AUTHORS_MODULES_PATH, + 'settings' => PP_AUTHORS_MODULES_PATH, + 'multiple-authors' => PP_AUTHORS_MODULES_PATH, + 'default-layouts' => PP_AUTHORS_MODULES_PATH, + 'byline-migration' => PP_AUTHORS_MODULES_PATH, + 'bylines-migration' => PP_AUTHORS_MODULES_PATH, + 'yoast-seo-integration' => PP_AUTHORS_MODULES_PATH, ]; - // Only load the Yoast SEO integration if the installed version is >= 13.4.1. - if (defined('WPSEO_VERSION') && class_exists('WPSEO_Schema_Context') && version_compare( - WPSEO_VERSION, - '13.4.1', - '<=' - )) { - $defaultDirs['yoast-seo-integration'] = PP_AUTHORS_MODULES_PATH; - } - - // Add filters to extend the modules - $modulesDirs = apply_filters('ppma_module_dirs', $defaultDirs); - - return $modulesDirs; + return apply_filters('ppma_module_dirs', $defaultDirs); } /** diff --git a/modules/yoast-seo-integration/yoast-seo-integration.php b/modules/yoast-seo-integration/yoast-seo-integration.php index d23aa717..17705a67 100644 --- a/modules/yoast-seo-integration/yoast-seo-integration.php +++ b/modules/yoast-seo-integration/yoast-seo-integration.php @@ -76,9 +76,21 @@ public function __construct() /** * */ - private function isYoastSeoInstalled() + private function isCompatibleYoastSeoInstalled() { - return defined('WPSEO_FILE') && class_exists('WPSEO_Schema_Context'); + if (!defined('WPSEO_VERSION') || version_compare(WPSEO_VERSION, '13.4.1', '<')) { + return false; + } + + if (!defined('WPSEO_FILE')) { + return false; + } + + if (!class_exists('WPSEO_Schema_Context')) { + return false; + } + + return true; } /** @@ -86,34 +98,50 @@ private function isYoastSeoInstalled() */ public function init() { - if (!$this->isYoastSeoInstalled()) { - return; - } + try { + if (!$this->isCompatibleYoastSeoInstalled()) { + error_log( + sprintf( + '[PublishPress Authors] %s %s', + __METHOD__, + 'detected a not supported version of the Yoast SEO plugin. It requires 13.4.1 or later.' + ) + ); + + return; + } - $schemaFacade = new \PPAuthors\YoastSEO\SchemaFacade(); - $schemaFacade->addSupportForMultipleAuthors(); + $schemaFacade = new \PPAuthors\YoastSEO\SchemaFacade(); + $schemaFacade->addSupportForMultipleAuthors(); - add_filter('wpseo_replacements', [$this, 'overrideSEOReplacements'], 10, 2); + add_filter('wpseo_replacements', [$this, 'overrideSEOReplacementsForAuthorsPage'], 10, 2); + } catch (\Exception $e) { + error_log(sprintf('[PublishPress Authors] Method [%s] caught the exception %s', __METHOD__, $e->getMessage())); + } } - public function overrideSEOReplacements($replacements, $args) + public function overrideSEOReplacementsForAuthorsPage($replacements, $args) { if (!is_author()) { return $replacements; } - foreach ($replacements as $key => &$value) - { - if ($key === '%%name%%') { - $authors = get_multiple_authors(0, true, true); - $author = $authors[0]; + try { + foreach ($replacements as $key => &$value) { + if ($key === '%%name%%') { + $authors = get_multiple_authors(0, true, true); + $author = $authors[0]; - if ($author->is_guest()) { - $value = $author->display_name; + if ($author->is_guest()) { + $value = $author->display_name; + } } } + } catch (\Exception $e) { + error_log(sprintf('[PublishPress Authors] Method %s caught the exception: %s', __METHOD__, $e->getMessage())); } + return $replacements; } } From 247780c3f38aa93830bae82ada4da0ac71a71c35 Mon Sep 17 00:00:00 2001 From: Anderson Grudtner Martins Date: Thu, 16 Apr 2020 19:34:35 -0300 Subject: [PATCH 11/66] Fix Yoast SEO structured data for other pages Not only the authors page. --- modules/yoast-seo-integration/yoast-seo-integration.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/modules/yoast-seo-integration/yoast-seo-integration.php b/modules/yoast-seo-integration/yoast-seo-integration.php index 17705a67..77f47a74 100644 --- a/modules/yoast-seo-integration/yoast-seo-integration.php +++ b/modules/yoast-seo-integration/yoast-seo-integration.php @@ -122,10 +122,6 @@ public function init() public function overrideSEOReplacementsForAuthorsPage($replacements, $args) { - if (!is_author()) { - return $replacements; - } - try { foreach ($replacements as $key => &$value) { if ($key === '%%name%%') { From d0ddd92ad448f9f422fa1e0981192557c8a57f53 Mon Sep 17 00:00:00 2001 From: Anderson Grudtner Martins Date: Thu, 16 Apr 2020 20:01:22 -0300 Subject: [PATCH 12/66] Add messages to the log in case we find some errors --- core/Classes/Objects/Author.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/Classes/Objects/Author.php b/core/Classes/Objects/Author.php index c90623ad..364b8fbf 100644 --- a/core/Classes/Objects/Author.php +++ b/core/Classes/Objects/Author.php @@ -49,10 +49,12 @@ public static function create_from_user($user) $user = get_user_by('id', $user); } if (!is_a($user, 'WP_User')) { + error_log(sprintf('[PublishPress Authors] The method %s found that the expected user doesn\'t exist: %s', __METHOD__, maybe_serialize($user))); return new WP_Error('missing-user', __("User doesn't exist", 'publishpress-authors')); } $existing = self::get_by_user_id($user->ID); if ($existing) { + error_log(sprintf('[PublishPress Authors] The method %s tried to create an author that already exists for the user: %s', __METHOD__, maybe_serialize($user))); return new WP_Error( 'existing-author', __('User already has a author.', 'publishpress-authors') @@ -65,6 +67,7 @@ public static function create_from_user($user) ] ); if (is_wp_error($author)) { + error_log(sprintf('[PublishPress Authors] The method %s found an error trying to create an author', __METHOD__)); return $author; } @@ -111,12 +114,14 @@ public static function get_by_user_id($user_id) public static function create($args) { if (empty($args['slug'])) { + error_log(sprintf('[PublishPress Authors] The method %s is missing the slug in the arguments', __METHOD__)); return new WP_Error( 'missing-slug', __("'slug' is a required argument", 'publishpress-authors') ); } if (empty($args['display_name'])) { + error_log(sprintf('[PublishPress Authors] The method %s is missing the display_name in the arguments', __METHOD__)); return new WP_Error( 'missing-display_name', __("'display_name' is a required argument", 'publishpress-authors') From e372dad42c68d2cbd0905b3e07cb0609f8f31071 Mon Sep 17 00:00:00 2001 From: Anderson Grudtner Martins Date: Fri, 17 Apr 2020 13:13:27 -0300 Subject: [PATCH 13/66] Apply PSR-12 code style --- .ide.php | 36 +- assets/css/multiple-authors-widget.css | 2 +- bin/install-package-tests.sh | 4 +- bin/install-wp-tests.sh | 174 +- build.xml | 6 +- bylines-functions.php | 20 +- coauthors-functions.php | 36 +- composer.lock | 5634 ++++++++--------- core/Classes/Admin_Ajax.php | 141 +- core/Classes/Author_Editor.php | 2 +- core/Classes/Authors_Iterator.php | 16 +- core/Classes/CLI.php | 8 +- core/Classes/Content_Model.php | 20 +- core/Classes/Installer.php | 6 +- core/Classes/Integrations/RSS.php | 40 +- core/Classes/Integrations/Theme.php | 10 +- core/Classes/Legacy/LegacyPlugin.php | 34 +- core/Classes/Legacy/Module.php | 80 +- core/Classes/Legacy/Util.php | 16 +- core/Classes/Objects/Author.php | 114 +- core/Classes/Post_Editor.php | 91 +- core/Classes/Query.php | 30 +- core/Classes/Utils.php | 49 +- core/Factory.php | 22 +- core/Plugin.php | 603 +- core/Services.php | 51 +- core/Traits/Author_box.php | 59 +- core/WP_Cli.php | 167 +- core/Widget.php | 28 +- deprecated.php | 30 +- includes.php | 50 +- integrations/amp.php | 2 +- .../assets/js/byline-migration.jsx | 40 +- modules/byline-migration/byline-migration.php | 89 +- .../bylines-migration/bylines-migration.php | 2 +- modules/default-layouts/default-layouts.php | 6 +- modules/modules-settings/modules-settings.php | 49 +- .../assets/js/coauthors-migration.jsx | 36 +- modules/multiple-authors/multiple-authors.php | 8 +- modules/settings/lib/new-menu-icon.svg | 31 +- modules/settings/settings.php | 4 +- .../src/Schema/Article.php | 117 +- .../src/Schema/Author.php | 76 +- .../src/Schema/Person.php | 148 +- .../src/Schema/Webpage.php | 118 +- .../src/SchemaFacade.php | 6 +- .../yoast-seo-integration/src/SchemaUtils.php | 4 +- .../yoast-seo-integration.php | 29 +- phpunit.xml.dist | 24 +- publishpress-authors.php | 110 +- template-tags.php | 387 +- twig/author_layout/inline.twig | 3 +- twig/author_layout/inline_avatar.twig | 3 +- twig/footer-base.twig | 7 +- twig/settings-tab.twig | 6 +- twig/widget-form.twig | 6 +- 56 files changed, 4701 insertions(+), 4189 deletions(-) diff --git a/.ide.php b/.ide.php index 98b659de..18b7e1ea 100644 --- a/.ide.php +++ b/.ide.php @@ -12,7 +12,7 @@ namespace { - if ( ! class_exists(PP_Multiple_authors_plugin::class)) { + if (!class_exists(PP_Multiple_authors_plugin::class)) { /** * Class PP_Multiple_authors_plugin * @@ -26,7 +26,7 @@ class PP_Multiple_authors_plugin namespace PublishPress\Addon\Multiple_authors { - if ( ! class_exists(Container::class)) { + if (!class_exists(Container::class)) { /** * Class PublishPress * @@ -37,7 +37,7 @@ class Container } } - if ( ! class_exists(Factory::class)) { + if (!class_exists(Factory::class)) { /** * Class PublishPress * @@ -48,7 +48,7 @@ class Factory } } - if ( ! class_exists(Services::class)) { + if (!class_exists(Services::class)) { /** * Class PublishPress * @@ -59,7 +59,7 @@ class Services } } - if ( ! class_exists(Widget::class)) { + if (!class_exists(Widget::class)) { /** * Class PublishPress * @@ -70,7 +70,7 @@ class Widget } } - if ( ! class_exists(WP_Cli::class)) { + if (!class_exists(WP_Cli::class)) { /** * Class PublishPress * @@ -84,7 +84,7 @@ class WP_Cli namespace PublishPress\Addon\Multiple_authors\Classes { - if ( ! class_exists(Admin_Ajax::class)) { + if (!class_exists(Admin_Ajax::class)) { /** * Class PublishPress * @@ -95,7 +95,7 @@ class Admin_Ajax } } - if ( ! class_exists(Author_Editor::class)) { + if (!class_exists(Author_Editor::class)) { /** * Class PublishPress * @@ -106,7 +106,7 @@ class Author_Editor } } - if ( ! class_exists(Authors_Iterator::class)) { + if (!class_exists(Authors_Iterator::class)) { /** * Class PublishPress * @@ -117,7 +117,7 @@ class Authors_Iterator } } - if ( ! class_exists(CLI::class)) { + if (!class_exists(CLI::class)) { /** * Class PublishPress * @@ -128,7 +128,7 @@ class CLI } } - if ( ! class_exists(Content_Model::class)) { + if (!class_exists(Content_Model::class)) { /** * Class PublishPress * @@ -139,7 +139,7 @@ class Content_Model } } - if ( ! class_exists(Installer::class)) { + if (!class_exists(Installer::class)) { /** * Class PublishPress * @@ -150,7 +150,7 @@ class Installer } } - if ( ! class_exists(Post_Editor::class)) { + if (!class_exists(Post_Editor::class)) { /** * Class PublishPress * @@ -161,7 +161,7 @@ class Post_Editor } } - if ( ! class_exists(Query::class)) { + if (!class_exists(Query::class)) { /** * Class PublishPress * @@ -172,7 +172,7 @@ class Query } } - if ( ! class_exists(Utils::class)) { + if (!class_exists(Utils::class)) { /** * Class PublishPress * @@ -186,7 +186,7 @@ class Utils namespace PublishPress\Addon\Multiple_authors\Classes\Objects { - if ( ! class_exists(Author::class)) { + if (!class_exists(Author::class)) { /** * Class PublishPress * @@ -200,7 +200,7 @@ class Author namespace PublishPress\Addon\Multiple_authors\Classes\Integrations { - if ( ! class_exists(RSS::class)) { + if (!class_exists(RSS::class)) { /** * Class PublishPress * @@ -211,7 +211,7 @@ class RSS } } - if ( ! class_exists(Theme::class)) { + if (!class_exists(Theme::class)) { /** * Class PublishPress * diff --git a/assets/css/multiple-authors-widget.css b/assets/css/multiple-authors-widget.css index dbc7d352..c85a6c19 100644 --- a/assets/css/multiple-authors-widget.css +++ b/assets/css/multiple-authors-widget.css @@ -72,7 +72,7 @@ box-shadow: none; } -.pp-multiple-authors-layout-centered ul{ +.pp-multiple-authors-layout-centered ul { margin: 0; padding: 0; } diff --git a/bin/install-package-tests.sh b/bin/install-package-tests.sh index 2ff49dd8..4a1fd350 100755 --- a/bin/install-package-tests.sh +++ b/bin/install-package-tests.sh @@ -3,8 +3,8 @@ set -ex install_db() { - mysql -e 'CREATE DATABASE IF NOT EXISTS wp_cli_test;' -uroot - mysql -e 'GRANT ALL PRIVILEGES ON wp_cli_test.* TO "wp_cli_test"@"localhost" IDENTIFIED BY "password1"' -uroot + mysql -e 'CREATE DATABASE IF NOT EXISTS wp_cli_test;' -uroot + mysql -e 'GRANT ALL PRIVILEGES ON wp_cli_test.* TO "wp_cli_test"@"localhost" IDENTIFIED BY "password1"' -uroot } install_db diff --git a/bin/install-wp-tests.sh b/bin/install-wp-tests.sh index 73bb4c78..76b2182b 100755 --- a/bin/install-wp-tests.sh +++ b/bin/install-wp-tests.sh @@ -1,8 +1,8 @@ #!/usr/bin/env bash if [ $# -lt 3 ]; then - echo "usage: $0 [db-host] [wp-version] [skip-database-creation]" - exit 1 + echo "usage: $0 [db-host] [wp-version] [skip-database-creation]" + exit 1 fi DB_NAME=$1 @@ -16,110 +16,110 @@ WP_TESTS_DIR=${WP_TESTS_DIR-/tmp/wordpress-tests-lib} WP_CORE_DIR=${WP_CORE_DIR-/tmp/wordpress/} download() { - if [ `which curl` ]; then - curl -s "$1" > "$2"; - elif [ `which wget` ]; then - wget -nv -O "$2" "$1" - fi + if [ $(which curl) ]; then + curl -s "$1" >"$2" + elif [ $(which wget) ]; then + wget -nv -O "$2" "$1" + fi } if [[ $WP_VERSION =~ [0-9]+\.[0-9]+(\.[0-9]+)? ]]; then - WP_TESTS_TAG="tags/$WP_VERSION" + WP_TESTS_TAG="tags/$WP_VERSION" elif [[ $WP_VERSION == 'nightly' || $WP_VERSION == 'trunk' ]]; then - WP_TESTS_TAG="trunk" + WP_TESTS_TAG="trunk" else - # http serves a single offer, whereas https serves multiple. we only want one - download http://api.wordpress.org/core/version-check/1.7/ /tmp/wp-latest.json - grep '[0-9]+\.[0-9]+(\.[0-9]+)?' /tmp/wp-latest.json - LATEST_VERSION=$(grep -o '"version":"[^"]*' /tmp/wp-latest.json | sed 's/"version":"//') - if [[ -z "$LATEST_VERSION" ]]; then - echo "Latest WordPress version could not be found" - exit 1 - fi - WP_TESTS_TAG="tags/$LATEST_VERSION" + # http serves a single offer, whereas https serves multiple. we only want one + download http://api.wordpress.org/core/version-check/1.7/ /tmp/wp-latest.json + grep '[0-9]+\.[0-9]+(\.[0-9]+)?' /tmp/wp-latest.json + LATEST_VERSION=$(grep -o '"version":"[^"]*' /tmp/wp-latest.json | sed 's/"version":"//') + if [[ -z "$LATEST_VERSION" ]]; then + echo "Latest WordPress version could not be found" + exit 1 + fi + WP_TESTS_TAG="tags/$LATEST_VERSION" fi set -ex install_wp() { - if [ -d $WP_CORE_DIR ]; then - return; - fi - - mkdir -p $WP_CORE_DIR - - if [[ $WP_VERSION == 'nightly' || $WP_VERSION == 'trunk' ]]; then - mkdir -p /tmp/wordpress-nightly - download https://wordpress.org/nightly-builds/wordpress-latest.zip /tmp/wordpress-nightly/wordpress-nightly.zip - unzip -q /tmp/wordpress-nightly/wordpress-nightly.zip -d /tmp/wordpress-nightly/ - mv /tmp/wordpress-nightly/wordpress/* $WP_CORE_DIR - else - if [ $WP_VERSION == 'latest' ]; then - local ARCHIVE_NAME='latest' - else - local ARCHIVE_NAME="wordpress-$WP_VERSION" - fi - download https://wordpress.org/${ARCHIVE_NAME}.tar.gz /tmp/wordpress.tar.gz - tar --strip-components=1 -zxmf /tmp/wordpress.tar.gz -C $WP_CORE_DIR - fi - - download https://raw.github.com/markoheijnen/wp-mysqli/master/db.php $WP_CORE_DIR/wp-content/db.php + if [ -d $WP_CORE_DIR ]; then + return + fi + + mkdir -p $WP_CORE_DIR + + if [[ $WP_VERSION == 'nightly' || $WP_VERSION == 'trunk' ]]; then + mkdir -p /tmp/wordpress-nightly + download https://wordpress.org/nightly-builds/wordpress-latest.zip /tmp/wordpress-nightly/wordpress-nightly.zip + unzip -q /tmp/wordpress-nightly/wordpress-nightly.zip -d /tmp/wordpress-nightly/ + mv /tmp/wordpress-nightly/wordpress/* $WP_CORE_DIR + else + if [ $WP_VERSION == 'latest' ]; then + local ARCHIVE_NAME='latest' + else + local ARCHIVE_NAME="wordpress-$WP_VERSION" + fi + download https://wordpress.org/${ARCHIVE_NAME}.tar.gz /tmp/wordpress.tar.gz + tar --strip-components=1 -zxmf /tmp/wordpress.tar.gz -C $WP_CORE_DIR + fi + + download https://raw.github.com/markoheijnen/wp-mysqli/master/db.php $WP_CORE_DIR/wp-content/db.php } install_test_suite() { - # portable in-place argument for both GNU sed and Mac OSX sed - if [[ $(uname -s) == 'Darwin' ]]; then - local ioption='-i .bak' - else - local ioption='-i' - fi - - # set up testing suite if it doesn't yet exist - if [ ! -d $WP_TESTS_DIR ]; then - # set up testing suite - mkdir -p $WP_TESTS_DIR - svn co --quiet https://develop.svn.wordpress.org/${WP_TESTS_TAG}/tests/phpunit/includes/ $WP_TESTS_DIR/includes - svn co --quiet https://develop.svn.wordpress.org/${WP_TESTS_TAG}/tests/phpunit/data/ $WP_TESTS_DIR/data - fi - - if [ ! -f wp-tests-config.php ]; then - download https://develop.svn.wordpress.org/${WP_TESTS_TAG}/wp-tests-config-sample.php "$WP_TESTS_DIR"/wp-tests-config.php - # remove all forward slashes in the end - WP_CORE_DIR=$(echo $WP_CORE_DIR | sed "s:/\+$::") - sed $ioption "s:dirname( __FILE__ ) . '/src/':'$WP_CORE_DIR/':" "$WP_TESTS_DIR"/wp-tests-config.php - sed $ioption "s/youremptytestdbnamehere/$DB_NAME/" "$WP_TESTS_DIR"/wp-tests-config.php - sed $ioption "s/yourusernamehere/$DB_USER/" "$WP_TESTS_DIR"/wp-tests-config.php - sed $ioption "s/yourpasswordhere/$DB_PASS/" "$WP_TESTS_DIR"/wp-tests-config.php - sed $ioption "s|localhost|${DB_HOST}|" "$WP_TESTS_DIR"/wp-tests-config.php - fi + # portable in-place argument for both GNU sed and Mac OSX sed + if [[ $(uname -s) == 'Darwin' ]]; then + local ioption='-i .bak' + else + local ioption='-i' + fi + + # set up testing suite if it doesn't yet exist + if [ ! -d $WP_TESTS_DIR ]; then + # set up testing suite + mkdir -p $WP_TESTS_DIR + svn co --quiet https://develop.svn.wordpress.org/${WP_TESTS_TAG}/tests/phpunit/includes/ $WP_TESTS_DIR/includes + svn co --quiet https://develop.svn.wordpress.org/${WP_TESTS_TAG}/tests/phpunit/data/ $WP_TESTS_DIR/data + fi + + if [ ! -f wp-tests-config.php ]; then + download https://develop.svn.wordpress.org/${WP_TESTS_TAG}/wp-tests-config-sample.php "$WP_TESTS_DIR"/wp-tests-config.php + # remove all forward slashes in the end + WP_CORE_DIR=$(echo $WP_CORE_DIR | sed "s:/\+$::") + sed $ioption "s:dirname( __FILE__ ) . '/src/':'$WP_CORE_DIR/':" "$WP_TESTS_DIR"/wp-tests-config.php + sed $ioption "s/youremptytestdbnamehere/$DB_NAME/" "$WP_TESTS_DIR"/wp-tests-config.php + sed $ioption "s/yourusernamehere/$DB_USER/" "$WP_TESTS_DIR"/wp-tests-config.php + sed $ioption "s/yourpasswordhere/$DB_PASS/" "$WP_TESTS_DIR"/wp-tests-config.php + sed $ioption "s|localhost|${DB_HOST}|" "$WP_TESTS_DIR"/wp-tests-config.php + fi } install_db() { - if [ ${SKIP_DB_CREATE} = "true" ]; then - return 0 - fi - - # parse DB_HOST for port or socket references - local PARTS=(${DB_HOST//\:/ }) - local DB_HOSTNAME=${PARTS[0]}; - local DB_SOCK_OR_PORT=${PARTS[1]}; - local EXTRA="" - - if ! [ -z $DB_HOSTNAME ] ; then - if [ $(echo $DB_SOCK_OR_PORT | grep -e '^[0-9]\{1,\}$') ]; then - EXTRA=" --host=$DB_HOSTNAME --port=$DB_SOCK_OR_PORT --protocol=tcp" - elif ! [ -z $DB_SOCK_OR_PORT ] ; then - EXTRA=" --socket=$DB_SOCK_OR_PORT" - elif ! [ -z $DB_HOSTNAME ] ; then - EXTRA=" --host=$DB_HOSTNAME --protocol=tcp" - fi - fi - - # create database - mysqladmin create $DB_NAME --user="$DB_USER" --password="$DB_PASS"$EXTRA + if [ ${SKIP_DB_CREATE} = "true" ]; then + return 0 + fi + + # parse DB_HOST for port or socket references + local PARTS=(${DB_HOST//\:/ }) + local DB_HOSTNAME=${PARTS[0]} + local DB_SOCK_OR_PORT=${PARTS[1]} + local EXTRA="" + + if ! [ -z $DB_HOSTNAME ]; then + if [ $(echo $DB_SOCK_OR_PORT | grep -e '^[0-9]\{1,\}$') ]; then + EXTRA=" --host=$DB_HOSTNAME --port=$DB_SOCK_OR_PORT --protocol=tcp" + elif ! [ -z $DB_SOCK_OR_PORT ]; then + EXTRA=" --socket=$DB_SOCK_OR_PORT" + elif ! [ -z $DB_HOSTNAME ]; then + EXTRA=" --host=$DB_HOSTNAME --protocol=tcp" + fi + fi + + # create database + mysqladmin create $DB_NAME --user="$DB_USER" --password="$DB_PASS"$EXTRA } install_wp diff --git a/build.xml b/build.xml index f76092da..40738229 100644 --- a/build.xml +++ b/build.xml @@ -5,8 +5,10 @@ - - + + diff --git a/bylines-functions.php b/bylines-functions.php index 7ba63dfc..303ba56e 100644 --- a/bylines-functions.php +++ b/bylines-functions.php @@ -7,7 +7,7 @@ * @since 1.0.7 */ -if ( ! function_exists('get_bylines')) { +if (!function_exists('get_bylines')) { /** * Get all bylines for a post. * @@ -21,7 +21,7 @@ function get_bylines($post = null) } } -if ( ! function_exists('the_bylines')) { +if (!function_exists('the_bylines')) { /** * Renders the bylines display names, without links to their posts. * @@ -35,7 +35,7 @@ function the_bylines() } } -if ( ! function_exists('get_the_bylines')) { +if (!function_exists('get_the_bylines')) { /** * Gets the bylines display names, without links to their posts. * @@ -49,7 +49,7 @@ function get_the_bylines() } } -if ( ! function_exists('the_bylines_posts_links')) { +if (!function_exists('the_bylines_posts_links')) { /** * Renders the bylines display names, with links to their posts. * @@ -63,7 +63,7 @@ function the_bylines_posts_links() } } -if ( ! function_exists('get_the_bylines_posts_links')) { +if (!function_exists('get_the_bylines_posts_links')) { /** * Renders the bylines display names, with links to their posts. * @@ -75,7 +75,7 @@ function get_the_bylines_posts_links() } } -if ( ! function_exists('the_bylines_links')) { +if (!function_exists('the_bylines_links')) { /** * Renders the bylines display names, with their website link if it exists. * @@ -89,7 +89,7 @@ function the_bylines_links() } } -if ( ! function_exists('get_the_bylines_links')) { +if (!function_exists('get_the_bylines_links')) { /** * Renders the bylines display names, with their website link if it exists. * @@ -101,13 +101,13 @@ function get_the_bylines_links() } } -if ( ! function_exists('bylines_render')) { +if (!function_exists('bylines_render')) { /** * Display one or more bylines, according to arguments provided. * - * @param array $bylines Set of bylines to display. + * @param array $bylines Set of bylines to display. * @param callable $render_callback Callback to return rendered byline. - * @param array $args Arguments to affect display. + * @param array $args Arguments to affect display. * * @return string */ diff --git a/coauthors-functions.php b/coauthors-functions.php index a2e342f3..f5bc5cd0 100644 --- a/coauthors-functions.php +++ b/coauthors-functions.php @@ -7,42 +7,42 @@ * @since 1.0.7 */ -if ( ! function_exists('get_coauthors')) { +if (!function_exists('get_coauthors')) { function get_coauthors($post_id = 0) { return get_multiple_authors($post_id); } } -if ( ! function_exists('is_coauthors_for_post')) { +if (!function_exists('is_coauthors_for_post')) { function is_coauthors_for_post($user, $post_id = 0) { return is_multiple_author_for_post($user, $post_id); } } -if ( ! class_exists('Couthors_iterator')) { +if (!class_exists('Couthors_iterator')) { class Couthors_iterator extends Multiple_authors_iterator { } } -if ( ! function_exists('coauthors__echo')) { +if (!function_exists('coauthors__echo')) { function coauthors__echo($tag, $type = 'tag', $separators = [], $tag_args = null, $echo = true) { return multiple_authors__echo($tag, $type, $separators, $tag_args, $echo); } } -if ( ! function_exists('coauthors')) { +if (!function_exists('coauthors')) { function coauthors($between = null, $betweenLast = null, $before = null, $after = null, $echo = true) { return multiple_authors($between, $betweenLast, $before, $after, $echo); } } -if ( ! function_exists('coauthors_posts_links')) { +if (!function_exists('coauthors_posts_links')) { function coauthors_posts_links( $between = null, $betweenLast = null, @@ -54,84 +54,84 @@ function coauthors_posts_links( } } -if ( ! function_exists('coauthors_posts_links_single')) { +if (!function_exists('coauthors_posts_links_single')) { function coauthors_posts_links_single($author) { return multiple_authors_posts_links_single($author); } } -if ( ! function_exists('coauthors_firstnames')) { +if (!function_exists('coauthors_firstnames')) { function coauthors_firstnames($between = null, $betweenLast = null, $before = null, $after = null, $echo = true) { return multiple_authors_firstnames($between, $betweenLast, $before, $after, $echo); } } -if ( ! function_exists('coauthors_lastnames')) { +if (!function_exists('coauthors_lastnames')) { function coauthors_lastnames($between = null, $betweenLast = null, $before = null, $after = null, $echo = true) { return multiple_authors_lastnames($between, $betweenLast, $before, $after, $echo); } } -if ( ! function_exists('coauthors_nicknames')) { +if (!function_exists('coauthors_nicknames')) { function coauthors_nicknames($between = null, $betweenLast = null, $before = null, $after = null, $echo = true) { return multiple_authors_nicknames($between, $betweenLast, $before, $after, $echo); } } -if ( ! function_exists('coauthors_links')) { +if (!function_exists('coauthors_links')) { function coauthors_links($between = null, $betweenLast = null, $before = null, $after = null, $echo = true) { return multiple_authors_links($between, $betweenLast, $before, $after, $echo); } } -if ( ! function_exists('coauthors_emails')) { +if (!function_exists('coauthors_emails')) { function coauthors_emails($between = null, $betweenLast = null, $before = null, $after = null, $echo = true) { return multiple_authors_emails($between, $betweenLast, $before, $after, $echo); } } -if ( ! function_exists('coauthors_links_single')) { +if (!function_exists('coauthors_links_single')) { function coauthors_links_single($author) { return multiple_authors_links_single($author); } } -if ( ! function_exists('coauthors_ids')) { +if (!function_exists('coauthors_ids')) { function coauthors_ids($between = null, $betweenLast = null, $before = null, $after = null, $echo = true) { return multiple_authors_ids($between, $betweenLast, $before, $after, $echo); } } -if ( ! function_exists('get_the_coauthor_meta')) { +if (!function_exists('get_the_coauthor_meta')) { function get_the_coauthor_meta($field) { return get_the_multiple_author_meta($field); } } -if ( ! function_exists('the_coauthor_meta')) { +if (!function_exists('the_coauthor_meta')) { function the_coauthor_meta($field, $user_id = 0) { the_multiple_author_meta($field, $user_id); } } -if ( ! function_exists('coauthors_wp_list_authors')) { +if (!function_exists('coauthors_wp_list_authors')) { function coauthors_wp_list_authors($args) { return multiple_authors_wp_list_authors($args); } } -if ( ! function_exists('coauthors_get_avatar')) { +if (!function_exists('coauthors_get_avatar')) { function coauthors_get_avatar($coauthor, $size = 32, $default = '', $alt = false) { return multiple_authors_get_avatar($coauthor, $size, $default, $alt); diff --git a/composer.lock b/composer.lock index 09ac6273..b7c6fe4c 100644 --- a/composer.lock +++ b/composer.lock @@ -1,2917 +1,2917 @@ { - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "d772c4798f649be90a51419f3fbfc0ff", - "packages": [ - { - "name": "pimple/pimple", - "version": "v3.3.0", - "source": { - "type": "git", - "url": "https://github.com/silexphp/Pimple.git", - "reference": "e55d12f9d6a0e7f9c85992b73df1267f46279930" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/silexphp/Pimple/zipball/e55d12f9d6a0e7f9c85992b73df1267f46279930", - "reference": "e55d12f9d6a0e7f9c85992b73df1267f46279930", - "shasum": "" - }, - "require": { - "php": "^7.2.5", - "psr/container": "^1.0" - }, - "require-dev": { - "symfony/phpunit-bridge": "^3.4|^4.4|^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.3.x-dev" - } - }, - "autoload": { - "psr-0": { - "Pimple": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Pimple, a simple Dependency Injection Container", - "homepage": "https://pimple.symfony.com", - "keywords": [ - "container", - "dependency injection" - ], - "time": "2020-03-03T09:12:48+00:00" - }, + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "d772c4798f649be90a51419f3fbfc0ff", + "packages": [ + { + "name": "pimple/pimple", + "version": "v3.3.0", + "source": { + "type": "git", + "url": "https://github.com/silexphp/Pimple.git", + "reference": "e55d12f9d6a0e7f9c85992b73df1267f46279930" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/silexphp/Pimple/zipball/e55d12f9d6a0e7f9c85992b73df1267f46279930", + "reference": "e55d12f9d6a0e7f9c85992b73df1267f46279930", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "psr/container": "^1.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^3.4|^4.4|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3.x-dev" + } + }, + "autoload": { + "psr-0": { + "Pimple": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ { - "name": "psr/container", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "time": "2017-02-14T16:28:37+00:00" - }, + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Pimple, a simple Dependency Injection Container", + "homepage": "https://pimple.symfony.com", + "keywords": [ + "container", + "dependency injection" + ], + "time": "2020-03-03T09:12:48+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": "publishpress/wordpress-version-notices", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/publishpress/WordPress-Version-Notices.git", - "reference": "ba2b8eba33577d8c9351a9437e09af0e8f601a2c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/publishpress/WordPress-Version-Notices/zipball/ba2b8eba33577d8c9351a9437e09af0e8f601a2c", - "reference": "ba2b8eba33577d8c9351a9437e09af0e8f601a2c", - "shasum": "" - }, - "require": { - "php": ">=5.6.20", - "pimple/pimple": "^3" - }, - "require-dev": { - "lucatume/wp-browser": "^2.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "PPVersionNotices\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-3.0-or-later" - ], - "authors": [ - { - "name": "PublishPress", - "email": "help@publishpress.com", - "homepage": "https://publishpress.com", - "role": "Developer" - } - ], - "description": "Library for displaying version notices for Pro plugins in WordPress.", - "time": "2020-04-08T13:59:35+00:00" - }, + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "time": "2017-02-14T16:28:37+00:00" + }, + { + "name": "publishpress/wordpress-version-notices", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/publishpress/WordPress-Version-Notices.git", + "reference": "ba2b8eba33577d8c9351a9437e09af0e8f601a2c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/publishpress/WordPress-Version-Notices/zipball/ba2b8eba33577d8c9351a9437e09af0e8f601a2c", + "reference": "ba2b8eba33577d8c9351a9437e09af0e8f601a2c", + "shasum": "" + }, + "require": { + "php": ">=5.6.20", + "pimple/pimple": "^3" + }, + "require-dev": { + "lucatume/wp-browser": "^2.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "PPVersionNotices\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-3.0-or-later" + ], + "authors": [ { - "name": "symfony/polyfill-ctype", - "version": "v1.15.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/4719fa9c18b0464d399f1a63bf624b42b6fa8d14", - "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.15-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "time": "2020-02-27T09:26:54+00:00" + "name": "PublishPress", + "email": "help@publishpress.com", + "homepage": "https://publishpress.com", + "role": "Developer" + } + ], + "description": "Library for displaying version notices for Pro plugins in WordPress.", + "time": "2020-04-08T13:59:35+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.15.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/4719fa9c18b0464d399f1a63bf624b42b6fa8d14", + "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.15-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ { - "name": "twig/twig", - "version": "v1.37.1", - "source": { - "type": "git", - "url": "https://github.com/twigphp/Twig.git", - "reference": "66be9366c76cbf23e82e7171d47cbfa54a057a62" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/66be9366c76cbf23e82e7171d47cbfa54a057a62", - "reference": "66be9366c76cbf23e82e7171d47cbfa54a057a62", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "symfony/polyfill-ctype": "^1.8" - }, - "require-dev": { - "psr/container": "^1.0", - "symfony/debug": "^2.7", - "symfony/phpunit-bridge": "^3.4.19|^4.1.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.37-dev" - } - }, - "autoload": { - "psr-0": { - "Twig_": "lib/" - }, - "psr-4": { - "Twig\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com", - "homepage": "http://fabien.potencier.org", - "role": "Lead Developer" - }, - { - "name": "Armin Ronacher", - "email": "armin.ronacher@active-4.com", - "role": "Project Founder" - }, - { - "name": "Twig Team", - "homepage": "https://twig.symfony.com/contributors", - "role": "Contributors" - } - ], - "description": "Twig, the flexible, fast, and secure template language for PHP", - "homepage": "https://twig.symfony.com", - "keywords": [ - "templating" - ], - "time": "2019-01-14T14:59:29+00:00" - } - ], - "packages-dev": [ - { - "name": "alledia/wordpress-plugin-builder", - "version": "2.6.0", - "source": { - "type": "git", - "url": "https://github.com/publishpress/WordPress-Plugin-Builder.git", - "reference": "da97523122020232821c0798137be84cab0f2bca" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/publishpress/WordPress-Plugin-Builder/zipball/da97523122020232821c0798137be84cab0f2bca", - "reference": "da97523122020232821c0798137be84cab0f2bca", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Alledia\\Builder\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "PublishPress", - "email": "help@publishpress.com", - "homepage": "https://publishpress.com" - }, - { - "name": "Alledia", - "email": "help@alledia.com" - }, - { - "name": "UpStream", - "email": "help@upstream.com" - }, - { - "name": "Anderson Grudtner Martins", - "email": "anderson@grudtner.me", - "homepage": "http://anderson.grudtner.me", - "role": "Lead Developer" - } - ], - "description": "Base classes and Phing scripts for building WordPress plugins", - "keywords": [ - "builder", - "phing", - "plugin", - "wordpress" - ], - "time": "2020-02-18T17:05:49+00:00" + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" }, { - "name": "behat/behat", - "version": "v3.6.1", - "source": { - "type": "git", - "url": "https://github.com/Behat/Behat.git", - "reference": "9bfe195b4745c32e068af03fa4df9558b4916d30" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Behat/Behat/zipball/9bfe195b4745c32e068af03fa4df9558b4916d30", - "reference": "9bfe195b4745c32e068af03fa4df9558b4916d30", - "shasum": "" - }, - "require": { - "behat/gherkin": "^4.6.0", - "behat/transliterator": "^1.2", - "container-interop/container-interop": "^1.2", - "ext-mbstring": "*", - "php": ">=5.3.3", - "psr/container": "^1.0", - "symfony/config": "^2.7.51 || ^3.0 || ^4.0 || ^5.0", - "symfony/console": "^2.7.51 || ^2.8.33 || ^3.3.15 || ^3.4.3 || ^4.0.3 || ^5.0", - "symfony/dependency-injection": "^2.7.51 || ^3.0 || ^4.0 || ^5.0", - "symfony/event-dispatcher": "^2.7.51 || ^3.0 || ^4.0 || ^5.0", - "symfony/translation": "^2.7.51 || ^3.0 || ^4.0 || ^5.0", - "symfony/yaml": "^2.7.51 || ^3.0 || ^4.0 || ^5.0" - }, - "require-dev": { - "herrera-io/box": "~1.6.1", - "phpunit/phpunit": "^4.8.36 || ^6.3", - "symfony/process": "~2.5 || ^3.0 || ^4.0 || ^5.0" - }, - "suggest": { - "ext-dom": "Needed to output test results in JUnit format." - }, - "bin": [ - "bin/behat" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.6.x-dev" - } - }, - "autoload": { - "psr-4": { - "Behat\\Behat\\": "src/Behat/Behat/", - "Behat\\Testwork\\": "src/Behat/Testwork/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - } - ], - "description": "Scenario-oriented BDD framework for PHP 5.3", - "homepage": "http://behat.org/", - "keywords": [ - "Agile", - "BDD", - "ScenarioBDD", - "Scrum", - "StoryBDD", - "User story", - "business", - "development", - "documentation", - "examples", - "symfony", - "testing" - ], - "time": "2020-02-06T09:54:48+00:00" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "time": "2020-02-27T09:26:54+00:00" + }, + { + "name": "twig/twig", + "version": "v1.37.1", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "66be9366c76cbf23e82e7171d47cbfa54a057a62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/66be9366c76cbf23e82e7171d47cbfa54a057a62", + "reference": "66be9366c76cbf23e82e7171d47cbfa54a057a62", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "symfony/polyfill-ctype": "^1.8" + }, + "require-dev": { + "psr/container": "^1.0", + "symfony/debug": "^2.7", + "symfony/phpunit-bridge": "^3.4.19|^4.1.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.37-dev" + } + }, + "autoload": { + "psr-0": { + "Twig_": "lib/" }, + "psr-4": { + "Twig\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ { - "name": "behat/gherkin", - "version": "v4.6.2", - "source": { - "type": "git", - "url": "https://github.com/Behat/Gherkin.git", - "reference": "51ac4500c4dc30cbaaabcd2f25694299df666a31" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/51ac4500c4dc30cbaaabcd2f25694299df666a31", - "reference": "51ac4500c4dc30cbaaabcd2f25694299df666a31", - "shasum": "" - }, - "require": { - "php": ">=5.3.1" - }, - "require-dev": { - "phpunit/phpunit": "~4.5|~5", - "symfony/phpunit-bridge": "~2.7|~3|~4", - "symfony/yaml": "~2.3|~3|~4" - }, - "suggest": { - "symfony/yaml": "If you want to parse features, represented in YAML files" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.4-dev" - } - }, - "autoload": { - "psr-0": { - "Behat\\Gherkin": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - } - ], - "description": "Gherkin DSL parser for PHP 5.3", - "homepage": "http://behat.org/", - "keywords": [ - "BDD", - "Behat", - "Cucumber", - "DSL", - "gherkin", - "parser" - ], - "time": "2020-03-17T14:03:26+00:00" + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" }, { - "name": "behat/transliterator", - "version": "v1.3.0", - "source": { - "type": "git", - "url": "https://github.com/Behat/Transliterator.git", - "reference": "3c4ec1d77c3d05caa1f0bf8fb3aae4845005c7fc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Behat/Transliterator/zipball/3c4ec1d77c3d05caa1f0bf8fb3aae4845005c7fc", - "reference": "3c4ec1d77c3d05caa1f0bf8fb3aae4845005c7fc", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "chuyskywalker/rolling-curl": "^3.1", - "php-yaoi/php-yaoi": "^1.0", - "phpunit/phpunit": "^4.8.36|^6.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } - }, - "autoload": { - "psr-4": { - "Behat\\Transliterator\\": "src/Behat/Transliterator" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Artistic-1.0" - ], - "description": "String transliterator", - "keywords": [ - "i18n", - "slug", - "transliterator" - ], - "time": "2020-01-14T16:39:13+00:00" + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" }, { - "name": "container-interop/container-interop", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/container-interop/container-interop.git", - "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8", - "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8", - "shasum": "" - }, - "require": { - "psr/container": "^1.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Interop\\Container\\": "src/Interop/Container/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", - "homepage": "https://github.com/container-interop/container-interop", - "abandoned": "psr/container", - "time": "2017-02-14T19:40:03+00:00" + "name": "Twig Team", + "homepage": "https://twig.symfony.com/contributors", + "role": "Contributors" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "https://twig.symfony.com", + "keywords": [ + "templating" + ], + "time": "2019-01-14T14:59:29+00:00" + } + ], + "packages-dev": [ + { + "name": "alledia/wordpress-plugin-builder", + "version": "2.6.0", + "source": { + "type": "git", + "url": "https://github.com/publishpress/WordPress-Plugin-Builder.git", + "reference": "da97523122020232821c0798137be84cab0f2bca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/publishpress/WordPress-Plugin-Builder/zipball/da97523122020232821c0798137be84cab0f2bca", + "reference": "da97523122020232821c0798137be84cab0f2bca", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Alledia\\Builder\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "PublishPress", + "email": "help@publishpress.com", + "homepage": "https://publishpress.com" }, { - "name": "doctrine/instantiator", - "version": "1.3.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "ae466f726242e637cebdd526a7d991b9433bacf1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1", - "reference": "ae466f726242e637cebdd526a7d991b9433bacf1", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "require-dev": { - "doctrine/coding-standard": "^6.0", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.13", - "phpstan/phpstan-phpunit": "^0.11", - "phpstan/phpstan-shim": "^0.11", - "phpunit/phpunit": "^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "time": "2019-10-21T16:45:58+00:00" + "name": "Alledia", + "email": "help@alledia.com" }, { - "name": "myclabs/deep-copy", - "version": "1.9.5", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/b2c28789e80a97badd14145fda39b545d83ca3ef", - "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "replace": { - "myclabs/deep-copy": "self.version" - }, - "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, - "files": [ - "src/DeepCopy/deep_copy.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "time": "2020-01-17T21:11:47+00:00" + "name": "UpStream", + "email": "help@upstream.com" }, { - "name": "phar-io/manifest", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0", - "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-phar": "*", - "phar-io/version": "^1.0.1", - "php": "^5.6 || ^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "time": "2017-03-05T18:14:27+00:00" + "name": "Anderson Grudtner Martins", + "email": "anderson@grudtner.me", + "homepage": "http://anderson.grudtner.me", + "role": "Lead Developer" + } + ], + "description": "Base classes and Phing scripts for building WordPress plugins", + "keywords": [ + "builder", + "phing", + "plugin", + "wordpress" + ], + "time": "2020-02-18T17:05:49+00:00" + }, + { + "name": "behat/behat", + "version": "v3.6.1", + "source": { + "type": "git", + "url": "https://github.com/Behat/Behat.git", + "reference": "9bfe195b4745c32e068af03fa4df9558b4916d30" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Behat/Behat/zipball/9bfe195b4745c32e068af03fa4df9558b4916d30", + "reference": "9bfe195b4745c32e068af03fa4df9558b4916d30", + "shasum": "" + }, + "require": { + "behat/gherkin": "^4.6.0", + "behat/transliterator": "^1.2", + "container-interop/container-interop": "^1.2", + "ext-mbstring": "*", + "php": ">=5.3.3", + "psr/container": "^1.0", + "symfony/config": "^2.7.51 || ^3.0 || ^4.0 || ^5.0", + "symfony/console": "^2.7.51 || ^2.8.33 || ^3.3.15 || ^3.4.3 || ^4.0.3 || ^5.0", + "symfony/dependency-injection": "^2.7.51 || ^3.0 || ^4.0 || ^5.0", + "symfony/event-dispatcher": "^2.7.51 || ^3.0 || ^4.0 || ^5.0", + "symfony/translation": "^2.7.51 || ^3.0 || ^4.0 || ^5.0", + "symfony/yaml": "^2.7.51 || ^3.0 || ^4.0 || ^5.0" + }, + "require-dev": { + "herrera-io/box": "~1.6.1", + "phpunit/phpunit": "^4.8.36 || ^6.3", + "symfony/process": "~2.5 || ^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "ext-dom": "Needed to output test results in JUnit format." + }, + "bin": [ + "bin/behat" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.6.x-dev" + } + }, + "autoload": { + "psr-4": { + "Behat\\Behat\\": "src/Behat/Behat/", + "Behat\\Testwork\\": "src/Behat/Testwork/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + } + ], + "description": "Scenario-oriented BDD framework for PHP 5.3", + "homepage": "http://behat.org/", + "keywords": [ + "Agile", + "BDD", + "ScenarioBDD", + "Scrum", + "StoryBDD", + "User story", + "business", + "development", + "documentation", + "examples", + "symfony", + "testing" + ], + "time": "2020-02-06T09:54:48+00:00" + }, + { + "name": "behat/gherkin", + "version": "v4.6.2", + "source": { + "type": "git", + "url": "https://github.com/Behat/Gherkin.git", + "reference": "51ac4500c4dc30cbaaabcd2f25694299df666a31" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/51ac4500c4dc30cbaaabcd2f25694299df666a31", + "reference": "51ac4500c4dc30cbaaabcd2f25694299df666a31", + "shasum": "" + }, + "require": { + "php": ">=5.3.1" + }, + "require-dev": { + "phpunit/phpunit": "~4.5|~5", + "symfony/phpunit-bridge": "~2.7|~3|~4", + "symfony/yaml": "~2.3|~3|~4" + }, + "suggest": { + "symfony/yaml": "If you want to parse features, represented in YAML files" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-0": { + "Behat\\Gherkin": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + } + ], + "description": "Gherkin DSL parser for PHP 5.3", + "homepage": "http://behat.org/", + "keywords": [ + "BDD", + "Behat", + "Cucumber", + "DSL", + "gherkin", + "parser" + ], + "time": "2020-03-17T14:03:26+00:00" + }, + { + "name": "behat/transliterator", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/Behat/Transliterator.git", + "reference": "3c4ec1d77c3d05caa1f0bf8fb3aae4845005c7fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Behat/Transliterator/zipball/3c4ec1d77c3d05caa1f0bf8fb3aae4845005c7fc", + "reference": "3c4ec1d77c3d05caa1f0bf8fb3aae4845005c7fc", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "chuyskywalker/rolling-curl": "^3.1", + "php-yaoi/php-yaoi": "^1.0", + "phpunit/phpunit": "^4.8.36|^6.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "Behat\\Transliterator\\": "src/Behat/Transliterator" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Artistic-1.0" + ], + "description": "String transliterator", + "keywords": [ + "i18n", + "slug", + "transliterator" + ], + "time": "2020-01-14T16:39:13+00:00" + }, + { + "name": "container-interop/container-interop", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/container-interop/container-interop.git", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "shasum": "" + }, + "require": { + "psr/container": "^1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Interop\\Container\\": "src/Interop/Container/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", + "homepage": "https://github.com/container-interop/container-interop", + "abandoned": "psr/container", + "time": "2017-02-14T19:40:03+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "ae466f726242e637cebdd526a7d991b9433bacf1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1", + "reference": "ae466f726242e637cebdd526a7d991b9433bacf1", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.13", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-shim": "^0.11", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2019-10-21T16:45:58+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.9.5", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/b2c28789e80a97badd14145fda39b545d83ca3ef", + "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "replace": { + "myclabs/deep-copy": "self.version" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "time": "2020-01-17T21:11:47+00:00" + }, + { + "name": "phar-io/manifest", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0", + "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "phar-io/version": "^1.0.1", + "php": "^5.6 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ { - "name": "phar-io/version", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df", - "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "time": "2017-03-05T17:38:23+00:00" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" }, { - "name": "phing/phing", - "version": "2.16.3", - "source": { - "type": "git", - "url": "https://github.com/phingofficial/phing.git", - "reference": "b34c2bf9cd6abd39b4287dee31e68673784c8567" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phingofficial/phing/zipball/b34c2bf9cd6abd39b4287dee31e68673784c8567", - "reference": "b34c2bf9cd6abd39b4287dee31e68673784c8567", - "shasum": "" - }, - "require": { - "php": ">=5.2.0" - }, - "require-dev": { - "ext-pdo_sqlite": "*", - "mikey179/vfsstream": "^1.6", - "pdepend/pdepend": "2.x", - "pear/archive_tar": "1.4.x", - "pear/http_request2": "dev-trunk", - "pear/net_growl": "dev-trunk", - "pear/pear-core-minimal": "1.10.1", - "pear/versioncontrol_git": "@dev", - "pear/versioncontrol_svn": "~0.5", - "phpdocumentor/phpdocumentor": "2.x", - "phploc/phploc": "~2.0.6", - "phpmd/phpmd": "~2.2", - "phpunit/phpunit": ">=3.7", - "sebastian/git": "~1.0", - "sebastian/phpcpd": "2.x", - "siad007/versioncontrol_hg": "^1.0", - "simpletest/simpletest": "^1.1", - "squizlabs/php_codesniffer": "~2.2", - "symfony/yaml": "^2.8 || ^3.1 || ^4.0" - }, - "suggest": { - "pdepend/pdepend": "PHP version of JDepend", - "pear/archive_tar": "Tar file management class", - "pear/versioncontrol_git": "A library that provides OO interface to handle Git repository", - "pear/versioncontrol_svn": "A simple OO-style interface for Subversion, the free/open-source version control system", - "phpdocumentor/phpdocumentor": "Documentation Generator for PHP", - "phploc/phploc": "A tool for quickly measuring the size of a PHP project", - "phpmd/phpmd": "PHP version of PMD tool", - "phpunit/php-code-coverage": "Library that provides collection, processing, and rendering functionality for PHP code coverage information", - "phpunit/phpunit": "The PHP Unit Testing Framework", - "sebastian/phpcpd": "Copy/Paste Detector (CPD) for PHP code", - "siad007/versioncontrol_hg": "A library for interfacing with Mercurial repositories.", - "tedivm/jshrink": "Javascript Minifier built in PHP" - }, - "bin": [ - "bin/phing" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.16.x-dev" - } - }, - "autoload": { - "classmap": [ - "classes/phing/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "classes" - ], - "license": [ - "LGPL-3.0-only" - ], - "authors": [ - { - "name": "Michiel Rook", - "email": "mrook@php.net" - }, - { - "name": "Phing Community", - "homepage": "https://www.phing.info/trac/wiki/Development/Contributors" - } - ], - "description": "PHing Is Not GNU make; it's a PHP project build system or build tool based on Apache Ant.", - "homepage": "https://www.phing.info/", - "keywords": [ - "build", - "phing", - "task", - "tool" - ], - "time": "2020-02-03T18:50:54+00:00" + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" }, { - "name": "phpdocumentor/reflection-common", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/63a995caa1ca9e5590304cd845c15ad6d482a62a", - "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "phpunit/phpunit": "~6" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "time": "2018-08-07T13:53:10+00:00" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "time": "2017-03-05T18:14:27+00:00" + }, + { + "name": "phar-io/version", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df", + "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" }, { - "name": "phpdocumentor/reflection-docblock", - "version": "5.1.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", - "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", - "shasum": "" - }, - "require": { - "ext-filter": "^7.1", - "php": "^7.2", - "phpdocumentor/reflection-common": "^2.0", - "phpdocumentor/type-resolver": "^1.0", - "webmozart/assert": "^1" - }, - "require-dev": { - "doctrine/instantiator": "^1", - "mockery/mockery": "^1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "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.", - "time": "2020-02-22T12:28:44+00:00" + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" }, { - "name": "phpdocumentor/type-resolver", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "7462d5f123dfc080dfdf26897032a6513644fc95" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/7462d5f123dfc080dfdf26897032a6513644fc95", - "reference": "7462d5f123dfc080dfdf26897032a6513644fc95", - "shasum": "" - }, - "require": { - "php": "^7.2", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "^7.2", - "mockery/mockery": "~1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "time": "2020-02-18T18:59:58+00:00" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "time": "2017-03-05T17:38:23+00:00" + }, + { + "name": "phing/phing", + "version": "2.16.3", + "source": { + "type": "git", + "url": "https://github.com/phingofficial/phing.git", + "reference": "b34c2bf9cd6abd39b4287dee31e68673784c8567" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phingofficial/phing/zipball/b34c2bf9cd6abd39b4287dee31e68673784c8567", + "reference": "b34c2bf9cd6abd39b4287dee31e68673784c8567", + "shasum": "" + }, + "require": { + "php": ">=5.2.0" + }, + "require-dev": { + "ext-pdo_sqlite": "*", + "mikey179/vfsstream": "^1.6", + "pdepend/pdepend": "2.x", + "pear/archive_tar": "1.4.x", + "pear/http_request2": "dev-trunk", + "pear/net_growl": "dev-trunk", + "pear/pear-core-minimal": "1.10.1", + "pear/versioncontrol_git": "@dev", + "pear/versioncontrol_svn": "~0.5", + "phpdocumentor/phpdocumentor": "2.x", + "phploc/phploc": "~2.0.6", + "phpmd/phpmd": "~2.2", + "phpunit/phpunit": ">=3.7", + "sebastian/git": "~1.0", + "sebastian/phpcpd": "2.x", + "siad007/versioncontrol_hg": "^1.0", + "simpletest/simpletest": "^1.1", + "squizlabs/php_codesniffer": "~2.2", + "symfony/yaml": "^2.8 || ^3.1 || ^4.0" + }, + "suggest": { + "pdepend/pdepend": "PHP version of JDepend", + "pear/archive_tar": "Tar file management class", + "pear/versioncontrol_git": "A library that provides OO interface to handle Git repository", + "pear/versioncontrol_svn": "A simple OO-style interface for Subversion, the free/open-source version control system", + "phpdocumentor/phpdocumentor": "Documentation Generator for PHP", + "phploc/phploc": "A tool for quickly measuring the size of a PHP project", + "phpmd/phpmd": "PHP version of PMD tool", + "phpunit/php-code-coverage": "Library that provides collection, processing, and rendering functionality for PHP code coverage information", + "phpunit/phpunit": "The PHP Unit Testing Framework", + "sebastian/phpcpd": "Copy/Paste Detector (CPD) for PHP code", + "siad007/versioncontrol_hg": "A library for interfacing with Mercurial repositories.", + "tedivm/jshrink": "Javascript Minifier built in PHP" + }, + "bin": [ + "bin/phing" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.16.x-dev" + } + }, + "autoload": { + "classmap": [ + "classes/phing/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "classes" + ], + "license": [ + "LGPL-3.0-only" + ], + "authors": [ + { + "name": "Michiel Rook", + "email": "mrook@php.net" }, { - "name": "phpspec/prophecy", - "version": "v1.10.3", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "451c3cd1418cf640de218914901e51b064abb093" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", - "reference": "451c3cd1418cf640de218914901e51b064abb093", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", - "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", - "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^2.5 || ^3.2", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "time": "2020-03-05T15:02:03+00:00" + "name": "Phing Community", + "homepage": "https://www.phing.info/trac/wiki/Development/Contributors" + } + ], + "description": "PHing Is Not GNU make; it's a PHP project build system or build tool based on Apache Ant.", + "homepage": "https://www.phing.info/", + "keywords": [ + "build", + "phing", + "task", + "tool" + ], + "time": "2020-02-03T18:50:54+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/63a995caa1ca9e5590304cd845c15ad6d482a62a", + "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "phpunit/phpunit": "~6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2018-08-07T13:53:10+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", + "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", + "shasum": "" + }, + "require": { + "ext-filter": "^7.1", + "php": "^7.2", + "phpdocumentor/reflection-common": "^2.0", + "phpdocumentor/type-resolver": "^1.0", + "webmozart/assert": "^1" + }, + "require-dev": { + "doctrine/instantiator": "^1", + "mockery/mockery": "^1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" }, { - "name": "phpunit/php-code-coverage", - "version": "5.3.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "c89677919c5dd6d3b3852f230a663118762218ac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c89677919c5dd6d3b3852f230a663118762218ac", - "reference": "c89677919c5dd6d3b3852f230a663118762218ac", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-xmlwriter": "*", - "php": "^7.0", - "phpunit/php-file-iterator": "^1.4.2", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^2.0.1", - "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^3.0", - "sebastian/version": "^2.0.1", - "theseer/tokenizer": "^1.1" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "suggest": { - "ext-xdebug": "^2.5.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.3.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "time": "2018-04-06T15:36:58+00:00" + "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.", + "time": "2020-02-22T12:28:44+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "7462d5f123dfc080dfdf26897032a6513644fc95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/7462d5f123dfc080dfdf26897032a6513644fc95", + "reference": "7462d5f123dfc080dfdf26897032a6513644fc95", + "shasum": "" + }, + "require": { + "php": "^7.2", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "^7.2", + "mockery/mockery": "~1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "time": "2020-02-18T18:59:58+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "v1.10.3", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "451c3cd1418cf640de218914901e51b064abb093" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", + "reference": "451c3cd1418cf640de218914901e51b064abb093", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", + "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5 || ^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Prophecy\\": "src/Prophecy" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" }, { - "name": "phpunit/php-file-iterator", - "version": "1.4.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", - "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.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": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "time": "2017-11-27T13:52:08+00:00" + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2020-03-05T15:02:03+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "5.3.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "c89677919c5dd6d3b3852f230a663118762218ac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c89677919c5dd6d3b3852f230a663118762218ac", + "reference": "c89677919c5dd6d3b3852f230a663118762218ac", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^7.0", + "phpunit/php-file-iterator": "^1.4.2", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-token-stream": "^2.0.1", + "sebastian/code-unit-reverse-lookup": "^1.0.1", + "sebastian/environment": "^3.0", + "sebastian/version": "^2.0.1", + "theseer/tokenizer": "^1.1" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "suggest": { + "ext-xdebug": "^2.5.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2018-04-06T15:36:58+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.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": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2017-11-27T13:52:08+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21T13:50:34+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.9", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-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": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2017-02-26T11:10:40+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "791198a2c6254db10131eecfe8c06670700904db" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", + "reference": "791198a2c6254db10131eecfe8c06670700904db", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2017-11-27T05:48:46+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "6.5.14", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bac23fe7ff13dbdb461481f706f0e9fe746334b7", + "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "myclabs/deep-copy": "^1.6.1", + "phar-io/manifest": "^1.0.1", + "phar-io/version": "^1.0", + "php": "^7.0", + "phpspec/prophecy": "^1.7", + "phpunit/php-code-coverage": "^5.3", + "phpunit/php-file-iterator": "^1.4.3", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-timer": "^1.0.9", + "phpunit/phpunit-mock-objects": "^5.0.9", + "sebastian/comparator": "^2.1", + "sebastian/diff": "^2.0", + "sebastian/environment": "^3.1", + "sebastian/exporter": "^3.1", + "sebastian/global-state": "^2.0", + "sebastian/object-enumerator": "^3.0.3", + "sebastian/resource-operations": "^1.0", + "sebastian/version": "^2.0.1" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "3.0.2", + "phpunit/dbunit": "<3.0" + }, + "require-dev": { + "ext-pdo": "*" + }, + "suggest": { + "ext-xdebug": "*", + "phpunit/php-invoker": "^1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.5.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2019-02-01T05:22:47+00:00" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "5.0.10", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/cd1cf05c553ecfec36b170070573e540b67d3f1f", + "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.5", + "php": "^7.0", + "phpunit/php-text-template": "^1.2.1", + "sebastian/exporter": "^3.1" + }, + "conflict": { + "phpunit/phpunit": "<6.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.5.11" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "abandoned": true, + "time": "2018-08-09T05:50:03+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "time": "2017-03-04T06:30:41+00:00" + }, + { + "name": "sebastian/comparator", + "version": "2.1.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/34369daee48eafb2651bea869b4b15d75ccc35f9", + "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9", + "shasum": "" + }, + "require": { + "php": "^7.0", + "sebastian/diff": "^2.0 || ^3.0", + "sebastian/exporter": "^3.1" + }, + "require-dev": { + "phpunit/phpunit": "^6.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" }, { - "name": "phpunit/php-text-template", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "time": "2015-06-21T13:50:34+00:00" + "name": "Volker Dusch", + "email": "github@wallbash.com" }, { - "name": "phpunit/php-timer", - "version": "1.0.9", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-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": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "time": "2017-02-26T11:10:40+00:00" + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" }, { - "name": "phpunit/php-token-stream", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "791198a2c6254db10131eecfe8c06670700904db" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", - "reference": "791198a2c6254db10131eecfe8c06670700904db", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.2.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", - "keywords": [ - "tokenizer" - ], - "time": "2017-11-27T05:48:46+00:00" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2018-02-01T13:46:46+00:00" + }, + { + "name": "sebastian/diff", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", + "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" }, { - "name": "phpunit/phpunit", - "version": "6.5.14", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bac23fe7ff13dbdb461481f706f0e9fe746334b7", - "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "myclabs/deep-copy": "^1.6.1", - "phar-io/manifest": "^1.0.1", - "phar-io/version": "^1.0", - "php": "^7.0", - "phpspec/prophecy": "^1.7", - "phpunit/php-code-coverage": "^5.3", - "phpunit/php-file-iterator": "^1.4.3", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^1.0.9", - "phpunit/phpunit-mock-objects": "^5.0.9", - "sebastian/comparator": "^2.1", - "sebastian/diff": "^2.0", - "sebastian/environment": "^3.1", - "sebastian/exporter": "^3.1", - "sebastian/global-state": "^2.0", - "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^1.0", - "sebastian/version": "^2.0.1" - }, - "conflict": { - "phpdocumentor/reflection-docblock": "3.0.2", - "phpunit/dbunit": "<3.0" - }, - "require-dev": { - "ext-pdo": "*" - }, - "suggest": { - "ext-xdebug": "*", - "phpunit/php-invoker": "^1.1" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.5.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "time": "2019-02-01T05:22:47+00:00" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "time": "2017-08-03T08:09:46+00:00" + }, + { + "name": "sebastian/environment", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", + "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2017-07-01T08:51:00+00:00" + }, + { + "name": "sebastian/exporter", + "version": "3.1.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e", + "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e", + "shasum": "" + }, + "require": { + "php": "^7.0", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" }, { - "name": "phpunit/phpunit-mock-objects", - "version": "5.0.10", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/cd1cf05c553ecfec36b170070573e540b67d3f1f", - "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.5", - "php": "^7.0", - "phpunit/php-text-template": "^1.2.1", - "sebastian/exporter": "^3.1" - }, - "conflict": { - "phpunit/phpunit": "<6.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.5.11" - }, - "suggest": { - "ext-soap": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", - "keywords": [ - "mock", - "xunit" - ], - "abandoned": true, - "time": "2018-08-09T05:50:03+00:00" + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" }, { - "name": "psr/event-dispatcher", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\EventDispatcher\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Standard interfaces for event handling.", - "keywords": [ - "events", - "psr", - "psr-14" - ], - "time": "2019-01-08T18:20:26+00:00" + "name": "Volker Dusch", + "email": "github@wallbash.com" }, { - "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2017-03-04T06:30:41+00:00" + "name": "Adam Harvey", + "email": "aharvey@php.net" }, { - "name": "sebastian/comparator", - "version": "2.1.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/34369daee48eafb2651bea869b4b15d75ccc35f9", - "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9", - "shasum": "" - }, - "require": { - "php": "^7.0", - "sebastian/diff": "^2.0 || ^3.0", - "sebastian/exporter": "^3.1" - }, - "require-dev": { - "phpunit/phpunit": "^6.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "time": "2018-02-01T13:46:46+00:00" + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2019-09-14T09:02:43+00:00" + }, + { + "name": "sebastian/global-state", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2017-04-27T15:39:26+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "shasum": "" + }, + "require": { + "php": "^7.0", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "time": "2017-08-03T12:35:26+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "773f97c67f28de00d397be301821b06708fca0be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", + "reference": "773f97c67f28de00d397be301821b06708fca0be", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "time": "2017-03-29T09:07:27+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" }, { - "name": "sebastian/diff", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", - "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff" - ], - "time": "2017-08-03T08:09:46+00:00" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" }, { - "name": "sebastian/environment", - "version": "3.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", - "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "time": "2017-07-01T08:51:00+00:00" + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2017-03-03T06:23:57+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "shasum": "" + }, + "require": { + "php": ">=5.6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "time": "2015-07-28T20:34:47+00:00" + }, + { + "name": "sebastian/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2016-10-03T07:35:21+00:00" + }, + { + "name": "symfony/config", + "version": "v5.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "3e633c31a34738f7f4ed7a225c43fc45ca74c986" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/3e633c31a34738f7f4ed7a225c43fc45ca74c986", + "reference": "3e633c31a34738f7f4ed7a225c43fc45ca74c986", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/filesystem": "^4.4|^5.0", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/finder": "<4.4" + }, + "require-dev": { + "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" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ { - "name": "sebastian/exporter", - "version": "3.1.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e", - "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e", - "shasum": "" - }, - "require": { - "php": "^7.0", - "sebastian/recursion-context": "^3.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "time": "2019-09-14T09:02:43+00:00" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "sebastian/global-state", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "time": "2017-04-27T15:39:26+00:00" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Config Component", + "homepage": "https://symfony.com", + "time": "2020-03-27T16:56:45+00:00" + }, + { + "name": "symfony/console", + "version": "v5.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "5fa1caadc8cdaa17bcfb25219f3b53fe294a9935" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/5fa1caadc8cdaa17bcfb25219f3b53fe294a9935", + "reference": "5fa1caadc8cdaa17bcfb25219f3b53fe294a9935", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/service-contracts": "^1.1|^2" + }, + "conflict": { + "symfony/dependency-injection": "<4.4", + "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": "^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", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ { - "name": "sebastian/object-enumerator", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", - "shasum": "" - }, - "require": { - "php": "^7.0", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2017-08-03T12:35:26+00:00" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "sebastian/object-reflector", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "773f97c67f28de00d397be301821b06708fca0be" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", - "reference": "773f97c67f28de00d397be301821b06708fca0be", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "time": "2017-03-29T09:07:27+00:00" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2020-03-30T11:42:42+00:00" + }, + { + "name": "symfony/dependency-injection", + "version": "v5.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "4e48dc44680d8efa357410c78093a04753196981" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/4e48dc44680d8efa357410c78093a04753196981", + "reference": "4e48dc44680d8efa357410c78093a04753196981", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "psr/container": "^1.0", + "symfony/service-contracts": "^1.1.6|^2" + }, + "conflict": { + "symfony/config": "<5.0", + "symfony/finder": "<4.4", + "symfony/proxy-manager-bridge": "<4.4", + "symfony/yaml": "<4.4" + }, + "provide": { + "psr/container-implementation": "1.0", + "symfony/service-implementation": "1.0" + }, + "require-dev": { + "symfony/config": "^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0" + }, + "suggest": { + "symfony/config": "", + "symfony/expression-language": "For using expressions in service container configuration", + "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", + "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", + "symfony/yaml": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\DependencyInjection\\": "" }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ { - "name": "sebastian/recursion-context", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2017-03-03T06:23:57+00:00" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "sebastian/resource-operations", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", - "shasum": "" - }, - "require": { - "php": ">=5.6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2015-07-28T20:34:47+00:00" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony DependencyInjection Component", + "homepage": "https://symfony.com", + "time": "2020-03-30T11:42:42+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v5.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "24f40d95385774ed5c71dbf014edd047e2f2f3dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/24f40d95385774ed5c71dbf014edd047e2f2f3dc", + "reference": "24f40d95385774ed5c71dbf014edd047e2f2f3dc", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/event-dispatcher-contracts": "^2" + }, + "conflict": { + "symfony/dependency-injection": "<4.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^4.4|^5.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ { - "name": "sebastian/version", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "time": "2016-10-03T07:35:21+00:00" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "symfony/config", - "version": "v5.0.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/config.git", - "reference": "3e633c31a34738f7f4ed7a225c43fc45ca74c986" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/3e633c31a34738f7f4ed7a225c43fc45ca74c986", - "reference": "3e633c31a34738f7f4ed7a225c43fc45ca74c986", - "shasum": "" - }, - "require": { - "php": "^7.2.5", - "symfony/filesystem": "^4.4|^5.0", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/finder": "<4.4" - }, - "require-dev": { - "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" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Config\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Config Component", - "homepage": "https://symfony.com", - "time": "2020-03-27T16:56:45+00:00" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "time": "2020-03-27T16:56:45+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "af23c2584d4577d54661c434446fb8fbed6025dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/af23c2584d4577d54661c434446fb8fbed6025dd", + "reference": "af23c2584d4577d54661c434446fb8fbed6025dd", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "symfony/console", - "version": "v5.0.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "5fa1caadc8cdaa17bcfb25219f3b53fe294a9935" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/5fa1caadc8cdaa17bcfb25219f3b53fe294a9935", - "reference": "5fa1caadc8cdaa17bcfb25219f3b53fe294a9935", - "shasum": "" - }, - "require": { - "php": "^7.2.5", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8", - "symfony/service-contracts": "^1.1|^2" - }, - "conflict": { - "symfony/dependency-injection": "<4.4", - "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": "^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", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Console Component", - "homepage": "https://symfony.com", - "time": "2020-03-30T11:42:42+00:00" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-11-18T17:27:11+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v5.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "ca3b87dd09fff9b771731637f5379965fbfab420" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/ca3b87dd09fff9b771731637f5379965fbfab420", + "reference": "ca3b87dd09fff9b771731637f5379965fbfab420", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/polyfill-ctype": "~1.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ { - "name": "symfony/dependency-injection", - "version": "v5.0.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/dependency-injection.git", - "reference": "4e48dc44680d8efa357410c78093a04753196981" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/4e48dc44680d8efa357410c78093a04753196981", - "reference": "4e48dc44680d8efa357410c78093a04753196981", - "shasum": "" - }, - "require": { - "php": "^7.2.5", - "psr/container": "^1.0", - "symfony/service-contracts": "^1.1.6|^2" - }, - "conflict": { - "symfony/config": "<5.0", - "symfony/finder": "<4.4", - "symfony/proxy-manager-bridge": "<4.4", - "symfony/yaml": "<4.4" - }, - "provide": { - "psr/container-implementation": "1.0", - "symfony/service-implementation": "1.0" - }, - "require-dev": { - "symfony/config": "^5.0", - "symfony/expression-language": "^4.4|^5.0", - "symfony/yaml": "^4.4|^5.0" - }, - "suggest": { - "symfony/config": "", - "symfony/expression-language": "For using expressions in service container configuration", - "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", - "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", - "symfony/yaml": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\DependencyInjection\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony DependencyInjection Component", - "homepage": "https://symfony.com", - "time": "2020-03-30T11:42:42+00:00" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "symfony/event-dispatcher", - "version": "v5.0.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "24f40d95385774ed5c71dbf014edd047e2f2f3dc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/24f40d95385774ed5c71dbf014edd047e2f2f3dc", - "reference": "24f40d95385774ed5c71dbf014edd047e2f2f3dc", - "shasum": "" - }, - "require": { - "php": "^7.2.5", - "symfony/event-dispatcher-contracts": "^2" - }, - "conflict": { - "symfony/dependency-injection": "<4.4" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/expression-language": "^4.4|^5.0", - "symfony/http-foundation": "^4.4|^5.0", - "symfony/service-contracts": "^1.1|^2", - "symfony/stopwatch": "^4.4|^5.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony EventDispatcher Component", - "homepage": "https://symfony.com", - "time": "2020-03-27T16:56:45+00:00" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "time": "2020-03-27T16:56:45+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.15.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/81ffd3a9c6d707be22e3012b827de1c9775fc5ac", + "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.15-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ { - "name": "symfony/event-dispatcher-contracts", - "version": "v2.0.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "af23c2584d4577d54661c434446fb8fbed6025dd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/af23c2584d4577d54661c434446fb8fbed6025dd", - "reference": "af23c2584d4577d54661c434446fb8fbed6025dd", - "shasum": "" - }, - "require": { - "php": "^7.2.5", - "psr/event-dispatcher": "^1" - }, - "suggest": { - "symfony/event-dispatcher-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to dispatching event", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "time": "2019-11-18T17:27:11+00:00" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "symfony/filesystem", - "version": "v5.0.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "ca3b87dd09fff9b771731637f5379965fbfab420" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/ca3b87dd09fff9b771731637f5379965fbfab420", - "reference": "ca3b87dd09fff9b771731637f5379965fbfab420", - "shasum": "" - }, - "require": { - "php": "^7.2.5", - "symfony/polyfill-ctype": "~1.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Filesystem Component", - "homepage": "https://symfony.com", - "time": "2020-03-27T16:56:45+00:00" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2020-03-09T19:04:49+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.15.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7", + "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.15-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ { - "name": "symfony/polyfill-mbstring", - "version": "v1.15.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/81ffd3a9c6d707be22e3012b827de1c9775fc5ac", - "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.15-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "time": "2020-03-09T19:04:49+00:00" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "symfony/polyfill-php73", - "version": "v1.15.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7", - "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.15-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "time": "2020-02-27T09:26:54+00:00" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2020-02-27T09:26:54+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "144c5e51266b281231e947b51223ba14acf1a749" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/144c5e51266b281231e947b51223ba14acf1a749", + "reference": "144c5e51266b281231e947b51223ba14acf1a749", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "psr/container": "^1.0" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "symfony/service-contracts", - "version": "v2.0.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "144c5e51266b281231e947b51223ba14acf1a749" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/144c5e51266b281231e947b51223ba14acf1a749", - "reference": "144c5e51266b281231e947b51223ba14acf1a749", - "shasum": "" - }, - "require": { - "php": "^7.2.5", - "psr/container": "^1.0" - }, - "suggest": { - "symfony/service-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "time": "2019-11-18T17:27:11+00:00" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-11-18T17:27:11+00:00" + }, + { + "name": "symfony/translation", + "version": "v5.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "99b831770e10807dca0979518e2c89edffef5978" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/99b831770e10807dca0979518e2c89edffef5978", + "reference": "99b831770e10807dca0979518e2c89edffef5978", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2" + }, + "conflict": { + "symfony/config": "<4.4", + "symfony/dependency-injection": "<5.0", + "symfony/http-kernel": "<5.0", + "symfony/twig-bundle": "<5.0", + "symfony/yaml": "<4.4" + }, + "provide": { + "symfony/translation-implementation": "2.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/dependency-injection": "^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/http-kernel": "^5.0", + "symfony/intl": "^4.4|^5.0", + "symfony/service-contracts": "^1.1.2|^2", + "symfony/yaml": "^4.4|^5.0" + }, + "suggest": { + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Translation\\": "" }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ { - "name": "symfony/translation", - "version": "v5.0.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "99b831770e10807dca0979518e2c89edffef5978" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/99b831770e10807dca0979518e2c89edffef5978", - "reference": "99b831770e10807dca0979518e2c89edffef5978", - "shasum": "" - }, - "require": { - "php": "^7.2.5", - "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^2" - }, - "conflict": { - "symfony/config": "<4.4", - "symfony/dependency-injection": "<5.0", - "symfony/http-kernel": "<5.0", - "symfony/twig-bundle": "<5.0", - "symfony/yaml": "<4.4" - }, - "provide": { - "symfony/translation-implementation": "2.0" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^4.4|^5.0", - "symfony/console": "^4.4|^5.0", - "symfony/dependency-injection": "^5.0", - "symfony/finder": "^4.4|^5.0", - "symfony/http-kernel": "^5.0", - "symfony/intl": "^4.4|^5.0", - "symfony/service-contracts": "^1.1.2|^2", - "symfony/yaml": "^4.4|^5.0" - }, - "suggest": { - "psr/log-implementation": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Translation Component", - "homepage": "https://symfony.com", - "time": "2020-03-27T16:56:45+00:00" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "symfony/translation-contracts", - "version": "v2.0.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation-contracts.git", - "reference": "8cc682ac458d75557203b2f2f14b0b92e1c744ed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/8cc682ac458d75557203b2f2f14b0b92e1c744ed", - "reference": "8cc682ac458d75557203b2f2f14b0b92e1c744ed", - "shasum": "" - }, - "require": { - "php": "^7.2.5" - }, - "suggest": { - "symfony/translation-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Translation\\": "" - } - }, - "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 translation", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "time": "2019-11-18T17:27:11+00:00" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Translation Component", + "homepage": "https://symfony.com", + "time": "2020-03-27T16:56:45+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "8cc682ac458d75557203b2f2f14b0b92e1c744ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/8cc682ac458d75557203b2f2f14b0b92e1c744ed", + "reference": "8cc682ac458d75557203b2f2f14b0b92e1c744ed", + "shasum": "" + }, + "require": { + "php": "^7.2.5" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "symfony/yaml", - "version": "v5.0.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "ad5e9c83ade5bbb3a96a3f30588a0622708caefd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/ad5e9c83ade5bbb3a96a3f30588a0622708caefd", - "reference": "ad5e9c83ade5bbb3a96a3f30588a0622708caefd", - "shasum": "" - }, - "require": { - "php": "^7.2.5", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/console": "<4.4" - }, - "require-dev": { - "symfony/console": "^4.4|^5.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com", - "time": "2020-03-30T11:42:42+00:00" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-11-18T17:27:11+00:00" + }, + { + "name": "symfony/yaml", + "version": "v5.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "ad5e9c83ade5bbb3a96a3f30588a0622708caefd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/ad5e9c83ade5bbb3a96a3f30588a0622708caefd", + "reference": "ad5e9c83ade5bbb3a96a3f30588a0622708caefd", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/console": "<4.4" + }, + "require-dev": { + "symfony/console": "^4.4|^5.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ { - "name": "theseer/tokenizer", - "version": "1.1.3", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", - "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "time": "2019-06-13T22:48:21+00:00" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "webmozart/assert", - "version": "1.7.0", - "source": { - "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "aed98a490f9a8f78468232db345ab9cf606cf598" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/aed98a490f9a8f78468232db345ab9cf606cf598", - "reference": "aed98a490f9a8f78468232db345ab9cf606cf598", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "vimeo/psalm": "<3.6.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^7.5.13" - }, - "type": "library", - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "time": "2020-02-14T12:15:55+00:00" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": ">=5.6.20" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2020-03-30T11:42:42+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "time": "2019-06-13T22:48:21+00:00" }, - "platform-dev": [] + { + "name": "webmozart/assert", + "version": "1.7.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "aed98a490f9a8f78468232db345ab9cf606cf598" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/aed98a490f9a8f78468232db345ab9cf606cf598", + "reference": "aed98a490f9a8f78468232db345ab9cf606cf598", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "vimeo/psalm": "<3.6.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36 || ^7.5.13" + }, + "type": "library", + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2020-02-14T12:15:55+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.6.20" + }, + "platform-dev": [] } diff --git a/core/Classes/Admin_Ajax.php b/core/Classes/Admin_Ajax.php index 59009492..52b802a2 100644 --- a/core/Classes/Admin_Ajax.php +++ b/core/Classes/Admin_Ajax.php @@ -29,12 +29,12 @@ public static function handle_authors_search() header('Content-Type: application/javascript'); if (empty($_GET['nonce']) - || ! wp_verify_nonce($_GET['nonce'], 'authors-search')) { + || !wp_verify_nonce($_GET['nonce'], 'authors-search')) { exit; } - $search = ! empty($_GET['q']) ? sanitize_text_field($_GET['q']) : ''; - $ignored = ! empty($_GET['ignored']) ? array_map('sanitize_text_field', $_GET['ignored']) : []; + $search = !empty($_GET['q']) ? sanitize_text_field($_GET['q']) : ''; + $ignored = !empty($_GET['ignored']) ? array_map('sanitize_text_field', $_GET['ignored']) : []; $authors = self::get_possible_authors_for_search($search, $ignored); $response = [ 'results' => $authors, @@ -43,6 +43,70 @@ public static function handle_authors_search() exit; } + /** + * Get the possible authors for a given search query. + * + * @param string $search Search query. + * @param array $ignored Any authors that should be ignored. + * + * @return array + */ + public static function get_possible_authors_for_search($search, $ignored = []) + { + $authors = []; + $term_args = [ + 'taxonomy' => 'author', + 'hide_empty' => false, + 'number' => 20, + ]; + if (!empty($search)) { + $term_args['search'] = $search; + } + if (!empty($ignored)) { + $term_args['exclude'] = []; + $ignored_users = []; + foreach ($ignored as $val) { + if (is_numeric($val)) { + $term_args['exclude'][] = (int)$val; + $user_id = get_term_meta($val, 'user_id', true); + if ($user_id) { + $ignored_users[] = 'u' . $user_id; + } + } + } + $ignored = array_merge($ignored, $ignored_users); + } + $terms = get_terms($term_args); + if ($terms && !is_wp_error($terms)) { + foreach ($terms as $term) { + $author = Author::get_by_term_id($term->term_id); + $authors[] = [ + // Select2 specific. + 'id' => (int)$term->term_id, + 'text' => $term->name, + // Bylines specific. + 'term' => (int)$term->term_id, + 'display_name' => $term->name, + 'user_id' => $author->user_id, + 'avatar' => $author->get_avatar(20), + ]; + if ($author->user_id) { + $ignored[] = 'u' . $author->user_id; + } + } + } + + // Sort alphabetically by display name. + usort( + $authors, + function ($a, $b) { + return strcmp($a['display_name'], $b['display_name']); + } + ); + + return $authors; + } + /** * Handle an ajax request to search available users */ @@ -51,14 +115,14 @@ public static function handle_users_search() header('Content-Type: application/javascript'); if (empty($_GET['nonce']) - || ! wp_verify_nonce($_GET['nonce'], 'authors-user-search')) { + || !wp_verify_nonce($_GET['nonce'], 'authors-user-search')) { exit; } $user_args = [ 'number' => 20, ]; - if ( ! empty($_GET['q'])) { + if (!empty($_GET['q'])) { $user_args['search'] = sanitize_text_field('*' . $_GET['q'] . '*'); } $users = get_users($user_args); @@ -83,7 +147,7 @@ public static function handle_author_create_from_user() { if (empty($_GET['nonce']) || empty($_GET['user_id']) - || ! wp_verify_nonce($_GET['nonce'], 'author_create_from_user' . $_GET['user_id'])) { + || !wp_verify_nonce($_GET['nonce'], 'author_create_from_user' . $_GET['user_id'])) { exit; } @@ -104,7 +168,7 @@ public static function handle_author_get_user_data() { if (empty($_GET['nonce']) || empty($_GET['user_id']) - || ! wp_verify_nonce($_GET['nonce'], 'author_get_user_data_nonce')) { + || !wp_verify_nonce($_GET['nonce'], 'author_get_user_data_nonce')) { exit; } @@ -124,67 +188,4 @@ public static function handle_author_get_user_data() echo wp_json_encode($response); exit; } - - /** - * Get the possible authors for a given search query. - * - * @param string $search Search query. - * @param array $ignored Any authors that should be ignored. - * - * @return array - */ - public static function get_possible_authors_for_search($search, $ignored = []) - { - $authors = []; - $term_args = [ - 'taxonomy' => 'author', - 'hide_empty' => false, - 'number' => 20, - ]; - if ( ! empty($search)) { - $term_args['search'] = $search; - } - if ( ! empty($ignored)) { - $term_args['exclude'] = []; - $ignored_users = []; - foreach ($ignored as $val) { - if (is_numeric($val)) { - $term_args['exclude'][] = (int)$val; - $user_id = get_term_meta($val, 'user_id', true); - if ($user_id) { - $ignored_users[] = 'u' . $user_id; - } - } - } - $ignored = array_merge($ignored, $ignored_users); - } - $terms = get_terms($term_args); - if ($terms && ! is_wp_error($terms)) { - foreach ($terms as $term) { - $author = Author::get_by_term_id($term->term_id); - $authors[] = [ - // Select2 specific. - 'id' => (int)$term->term_id, - 'text' => $term->name, - // Bylines specific. - 'term' => (int)$term->term_id, - 'display_name' => $term->name, - 'user_id' => $author->user_id, - 'avatar' => $author->get_avatar(20), - ]; - if ($author->user_id) { - $ignored[] = 'u' . $author->user_id; - } - } - } - - // Sort alphabetically by display name. - usort( - $authors, function ($a, $b) { - return strcmp($a['display_name'], $b['display_name']); - } - ); - - return $authors; - } } diff --git a/core/Classes/Author_Editor.php b/core/Classes/Author_Editor.php index c3875197..8badd756 100644 --- a/core/Classes/Author_Editor.php +++ b/core/Classes/Author_Editor.php @@ -372,7 +372,7 @@ class="authors-select2-user-select" name="" style=" /** * Handle saving of term meta * - * @param integer $term_id ID for the term being edited. + * @param int $term_id ID for the term being edited. */ public static function action_edited_author($term_id) { diff --git a/core/Classes/Authors_Iterator.php b/core/Classes/Authors_Iterator.php index 58cd32f0..dba118b9 100644 --- a/core/Classes/Authors_Iterator.php +++ b/core/Classes/Authors_Iterator.php @@ -21,15 +21,19 @@ public function __construct($postID = 0, $archive = false) { global $post, $authordata; - if ( ! $archive) { + if (!$archive) { $postID = (int)$postID; - if ( ! $postID && $post) { + if (!$postID && $post) { $postID = (int)$post->ID; } - if ( ! $postID) { - trigger_error(esc_html__('No post ID provided for Multiple_authors_iterator constructor. Are you not in a loop or is $post not set?', - 'publishpress-authors')); // return null; + if (!$postID) { + trigger_error( + esc_html__( + 'No post ID provided for Multiple_authors_iterator constructor. Are you not in a loop or is $post not set?', + 'publishpress-authors' + ) + ); // return null; } } else { $postID = 0; @@ -55,7 +59,7 @@ public function iterate() } //At the beginning of the loop - if (0 === $this->position && ! empty($authordata)) { + if (0 === $this->position && !empty($authordata)) { $this->original_authordata = $authordata; } diff --git a/core/Classes/CLI.php b/core/Classes/CLI.php index 7a537ddb..8658ff56 100644 --- a/core/Classes/CLI.php +++ b/core/Classes/CLI.php @@ -37,7 +37,6 @@ class CLI */ public function convert_coauthor($args, $assoc_args) { - if (empty($GLOBALS['coauthors_plus'])) { WP_CLI::error('Co-Authors Plus must be installed and active.'); } @@ -94,7 +93,6 @@ public function convert_coauthor($args, $assoc_args) */ public function convert_post_author($args, $assoc_args) { - $successes = 0; $failures = 0; $total = count($args); @@ -103,19 +101,19 @@ public function convert_post_author($args, $assoc_args) WP_CLI\Utils\wp_clear_object_cache(); } $post = get_post($post_id); - if ( ! $post) { + if (!$post) { WP_CLI::warning("Invalid post: {$post_id}"); $failures++; continue; } $authors = get_the_terms($post_id, 'author'); - if ($authors && ! is_wp_error($authors)) { + if ($authors && !is_wp_error($authors)) { WP_CLI::warning("Post {$post_id} already has authors."); $failures++; continue; } - if ( ! $post->post_author) { + if (!$post->post_author) { WP_CLI::warning("Post {$post_id} doesn't have an author."); $failures++; continue; diff --git a/core/Classes/Content_Model.php b/core/Classes/Content_Model.php index 036bde77..3cb78fb7 100644 --- a/core/Classes/Content_Model.php +++ b/core/Classes/Content_Model.php @@ -37,8 +37,8 @@ public static function get_author_supported_post_types() /** * Filter author term links to look like author links * - * @param string $link Term link URL. - * @param object $term Term object. + * @param string $link Term link URL. + * @param object $term Term object. * @param string $taxonomy Taxonomy slug. * * @return string @@ -90,7 +90,7 @@ public static function filter_author_link($link, $author_id, $author_nicename) $authors = get_multiple_authors(); - if ( ! empty($authors)) { + if (!empty($authors)) { // Even for multiple authors, if not specified one, we will always get the first author. $author = $authors[0]; @@ -126,7 +126,7 @@ public static function filter_author_display_name($author_meta, $user_id) if (empty($author_meta) && empty($user_id)) { $authors = get_multiple_authors(); - if ( ! empty($authors)) { + if (!empty($authors)) { // Even for multiple authors, if not specified one, we will always get the first author. $author = $authors[0]; @@ -142,10 +142,10 @@ public static function filter_author_display_name($author_meta, $user_id) /** * Store user id as a term meta key too, for faster querying * - * @param mixed $check Whether or not the update should be short-circuited. - * @param integer $object_id ID for the author term object. - * @param string $meta_key Meta key being updated. - * @param string $meta_value New meta value. + * @param mixed $check Whether or not the update should be short-circuited. + * @param int $object_id ID for the author term object. + * @param string $meta_key Meta key being updated. + * @param string $meta_value New meta value. */ public static function filter_update_term_metadata($check, $object_id, $meta_key, $meta_value) { @@ -177,7 +177,7 @@ public static function filter_update_term_metadata($check, $object_id, $meta_key */ public static function action_parse_request($query) { - if ( ! isset($query->query_vars['author_name'])) { + if (!isset($query->query_vars['author_name'])) { return $query; } @@ -213,7 +213,7 @@ public static function filter_ma_get_author_data($data, $field, $post) 'author_login' => 'user_login', ]; - if ( ! isset($field_map[$field])) { + if (!isset($field_map[$field])) { return $data; } diff --git a/core/Classes/Installer.php b/core/Classes/Installer.php index 07c9f6ee..fe9b6854 100644 --- a/core/Classes/Installer.php +++ b/core/Classes/Installer.php @@ -76,7 +76,7 @@ public static function convert_post_author_into_taxonomy() ); // Check if the authors have a term. If not, create one. - if ( ! empty($authors)) { + if (!empty($authors)) { foreach ($authors as $author) { $term = wp_insert_term( $author->display_name, @@ -144,7 +144,7 @@ public static function add_author_term_for_posts() AND p.post_status NOT IN ('trash')" ); - if ( ! empty($posts_to_update)) { + if (!empty($posts_to_update)) { foreach ($posts_to_update as $post_data) { $author = Author::get_by_user_id($post_data->post_author); @@ -185,7 +185,7 @@ public static function fix_author_url() " ); - if ( ! empty($authors)) { + if (!empty($authors)) { foreach ($authors as $author) { if ($author->slug !== $author->user_nicename) { wp_update_term($author->term_id, 'author', ['slug' => $author->user_nicename]); diff --git a/core/Classes/Integrations/RSS.php b/core/Classes/Integrations/RSS.php index 947b3ff8..043c88bb 100644 --- a/core/Classes/Integrations/RSS.php +++ b/core/Classes/Integrations/RSS.php @@ -28,47 +28,47 @@ class RSS */ public static function filter_the_author($author) { - if ( ! is_feed() || ! self::is_supported_post_type()) { + if (!is_feed() || !self::is_supported_post_type()) { return $author; } $authors = get_multiple_authors(); $first = array_shift($authors); - return ! empty($first) ? $first->display_name : ''; - } - - /** - * Add any additional authors to the feed. - */ - public static function action_rss2_item() - { - if ( ! self::is_supported_post_type()) { - return; - } - $authors = get_multiple_authors(); - // Ditch the first author, which was already rendered above. - array_shift($authors); - foreach ($authors as $author) { - echo 'display_name) . ']]>' . PHP_EOL; - } + return !empty($first) ? $first->display_name : ''; } /** * Whether or not the global post is a supported post type * - * @return boolean + * @return bool */ private static function is_supported_post_type() { global $post; // Can't determine post, so assume true. - if ( ! $post) { + if (!$post) { return true; } return in_array($post->post_type, Content_Model::get_author_supported_post_types(), true); } + /** + * Add any additional authors to the feed. + */ + public static function action_rss2_item() + { + if (!self::is_supported_post_type()) { + return; + } + $authors = get_multiple_authors(); + // Ditch the first author, which was already rendered above. + array_shift($authors); + foreach ($authors as $author) { + echo 'display_name) . ']]>' . PHP_EOL; + } + } + } diff --git a/core/Classes/Integrations/Theme.php b/core/Classes/Integrations/Theme.php index 36d93471..d4724c8f 100644 --- a/core/Classes/Integrations/Theme.php +++ b/core/Classes/Integrations/Theme.php @@ -28,14 +28,16 @@ class Theme */ public static function filter_get_the_archive_title($title) { - if ( ! is_author()) { + if (!is_author()) { return $title; } /* translators: Author archive title. 1: Author name */ - return sprintf(__('Author: %s', 'publishpress-authors'), - '' . get_queried_object()->display_name . ''); + return sprintf( + __('Author: %s', 'publishpress-authors'), + '' . get_queried_object()->display_name . '' + ); } /** @@ -47,7 +49,7 @@ public static function filter_get_the_archive_title($title) */ public static function filter_get_the_archive_description($description) { - if ( ! is_author()) { + if (!is_author()) { return $description; } diff --git a/core/Classes/Legacy/LegacyPlugin.php b/core/Classes/Legacy/LegacyPlugin.php index c94dd8c9..aaa8bd91 100644 --- a/core/Classes/Legacy/LegacyPlugin.php +++ b/core/Classes/Legacy/LegacyPlugin.php @@ -17,7 +17,7 @@ class LegacyPlugin { /** - * @var \stdClass + * @var stdClass */ public $modules; @@ -25,7 +25,7 @@ class LegacyPlugin public function __construct() { - $this->modules = new \stdClass(); + $this->modules = new stdClass(); $this->setup_actions(); } @@ -121,8 +121,10 @@ private function load_modules() } if (!is_null($args) && !empty($args->settings_help_tab)) { - add_action('load-multiple_authors_page_' . $args->settings_slug, - [$module_instance, 'action_settings_help_menu']); + add_action( + 'load-multiple_authors_page_' . $args->settings_slug, + [$module_instance, 'action_settings_help_menu'] + ); } $this->loadedModules[] = $slug; @@ -163,8 +165,10 @@ private function getModulesDirs() public function load_module_options() { foreach ($this->modules as $mod_name => $mod_data) { - $this->modules->$mod_name->options = get_option($this->options_group . $mod_name . '_options', - new stdClass()); + $this->modules->$mod_name->options = get_option( + $this->options_group . $mod_name . '_options', + new stdClass() + ); foreach ($mod_data->default_options as $default_key => $default_value) { if (!isset($this->modules->$mod_name->options->$default_key)) { $this->modules->$mod_name->options->$default_key = $default_value; @@ -199,11 +203,15 @@ public function register_module($name, $args = []) 'configure_link_text' => __('Configure', 'publishpress-authors'), // These messages are applied to modules and can be overridden if custom messages are needed 'messages' => [ - 'form-error' => __('Please correct your form errors below and try again.', - 'publishpress-authors'), + 'form-error' => __( + 'Please correct your form errors below and try again.', + 'publishpress-authors' + ), 'nonce-failed' => __('Cheatin’ uh?', 'publishpress-authors'), - 'invalid-permissions' => __('You do not have necessary permissions to complete this action.', - 'publishpress-authors'), + 'invalid-permissions' => __( + 'You do not have necessary permissions to complete this action.', + 'publishpress-authors' + ), 'missing-post' => __('Post does not exist', 'publishpress-authors'), ], 'autoload' => false, // autoloading a module will remove the ability to enable or disable it @@ -343,8 +351,10 @@ public function action_init_after() { foreach ($this->modules as $mod_name => $mod_data) { if (isset($this->modules->$mod_name->options->post_types)) { - $this->modules->$mod_name->options->post_types = $this->helpers->clean_post_type_options($this->modules->$mod_name->options->post_types, - $mod_data->post_type_support); + $this->modules->$mod_name->options->post_types = $this->helpers->clean_post_type_options( + $this->modules->$mod_name->options->post_types, + $mod_data->post_type_support + ); } $this->$mod_name->module = $this->modules->$mod_name; diff --git a/core/Classes/Legacy/Module.php b/core/Classes/Legacy/Module.php index 13cc1dde..61f62477 100644 --- a/core/Classes/Legacy/Module.php +++ b/core/Classes/Legacy/Module.php @@ -9,37 +9,35 @@ namespace MultipleAuthors\Classes\Legacy; -use Twig_Loader_Filesystem; +use MultipleAuthors\Factory; use Twig_Environment; use Twig_Extension_Debug; -use MultipleAuthors\Factory; +use Twig_Loader_Filesystem; /** * Module */ class Module { - protected $twig; - - protected $debug = false; - - public $options; - - public $published_statuses = [ + public $options; + public $published_statuses = [ 'publish', // 'future', 'private', ]; - + protected $twig; + protected $debug = false; protected $twigPath; public function __construct() { - if ( ! empty($this->twigPath)) { + if (!empty($this->twigPath)) { $loader = new Twig_Loader_Filesystem($this->twigPath); - $this->twig = new Twig_Environment($loader, [ - 'debug' => $this->debug, - ]); + $this->twig = new Twig_Environment( + $loader, [ + 'debug' => $this->debug, + ] + ); if ($this->debug) { $this->twig->addExtension(new Twig_Extension_Debug()); @@ -63,32 +61,12 @@ public function module_enabled($slug) return isset($legacyPlugin->$slug) && $legacyPlugin->$slug->module->options->enabled == 'on'; } - /** - * Gets an array of allowed post types for a module - * - * @return array post-type-slug => post-type-label - */ - public function get_all_post_types() - { - $allowed_post_types = [ - 'post' => __('Post'), - 'page' => __('Page'), - ]; - $custom_post_types = $this->get_supported_post_types_for_module(); - - foreach ($custom_post_types as $custom_post_type => $args) { - $allowed_post_types[$custom_post_type] = $args->label; - } - - return $allowed_post_types; - } - /** * Cleans up the 'on' and 'off' for post types on a given module (so we don't get warnings all over) * For every post type that doesn't explicitly have the 'on' value, turn it 'off' * If add_post_type_support() has been used anywhere (legacy support), inherit the state * - * @param array $module_post_types Current state of post type options for the module + * @param array $module_post_types Current state of post type options for the module * @param string $post_type_support What the feature is called for post_type_support (e.g. 'ppma_calendar') * * @return array $normalized_post_type_options The setting for each post type, normalized based on rules @@ -100,8 +78,10 @@ public function clean_post_type_options($module_post_types = [], $post_type_supp $normalized_post_type_options = []; $all_post_types = array_keys($this->get_all_post_types()); foreach ($all_post_types as $post_type) { - if ((isset($module_post_types[$post_type]) && $module_post_types[$post_type] == 'on') || post_type_supports($post_type, - $post_type_support)) { + if ((isset($module_post_types[$post_type]) && $module_post_types[$post_type] == 'on') || post_type_supports( + $post_type, + $post_type_support + )) { $normalized_post_type_options[$post_type] = 'on'; } else { $normalized_post_type_options[$post_type] = 'off'; @@ -111,6 +91,26 @@ public function clean_post_type_options($module_post_types = [], $post_type_supp return $normalized_post_type_options; } + /** + * Gets an array of allowed post types for a module + * + * @return array post-type-slug => post-type-label + */ + public function get_all_post_types() + { + $allowed_post_types = [ + 'post' => __('Post'), + 'page' => __('Page'), + ]; + $custom_post_types = $this->get_supported_post_types_for_module(); + + foreach ($custom_post_types as $custom_post_type => $args) { + $allowed_post_types[$custom_post_type] = $args->label; + } + + return $allowed_post_types; + } + /** * Get all of the possible post types that can be used with a given module * @@ -151,7 +151,7 @@ public function is_whitelisted_settings_view($module_name = null) global $pagenow; // All of the settings views are based on admin.php and a $_GET['page'] parameter - if ($pagenow != 'admin.php' || ! isset($_GET['page'])) { + if ($pagenow != 'admin.php' || !isset($_GET['page'])) { return false; } @@ -160,7 +160,7 @@ public function is_whitelisted_settings_view($module_name = null) return true; } - if ( ! isset($_GET['module']) || $_GET['module'] === 'ppma-modules-settings-settings') { + if (!isset($_GET['module']) || $_GET['module'] === 'ppma-modules-settings-settings') { if (in_array($module_name, ['editorial_comments', 'notifications', 'dashboard'])) { return true; } @@ -201,7 +201,7 @@ public function action_settings_help_menu() { $screen = get_current_screen(); - if ( ! method_exists($screen, 'add_help_tab')) { + if (!method_exists($screen, 'add_help_tab')) { return; } diff --git a/core/Classes/Legacy/Util.php b/core/Classes/Legacy/Util.php index 625b2a83..b8c1c998 100644 --- a/core/Classes/Legacy/Util.php +++ b/core/Classes/Legacy/Util.php @@ -9,8 +9,6 @@ namespace MultipleAuthors\Classes\Legacy; -use MultipleAuthors\Factory; - class Util { /** @@ -29,13 +27,13 @@ public static function get_current_post_type() $post_type = $post->post_type; } elseif ($typenow) { $post_type = $typenow; - } elseif ($current_screen && ! empty($current_screen->post_type)) { + } elseif ($current_screen && !empty($current_screen->post_type)) { $post_type = $current_screen->post_type; } elseif (isset($_REQUEST['post_type'])) { $post_type = sanitize_key($_REQUEST['post_type']); } elseif ('post.php' == $pagenow - && $post_id - && ! empty(get_post($post_id)->post_type)) { + && $post_id + && !empty(get_post($post_id)->post_type)) { $post_type = get_post($post_id)->post_type; } elseif ('edit.php' == $pagenow && empty($_REQUEST['post_type'])) { $post_type = 'post'; @@ -72,7 +70,7 @@ public static function get_post_types_for_module($module) * Sanitizes the module name, making sure we always have only * valid chars, replacing - with _. * - * @param string $name + * @param string $name * * @return string */ @@ -84,10 +82,10 @@ public static function sanitize_module_name($name) /** * Adds an array of capabilities to a role. * + * @param string $role A standard WP user role like 'administrator' or 'author' + * @param array $caps One or more user caps to add * @since 1.9.8 * - * @param string $role A standard WP user role like 'administrator' or 'author' - * @param array $caps One or more user caps to add */ public static function add_caps_to_role($role, $caps) { @@ -115,7 +113,7 @@ public static function isGutenbergEnabled() $isEnabled = defined('GUTENBERG_VERSION'); // Is WordPress 5? - if ( ! $isEnabled) { + if (!$isEnabled) { $wpVersion = get_bloginfo('version'); $isEnabled = version_compare($wpVersion, '5.0', '>='); diff --git a/core/Classes/Objects/Author.php b/core/Classes/Objects/Author.php index 364b8fbf..2ab8c3ff 100644 --- a/core/Classes/Objects/Author.php +++ b/core/Classes/Objects/Author.php @@ -20,7 +20,7 @@ class Author /** * ID for the correlated term. * - * @var integer + * @var int */ private $term_id; @@ -29,7 +29,7 @@ class Author * * Authors are always fetched by static fetchers. * - * @param integer $term_id ID for the correlated term. + * @param int $term_id ID for the correlated term. */ private function __construct($term_id) { @@ -39,7 +39,7 @@ private function __construct($term_id) /** * Create a new author object from an existing WordPress user. * - * @param WP_User|integer $user WordPress user to clone. + * @param WP_User|int $user WordPress user to clone. * * @return Author|WP_Error */ @@ -49,12 +49,24 @@ public static function create_from_user($user) $user = get_user_by('id', $user); } if (!is_a($user, 'WP_User')) { - error_log(sprintf('[PublishPress Authors] The method %s found that the expected user doesn\'t exist: %s', __METHOD__, maybe_serialize($user))); + error_log( + sprintf( + '[PublishPress Authors] The method %s found that the expected user doesn\'t exist: %s', + __METHOD__, + maybe_serialize($user) + ) + ); return new WP_Error('missing-user', __("User doesn't exist", 'publishpress-authors')); } $existing = self::get_by_user_id($user->ID); if ($existing) { - error_log(sprintf('[PublishPress Authors] The method %s tried to create an author that already exists for the user: %s', __METHOD__, maybe_serialize($user))); + error_log( + sprintf( + '[PublishPress Authors] The method %s tried to create an author that already exists for the user: %s', + __METHOD__, + maybe_serialize($user) + ) + ); return new WP_Error( 'existing-author', __('User already has a author.', 'publishpress-authors') @@ -67,7 +79,9 @@ public static function create_from_user($user) ] ); if (is_wp_error($author)) { - error_log(sprintf('[PublishPress Authors] The method %s found an error trying to create an author', __METHOD__)); + error_log( + sprintf('[PublishPress Authors] The method %s found an error trying to create an author', __METHOD__) + ); return $author; } @@ -79,7 +93,7 @@ public static function create_from_user($user) /** * Get a author object based on its user id. * - * @param integer $user_id ID for the author's user. + * @param int $user_id ID for the author's user. * * @return Author|false */ @@ -121,7 +135,9 @@ public static function create($args) ); } if (empty($args['display_name'])) { - error_log(sprintf('[PublishPress Authors] The method %s is missing the display_name in the arguments', __METHOD__)); + error_log( + sprintf('[PublishPress Authors] The method %s is missing the display_name in the arguments', __METHOD__) + ); return new WP_Error( 'missing-display_name', __("'display_name' is a required argument", 'publishpress-authors') @@ -193,7 +209,7 @@ public static function convert_into_guest_author($term_id) /** * Get a author object based on its term id. * - * @param integer $term_id ID for the author term. + * @param int $term_id ID for the author term. * * @return Author|false */ @@ -323,6 +339,46 @@ public function get_avatar_url($size = 96) return $url; } + /** + * @return bool + */ + public function has_custom_avatar() + { + $avatar_attachment_id = get_term_meta($this->term_id, 'avatar', true); + + return !empty($avatar_attachment_id); + } + + /** + * @param int $size + * + * @return array + */ + protected function get_custom_avatar_url($size = 96) + { + $avatar_attachment_id = get_term_meta($this->term_id, 'avatar', true); + + // Get the avatar from the attachments. + $url = ''; + $url2x = ''; + if (!empty($avatar_attachment_id)) { + $url = wp_get_attachment_image_url($avatar_attachment_id, $size); + $url2x = wp_get_attachment_image_url($avatar_attachment_id, $size * 2); + } + + // Check if it should return the default avatar. + if (empty($url)) { + $avatar_data = get_avatar_data(0); + $url = $avatar_data['url']; + $url2x = $avatar_data['url'] . '2x'; + } + + return [ + 'url' => $url, + 'url2x' => $url2x, + ]; + } + /** * For guest authors, returns the custom avatar, if set. If not set, the WordPress' default profile picture. * For user mapped authors, returns the custom avatar if set. If not set, returns the user's avatar. @@ -372,46 +428,6 @@ public function get_avatar($size = 96) return apply_filters('multiple_authors_get_avatar', $avatar, $this, $size); } - /** - * @return bool - */ - public function has_custom_avatar() - { - $avatar_attachment_id = get_term_meta($this->term_id, 'avatar', true); - - return !empty($avatar_attachment_id); - } - - /** - * @param int $size - * - * @return array - */ - protected function get_custom_avatar_url($size = 96) - { - $avatar_attachment_id = get_term_meta($this->term_id, 'avatar', true); - - // Get the avatar from the attachments. - $url = ''; - $url2x = ''; - if (!empty($avatar_attachment_id)) { - $url = wp_get_attachment_image_url($avatar_attachment_id, $size); - $url2x = wp_get_attachment_image_url($avatar_attachment_id, $size * 2); - } - - // Check if it should return the default avatar. - if (empty($url)) { - $avatar_data = get_avatar_data(0); - $url = $avatar_data['url']; - $url2x = $avatar_data['url'] . '2x'; - } - - return [ - 'url' => $url, - 'url2x' => $url2x, - ]; - } - /** * Return's the custom avatar set for the author, or the default user profile image set in site settings. * diff --git a/core/Classes/Post_Editor.php b/core/Classes/Post_Editor.php index 2a039822..53eb16aa 100644 --- a/core/Classes/Post_Editor.php +++ b/core/Classes/Post_Editor.php @@ -27,11 +27,14 @@ class Post_Editor public static function action_admin_init() { foreach (Content_Model::get_author_supported_post_types() as $post_type) { - if (Utils::is_post_type_enabled($post_type)) { add_filter("manage_{$post_type}_posts_columns", [__CLASS__, 'filter_manage_posts_columns']); - add_action("manage_{$post_type}_posts_custom_column", [__CLASS__, 'action_manage_posts_custom_column'], - 10, 2); + add_action( + "manage_{$post_type}_posts_custom_column", + [__CLASS__, 'action_manage_posts_custom_column'], + 10, + 2 + ); } } } @@ -63,8 +66,8 @@ public static function filter_manage_posts_columns($columns) /** * Render the authors for a post in the table * - * @param string $column Name of the column. - * @param integer $post_id ID of the post being rendered. + * @param string $column Name of the column. + * @param int $post_id ID of the post being rendered. */ public static function action_manage_posts_custom_column($column, $post_id) { @@ -75,7 +78,6 @@ public static function action_manage_posts_custom_column($column, $post_id) $post_type = get_post_type($post_id); $authors_str = []; foreach ($authors as $author) { - if (is_a($author, 'WP_User')) { $author = Author::get_by_user_id($author->ID); } @@ -93,8 +95,10 @@ public static function action_manage_posts_custom_column($column, $post_id) } if (empty($authors_str)) { - $authors_str[] = '' . __('No author', - 'publishpress-authors') . ''; + $authors_str[] = '' . __( + 'No author', + 'publishpress-authors' + ) . ''; } echo implode(', ', $authors_str); @@ -105,20 +109,24 @@ public static function action_manage_posts_custom_column($column, $post_id) */ public static function action_add_meta_boxes_late() { - if ( ! Utils::is_valid_page()) { + if (!Utils::is_valid_page()) { return; } $supportedPostTypes = Content_Model::get_author_supported_post_types(); foreach ($supportedPostTypes as $post_type) { - remove_meta_box('authordiv', $post_type, 'normal'); // @todo only register meta box when user can assign authors - add_meta_box('authors', __('Authors', 'publishpress-authors'), - [__CLASS__, 'render_authors_metabox'], $post_type, 'side', 'default'); + add_meta_box( + 'authors', + __('Authors', 'publishpress-authors'), + [__CLASS__, 'render_authors_metabox'], + $post_type, + 'side', + 'default' + ); } - } /** @@ -126,7 +134,7 @@ public static function action_add_meta_boxes_late() */ public static function render_authors_metabox() { - if ( ! Utils::is_valid_page()) { + if (!Utils::is_valid_page()) { return; } @@ -141,15 +149,17 @@ public static function render_authors_metabox() ?>
        display_name; $term = is_a($author, 'WP_User') ? 'u' . $author->ID : $author->term_id; - echo self::get_rendered_author_partial([ - 'display_name' => $display_name, - 'avatar' => $author->get_avatar(20), - 'term' => $term, - ]); + echo self::get_rendered_author_partial( + [ + 'display_name' => $display_name, + 'avatar' => $author->get_avatar(20), + 'term' => $term, + ] + ); } } ?> @@ -163,11 +173,13 @@ class="authors-select2 authors-search" post_type, Content_Model::get_author_supported_post_types(), true)) { + if (!in_array($post->post_type, Content_Model::get_author_supported_post_types(), true)) { return; } - if ( ! isset($_POST['authors-save']) - || ! wp_verify_nonce($_POST['authors-save'], 'authors-save') - || ! current_user_can(get_taxonomy('author')->cap->assign_terms)) { + if (!isset($_POST['authors-save']) + || !wp_verify_nonce($_POST['authors-save'], 'authors-save') + || !current_user_can(get_taxonomy('author')->cap->assign_terms)) { return; } @@ -227,7 +239,7 @@ public static function action_save_post_authors_metabox($post_id, $post) } elseif ('u' === $dirty_author[0]) { $user_id = (int)substr($dirty_author, 1); $author = Author::get_by_user_id($user_id); - if ( ! $author) { + if (!$author) { $author = Author::create_from_user($user_id); if (is_wp_error($author)) { continue; @@ -244,7 +256,8 @@ public static function action_save_post_authors_metabox($post_id, $post) $wpdb->posts, [ 'post_author' => 0, - ], [ + ], + [ 'ID' => $post_id, ] ); @@ -255,16 +268,16 @@ public static function action_save_post_authors_metabox($post_id, $post) /** * Assign a author term when a post is initially created * - * @param integer $post_id Post ID. - * @param WP_Post $post Post object. - * @param boolean $update Whether this is an update. + * @param int $post_id Post ID. + * @param WP_Post $post Post object. + * @param bool $update Whether this is an update. */ public static function action_save_post_set_initial_author($post_id, $post, $update) { if ($update) { return; } - if ( ! in_array($post->post_type, Content_Model::get_author_supported_post_types(), true)) { + if (!in_array($post->post_type, Content_Model::get_author_supported_post_types(), true)) { return; } @@ -276,8 +289,8 @@ public static function action_save_post_set_initial_author($post_id, $post, $upd /** * Filter the default author assigned to the post. * - * @param mixed $default_author Default author, as calculated by plugin. - * @param WP_Post $post Post object. + * @param mixed $default_author Default author, as calculated by plugin. + * @param WP_Post $post Post object. */ $default_author = apply_filters('authors_default_author', $default_author, $post); if ($default_author) { diff --git a/core/Classes/Query.php b/core/Classes/Query.php index 1adf965e..8c091b4b 100644 --- a/core/Classes/Query.php +++ b/core/Classes/Query.php @@ -33,12 +33,12 @@ class Query */ public static function action_pre_get_posts($query) { - if ( ! $query->is_author()) { + if (!$query->is_author()) { return; } $author_name = $query->get('author_name'); - if ( ! $author_name) { + if (!$author_name) { return; } @@ -72,7 +72,7 @@ public static function action_pre_get_posts($query) /** * Modify the WHERE clause on author queries. * - * @param string $where Existing WHERE clause. + * @param string $where Existing WHERE clause. * @param WP_Query $query Query object. * * @return string @@ -81,12 +81,14 @@ public static function filter_posts_where($where, $query) { global $wpdb; - if ( ! $query->is_author()) { + if (!$query->is_author()) { return $where; } - if ( ! empty($query->query_vars['post_type']) && ! is_object_in_taxonomy($query->query_vars['post_type'], - 'author')) { + if (!empty($query->query_vars['post_type']) && !is_object_in_taxonomy( + $query->query_vars['post_type'], + 'author' + )) { return $where; } @@ -96,7 +98,7 @@ public static function filter_posts_where($where, $query) $author_id = (int)$query->get('author'); $user = get_user_by('id', $author_id); - if ( ! $author_id || ! $user) { + if (!$author_id || !$user) { return $where; } @@ -106,7 +108,7 @@ public static function filter_posts_where($where, $query) $terms = []; $term = get_term_by('slug', $author_name, 'author'); - if ( ! empty($term)) { + if (!empty($term)) { $terms[] = $term; } @@ -119,7 +121,7 @@ public static function filter_posts_where($where, $query) $maybe_both_query = $maybe_both ? '$0 OR ' : ''; - if ( ! empty($terms)) { + if (!empty($terms)) { $terms_implode = ''; $query->authors_having_terms = ''; @@ -150,7 +152,7 @@ public static function filter_posts_where($where, $query) /** * Modify the JOIN clause on author queries. * - * @param string $join Existing JOIN clause. + * @param string $join Existing JOIN clause. * @param WP_Query $query Query object. * * @return string @@ -159,7 +161,7 @@ public static function filter_posts_join($join, $query) { global $wpdb; - if ( ! $query->is_author() || empty($query->authors_having_terms)) { + if (!$query->is_author() || empty($query->authors_having_terms)) { return $join; } @@ -184,8 +186,8 @@ public static function filter_posts_join($join, $query) /** * Modify the GROUP BY clause on author queries. * - * @param string $groupby Existing GROUP BY clause. - * @param WP_Query $query Query object. + * @param string $groupby Existing GROUP BY clause. + * @param WP_Query $query Query object. * * @return string */ @@ -193,7 +195,7 @@ public static function filter_posts_groupby($groupby, $query) { global $wpdb; - if ( ! $query->is_author() || empty($query->authors_having_terms)) { + if (!$query->is_author() || empty($query->authors_having_terms)) { return $groupby; } diff --git a/core/Classes/Utils.php b/core/Classes/Utils.php index 6e087557..a59aaf6c 100644 --- a/core/Classes/Utils.php +++ b/core/Classes/Utils.php @@ -12,6 +12,7 @@ use MultipleAuthors\Classes\Legacy\Util; use MultipleAuthors\Classes\Objects\Author; use MultipleAuthors\Factory; +use stdClass; use WP_Error; /** @@ -48,26 +49,28 @@ class Utils * Errors if the post already has authors. To re-convert, remove authors * from the post. * - * @param integer $post_id ID for the post to convert. + * @param int $post_id ID for the post to convert. * * @return object|WP_Error Result object if successful; WP_Error on error. */ public static function convert_post_coauthors($post_id) { - if ( ! function_exists('get_coauthors')) { - return new WP_Error('authors_missing_cap', - __('Co-Authors Plus must be installed and active.', 'publishpress-authors')); + if (!function_exists('get_coauthors')) { + return new WP_Error( + 'authors_missing_cap', + __('Co-Authors Plus must be installed and active.', 'publishpress-authors') + ); } $post = get_post($post_id); - if ( ! $post) { + if (!$post) { return new WP_Error('authors_missing_post', "Invalid post: {$post_id}"); } $authors = get_the_terms($post_id, 'author'); - if ($authors && ! is_wp_error($authors)) { + if ($authors && !is_wp_error($authors)) { return new WP_Error('authors_post_has_authors', "Post {$post_id} already has authors."); } $authors = []; - $result = new \stdClass; + $result = new stdClass(); $result->created = 0; $result->existing = 0; $result->post_id = 0; @@ -128,8 +131,10 @@ public static function convert_post_coauthors($post_id) } // End switch(). } // End foreach(). if (empty($authors) || count($coauthors) !== count($authors)) { - return new WP_Error('authors_post_missing_coauthors', - "Failed to convert some authors for post {$post_id}."); + return new WP_Error( + 'authors_post_missing_coauthors', + "Failed to convert some authors for post {$post_id}." + ); } Utils::set_post_authors($post_id, $authors); @@ -139,8 +144,8 @@ public static function convert_post_coauthors($post_id) /** * Set the authors for a post * - * @param integer $post_id ID for the post to modify. - * @param array $authors Bylines to set on the post. + * @param int $post_id ID for the post to modify. + * @param array $authors Bylines to set on the post. */ public static function set_post_authors($post_id, $authors) { @@ -159,7 +164,7 @@ public static function set_post_authors($post_id, $authors) */ protected static function set_post_authors_name_meta($post_id, $authors) { - if ( ! is_array($authors)) { + if (!is_array($authors)) { $authors = []; } @@ -171,7 +176,7 @@ protected static function set_post_authors_name_meta($post_id, $authors) $names = []; foreach ($authors as $author) { - if ( ! is_object($author) && is_numeric($author)) { + if (!is_object($author) && is_numeric($author)) { $author = Author::get_by_term_id($author); } @@ -197,7 +202,7 @@ public static function is_valid_page() $valid = (bool)in_array($pagenow, self::$pages_whitelist); - if ( ! $valid) { + if (!$valid) { return false; } @@ -236,7 +241,7 @@ public static function is_post_type_enabled($post_type = null) self::$supported_post_types = self::get_supported_post_types(); } - if ( ! $post_type) { + if (!$post_type) { $post_type = Util::get_current_post_type(); } @@ -272,7 +277,7 @@ public static function get_supported_post_types() continue; } - if ( ! post_type_supports($name, 'author') || in_array($name, ['revision', 'attachment'])) { + if (!post_type_supports($name, 'author') || in_array($name, ['revision', 'attachment'])) { unset($post_types_with_authors[$key]); } } @@ -295,9 +300,9 @@ public static function get_supported_post_types() */ public static function current_user_can_set_authors($post = null) { - if ( ! $post) { + if (!$post) { $post = get_post(); - if ( ! $post) { + if (!$post) { if (isset($_GET['post'])) { $post = get_post($_GET['post']); } else { @@ -309,14 +314,14 @@ public static function current_user_can_set_authors($post = null) $post_type = $post->post_type; // TODO: need to fix this; shouldn't just say no if don't have post_type - if ( ! $post_type) { + if (!$post_type) { return false; } $current_user = wp_get_current_user(); - if ( ! $current_user) { + if (!$current_user) { return false; } // Super admins can do anything @@ -326,7 +331,7 @@ public static function current_user_can_set_authors($post = null) $can_set_authors = isset($current_user->allcaps['edit_others_posts']) ? $current_user->allcaps['edit_others_posts'] : false; - if ( ! $can_set_authors) { + if (!$can_set_authors) { $can_set_authors = isset($current_user->allcaps['ppma_edit_orphan_post']) ? $current_user->allcaps['ppma_edit_orphan_post'] : false; } @@ -342,7 +347,7 @@ public static function current_user_can_set_authors($post = null) */ public static function isPluginActive($check_plugin_file) { - if ( ! is_multisite()) { + if (!is_multisite()) { $plugins = (array)get_option('active_plugins'); foreach ($plugins as $plugin_file) { if (false !== strpos($plugin_file, $check_plugin_file)) { diff --git a/core/Factory.php b/core/Factory.php index c4ccc2fd..dfbe27e4 100644 --- a/core/Factory.php +++ b/core/Factory.php @@ -13,7 +13,7 @@ defined('ABSPATH') or die('No direct script access allowed.'); -if ( ! defined('MULTIPLE_AUTHORS_LOADED')) { +if (!defined('MULTIPLE_AUTHORS_LOADED')) { require_once __DIR__ . '/../includes.php'; } @@ -27,6 +27,16 @@ abstract class Factory */ protected static $container = null; + /** + * @return LegacyPlugin + */ + public static function getLegacyPlugin() + { + $container = self::get_container(); + + return $container['legacy_plugin']; + } + /** * @return Container */ @@ -41,14 +51,4 @@ public static function get_container() return static::$container; } - - /** - * @return LegacyPlugin - */ - public static function getLegacyPlugin() - { - $container = self::get_container(); - - return $container['legacy_plugin']; - } } diff --git a/core/Plugin.php b/core/Plugin.php index f03cbfe4..c9b4cee4 100644 --- a/core/Plugin.php +++ b/core/Plugin.php @@ -9,12 +9,12 @@ namespace MultipleAuthors; +use MA_Multiple_Authors; use MultipleAuthors\Classes\Legacy\Util; use MultipleAuthors\Classes\Objects\Author; use MultipleAuthors\Classes\Utils; use MultipleAuthors\Traits\Author_box; use WP_Post; -use WP_Screen; defined('ABSPATH') or die('No direct script access allowed.'); @@ -54,10 +54,14 @@ public function __construct() add_action('init', [$this, 'action_init_late'], 100); // Installation hooks - add_action('multiple_authors_install', - ['MultipleAuthors\\Classes\\Installer', 'install']); - add_action('multiple_authors_upgrade', - ['MultipleAuthors\\Classes\\Installer', 'upgrade']); + add_action( + 'multiple_authors_install', + ['MultipleAuthors\\Classes\\Installer', 'install'] + ); + add_action( + 'multiple_authors_upgrade', + ['MultipleAuthors\\Classes\\Installer', 'upgrade'] + ); add_action('init', [$this, 'manage_installation'], 2000); @@ -74,11 +78,18 @@ public function __construct() add_filter('wp_get_object_terms', [$this, 'filter_wp_get_object_terms'], 10, 4); // Support for Edit Flow's calendar and story budget - add_filter('ef_calendar_item_information_fields', [$this, 'filter_ef_calendar_item_information_fields'], + add_filter( + 'ef_calendar_item_information_fields', + [$this, 'filter_ef_calendar_item_information_fields'], + 10, + 2 + ); + add_filter( + 'ef_story_budget_term_column_value', + [$this, 'filter_ef_story_budget_term_column_value'], 10, - 2); - add_filter('ef_story_budget_term_column_value', [$this, 'filter_ef_story_budget_term_column_value'], 10, - 3); + 3 + ); // Support Jetpack Open Graph Tags add_filter('jetpack_open_graph_tags', [$this, 'filter_jetpack_open_graph_tags'], 10, 2); @@ -112,118 +123,215 @@ public function __construct() add_filter('posts_selection', [$this, 'fix_author_page']); add_action('the_post', [$this, 'fix_post'], 10); - add_action('init', [ - 'MultipleAuthors\\Classes\\Content_Model', - 'action_init_late_register_taxonomy_for_object_type', - ], 100); - add_filter('term_link', - ['MultipleAuthors\\Classes\\Content_Model', 'filter_term_link'], 10, 3); - add_filter('author_link', - ['MultipleAuthors\\Classes\\Content_Model', 'filter_author_link'], 10, 3); - add_filter('the_author_display_name', - ['MultipleAuthors\\Classes\\Content_Model', 'filter_author_display_name'], 10, 2); - add_filter('update_term_metadata', - ['MultipleAuthors\\Classes\\Content_Model', 'filter_update_term_metadata'], 10, - 4); - add_action('parse_request', - ['MultipleAuthors\\Classes\\Content_Model', 'action_parse_request']); + add_action( + 'init', + [ + 'MultipleAuthors\\Classes\\Content_Model', + 'action_init_late_register_taxonomy_for_object_type', + ], + 100 + ); + add_filter( + 'term_link', + ['MultipleAuthors\\Classes\\Content_Model', 'filter_term_link'], + 10, + 3 + ); + add_filter( + 'author_link', + ['MultipleAuthors\\Classes\\Content_Model', 'filter_author_link'], + 10, + 3 + ); + add_filter( + 'the_author_display_name', + ['MultipleAuthors\\Classes\\Content_Model', 'filter_author_display_name'], + 10, + 2 + ); + add_filter( + 'update_term_metadata', + ['MultipleAuthors\\Classes\\Content_Model', 'filter_update_term_metadata'], + 10, + 4 + ); + add_action( + 'parse_request', + ['MultipleAuthors\\Classes\\Content_Model', 'action_parse_request'] + ); // Admin customizations. - add_action('admin_init', - ['MultipleAuthors\\Classes\\Post_Editor', 'action_admin_init']); - add_filter('manage_edit-author_columns', + add_action( + 'admin_init', + ['MultipleAuthors\\Classes\\Post_Editor', 'action_admin_init'] + ); + add_filter( + 'manage_edit-author_columns', [ 'MultipleAuthors\\Classes\\Author_Editor', 'filter_manage_edit_author_columns', - ]); - add_filter('list_table_primary_column', + ] + ); + add_filter( + 'list_table_primary_column', [ 'MultipleAuthors\\Classes\\Author_Editor', 'filter_list_table_primary_column', - ]); - add_filter('manage_author_custom_column', + ] + ); + add_filter( + 'manage_author_custom_column', [ 'MultipleAuthors\\Classes\\Author_Editor', 'filter_manage_author_custom_column', ], - 10, 3); - add_filter('user_row_actions', - ['MultipleAuthors\\Classes\\Author_Editor', 'filter_user_row_actions'], 10, 2); - add_filter('author_row_actions', - ['MultipleAuthors\\Classes\\Author_Editor', 'filter_author_row_actions'], 10, - 2); - add_action('author_edit_form_fields', - ['MultipleAuthors\\Classes\\Author_Editor', 'action_author_edit_form_fields']); - add_action('user_register', - ['MultipleAuthors\\Classes\\Author_Editor', 'action_user_register'], 20); - add_action('author_term_new_form_tag', - ['MultipleAuthors\\Classes\\Author_Editor', 'action_new_form_tag'], 10); - add_filter('wp_insert_term_data', - ['MultipleAuthors\\Classes\\Author_Editor', 'filter_insert_term_data'], 10, 3); - add_filter('created_author', - ['MultipleAuthors\\Classes\\Author_Editor', 'action_created_author'], 10); - add_action('edited_author', - ['MultipleAuthors\\Classes\\Author_Editor', 'action_edited_author']); - - add_filter('bulk_actions-edit-author', - ['MultipleAuthors\\Classes\\Author_Editor', 'filter_author_bulk_actions']); - add_filter('handle_bulk_actions-edit-author', - ['MultipleAuthors\\Classes\\Author_Editor', 'handle_author_bulk_actions'], 10, - 3); - add_action('admin_notices', - ['MultipleAuthors\\Classes\\Author_Editor', 'admin_notices']); + 10, + 3 + ); + add_filter( + 'user_row_actions', + ['MultipleAuthors\\Classes\\Author_Editor', 'filter_user_row_actions'], + 10, + 2 + ); + add_filter( + 'author_row_actions', + ['MultipleAuthors\\Classes\\Author_Editor', 'filter_author_row_actions'], + 10, + 2 + ); + add_action( + 'author_edit_form_fields', + ['MultipleAuthors\\Classes\\Author_Editor', 'action_author_edit_form_fields'] + ); + add_action( + 'user_register', + ['MultipleAuthors\\Classes\\Author_Editor', 'action_user_register'], + 20 + ); + add_action( + 'author_term_new_form_tag', + ['MultipleAuthors\\Classes\\Author_Editor', 'action_new_form_tag'], + 10 + ); + add_filter( + 'wp_insert_term_data', + ['MultipleAuthors\\Classes\\Author_Editor', 'filter_insert_term_data'], + 10, + 3 + ); + add_filter( + 'created_author', + ['MultipleAuthors\\Classes\\Author_Editor', 'action_created_author'], + 10 + ); + add_action( + 'edited_author', + ['MultipleAuthors\\Classes\\Author_Editor', 'action_edited_author'] + ); + + add_filter( + 'bulk_actions-edit-author', + ['MultipleAuthors\\Classes\\Author_Editor', 'filter_author_bulk_actions'] + ); + add_filter( + 'handle_bulk_actions-edit-author', + ['MultipleAuthors\\Classes\\Author_Editor', 'handle_author_bulk_actions'], + 10, + 3 + ); + add_action( + 'admin_notices', + ['MultipleAuthors\\Classes\\Author_Editor', 'admin_notices'] + ); // Query modifications. - add_action('pre_get_posts', - ['MultipleAuthors\\Classes\\Query', 'action_pre_get_posts']); - add_filter('posts_where', + add_action( + 'pre_get_posts', + ['MultipleAuthors\\Classes\\Query', 'action_pre_get_posts'] + ); + add_filter( + 'posts_where', ['MultipleAuthors\\Classes\\Query', 'filter_posts_where'], - 10, 2); - add_filter('posts_join', ['MultipleAuthors\\Classes\\Query', 'filter_posts_join'], 10, - 2); - add_filter('posts_groupby', - ['MultipleAuthors\\Classes\\Query', 'filter_posts_groupby'], 10, 2); + 2 + ); + add_filter( + 'posts_join', + ['MultipleAuthors\\Classes\\Query', 'filter_posts_join'], + 10, + 2 + ); + add_filter( + 'posts_groupby', + ['MultipleAuthors\\Classes\\Query', 'filter_posts_groupby'], + 10, + 2 + ); // Author search - add_action('wp_ajax_authors_search', - ['MultipleAuthors\\Classes\\Admin_Ajax', 'handle_authors_search']); - add_action('wp_ajax_authors_users_search', - ['MultipleAuthors\\Classes\\Admin_Ajax', 'handle_users_search']); - add_action('wp_ajax_author_create_from_user', - ['MultipleAuthors\\Classes\\Admin_Ajax', 'handle_author_create_from_user']); - add_action('wp_ajax_author_get_user_data', - ['MultipleAuthors\\Classes\\Admin_Ajax', 'handle_author_get_user_data']); + add_action( + 'wp_ajax_authors_search', + ['MultipleAuthors\\Classes\\Admin_Ajax', 'handle_authors_search'] + ); + add_action( + 'wp_ajax_authors_users_search', + ['MultipleAuthors\\Classes\\Admin_Ajax', 'handle_users_search'] + ); + add_action( + 'wp_ajax_author_create_from_user', + ['MultipleAuthors\\Classes\\Admin_Ajax', 'handle_author_create_from_user'] + ); + add_action( + 'wp_ajax_author_get_user_data', + ['MultipleAuthors\\Classes\\Admin_Ajax', 'handle_author_get_user_data'] + ); // Post integration - add_action('add_meta_boxes', - ['MultipleAuthors\\Classes\\Post_Editor', 'action_add_meta_boxes_late'], 100); - add_action('save_post', + add_action( + 'add_meta_boxes', + ['MultipleAuthors\\Classes\\Post_Editor', 'action_add_meta_boxes_late'], + 100 + ); + add_action( + 'save_post', ['MultipleAuthors\\Classes\\Post_Editor', 'action_save_post_authors_metabox'], 10, - 2); - add_action('save_post', + 2 + ); + add_action( + 'save_post', [ 'MultipleAuthors\\Classes\\Post_Editor', 'action_save_post_set_initial_author', ], - 10, 3); + 10, + 3 + ); // Notification Workflow support - add_filter('ppma_get_author_data', - ['MultipleAuthors\\Classes\\Content_Model', 'filter_ma_get_author_data'], 10, - 3); + add_filter( + 'ppma_get_author_data', + ['MultipleAuthors\\Classes\\Content_Model', 'filter_ma_get_author_data'], + 10, + 3 + ); // Theme template tag filters. - add_filter('get_the_archive_title', + add_filter( + 'get_the_archive_title', [ 'MultipleAuthors\\Classes\\Integrations\\Theme', 'filter_get_the_archive_title', - ]); - add_filter('get_the_archive_description', [ - 'MultipleAuthors\\Classes\\Integrations\\Theme', - 'filter_get_the_archive_description', - ]); + ] + ); + add_filter( + 'get_the_archive_description', + [ + 'MultipleAuthors\\Classes\\Integrations\\Theme', + 'filter_get_the_archive_description', + ] + ); add_filter('admin_footer_text', [$this, 'update_footer_admin']); @@ -249,7 +357,7 @@ public function manage_installation() $previous_version = get_option($option_name); $current_version = PP_AUTHORS_VERSION; - if ( ! apply_filters('publishpress_authors_skip_installation', false, $previous_version, $current_version)) { + if (!apply_filters('publishpress_authors_skip_installation', false, $previous_version, $current_version)) { if (empty($previous_version)) { /** * Action called when the module is installed. @@ -286,13 +394,16 @@ public function manage_installation() public function action_init() { // Allow PublishPress Authors to be easily translated - load_plugin_textdomain('publishpress-authors', null, - dirname(plugin_basename(__FILE__)) . '/languages/'); + load_plugin_textdomain( + 'publishpress-authors', + null, + dirname(plugin_basename(__FILE__)) . '/languages/' + ); // Maybe automatically apply our template tags if (apply_filters('coauthors_auto_apply_template_tags', false)) { global $multiple_authors_addon_template_filters; - $multiple_authors_addon_template_filters = new Multiple_Authors_Template_Filters; + $multiple_authors_addon_template_filters = new Multiple_Authors_Template_Filters(); } } @@ -304,10 +415,16 @@ public function action_init_late() // Register new taxonomy so that we can store all of the relationships $args = [ 'labels' => [ - 'name' => _x('Authors', 'taxonomy general name', - 'publishpress-authors'), - 'singular_name' => _x('Author', 'taxonomy singular name', - 'publishpress-authors'), + 'name' => _x( + 'Authors', + 'taxonomy general name', + 'publishpress-authors' + ), + 'singular_name' => _x( + 'Author', + 'taxonomy singular name', + 'publishpress-authors' + ), 'search_items' => __('Search authors', 'publishpress-authors'), 'popular_items' => __('Popular authors', 'publishpress-authors'), 'all_items' => __('All authors', 'publishpress-authors'), @@ -318,11 +435,15 @@ public function action_init_late() 'update_item' => __('Update author', 'publishpress-authors'), 'add_new_item' => __('New author', 'publishpress-authors'), 'new_item_name' => __('New author', 'publishpress-authors'), - 'separate_items_with_commas' => __('Separate authors with commas', - 'publishpress-authors'), + 'separate_items_with_commas' => __( + 'Separate authors with commas', + 'publishpress-authors' + ), 'add_or_remove_items' => __('Add or remove authors', 'publishpress-authors'), - 'choose_from_most_used' => __('Choose from the most used authors', - 'publishpress-authors'), + 'choose_from_most_used' => __( + 'Choose from the most used authors', + 'publishpress-authors' + ), 'not_found' => __('No authors found.', 'publishpress-authors'), 'menu_name' => __('Author', 'publishpress-authors'), 'back_to_items' => __('Back to Authors', 'publishpress-authors'), @@ -348,7 +469,7 @@ public function action_init_late() ]; // If we use the nasty SQL query, we need our custom callback. Otherwise, we still need to flush cache. - if ( ! apply_filters('coauthors_plus_should_query_post_author', true)) { + if (!apply_filters('coauthors_plus_should_query_post_author', true)) { add_action('edited_term_taxonomy', [$this, 'action_edited_term_taxonomy_flush_cache'], 10, 2); } @@ -385,8 +506,10 @@ public function update_footer_admin($footer) $legacyPlugin = Factory::getLegacyPlugin(); $html = '
        '; - $html .= $this->print_default_footer($legacyPlugin->modules->multiple_authors, - false); + $html .= $this->print_default_footer( + $legacyPlugin->modules->multiple_authors, + false + ); // We do not close the div by purpose. The footer contains it. @@ -399,25 +522,6 @@ public function update_footer_admin($footer) return $footer; } - public function filterDisplayFooter($shouldDisplay = true) - { - global $current_screen; - - if ($current_screen->base === 'edit-tags' && $current_screen->taxonomy === 'author') { - return true; - } - - if ($current_screen->base === 'term' && $current_screen->taxonomy === 'author') { - return true; - } - - if ($current_screen->base === 'authors_page_ppma-modules-settings') { - return true; - } - - return $shouldDisplay; - } - private function shouldDisplayFooter() { /** @@ -456,19 +560,40 @@ public function print_default_footer($current_module, $echo = true) 'plugin_name' => __('PublishPress Authors', 'publishpress-authors'), 'plugin_slug' => 'publishpress-authors', 'plugin_url' => PP_AUTHORS_URL, - 'rating_message' => __('If you like %s please leave us a %s rating. Thank you!', - 'publishpress-authors'), + 'rating_message' => __( + 'If you like %s please leave us a %s rating. Thank you!', + 'publishpress-authors' + ), ] ); } - if ( ! $echo) { + if (!$echo) { return $html; } echo $html; } + public function filterDisplayFooter($shouldDisplay = true) + { + global $current_screen; + + if ($current_screen->base === 'edit-tags' && $current_screen->taxonomy === 'author') { + return true; + } + + if ($current_screen->base === 'term' && $current_screen->taxonomy === 'author') { + return true; + } + + if ($current_screen->base === 'authors_page_ppma-modules-settings') { + return true; + } + + return $shouldDisplay; + } + public function action_widget_init() { register_widget('MultipleAuthors\\Widget'); @@ -482,7 +607,7 @@ public function action_widget_init() public function _filter_manage_posts_columns($posts_columns) { $new_columns = []; - if ( ! Utils::is_post_type_enabled()) { + if (!Utils::is_post_type_enabled()) { return $posts_columns; } @@ -521,15 +646,22 @@ public function _filter_manage_users_columns($columns) */ public function _action_quick_edit_custom_box($column_name, $post_type) { - if ('author' != $column_name || ! Utils::is_post_type_enabled($post_type) || ! Utils::current_user_can_set_authors()) { + if ('author' != $column_name || !Utils::is_post_type_enabled( + $post_type + ) || !Utils::current_user_can_set_authors()) { return; } ?> @@ -550,14 +682,20 @@ public function action_edited_term_taxonomy_flush_cache($tt_id, $taxonomy) return; } - $term_id = $wpdb->get_results($wpdb->prepare("SELECT term_id FROM $wpdb->term_taxonomy WHERE term_taxonomy_id = %d ", - $tt_id)); + $term_id = $wpdb->get_results( + $wpdb->prepare( + "SELECT term_id FROM $wpdb->term_taxonomy WHERE term_taxonomy_id = %d ", + $tt_id + ) + ); $term = get_term_by('id', $term_id[0]->term_id, $taxonomy); $coauthor = $this->get_coauthor_by('user_nicename', $term->slug); - if ( ! $coauthor) { - return new WP_Error('missing-coauthor', - __('No co-author exists for that term', 'publishpress-authors')); + if (!$coauthor) { + return new WP_Error( + 'missing-coauthor', + __('No co-author exists for that term', 'publishpress-authors') + ); } wp_cache_delete('author-term-' . $coauthor->user_nicename, 'publishpress-authors'); @@ -594,7 +732,7 @@ public function get_coauthor_by($key, $value, $force = false) $value = preg_replace('#^cap\-#', '', $value); } $user = get_user_by($key, $value); - if ( ! $user) { + if (!$user) { return false; } $user->type = 'wpuser'; @@ -647,7 +785,7 @@ public function add_coauthors($post_id, $coauthors, $append = false) // update to the first WP_User $coauthor $post_author_user = get_user_by('id', get_post($post_id)->post_author); if (empty($post_author_user) - || ! in_array($post_author_user->user_login, $coauthors)) { + || !in_array($post_author_user->user_login, $coauthors)) { foreach ($coauthor_objects as $coauthor_object) { if ('wpuser' == $coauthor_object->type) { $new_author = $coauthor_object; @@ -677,7 +815,7 @@ public function add_coauthors($post_id, $coauthors, $append = false) */ public function update_author_term($coauthor) { - if ( ! is_object($coauthor)) { + if (!is_object($coauthor)) { return false; } @@ -691,8 +829,11 @@ public function update_author_term($coauthor) if ($term = $this->get_author_term($coauthor)) { if ($term->description != $term_description) { - wp_update_term($term->term_id, $this->coauthor_taxonomy, - ['description' => $term_description]); + wp_update_term( + $term->term_id, + $this->coauthor_taxonomy, + ['description' => $term_description] + ); } } else { $args = [ @@ -718,7 +859,7 @@ public function update_author_term($coauthor) */ public function get_author_term($coauthor) { - if ( ! is_object($coauthor)) { + if (!is_object($coauthor)) { return; } @@ -743,7 +884,7 @@ public function get_author_term($coauthor) */ public function filter_wp_get_object_terms($terms, $object_ids, $taxonomies, $args) { - if ( ! isset($_REQUEST['bulk_edit']) || "'author'" !== $taxonomies) { + if (!isset($_REQUEST['bulk_edit']) || "'author'" !== $taxonomies) { return $terms; } @@ -751,8 +892,11 @@ public function filter_wp_get_object_terms($terms, $object_ids, $taxonomies, $ar $orderby = 'ORDER BY tr.term_order'; $order = 'ASC'; $object_ids = (int)$object_ids; - $query = $wpdb->prepare("SELECT t.name, t.term_id, tt.term_taxonomy_id FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON tt.term_id = t.term_id INNER JOIN $wpdb->term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN (%s) AND tr.object_id IN (%s) $orderby $order", - $this->coauthor_taxonomy, $object_ids); + $query = $wpdb->prepare( + "SELECT t.name, t.term_id, tt.term_taxonomy_id FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON tt.term_id = t.term_id INNER JOIN $wpdb->term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN (%s) AND tr.object_id IN (%s) $orderby $order", + $this->coauthor_taxonomy, + $object_ids + ); $raw_coauthors = $wpdb->get_results($query); $terms = []; foreach ($raw_coauthors as $author) { @@ -814,7 +958,7 @@ public function filter_count_user_posts($count, $user_id) $author = Author::get_by_user_id($user_id); - if ( ! is_object($author)) { + if (!is_object($author)) { return 0; } @@ -841,18 +985,18 @@ public function fix_author_page($query_str) { $legacyPlugin = Factory::getLegacyPlugin(); - if (empty($legacyPlugin) || ! isset($legacyPlugin->multiple_authors) || ! Utils::is_post_type_enabled()) { + if (empty($legacyPlugin) || !isset($legacyPlugin->multiple_authors) || !Utils::is_post_type_enabled()) { return; } global $wp_query; global $authordata; - if ( ! is_object($wp_query)) { + if (!is_object($wp_query)) { return; } - if ( ! is_author() && (empty($wp_query->query) || ! array_key_exists('author', $wp_query->query))) { + if (!is_author() && (empty($wp_query->query) || !array_key_exists('author', $wp_query->query))) { return; } @@ -861,7 +1005,7 @@ public function fix_author_page($query_str) $author = null; $term = null; - if ( ! empty($author_name)) { + if (!empty($author_name)) { $author = Author::get_by_term_slug($author_name); $wp_query->set('author_name', $author_name); @@ -891,7 +1035,7 @@ public function fix_post(WP_Post $post) { $legacyPlugin = Factory::getLegacyPlugin(); - if (empty($legacyPlugin) || ! isset($legacyPlugin->multiple_authors) || ! Utils::is_post_type_enabled()) { + if (empty($legacyPlugin) || !isset($legacyPlugin->multiple_authors) || !Utils::is_post_type_enabled()) { return $post; } @@ -906,13 +1050,16 @@ public function fix_post(WP_Post $post) $author = $authors[0]; // Includes the name of all authors in the author name. - $authors = array_map(function ($value) { - if (is_object($value) && isset($value->display_name)) { - $value = $value->display_name; - } + $authors = array_map( + function ($value) { + if (is_object($value) && isset($value->display_name)) { + $value = $value->display_name; + } - return $value; - }, $authors); + return $value; + }, + $authors + ); $authors_str = implode(', ', $authors); @@ -932,7 +1079,7 @@ public function fix_post(WP_Post $post) $author_slug = $author->slug; } - if ( ! empty($authordata)) { + if (!empty($authordata)) { $authordata->display_name = $authors_str; $authordata->ID = $author_id; $authordata->user_nicename = $author_slug; @@ -993,7 +1140,7 @@ public function search_authors($search = '', $ignored_authors = []) $found_users = []; foreach ($found_terms as $found_term) { $found_user = $this->get_coauthor_by('user_nicename', $found_term->slug); - if ( ! empty($found_user)) { + if (!empty($found_user)) { $found_users[$found_user->user_login] = $found_user; } } @@ -1005,8 +1152,12 @@ public function search_authors($search = '', $ignored_authors = []) if (in_array($found_user->user_login, $ignored_authors)) { unset($found_users[$key]); } else { - if ('wpuser' === $found_user->type && false === $found_user->has_cap(apply_filters('coauthors_edit_author_cap', - 'edit_posts'))) { + if ('wpuser' === $found_user->type && false === $found_user->has_cap( + apply_filters( + 'coauthors_edit_author_cap', + 'edit_posts' + ) + )) { unset($found_users[$key]); } } @@ -1021,8 +1172,11 @@ public function search_authors($search = '', $ignored_authors = []) public function action_pre_user_query(&$user_query) { if (is_object($user_query)) { - $user_query->query_where = str_replace('user_nicename LIKE', 'display_name LIKE', - $user_query->query_where); + $user_query->query_where = str_replace( + 'user_nicename LIKE', + 'display_name LIKE', + $user_query->query_where + ); } } @@ -1046,13 +1200,15 @@ public function enqueue_scripts($hook_suffix) wp_enqueue_script('jquery'); wp_enqueue_script('jquery-ui-sortable'); - wp_enqueue_style('pressshack-style', + wp_enqueue_style( + 'pressshack-style', PP_AUTHORS_ASSETS_URL . '/css/pressshack-admin.css', [], PP_AUTHORS_VERSION ); - wp_enqueue_style('multiple-authors-style', + wp_enqueue_style( + 'multiple-authors-style', PP_AUTHORS_ASSETS_URL . '/css/multiple-authors.css', [], PP_AUTHORS_VERSION @@ -1073,19 +1229,22 @@ public function enqueue_scripts($hook_suffix) PP_AUTHORS_VERSION ); - wp_enqueue_script('multiple-authors-select2', + wp_enqueue_script( + 'multiple-authors-select2', PP_AUTHORS_ASSETS_URL . '/lib/select2/js/select2.min.js', ['jquery'], PP_AUTHORS_VERSION ); - wp_enqueue_style('multiple-authors-select2', + wp_enqueue_style( + 'multiple-authors-select2', PP_AUTHORS_ASSETS_URL . '/lib/select2/css/select2.min.css', [], PP_AUTHORS_VERSION ); - wp_enqueue_script('multiple-authors-js', + wp_enqueue_script( + 'multiple-authors-js', PP_AUTHORS_ASSETS_URL . '/js/multiple-authors.js', ['jquery', 'suggest', 'multiple-authors-select2', 'jquery-ui-sortable', 'wp-util'], PP_AUTHORS_VERSION @@ -1097,26 +1256,42 @@ public function enqueue_scripts($hook_suffix) $js_strings = [ 'edit_label' => __('Edit', 'publishpress-authors'), - 'confirm_delete' => __('Are you sure you want to remove this author?', - 'publishpress-authors'), - 'input_box_title' => __('Click to change this author, or drag to change their position', - 'publishpress-authors'), + 'confirm_delete' => __( + 'Are you sure you want to remove this author?', + 'publishpress-authors' + ), + 'input_box_title' => __( + 'Click to change this author, or drag to change their position', + 'publishpress-authors' + ), 'search_box_text' => __('Search for an author', 'publishpress-authors'), - 'help_text' => __('Click on an author to change them. Drag to change their order. Click on Remove to remove them.', - 'publishpress-authors'), - 'confirm_delete_mapped_authors' => __('Are you sure you want to delete the authors profiles mapped to users? This action can\'t be undone.', - 'publishpress-authors'), - 'confirm_delete_guest_authors' => __('Are you sure you want to delete the guest authors profiles? This action can\'t be undone.', - 'publishpress-authors'), - 'confirm_create_post_authors' => __('Are you sure you want to create author profiles for the missed post authors?', - 'publishpress-authors'), - 'confirm_create_role_authors' => __('Are you sure you want to create authors for the selected roles?', - 'publishpress-authors'), + 'help_text' => __( + 'Click on an author to change them. Drag to change their order. Click on Remove to remove them.', + 'publishpress-authors' + ), + 'confirm_delete_mapped_authors' => __( + 'Are you sure you want to delete the authors profiles mapped to users? This action can\'t be undone.', + 'publishpress-authors' + ), + 'confirm_delete_guest_authors' => __( + 'Are you sure you want to delete the guest authors profiles? This action can\'t be undone.', + 'publishpress-authors' + ), + 'confirm_create_post_authors' => __( + 'Are you sure you want to create author profiles for the missed post authors?', + 'publishpress-authors' + ), + 'confirm_create_role_authors' => __( + 'Are you sure you want to create authors for the selected roles?', + 'publishpress-authors' + ), 'ajax_get_author_data_url' => admin_url('admin-ajax.php?action=author_get_user_data&nonce=' . $nonce), - 'menu_slug' => \MA_Multiple_Authors::MENU_SLUG, + 'menu_slug' => MA_Multiple_Authors::MENU_SLUG, 'wait_text' => __('Please, wait...', 'publishpress-authors'), - 'error_on_request' => __('Sorry, the request returned an error.', - 'publishpress-authors'), + 'error_on_request' => __( + 'Sorry, the request returned an error.', + 'publishpress-authors' + ), ]; wp_localize_script('multiple-authors-js', 'MultipleAuthorsStrings', $js_strings); @@ -1155,14 +1330,23 @@ public function filter_views($views) if ('post' != Util::get_current_post_type()) { $mine_args['post_type'] = Util::get_current_post_type(); } - if ( ! empty($_REQUEST['author_name']) && wp_get_current_user()->user_nicename == $_REQUEST['author_name']) { + if (!empty($_REQUEST['author_name']) && wp_get_current_user()->user_nicename == $_REQUEST['author_name']) { $class = ' class="current"'; } else { $class = ''; } - $views['mine'] = $view_mine = '' . __('Mine', - 'publishpress-authors') . ''; + $views['mine'] = $view_mine = '' . __( + 'Mine', + 'publishpress-authors' + ) . ''; $views['all'] = str_replace($class, '', $all_view); $views = array_reverse($views); @@ -1180,7 +1364,7 @@ public function filter_user_has_cap($allcaps, $caps, $args) $post_id = isset($args[2]) ? $args[2] : 0; $obj = get_post_type_object(Util::get_current_post_type($post_id)); - if ( ! $obj || 'revision' == $obj->name) { + if (!$obj || 'revision' == $obj->name) { return $allcaps; } @@ -1189,18 +1373,18 @@ public function filter_user_has_cap($allcaps, $caps, $args) 'edit_post', // Need to filter this too, unfortunately: http://core.trac.wordpress.org/ticket/22415 $obj->cap->edit_others_posts, // This as well: http://core.trac.wordpress.org/ticket/22417 ]; - if ( ! in_array($cap, $caps_to_modify)) { + if (!in_array($cap, $caps_to_modify)) { return $allcaps; } - if ( ! is_user_logged_in()) { + if (!is_user_logged_in()) { return $allcaps; } $allowEdit = is_multiple_author_for_post($user_id, $post_id); // Not an author, does the post has an author? If not, can we edit it? - if ( ! $allowEdit) { + if (!$allowEdit) { $post_authors = get_multiple_authors($post_id); if (empty($post_authors) && isset($allcaps['ppma_edit_orphan_post']) && $allcaps['ppma_edit_orphan_post']) { @@ -1213,10 +1397,10 @@ public function filter_user_has_cap($allcaps, $caps, $args) $post_status = get_post_status($post_id); if ('publish' == $post_status && - (isset($obj->cap->edit_published_posts) && ! empty($current_user->allcaps[$obj->cap->edit_published_posts]))) { + (isset($obj->cap->edit_published_posts) && !empty($current_user->allcaps[$obj->cap->edit_published_posts]))) { $allcaps[$obj->cap->edit_published_posts] = true; } elseif ('private' == $post_status && - (isset($obj->cap->edit_private_posts) && ! empty($current_user->allcaps[$obj->cap->edit_private_posts]))) { + (isset($obj->cap->edit_private_posts) && !empty($current_user->allcaps[$obj->cap->edit_private_posts]))) { $allcaps[$obj->cap->edit_private_posts] = true; } @@ -1237,7 +1421,7 @@ public function filter_user_has_cap($allcaps, $caps, $args) public function filter_ef_calendar_item_information_fields($information_fields, $post_id) { // Don't add the author row again if another plugin has removed - if ( ! array_key_exists('author', $information_fields)) { + if (!array_key_exists('author', $information_fields)) { return $information_fields; } @@ -1304,11 +1488,13 @@ public function filter_jetpack_open_graph_tags($og_tags, $image_dimensions) } else { if (is_singular() && Utils::is_post_type_enabled()) { $authors = get_multiple_authors(); - if ( ! empty($authors)) { + if (!empty($authors)) { $author = array_shift($authors); if (isset($og_tags['article:author'])) { - $og_tags['article:author'] = get_author_posts_url($author->ID, - $author->user_nicename); + $og_tags['article:author'] = get_author_posts_url( + $author->ID, + $author->user_nicename + ); } } } @@ -1330,7 +1516,7 @@ public function filter_jetpack_open_graph_tags($og_tags, $image_dimensions) */ public function get_coauthor_terms_for_post($post_id) { - if ( ! $post_id) { + if (!$post_id) { return []; } @@ -1338,10 +1524,14 @@ public function get_coauthor_terms_for_post($post_id) $coauthor_terms = wp_cache_get($cache_key, 'publishpress-authors'); if (false === $coauthor_terms) { - $coauthor_terms = wp_get_object_terms($post_id, $this->coauthor_taxonomy, [ - 'orderby' => 'term_order', - 'order' => 'ASC', - ]); + $coauthor_terms = wp_get_object_terms( + $post_id, + $this->coauthor_taxonomy, + [ + 'orderby' => 'term_order', + 'order' => 'ASC', + ] + ); // This usually happens if the taxonomy doesn't exist, which should never happen, but you never know. if (is_wp_error($coauthor_terms)) { @@ -1462,9 +1652,12 @@ public function activation_hook() public function filterCMECapabilities($capabilities) { - $capabilities = array_merge($capabilities, [ - 'ppma_manage_authors', - ]); + $capabilities = array_merge( + $capabilities, + [ + 'ppma_manage_authors', + ] + ); return $capabilities; } diff --git a/core/Services.php b/core/Services.php index 03129340..36baa58f 100644 --- a/core/Services.php +++ b/core/Services.php @@ -13,9 +13,6 @@ use MultipleAuthors\Classes\Legacy\LegacyPlugin; use Pimple\Container as Pimple; use Pimple\ServiceProviderInterface; -use PublishPress\EDD_License\Core\Container as EDDContainer; -use PublishPress\EDD_License\Core\Services as EDDServices; -use PublishPress\EDD_License\Core\ServicesConfig as EDDServicesConfig; use Twig_Environment; use Twig_Loader_Filesystem; use Twig_SimpleFunction; @@ -57,47 +54,63 @@ public function register(Pimple $container) $container['twig'] = function ($c) { $twig = new Twig_Environment($c['twig_loader']); - $function = new Twig_SimpleFunction('settings_fields', function () use ($c) { + $function = new Twig_SimpleFunction( + 'settings_fields', function () use ($c) { return settings_fields('multiple_authors_options'); - }); + } + ); $twig->addFunction($function); - $function = new Twig_SimpleFunction('nonce_field', function ($context) { + $function = new Twig_SimpleFunction( + 'nonce_field', function ($context) { return wp_nonce_field($context); - }); + } + ); $twig->addFunction($function); - $function = new Twig_SimpleFunction('submit_button', function () { + $function = new Twig_SimpleFunction( + 'submit_button', function () { return submit_button(); - }); + } + ); $twig->addFunction($function); - $function = new Twig_SimpleFunction('__', function ($id) { + $function = new Twig_SimpleFunction( + '__', function ($id) { return __($id, 'publishpress-authors'); - }); + } + ); $twig->addFunction($function); - $function = new Twig_SimpleFunction('do_settings_sections', function ($section) { + $function = new Twig_SimpleFunction( + 'do_settings_sections', function ($section) { return do_settings_sections($section); - }); + } + ); $twig->addFunction($function); - $function = new \Twig_SimpleFunction('esc_attr', function ($string) { + $function = new Twig_SimpleFunction( + 'esc_attr', function ($string) { return esc_attr($string); - }); + } + ); $twig->addFunction($function); - $function = new \Twig_SimpleFunction('do_shortcode', function ($string) { + $function = new Twig_SimpleFunction( + 'do_shortcode', function ($string) { do_shortcode($string); - }); + } + ); $twig->addFunction($function); /** * @deprecated 2.2.1 Replaced by the author.avatar attribute, which includes avatar for guest authors. */ - $function = new \Twig_SimpleFunction('get_avatar', function ($user_email, $size = 35) { + $function = new Twig_SimpleFunction( + 'get_avatar', function ($user_email, $size = 35) { return get_avatar($user_email, $size); - }); + } + ); $twig->addFunction($function); /** diff --git a/core/Traits/Author_box.php b/core/Traits/Author_box.php index 64270bb0..14f0b144 100644 --- a/core/Traits/Author_box.php +++ b/core/Traits/Author_box.php @@ -18,7 +18,7 @@ trait Author_box /** * Returns true if the post type and current page is valid. * - * @return boolean + * @return bool */ protected function should_display_author_box() { @@ -34,17 +34,17 @@ protected function should_display_author_box() * Returns true if the current page is valid to display. Basically, * we should display only if is a post's page. * - * @return boolean + * @return bool */ protected function is_valid_page_to_display_author_box() { - return ! is_home() && ! is_category() && (is_single() || is_page()); + return !is_home() && !is_category() && (is_single() || is_page()); } /** * Returns true if the current post type is valid, selected in the options. * - * @return boolean + * @return bool */ protected function is_valid_post_type_to_display_author_box() { @@ -79,23 +79,28 @@ protected function get_author_box_markup( $html = ''; wp_enqueue_style('dashicons'); - wp_enqueue_style('multiple-authors-widget-css', + wp_enqueue_style( + 'multiple-authors-widget-css', PP_AUTHORS_ASSETS_URL . '/css/multiple-authors-widget.css', false, - PP_AUTHORS_VERSION, 'all'); + PP_AUTHORS_VERSION, + 'all' + ); - if ( ! function_exists('multiple_authors')) { + if (!function_exists('multiple_authors')) { require_once PP_AUTHORS_BASE_PATH . 'template-tags.php'; } $css_class = ''; - if ( ! empty($target)) { + if (!empty($target)) { $css_class = 'multiple-authors-target-' . str_replace('_', '-', $target); } $title = isset($legacyPlugin->modules->multiple_authors->options->title_appended_to_content) - ? $legacyPlugin->modules->multiple_authors->options->title_appended_to_content : esc_html__('Authors', - 'publishpress-authors'); + ? $legacyPlugin->modules->multiple_authors->options->title_appended_to_content : esc_html__( + 'Authors', + 'publishpress-authors' + ); $title = esc_html($title); if (empty($layout)) { @@ -110,15 +115,15 @@ protected function get_author_box_markup( ? 'yes' === $legacyPlugin->modules->multiple_authors->options->show_site_link : true; $args = [ - 'show_title' => $show_title, - 'css_class' => $css_class, - 'title' => $title, - 'authors' => get_multiple_authors($post_id, true, $archive), - 'target' => $target, - 'item_class' => 'author url fn', - 'layout' => $layout, - 'show_email' => $show_email, - 'show_site' => $show_site, + 'show_title' => $show_title, + 'css_class' => $css_class, + 'title' => $title, + 'authors' => get_multiple_authors($post_id, true, $archive), + 'target' => $target, + 'item_class' => 'author url fn', + 'layout' => $layout, + 'show_email' => $show_email, + 'show_site' => $show_site, ]; /** @@ -147,8 +152,12 @@ protected function get_author_box_markup( * * @deprecated since 2.4.0, use pp_multiple_authors_author_box_rendered_markup instead. */ - $html = apply_filters('pp_multiple_authors_filter_author_box_markup', $html, $authors_iterator, - $target); + $html = apply_filters( + 'pp_multiple_authors_filter_author_box_markup', + $html, + $authors_iterator, + $target + ); /** * Filter the rendered markup of the author box. @@ -157,8 +166,12 @@ protected function get_author_box_markup( * @param Authors_Iterator $authors_iterator * @param string $target */ - $html = apply_filters('pp_multiple_authors_author_box_rendered_markup', $html, $authors_iterator, - $target); + $html = apply_filters( + 'pp_multiple_authors_author_box_rendered_markup', + $html, + $authors_iterator, + $target + ); return $html; } diff --git a/core/WP_Cli.php b/core/WP_Cli.php index 2c291b61..68c5c0a1 100644 --- a/core/WP_Cli.php +++ b/core/WP_Cli.php @@ -11,9 +11,9 @@ namespace MultipleAuthors; -use \WP_CLI_Command; +use WP_CLI_Command; -class WP_Cli extends \WP_CLI_Command +class WP_Cli extends WP_CLI_Command { /** @@ -44,9 +44,7 @@ public function create_terms_for_posts() $total_posts = $posts->found_posts; self::line("Now inspecting or updating {$posts->found_posts} total posts."); while ($posts->post_count) { - foreach ($posts->posts as $single_post) { - $count++; $terms = cap_get_coauthor_terms_for_post($single_post->ID); @@ -54,22 +52,35 @@ public function create_terms_for_posts() self::error(sprintf('No co-authors found for post #%d.', $single_post->ID)); } - if ( ! empty($terms)) { - self::line("{$count}/{$posts->found_posts}) Skipping - Post #{$single_post->ID} '{$single_post->post_title}' already has these terms: " . implode(', ', - wp_list_pluck($terms, 'name'))); + if (!empty($terms)) { + self::line( + "{$count}/{$posts->found_posts}) Skipping - Post #{$single_post->ID} '{$single_post->post_title}' already has these terms: " . implode( + ', ', + wp_list_pluck($terms, 'name') + ) + ); continue; } - $author = ( ! empty($authors[$single_post->post_author])) ? $authors[$single_post->post_author] : get_user_by('id', - $single_post->post_author); + $author = (!empty($authors[$single_post->post_author])) ? $authors[$single_post->post_author] : get_user_by( + 'id', + $single_post->post_author + ); $authors[$single_post->post_author] = $author; - $author_term = ( ! empty($author_terms[$single_post->post_author])) ? $author_terms[$single_post->post_author] : $multiple_authors_addon->update_author_term($author); + $author_term = (!empty($author_terms[$single_post->post_author])) ? $author_terms[$single_post->post_author] : $multiple_authors_addon->update_author_term( + $author + ); $author_terms[$single_post->post_author] = $author_term; - wp_set_post_terms($single_post->ID, [$author_term->slug], - $multiple_authors_addon->coauthor_taxonomy); - self::line("{$count}/{$total_posts}) Added - Post #{$single_post->ID} '{$single_post->post_title}' now has an author term for: " . $author->user_nicename); + wp_set_post_terms( + $single_post->ID, + [$author_term->slug], + $multiple_authors_addon->coauthor_taxonomy + ); + self::line( + "{$count}/{$total_posts}) Added - Post #{$single_post->ID} '{$single_post->post_title}' now has an author term for: " . $author->user_nicename + ); $affected++; } @@ -87,7 +98,6 @@ public function create_terms_for_posts() } self::success("Done! Of {$total_posts} posts, {$affected} now have author terms."); - } /** @@ -99,7 +109,7 @@ private function stop_the_insanity() $wpdb->queries = []; // or define( 'WP_IMPORTING', true ); - if ( ! is_object($wp_object_cache)) { + if (!is_object($wp_object_cache)) { return; } @@ -148,7 +158,6 @@ public function assign_coauthors($args, $assoc_args) $posts = new WP_Query($this->args); while ($posts->post_count) { - foreach ($posts->posts as $single_post) { $posts_total++; @@ -163,24 +172,35 @@ public function assign_coauthors($args, $assoc_args) } if ($already_associated) { $posts_already_associated++; - self::line($posts_total . ': Post #' . $single_post->ID . ' already has "' . $original_author . '" associated as a coauthor'); + self::line( + $posts_total . ': Post #' . $single_post->ID . ' already has "' . $original_author . '" associated as a coauthor' + ); continue; } // Make sure this original author exists as a co-author - if (( ! $coauthor = $multiple_authors_addon->get_coauthor_by('user_login', $original_author)) && - ( ! $coauthor = $multiple_authors_addon->get_coauthor_by('user_login', - sanitize_title($original_author)))) { + if ((!$coauthor = $multiple_authors_addon->get_coauthor_by('user_login', $original_author)) && + (!$coauthor = $multiple_authors_addon->get_coauthor_by( + 'user_login', + sanitize_title($original_author) + ))) { $posts_missing_coauthor++; $missing_coauthors[] = $original_author; - self::line($posts_total . ': Post #' . $single_post->ID . ' does not have "' . $original_author . '" associated as a coauthor but there is not a coauthor profile'); + self::line( + $posts_total . ': Post #' . $single_post->ID . ' does not have "' . $original_author . '" associated as a coauthor but there is not a coauthor profile' + ); continue; } // Assign the coauthor to the post - $multiple_authors_addon->add_coauthors($single_post->ID, [$coauthor->user_nicename], - $append_coauthors); - self::line($posts_total . ': Post #' . $single_post->ID . ' has been assigned "' . $original_author . '" as the author'); + $multiple_authors_addon->add_coauthors( + $single_post->ID, + [$coauthor->user_nicename], + $append_coauthors + ); + self::line( + $posts_total . ': Post #' . $single_post->ID . ' has been assigned "' . $original_author . '" as the author' + ); $posts_associated++; clean_post_cache($single_post->ID); } @@ -201,7 +221,6 @@ public function assign_coauthors($args, $assoc_args) if ($posts_associated) { self::line("- {$posts_associated} posts now have the proper coauthor"); } - } /** @@ -226,40 +245,54 @@ public function assign_user_to_coauthor($args, $assoc_args) $user = get_user_by('login', $assoc_args['user_login']); $coauthor = $multiple_authors_addon->get_coauthor_by('login', $assoc_args['coauthor']); - if ( ! $user) { + if (!$user) { self::error(__('Please specify a valid user_login', 'publishpress-authors')); } - if ( ! $coauthor) { + if (!$coauthor) { self::error(__('Please specify a valid co-author login', 'publishpress-authors')); } $post_types = implode("','", $multiple_authors_addon->supported_post_types); - $posts = $wpdb->get_col($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_author=%d AND post_type IN ('$post_types')", - $user->ID)); + $posts = $wpdb->get_col( + $wpdb->prepare( + "SELECT ID FROM $wpdb->posts WHERE post_author=%d AND post_type IN ('$post_types')", + $user->ID + ) + ); $affected = 0; foreach ($posts as $post_id) { $coauthors = cap_get_coauthor_terms_for_post($post_id); - if ( ! empty($coauthors)) { - self::line(sprintf( - __('Skipping - Post #%d already has co-authors assigned: %s', 'publishpress-authors'), - $post_id, - implode(', ', wp_list_pluck($coauthors, 'slug')) - )); + if (!empty($coauthors)) { + self::line( + sprintf( + __('Skipping - Post #%d already has co-authors assigned: %s', 'publishpress-authors'), + $post_id, + implode(', ', wp_list_pluck($coauthors, 'slug')) + ) + ); continue; } $multiple_authors_addon->add_coauthors($post_id, [$coauthor->user_login]); - self::line(sprintf(__("Updating - Adding %s's byline to post #%d", 'publishpress-authors'), - $coauthor->user_login, $post_id)); + self::line( + sprintf( + __("Updating - Adding %s's byline to post #%d", 'publishpress-authors'), + $coauthor->user_login, + $post_id + ) + ); $affected++; if ($affected && 0 === $affected % 20) { sleep(5); } } - self::success(sprintf(__('All done! %d posts were affected.', 'publishpress-authors'), - $affected)); - + self::success( + sprintf( + __('All done! %d posts were affected.', 'publishpress-authors'), + $affected + ) + ); } /** @@ -315,15 +348,18 @@ public function reassign_terms($args, $assoc_args) 'success' => 0, ]; foreach ($authors_to_migrate as $old_user => $new_user) { - if (is_numeric($new_user)) { $new_user = get_user_by('id', $new_user)->user_login; } // The old user should exist as a term - $old_term = $multiple_authors_addon->get_author_term($multiple_authors_addon->get_coauthor_by('login', - $old_user)); - if ( ! $old_term) { + $old_term = $multiple_authors_addon->get_author_term( + $multiple_authors_addon->get_coauthor_by( + 'login', + $old_user + ) + ); + if (!$old_term) { self::line("Error: Term '{$old_user}' doesn't exist, skipping"); $results->old_term_missing++; continue; @@ -332,10 +368,16 @@ public function reassign_terms($args, $assoc_args) // If the new user exists as a term already, we want to reassign all posts to that // new term and delete the original // Otherwise, simply rename the old term - $new_term = $multiple_authors_addon->get_author_term($multiple_authors_addon->get_coauthor_by('login', - $new_user)); + $new_term = $multiple_authors_addon->get_author_term( + $multiple_authors_addon->get_coauthor_by( + 'login', + $new_user + ) + ); if (is_object($new_term)) { - self::line("Success: There's already a '{$new_user}' term for '{$old_user}'. Reassigning {$old_term->count} posts and then deleting the term"); + self::line( + "Success: There's already a '{$new_user}' term for '{$old_user}'. Reassigning {$old_term->count} posts and then deleting the term" + ); $args = [ 'default' => $new_term->term_id, 'force_default' => true, @@ -358,7 +400,6 @@ public function reassign_terms($args, $assoc_args) self::line("- $results->success authors were successfully reassigned terms"); self::line("- $results->new_term_exists authors had their old term merged to their new term"); self::line("- $results->old_term_missing authors were missing old terms"); - } /** @@ -382,11 +423,11 @@ public function rename_coauthor($args, $assoc_args) $to_userlogin = $assoc_args['to']; $orig_coauthor = $multiple_authors_addon->get_coauthor_by('user_login', $assoc_args['from']); - if ( ! $orig_coauthor) { + if (!$orig_coauthor) { self::error("No co-author found for {$assoc_args['from']}"); } - if ( ! $to_userlogin) { + if (!$to_userlogin) { self::error('--to param must not be empty'); } @@ -433,17 +474,17 @@ public function swap_coauthors($args, $assoc_args) $orig_coauthor = $multiple_authors_addon->get_coauthor_by('user_login', $from_userlogin); - if ( ! $orig_coauthor) { + if (!$orig_coauthor) { self::error("No co-author found for $from_userlogin"); } - if ( ! $to_userlogin) { + if (!$to_userlogin) { self::error('--to param must not be empty'); } $to_coauthor = $multiple_authors_addon->get_coauthor_by('user_login', $to_userlogin); - if ( ! $to_coauthor) { + if (!$to_coauthor) { self::error("No co-author found for $to_userlogin"); } @@ -474,7 +515,7 @@ public function swap_coauthors($args, $assoc_args) foreach ($posts->posts as $post) { $coauthors = get_multiple_authors($post->ID); - if ( ! is_array($coauthors) || ! count($coauthors)) { + if (!is_array($coauthors) || !count($coauthors)) { continue; } @@ -482,7 +523,7 @@ public function swap_coauthors($args, $assoc_args) $posts_total++; - if ( ! $dry) { + if (!$dry) { // Remove the $from_userlogin from $coauthors foreach ($coauthors as $index => $user_login) { if ($from_userlogin === $user_login) { @@ -498,11 +539,15 @@ public function swap_coauthors($args, $assoc_args) // By not passing $append = false as the 3rd param, we replace all existing coauthors $multiple_authors_addon->add_coauthors($post->ID, $coauthors, false); - self::line($posts_total . ': Post #' . $post->ID . ' has been assigned "' . $to_userlogin . '" as a co-author'); + self::line( + $posts_total . ': Post #' . $post->ID . ' has been assigned "' . $to_userlogin . '" as a co-author' + ); clean_post_cache($post->ID); } else { - self::line($posts_total . ': Post #' . $post->ID . ' will be assigned "' . $to_userlogin . '" as a co-author'); + self::line( + $posts_total . ': Post #' . $post->ID . ' will be assigned "' . $to_userlogin . '" as a co-author' + ); } } @@ -545,9 +590,7 @@ public function list_posts_without_terms($args, $assoc_args) $posts = new WP_Query($this->args); while ($posts->post_count) { - foreach ($posts->posts as $single_post) { - $terms = cap_get_coauthor_terms_for_post($single_post->ID); if (empty($terms)) { $saved = [ @@ -565,7 +608,6 @@ public function list_posts_without_terms($args, $assoc_args) $this->args['paged']++; $posts = new WP_Query($this->args); } - } /** @@ -586,7 +628,9 @@ public function update_author_terms() $multiple_authors_addon->update_author_term($coauthor); wp_cache_delete($author_term->term_id, $multiple_authors_addon->coauthor_taxonomy); $new_count = get_term_by('id', $author_term->term_id, $multiple_authors_addon->coauthor_taxonomy)->count; - self::line("Term {$author_term->slug} ({$author_term->term_id}) changed from {$old_count} to {$new_count} and the description was refreshed"); + self::line( + "Term {$author_term->slug} ({$author_term->term_id}) changed from {$old_count} to {$new_count} and the description was refreshed" + ); } // Create author terms for any users that don't have them $users = get_users(); @@ -617,7 +661,6 @@ public function remove_terms_from_revisions() self::line('Found ' . count($ids) . ' revisions to look through'); $affected = 0; foreach ($ids as $post_id) { - $terms = cap_get_coauthor_terms_for_post($post_id); if (empty($terms)) { continue; diff --git a/core/Widget.php b/core/Widget.php index 4c86c040..1afd9d77 100644 --- a/core/Widget.php +++ b/core/Widget.php @@ -26,8 +26,10 @@ public function __construct() esc_html__('Authors', 'publishpress-authors'), [ 'classname' => 'multiple_authors_widget', - 'description' => esc_html__('Display a list of authors for the current post.', - 'publishpress-authors'), + 'description' => esc_html__( + 'Display a list of authors for the current post.', + 'publishpress-authors' + ), ] ); } @@ -42,9 +44,12 @@ public function widget($args, $instance) { $legacyPlugin = Factory::getLegacyPlugin(); - $instance = wp_parse_args((array)$instance, [ - 'title' => esc_html__('Authors', 'publishpress-authors'), - ]); + $instance = wp_parse_args( + (array)$instance, + [ + 'title' => esc_html__('Authors', 'publishpress-authors'), + ] + ); /** This filter is documented in core/src/wp-includes/default-widgets.php */ $title = apply_filters('widget_title', $instance['title'], $instance, $this->id_base); @@ -73,10 +78,13 @@ public function form($instance) { $legacyPlugin = Factory::getLegacyPlugin(); - $instance = wp_parse_args((array)$instance, [ - 'title' => esc_html__('Authors', 'publishpress-authors'), - 'layout' => $legacyPlugin->modules->multiple_authors->options->layout, - ]); + $instance = wp_parse_args( + (array)$instance, + [ + 'title' => esc_html__('Authors', 'publishpress-authors'), + 'layout' => $legacyPlugin->modules->multiple_authors->options->layout, + ] + ); $title = strip_tags($instance['title']); $layout = strip_tags($instance['layout']); @@ -123,7 +131,7 @@ public function update($new_instance, $old_instance) $layouts = apply_filters('pp_multiple_authors_author_layouts', []); - if ( ! array_key_exists($instance['layout'], $layouts)) { + if (!array_key_exists($instance['layout'], $layouts)) { $instance['layout'] = $legacyPlugin->modules->multiple_authors->options->layout; } diff --git a/deprecated.php b/deprecated.php index 142c06b7..dd747185 100644 --- a/deprecated.php +++ b/deprecated.php @@ -20,17 +20,35 @@ class_alias(MultipleAuthors\Services::class, PublishPress\Addon\Multiple_authors class_alias(MultipleAuthors\Widget::class, PublishPress\Addon\Multiple_authors\Widget::class); //class_alias(MultipleAuthors\WP_Cli::class, PublishPress\Addon\Multiple_authors\WP_Cli::class); class_alias(MultipleAuthors\Classes\Admin_Ajax::class, PublishPress\Addon\Multiple_authors\Classes\Admin_Ajax::class); -class_alias(MultipleAuthors\Classes\Author_Editor::class, PublishPress\Addon\Multiple_authors\Classes\Author_Editor::class); -class_alias(MultipleAuthors\Classes\Authors_Iterator::class, PublishPress\Addon\Multiple_authors\Classes\Authors_Iterator::class); +class_alias( + MultipleAuthors\Classes\Author_Editor::class, + PublishPress\Addon\Multiple_authors\Classes\Author_Editor::class +); +class_alias( + MultipleAuthors\Classes\Authors_Iterator::class, + PublishPress\Addon\Multiple_authors\Classes\Authors_Iterator::class +); class_alias(MultipleAuthors\Classes\CLI::class, PublishPress\Addon\Multiple_authors\Classes\CLI::class); -class_alias(MultipleAuthors\Classes\Content_Model::class, PublishPress\Addon\Multiple_authors\Classes\Content_Model::class); +class_alias( + MultipleAuthors\Classes\Content_Model::class, + PublishPress\Addon\Multiple_authors\Classes\Content_Model::class +); class_alias(MultipleAuthors\Classes\Installer::class, PublishPress\Addon\Multiple_authors\Classes\Installer::class); class_alias(MultipleAuthors\Classes\Post_Editor::class, PublishPress\Addon\Multiple_authors\Classes\Post_Editor::class); class_alias(MultipleAuthors\Classes\Query::class, PublishPress\Addon\Multiple_authors\Classes\Query::class); class_alias(MultipleAuthors\Classes\Utils::class, PublishPress\Addon\Multiple_authors\Classes\Utils::class); -class_alias(MultipleAuthors\Classes\Objects\Author::class, PublishPress\Addon\Multiple_authors\Classes\Objects\Author::class); -class_alias(MultipleAuthors\Classes\Integrations\RSS::class, PublishPress\Addon\Multiple_authors\Classes\Integrations\RSS::class); -class_alias(MultipleAuthors\Classes\Integrations\Theme::class, PublishPress\Addon\Multiple_authors\Classes\Integrations\Theme::class); +class_alias( + MultipleAuthors\Classes\Objects\Author::class, + PublishPress\Addon\Multiple_authors\Classes\Objects\Author::class +); +class_alias( + MultipleAuthors\Classes\Integrations\RSS::class, + PublishPress\Addon\Multiple_authors\Classes\Integrations\RSS::class +); +class_alias( + MultipleAuthors\Classes\Integrations\Theme::class, + PublishPress\Addon\Multiple_authors\Classes\Integrations\Theme::class +); if (!defined('PUBLISHPRESS_MULTIPLE_AUTHORS_VERSION')) { define('PUBLISHPRESS_MULTIPLE_AUTHORS_VERSION', PP_AUTHORS_VERSION); diff --git a/includes.php b/includes.php index 05ebcccf..902ef2ea 100644 --- a/includes.php +++ b/includes.php @@ -9,9 +9,11 @@ * @since 1.0.0 */ +use PPVersionNotices\Module\MenuLink\Module; + defined('ABSPATH') or die('No direct script access allowed.'); -if ( ! defined('PP_AUTHORS_LOADED')) { +if (!defined('PP_AUTHORS_LOADED')) { define('PP_AUTHORS_VERSION', '3.2.4-hotfix-issue-93'); define('PP_AUTHORS_FILE', 'publishpress-authors/publishpress-authors.php'); define('PP_AUTHORS_BASE_PATH', plugin_dir_path(__FILE__)); @@ -37,29 +39,35 @@ require_once $includesPath; } - add_filter(\PPVersionNotices\Module\TopNotice\Module::SETTINGS_FILTER, function ($settings) { - $settings['publishpress-authors'] = [ - 'message' => 'You\'re using PublishPress Authors Free. The Pro version has more features and support. %sUpgrade to Pro%s', - 'link' => 'https://publishpress.com/links/authors-banner', - 'screens' => [ - ['base' => 'edit-tags', 'id' => 'edit-author','taxonomy' => 'author'], - ['base' => 'term', 'id' => 'edit-author','taxonomy' => 'author'], - ['base' => 'authors_page_ppma-modules-settings', 'id' => 'authors_page_ppma-modules-settings'], - ] - ]; + add_filter( + \PPVersionNotices\Module\TopNotice\Module::SETTINGS_FILTER, + function ($settings) { + $settings['publishpress-authors'] = [ + 'message' => 'You\'re using PublishPress Authors Free. The Pro version has more features and support. %sUpgrade to Pro%s', + 'link' => 'https://publishpress.com/links/authors-banner', + 'screens' => [ + ['base' => 'edit-tags', 'id' => 'edit-author', 'taxonomy' => 'author'], + ['base' => 'term', 'id' => 'edit-author', 'taxonomy' => 'author'], + ['base' => 'authors_page_ppma-modules-settings', 'id' => 'authors_page_ppma-modules-settings'], + ] + ]; - return $settings; - }); + return $settings; + } + ); - add_filter(\PPVersionNotices\Module\MenuLink\Module::SETTINGS_FILTER, function ($settings) { - $settings['publishpress-authors'] = [ - 'parent' => 'ppma-authors', - 'label' => 'Upgrade to Pro', - 'link' => 'https://publishpress.com/links/authors-menu', - ]; + add_filter( + Module::SETTINGS_FILTER, + function ($settings) { + $settings['publishpress-authors'] = [ + 'parent' => 'ppma-authors', + 'label' => 'Upgrade to Pro', + 'link' => 'https://publishpress.com/links/authors-menu', + ]; - return $settings; - }); + return $settings; + } + ); } require_once __DIR__ . '/modules/multiple-authors/multiple-authors.php'; diff --git a/integrations/amp.php b/integrations/amp.php index 4714a38c..b10e9c22 100644 --- a/integrations/amp.php +++ b/integrations/amp.php @@ -1,6 +1,6 @@ ); } - renderLog () { + renderLog() { return ( ); } - render () { + render() { let isEnabled = !this.state.inProgress; let progressBar = (this.state.inProgress) ? this.renderProgressBar() : ''; @@ -231,11 +231,11 @@ class PPAuthorsBylineMigrationBox extends React.Component { } class PPAuthorsMaintenanceButton extends React.Component { - constructor (props) { + constructor(props) { super(props); } - render () { + render() { var disabled = !this.props.enabled; return (
        {this.props.log}
        @@ -262,17 +262,17 @@ class PPAuthorsMaintenanceLog extends React.Component { } class PPAuthorsProgressBar extends React.Component { - constructor (props) { + constructor(props) { super(props); } - renderLabel () { + renderLabel() { return (
        {this.props.value} %
        ); } - render () { + render() { let className = 'p-progressbar p-component p-progressbar-determinate'; let label = this.renderLabel(); @@ -289,8 +289,8 @@ class PPAuthorsProgressBar extends React.Component { jQuery(function () { ReactDOM.render(, + nonce={ppmaBylineMigration.nonce} + chunkSize={5}/>, document.getElementById('publishpress-authors-byline-migration') ); }); diff --git a/modules/byline-migration/byline-migration.php b/modules/byline-migration/byline-migration.php index a83e59ff..7db4217d 100644 --- a/modules/byline-migration/byline-migration.php +++ b/modules/byline-migration/byline-migration.php @@ -21,12 +21,9 @@ * along with PublishPress. If not, see . */ -use MultipleAuthors\Classes\Installer; use MultipleAuthors\Classes\Legacy\Module; -use MultipleAuthors\Classes\Authors_Iterator; -use MultipleAuthors\Classes\Utils; -use MultipleAuthors\Factory; use MultipleAuthors\Classes\Objects\Author; +use MultipleAuthors\Factory; if (!class_exists('MA_Byline_Migration')) { /** @@ -175,17 +172,19 @@ public function registerMaintenanceAction($actions) private function getTotalOfNotMigratedByline() { - $terms = get_terms([ - 'taxonomy' => 'byline', - 'hide_empty' => false, - 'number' => 0, - 'meta_query' => [ - [ - 'key' => 'ppma-migrated', - 'compare' => 'NOT EXISTS', + $terms = get_terms( + [ + 'taxonomy' => 'byline', + 'hide_empty' => false, + 'number' => 0, + 'meta_query' => [ + [ + 'key' => 'ppma-migrated', + 'compare' => 'NOT EXISTS', + ], ], - ], - ]); + ] + ); return count($terms); } @@ -197,9 +196,11 @@ public function getBylineMigrationData() } // nonce: migrate_coauthors - wp_send_json([ - 'total' => $this->getTotalOfNotMigratedByline(), - ]); + wp_send_json( + [ + 'total' => $this->getTotalOfNotMigratedByline(), + ] + ); } public function migrateBylineData() @@ -210,30 +211,34 @@ public function migrateBylineData() $keyForNotMigrated = 'ppma-migrated'; - $termsToMigrate = get_terms([ - 'taxonomy' => 'byline', - 'hide_empty' => false, - 'number' => 5, - 'meta_query' => [ - [ - 'key' => $keyForNotMigrated, - 'compare' => 'NOT EXISTS', + $termsToMigrate = get_terms( + [ + 'taxonomy' => 'byline', + 'hide_empty' => false, + 'number' => 5, + 'meta_query' => [ + [ + 'key' => $keyForNotMigrated, + 'compare' => 'NOT EXISTS', + ], ], - ], - ]); + ] + ); if (!empty($termsToMigrate)) { foreach ($termsToMigrate as $term) { - - $author = Author::create([ - 'display_name' => $term->name, - 'slug' => $term->slug, - ]); + $author = Author::create( + [ + 'display_name' => $term->name, + 'slug' => $term->slug, + ] + ); update_term_meta($author->term_id, 'description', $term->description); // Migrate the posts for the author - $posts = get_posts([ + $posts = get_posts( + [ 'numberposts' => -1, 'tax_query' => [ [ @@ -254,10 +259,12 @@ public function migrateBylineData() } } - wp_send_json([ - 'success' => true, - 'total' => $this->getTotalOfNotMigratedByline(), - ]); + wp_send_json( + [ + 'success' => true, + 'total' => $this->getTotalOfNotMigratedByline(), + ] + ); } public function deactivateByline() @@ -268,9 +275,11 @@ public function deactivateByline() deactivate_plugins('byline/byline.php'); - wp_send_json([ - 'deactivated' => true, - ]); + wp_send_json( + [ + 'deactivated' => true, + ] + ); } } } diff --git a/modules/bylines-migration/bylines-migration.php b/modules/bylines-migration/bylines-migration.php index 7dad98e8..f6d7d2b1 100644 --- a/modules/bylines-migration/bylines-migration.php +++ b/modules/bylines-migration/bylines-migration.php @@ -295,7 +295,7 @@ public function migrateBylinesData() } // Migrate the posts' terms relationship. - $sql = $wpdb->prepare( + $sql = $wpdb->prepare( " INSERT INTO {$wpdb->term_relationships} SELECT object_id, %s, term_order diff --git a/modules/default-layouts/default-layouts.php b/modules/default-layouts/default-layouts.php index e7eb3e20..d045807a 100644 --- a/modules/default-layouts/default-layouts.php +++ b/modules/default-layouts/default-layouts.php @@ -24,7 +24,7 @@ use MultipleAuthors\Classes\Legacy\Module; use MultipleAuthors\Factory; -if ( ! class_exists('MA_Default_Layouts')) { +if (!class_exists('MA_Default_Layouts')) { /** * class MA_Multiple_Authors */ @@ -85,13 +85,13 @@ public function init() */ public function renderBoxHTML($html, $args) { - if ( ! isset($args['layout'])) { + if (!isset($args['layout'])) { $args['layout'] = apply_filters('pp_multiple_authors_default_layout', 'inline'); } // Check if the layout exists $twigFile = 'author_layout/' . $args['layout'] . '.twig'; - if ( ! file_exists(PP_AUTHORS_BASE_PATH . 'twig/' . $twigFile)) { + if (!file_exists(PP_AUTHORS_BASE_PATH . 'twig/' . $twigFile)) { error_log('PublishPress Authors twig file not found for the layout: ' . $args['layout']); return $html; diff --git a/modules/modules-settings/modules-settings.php b/modules/modules-settings/modules-settings.php index 80a9d91a..7b58f451 100644 --- a/modules/modules-settings/modules-settings.php +++ b/modules/modules-settings/modules-settings.php @@ -29,10 +29,9 @@ */ use MultipleAuthors\Classes\Legacy\Module; -use MultipleAuthors\Classes\Legacy\Util; use MultipleAuthors\Factory; -if ( ! class_exists('MA_Modules_Settings')) { +if (!class_exists('MA_Modules_Settings')) { /** * class MA_Modules_Settings * Threaded commenting in the admin for discussion between writers and editors @@ -57,7 +56,7 @@ public function __construct() 'icon_class' => 'dashicons dashicons-admin-settings', 'slug' => 'modules-settings', 'default_options' => [ - 'enabled' => 'on', + 'enabled' => 'on', ], 'configure_page_cb' => 'print_configure_view', 'autoload' => false, @@ -85,8 +84,13 @@ public function add_admin_scripts() { global $pagenow; - wp_enqueue_style('publishpress-modules-css', $this->module_url . 'lib/modules-settings.css', false, - PP_AUTHORS_VERSION, 'all'); + wp_enqueue_style( + 'publishpress-modules-css', + $this->module_url . 'lib/modules-settings.css', + false, + PP_AUTHORS_VERSION, + 'all' + ); if (isset($_GET['page']) && $_GET['page'] === 'ppma-modules-settings') { wp_enqueue_script('jquery-ui-core'); @@ -103,7 +107,6 @@ public function add_admin_scripts() */ public function register_settings() { - } /** @@ -127,7 +130,7 @@ public function settings_validate($new_options) */ public function settings_save($new_options) { - if ( ! isset($_POST['multiple_authors_options'])) { + if (!isset($_POST['multiple_authors_options'])) { return true; } @@ -168,11 +171,11 @@ public function print_configure_view() * @return array */ $tabs = apply_filters('publishpress_multiple_authors_settings_tabs', []); - if ( ! empty($tabs)) { + if (!empty($tabs)) { echo '