From df1cf2b87eac52cd22b0ee21972347da603c2e68 Mon Sep 17 00:00:00 2001 From: Konstantinos Samaras-Tsakiris <ksamtsak@gmail.com> Date: Thu, 25 Mar 2021 17:09:48 +0100 Subject: [PATCH] Update, update merge plugin with composer 2 --- composer.json | 2 +- composer.lock | 632 +- vendor/composer/ClassLoader.php | 38 +- vendor/composer/InstalledVersions.php | 737 +- vendor/composer/autoload_classmap.php | 1 + vendor/composer/autoload_psr4.php | 2 +- vendor/composer/autoload_real.php | 6 +- vendor/composer/autoload_static.php | 5 +- vendor/composer/installed.json | 30199 ++++++++-------- vendor/composer/installed.php | 309 +- vendor/composer/platform_check.php | 44 +- .../drush/commands/core/views.d8.drush.inc | 2 +- vendor/drush/drush/commands/pm/pm.drush.inc | 6 +- vendor/drush/drush/drush.info | 2 +- vendor/drush/drush/includes/drush.inc | 3 + .../drush/drush/lib/Drush/Boot/DrupalBoot.php | 2 +- .../drush/tests/pmEnDisUnListInfoTest.php | 8 + vendor/gettext/gettext/CHANGELOG.md | 6 + .../gettext/src/Utils/FunctionsScanner.php | 2 +- vendor/phpmailer/phpmailer/README.md | 119 +- vendor/phpmailer/phpmailer/VERSION | 2 +- .../phpmailer/phpmailer/get_oauth_token.php | 16 +- .../phpmailer/language/phpmailer.lang-cs.php | 2 + .../phpmailer/language/phpmailer.lang-sk.php | 2 + vendor/phpmailer/phpmailer/phpunit.xml.dist | 35 + vendor/phpmailer/phpmailer/src/OAuth.php | 2 +- vendor/phpmailer/phpmailer/src/PHPMailer.php | 384 +- vendor/phpmailer/phpmailer/src/POP3.php | 44 +- vendor/phpmailer/phpmailer/src/SMTP.php | 114 +- vendor/psy/psysh/src/CodeCleaner.php | 50 +- .../psysh/src/Command/ReflectingCommand.php | 7 +- vendor/psy/psysh/src/Configuration.php | 29 +- .../src/ExecutionLoop/RunkitReloader.php | 15 +- .../psysh/src/Formatter/TraceFormatter.php | 24 +- vendor/psy/psysh/src/Shell.php | 2 +- vendor/psy/psysh/src/VarDumper/Dumper.php | 2 +- vendor/psy/psysh/src/functions.php | 19 +- .../simplesamlphp/modules/authorize/LICENSE | 614 +- .../modules/authorize/composer.json | 2 +- .../authorize/templates/authorize_403.twig | 4 +- .../Definition/Dumper/XmlReferenceDumper.php | 2 +- ...LoaderImportCircularReferenceException.php | 2 +- .../Exception/FileLoaderLoadException.php | 12 +- .../config/Loader/DelegatingLoader.php | 2 +- vendor/symfony/config/Loader/FileLoader.php | 2 +- vendor/symfony/config/Loader/Loader.php | 2 +- vendor/symfony/filesystem/Filesystem.php | 6 +- vendor/symfony/finder/Finder.php | 8 +- .../symfony/finder/Iterator/LazyIterator.php | 32 + vendor/wikimedia/composer-merge-plugin | 2 +- .../contrib/colorbox/colorbox.info.yml | 6 +- web/modules/contrib/colorbox/colorbox.install | 5 - .../contrib/colorbox/colorbox.services.yml | 3 + .../contrib/colorbox/colorbox.theme.inc | 58 +- web/modules/contrib/colorbox/composer.json | 6 +- .../contrib/colorbox/drush.services.yml | 2 + .../colorbox/src/ColorboxAttachment.php | 2 +- .../src/Commands/ColorboxCommands.php | 19 +- .../src/Form/ColorboxSettingsForm.php | 5 +- .../contrib/colorbox/src/GalleryIdHelper.php | 118 + .../templates/colorbox-formatter.html.twig | 1 + .../colorbox_library_test.info.yml | 10 +- .../config/schema/ds.field_plugin.schema.yml | 8 + .../ds/config/schema/ds.views.schema.yml | 8 + web/modules/contrib/ds/ds.info.yml | 6 +- web/modules/contrib/ds/ds.module | 52 +- web/modules/contrib/ds/ds.routing.yml | 2 +- web/modules/contrib/ds/includes/field_ui.inc | 156 +- .../ds/modules/ds_devel/ds_devel.info.yml | 6 +- .../ds/modules/ds_extras/ds_extras.info.yml | 6 +- .../ds_switch_view_mode.info.yml | 6 +- .../contrib/ds/src/Plugin/DsField/Field.php | 14 +- .../ds/src/Plugin/DsField/User/UserMail.php | 58 + .../Entity/Render/CurrentLanguageRenderer.php | 3 + .../views/Entity/Render/RendererBase.php | 71 +- .../Render/TranslationLanguageRenderer.php | 10 +- .../ds/src/Plugin/views/row/EntityRow.php | 45 + .../ds_exportables_test.info.yml | 6 +- .../ds/tests/modules/ds_test/ds_test.info.yml | 6 +- .../modules/ds_test_rdf/ds_test_rdf.info.yml | 6 +- .../tests/src/Functional/FieldGroupTest.php | 6 +- .../ds/tests/src/Functional/TestBase.php | 2 +- .../ds_test_layout_theme.info.yml | 6 +- web/modules/contrib/easy_breadcrumb/README.md | 2 +- .../install/easy_breadcrumb.settings.yml | 56 +- .../config/schema/easy_breadcrumb.schema.yml | 49 +- .../easy_breadcrumb/easy_breadcrumb.info.yml | 7 +- .../easy_breadcrumb/easy_breadcrumb.install | 51 + .../easy_breadcrumb.services.yml | 6 + .../src/EasyBreadcrumbBuilder.php | 169 +- .../src/EasyBreadcrumbConstants.php | 35 + .../EasyBreadcrumbStructuredDataJsonLd.php | 5 + .../EasyBreadcrumbGeneralSettingsForm.php | 93 +- .../easy_breadcrumb/src/TitleResolver.php | 79 + .../easy_breadcrumb_test.info.yml | 6 +- .../EasyBreabcrumbConfigureTest.php | 111 + .../pre8006_after_form_save_configuration.yml | 43 + .../pre8006_default_configuration.yml | 33 + .../entity_reference_revisions/composer.json | 2 +- .../drush.services.yml | 6 + .../entity_reference_revisions.info.yml | 8 +- .../entity_reference_revisions.services.yml | 2 +- .../EntityReferenceRevisionsCommands.php | 62 + .../EntityReferenceRevisionsOrphanPurger.php | 56 +- .../OrphanedCompositeEntitiesDeleteForm.php | 22 +- .../EntityReferenceRevisionsItem.php | 14 +- .../destination/EntityReferenceRevisions.php | 14 +- ...ntity_composite_relationship_test.info.yml | 6 +- .../entity_host_relationship_test.info.yml | 13 + ...ity_host_relationship_test.permissions.yml | 2 + .../src/Entity/EntityTestHostRelationship.php | 51 + .../EntityReferenceRevisionsAdminTest.php | 11 +- ...tityReferenceRevisionsAutocompleteTest.php | 9 +- .../EntityReferenceRevisionsDiffTest.php | 17 +- ...EntityReferenceRevisionsNormalizerTest.php | 9 +- ...rphanRemovalForBaseFieldDefinitionTest.php | 244 + ...ntityReferenceRevisionsDestinationTest.php | 110 + web/modules/contrib/extlink/extlink.info.yml | 6 +- web/modules/contrib/extlink/extlink.js | 2 +- web/modules/contrib/extlink/extlink.module | 10 +- .../FunctionalJavascript/ExtlinkAdminTest.php | 3 +- web/modules/contrib/facets/facets.info.yml | 6 +- web/modules/contrib/facets/facets.module | 77 +- .../contrib/facets/facets.services.yml | 12 +- .../facets_range_widget.info.yml | 6 +- .../facets/processor/RangeSliderProcessor.php | 2 +- .../modules/facets_rest/facets_rest.info.yml | 6 +- .../Plugin/views/style/FacetsSerializer.php | 12 + .../tests/rest_view/rest_view.info.yml | 7 +- .../facets_summary/facets_summary.info.yml | 6 +- .../facets_summary/facets_summary.module | 21 - .../facets_summary.services.yml | 5 + .../EventSubscriber/SearchApiSubscriber.php | 60 + .../Controller/FacetBlockAjaxController.php | 6 +- .../ConfigurationSubscriber.php} | 4 +- .../EventSubscriber/SearchApiSubscriber.php | 63 + .../FacetSource/FacetSourcePluginManager.php | 2 + .../src/Hierarchy/HierarchyInterface.php | 15 + .../src/Hierarchy/HierarchyPluginBase.php | 9 + .../src/LanguageSwitcherLinksAlterer.php | 187 + .../src/Plugin/facets/hierarchy/Taxonomy.php | 42 + .../processor/ShowSiblingsProcessor.php | 40 + .../facets/query_type/SearchApiRange.php | 3 + .../src/QueryType/QueryTypePluginManager.php | 1 + .../facets/src/Widget/WidgetPluginManager.php | 1 + .../facets_custom_widget.info.yml | 8 +- .../facets_events_test.info.yml | 8 +- .../facets_query_processor.info.yml | 8 +- .../facets_search_api_dependency.info.yml | 8 +- web/modules/contrib/ludwig/3195655-11.patch | 281 + web/modules/contrib/ludwig/ludwig.info.yml | 6 +- .../src/Controller/PackageController.php | 25 +- .../contrib/ludwig/src/PackageManager.php | 259 +- .../contrib/ludwig/src/RequireOnce.php | 7 +- .../modules/ludwig_test/ludwig_test.info.yml | 6 +- web/modules/contrib/memcache/composer.json | 3 - .../contrib/memcache/memcache.info.yml | 8 +- .../memcache_admin/memcache_admin.info.yml | 8 +- .../memcache_admin.services.yml | 8 + .../MemcacheStatisticsController.php | 307 +- .../src/Event/MemcacheStatsEvent.php | 190 + .../McrouterStatsSubscriber.php | 68 + .../MemcacheAdminSubscriber.php | 10 - .../MemcacheServerStatsSubscriber.php | 190 + .../src/Stats/McrouterStatsObject.php | 123 + .../src/Stats/MemcacheStatsInterface.php | 103 + .../src/Stats/MemcacheStatsObject.php | 285 + .../src/Cache/TimestampCacheTagsChecksum.php | 67 +- .../memcache/src/Driver/MemcachedDriver.php | 2 +- .../contrib/memcache/src/MemcacheBackend.php | 47 +- .../memcache_test/memcache_test.info.yml | 6 +- web/modules/contrib/metatag/CHANGELOG.txt | 47 + web/modules/contrib/metatag/composer.json | 1 + web/modules/contrib/metatag/metatag.info.yml | 8 +- web/modules/contrib/metatag/metatag.module | 86 +- .../contrib/metatag/metatag.tokens.inc | 17 +- .../metatag_app_links.info.yml | 6 +- .../Functional/MetatagAppLinksTagsTest.php | 13 +- .../metatag/metatag_dc/metatag_dc.info.yml | 6 +- .../Functional/MetatagDublinCoreTagsTest.php | 13 +- .../metatag_dc_advanced.info.yml | 6 +- .../MetatagDublinCoreAdvancedTagsTest.php | 13 +- .../metatag/metatag_extended_perms/README.txt | 42 + .../metatag_extended_perms.info.yml | 6 +- .../metatag_extended_perms.module | 5 +- .../tests/src/Functional/PermissionsTest.php | 7 +- .../metatag_facebook.info.yml | 6 +- .../Functional/MetatagFacebookTagsTest.php | 13 +- .../metatag_favicons.info.yml | 6 +- .../Functional/MetatagFaviconsTagsTest.php | 13 +- .../metatag_google_cse.info.yml | 6 +- .../Functional/MetatagGoogleCSETagsTest.php | 13 +- .../metatag_google_plus.info.yml | 6 +- .../Functional/MetatagGooglePlusTagsTest.php | 13 +- .../metatag_hreflang.info.yml | 6 +- .../Functional/MetatagHreflangTagsTest.php | 9 +- .../metatag_mobile/metatag_mobile.info.yml | 6 +- .../src/Functional/MetatagMobileTagsTest.php | 27 +- .../metatag_open_graph.info.yml | 6 +- .../src/Plugin/metatag/Tag/OgLatitude.php | 2 +- .../src/Plugin/metatag/Tag/OgLongitude.php | 2 +- .../Functional/MetatagOpenGraphTagsTest.php | 20 +- .../metatag_open_graph_products.info.yml | 6 +- .../MetatagOpenGraphProductsTagsTest.php | 13 +- .../metatag_page_manager.info.yml | 6 +- .../src/Functional/MetatagPageManagerTest.php | 2 +- .../metatag_pinterest.info.yml | 6 +- .../Functional/MetatagPinterestTagsTest.php | 13 +- .../metatag_twitter_cards.info.yml | 6 +- .../MetatagTwitterCardsTagsTest.php | 13 +- .../metatag_verification.info.yml | 6 +- .../MetatagVerificationTagsTest.php | 17 +- .../metatag_views/metatag_views.info.yml | 6 +- .../src/Functional/MetatagViewsBasicsTest.php | 2 +- .../metatag/src/Form/MetatagDefaultsForm.php | 3 + .../contrib/metatag/src/MetatagManager.php | 6 +- .../src/Plugin/metatag/Tag/Description.php | 11 +- .../src/Plugin/metatag/Tag/MetaNameBase.php | 2 +- .../metatag/src/Plugin/metatag/Tag/Robots.php | 16 +- .../migrate/process/d6/NodewordsEntities.php | 2 - .../migrate/process/d7/MetatagEntities.php | 2 - .../metatag_test_custom_route.info.yml | 6 +- .../metatag_test_integration.info.yml | 6 +- .../metatag_test_tag.info.yml | 6 +- .../tests/src/Functional/DefaultTags.php | 4 +- .../src/Functional/DisabledDefaultTags.php | 2 +- .../EnsureDevelWebProfilerWorks.php | 36 + .../tests/src/Functional/EnsureDevelWorks.php | 63 + .../tests/src/Functional/MaintenanceMode.php | 15 +- .../tests/src/Functional/MetatagAdminTest.php | 193 +- .../MetatagConfigTranslationTest.php | 42 +- .../src/Functional/MetatagCustomRouteTest.php | 5 +- .../src/Functional/MetatagFieldNodeTest.php | 2 +- .../src/Functional/MetatagFieldTermTest.php | 2 +- .../src/Functional/MetatagFieldTestBase.php | 109 +- .../src/Functional/MetatagFieldTestTest.php | 2 +- .../src/Functional/MetatagFieldUserTest.php | 2 +- .../tests/src/Functional/MetatagForumTest.php | 9 +- .../src/Functional/MetatagFrontpageTest.php | 46 +- .../Functional/MetatagNodeTranslationTest.php | 69 +- .../src/Functional/MetatagStringTest.php | 95 +- .../src/Functional/MetatagTagTypesTest.php | 30 +- .../src/Functional/MetatagTagsTestBase.php | 15 +- .../src/Functional/MetatagTokenStatus.php | 52 + .../tests/src/Functional/MetatagXssTest.php | 50 +- .../tests/src/Functional/NodeJsonOutput.php | 4 +- .../tests/src/Functional/NodeTranslation.php | 2 +- .../src/Functional/RemoveCoreMetaTags.php | 6 +- .../tests/src/Functional/WithRedirect.php | 2 +- .../MetatagAvailableTokensTest.php | 45 + .../Kernel/Form/MetatagSettingsFormTest.php | 2 +- .../tests/src/Kernel/MetatagManagerTest.php | 2 +- .../tests/src/Kernel/MetatagSettingsTest.php | 2 +- .../Kernel/Migrate/d6/NodewordsFieldTest.php | 6 +- .../Kernel/Migrate/d7/MetatagFieldTest.php | 6 +- web/modules/contrib/module_filter/README.txt | 128 + .../contrib/module_filter/composer.json | 11 + .../config/schema/module_filter.schema.yml | 7 + .../css/module_filter.modules_tabs.css | 17 +- .../module_filter/js/module_filter.modules.js | 2 +- .../js/module_filter.modules_tabs.js | 3 +- .../module_filter/module_filter.info.yml | 16 +- .../module_filter/module_filter.install | 2 +- .../module_filter/module_filter.module | 45 +- .../src/Form/ModuleFilterSettingsForm.php | 8 + .../system-modules-details.html.twig | 5 +- .../bitbucket-pipelines.yml | 3 +- .../permissions_by_entity.info.yml | 6 +- .../pbt_entity_test/pbt_entity_test.info.yml | 6 +- .../permissions_by_term.info.yml | 8 +- .../permissions_by_term.install | 40 +- .../Event/PermissionsByTermDeniedEvent.php | 2 +- .../src/Service/NodeAccess.php | 10 +- .../tests/phpstan-baseline.neon | 72 + .../tests/phpstan.neon.dist | 8 + web/modules/contrib/require_login/README.md | 23 - .../config/install/require_login.config.yml | 10 +- .../config/schema/require_login.schema.yml | 23 +- .../require_login/require_login.api.php | 20 +- .../require_login.config_translation.yml | 2 +- .../require_login/require_login.info.yml | 17 +- .../require_login/require_login.install | 29 +- .../require_login.links.menu.yml | 2 +- .../require_login.links.task.yml | 2 +- .../require_login/require_login.module | 26 +- .../require_login.permissions.yml | 4 +- .../require_login/require_login.services.yml | 2 +- .../RequireLoginSubscriber.php | 198 +- .../src/Form/RequireLoginSettingsForm.php | 238 +- .../install/webform.webform.contact.yml | 4 +- .../includes/webform.install.update.inc | 26 + .../webform_access/webform_access.info.yml | 6 +- .../webform_attachment_test.info.yml | 6 +- .../webform_attachment.info.yml | 6 +- .../webform_bootstrap_test_module.info.yml | 6 +- .../webform_bootstrap_test_theme.info.yml | 6 +- .../webform_bootstrap.info.yml | 6 +- .../webform_cards_test.info.yml | 6 +- .../webform_cards/webform_cards.info.yml | 6 +- ...ebform_clientside_validation_test.info.yml | 6 +- .../webform_clientside_validation.info.yml | 6 +- ...bform_demo_application_evaluation.info.yml | 6 +- .../webform_demo_event_registration.info.yml | 6 +- .../webform_demo_group.info.yml | 6 +- .../webform_demo_region_contact.info.yml | 6 +- .../webform_devel/webform_devel.info.yml | 6 +- .../webform_editorial.info.yml | 6 +- .../webform_entity_print_test.info.yml | 6 +- .../webform_entity_print.info.yml | 6 +- ...form_entity_print_attachment_test.info.yml | 6 +- .../webform_entity_print_attachment.info.yml | 6 +- .../webform_example_composite.info.yml | 6 +- .../webform_example_custom_form.info.yml | 6 +- .../webform_example_element.info.yml | 6 +- ...ebform_example_element_properties.info.yml | 6 +- .../webform_example_handler.info.yml | 6 +- .../webform_example_remote_post.info.yml | 6 +- .../webform_example_variant.info.yml | 6 +- .../webform_examples.info.yml | 6 +- .../webform_examples_accessibility.info.yml | 6 +- .../webform_group_test.info.yml | 6 +- .../webform_group/webform_group.info.yml | 6 +- .../webform_icheck_test.info.yml | 6 +- .../webform_icheck/webform_icheck.info.yml | 6 +- .../webform_image_select_test.info.yml | 6 +- .../webform_image_select.info.yml | 6 +- .../webform_jqueryui_buttons_test.info.yml | 6 +- .../webform_jqueryui_buttons.info.yml | 6 +- ...webform_location_geocomplete_test.info.yml | 6 +- .../webform_location_geocomplete.info.yml | 6 +- .../webform_node_test_multiple.info.yml | 6 +- .../webform_node_test_translation.info.yml | 6 +- .../webform_node/webform_node.info.yml | 6 +- ...ebform_options_custom_entity_test.info.yml | 6 +- .../webform_options_custom_test.info.yml | 6 +- .../webform_options_custom.info.yml | 6 +- .../webform_options_limit_test.info.yml | 6 +- .../webform_options_limit.info.yml | 6 +- .../webform_scheduled_email_test.info.yml | 6 +- ..._scheduled_email_test_translation.info.yml | 6 +- .../webform_scheduled_email.info.yml | 6 +- .../webform_share/webform_share.info.yml | 6 +- .../webform_shortcuts.info.yml | 6 +- ...orm_submission_export_import_test.info.yml | 6 +- .../webform_submission_export_import.info.yml | 6 +- .../webform_submission_log.info.yml | 6 +- .../webform_templates.info.yml | 6 +- .../webform_toggles_test.info.yml | 6 +- .../webform_toggles/webform_toggles.info.yml | 6 +- .../modules/webform_ui/webform_ui.info.yml | 6 +- .../webform_test/webform_test.info.yml | 6 +- .../webform_test_ajax.info.yml | 6 +- .../webform_test_alter_hooks.info.yml | 6 +- .../webform_test_block_context.info.yml | 6 +- .../webform_test_block_custom.info.yml | 6 +- ...bform_test_block_submission_limit.info.yml | 6 +- .../webform_test_config_performance.info.yml | 6 +- .../webform_test_element.info.yml | 6 +- .../webform_test_element_input_masks.info.yml | 6 +- ...bform_test_entity_reference_views.info.yml | 6 +- .../webform_test_exporter.info.yml | 6 +- .../webform_test_handler.info.yml | 6 +- ...webform_test_handler_invoke_alter.info.yml | 6 +- .../webform_test_handler_remote_post.info.yml | 6 +- .../webform_test_markup.info.yml | 6 +- .../webform_test_message_custom.info.yml | 6 +- .../webform_test_options.info.yml | 6 +- .../webform_test_paragraphs.info.yml | 6 +- .../webform_test_rest.info.yml | 6 +- .../webform_test_states.info.yml | 6 +- .../webform_test_submissions.info.yml | 6 +- ...webform_test_third_party_settings.info.yml | 6 +- .../webform_test_translation.info.yml | 6 +- ...webform_test_translation_lingotek.info.yml | 6 +- .../webform_test_validate.info.yml | 6 +- .../webform_test_variant.info.yml | 6 +- .../webform_test_views.info.yml | 6 +- .../webform_test_wizard_custom.info.yml | 6 +- .../webform_test_bartik.info.yml | 6 +- web/modules/contrib/webform/webform.info.yml | 6 +- 380 files changed, 23244 insertions(+), 18161 deletions(-) create mode 100644 vendor/phpmailer/phpmailer/phpunit.xml.dist create mode 100644 vendor/symfony/finder/Iterator/LazyIterator.php create mode 100644 web/modules/contrib/colorbox/src/GalleryIdHelper.php create mode 100644 web/modules/contrib/ds/src/Plugin/DsField/User/UserMail.php mode change 100755 => 100644 web/modules/contrib/easy_breadcrumb/src/EasyBreadcrumbBuilder.php create mode 100644 web/modules/contrib/easy_breadcrumb/src/TitleResolver.php create mode 100644 web/modules/contrib/easy_breadcrumb/tests/src/Functional/EasyBreabcrumbConfigureTest.php create mode 100644 web/modules/contrib/easy_breadcrumb/tests/src/Functional/fixtures/pre8006_after_form_save_configuration.yml create mode 100644 web/modules/contrib/easy_breadcrumb/tests/src/Functional/fixtures/pre8006_default_configuration.yml create mode 100644 web/modules/contrib/entity_reference_revisions/drush.services.yml create mode 100644 web/modules/contrib/entity_reference_revisions/src/Commands/EntityReferenceRevisionsCommands.php create mode 100644 web/modules/contrib/entity_reference_revisions/tests/modules/entity_host_relationship_test/entity_host_relationship_test.info.yml create mode 100644 web/modules/contrib/entity_reference_revisions/tests/modules/entity_host_relationship_test/entity_host_relationship_test.permissions.yml create mode 100644 web/modules/contrib/entity_reference_revisions/tests/modules/entity_host_relationship_test/src/Entity/EntityTestHostRelationship.php create mode 100644 web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsOrphanRemovalForBaseFieldDefinitionTest.php create mode 100644 web/modules/contrib/facets/modules/facets_summary/src/EventSubscriber/SearchApiSubscriber.php rename web/modules/contrib/facets/src/{EventSubscriber.php => EventSubscriber/ConfigurationSubscriber.php} (91%) create mode 100644 web/modules/contrib/facets/src/EventSubscriber/SearchApiSubscriber.php create mode 100644 web/modules/contrib/facets/src/LanguageSwitcherLinksAlterer.php create mode 100644 web/modules/contrib/facets/src/Plugin/facets/processor/ShowSiblingsProcessor.php create mode 100644 web/modules/contrib/ludwig/3195655-11.patch create mode 100644 web/modules/contrib/memcache/memcache_admin/src/Event/MemcacheStatsEvent.php create mode 100644 web/modules/contrib/memcache/memcache_admin/src/EventSubscriber/McrouterStatsSubscriber.php create mode 100644 web/modules/contrib/memcache/memcache_admin/src/EventSubscriber/MemcacheServerStatsSubscriber.php create mode 100644 web/modules/contrib/memcache/memcache_admin/src/Stats/McrouterStatsObject.php create mode 100644 web/modules/contrib/memcache/memcache_admin/src/Stats/MemcacheStatsInterface.php create mode 100644 web/modules/contrib/memcache/memcache_admin/src/Stats/MemcacheStatsObject.php create mode 100644 web/modules/contrib/metatag/tests/src/Functional/EnsureDevelWebProfilerWorks.php create mode 100644 web/modules/contrib/metatag/tests/src/Functional/EnsureDevelWorks.php create mode 100644 web/modules/contrib/metatag/tests/src/Functional/MetatagTokenStatus.php create mode 100644 web/modules/contrib/metatag/tests/src/FunctionalJavascript/MetatagAvailableTokensTest.php create mode 100644 web/modules/contrib/module_filter/README.txt create mode 100644 web/modules/contrib/module_filter/composer.json create mode 100644 web/modules/contrib/module_filter/config/schema/module_filter.schema.yml create mode 100644 web/modules/contrib/permissions_by_term/tests/phpstan-baseline.neon create mode 100644 web/modules/contrib/permissions_by_term/tests/phpstan.neon.dist delete mode 100644 web/modules/contrib/require_login/README.md diff --git a/composer.json b/composer.json index 8a8b6dd17..d4e3daedd 100644 --- a/composer.json +++ b/composer.json @@ -187,7 +187,7 @@ "drupal/workbench": "^1.3", "drupal/workbench_access": "^1.0@beta", "drupal/workbench_moderation": "^1.6", - "wikimedia/composer-merge-plugin": "1.4.1" + "wikimedia/composer-merge-plugin": "^2.0.0" }, "conflict": { "drupal/drupal": "*" diff --git a/composer.lock b/composer.lock index ec49e4692..46f4bc995 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c1cd9f8ce2950e1fffef7dba9f1852a3", + "content-hash": "0daa58e7c1a6d32a902b5f78041b05c4", "packages": [ { "name": "asm89/stack-cors", @@ -56,6 +56,10 @@ "cors", "stack" ], + "support": { + "issues": "https://github.com/asm89/stack-cors/issues", + "source": "https://github.com/asm89/stack-cors/tree/1.3.0" + }, "time": "2019-12-24T22:41:47+00:00" }, { @@ -186,6 +190,10 @@ "zend", "zikula" ], + "support": { + "issues": "https://github.com/composer/installers/issues", + "source": "https://github.com/composer/installers/tree/v1.10.0" + }, "funding": [ { "url": "https://packagist.com", @@ -261,6 +269,11 @@ "validation", "versioning" ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/1.5.1" + }, "time": "2020-01-13T12:06:48+00:00" }, { @@ -654,6 +667,10 @@ "docblock", "parser" ], + "support": { + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/v1.4.0" + }, "time": "2017-02-24T16:22:25+00:00" }, { @@ -724,6 +741,10 @@ "cache", "caching" ], + "support": { + "issues": "https://github.com/doctrine/cache/issues", + "source": "https://github.com/doctrine/cache/tree/1.6.x" + }, "time": "2017-07-22T12:49:21+00:00" }, { @@ -791,6 +812,10 @@ "collections", "iterator" ], + "support": { + "issues": "https://github.com/doctrine/collections/issues", + "source": "https://github.com/doctrine/collections/tree/master" + }, "time": "2017-01-03T10:49:41+00:00" }, { @@ -864,6 +889,10 @@ "persistence", "spl" ], + "support": { + "issues": "https://github.com/doctrine/common/issues", + "source": "https://github.com/doctrine/common/tree/v2.7.3" + }, "time": "2017-07-22T08:35:12+00:00" }, { @@ -931,6 +960,9 @@ "singularize", "string" ], + "support": { + "source": "https://github.com/doctrine/inflector/tree/master" + }, "time": "2017-07-22T12:18:28+00:00" }, { @@ -991,6 +1023,10 @@ "parser", "php" ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.0.2" + }, "time": "2019-06-08T11:03:04+00:00" }, { @@ -2010,17 +2046,17 @@ }, { "name": "drupal/colorbox", - "version": "1.6.0", + "version": "1.7.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/colorbox.git", - "reference": "8.x-1.6" + "reference": "8.x-1.7" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/colorbox-8.x-1.6.zip", - "reference": "8.x-1.6", - "shasum": "73bfc74e9afd294e3d3aded3622ad9cb9de6b75c" + "url": "https://ftp.drupal.org/files/projects/colorbox-8.x-1.7.zip", + "reference": "8.x-1.7", + "shasum": "64c7290be86fe1d3bf80dcf4003a37b3698bba50" }, "require": { "drupal/core": "^8.8 || ^9" @@ -2031,8 +2067,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.6", - "datestamp": "1587025715", + "version": "8.x-1.7", + "datestamp": "1614960641", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -2046,7 +2082,7 @@ }, "notification-url": "https://packages.drupal.org/8/downloads", "license": [ - "GPL-2.0+" + "GPL-2.0-or-later" ], "authors": [ { @@ -2744,18 +2780,15 @@ "lib/Drupal/Core/Site/Settings.php" ] }, - "scripts": { - "pre-autoload-dump": [ - "Drupal\\Core\\Composer\\Composer::preAutoloadDump" - ], - "post-autoload-dump": [ - "Drupal\\Core\\Composer\\Composer::ensureHtaccess" - ] - }, + "notification-url": "https://packagist.org/downloads/", "license": [ "GPL-2.0-or-later" ], - "description": "Drupal is an open source content management platform powering millions of websites and applications." + "description": "Drupal is an open source content management platform powering millions of websites and applications.", + "support": { + "source": "https://github.com/drupal/core/tree/8.9.13" + }, + "time": "2021-01-19T23:11:00+00:00" }, { "name": "drupal/core-composer-scaffold", @@ -2793,6 +2826,7 @@ "Drupal\\Composer\\Plugin\\Scaffold\\": "" } }, + "notification-url": "https://packagist.org/downloads/", "license": [ "GPL-2.0-or-later" ], @@ -2800,7 +2834,11 @@ "homepage": "https://www.drupal.org/project/drupal", "keywords": [ "drupal" - ] + ], + "support": { + "source": "https://github.com/drupal/core-composer-scaffold/tree/8.9.4" + }, + "time": "2020-08-07T22:30:30+00:00" }, { "name": "drupal/core-project-message", @@ -2829,6 +2867,7 @@ "Drupal\\Composer\\Plugin\\ProjectMessage\\": "." } }, + "notification-url": "https://packagist.org/downloads/", "license": [ "GPL-2.0-or-later" ], @@ -2836,7 +2875,11 @@ "homepage": "https://www.drupal.org/project/drupal", "keywords": [ "drupal" - ] + ], + "support": { + "source": "https://github.com/drupal/core-project-message/tree/8.9.13" + }, + "time": "2020-08-02T22:04:49+00:00" }, { "name": "drupal/core-recommended", @@ -2913,10 +2956,15 @@ "webflo/drupal-core-strict": "*" }, "type": "metapackage", + "notification-url": "https://packagist.org/downloads/", "license": [ "GPL-2.0-or-later" ], - "description": "Locked core dependencies; require this project INSTEAD OF drupal/core." + "description": "Locked core dependencies; require this project INSTEAD OF drupal/core.", + "support": { + "source": "https://github.com/drupal/core-recommended/tree/8.9.13" + }, + "time": "2021-01-19T23:11:00+00:00" }, { "name": "drupal/ctools", @@ -3222,17 +3270,17 @@ }, { "name": "drupal/ds", - "version": "3.9.0", + "version": "3.12.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/ds.git", - "reference": "8.x-3.9" + "reference": "8.x-3.12" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/ds-8.x-3.9.zip", - "reference": "8.x-3.9", - "shasum": "7b419763cd87c2b3f06313489500746705a46334" + "url": "https://ftp.drupal.org/files/projects/ds-8.x-3.12.zip", + "reference": "8.x-3.12", + "shasum": "0df49ccc28af94186a6c08aa4233f435c539b273" }, "require": { "drupal/core": "^8.8 || ^9" @@ -3244,8 +3292,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-3.9", - "datestamp": "1598898821", + "version": "8.x-3.12", + "datestamp": "1615995335", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -3292,17 +3340,17 @@ }, { "name": "drupal/easy_breadcrumb", - "version": "1.13.0", + "version": "1.15.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/easy_breadcrumb.git", - "reference": "8.x-1.13" + "reference": "8.x-1.15" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/easy_breadcrumb-8.x-1.13.zip", - "reference": "8.x-1.13", - "shasum": "8a8be82e1de1383eb849989b1c5790dd13270ffa" + "url": "https://ftp.drupal.org/files/projects/easy_breadcrumb-8.x-1.15.zip", + "reference": "8.x-1.15", + "shasum": "447c1ae946bdba97da97880aae5980f97baf720b" }, "require": { "drupal/core": "^8 || ^9" @@ -3310,8 +3358,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.13", - "datestamp": "1595445195", + "version": "8.x-1.15", + "datestamp": "1615310468", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -3589,17 +3637,17 @@ }, { "name": "drupal/entity_reference_revisions", - "version": "1.8.0", + "version": "1.9.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/entity_reference_revisions.git", - "reference": "8.x-1.8" + "reference": "8.x-1.9" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/entity_reference_revisions-8.x-1.8.zip", - "reference": "8.x-1.8", - "shasum": "c1279e6c683edc2dbccedba8de1505340c8a62b6" + "url": "https://ftp.drupal.org/files/projects/entity_reference_revisions-8.x-1.9.zip", + "reference": "8.x-1.9", + "shasum": "e1c51bdea495eb3b458130d6f0a00c347f5637df" }, "require": { "drupal/core": "^8.7.7 || ^9" @@ -3610,8 +3658,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.8", - "datestamp": "1583961846", + "version": "8.x-1.9", + "datestamp": "1614805871", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -3620,7 +3668,7 @@ }, "notification-url": "https://packages.drupal.org/8/downloads", "license": [ - "GPL-2.0" + "GPL-2.0-or-later" ], "authors": [ { @@ -3700,17 +3748,17 @@ }, { "name": "drupal/extlink", - "version": "1.5.0", + "version": "1.6.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/extlink.git", - "reference": "8.x-1.5" + "reference": "8.x-1.6" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/extlink-8.x-1.5.zip", - "reference": "8.x-1.5", - "shasum": "5a2b74d12ff9e9257a0566cca8dac3872da64970" + "url": "https://ftp.drupal.org/files/projects/extlink-8.x-1.6.zip", + "reference": "8.x-1.6", + "shasum": "92c2794b1d5ece7978f5f6fa37f719c0b37d470e" }, "require": { "drupal/core": "^8 || ^9" @@ -3718,8 +3766,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.5", - "datestamp": "1601382250", + "version": "8.x-1.6", + "datestamp": "1614961993", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -3760,17 +3808,17 @@ }, { "name": "drupal/facets", - "version": "1.6.0", + "version": "1.7.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/facets.git", - "reference": "8.x-1.6" + "reference": "8.x-1.7" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/facets-8.x-1.6.zip", - "reference": "8.x-1.6", - "shasum": "4942b62f1cae20eaface3c0627551716c8706255" + "url": "https://ftp.drupal.org/files/projects/facets-8.x-1.7.zip", + "reference": "8.x-1.7", + "shasum": "5a8a1092617c4dde96f691e23300d0d436c5fcb3" }, "require": { "drupal/core": "^8.8 || ^9" @@ -3781,8 +3829,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.6", - "datestamp": "1604397981", + "version": "8.x-1.7", + "datestamp": "1613751460", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -3808,6 +3856,14 @@ { "name": "borisson_", "homepage": "https://www.drupal.org/user/2393360" + }, + { + "name": "drunken monkey", + "homepage": "https://www.drupal.org/user/205582" + }, + { + "name": "mkalkbrenner", + "homepage": "https://www.drupal.org/user/124705" } ], "description": "The Facet module allows site builders to easily create and manage faceted search interfaces.", @@ -5036,17 +5092,17 @@ }, { "name": "drupal/ludwig", - "version": "1.6.0", + "version": "1.7.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/ludwig.git", - "reference": "8.x-1.6" + "reference": "8.x-1.7" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/ludwig-8.x-1.6.zip", - "reference": "8.x-1.6", - "shasum": "33b1fcfb794cb69a1425bf4259a7a3847301fd49" + "url": "https://ftp.drupal.org/files/projects/ludwig-8.x-1.7.zip", + "reference": "8.x-1.7", + "shasum": "d951c3b4f76f8b0c2f8877793a392868f3537743" }, "require": { "drupal/core": "^8 || ^9" @@ -5054,8 +5110,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.6", - "datestamp": "1611958525", + "version": "8.x-1.7", + "datestamp": "1613389167", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -5213,26 +5269,26 @@ }, { "name": "drupal/memcache", - "version": "2.2.0", + "version": "2.3.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/memcache.git", - "reference": "8.x-2.2" + "reference": "8.x-2.3" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/memcache-8.x-2.2.zip", - "reference": "8.x-2.2", - "shasum": "1d9876763c7ef04a9bba698ddcadbe708037fed2" + "url": "https://ftp.drupal.org/files/projects/memcache-8.x-2.3.zip", + "reference": "8.x-2.3", + "shasum": "b2f9715612be74f9ce55daaf838f6f17a9eb2f5a" }, "require": { - "drupal/core": "^8.8 || ^9" + "drupal/core": "^8.9 || ^9" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-2.2", - "datestamp": "1601053267", + "version": "8.x-2.3", + "datestamp": "1614802365", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -5469,23 +5525,24 @@ }, { "name": "drupal/metatag", - "version": "1.15.0", + "version": "1.16.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/metatag.git", - "reference": "8.x-1.15" + "reference": "8.x-1.16" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/metatag-8.x-1.15.zip", - "reference": "8.x-1.15", - "shasum": "7658d7286fdc075ea72a6ec36aea737b1182b5d8" + "url": "https://ftp.drupal.org/files/projects/metatag-8.x-1.16.zip", + "reference": "8.x-1.16", + "shasum": "1c0028f4ff4583dc6601035657dd631c351b290c" }, "require": { "drupal/core": "^8 || ^9", "drupal/token": "^1.0" }, "require-dev": { + "drupal/devel": "^4.0", "drupal/metatag_dc": "*", "drupal/metatag_open_graph": "*", "drupal/page_manager": "4.x-dev", @@ -5495,8 +5552,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.15", - "datestamp": "1611210662", + "version": "8.x-1.16", + "datestamp": "1615820867", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -5778,26 +5835,26 @@ }, { "name": "drupal/module_filter", - "version": "3.1.0", + "version": "3.2.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/module_filter.git", - "reference": "8.x-3.1" + "reference": "8.x-3.2" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/module_filter-8.x-3.1.zip", - "reference": "8.x-3.1", - "shasum": "39d627ce60280ae54bcf9beae217b85cce1969e4" + "url": "https://ftp.drupal.org/files/projects/module_filter-8.x-3.2.zip", + "reference": "8.x-3.2", + "shasum": "b5c1a5141da392340232a1ad0934b921b862e1f4" }, "require": { - "drupal/core": "~8.0" + "drupal/core": "^8 || ^9" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-3.1", - "datestamp": "1507650844", + "version": "8.x-3.2", + "datestamp": "1614918371", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -5806,7 +5863,7 @@ }, "notification-url": "https://packages.drupal.org/8/downloads", "license": [ - "GPL-2.0-or-later" + "GPL-2.0+" ], "authors": [ { @@ -5819,9 +5876,10 @@ } ], "description": "Filter the modules list.", - "homepage": "https://www.drupal.org/project/module_filter", + "homepage": "http://drupal.org/project/module_filter", "support": { - "source": "https://git.drupalcode.org/project/module_filter" + "source": "https://git.drupalcode.org/project/module_filter", + "issues": "https://www.drupal.org/project/issues/module_filter" } }, { @@ -6404,17 +6462,17 @@ }, { "name": "drupal/permissions_by_term", - "version": "2.29.0", + "version": "2.31.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/permissions_by_term.git", - "reference": "8.x-2.29" + "reference": "8.x-2.31" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/permissions_by_term-8.x-2.29.zip", - "reference": "8.x-2.29", - "shasum": "40d06fb24d271d2022481fcedc0d4e9c042b6e3b" + "url": "https://ftp.drupal.org/files/projects/permissions_by_term-8.x-2.31.zip", + "reference": "8.x-2.31", + "shasum": "b92e303e579937a6985d21751e72ad67a1d4404b" }, "require": { "drupal/core": "^8.0", @@ -6423,8 +6481,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-2.29", - "datestamp": "1612278248", + "version": "8.x-2.31", + "datestamp": "1614602591", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -6646,26 +6704,26 @@ }, { "name": "drupal/require_login", - "version": "2.1.0", + "version": "2.4.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/require_login.git", - "reference": "8.x-2.1" + "reference": "8.x-2.4" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/require_login-8.x-2.1.zip", - "reference": "8.x-2.1", - "shasum": "5e1e1e95597005fc132744c42547bf6d16c3a60d" + "url": "https://ftp.drupal.org/files/projects/require_login-8.x-2.4.zip", + "reference": "8.x-2.4", + "shasum": "b47b0bde6925d83fe48b835bfd95ed35296b5897" }, "require": { - "drupal/core": "~8.0" + "drupal/core": "^8 || ^9" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-2.1", - "datestamp": "1551549486", + "version": "8.x-2.4", + "datestamp": "1615474748", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -6682,7 +6740,7 @@ "homepage": "https://www.drupal.org/user/459772" } ], - "description": "Require login authentication regardless of user permissions.", + "description": "Provides catch-all solution to require user authentication on pages.", "homepage": "https://www.drupal.org/project/require_login", "support": { "source": "https://git.drupalcode.org/project/require_login" @@ -7618,17 +7676,17 @@ }, { "name": "drupal/webform", - "version": "5.24.0", + "version": "5.25.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/webform.git", - "reference": "8.x-5.24" + "reference": "8.x-5.25" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/webform-8.x-5.24.zip", - "reference": "8.x-5.24", - "shasum": "d7e2d856e840bf7b7ff0b06f80be1f492fe65b7b" + "url": "https://ftp.drupal.org/files/projects/webform-8.x-5.25.zip", + "reference": "8.x-5.25", + "shasum": "115f8bc21549abc080543eb772166eb4fd2a162e" }, "require": { "drupal/core": "^8.8" @@ -7669,8 +7727,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-5.24", - "datestamp": "1612453175", + "version": "8.x-5.25", + "datestamp": "1614873338", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -7845,7 +7903,7 @@ }, { "name": "drupal/webform_ui", - "version": "5.24.0", + "version": "5.25.0", "require": { "drupal/core": "^8.8", "drupal/webform": "*" @@ -7853,8 +7911,8 @@ "type": "metapackage", "extra": { "drupal": { - "version": "8.x-5.24", - "datestamp": "1612453175", + "version": "8.x-5.25", + "datestamp": "1614873338", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -8151,16 +8209,16 @@ }, { "name": "drush/drush", - "version": "8.4.6", + "version": "8.4.8", "source": { "type": "git", "url": "https://github.com/drush-ops/drush.git", - "reference": "4e48e11d7fe858eebe6c2fad71650c977d3f8900" + "reference": "b377b1896e344085d06bdbf671a465950a164d1e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/drush-ops/drush/zipball/4e48e11d7fe858eebe6c2fad71650c977d3f8900", - "reference": "4e48e11d7fe858eebe6c2fad71650c977d3f8900", + "url": "https://api.github.com/repos/drush-ops/drush/zipball/b377b1896e344085d06bdbf671a465950a164d1e", + "reference": "b377b1896e344085d06bdbf671a465950a164d1e", "shasum": "" }, "require": { @@ -8265,7 +8323,7 @@ "forum": "http://drupal.stackexchange.com/questions/tagged/drush", "irc": "irc://irc.freenode.org/drush", "issues": "https://github.com/drush-ops/drush/issues", - "source": "https://github.com/drush-ops/drush/tree/8.4.6" + "source": "https://github.com/drush-ops/drush/tree/8.4.8" }, "funding": [ { @@ -8273,7 +8331,7 @@ "type": "github" } ], - "time": "2021-02-01T15:34:47+00:00" + "time": "2021-03-22T15:27:55+00:00" }, { "name": "easyrdf/easyrdf", @@ -8335,6 +8393,12 @@ "rdfa", "sparql" ], + "support": { + "forum": "http://groups.google.com/group/easyrdf/", + "irc": "irc://chat.freenode.net/easyrdf", + "issues": "http://github.com/njh/easyrdf/issues", + "source": "https://github.com/easyrdf/easyrdf/tree/0.9.1" + }, "time": "2015-02-27T09:45:49+00:00" }, { @@ -8393,6 +8457,10 @@ "validation", "validator" ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/2.1.17" + }, "time": "2020-02-13T22:36:52+00:00" }, { @@ -8456,16 +8524,16 @@ }, { "name": "gettext/gettext", - "version": "v4.8.3", + "version": "v4.8.4", "source": { "type": "git", "url": "https://github.com/php-gettext/Gettext.git", - "reference": "57ff4fb16647e78e80a5909fe3c190f1c3110321" + "reference": "58bc0f7f37e78efb0f9758f93d4a0f669f0f84a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-gettext/Gettext/zipball/57ff4fb16647e78e80a5909fe3c190f1c3110321", - "reference": "57ff4fb16647e78e80a5909fe3c190f1c3110321", + "url": "https://api.github.com/repos/php-gettext/Gettext/zipball/58bc0f7f37e78efb0f9758f93d4a0f669f0f84a1", + "reference": "58bc0f7f37e78efb0f9758f93d4a0f669f0f84a1", "shasum": "" }, "require": { @@ -8517,9 +8585,23 @@ "support": { "email": "oom@oscarotero.com", "issues": "https://github.com/oscarotero/Gettext/issues", - "source": "https://github.com/php-gettext/Gettext/tree/v4.8.3" + "source": "https://github.com/php-gettext/Gettext/tree/v4.8.4" }, - "time": "2020-11-18T22:35:49+00:00" + "funding": [ + { + "url": "https://paypal.me/oscarotero", + "type": "custom" + }, + { + "url": "https://github.com/oscarotero", + "type": "github" + }, + { + "url": "https://www.patreon.com/misteroom", + "type": "patreon" + } + ], + "time": "2021-03-10T19:35:49+00:00" }, { "name": "gettext/languages", @@ -8651,6 +8733,10 @@ "rest", "web service" ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/6.5" + }, "time": "2020-05-25T19:35:05+00:00" }, { @@ -8702,6 +8788,10 @@ "keywords": [ "promise" ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/master" + }, "time": "2016-12-20T10:07:11+00:00" }, { @@ -8773,6 +8863,10 @@ "uri", "url" ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/1.6.1" + }, "time": "2019-07-01T23:21:34+00:00" }, { @@ -8848,6 +8942,14 @@ "psr", "psr-7" ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-diactoros/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-diactoros/issues", + "rss": "https://github.com/laminas/laminas-diactoros/releases.atom", + "source": "https://github.com/laminas/laminas-diactoros" + }, "time": "2020-03-23T15:28:28+00:00" }, { @@ -8897,6 +8999,14 @@ "escaper", "laminas" ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-escaper/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-escaper/issues", + "rss": "https://github.com/laminas/laminas-escaper/releases.atom", + "source": "https://github.com/laminas/laminas-escaper" + }, "time": "2019-12-31T16:43:30+00:00" }, { @@ -8964,6 +9074,14 @@ "feed", "laminas" ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-feed/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-feed/issues", + "rss": "https://github.com/laminas/laminas-feed/releases.atom", + "source": "https://github.com/laminas/laminas-feed" + }, "time": "2020-03-29T12:36:29+00:00" }, { @@ -9014,6 +9132,14 @@ "laminas", "stdlib" ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-stdlib/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-stdlib/issues", + "rss": "https://github.com/laminas/laminas-stdlib/releases.atom", + "source": "https://github.com/laminas/laminas-stdlib" + }, "time": "2019-12-31T17:51:15+00:00" }, { @@ -9066,6 +9192,12 @@ "laminas", "zf" ], + "support": { + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-zendframework-bridge/issues", + "rss": "https://github.com/laminas/laminas-zendframework-bridge/releases.atom", + "source": "https://github.com/laminas/laminas-zendframework-bridge" + }, "funding": [ { "url": "https://funding.communitybridge.org/projects/laminas-project", @@ -9196,6 +9328,10 @@ "serializer", "xml" ], + "support": { + "issues": "https://github.com/Masterminds/html5-php/issues", + "source": "https://github.com/Masterminds/html5-php/tree/2.x" + }, "time": "2017-09-04T12:26:28+00:00" }, { @@ -9297,6 +9433,11 @@ "pseudorandom", "random" ], + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/random_compat/issues", + "source": "https://github.com/paragonie/random_compat" + }, "time": "2018-07-02T15:55:56+00:00" }, { @@ -9363,6 +9504,10 @@ "archive", "tar" ], + "support": { + "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Archive_Tar", + "source": "https://github.com/pear/Archive_Tar" + }, "funding": [ { "url": "https://github.com/mrook", @@ -9420,6 +9565,10 @@ } ], "description": "More info available on: http://pear.php.net/package/Console_Getopt", + "support": { + "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Console_Getopt", + "source": "https://github.com/pear/Console_Getopt" + }, "time": "2019-11-20T18:27:48+00:00" }, { @@ -9523,6 +9672,10 @@ } ], "description": "Minimal set of PEAR core files to be used as composer dependency", + "support": { + "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=PEAR", + "source": "https://github.com/pear/pear-core-minimal" + }, "time": "2019-11-19T19:00:24+00:00" }, { @@ -9578,6 +9731,10 @@ "keywords": [ "exception" ], + "support": { + "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=PEAR_Exception", + "source": "https://github.com/pear/PEAR_Exception" + }, "time": "2019-12-10T10:24:42+00:00" }, { @@ -9743,16 +9900,16 @@ }, { "name": "phpmailer/phpmailer", - "version": "v6.2.0", + "version": "v6.3.0", "source": { "type": "git", "url": "https://github.com/PHPMailer/PHPMailer.git", - "reference": "e38888a75c070304ca5514197d4847a59a5c853f" + "reference": "4a08cf4cdd2c38d12ee2b9fa69e5d235f37a6dcb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/e38888a75c070304ca5514197d4847a59a5c853f", - "reference": "e38888a75c070304ca5514197d4847a59a5c853f", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/4a08cf4cdd2c38d12ee2b9fa69e5d235f37a6dcb", + "reference": "4a08cf4cdd2c38d12ee2b9fa69e5d235f37a6dcb", "shasum": "" }, "require": { @@ -9807,7 +9964,7 @@ "description": "PHPMailer is a full-featured email creation and transfer class for PHP", "support": { "issues": "https://github.com/PHPMailer/PHPMailer/issues", - "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.2.0" + "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.3.0" }, "funding": [ { @@ -9815,7 +9972,7 @@ "type": "github" } ], - "time": "2020-11-25T15:24:57+00:00" + "time": "2021-02-19T15:28:08+00:00" }, { "name": "psr/container", @@ -9864,6 +10021,10 @@ "container-interop", "psr" ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/master" + }, "time": "2017-02-14T16:28:37+00:00" }, { @@ -9914,6 +10075,9 @@ "request", "response" ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, "time": "2016-08-06T14:39:51+00:00" }, { @@ -9961,20 +10125,23 @@ "psr", "psr-3" ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.3" + }, "time": "2020-03-23T09:12:05+00:00" }, { "name": "psy/psysh", - "version": "v0.10.6", + "version": "v0.10.7", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "6f990c19f91729de8b31e639d6e204ea59f19cf3" + "reference": "a395af46999a12006213c0c8346c9445eb31640c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/6f990c19f91729de8b31e639d6e204ea59f19cf3", - "reference": "6f990c19f91729de8b31e639d6e204ea59f19cf3", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/a395af46999a12006213c0c8346c9445eb31640c", + "reference": "a395af46999a12006213c0c8346c9445eb31640c", "shasum": "" }, "require": { @@ -10035,9 +10202,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.10.6" + "source": "https://github.com/bobthecow/psysh/tree/v0.10.7" }, - "time": "2021-01-18T15:53:43+00:00" + "time": "2021-03-14T02:14:56+00:00" }, { "name": "ralouphie/getallheaders", @@ -10077,6 +10244,10 @@ } ], "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, "time": "2019-03-08T08:55:37+00:00" }, { @@ -10551,16 +10722,16 @@ }, { "name": "simplesamlphp/simplesamlphp-module-authorize", - "version": "v0.9.2", + "version": "v0.9.3", "source": { "type": "git", "url": "https://github.com/simplesamlphp/simplesamlphp-module-authorize.git", - "reference": "c2607a5252ee1256b50ce7795e35513b116998d4" + "reference": "0593bfcb84fca9d9133f415246ab8ca51b412c92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authorize/zipball/c2607a5252ee1256b50ce7795e35513b116998d4", - "reference": "c2607a5252ee1256b50ce7795e35513b116998d4", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authorize/zipball/0593bfcb84fca9d9133f415246ab8ca51b412c92", + "reference": "0593bfcb84fca9d9133f415246ab8ca51b412c92", "shasum": "" }, "require": { @@ -10579,7 +10750,7 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-3.0-or-later" + "LGPL-2.1-or-later" ], "authors": [ { @@ -10596,7 +10767,7 @@ "issues": "https://github.com/tvdijen/simplesamlphp-module-authorize/issues", "source": "https://github.com/tvdijen/simplesamlphp-module-authorize" }, - "time": "2020-02-25T15:16:57+00:00" + "time": "2021-03-24T10:37:17+00:00" }, { "name": "simplesamlphp/simplesamlphp-module-authtwitter", @@ -11069,6 +11240,10 @@ "discovery", "simplesamlphp" ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-discopower/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-discopower" + }, "time": "2019-12-13T07:51:43+00:00" }, { @@ -11992,6 +12167,10 @@ "keywords": [ "stack" ], + "support": { + "issues": "https://github.com/stackphp/builder/issues", + "source": "https://github.com/stackphp/builder/tree/master" + }, "time": "2017-11-18T14:57:29+00:00" }, { @@ -12051,6 +12230,10 @@ "database", "routing" ], + "support": { + "issues": "https://github.com/symfony-cmf/routing/issues", + "source": "https://github.com/symfony-cmf/routing/tree/1.4" + }, "time": "2017-05-09T08:10:41+00:00" }, { @@ -12107,6 +12290,9 @@ ], "description": "Symfony ClassLoader Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/class-loader/tree/3.4" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -12125,16 +12311,16 @@ }, { "name": "symfony/config", - "version": "v4.4.19", + "version": "v4.4.20", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "2c4c7827a7e143f5cf375666641b0f448eab8802" + "reference": "98606c6fa1a8f55ff964ccdd704275bf5b9f71b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/2c4c7827a7e143f5cf375666641b0f448eab8802", - "reference": "2c4c7827a7e143f5cf375666641b0f448eab8802", + "url": "https://api.github.com/repos/symfony/config/zipball/98606c6fa1a8f55ff964ccdd704275bf5b9f71b3", + "reference": "98606c6fa1a8f55ff964ccdd704275bf5b9f71b3", "shasum": "" }, "require": { @@ -12181,7 +12367,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v4.4.19" + "source": "https://github.com/symfony/config/tree/v4.4.20" }, "funding": [ { @@ -12197,7 +12383,7 @@ "type": "tidelift" } ], - "time": "2021-01-27T09:09:26+00:00" + "time": "2021-02-22T15:36:50+00:00" }, { "name": "symfony/console", @@ -12269,6 +12455,9 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/console/tree/v3.4.41" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -12339,6 +12528,9 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/debug/tree/3.4" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -12424,6 +12616,9 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/dependency-injection/tree/3.4" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -12501,6 +12696,9 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/3.4" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -12519,16 +12717,16 @@ }, { "name": "symfony/filesystem", - "version": "v5.2.3", + "version": "v5.2.4", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "262d033b57c73e8b59cd6e68a45c528318b15038" + "reference": "710d364200997a5afde34d9fe57bd52f3cc1e108" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/262d033b57c73e8b59cd6e68a45c528318b15038", - "reference": "262d033b57c73e8b59cd6e68a45c528318b15038", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/710d364200997a5afde34d9fe57bd52f3cc1e108", + "reference": "710d364200997a5afde34d9fe57bd52f3cc1e108", "shasum": "" }, "require": { @@ -12561,7 +12759,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.2.3" + "source": "https://github.com/symfony/filesystem/tree/v5.2.4" }, "funding": [ { @@ -12577,20 +12775,20 @@ "type": "tidelift" } ], - "time": "2021-01-27T10:01:46+00:00" + "time": "2021-02-12T10:38:38+00:00" }, { "name": "symfony/finder", - "version": "v4.4.19", + "version": "v4.4.20", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "25d79cfccfc12e84e7a63a248c3f0720fdd92db6" + "reference": "2543795ab1570df588b9bbd31e1a2bd7037b94f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/25d79cfccfc12e84e7a63a248c3f0720fdd92db6", - "reference": "25d79cfccfc12e84e7a63a248c3f0720fdd92db6", + "url": "https://api.github.com/repos/symfony/finder/zipball/2543795ab1570df588b9bbd31e1a2bd7037b94f6", + "reference": "2543795ab1570df588b9bbd31e1a2bd7037b94f6", "shasum": "" }, "require": { @@ -12622,7 +12820,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v4.4.19" + "source": "https://github.com/symfony/finder/tree/v4.4.20" }, "funding": [ { @@ -12638,7 +12836,7 @@ "type": "tidelift" } ], - "time": "2021-01-27T09:09:26+00:00" + "time": "2021-02-12T10:48:09+00:00" }, { "name": "symfony/http-foundation", @@ -12692,6 +12890,9 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/3.4" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -12796,6 +12997,9 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v3.4.44" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -12868,6 +13072,9 @@ "polyfill", "portable" ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.17.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -12941,6 +13148,9 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.17.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -13017,6 +13227,9 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/master" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -13090,6 +13303,9 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.17.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -13160,6 +13376,9 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-php56/tree/v1.17.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -13233,6 +13452,9 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-php70/tree/master" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -13302,6 +13524,9 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/master" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -13320,7 +13545,7 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.22.0", + "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", @@ -13383,7 +13608,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.1" }, "funding": [ { @@ -13451,6 +13676,9 @@ "polyfill", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-util/tree/master" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -13514,6 +13742,9 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v3.4.41" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -13591,6 +13822,10 @@ "psr-17", "psr-7" ], + "support": { + "issues": "https://github.com/symfony/psr-http-message-bridge/issues", + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v1.1.2" + }, "time": "2019-04-03T17:09:40+00:00" }, { @@ -13667,6 +13902,9 @@ "uri", "url" ], + "support": { + "source": "https://github.com/symfony/routing/tree/3.4" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -13760,6 +13998,9 @@ ], "description": "Symfony Serializer Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/serializer/tree/v3.4.41" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -13844,6 +14085,9 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/3.4" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -13944,6 +14188,9 @@ ], "description": "Symfony Validator Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/validator/tree/3.4" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -13962,7 +14209,7 @@ }, { "name": "symfony/var-dumper", - "version": "v4.4.19", + "version": "v4.4.20", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", @@ -14031,7 +14278,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v4.4.19" + "source": "https://github.com/symfony/var-dumper/tree/v4.4.20" }, "funding": [ { @@ -14106,6 +14353,9 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v3.4.41" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -14244,6 +14494,10 @@ "keywords": [ "templating" ], + "support": { + "issues": "https://github.com/twigphp/Twig/issues", + "source": "https://github.com/twigphp/Twig/tree/1.x" + }, "time": "2020-02-11T05:59:23+00:00" }, { @@ -14294,6 +14548,10 @@ "security", "stream-wrapper" ], + "support": { + "issues": "https://github.com/TYPO3/phar-stream-wrapper/issues", + "source": "https://github.com/TYPO3/phar-stream-wrapper/tree/master" + }, "time": "2019-12-10T11:53:27+00:00" }, { @@ -14388,6 +14646,10 @@ "check", "validate" ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.5.0" + }, "time": "2019-08-24T08:43:50+00:00" }, { @@ -14490,38 +14752,38 @@ }, { "name": "wikimedia/composer-merge-plugin", - "version": "v1.4.1", + "version": "v2.0.1", "source": { "type": "git", "url": "https://github.com/wikimedia/composer-merge-plugin.git", - "reference": "81c6ac72a24a67383419c7eb9aa2b3437f2ab100" + "reference": "8ca2ed8ab97c8ebce6b39d9943e9909bb4f18912" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wikimedia/composer-merge-plugin/zipball/81c6ac72a24a67383419c7eb9aa2b3437f2ab100", - "reference": "81c6ac72a24a67383419c7eb9aa2b3437f2ab100", + "url": "https://api.github.com/repos/wikimedia/composer-merge-plugin/zipball/8ca2ed8ab97c8ebce6b39d9943e9909bb4f18912", + "reference": "8ca2ed8ab97c8ebce6b39d9943e9909bb4f18912", "shasum": "" }, "require": { - "composer-plugin-api": "^1.0", - "php": ">=5.3.2" + "composer-plugin-api": "^1.1||^2.0", + "php": ">=7.2.0" }, "require-dev": { - "composer/composer": "~1.0.0", - "jakub-onderka/php-parallel-lint": "~0.8", - "phpunit/phpunit": "~4.8|~5.0", - "squizlabs/php_codesniffer": "~2.1.0" + "composer/composer": "^1.1||^2.0", + "php-parallel-lint/php-parallel-lint": "~1.1.0", + "phpunit/phpunit": "^8.5||^9.0", + "squizlabs/php_codesniffer": "~3.5.4" }, "type": "composer-plugin", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "2.x-dev" }, - "class": "Wikimedia\\Composer\\MergePlugin" + "class": "Wikimedia\\Composer\\Merge\\V2\\MergePlugin" }, "autoload": { "psr-4": { - "Wikimedia\\Composer\\": "src/" + "Wikimedia\\Composer\\Merge\\V2\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -14535,7 +14797,11 @@ } ], "description": "Composer plugin to merge multiple composer.json files", - "time": "2017-04-25T02:31:25+00:00" + "support": { + "issues": "https://github.com/wikimedia/composer-merge-plugin/issues", + "source": "https://github.com/wikimedia/composer-merge-plugin/tree/v2.0.1" + }, + "time": "2021-02-24T05:28:06+00:00" } ], "packages-dev": [], @@ -14558,5 +14824,5 @@ "prefer-lowest": false, "platform": [], "platform-dev": [], - "plugin-api-version": "1.1.0" + "plugin-api-version": "2.0.0" } diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php index 03b9bb9c4..247294d66 100644 --- a/vendor/composer/ClassLoader.php +++ b/vendor/composer/ClassLoader.php @@ -37,11 +37,13 @@ * * @author Fabien Potencier <fabien@symfony.com> * @author Jordi Boggiano <j.boggiano@seld.be> - * @see http://www.php-fig.org/psr/psr-0/ - * @see http://www.php-fig.org/psr/psr-4/ + * @see https://www.php-fig.org/psr/psr-0/ + * @see https://www.php-fig.org/psr/psr-4/ */ class ClassLoader { + private $vendorDir; + // PSR-4 private $prefixLengthsPsr4 = array(); private $prefixDirsPsr4 = array(); @@ -57,6 +59,13 @@ class ClassLoader private $missingClasses = array(); private $apcuPrefix; + private static $registeredLoaders = array(); + + public function __construct($vendorDir = null) + { + $this->vendorDir = $vendorDir; + } + public function getPrefixes() { if (!empty($this->prefixesPsr0)) { @@ -300,6 +309,17 @@ public function getApcuPrefix() public function register($prepend = false) { spl_autoload_register(array($this, 'loadClass'), true, $prepend); + + if (null === $this->vendorDir) { + return; + } + + if ($prepend) { + self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; + } else { + unset(self::$registeredLoaders[$this->vendorDir]); + self::$registeredLoaders[$this->vendorDir] = $this; + } } /** @@ -308,6 +328,10 @@ public function register($prepend = false) public function unregister() { spl_autoload_unregister(array($this, 'loadClass')); + + if (null !== $this->vendorDir) { + unset(self::$registeredLoaders[$this->vendorDir]); + } } /** @@ -367,6 +391,16 @@ public function findFile($class) return $file; } + /** + * Returns the currently registered loaders indexed by their corresponding vendor directories. + * + * @return self[] + */ + public static function getRegisteredLoaders() + { + return self::$registeredLoaders; + } + private function findFileWithExtension($class, $ext) { // PSR-4 lookup diff --git a/vendor/composer/InstalledVersions.php b/vendor/composer/InstalledVersions.php index 8e2921eac..b9c973bc4 100644 --- a/vendor/composer/InstalledVersions.php +++ b/vendor/composer/InstalledVersions.php @@ -1,25 +1,36 @@ <?php +/* + * This file is part of Composer. + * + * (c) Nils Adermann <naderman@naderman.de> + * Jordi Boggiano <j.boggiano@seld.be> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Composer; +use Composer\Autoload\ClassLoader; use Composer\Semver\VersionParser; - - - - - +/** + * This class is copied in every Composer installed project and available to all + * + * To require it's presence, you can require `composer-runtime-api ^2.0` + */ class InstalledVersions { -private static $installed = array ( + private static $installed = array ( 'root' => array ( - 'pretty_version' => '8.9.13.x-dev', - 'version' => '8.9.13.9999999-dev', + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', 'aliases' => array ( ), - 'reference' => '3ff7d617b5d6cfbf92444f52710a2523cc318d69', + 'reference' => 'ee54ac5beb8e6d50593b7ea3413e037c689b40e7', 'name' => 'drupal/recommended-project', ), 'versions' => @@ -184,6 +195,15 @@ class InstalledVersions ), 'reference' => '8.x-2.4', ), + 'drupal/adminimal_theme' => + array ( + 'pretty_version' => '1.6.0', + 'version' => '1.6.0.0', + 'aliases' => + array ( + ), + 'reference' => '8.x-1.6', + ), 'drupal/aggregator' => array ( 'replaced' => @@ -288,14 +308,32 @@ class InstalledVersions ), 'reference' => '8.x-1.1', ), + 'drupal/cern-adminimal-subtheme' => + array ( + 'pretty_version' => '2.1.0', + 'version' => '2.1.0.0', + 'aliases' => + array ( + ), + 'reference' => 'a2ed5628d532fccb54abbeaf063db3944784bd76', + ), + 'drupal/cern-base-theme' => + array ( + 'pretty_version' => '2.6.6', + 'version' => '2.6.6.0', + 'aliases' => + array ( + ), + 'reference' => 'cb5ed2e618d84b10f0f7c4441ad0be5ce0a2c2d3', + ), 'drupal/cern-cds-media' => array ( - 'pretty_version' => '2.1.3', - 'version' => '2.1.3.0', + 'pretty_version' => '2.1.4', + 'version' => '2.1.4.0', 'aliases' => array ( ), - 'reference' => '57ba9f56ce31d754e1d89117fcdd65ae816ce22c', + 'reference' => '211fb1be8dbb83df9dd791b6f75d8798bb99f290', ), 'drupal/cern-components' => array ( @@ -308,12 +346,12 @@ class InstalledVersions ), 'drupal/cern-dev-status' => array ( - 'pretty_version' => '2.0.3', - 'version' => '2.0.3.0', + 'pretty_version' => '2.0.5', + 'version' => '2.0.5.0', 'aliases' => array ( ), - 'reference' => '50a2dcafc5ba1d130dd270cff17718f03e4cc3b5', + 'reference' => 'faba2b40d7f34d718f0826dbb38250e42881e71a', ), 'drupal/cern-display-formats' => array ( @@ -324,23 +362,41 @@ class InstalledVersions ), 'reference' => '57b5b7cc346f4094359efbb53f9cb21cfedbaaf3', ), + 'drupal/cern-drupal-welcome-message-block' => + array ( + 'pretty_version' => '1.1.0', + 'version' => '1.1.0.0', + 'aliases' => + array ( + ), + 'reference' => 'c5a6c1b0b465429ffe2c3d5bac92b6fa39f668f6', + ), 'drupal/cern-full-html-format' => array ( - 'pretty_version' => '2.0.3', - 'version' => '2.0.3.0', + 'pretty_version' => '2.0.4', + 'version' => '2.0.4.0', 'aliases' => array ( ), - 'reference' => '862c0ffe8ed690dc622d72d22292c83f42c77bb6', + 'reference' => '4e4a15aa77576abadb8639f537e31d31edbc09a6', + ), + 'drupal/cern-indico-feeds' => + array ( + 'pretty_version' => '2.0.5', + 'version' => '2.0.5.0', + 'aliases' => + array ( + ), + 'reference' => '8478ce54ec7267c82e3370c5e35642d8e0c11534', ), 'drupal/cern-landing-page' => array ( - 'pretty_version' => '2.2.3', - 'version' => '2.2.3.0', + 'pretty_version' => '2.2.4', + 'version' => '2.2.4.0', 'aliases' => array ( ), - 'reference' => '7f2e2fae22215d2f1b886eb677e9dafdecdc9033', + 'reference' => 'a6aa2903393d64b341900aa65c3e160afd39752f', ), 'drupal/cern-loading' => array ( @@ -353,21 +409,48 @@ class InstalledVersions ), 'drupal/cern-paragraph-types' => array ( - 'pretty_version' => '2.2.2', - 'version' => '2.2.2.0', + 'pretty_version' => '2.2.3', + 'version' => '2.2.3.0', + 'aliases' => + array ( + ), + 'reference' => '5d9bd43e424dc7865ccd564544a1e07045f5c111', + ), + 'drupal/cern-profile-displayname' => + array ( + 'pretty_version' => '2.1.0', + 'version' => '2.1.0.0', + 'aliases' => + array ( + ), + 'reference' => '1392ffebc377e627a22b6a817f2c342d126b93f2', + ), + 'drupal/cern-theme' => + array ( + 'pretty_version' => '2.6.11', + 'version' => '2.6.11.0', 'aliases' => array ( ), - 'reference' => 'c62b7f8d71029a6cd6535ef87d465e5e858f74a5', + 'reference' => '38332c5687938b4c9368a05693071c884da02d14', ), 'drupal/cern-toolbar' => array ( - 'pretty_version' => '2.2.2', - 'version' => '2.2.2.0', + 'pretty_version' => '2.2.3', + 'version' => '2.2.3.0', + 'aliases' => + array ( + ), + 'reference' => 'ab38a97568bfe8e7f985bde28fdfd847b89aa685', + ), + 'drupal/cern-webcast-feeds' => + array ( + 'pretty_version' => '2.0.4', + 'version' => '2.0.4.0', 'aliases' => array ( ), - 'reference' => '51e6b5293d8628c03c124c46b1b81e972279393c', + 'reference' => '4f255383eec3c97d2b9de1c0bae98d23b16e0076', ), 'drupal/ckeditor' => array ( @@ -426,12 +509,12 @@ class InstalledVersions ), 'drupal/colorbox' => array ( - 'pretty_version' => '1.6.0', - 'version' => '1.6.0.0', + 'pretty_version' => '1.7.0', + 'version' => '1.7.0.0', 'aliases' => array ( ), - 'reference' => '8.x-1.6', + 'reference' => '8.x-1.7', ), 'drupal/colorbutton' => array ( @@ -808,12 +891,12 @@ class InstalledVersions ), 'drupal/ds' => array ( - 'pretty_version' => '3.9.0', - 'version' => '3.9.0.0', + 'pretty_version' => '3.12.0', + 'version' => '3.12.0.0', 'aliases' => array ( ), - 'reference' => '8.x-3.9', + 'reference' => '8.x-3.12', ), 'drupal/dynamic_page_cache' => array ( @@ -824,12 +907,21 @@ class InstalledVersions ), 'drupal/easy_breadcrumb' => array ( - 'pretty_version' => '1.13.0', - 'version' => '1.13.0.0', + 'pretty_version' => '1.15.0', + 'version' => '1.15.0.0', 'aliases' => array ( ), - 'reference' => '8.x-1.13', + 'reference' => '8.x-1.15', + ), + 'drupal/easychart' => + array ( + 'pretty_version' => '3.4.0', + 'version' => '3.4.0.0', + 'aliases' => + array ( + ), + 'reference' => '8.x-3.4', ), 'drupal/editor' => array ( @@ -865,12 +957,12 @@ class InstalledVersions ), 'drupal/entity_reference_revisions' => array ( - 'pretty_version' => '1.8.0', - 'version' => '1.8.0.0', + 'pretty_version' => '1.9.0', + 'version' => '1.9.0.0', 'aliases' => array ( ), - 'reference' => '8.x-1.8', + 'reference' => '8.x-1.9', ), 'drupal/externalauth' => array ( @@ -883,21 +975,21 @@ class InstalledVersions ), 'drupal/extlink' => array ( - 'pretty_version' => '1.5.0', - 'version' => '1.5.0.0', + 'pretty_version' => '1.6.0', + 'version' => '1.6.0.0', 'aliases' => array ( ), - 'reference' => '8.x-1.5', + 'reference' => '8.x-1.6', ), 'drupal/facets' => array ( - 'pretty_version' => '1.6.0', - 'version' => '1.6.0.0', + 'pretty_version' => '1.7.0', + 'version' => '1.7.0.0', 'aliases' => array ( ), - 'reference' => '8.x-1.6', + 'reference' => '8.x-1.7', ), 'drupal/fast_404' => array ( @@ -910,12 +1002,12 @@ class InstalledVersions ), 'drupal/features' => array ( - 'pretty_version' => '3.11.0', - 'version' => '3.11.0.0', + 'pretty_version' => '3.12.0', + 'version' => '3.12.0.0', 'aliases' => array ( ), - 'reference' => '8.x-3.11', + 'reference' => '8.x-3.12', ), 'drupal/feeds' => array ( @@ -1199,12 +1291,12 @@ class InstalledVersions ), 'drupal/ludwig' => array ( - 'pretty_version' => '1.6.0', - 'version' => '1.6.0.0', + 'pretty_version' => '1.7.0', + 'version' => '1.7.0.0', 'aliases' => array ( ), - 'reference' => '8.x-1.6', + 'reference' => '8.x-1.7', ), 'drupal/mailsystem' => array ( @@ -1240,12 +1332,12 @@ class InstalledVersions ), 'drupal/memcache' => array ( - 'pretty_version' => '2.2.0', - 'version' => '2.2.0.0', + 'pretty_version' => '2.3.0', + 'version' => '2.3.0.0', 'aliases' => array ( ), - 'reference' => '8.x-2.2', + 'reference' => '8.x-2.3', ), 'drupal/menu_block' => array ( @@ -1290,12 +1382,12 @@ class InstalledVersions ), 'drupal/metatag' => array ( - 'pretty_version' => '1.15.0', - 'version' => '1.15.0.0', + 'pretty_version' => '1.16.0', + 'version' => '1.16.0.0', 'aliases' => array ( ), - 'reference' => '8.x-1.15', + 'reference' => '8.x-1.16', ), 'drupal/migrate' => array ( @@ -1370,12 +1462,12 @@ class InstalledVersions ), 'drupal/module_filter' => array ( - 'pretty_version' => '3.1.0', - 'version' => '3.1.0.0', + 'pretty_version' => '3.2.0', + 'version' => '3.2.0.0', 'aliases' => array ( ), - 'reference' => '8.x-3.1', + 'reference' => '8.x-3.2', ), 'drupal/node' => array ( @@ -1393,6 +1485,15 @@ class InstalledVersions ), 'reference' => '8.x-1.4', ), + 'drupal/openid_connect' => + array ( + 'pretty_version' => '1.0.0', + 'version' => '1.0.0.0', + 'aliases' => + array ( + ), + 'reference' => '8.x-1.0', + ), 'drupal/options' => array ( 'replaced' => @@ -1477,12 +1578,12 @@ class InstalledVersions ), 'drupal/permissions_by_term' => array ( - 'pretty_version' => '2.29.0', - 'version' => '2.29.0.0', + 'pretty_version' => '2.31.0', + 'version' => '2.31.0.0', 'aliases' => array ( ), - 'reference' => '8.x-2.29', + 'reference' => '8.x-2.31', ), 'drupal/piwik' => array ( @@ -1518,12 +1619,12 @@ class InstalledVersions ), 'drupal/recommended-project' => array ( - 'pretty_version' => '8.9.13.x-dev', - 'version' => '8.9.13.9999999-dev', + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', 'aliases' => array ( ), - 'reference' => '3ff7d617b5d6cfbf92444f52710a2523cc318d69', + 'reference' => 'ee54ac5beb8e6d50593b7ea3413e037c689b40e7', ), 'drupal/redirect' => array ( @@ -1536,12 +1637,12 @@ class InstalledVersions ), 'drupal/require_login' => array ( - 'pretty_version' => '2.1.0', - 'version' => '2.1.0.0', + 'pretty_version' => '2.4.0', + 'version' => '2.4.0.0', 'aliases' => array ( ), - 'reference' => '8.x-2.1', + 'reference' => '8.x-2.4', ), 'drupal/responsive_image' => array ( @@ -1665,6 +1766,15 @@ class InstalledVersions 0 => '8.9.13', ), ), + 'drupal/sticky' => + array ( + 'pretty_version' => '1.1.0', + 'version' => '1.1.0.0', + 'aliases' => + array ( + ), + 'reference' => '8.x-1.1', + ), 'drupal/syslog' => array ( 'replaced' => @@ -1824,12 +1934,12 @@ class InstalledVersions ), 'drupal/webform' => array ( - 'pretty_version' => '5.24.0', - 'version' => '5.24.0.0', + 'pretty_version' => '5.25.0', + 'version' => '5.25.0.0', 'aliases' => array ( ), - 'reference' => '8.x-5.24', + 'reference' => '8.x-5.25', ), 'drupal/webform_analysis' => array ( @@ -1851,8 +1961,8 @@ class InstalledVersions ), 'drupal/webform_ui' => array ( - 'pretty_version' => '5.24.0', - 'version' => '5.24.0.0', + 'pretty_version' => '5.25.0', + 'version' => '5.25.0.0', 'aliases' => array ( ), @@ -1901,12 +2011,12 @@ class InstalledVersions ), 'drush/drush' => array ( - 'pretty_version' => '8.4.6', - 'version' => '8.4.6.0', + 'pretty_version' => '8.4.8', + 'version' => '8.4.8.0', 'aliases' => array ( ), - 'reference' => '4e48e11d7fe858eebe6c2fad71650c977d3f8900', + 'reference' => 'b377b1896e344085d06bdbf671a465950a164d1e', ), 'easyrdf/easyrdf' => array ( @@ -1937,12 +2047,12 @@ class InstalledVersions ), 'gettext/gettext' => array ( - 'pretty_version' => 'v4.8.3', - 'version' => '4.8.3.0', + 'pretty_version' => 'v4.8.4', + 'version' => '4.8.4.0', 'aliases' => array ( ), - 'reference' => '57ff4fb16647e78e80a5909fe3c190f1c3110321', + 'reference' => '58bc0f7f37e78efb0f9758f93d4a0f669f0f84a1', ), 'gettext/languages' => array ( @@ -2135,12 +2245,12 @@ class InstalledVersions ), 'phpmailer/phpmailer' => array ( - 'pretty_version' => 'v6.2.0', - 'version' => '6.2.0.0', + 'pretty_version' => 'v6.3.0', + 'version' => '6.3.0.0', 'aliases' => array ( ), - 'reference' => 'e38888a75c070304ca5514197d4847a59a5c853f', + 'reference' => '4a08cf4cdd2c38d12ee2b9fa69e5d235f37a6dcb', ), 'psr/container' => array ( @@ -2192,12 +2302,12 @@ class InstalledVersions ), 'psy/psysh' => array ( - 'pretty_version' => 'v0.10.6', - 'version' => '0.10.6.0', + 'pretty_version' => 'v0.10.7', + 'version' => '0.10.7.0', 'aliases' => array ( ), - 'reference' => '6f990c19f91729de8b31e639d6e204ea59f19cf3', + 'reference' => 'a395af46999a12006213c0c8346c9445eb31640c', ), 'ralouphie/getallheaders' => array ( @@ -2303,12 +2413,12 @@ class InstalledVersions ), 'simplesamlphp/simplesamlphp-module-authorize' => array ( - 'pretty_version' => 'v0.9.2', - 'version' => '0.9.2.0', + 'pretty_version' => 'v0.9.3', + 'version' => '0.9.3.0', 'aliases' => array ( ), - 'reference' => 'c2607a5252ee1256b50ce7795e35513b116998d4', + 'reference' => '0593bfcb84fca9d9133f415246ab8ca51b412c92', ), 'simplesamlphp/simplesamlphp-module-authtwitter' => array ( @@ -2384,12 +2494,12 @@ class InstalledVersions ), 'simplesamlphp/simplesamlphp-module-discopower' => array ( - 'pretty_version' => 'v0.9.1', - 'version' => '0.9.1.0', + 'pretty_version' => 'v0.9.3', + 'version' => '0.9.3.0', 'aliases' => array ( ), - 'reference' => '006c0617610f1bae11cf4d17e8ce4c509239a60e', + 'reference' => 'c892926e8186d0a2c638f7032dfc30540c1f92fb', ), 'simplesamlphp/simplesamlphp-module-exampleattributeserver' => array ( @@ -2573,12 +2683,12 @@ class InstalledVersions ), 'symfony/config' => array ( - 'pretty_version' => 'v4.4.19', - 'version' => '4.4.19.0', + 'pretty_version' => 'v4.4.20', + 'version' => '4.4.20.0', 'aliases' => array ( ), - 'reference' => '2c4c7827a7e143f5cf375666641b0f448eab8802', + 'reference' => '98606c6fa1a8f55ff964ccdd704275bf5b9f71b3', ), 'symfony/console' => array ( @@ -2618,21 +2728,21 @@ class InstalledVersions ), 'symfony/filesystem' => array ( - 'pretty_version' => 'v5.2.3', - 'version' => '5.2.3.0', + 'pretty_version' => 'v5.2.4', + 'version' => '5.2.4.0', 'aliases' => array ( ), - 'reference' => '262d033b57c73e8b59cd6e68a45c528318b15038', + 'reference' => '710d364200997a5afde34d9fe57bd52f3cc1e108', ), 'symfony/finder' => array ( - 'pretty_version' => 'v4.4.19', - 'version' => '4.4.19.0', + 'pretty_version' => 'v4.4.20', + 'version' => '4.4.20.0', 'aliases' => array ( ), - 'reference' => '25d79cfccfc12e84e7a63a248c3f0720fdd92db6', + 'reference' => '2543795ab1570df588b9bbd31e1a2bd7037b94f6', ), 'symfony/http-foundation' => array ( @@ -2717,8 +2827,8 @@ class InstalledVersions ), 'symfony/polyfill-php80' => array ( - 'pretty_version' => 'v1.22.0', - 'version' => '1.22.0.0', + 'pretty_version' => 'v1.22.1', + 'version' => '1.22.1.0', 'aliases' => array ( ), @@ -2789,8 +2899,8 @@ class InstalledVersions ), 'symfony/var-dumper' => array ( - 'pretty_version' => 'v4.4.19', - 'version' => '4.4.19.0', + 'pretty_version' => 'v4.4.20', + 'version' => '4.4.20.0', 'aliases' => array ( ), @@ -2843,12 +2953,12 @@ class InstalledVersions ), 'webmozart/assert' => array ( - 'pretty_version' => '1.9.1', - 'version' => '1.9.1.0', + 'pretty_version' => '1.5.0', + 'version' => '1.5.0.0', 'aliases' => array ( ), - 'reference' => 'bafc69caeb4d49c39fd0779086c03a3738cbb389', + 'reference' => '88e6d84706d09a236046d686bbea96f07b3a34f4', ), 'webmozart/path-util' => array ( @@ -2870,12 +2980,12 @@ class InstalledVersions ), 'wikimedia/composer-merge-plugin' => array ( - 'pretty_version' => 'dev-feature/composer-v2', - 'version' => 'dev-feature/composer-v2', + 'pretty_version' => 'v2.0.1', + 'version' => '2.0.1.0', 'aliases' => array ( ), - 'reference' => '3f4c1e914be5ba7b9e84434a69f3bb835bff2ac1', + 'reference' => '8ca2ed8ab97c8ebce6b39d9943e9909bb4f18912', ), 'zendframework/zend-diactoros' => array ( @@ -2907,175 +3017,238 @@ class InstalledVersions ), ), ); - - - - - - - -public static function getInstalledPackages() -{ -return array_keys(self::$installed['versions']); -} - - - - - - - - - -public static function isInstalled($packageName) -{ -return isset(self::$installed['versions'][$packageName]); -} - - - - - - - - - - - - - - -public static function satisfies(VersionParser $parser, $packageName, $constraint) -{ -$constraint = $parser->parseConstraints($constraint); -$provided = $parser->parseConstraints(self::getVersionRanges($packageName)); - -return $provided->matches($constraint); -} - - - - - - - - - - -public static function getVersionRanges($packageName) -{ -if (!isset(self::$installed['versions'][$packageName])) { -throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); -} - -$ranges = array(); -if (isset(self::$installed['versions'][$packageName]['pretty_version'])) { -$ranges[] = self::$installed['versions'][$packageName]['pretty_version']; -} -if (array_key_exists('aliases', self::$installed['versions'][$packageName])) { -$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['aliases']); -} -if (array_key_exists('replaced', self::$installed['versions'][$packageName])) { -$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['replaced']); -} -if (array_key_exists('provided', self::$installed['versions'][$packageName])) { -$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['provided']); -} - -return implode(' || ', $ranges); -} - - - - - -public static function getVersion($packageName) -{ -if (!isset(self::$installed['versions'][$packageName])) { -throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); -} - -if (!isset(self::$installed['versions'][$packageName]['version'])) { -return null; -} - -return self::$installed['versions'][$packageName]['version']; -} - - - - - -public static function getPrettyVersion($packageName) -{ -if (!isset(self::$installed['versions'][$packageName])) { -throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); -} - -if (!isset(self::$installed['versions'][$packageName]['pretty_version'])) { -return null; -} - -return self::$installed['versions'][$packageName]['pretty_version']; -} - - - - - -public static function getReference($packageName) -{ -if (!isset(self::$installed['versions'][$packageName])) { -throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); -} - -if (!isset(self::$installed['versions'][$packageName]['reference'])) { -return null; -} - -return self::$installed['versions'][$packageName]['reference']; -} - - - - - -public static function getRootPackage() -{ -return self::$installed['root']; -} - - - - - - - -public static function getRawData() -{ -return self::$installed; -} - - - - - - - - - - - - - - - - - - - -public static function reload($data) -{ -self::$installed = $data; -} + private static $canGetVendors; + private static $installedByVendor = array(); + + /** + * Returns a list of all package names which are present, either by being installed, replaced or provided + * + * @return string[] + * @psalm-return list<string> + */ + public static function getInstalledPackages() + { + $packages = array(); + foreach (self::getInstalled() as $installed) { + $packages[] = array_keys($installed['versions']); + } + + + if (1 === \count($packages)) { + return $packages[0]; + } + + return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); + } + + /** + * Checks whether the given package is installed + * + * This also returns true if the package name is provided or replaced by another package + * + * @param string $packageName + * @return bool + */ + public static function isInstalled($packageName) + { + foreach (self::getInstalled() as $installed) { + if (isset($installed['versions'][$packageName])) { + return true; + } + } + + return false; + } + + /** + * Checks whether the given package satisfies a version constraint + * + * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: + * + * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') + * + * @param VersionParser $parser Install composer/semver to have access to this class and functionality + * @param string $packageName + * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package + * + * @return bool + */ + public static function satisfies(VersionParser $parser, $packageName, $constraint) + { + $constraint = $parser->parseConstraints($constraint); + $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); + + return $provided->matches($constraint); + } + + /** + * Returns a version constraint representing all the range(s) which are installed for a given package + * + * It is easier to use this via isInstalled() with the $constraint argument if you need to check + * whether a given version of a package is installed, and not just whether it exists + * + * @param string $packageName + * @return string Version constraint usable with composer/semver + */ + public static function getVersionRanges($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + $ranges = array(); + if (isset($installed['versions'][$packageName]['pretty_version'])) { + $ranges[] = $installed['versions'][$packageName]['pretty_version']; + } + if (array_key_exists('aliases', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); + } + if (array_key_exists('replaced', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); + } + if (array_key_exists('provided', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); + } + + return implode(' || ', $ranges); + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['version'])) { + return null; + } + + return $installed['versions'][$packageName]['version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getPrettyVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['pretty_version'])) { + return null; + } + + return $installed['versions'][$packageName]['pretty_version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference + */ + public static function getReference($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['reference'])) { + return null; + } + + return $installed['versions'][$packageName]['reference']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @return array + * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[]} + */ + public static function getRootPackage() + { + $installed = self::getInstalled(); + + return $installed[0]['root']; + } + + /** + * Returns the raw installed.php data for custom implementations + * + * @return array[] + * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[]}, versions: list<string, array{pretty_version: ?string, version: ?string, aliases: ?string[], reference: ?string, replaced: ?string[], provided: ?string[]}>} + */ + public static function getRawData() + { + return self::$installed; + } + + /** + * Lets you reload the static array from another file + * + * This is only useful for complex integrations in which a project needs to use + * this class but then also needs to execute another project's autoloader in process, + * and wants to ensure both projects have access to their version of installed.php. + * + * A typical case would be PHPUnit, where it would need to make sure it reads all + * the data it needs from this class, then call reload() with + * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure + * the project in which it runs can then also use this class safely, without + * interference between PHPUnit's dependencies and the project's dependencies. + * + * @param array[] $data A vendor/composer/installed.php data set + * @return void + * + * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[]}, versions: list<string, array{pretty_version: ?string, version: ?string, aliases: ?string[], reference: ?string, replaced: ?string[], provided: ?string[]}>} $data + */ + public static function reload($data) + { + self::$installed = $data; + self::$installedByVendor = array(); + } + + /** + * @return array[] + */ + private static function getInstalled() + { + if (null === self::$canGetVendors) { + self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); + } + + $installed = array(); + + if (self::$canGetVendors) { + foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { + if (isset(self::$installedByVendor[$vendorDir])) { + $installed[] = self::$installedByVendor[$vendorDir]; + } elseif (is_file($vendorDir.'/composer/installed.php')) { + $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php'; + } + } + } + + $installed[] = self::$installed; + + return $installed; + } } diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index 2bd7e6bbf..5d20f95bb 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -9,6 +9,7 @@ 'ArithmeticError' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/ArithmeticError.php', 'AssertionError' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/AssertionError.php', 'Attribute' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', + 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', 'Console_Table' => $vendorDir . '/pear/console_table/Table.php', 'DivisionByZeroError' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/DivisionByZeroError.php', 'Dompdf\\Cpdf' => $vendorDir . '/dompdf/dompdf/lib/Cpdf.php', diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php index 860aa7be9..9062cba03 100644 --- a/vendor/composer/autoload_psr4.php +++ b/vendor/composer/autoload_psr4.php @@ -8,7 +8,7 @@ return array( 'lsolesen\\pel\\' => array($vendorDir . '/lsolesen/pel/src'), 'XdgBaseDir\\' => array($vendorDir . '/dnoegel/php-xdg-base-dir/src'), - 'Wikimedia\\Composer\\' => array($vendorDir . '/wikimedia/composer-merge-plugin/src'), + 'Wikimedia\\Composer\\Merge\\V2\\' => array($vendorDir . '/wikimedia/composer-merge-plugin/src'), 'WhiteHat101\\Crypt\\' => array($vendorDir . '/whitehat101/apr1-md5/src'), 'Webmozart\\PathUtil\\' => array($vendorDir . '/webmozart/path-util/src'), 'Webmozart\\Assert\\' => array($vendorDir . '/webmozart/assert/src'), diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php index 2d6efe2dc..7e98a855a 100644 --- a/vendor/composer/autoload_real.php +++ b/vendor/composer/autoload_real.php @@ -22,8 +22,10 @@ public static function getLoader() return self::$loader; } + require __DIR__ . '/platform_check.php'; + spl_autoload_register(array('ComposerAutoloaderInit26b9ab19422811c9528189a39d74c975', 'loadClassLoader'), true, true); - self::$loader = $loader = new \Composer\Autoload\ClassLoader(); + self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__))); spl_autoload_unregister(array('ComposerAutoloaderInit26b9ab19422811c9528189a39d74c975', 'loadClassLoader')); $includePaths = require __DIR__ . '/include_paths.php'; @@ -32,7 +34,7 @@ public static function getLoader() $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); if ($useStaticLoader) { - require_once __DIR__ . '/autoload_static.php'; + require __DIR__ . '/autoload_static.php'; call_user_func(\Composer\Autoload\ComposerStaticInit26b9ab19422811c9528189a39d74c975::getInitializer($loader)); } else { diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 0f8a042fb..eb7b2ff8d 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -52,7 +52,7 @@ class ComposerStaticInit26b9ab19422811c9528189a39d74c975 ), 'W' => array ( - 'Wikimedia\\Composer\\' => 19, + 'Wikimedia\\Composer\\Merge\\V2\\' => 28, 'WhiteHat101\\Crypt\\' => 18, 'Webmozart\\PathUtil\\' => 19, 'Webmozart\\Assert\\' => 17, @@ -208,7 +208,7 @@ class ComposerStaticInit26b9ab19422811c9528189a39d74c975 array ( 0 => __DIR__ . '/..' . '/dnoegel/php-xdg-base-dir/src', ), - 'Wikimedia\\Composer\\' => + 'Wikimedia\\Composer\\Merge\\V2\\' => array ( 0 => __DIR__ . '/..' . '/wikimedia/composer-merge-plugin/src', ), @@ -707,6 +707,7 @@ class ComposerStaticInit26b9ab19422811c9528189a39d74c975 'ArithmeticError' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/ArithmeticError.php', 'AssertionError' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/AssertionError.php', 'Attribute' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', + 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', 'Console_Table' => __DIR__ . '/..' . '/pear/console_table/Table.php', 'DivisionByZeroError' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/DivisionByZeroError.php', 'Dompdf\\Cpdf' => __DIR__ . '/..' . '/dompdf/dompdf/lib/Cpdf.php', diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 90a6672e2..dc3c138cd 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -1,14997 +1,15264 @@ -[ - { - "name": "asm89/stack-cors", - "version": "1.3.0", - "version_normalized": "1.3.0.0", - "source": { - "type": "git", - "url": "https://github.com/asm89/stack-cors.git", - "reference": "b9c31def6a83f84b4d4a40d35996d375755f0e08" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/asm89/stack-cors/zipball/b9c31def6a83f84b4d4a40d35996d375755f0e08", - "reference": "b9c31def6a83f84b4d4a40d35996d375755f0e08", - "shasum": "" - }, - "require": { - "php": ">=5.5.9", - "symfony/http-foundation": "~2.7|~3.0|~4.0|~5.0", - "symfony/http-kernel": "~2.7|~3.0|~4.0|~5.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.0 || ^4.8.10", - "squizlabs/php_codesniffer": "^2.3" - }, - "time": "2019-12-24T22:41:47+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Asm89\\Stack\\": "src/Asm89/Stack/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Alexander", - "email": "iam.asm89@gmail.com" - } - ], - "description": "Cross-origin resource sharing library and stack middleware", - "homepage": "https://github.com/asm89/stack-cors", - "keywords": [ - "cors", - "stack" - ] - }, - { - "name": "composer/installers", - "version": "v1.10.0", - "version_normalized": "1.10.0.0", - "source": { - "type": "git", - "url": "https://github.com/composer/installers.git", - "reference": "1a0357fccad9d1cc1ea0c9a05b8847fbccccb78d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/installers/zipball/1a0357fccad9d1cc1ea0c9a05b8847fbccccb78d", - "reference": "1a0357fccad9d1cc1ea0c9a05b8847fbccccb78d", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0 || ^2.0" - }, - "replace": { - "roundcube/plugin-installer": "*", - "shama/baton": "*" - }, - "require-dev": { - "composer/composer": "1.6.* || ^2.0", - "composer/semver": "^1 || ^3", - "phpstan/phpstan": "^0.12.55", - "phpstan/phpstan-phpunit": "^0.12.16", - "symfony/phpunit-bridge": "^4.2 || ^5", - "symfony/process": "^2.3" - }, - "time": "2021-01-14T11:07:16+00:00", - "type": "composer-plugin", - "extra": { - "class": "Composer\\Installers\\Plugin", - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Composer\\Installers\\": "src/Composer/Installers" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kyle Robinson Young", - "email": "kyle@dontkry.com", - "homepage": "https://github.com/shama" - } - ], - "description": "A multi-framework Composer library installer", - "homepage": "https://composer.github.io/installers/", - "keywords": [ - "Craft", - "Dolibarr", - "Eliasis", - "Hurad", - "ImageCMS", - "Kanboard", - "Lan Management System", - "MODX Evo", - "MantisBT", - "Mautic", - "Maya", - "OXID", - "Plentymarkets", - "Porto", - "RadPHP", - "SMF", - "Starbug", - "Thelia", - "Whmcs", - "WolfCMS", - "agl", - "aimeos", - "annotatecms", - "attogram", - "bitrix", - "cakephp", - "chef", - "cockpit", - "codeigniter", - "concrete5", - "croogo", - "dokuwiki", - "drupal", - "eZ Platform", - "elgg", - "expressionengine", - "fuelphp", - "grav", - "installer", - "itop", - "joomla", - "known", - "kohana", - "laravel", - "lavalite", - "lithium", - "magento", - "majima", - "mako", - "mediawiki", - "modulework", - "modx", - "moodle", - "osclass", - "phpbb", - "piwik", - "ppi", - "processwire", - "puppet", - "pxcms", - "reindex", - "roundcube", - "shopware", - "silverstripe", - "sydes", - "sylius", - "symfony", - "typo3", - "wordpress", - "yawik", - "zend", - "zikula" - ], - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ] - }, - { - "name": "composer/semver", - "version": "1.5.1", - "version_normalized": "1.5.1.0", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/c6bea70230ef4dd483e6bbcab6005f682ed3a8de", - "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.5 || ^5.0.5" - }, - "time": "2020-01-13T12:06:48+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Composer\\Semver\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", - "keywords": [ - "semantic", - "semver", - "validation", - "versioning" - ] - }, - { - "name": "consolidation/annotated-command", - "version": "2.12.1", - "version_normalized": "2.12.1.0", - "source": { - "type": "git", - "url": "https://github.com/consolidation/annotated-command.git", - "reference": "0ee361762df2274f360c085e3239784a53f850b5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/0ee361762df2274f360c085e3239784a53f850b5", - "reference": "0ee361762df2274f360c085e3239784a53f850b5", - "shasum": "" - }, - "require": { - "consolidation/output-formatters": "^3.5.1", - "php": ">=5.4.5", - "psr/log": "^1", - "symfony/console": "^2.8|^3|^4", - "symfony/event-dispatcher": "^2.5|^3|^4", - "symfony/finder": "^2.5|^3|^4|^5" - }, - "require-dev": { - "g1a/composer-test-scenarios": "^3", - "php-coveralls/php-coveralls": "^1", - "phpunit/phpunit": "^6", - "squizlabs/php_codesniffer": "^2.7" - }, - "time": "2020-10-11T04:30:03+00:00", - "type": "library", - "extra": { - "scenarios": { - "finder5": { - "require": { - "symfony/finder": "^5" +{ + "packages": [ + { + "name": "asm89/stack-cors", + "version": "1.3.0", + "version_normalized": "1.3.0.0", + "source": { + "type": "git", + "url": "https://github.com/asm89/stack-cors.git", + "reference": "b9c31def6a83f84b4d4a40d35996d375755f0e08" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/asm89/stack-cors/zipball/b9c31def6a83f84b4d4a40d35996d375755f0e08", + "reference": "b9c31def6a83f84b4d4a40d35996d375755f0e08", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "symfony/http-foundation": "~2.7|~3.0|~4.0|~5.0", + "symfony/http-kernel": "~2.7|~3.0|~4.0|~5.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.0 || ^4.8.10", + "squizlabs/php_codesniffer": "^2.3" + }, + "time": "2019-12-24T22:41:47+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Asm89\\Stack\\": "src/Asm89/Stack/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alexander", + "email": "iam.asm89@gmail.com" + } + ], + "description": "Cross-origin resource sharing library and stack middleware", + "homepage": "https://github.com/asm89/stack-cors", + "keywords": [ + "cors", + "stack" + ], + "install-path": "../asm89/stack-cors" + }, + { + "name": "composer/installers", + "version": "v1.10.0", + "version_normalized": "1.10.0.0", + "source": { + "type": "git", + "url": "https://github.com/composer/installers.git", + "reference": "1a0357fccad9d1cc1ea0c9a05b8847fbccccb78d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/installers/zipball/1a0357fccad9d1cc1ea0c9a05b8847fbccccb78d", + "reference": "1a0357fccad9d1cc1ea0c9a05b8847fbccccb78d", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0 || ^2.0" + }, + "replace": { + "roundcube/plugin-installer": "*", + "shama/baton": "*" + }, + "require-dev": { + "composer/composer": "1.6.* || ^2.0", + "composer/semver": "^1 || ^3", + "phpstan/phpstan": "^0.12.55", + "phpstan/phpstan-phpunit": "^0.12.16", + "symfony/phpunit-bridge": "^4.2 || ^5", + "symfony/process": "^2.3" + }, + "time": "2021-01-14T11:07:16+00:00", + "type": "composer-plugin", + "extra": { + "class": "Composer\\Installers\\Plugin", + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Composer\\Installers\\": "src/Composer/Installers" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kyle Robinson Young", + "email": "kyle@dontkry.com", + "homepage": "https://github.com/shama" + } + ], + "description": "A multi-framework Composer library installer", + "homepage": "https://composer.github.io/installers/", + "keywords": [ + "Craft", + "Dolibarr", + "Eliasis", + "Hurad", + "ImageCMS", + "Kanboard", + "Lan Management System", + "MODX Evo", + "MantisBT", + "Mautic", + "Maya", + "OXID", + "Plentymarkets", + "Porto", + "RadPHP", + "SMF", + "Starbug", + "Thelia", + "Whmcs", + "WolfCMS", + "agl", + "aimeos", + "annotatecms", + "attogram", + "bitrix", + "cakephp", + "chef", + "cockpit", + "codeigniter", + "concrete5", + "croogo", + "dokuwiki", + "drupal", + "eZ Platform", + "elgg", + "expressionengine", + "fuelphp", + "grav", + "installer", + "itop", + "joomla", + "known", + "kohana", + "laravel", + "lavalite", + "lithium", + "magento", + "majima", + "mako", + "mediawiki", + "modulework", + "modx", + "moodle", + "osclass", + "phpbb", + "piwik", + "ppi", + "processwire", + "puppet", + "pxcms", + "reindex", + "roundcube", + "shopware", + "silverstripe", + "sydes", + "sylius", + "symfony", + "typo3", + "wordpress", + "yawik", + "zend", + "zikula" + ], + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "install-path": "./installers" + }, + { + "name": "composer/semver", + "version": "1.5.1", + "version_normalized": "1.5.1.0", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/c6bea70230ef4dd483e6bbcab6005f682ed3a8de", + "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.5 || ^5.0.5" + }, + "time": "2020-01-13T12:06:48+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "install-path": "./semver" + }, + { + "name": "consolidation/annotated-command", + "version": "2.12.1", + "version_normalized": "2.12.1.0", + "source": { + "type": "git", + "url": "https://github.com/consolidation/annotated-command.git", + "reference": "0ee361762df2274f360c085e3239784a53f850b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/0ee361762df2274f360c085e3239784a53f850b5", + "reference": "0ee361762df2274f360c085e3239784a53f850b5", + "shasum": "" + }, + "require": { + "consolidation/output-formatters": "^3.5.1", + "php": ">=5.4.5", + "psr/log": "^1", + "symfony/console": "^2.8|^3|^4", + "symfony/event-dispatcher": "^2.5|^3|^4", + "symfony/finder": "^2.5|^3|^4|^5" + }, + "require-dev": { + "g1a/composer-test-scenarios": "^3", + "php-coveralls/php-coveralls": "^1", + "phpunit/phpunit": "^6", + "squizlabs/php_codesniffer": "^2.7" + }, + "time": "2020-10-11T04:30:03+00:00", + "type": "library", + "extra": { + "scenarios": { + "finder5": { + "require": { + "symfony/finder": "^5" + }, + "config": { + "platform": { + "php": "7.2.5" + } + } }, - "config": { - "platform": { - "php": "7.2.5" + "symfony4": { + "require": { + "symfony/console": "^4.0" + }, + "config": { + "platform": { + "php": "7.1.3" + } + } + }, + "symfony2": { + "require": { + "symfony/console": "^2.8" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36" + }, + "remove": [ + "php-coveralls/php-coveralls" + ], + "config": { + "platform": { + "php": "5.4.8" + } + }, + "scenario-options": { + "create-lockfile": "false" } - } - }, - "symfony4": { - "require": { - "symfony/console": "^4.0" }, - "config": { - "platform": { - "php": "7.1.3" + "phpunit4": { + "require-dev": { + "phpunit/phpunit": "^4.8.36" + }, + "remove": [ + "php-coveralls/php-coveralls" + ], + "config": { + "platform": { + "php": "5.4.8" + } } } }, - "symfony2": { - "require": { - "symfony/console": "^2.8" + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Consolidation\\AnnotatedCommand\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Initialize Symfony Console commands from annotated command class methods.", + "support": { + "issues": "https://github.com/consolidation/annotated-command/issues", + "source": "https://github.com/consolidation/annotated-command/tree/2.12.1" + }, + "install-path": "../consolidation/annotated-command" + }, + { + "name": "consolidation/output-formatters", + "version": "3.5.1", + "version_normalized": "3.5.1.0", + "source": { + "type": "git", + "url": "https://github.com/consolidation/output-formatters.git", + "reference": "0d38f13051ef05c223a2bb8e962d668e24785196" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/0d38f13051ef05c223a2bb8e962d668e24785196", + "reference": "0d38f13051ef05c223a2bb8e962d668e24785196", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^1.1.0", + "php": ">=5.4.0", + "symfony/console": "^2.8|^3|^4", + "symfony/finder": "^2.5|^3|^4|^5" + }, + "require-dev": { + "g1a/composer-test-scenarios": "^3", + "php-coveralls/php-coveralls": "^1", + "phpunit/phpunit": "^5.7.27", + "squizlabs/php_codesniffer": "^2.7", + "symfony/var-dumper": "^2.8|^3|^4", + "victorjonsson/markdowndocs": "^1.3" + }, + "suggest": { + "symfony/var-dumper": "For using the var_dump formatter" + }, + "time": "2020-10-11T04:15:32+00:00", + "type": "library", + "extra": { + "scenarios": { + "finder5": { + "require": { + "symfony/finder": "^5" + }, + "config": { + "platform": { + "php": "7.2.5" + } + } }, - "require-dev": { - "phpunit/phpunit": "^4.8.36" + "symfony4": { + "require": { + "symfony/console": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^6" + }, + "config": { + "platform": { + "php": "7.1.3" + } + } }, - "remove": [ - "php-coveralls/php-coveralls" - ], - "config": { - "platform": { - "php": "5.4.8" + "symfony3": { + "require": { + "symfony/console": "^3.4", + "symfony/finder": "^3.4", + "symfony/var-dumper": "^3.4" + }, + "config": { + "platform": { + "php": "5.6.32" + } } }, - "scenario-options": { - "create-lockfile": "false" + "symfony2": { + "require": { + "symfony/console": "^2.8" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36" + }, + "remove": [ + "php-coveralls/php-coveralls" + ], + "config": { + "platform": { + "php": "5.4.8" + } + }, + "scenario-options": { + "create-lockfile": "false" + } } }, - "phpunit4": { - "require-dev": { - "phpunit/phpunit": "^4.8.36" - }, - "remove": [ - "php-coveralls/php-coveralls" - ], - "config": { - "platform": { - "php": "5.4.8" - } + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Consolidation\\OutputFormatters\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Format text by applying transformations provided by plug-in formatters.", + "support": { + "issues": "https://github.com/consolidation/output-formatters/issues", + "source": "https://github.com/consolidation/output-formatters/tree/3.5.1" + }, + "install-path": "../consolidation/output-formatters" + }, + { + "name": "dflydev/dot-access-data", + "version": "v1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "time": "2017-01-20T21:14:22+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Dflydev\\DotAccessData": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/master" + }, + "install-path": "../dflydev/dot-access-data" + }, + { + "name": "dnoegel/php-xdg-base-dir", + "version": "v0.1.1", + "version_normalized": "0.1.1.0", + "source": { + "type": "git", + "url": "https://github.com/dnoegel/php-xdg-base-dir.git", + "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", + "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35" + }, + "time": "2019-12-04T15:06:13+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "XdgBaseDir\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "implementation of xdg base directory specification for php", + "support": { + "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues", + "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1" + }, + "install-path": "../dnoegel/php-xdg-base-dir" + }, + { + "name": "doctrine/annotations", + "version": "v1.4.0", + "version_normalized": "1.4.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "54cacc9b81758b14e3ce750f205a393d52339e97" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/54cacc9b81758b14e3ce750f205a393d52339e97", + "reference": "54cacc9b81758b14e3ce750f205a393d52339e97", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "doctrine/cache": "1.*", + "phpunit/phpunit": "^5.7" + }, + "time": "2017-02-24T16:22:25+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "install-path": "../doctrine/annotations" + }, + { + "name": "doctrine/cache", + "version": "v1.6.2", + "version_normalized": "1.6.2.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/cache.git", + "reference": "eb152c5100571c7a45470ff2a35095ab3f3b900b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/cache/zipball/eb152c5100571c7a45470ff2a35095ab3f3b900b", + "reference": "eb152c5100571c7a45470ff2a35095ab3f3b900b", + "shasum": "" + }, + "require": { + "php": "~5.5|~7.0" + }, + "conflict": { + "doctrine/common": ">2.2,<2.4" + }, + "require-dev": { + "phpunit/phpunit": "~4.8|~5.0", + "predis/predis": "~1.0", + "satooshi/php-coveralls": "~0.6" + }, + "time": "2017-07-22T12:49:21+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Caching library offering an object-oriented API for many cache backends", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "cache", + "caching" + ], + "install-path": "../doctrine/cache" + }, + { + "name": "doctrine/collections", + "version": "v1.4.0", + "version_normalized": "1.4.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/collections.git", + "reference": "1a4fb7e902202c33cce8c55989b945612943c2ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/collections/zipball/1a4fb7e902202c33cce8c55989b945612943c2ba", + "reference": "1a4fb7e902202c33cce8c55989b945612943c2ba", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "doctrine/coding-standard": "~0.1@dev", + "phpunit/phpunit": "^5.7" + }, + "time": "2017-01-03T10:49:41+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Doctrine\\Common\\Collections\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Collections Abstraction library", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "array", + "collections", + "iterator" + ], + "install-path": "../doctrine/collections" + }, + { + "name": "doctrine/common", + "version": "v2.7.3", + "version_normalized": "2.7.3.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/common.git", + "reference": "4acb8f89626baafede6ee5475bc5844096eba8a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/common/zipball/4acb8f89626baafede6ee5475bc5844096eba8a9", + "reference": "4acb8f89626baafede6ee5475bc5844096eba8a9", + "shasum": "" + }, + "require": { + "doctrine/annotations": "1.*", + "doctrine/cache": "1.*", + "doctrine/collections": "1.*", + "doctrine/inflector": "1.*", + "doctrine/lexer": "1.*", + "php": "~5.6|~7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.4.6" + }, + "time": "2017-07-22T08:35:12+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "lib/Doctrine/Common" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Common Library for Doctrine projects", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "collections", + "eventmanager", + "persistence", + "spl" + ], + "install-path": "../doctrine/common" + }, + { + "name": "doctrine/inflector", + "version": "v1.2.0", + "version_normalized": "1.2.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/e11d84c6e018beedd929cff5220969a3c6d1d462", + "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.2" + }, + "time": "2017-07-22T12:18:28+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Common String Manipulations with regard to casing and singular/plural rules.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "inflection", + "pluralize", + "singularize", + "string" + ], + "install-path": "../doctrine/inflector" + }, + { + "name": "doctrine/lexer", + "version": "1.0.2", + "version_normalized": "1.0.2.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/1febd6c3ef84253d7c815bed85fc622ad207a9f8", + "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "^4.5" + }, + "time": "2019-06-08T11:03:04+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "install-path": "../doctrine/lexer" + }, + { + "name": "dompdf/dompdf", + "version": "v0.8.6", + "version_normalized": "0.8.6.0", + "source": { + "type": "git", + "url": "https://github.com/dompdf/dompdf.git", + "reference": "db91d81866c69a42dad1d2926f61515a1e3f42c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dompdf/dompdf/zipball/db91d81866c69a42dad1d2926f61515a1e3f42c5", + "reference": "db91d81866c69a42dad1d2926f61515a1e3f42c5", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "phenx/php-font-lib": "^0.5.2", + "phenx/php-svg-lib": "^0.3.3", + "php": "^7.1" + }, + "require-dev": { + "mockery/mockery": "^1.3", + "phpunit/phpunit": "^7.5", + "squizlabs/php_codesniffer": "^3.5" + }, + "suggest": { + "ext-gd": "Needed to process images", + "ext-gmagick": "Improves image processing performance", + "ext-imagick": "Improves image processing performance", + "ext-zlib": "Needed for pdf stream compression" + }, + "time": "2020-08-30T22:54:22+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "0.7-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Dompdf\\": "src/" + }, + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1" + ], + "authors": [ + { + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" + }, + { + "name": "Brian Sweeney", + "email": "eclecticgeek@gmail.com" + }, + { + "name": "Gabriel Bull", + "email": "me@gabrielbull.com" + } + ], + "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter", + "homepage": "https://github.com/dompdf/dompdf", + "support": { + "issues": "https://github.com/dompdf/dompdf/issues", + "source": "https://github.com/dompdf/dompdf/tree/master" + }, + "install-path": "../dompdf/dompdf" + }, + { + "name": "drupal-ckeditor-libraries-group/codesnippet", + "version": "4.16.0", + "version_normalized": "4.16.0.0", + "source": { + "type": "git", + "url": "https://github.com/drupal-ckeditor-libraries-group/codesnippet.git", + "reference": "cbddc36e5873323b1c34db1542a3449bcb1ff9e7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/drupal-ckeditor-libraries-group/codesnippet/zipball/cbddc36e5873323b1c34db1542a3449bcb1ff9e7", + "reference": "cbddc36e5873323b1c34db1542a3449bcb1ff9e7", + "shasum": "" + }, + "time": "2021-01-25T12:06:23+00:00", + "type": "drupal-library", + "installation-source": "dist", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later", + "LGPL-2.1-or-later", + "MPL-1.1" + ], + "description": "CKEditor 4 codesnippet plugin", + "homepage": "https://ckeditor.com/cke4/addon/codesnippet", + "keywords": [ + "CKEditor", + "codesnippet", + "plugin" + ], + "support": { + "issues": "https://github.com/ckeditor/ckeditor4/issues", + "source": "https://github.com/ckeditor/ckeditor4/tree/master/plugins/codesnippet" + }, + "install-path": "../../web/libraries/codesnippet" + }, + { + "name": "drupal-ckeditor-libraries-group/font", + "version": "4.13.1", + "version_normalized": "4.13.1.0", + "source": { + "type": "git", + "url": "https://github.com/drupal-ckeditor-libraries-group/font.git", + "reference": "81cbe90726319bb0a8c0c12c0a893e1e2e660c60" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/drupal-ckeditor-libraries-group/font/zipball/81cbe90726319bb0a8c0c12c0a893e1e2e660c60", + "reference": "81cbe90726319bb0a8c0c12c0a893e1e2e660c60", + "shasum": "" + }, + "time": "2019-06-27T14:05:00+00:00", + "type": "drupal-library", + "installation-source": "dist", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later", + "LGPL-2.1-or-later", + "MPL-1.1" + ], + "description": "CKEditor 4 font plugin", + "homepage": "https://ckeditor.com/cke4/addon/font", + "keywords": [ + "CKEditor", + "font", + "plugin" + ], + "support": { + "issues": "https://github.com/ckeditor/ckeditor4/issues", + "source": "https://github.com/ckeditor/ckeditor4/tree/master/plugins/font" + }, + "install-path": "../../web/libraries/font" + }, + { + "name": "drupal/admin_toolbar", + "version": "2.4.0", + "version_normalized": "2.4.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/admin_toolbar.git", + "reference": "8.x-2.4" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/admin_toolbar-8.x-2.4.zip", + "reference": "8.x-2.4", + "shasum": "6240047b8d91ac78f98d861ba8282af971fa0b38" + }, + "require": { + "drupal/core": "^8.8.0 || ^9.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.4", + "datestamp": "1601999178", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" } } }, - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Consolidation\\AnnotatedCommand\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Greg Anderson", - "email": "greg.1.anderson@greenknowe.org" - } - ], - "description": "Initialize Symfony Console commands from annotated command class methods.", - "support": { - "issues": "https://github.com/consolidation/annotated-command/issues", - "source": "https://github.com/consolidation/annotated-command/tree/2.12.1" - } - }, - { - "name": "consolidation/output-formatters", - "version": "3.5.1", - "version_normalized": "3.5.1.0", - "source": { - "type": "git", - "url": "https://github.com/consolidation/output-formatters.git", - "reference": "0d38f13051ef05c223a2bb8e962d668e24785196" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/0d38f13051ef05c223a2bb8e962d668e24785196", - "reference": "0d38f13051ef05c223a2bb8e962d668e24785196", - "shasum": "" - }, - "require": { - "dflydev/dot-access-data": "^1.1.0", - "php": ">=5.4.0", - "symfony/console": "^2.8|^3|^4", - "symfony/finder": "^2.5|^3|^4|^5" - }, - "require-dev": { - "g1a/composer-test-scenarios": "^3", - "php-coveralls/php-coveralls": "^1", - "phpunit/phpunit": "^5.7.27", - "squizlabs/php_codesniffer": "^2.7", - "symfony/var-dumper": "^2.8|^3|^4", - "victorjonsson/markdowndocs": "^1.3" - }, - "suggest": { - "symfony/var-dumper": "For using the var_dump formatter" - }, - "time": "2020-10-11T04:15:32+00:00", - "type": "library", - "extra": { - "scenarios": { - "finder5": { - "require": { - "symfony/finder": "^5" - }, - "config": { - "platform": { - "php": "7.2.5" - } + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Wilfrid Roze (eme)", + "homepage": "https://www.drupal.org/u/eme", + "role": "Maintainer" + }, + { + "name": "Romain Jarraud (romainj)", + "homepage": "https://www.drupal.org/u/romainj", + "role": "Maintainer" + }, + { + "name": "Adrian Cid Almaguer (adriancid)", + "homepage": "https://www.drupal.org/u/adriancid", + "email": "adriancid@gmail.com", + "role": "Maintainer" + }, + { + "name": "Mohamed Anis Taktak (matio89)", + "homepage": "https://www.drupal.org/u/matio89", + "role": "Maintainer" + }, + { + "name": "fethi.krout", + "homepage": "https://www.drupal.org/user/3206765" + }, + { + "name": "matio89", + "homepage": "https://www.drupal.org/user/2320090" + }, + { + "name": "romainj", + "homepage": "https://www.drupal.org/user/370706" + } + ], + "description": "Provides a drop-down menu interface to the core Drupal Toolbar.", + "homepage": "http://drupal.org/project/admin_toolbar", + "keywords": [ + "Drupal", + "Toolbar" + ], + "support": { + "source": "https://git.drupalcode.org/project/admin_toolbar", + "issues": "https://www.drupal.org/project/issues/admin_toolbar" + }, + "install-path": "../../web/modules/contrib/admin_toolbar" + }, + { + "name": "drupal/adminimal_theme", + "version": "1.6.0", + "version_normalized": "1.6.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/adminimal_theme.git", + "reference": "8.x-1.6" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/adminimal_theme-8.x-1.6.zip", + "reference": "8.x-1.6", + "shasum": "89132d0853388afe8dfd11fb83c69a48d8c13413" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "type": "drupal-theme", + "extra": { + "drupal": { + "version": "8.x-1.6", + "datestamp": "1602006937", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "ANDiTKO", + "homepage": "https://www.drupal.org/user/1428124" }, - "symfony4": { - "require": { - "symfony/console": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^6" - }, - "config": { - "platform": { - "php": "7.1.3" - } + { + "name": "andrey.troeglazov", + "homepage": "https://www.drupal.org/user/3145389" + }, + { + "name": "realityloop", + "homepage": "https://www.drupal.org/user/139189" + } + ], + "description": "Drupal administration theme with modern minimalist design.", + "homepage": "https://www.drupal.org/project/adminimal_theme", + "support": { + "source": "https://git.drupalcode.org/project/adminimal_theme", + "issues": "https://www.drupal.org/project/issues/adminimal_theme" + }, + "install-path": "../../web/themes/contrib/adminimal_theme" + }, + { + "name": "drupal/allowed_formats", + "version": "1.3.0", + "version_normalized": "1.3.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/allowed_formats.git", + "reference": "8.x-1.3" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/allowed_formats-8.x-1.3.zip", + "reference": "8.x-1.3", + "shasum": "4c3c036d7b41428d6e22b61f1219de0ab012feec" + }, + "require": { + "drupal/core": "^8.7.7 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.3", + "datestamp": "1592909219", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "floretan", + "homepage": "https://www.drupal.org/user/66163" + } + ], + "description": "Limit which text formats are available for each field instance.", + "homepage": "https://www.drupal.org/project/allowed_formats", + "support": { + "source": "https://git.drupalcode.org/project/allowed_formats" + }, + "install-path": "../../web/modules/contrib/allowed_formats" + }, + { + "name": "drupal/bootstrap", + "version": "3.23.0", + "version_normalized": "3.23.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/bootstrap.git", + "reference": "8.x-3.23" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/bootstrap-8.x-3.23.zip", + "reference": "8.x-3.23", + "shasum": "9849be667cc678a91ad29f77c2baea2cf16878bc" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-theme", + "extra": { + "drupal": { + "version": "8.x-3.23", + "datestamp": "1592175762", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Mark Carver (markcarver)", + "homepage": "https://www.drupal.org/u/markcarver", + "role": "Maintainer" }, - "symfony3": { - "require": { - "symfony/console": "^3.4", - "symfony/finder": "^3.4", - "symfony/var-dumper": "^3.4" - }, - "config": { - "platform": { - "php": "5.6.32" - } + { + "name": "John McCormick (neardark)", + "homepage": "https://www.drupal.org/u/neardark", + "role": "Co-maintainer" + }, + { + "name": "Fabiano Sant'Ana (wundo)", + "homepage": "https://www.drupal.org/u/wundo", + "role": "Co-maintainer" + } + ], + "description": "Built to use Bootstrap, a sleek, intuitive, and powerful front-end framework for faster and easier web development.", + "homepage": "https://www.drupal.org/project/bootstrap", + "support": { + "source": "https://git.drupalcode.org/project/bootstrap", + "docs": "https://drupal-bootstrap.org", + "issues": "https://www.drupal.org/project/issues/bootstrap", + "irc": "irc://irc.freenode.org/drupal-bootstrap" + }, + "install-path": "../../web/themes/contrib/bootstrap" + }, + { + "name": "drupal/captcha", + "version": "1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/captcha.git", + "reference": "8.x-1.1" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/captcha-8.x-1.1.zip", + "reference": "8.x-1.1", + "shasum": "2eaf6f00ea256652c09f785b26dc933cc5b3dd26" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.1", + "datestamp": "1591160977", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" } }, - "symfony2": { - "require": { - "symfony/console": "^2.8" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.36" - }, - "remove": [ - "php-coveralls/php-coveralls" - ], - "config": { - "platform": { - "php": "5.4.8" - } - }, - "scenario-options": { - "create-lockfile": "false" + "branch-alias": { + "dev-8.x-1.x": "1.x-dev" + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "RobLoach", + "homepage": "https://www.drupal.org/user/61114" + }, + { + "name": "elachlan", + "homepage": "https://www.drupal.org/user/1021502" + }, + { + "name": "japerry", + "homepage": "https://www.drupal.org/user/45640" + }, + { + "name": "naveenvalecha", + "homepage": "https://www.drupal.org/user/2665733" + }, + { + "name": "podarok", + "homepage": "https://www.drupal.org/user/116002" + }, + { + "name": "soxofaan", + "homepage": "https://www.drupal.org/user/41478" + }, + { + "name": "wundo", + "homepage": "https://www.drupal.org/user/25523" + } + ], + "description": "The CAPTCHA module provides this feature to virtually any user facing web form on a Drupal site.", + "homepage": "https://www.drupal.org/project/captcha", + "support": { + "source": "https://git.drupalcode.org/project/captcha", + "issues": "https://www.drupal.org/project/issues/captcha" + }, + "install-path": "../../web/modules/contrib/captcha" + }, + { + "name": "drupal/cern-adminimal-subtheme", + "version": "2.1.0", + "version_normalized": "2.1.0.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/themes/adminimal_subtheme.git", + "reference": "a2ed5628d532fccb54abbeaf063db3944784bd76" + }, + "require": { + "drupal/adminimal_theme": "^1.6" + }, + "time": "2021-02-11T10:54:34+00:00", + "type": "drupal-custom-theme", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "Applies overrides on the adminimal theme", + "install-path": "../../web/themes/custom/cern-adminimal-subtheme" + }, + { + "name": "drupal/cern-base-theme", + "version": "2.6.6", + "version_normalized": "2.6.6.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/themes/cernbase.git", + "reference": "cb5ed2e618d84b10f0f7c4441ad0be5ce0a2c2d3" + }, + "require": { + "drupal/bootstrap": "^3.23" + }, + "time": "2021-02-10T13:48:27+00:00", + "type": "drupal-custom-theme", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "Base theme of all CERN Drupal themes", + "install-path": "../../web/themes/custom/cern-base-theme" + }, + { + "name": "drupal/cern-cds-media", + "version": "2.1.4", + "version_normalized": "2.1.4.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-cds-media.git", + "reference": "211fb1be8dbb83df9dd791b6f75d8798bb99f290" + }, + "time": "2021-02-08T09:12:29+00:00", + "type": "drupal-custom-module", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "Provides the CERN CDS Media Plugin in the CKEditor.", + "install-path": "../../web/modules/custom/cern-cds-media" + }, + { + "name": "drupal/cern-components", + "version": "2.7.10", + "version_normalized": "2.7.10.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-components.git", + "reference": "8cc5c011dbb200e748718701212882dcda5563ff" + }, + "require": { + "drupal/cern-full-html-format": "^2.0.2", + "drupal/components": "^1.1", + "drupal/ds": "^3.9", + "drupal/field_group": "^3.1", + "drupal/twig_tweak": "^2.8", + "drupal/ui_patterns": "^1.2" + }, + "time": "2021-01-14T13:28:59+00:00", + "type": "drupal-custom-module", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "Defines a set of re-usable patterns for the CERN Drupal infrastructure", + "install-path": "../../web/modules/custom/cern-components" + }, + { + "name": "drupal/cern-dev-status", + "version": "2.0.5", + "version_normalized": "2.0.5.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-dev-status.git", + "reference": "faba2b40d7f34d718f0826dbb38250e42881e71a" + }, + "time": "2021-02-08T15:54:50+00:00", + "type": "drupal-custom-module", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "Displays a banner at the bottom of the website and applies styles according to its development status. Prevents anonymous users to access the website by checking their IP.", + "install-path": "../../web/modules/custom/cern-dev-status" + }, + { + "name": "drupal/cern-display-formats", + "version": "1.4.5", + "version_normalized": "1.4.5.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-display-formats.git", + "reference": "57b5b7cc346f4094359efbb53f9cb21cfedbaaf3" + }, + "require": { + "drupal/components": "^1.1" + }, + "time": "2021-01-14T08:51:34+00:00", + "type": "drupal-custom-module", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "Defines a set of views display formats", + "install-path": "../../web/modules/custom/cern-display-formats" + }, + { + "name": "drupal/cern-drupal-welcome-message-block", + "version": "1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/drupal-welcome-message-block.git", + "reference": "c5a6c1b0b465429ffe2c3d5bac92b6fa39f668f6" + }, + "time": "2021-02-11T13:36:40+00:00", + "type": "drupal-custom-module", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "Creates the welcome message block for CERN Drupal websites", + "install-path": "../../web/modules/custom/cern-drupal-welcome-message-block" + }, + { + "name": "drupal/cern-full-html-format", + "version": "2.0.4", + "version_normalized": "2.0.4.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-full-html-format.git", + "reference": "4e4a15aa77576abadb8639f537e31d31edbc09a6" + }, + "require": { + "drupal/ckeditor_font": "^1.1", + "drupal/colorbutton": "^1.2", + "drupal/panelbutton": "^1.3" + }, + "time": "2021-02-08T09:36:17+00:00", + "type": "drupal-custom-module", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "Adds the CERN Full HTML text format on CKEditor", + "install-path": "../../web/modules/custom/cern-full-html-format" + }, + { + "name": "drupal/cern-indico-feeds", + "version": "2.0.5", + "version_normalized": "2.0.5.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-indico-feeds.git", + "reference": "8478ce54ec7267c82e3370c5e35642d8e0c11534" + }, + "require": { + "drupal/feeds": "^3.0-alpha8" + }, + "time": "2021-02-09T13:16:40+00:00", + "type": "drupal-custom-module", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "Defines a set of re-usable patterns for the CERN Drupal infrastructure", + "install-path": "../../web/modules/custom/cern-indico-feeds" + }, + { + "name": "drupal/cern-landing-page", + "version": "2.2.4", + "version_normalized": "2.2.4.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-landing-page.git", + "reference": "a6aa2903393d64b341900aa65c3e160afd39752f" + }, + "require": { + "drupal/allowed_formats": "^1.3", + "drupal/cern-cds-media": "^2.1.2", + "drupal/cern-paragraph-types": "^2.2.1", + "drupal/color_field": "^2.4", + "drupal/ds": "^3.9", + "drupal/easy_breadcrumb": "^1.13", + "drupal/entity_reference_revisions": "^1.8", + "drupal/field_formatter_class": "^1.4", + "drupal/field_group": "^3.1", + "drupal/filefield_paths": "^1.0-beta5", + "drupal/paragraphs": "^1.12", + "drupal/pathauto": "^1.8", + "drupal/scheduler": "^1.3", + "drupal/smart_trim": "^1.3", + "drupal/viewsreference": "^1.6" + }, + "time": "2021-02-08T09:43:22+00:00", + "type": "drupal-custom-module", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "Provides the Landing Page content type and related configuration. A long-form story telling page.", + "install-path": "../../web/modules/custom/cern-landing-page" + }, + { + "name": "drupal/cern-loading", + "version": "2.1.2", + "version_normalized": "2.1.2.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-loading.git", + "reference": "7192a53bc4b2d6a4187c3abf1fef6df1d1df1744" + }, + "time": "2021-01-14T09:07:39+00:00", + "type": "drupal-custom-module", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "Adds the loader animation on CERN Drupal sites", + "install-path": "../../web/modules/custom/cern-loading" + }, + { + "name": "drupal/cern-paragraph-types", + "version": "2.2.3", + "version_normalized": "2.2.3.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/paragraph-types.git", + "reference": "5d9bd43e424dc7865ccd564544a1e07045f5c111" + }, + "require": { + "drupal/cern-components": "^2.7.6", + "drupal/paragraphs": "^1.12" + }, + "time": "2021-02-08T10:19:40+00:00", + "type": "drupal-custom-module", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "A common set of re-usable paragraph types.", + "install-path": "../../web/modules/custom/cern-paragraph-types" + }, + { + "name": "drupal/cern-profile-displayname", + "version": "2.1.0", + "version_normalized": "2.1.0.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-profile-displayname.git", + "reference": "1392ffebc377e627a22b6a817f2c342d126b93f2" + }, + "require": { + "drupal/simplesamlphp_auth": "^3.2" + }, + "time": "2021-02-11T10:01:34+00:00", + "type": "drupal-custom-module", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "Overrides user login names with the SimpleSaml fullname attribute. Enables redirection to Profiles site.", + "install-path": "../../web/modules/custom/cern-profile-displayname" + }, + { + "name": "drupal/cern-theme", + "version": "2.6.11", + "version_normalized": "2.6.11.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/themes/cern.git", + "reference": "38332c5687938b4c9368a05693071c884da02d14" + }, + "require": { + "drupal/cern-base-theme": "^2.6.1" + }, + "time": "2021-02-09T12:56:21+00:00", + "type": "drupal-custom-theme", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "Defines the CERN theme", + "install-path": "../../web/themes/custom/cern-theme" + }, + { + "name": "drupal/cern-toolbar", + "version": "2.2.3", + "version_normalized": "2.2.3.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-toolbar.git", + "reference": "ab38a97568bfe8e7f985bde28fdfd847b89aa685" + }, + "time": "2021-02-08T10:00:25+00:00", + "type": "drupal-custom-module", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "Adds the CERN Toolbar on CERN Drupal sites", + "install-path": "../../web/modules/custom/cern-toolbar" + }, + { + "name": "drupal/cern-webcast-feeds", + "version": "2.0.4", + "version_normalized": "2.0.4.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-webcast-feeds.git", + "reference": "4f255383eec3c97d2b9de1c0bae98d23b16e0076" + }, + "require": { + "drupal/cern-indico-feeds": "^2.0.5", + "drupal/feeds": "^3.0" + }, + "time": "2021-02-09T13:25:19+00:00", + "type": "drupal-custom-module", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "Defines Webcast feeds for the CERN Drupal infrastructure", + "install-path": "../../web/modules/custom/cern-webcast-feeds" + }, + { + "name": "drupal/ckeditor_font", + "version": "1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/ckeditor_font.git", + "reference": "8.x-1.1" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/ckeditor_font-8.x-1.1.zip", + "reference": "8.x-1.1", + "shasum": "a8d0d10e7b23307bb9aba5de707518c108f69570" + }, + "require": { + "drupal-ckeditor-libraries-group/font": "4.13.1", + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.1", + "datestamp": "1590157419", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" } } }, - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Consolidation\\OutputFormatters\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Greg Anderson", - "email": "greg.1.anderson@greenknowe.org" - } - ], - "description": "Format text by applying transformations provided by plug-in formatters.", - "support": { - "issues": "https://github.com/consolidation/output-formatters/issues", - "source": "https://github.com/consolidation/output-formatters/tree/3.5.1" - } - }, - { - "name": "dflydev/dot-access-data", - "version": "v1.1.0", - "version_normalized": "1.1.0.0", - "source": { - "type": "git", - "url": "https://github.com/dflydev/dflydev-dot-access-data.git", - "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a", - "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "time": "2017-01-20T21:14:22+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-0": { - "Dflydev\\DotAccessData": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Dragonfly Development Inc.", - "email": "info@dflydev.com", - "homepage": "http://dflydev.com" - }, - { - "name": "Beau Simensen", - "email": "beau@dflydev.com", - "homepage": "http://beausimensen.com" - }, - { - "name": "Carlos Frutos", - "email": "carlos@kiwing.it", - "homepage": "https://github.com/cfrutos" - } - ], - "description": "Given a deep data structure, access data by dot notation.", - "homepage": "https://github.com/dflydev/dflydev-dot-access-data", - "keywords": [ - "access", - "data", - "dot", - "notation" - ], - "support": { - "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", - "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/master" - } - }, - { - "name": "dnoegel/php-xdg-base-dir", - "version": "v0.1.1", - "version_normalized": "0.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/dnoegel/php-xdg-base-dir.git", - "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", - "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35" - }, - "time": "2019-12-04T15:06:13+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "XdgBaseDir\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "implementation of xdg base directory specification for php", - "support": { - "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues", - "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1" - } - }, - { - "name": "doctrine/annotations", - "version": "v1.4.0", - "version_normalized": "1.4.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "54cacc9b81758b14e3ce750f205a393d52339e97" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/54cacc9b81758b14e3ce750f205a393d52339e97", - "reference": "54cacc9b81758b14e3ce750f205a393d52339e97", - "shasum": "" - }, - "require": { - "doctrine/lexer": "1.*", - "php": "^5.6 || ^7.0" - }, - "require-dev": { - "doctrine/cache": "1.*", - "phpunit/phpunit": "^5.7" - }, - "time": "2017-02-24T16:22:25+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Docblock Annotations Parser", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "annotations", - "docblock", - "parser" - ] - }, - { - "name": "doctrine/cache", - "version": "v1.6.2", - "version_normalized": "1.6.2.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "eb152c5100571c7a45470ff2a35095ab3f3b900b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/eb152c5100571c7a45470ff2a35095ab3f3b900b", - "reference": "eb152c5100571c7a45470ff2a35095ab3f3b900b", - "shasum": "" - }, - "require": { - "php": "~5.5|~7.0" - }, - "conflict": { - "doctrine/common": ">2.2,<2.4" - }, - "require-dev": { - "phpunit/phpunit": "~4.8|~5.0", - "predis/predis": "~1.0", - "satooshi/php-coveralls": "~0.6" - }, - "time": "2017-07-22T12:49:21+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Caching library offering an object-oriented API for many cache backends", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "cache", - "caching" - ] - }, - { - "name": "doctrine/collections", - "version": "v1.4.0", - "version_normalized": "1.4.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/collections.git", - "reference": "1a4fb7e902202c33cce8c55989b945612943c2ba" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/1a4fb7e902202c33cce8c55989b945612943c2ba", - "reference": "1a4fb7e902202c33cce8c55989b945612943c2ba", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0" - }, - "require-dev": { - "doctrine/coding-standard": "~0.1@dev", - "phpunit/phpunit": "^5.7" - }, - "time": "2017-01-03T10:49:41+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-0": { - "Doctrine\\Common\\Collections\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Collections Abstraction library", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "array", - "collections", - "iterator" - ] - }, - { - "name": "doctrine/common", - "version": "v2.7.3", - "version_normalized": "2.7.3.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/common.git", - "reference": "4acb8f89626baafede6ee5475bc5844096eba8a9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/4acb8f89626baafede6ee5475bc5844096eba8a9", - "reference": "4acb8f89626baafede6ee5475bc5844096eba8a9", - "shasum": "" - }, - "require": { - "doctrine/annotations": "1.*", - "doctrine/cache": "1.*", - "doctrine/collections": "1.*", - "doctrine/inflector": "1.*", - "doctrine/lexer": "1.*", - "php": "~5.6|~7.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.4.6" - }, - "time": "2017-07-22T08:35:12+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Common Library for Doctrine projects", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "annotations", - "collections", - "eventmanager", - "persistence", - "spl" - ] - }, - { - "name": "doctrine/inflector", - "version": "v1.2.0", - "version_normalized": "1.2.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/inflector.git", - "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/e11d84c6e018beedd929cff5220969a3c6d1d462", - "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.2" - }, - "time": "2017-07-22T12:18:28+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Common String Manipulations with regard to casing and singular/plural rules.", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "inflection", - "pluralize", - "singularize", - "string" - ] - }, - { - "name": "doctrine/lexer", - "version": "1.0.2", - "version_normalized": "1.0.2.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/1febd6c3ef84253d7c815bed85fc622ad207a9f8", - "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "^4.5" - }, - "time": "2019-06-08T11:03:04+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" - ] - }, - { - "name": "dompdf/dompdf", - "version": "v0.8.6", - "version_normalized": "0.8.6.0", - "source": { - "type": "git", - "url": "https://github.com/dompdf/dompdf.git", - "reference": "db91d81866c69a42dad1d2926f61515a1e3f42c5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dompdf/dompdf/zipball/db91d81866c69a42dad1d2926f61515a1e3f42c5", - "reference": "db91d81866c69a42dad1d2926f61515a1e3f42c5", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-mbstring": "*", - "phenx/php-font-lib": "^0.5.2", - "phenx/php-svg-lib": "^0.3.3", - "php": "^7.1" - }, - "require-dev": { - "mockery/mockery": "^1.3", - "phpunit/phpunit": "^7.5", - "squizlabs/php_codesniffer": "^3.5" - }, - "suggest": { - "ext-gd": "Needed to process images", - "ext-gmagick": "Improves image processing performance", - "ext-imagick": "Improves image processing performance", - "ext-zlib": "Needed for pdf stream compression" - }, - "time": "2020-08-30T22:54:22+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-develop": "0.7-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Dompdf\\": "src/" - }, - "classmap": [ - "lib/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1" - ], - "authors": [ - { - "name": "Fabien Ménager", - "email": "fabien.menager@gmail.com" - }, - { - "name": "Brian Sweeney", - "email": "eclecticgeek@gmail.com" - }, - { - "name": "Gabriel Bull", - "email": "me@gabrielbull.com" - } - ], - "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter", - "homepage": "https://github.com/dompdf/dompdf", - "support": { - "issues": "https://github.com/dompdf/dompdf/issues", - "source": "https://github.com/dompdf/dompdf/tree/master" - } - }, - { - "name": "drupal-ckeditor-libraries-group/codesnippet", - "version": "4.16.0", - "version_normalized": "4.16.0.0", - "source": { - "type": "git", - "url": "https://github.com/drupal-ckeditor-libraries-group/codesnippet.git", - "reference": "cbddc36e5873323b1c34db1542a3449bcb1ff9e7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/drupal-ckeditor-libraries-group/codesnippet/zipball/cbddc36e5873323b1c34db1542a3449bcb1ff9e7", - "reference": "cbddc36e5873323b1c34db1542a3449bcb1ff9e7", - "shasum": "" - }, - "time": "2021-01-25T12:06:23+00:00", - "type": "drupal-library", - "installation-source": "dist", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later", - "LGPL-2.1-or-later", - "MPL-1.1" - ], - "description": "CKEditor 4 codesnippet plugin", - "homepage": "https://ckeditor.com/cke4/addon/codesnippet", - "keywords": [ - "CKEditor", - "codesnippet", - "plugin" - ], - "support": { - "issues": "https://github.com/ckeditor/ckeditor4/issues", - "source": "https://github.com/ckeditor/ckeditor4/tree/master/plugins/codesnippet" - } - }, - { - "name": "drupal-ckeditor-libraries-group/font", - "version": "4.13.1", - "version_normalized": "4.13.1.0", - "source": { - "type": "git", - "url": "https://github.com/drupal-ckeditor-libraries-group/font.git", - "reference": "81cbe90726319bb0a8c0c12c0a893e1e2e660c60" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/drupal-ckeditor-libraries-group/font/zipball/81cbe90726319bb0a8c0c12c0a893e1e2e660c60", - "reference": "81cbe90726319bb0a8c0c12c0a893e1e2e660c60", - "shasum": "" - }, - "time": "2019-06-27T14:05:00+00:00", - "type": "drupal-library", - "installation-source": "dist", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later", - "LGPL-2.1-or-later", - "MPL-1.1" - ], - "description": "CKEditor 4 font plugin", - "homepage": "https://ckeditor.com/cke4/addon/font", - "keywords": [ - "CKEditor", - "font", - "plugin" - ], - "support": { - "issues": "https://github.com/ckeditor/ckeditor4/issues", - "source": "https://github.com/ckeditor/ckeditor4/tree/master/plugins/font" - } - }, - { - "name": "drupal/admin_toolbar", - "version": "2.4.0", - "version_normalized": "2.4.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/admin_toolbar.git", - "reference": "8.x-2.4" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/admin_toolbar-8.x-2.4.zip", - "reference": "8.x-2.4", - "shasum": "6240047b8d91ac78f98d861ba8282af971fa0b38" - }, - "require": { - "drupal/core": "^8.8.0 || ^9.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.4", - "datestamp": "1601999178", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Wilfrid Roze (eme)", - "homepage": "https://www.drupal.org/u/eme", - "role": "Maintainer" - }, - { - "name": "Romain Jarraud (romainj)", - "homepage": "https://www.drupal.org/u/romainj", - "role": "Maintainer" - }, - { - "name": "Adrian Cid Almaguer (adriancid)", - "homepage": "https://www.drupal.org/u/adriancid", - "email": "adriancid@gmail.com", - "role": "Maintainer" - }, - { - "name": "Mohamed Anis Taktak (matio89)", - "homepage": "https://www.drupal.org/u/matio89", - "role": "Maintainer" - }, - { - "name": "fethi.krout", - "homepage": "https://www.drupal.org/user/3206765" - }, - { - "name": "matio89", - "homepage": "https://www.drupal.org/user/2320090" - }, - { - "name": "romainj", - "homepage": "https://www.drupal.org/user/370706" - } - ], - "description": "Provides a drop-down menu interface to the core Drupal Toolbar.", - "homepage": "http://drupal.org/project/admin_toolbar", - "keywords": [ - "Drupal", - "Toolbar" - ], - "support": { - "source": "https://git.drupalcode.org/project/admin_toolbar", - "issues": "https://www.drupal.org/project/issues/admin_toolbar" - } - }, - { - "name": "drupal/adminimal_theme", - "version": "1.6.0", - "version_normalized": "1.6.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/adminimal_theme.git", - "reference": "8.x-1.6" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/adminimal_theme-8.x-1.6.zip", - "reference": "8.x-1.6", - "shasum": "89132d0853388afe8dfd11fb83c69a48d8c13413" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "type": "drupal-theme", - "extra": { - "drupal": { - "version": "8.x-1.6", - "datestamp": "1602006937", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "ANDiTKO", - "homepage": "https://www.drupal.org/user/1428124" - }, - { - "name": "andrey.troeglazov", - "homepage": "https://www.drupal.org/user/3145389" - }, - { - "name": "realityloop", - "homepage": "https://www.drupal.org/user/139189" - } - ], - "description": "Drupal administration theme with modern minimalist design.", - "homepage": "https://www.drupal.org/project/adminimal_theme", - "support": { - "source": "https://git.drupalcode.org/project/adminimal_theme", - "issues": "https://www.drupal.org/project/issues/adminimal_theme" - } - }, - { - "name": "drupal/allowed_formats", - "version": "1.3.0", - "version_normalized": "1.3.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/allowed_formats.git", - "reference": "8.x-1.3" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/allowed_formats-8.x-1.3.zip", - "reference": "8.x-1.3", - "shasum": "4c3c036d7b41428d6e22b61f1219de0ab012feec" - }, - "require": { - "drupal/core": "^8.7.7 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.3", - "datestamp": "1592909219", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "floretan", - "homepage": "https://www.drupal.org/user/66163" - } - ], - "description": "Limit which text formats are available for each field instance.", - "homepage": "https://www.drupal.org/project/allowed_formats", - "support": { - "source": "https://git.drupalcode.org/project/allowed_formats" - } - }, - { - "name": "drupal/bootstrap", - "version": "3.23.0", - "version_normalized": "3.23.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/bootstrap.git", - "reference": "8.x-3.23" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/bootstrap-8.x-3.23.zip", - "reference": "8.x-3.23", - "shasum": "9849be667cc678a91ad29f77c2baea2cf16878bc" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-theme", - "extra": { - "drupal": { - "version": "8.x-3.23", - "datestamp": "1592175762", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Mark Carver (markcarver)", - "homepage": "https://www.drupal.org/u/markcarver", - "role": "Maintainer" - }, - { - "name": "John McCormick (neardark)", - "homepage": "https://www.drupal.org/u/neardark", - "role": "Co-maintainer" - }, - { - "name": "Fabiano Sant'Ana (wundo)", - "homepage": "https://www.drupal.org/u/wundo", - "role": "Co-maintainer" - } - ], - "description": "Built to use Bootstrap, a sleek, intuitive, and powerful front-end framework for faster and easier web development.", - "homepage": "https://www.drupal.org/project/bootstrap", - "support": { - "source": "https://git.drupalcode.org/project/bootstrap", - "docs": "https://drupal-bootstrap.org", - "issues": "https://www.drupal.org/project/issues/bootstrap", - "irc": "irc://irc.freenode.org/drupal-bootstrap" - } - }, - { - "name": "drupal/captcha", - "version": "1.1.0", - "version_normalized": "1.1.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/captcha.git", - "reference": "8.x-1.1" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/captcha-8.x-1.1.zip", - "reference": "8.x-1.1", - "shasum": "2eaf6f00ea256652c09f785b26dc933cc5b3dd26" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.1", - "datestamp": "1591160977", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "branch-alias": { - "dev-8.x-1.x": "1.x-dev" - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "RobLoach", - "homepage": "https://www.drupal.org/user/61114" - }, - { - "name": "elachlan", - "homepage": "https://www.drupal.org/user/1021502" - }, - { - "name": "japerry", - "homepage": "https://www.drupal.org/user/45640" - }, - { - "name": "naveenvalecha", - "homepage": "https://www.drupal.org/user/2665733" - }, - { - "name": "podarok", - "homepage": "https://www.drupal.org/user/116002" - }, - { - "name": "soxofaan", - "homepage": "https://www.drupal.org/user/41478" - }, - { - "name": "wundo", - "homepage": "https://www.drupal.org/user/25523" - } - ], - "description": "The CAPTCHA module provides this feature to virtually any user facing web form on a Drupal site.", - "homepage": "https://www.drupal.org/project/captcha", - "support": { - "source": "https://git.drupalcode.org/project/captcha", - "issues": "https://www.drupal.org/project/issues/captcha" - } - }, - { - "name": "drupal/cern-adminimal-subtheme", - "version": "2.1.0", - "version_normalized": "2.1.0.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/themes/adminimal_subtheme.git", - "reference": "a2ed5628d532fccb54abbeaf063db3944784bd76" - }, - "require": { - "drupal/adminimal_theme": "^1.6" - }, - "time": "2021-02-11T10:54:34+00:00", - "type": "drupal-custom-theme", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "Applies overrides on the adminimal theme" - }, - { - "name": "drupal/cern-base-theme", - "version": "2.6.6", - "version_normalized": "2.6.6.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/themes/cernbase.git", - "reference": "cb5ed2e618d84b10f0f7c4441ad0be5ce0a2c2d3" - }, - "require": { - "drupal/bootstrap": "^3.23" - }, - "time": "2021-02-10T13:48:27+00:00", - "type": "drupal-custom-theme", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "Base theme of all CERN Drupal themes" - }, - { - "name": "drupal/cern-cds-media", - "version": "2.1.4", - "version_normalized": "2.1.4.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-cds-media.git", - "reference": "211fb1be8dbb83df9dd791b6f75d8798bb99f290" - }, - "time": "2021-02-08T09:12:29+00:00", - "type": "drupal-custom-module", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "Provides the CERN CDS Media Plugin in the CKEditor." - }, - { - "name": "drupal/cern-components", - "version": "2.7.10", - "version_normalized": "2.7.10.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-components.git", - "reference": "8cc5c011dbb200e748718701212882dcda5563ff" - }, - "require": { - "drupal/cern-full-html-format": "^2.0.2", - "drupal/components": "^1.1", - "drupal/ds": "^3.9", - "drupal/field_group": "^3.1", - "drupal/twig_tweak": "^2.8", - "drupal/ui_patterns": "^1.2" - }, - "time": "2021-01-14T13:28:59+00:00", - "type": "drupal-custom-module", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "Defines a set of re-usable patterns for the CERN Drupal infrastructure" - }, - { - "name": "drupal/cern-dev-status", - "version": "2.0.5", - "version_normalized": "2.0.5.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-dev-status.git", - "reference": "faba2b40d7f34d718f0826dbb38250e42881e71a" - }, - "time": "2021-02-08T15:54:50+00:00", - "type": "drupal-custom-module", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "Displays a banner at the bottom of the website and applies styles according to its development status. Prevents anonymous users to access the website by checking their IP." - }, - { - "name": "drupal/cern-display-formats", - "version": "1.4.5", - "version_normalized": "1.4.5.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-display-formats.git", - "reference": "57b5b7cc346f4094359efbb53f9cb21cfedbaaf3" - }, - "require": { - "drupal/components": "^1.1" - }, - "time": "2021-01-14T08:51:34+00:00", - "type": "drupal-custom-module", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "Defines a set of views display formats" - }, - { - "name": "drupal/cern-drupal-welcome-message-block", - "version": "1.1.0", - "version_normalized": "1.1.0.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/drupal-welcome-message-block.git", - "reference": "c5a6c1b0b465429ffe2c3d5bac92b6fa39f668f6" - }, - "time": "2021-02-11T13:36:40+00:00", - "type": "drupal-custom-module", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "Creates the welcome message block for CERN Drupal websites" - }, - { - "name": "drupal/cern-full-html-format", - "version": "2.0.4", - "version_normalized": "2.0.4.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-full-html-format.git", - "reference": "4e4a15aa77576abadb8639f537e31d31edbc09a6" - }, - "require": { - "drupal/ckeditor_font": "^1.1", - "drupal/colorbutton": "^1.2", - "drupal/panelbutton": "^1.3" - }, - "time": "2021-02-08T09:36:17+00:00", - "type": "drupal-custom-module", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "Adds the CERN Full HTML text format on CKEditor" - }, - { - "name": "drupal/cern-indico-feeds", - "version": "2.0.5", - "version_normalized": "2.0.5.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-indico-feeds.git", - "reference": "8478ce54ec7267c82e3370c5e35642d8e0c11534" - }, - "require": { - "drupal/feeds": "^3.0-alpha8" - }, - "time": "2021-02-09T13:16:40+00:00", - "type": "drupal-custom-module", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "Defines a set of re-usable patterns for the CERN Drupal infrastructure" - }, - { - "name": "drupal/cern-landing-page", - "version": "2.2.4", - "version_normalized": "2.2.4.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-landing-page.git", - "reference": "a6aa2903393d64b341900aa65c3e160afd39752f" - }, - "require": { - "drupal/allowed_formats": "^1.3", - "drupal/cern-cds-media": "^2.1.2", - "drupal/cern-paragraph-types": "^2.2.1", - "drupal/color_field": "^2.4", - "drupal/ds": "^3.9", - "drupal/easy_breadcrumb": "^1.13", - "drupal/entity_reference_revisions": "^1.8", - "drupal/field_formatter_class": "^1.4", - "drupal/field_group": "^3.1", - "drupal/filefield_paths": "^1.0-beta5", - "drupal/paragraphs": "^1.12", - "drupal/pathauto": "^1.8", - "drupal/scheduler": "^1.3", - "drupal/smart_trim": "^1.3", - "drupal/viewsreference": "^1.6" - }, - "time": "2021-02-08T09:43:22+00:00", - "type": "drupal-custom-module", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "Provides the Landing Page content type and related configuration. A long-form story telling page." - }, - { - "name": "drupal/cern-loading", - "version": "2.1.2", - "version_normalized": "2.1.2.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-loading.git", - "reference": "7192a53bc4b2d6a4187c3abf1fef6df1d1df1744" - }, - "time": "2021-01-14T09:07:39+00:00", - "type": "drupal-custom-module", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "Adds the loader animation on CERN Drupal sites" - }, - { - "name": "drupal/cern-paragraph-types", - "version": "2.2.3", - "version_normalized": "2.2.3.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/paragraph-types.git", - "reference": "5d9bd43e424dc7865ccd564544a1e07045f5c111" - }, - "require": { - "drupal/cern-components": "^2.7.6", - "drupal/paragraphs": "^1.12" - }, - "time": "2021-02-08T10:19:40+00:00", - "type": "drupal-custom-module", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "A common set of re-usable paragraph types." - }, - { - "name": "drupal/cern-profile-displayname", - "version": "2.1.0", - "version_normalized": "2.1.0.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-profile-displayname.git", - "reference": "1392ffebc377e627a22b6a817f2c342d126b93f2" - }, - "require": { - "drupal/simplesamlphp_auth": "^3.2" - }, - "time": "2021-02-11T10:01:34+00:00", - "type": "drupal-custom-module", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "Overrides user login names with the SimpleSaml fullname attribute. Enables redirection to Profiles site." - }, - { - "name": "drupal/cern-theme", - "version": "2.6.11", - "version_normalized": "2.6.11.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/themes/cern.git", - "reference": "38332c5687938b4c9368a05693071c884da02d14" - }, - "require": { - "drupal/cern-base-theme": "^2.6.1" - }, - "time": "2021-02-09T12:56:21+00:00", - "type": "drupal-custom-theme", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "Defines the CERN theme" - }, - { - "name": "drupal/cern-toolbar", - "version": "2.2.3", - "version_normalized": "2.2.3.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-toolbar.git", - "reference": "ab38a97568bfe8e7f985bde28fdfd847b89aa685" - }, - "time": "2021-02-08T10:00:25+00:00", - "type": "drupal-custom-module", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "Adds the CERN Toolbar on CERN Drupal sites" - }, - { - "name": "drupal/cern-webcast-feeds", - "version": "2.0.4", - "version_normalized": "2.0.4.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-webcast-feeds.git", - "reference": "4f255383eec3c97d2b9de1c0bae98d23b16e0076" - }, - "require": { - "drupal/cern-indico-feeds": "^2.0.5", - "drupal/feeds": "^3.0" - }, - "time": "2021-02-09T13:25:19+00:00", - "type": "drupal-custom-module", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "Defines Webcast feeds for the CERN Drupal infrastructure" - }, - { - "name": "drupal/ckeditor_font", - "version": "1.1.0", - "version_normalized": "1.1.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/ckeditor_font.git", - "reference": "8.x-1.1" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/ckeditor_font-8.x-1.1.zip", - "reference": "8.x-1.1", - "shasum": "a8d0d10e7b23307bb9aba5de707518c108f69570" - }, - "require": { - "drupal-ckeditor-libraries-group/font": "4.13.1", - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.1", - "datestamp": "1590157419", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Webbeh", - "homepage": "https://www.drupal.org/user/1160608" - }, - { - "name": "cobenash", - "homepage": "https://www.drupal.org/user/2138470" - }, - { - "name": "darol100", - "homepage": "https://www.drupal.org/user/2667123" - }, - { - "name": "dinarcon", - "homepage": "https://www.drupal.org/user/909522" - } - ], - "description": "This plugin adds Font Size and Font Family dropdowns that applies as inline element style.", - "homepage": "https://www.drupal.org/project/ckeditor_font", - "keywords": [ - "Drupal" - ], - "support": { - "source": "http://cgit.drupalcode.org/ckeditor_font", - "issues": "http://drupal.org/project/issues/ckeditor_font" - } - }, - { - "name": "drupal/codesnippet", - "version": "1.7.0", - "version_normalized": "1.7.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/codesnippet.git", - "reference": "8.x-1.7" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/codesnippet-8.x-1.7.zip", - "reference": "8.x-1.7", - "shasum": "d620a6d1272e9811e19cc69524a991e271da142c" - }, - "require": { - "drupal-ckeditor-libraries-group/codesnippet": "^4.5.11", - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.7", - "datestamp": "1593798298", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Kevin Quillen (kevinquillen)", - "homepage": "https://www.drupal.org/u/kevinquillen", - "role": "Maintainer" - }, - { - "name": "kevinquillen", - "homepage": "https://www.drupal.org/user/317279" - }, - { - "name": "szloredan", - "homepage": "https://www.drupal.org/user/3531611" - } - ], - "description": "Adds the CodeSnippet plugin to CKEditor.", - "homepage": "http://drupal.org/project/codesnippet", - "keywords": [ - "Drupal" - ], - "support": { - "source": "http://cgit.drupalcode.org/codesnippet", - "issues": "http://drupal.org/project/issues/codesnippet" - } - }, - { - "name": "drupal/color_field", - "version": "2.4.0", - "version_normalized": "2.4.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/color_field.git", - "reference": "8.x-2.4" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/color_field-8.x-2.4.zip", - "reference": "8.x-2.4", - "shasum": "11c163a409f4f70083f188d917fecc6052c53a2f" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "require-dev": { - "drupal/token": "~1.3", - "nickwilde1990/php-composter-phpcs-drupal": "^2.0" - }, - "suggest": { - "bower-asset/jquery-simple-color": "^v1.2.2: Provides JavaScript library necessary for the Color Grid widget", - "bower-asset/spectrum": "^1.8: Provides JavaScript library necessary for Spectrum widget." - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.4", - "datestamp": "1596479692", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "targoo", - "homepage": "https://www.drupal.org/user/431910", - "role": "Maintainer" - }, - { - "name": "Nick Wilde", - "homepage": "https://www.drupal.org/user/nickwilde", - "role": "Maintainer" - } - ], - "description": "Provides a color field type to store the color value and opacity", - "homepage": "https://www.drupal.org/project/color_field", - "support": { - "source": "https://git.drupalcode.org/project/color_field", - "issues": "https://www.drupal.org/project/issues/color_field?version=8.x" - } - }, - { - "name": "drupal/colorbox", - "version": "1.6.0", - "version_normalized": "1.6.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/colorbox.git", - "reference": "8.x-1.6" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/colorbox-8.x-1.6.zip", - "reference": "8.x-1.6", - "shasum": "73bfc74e9afd294e3d3aded3622ad9cb9de6b75c" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "suggest": { - "jackmoore/colorbox": "The Colorbox library is required to use the drupal/colorbox module." - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.6", - "datestamp": "1587025715", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "drush": { - "services": { - "drush.services.yml": "^9" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Neslee Canil Pinto", - "homepage": "https://www.drupal.org/u/neslee-canil-pinto", - "role": "Maintainer" - }, - { - "name": "Fredrik Jonsson", - "homepage": "https://www.drupal.org/u/frjo", - "role": "Maintainer" - }, - { - "name": "Sam152", - "homepage": "https://www.drupal.org/user/1485048" - }, - { - "name": "jdwfly", - "homepage": "https://www.drupal.org/user/298179" - }, - { - "name": "rsmylski", - "homepage": "https://www.drupal.org/user/1324348" - } - ], - "description": "A light-weight, customizable lightbox plugin for jQuery.", - "homepage": "https://www.drupal.org/project/colorbox", - "support": { - "source": "https://git.drupalcode.org/project/colorbox", - "issues": "https://www.drupal.org/project/issues/colorbox" - } - }, - { - "name": "drupal/colorbutton", - "version": "1.2.0", - "version_normalized": "1.2.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/colorbutton.git", - "reference": "8.x-1.2" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/colorbutton-8.x-1.2.zip", - "reference": "8.x-1.2", - "shasum": "a3467286d9882819bc45e9573dc2253444971bfc" - }, - "require": { - "drupal/core": "^8 || ^9", - "drupal/panelbutton": "*" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.2", - "datestamp": "1589886092", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Kevin Quillen (kevinquillen)", - "homepage": "https://www.drupal.org/u/kevinquillen", - "role": "Maintainer" - }, - { - "name": "ddrozdik", - "homepage": "https://www.drupal.org/user/574124" - }, - { - "name": "kevinquillen", - "homepage": "https://www.drupal.org/user/317279" - } - ], - "description": "Adds the Color Button plugin to CKEditor.", - "homepage": "http://drupal.org/project/colorbutton", - "keywords": [ - "Drupal" - ], - "support": { - "source": "http://cgit.drupalcode.org/colorbutton", - "issues": "http://drupal.org/project/issues/colorbutton" - } - }, - { - "name": "drupal/components", - "version": "1.1.0", - "version_normalized": "1.1.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/components.git", - "reference": "8.x-1.1" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/components-8.x-1.1.zip", - "reference": "8.x-1.1", - "shasum": "72af8ff1ca842556ee4b95335595c24703acdb75" - }, - "require": { - "drupal/core": "~8.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.1", - "datestamp": "1556870881", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "JohnAlbin", - "homepage": "https://www.drupal.org/user/32095" - }, - { - "name": "RobLoach", - "homepage": "https://www.drupal.org/user/61114" - } - ], - "description": "Registers “component libraries” defined in modules and themes with the Twig system", - "homepage": "https://www.drupal.org/project/components", - "support": { - "source": "https://git.drupalcode.org/project/components" - } - }, - { - "name": "drupal/config_update", - "version": "1.7.0", - "version_normalized": "1.7.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/config_update.git", - "reference": "8.x-1.7" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/config_update-8.x-1.7.zip", - "reference": "8.x-1.7", - "shasum": "8f079abf7c2ea826a27fa5224b0770a26404c968" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.7", - "datestamp": "1586355587", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "jhodgdon", - "homepage": "https://www.drupal.org/user/155601" - }, - { - "name": "nedjo", - "homepage": "https://www.drupal.org/user/4481" - } - ], - "description": "Provides basic revert and update functionality for other modules", - "homepage": "https://www.drupal.org/project/config_update", - "support": { - "source": "https://git.drupalcode.org/project/config_update" - } - }, - { - "name": "drupal/content_access", - "version": "1.0.0-alpha3", - "version_normalized": "1.0.0.0-alpha3", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/content_access.git", - "reference": "8.x-1.0-alpha3" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/content_access-8.x-1.0-alpha3.zip", - "reference": "8.x-1.0-alpha3", - "shasum": "38715d271d166cbf7ed801acd6cee6010962bc79" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "require-dev": { - "drupal/acl": "~1.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.0-alpha3", - "datestamp": "1600327861", - "security-coverage": { - "status": "not-covered", - "message": "Project has not opted into security advisory coverage!" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0" - ], - "authors": [ - { - "name": "fago", - "homepage": "https://www.drupal.org/user/16747" - }, - { - "name": "gisle", - "homepage": "https://www.drupal.org/user/409554" - }, - { - "name": "good_man", - "homepage": "https://www.drupal.org/user/265439" - } - ], - "description": "Provides flexible content access control.", - "homepage": "https://drupal.org/project/content_access", - "support": { - "source": "https://git.drupalcode.org/project/content_access" - } - }, - { - "name": "drupal/context", - "version": "4.0.0-beta5", - "version_normalized": "4.0.0.0-beta5", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/context.git", - "reference": "8.x-4.0-beta5" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/context-8.x-4.0-beta5.zip", - "reference": "8.x-4.0-beta5", - "shasum": "893d7e6ce07b23764baa6fd609da811ec80c5a04" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-4.0-beta5", - "datestamp": "1600783508", - "security-coverage": { - "status": "not-covered", - "message": "Beta releases are not covered by Drupal security advisories." - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christoffer Palm", - "homepage": "http://www.oddhill.se/", - "email": "christoffer.palm@oddhill.se", - "role": "Developer" - }, - { - "name": "Steven Jones", - "homepage": "https://www.drupal.org/user/99644" - }, - { - "name": "alex_b", - "homepage": "https://www.drupal.org/user/53995" - }, - { - "name": "boshtian", - "homepage": "https://www.drupal.org/user/1773456" - }, - { - "name": "colan", - "homepage": "https://www.drupal.org/user/58704" - }, - { - "name": "emanaton", - "homepage": "https://www.drupal.org/user/120853" - }, - { - "name": "febbraro", - "homepage": "https://www.drupal.org/user/43670" - }, - { - "name": "fizk", - "homepage": "https://www.drupal.org/user/473174" - }, - { - "name": "hass", - "homepage": "https://www.drupal.org/user/85918" - }, - { - "name": "hefox", - "homepage": "https://www.drupal.org/user/426416" - }, - { - "name": "jmiccolis", - "homepage": "https://www.drupal.org/user/31731" - }, - { - "name": "nedjo", - "homepage": "https://www.drupal.org/user/4481" - }, - { - "name": "patricksettle", - "homepage": "https://www.drupal.org/user/26618" - }, - { - "name": "paulocs", - "homepage": "https://www.drupal.org/user/3640109" - }, - { - "name": "tekante", - "homepage": "https://www.drupal.org/user/640024" - }, - { - "name": "yhahn", - "homepage": "https://www.drupal.org/user/264833" - } - ], - "description": "Manage contextual conditions and reactions for different portions of your site.", - "homepage": "https://github.com/oddhill/context", - "keywords": [ - "Drupal", - "block", - "conditions", - "context", - "visibility" - ], - "support": { - "source": "https://github.com/oddhill/context", - "issues": "https://github.com/oddhill/context/issues", - "docs": "https://github.com/oddhill/context" - } - }, - { - "name": "drupal/contribute", - "version": "1.0.0-beta8", - "version_normalized": "1.0.0.0-beta8", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/contribute.git", - "reference": "8.x-1.0-beta8" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/contribute-8.x-1.0-beta8.zip", - "reference": "8.x-1.0-beta8", - "shasum": "0f197e7ed0997818366d557a1c990d2c199e3565" - }, - "require": { - "drupal/core": "~8.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.0-beta8", - "datestamp": "1572372486", - "security-coverage": { - "status": "not-covered", - "message": "Beta releases are not covered by Drupal security advisories." - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Adrian Cid Almaguer (adriancid)", - "homepage": "https://www.drupal.org/u/adriancid", - "role": "Maintainer" - }, - { - "name": "Jacob Rockowitz (jrockowitz)", - "homepage": "https://www.drupal.org/u/jrockowitz", - "role": "Maintainer" - }, - { - "name": "jrockowitz", - "homepage": "https://www.drupal.org/user/371407" - } - ], - "description": "Provides status report message which encourage users or organizations to join the Drupal community, become a member of Drupal Association, and contribute back to Drupal.", - "homepage": "https://www.drupal.org/project/contribute", - "keywords": [ - "Drupal" - ], - "support": { - "source": "http://cgit.drupalcode.org/contribute", - "issues": "https://www.drupal.org/project/issues/contribute" - } - }, - { - "name": "drupal/cookieconsent", - "version": "1.6.0", - "version_normalized": "1.6.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/cookieconsent.git", - "reference": "8.x-1.6" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/cookieconsent-8.x-1.6.zip", - "reference": "8.x-1.6", - "shasum": "3acb8380e230e3a01486e336197e5b543892c409" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.6", - "datestamp": "1592402037", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Hans van Wezenbeek (Nitebreed)", - "homepage": "https://www.drupal.org/u/nitebreed", - "role": "Maintainer" - }, - { - "name": "Steven Buteneers", - "homepage": "https://www.drupal.org/user/3301055" - }, - { - "name": "pjotr", - "homepage": "https://www.drupal.org/user/3487709" - } - ], - "description": "CookieConsent uses the Cookie Consent javascript library for alerting users about the use of cookies on your website", - "homepage": "https://www.drupal.org/project/cookieconsent", - "keywords": [ - "Cookie", - "CookieConsent", - "Drupal" - ], - "support": { - "source": "http://cgit.drupalcode.org/cookieconsent", - "issues": "http://drupal.org/project/issues/cookieconsent" - } - }, - { - "name": "drupal/core", - "version": "8.9.13", - "version_normalized": "8.9.13.0", - "source": { - "type": "git", - "url": "https://github.com/drupal/core.git", - "reference": "a53db77b55a035453d7229e0c3069f8591cb4cb6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/drupal/core/zipball/a53db77b55a035453d7229e0c3069f8591cb4cb6", - "reference": "a53db77b55a035453d7229e0c3069f8591cb4cb6", - "shasum": "" - }, - "require": { - "asm89/stack-cors": "^1.1", - "composer/semver": "^1.0", - "doctrine/annotations": "^1.4", - "doctrine/common": "^2.7", - "easyrdf/easyrdf": "^0.9", - "egulias/email-validator": "^2.0", - "ext-date": "*", - "ext-dom": "*", - "ext-filter": "*", - "ext-gd": "*", - "ext-hash": "*", - "ext-json": "*", - "ext-pcre": "*", - "ext-pdo": "*", - "ext-session": "*", - "ext-simplexml": "*", - "ext-spl": "*", - "ext-tokenizer": "*", - "ext-xml": "*", - "guzzlehttp/guzzle": "^6.3", - "laminas/laminas-diactoros": "^1.8", - "laminas/laminas-feed": "^2.12", - "masterminds/html5": "^2.1", - "pear/archive_tar": "^1.4.12", - "php": "^7.0.8", - "psr/log": "^1.0", - "stack/builder": "^1.0", - "symfony-cmf/routing": "^1.4", - "symfony/class-loader": "~3.4.0", - "symfony/console": "~3.4.0", - "symfony/dependency-injection": "~3.4.26", - "symfony/event-dispatcher": "~3.4.0", - "symfony/http-foundation": "~3.4.35", - "symfony/http-kernel": "~3.4.14", - "symfony/polyfill-iconv": "^1.0", - "symfony/process": "~3.4.0", - "symfony/psr-http-message-bridge": "^1.1.2", - "symfony/routing": "~3.4.0", - "symfony/serializer": "~3.4.0", - "symfony/translation": "~3.4.0", - "symfony/validator": "~3.4.0", - "symfony/yaml": "~3.4.5", - "twig/twig": "^1.38.2", - "typo3/phar-stream-wrapper": "^3.1.3" - }, - "conflict": { - "drupal/pathauto": "<1.6", - "drush/drush": "<8.1.10" - }, - "replace": { - "drupal/action": "self.version", - "drupal/aggregator": "self.version", - "drupal/automated_cron": "self.version", - "drupal/ban": "self.version", - "drupal/bartik": "self.version", - "drupal/basic_auth": "self.version", - "drupal/big_pipe": "self.version", - "drupal/block": "self.version", - "drupal/block_content": "self.version", - "drupal/block_place": "self.version", - "drupal/book": "self.version", - "drupal/breakpoint": "self.version", - "drupal/ckeditor": "self.version", - "drupal/claro": "self.version", - "drupal/classy": "self.version", - "drupal/color": "self.version", - "drupal/comment": "self.version", - "drupal/config": "self.version", - "drupal/config_translation": "self.version", - "drupal/contact": "self.version", - "drupal/content_moderation": "self.version", - "drupal/content_translation": "self.version", - "drupal/contextual": "self.version", - "drupal/core-annotation": "self.version", - "drupal/core-assertion": "self.version", - "drupal/core-bridge": "self.version", - "drupal/core-class-finder": "self.version", - "drupal/core-datetime": "self.version", - "drupal/core-dependency-injection": "self.version", - "drupal/core-diff": "self.version", - "drupal/core-discovery": "self.version", - "drupal/core-event-dispatcher": "self.version", - "drupal/core-file-cache": "self.version", - "drupal/core-file-security": "self.version", - "drupal/core-filesystem": "self.version", - "drupal/core-gettext": "self.version", - "drupal/core-graph": "self.version", - "drupal/core-http-foundation": "self.version", - "drupal/core-php-storage": "self.version", - "drupal/core-plugin": "self.version", - "drupal/core-proxy-builder": "self.version", - "drupal/core-render": "self.version", - "drupal/core-serialization": "self.version", - "drupal/core-transliteration": "self.version", - "drupal/core-utility": "self.version", - "drupal/core-uuid": "self.version", - "drupal/core-version": "self.version", - "drupal/datetime": "self.version", - "drupal/datetime_range": "self.version", - "drupal/dblog": "self.version", - "drupal/dynamic_page_cache": "self.version", - "drupal/editor": "self.version", - "drupal/entity_reference": "self.version", - "drupal/field": "self.version", - "drupal/field_layout": "self.version", - "drupal/field_ui": "self.version", - "drupal/file": "self.version", - "drupal/filter": "self.version", - "drupal/forum": "self.version", - "drupal/hal": "self.version", - "drupal/help": "self.version", - "drupal/help_topics": "self.version", - "drupal/history": "self.version", - "drupal/image": "self.version", - "drupal/inline_form_errors": "self.version", - "drupal/jsonapi": "self.version", - "drupal/language": "self.version", - "drupal/layout_builder": "self.version", - "drupal/layout_discovery": "self.version", - "drupal/link": "self.version", - "drupal/locale": "self.version", - "drupal/media": "self.version", - "drupal/media_library": "self.version", - "drupal/menu_link_content": "self.version", - "drupal/menu_ui": "self.version", - "drupal/migrate": "self.version", - "drupal/migrate_drupal": "self.version", - "drupal/migrate_drupal_multilingual": "self.version", - "drupal/migrate_drupal_ui": "self.version", - "drupal/minimal": "self.version", - "drupal/node": "self.version", - "drupal/options": "self.version", - "drupal/page_cache": "self.version", - "drupal/path": "self.version", - "drupal/path_alias": "self.version", - "drupal/quickedit": "self.version", - "drupal/rdf": "self.version", - "drupal/responsive_image": "self.version", - "drupal/rest": "self.version", - "drupal/search": "self.version", - "drupal/serialization": "self.version", - "drupal/settings_tray": "self.version", - "drupal/seven": "self.version", - "drupal/shortcut": "self.version", - "drupal/simpletest": "self.version", - "drupal/standard": "self.version", - "drupal/stark": "self.version", - "drupal/statistics": "self.version", - "drupal/syslog": "self.version", - "drupal/system": "self.version", - "drupal/taxonomy": "self.version", - "drupal/telephone": "self.version", - "drupal/text": "self.version", - "drupal/toolbar": "self.version", - "drupal/tour": "self.version", - "drupal/tracker": "self.version", - "drupal/update": "self.version", - "drupal/user": "self.version", - "drupal/views": "self.version", - "drupal/views_ui": "self.version", - "drupal/workflows": "self.version", - "drupal/workspaces": "self.version" - }, - "type": "drupal-core", - "extra": { - "drupal-scaffold": { - "file-mapping": { - "[project-root]/.editorconfig": "assets/scaffold/files/editorconfig", - "[project-root]/.gitattributes": "assets/scaffold/files/gitattributes", - "[web-root]/.csslintrc": "assets/scaffold/files/csslintrc", - "[web-root]/.eslintignore": "assets/scaffold/files/eslintignore", - "[web-root]/.eslintrc.json": "assets/scaffold/files/eslintrc.json", - "[web-root]/.ht.router.php": "assets/scaffold/files/ht.router.php", - "[web-root]/.htaccess": "assets/scaffold/files/htaccess", - "[web-root]/example.gitignore": "assets/scaffold/files/example.gitignore", - "[web-root]/index.php": "assets/scaffold/files/index.php", - "[web-root]/INSTALL.txt": "assets/scaffold/files/drupal.INSTALL.txt", - "[web-root]/README.txt": "assets/scaffold/files/drupal.README.txt", - "[web-root]/robots.txt": "assets/scaffold/files/robots.txt", - "[web-root]/update.php": "assets/scaffold/files/update.php", - "[web-root]/web.config": "assets/scaffold/files/web.config", - "[web-root]/sites/README.txt": "assets/scaffold/files/sites.README.txt", - "[web-root]/sites/development.services.yml": "assets/scaffold/files/development.services.yml", - "[web-root]/sites/example.settings.local.php": "assets/scaffold/files/example.settings.local.php", - "[web-root]/sites/example.sites.php": "assets/scaffold/files/example.sites.php", - "[web-root]/sites/default/default.services.yml": "assets/scaffold/files/default.services.yml", - "[web-root]/sites/default/default.settings.php": "assets/scaffold/files/default.settings.php", - "[web-root]/modules/README.txt": "assets/scaffold/files/modules.README.txt", - "[web-root]/profiles/README.txt": "assets/scaffold/files/profiles.README.txt", - "[web-root]/themes/README.txt": "assets/scaffold/files/themes.README.txt" - } - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Drupal\\Core\\": "lib/Drupal/Core", - "Drupal\\Component\\": "lib/Drupal/Component", - "Drupal\\Driver\\": "../drivers/lib/Drupal/Driver" - }, - "classmap": [ - "lib/Drupal.php", - "lib/Drupal/Component/Utility/Timer.php", - "lib/Drupal/Component/Utility/Unicode.php", - "lib/Drupal/Core/Database/Database.php", - "lib/Drupal/Core/DrupalKernel.php", - "lib/Drupal/Core/DrupalKernelInterface.php", - "lib/Drupal/Core/Site/Settings.php" - ] - }, - "scripts": { - "pre-autoload-dump": [ - "Drupal\\Core\\Composer\\Composer::preAutoloadDump" - ], - "post-autoload-dump": [ - "Drupal\\Core\\Composer\\Composer::ensureHtaccess" - ] - }, - "license": [ - "GPL-2.0-or-later" - ], - "description": "Drupal is an open source content management platform powering millions of websites and applications." - }, - { - "name": "drupal/core-composer-scaffold", - "version": "8.9.13", - "version_normalized": "8.9.13.0", - "source": { - "type": "git", - "url": "https://github.com/drupal/core-composer-scaffold.git", - "reference": "c902d07cb49ef73777e2b33a39e54c2861a8c81d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/drupal/core-composer-scaffold/zipball/c902d07cb49ef73777e2b33a39e54c2861a8c81d", - "reference": "c902d07cb49ef73777e2b33a39e54c2861a8c81d", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1 || ^2", - "php": ">=7.0.8" - }, - "conflict": { - "drupal-composer/drupal-scaffold": "*" - }, - "require-dev": { - "composer/composer": "^1.8@stable" - }, - "type": "composer-plugin", - "extra": { - "class": "Drupal\\Composer\\Plugin\\Scaffold\\Plugin", - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Drupal\\Composer\\Plugin\\Scaffold\\": "" - } - }, - "license": [ - "GPL-2.0-or-later" - ], - "description": "A flexible Composer project scaffold builder.", - "homepage": "https://www.drupal.org/project/drupal", - "keywords": [ - "drupal" - ] - }, - { - "name": "drupal/core-project-message", - "version": "8.9.13", - "version_normalized": "8.9.13.0", - "source": { - "type": "git", - "url": "https://github.com/drupal/core-project-message.git", - "reference": "3f8fa28128f1fef68ee0e6647011a543ef92be5b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/drupal/core-project-message/zipball/3f8fa28128f1fef68ee0e6647011a543ef92be5b", - "reference": "3f8fa28128f1fef68ee0e6647011a543ef92be5b", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.1 || ^2", - "php": ">=7.0.8" - }, - "type": "composer-plugin", - "extra": { - "class": "Drupal\\Composer\\Plugin\\ProjectMessage\\MessagePlugin" - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Drupal\\Composer\\Plugin\\ProjectMessage\\": "." - } - }, - "license": [ - "GPL-2.0-or-later" - ], - "description": "Adds a message after Composer installation.", - "homepage": "https://www.drupal.org/project/drupal", - "keywords": [ - "drupal" - ] - }, - { - "name": "drupal/core-recommended", - "version": "8.9.13", - "version_normalized": "8.9.13.0", - "source": { - "type": "git", - "url": "https://github.com/drupal/core-recommended.git", - "reference": "7a940fd5b64d2b22366680e2a60d96bf2c10089d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/drupal/core-recommended/zipball/7a940fd5b64d2b22366680e2a60d96bf2c10089d", - "reference": "7a940fd5b64d2b22366680e2a60d96bf2c10089d", - "shasum": "" - }, - "require": { - "asm89/stack-cors": "1.3.0", - "composer/semver": "1.5.1", - "doctrine/annotations": "v1.4.0", - "doctrine/cache": "v1.6.2", - "doctrine/collections": "v1.4.0", - "doctrine/common": "v2.7.3", - "doctrine/inflector": "v1.2.0", - "doctrine/lexer": "1.0.2", - "drupal/core": "8.9.13", - "easyrdf/easyrdf": "0.9.1", - "egulias/email-validator": "2.1.17", - "guzzlehttp/guzzle": "6.5.4", - "guzzlehttp/promises": "v1.3.1", - "guzzlehttp/psr7": "1.6.1", - "laminas/laminas-diactoros": "1.8.7p2", - "laminas/laminas-escaper": "2.6.1", - "laminas/laminas-feed": "2.12.2", - "laminas/laminas-stdlib": "3.2.1", - "laminas/laminas-zendframework-bridge": "1.0.4", - "masterminds/html5": "2.3.0", - "paragonie/random_compat": "v9.99.99", - "pear/archive_tar": "1.4.12", - "pear/console_getopt": "v1.4.3", - "pear/pear-core-minimal": "v1.10.10", - "pear/pear_exception": "v1.0.1", - "psr/container": "1.0.0", - "psr/http-message": "1.0.1", - "psr/log": "1.1.3", - "ralouphie/getallheaders": "3.0.3", - "stack/builder": "v1.0.5", - "symfony-cmf/routing": "1.4.1", - "symfony/class-loader": "v3.4.41", - "symfony/console": "v3.4.41", - "symfony/debug": "v3.4.41", - "symfony/dependency-injection": "v3.4.41", - "symfony/event-dispatcher": "v3.4.41", - "symfony/http-foundation": "v3.4.41", - "symfony/http-kernel": "v3.4.44", - "symfony/polyfill-ctype": "v1.17.0", - "symfony/polyfill-iconv": "v1.17.0", - "symfony/polyfill-intl-idn": "v1.17.0", - "symfony/polyfill-mbstring": "v1.17.0", - "symfony/polyfill-php56": "v1.17.0", - "symfony/polyfill-php70": "v1.17.0", - "symfony/polyfill-php72": "v1.17.0", - "symfony/polyfill-util": "v1.17.0", - "symfony/process": "v3.4.41", - "symfony/psr-http-message-bridge": "v1.1.2", - "symfony/routing": "v3.4.41", - "symfony/serializer": "v3.4.41", - "symfony/translation": "v3.4.41", - "symfony/validator": "v3.4.41", - "symfony/yaml": "v3.4.41", - "twig/twig": "v1.42.5", - "typo3/phar-stream-wrapper": "v3.1.4" - }, - "conflict": { - "webflo/drupal-core-strict": "*" - }, - "type": "metapackage", - "license": [ - "GPL-2.0-or-later" - ], - "description": "Locked core dependencies; require this project INSTEAD OF drupal/core." - }, - { - "name": "drupal/ctools", - "version": "3.4.0", - "version_normalized": "3.4.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/ctools.git", - "reference": "8.x-3.4" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/ctools-8.x-3.4.zip", - "reference": "8.x-3.4", - "shasum": "016ca5abb7ac4ca720352a72e8989f3ef0e20539" - }, - "require": { - "drupal/core": "^8.7.7 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-3.4", - "datestamp": "1585763383", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Kris Vanderwater (EclipseGc)", - "homepage": "https://www.drupal.org/u/eclipsegc", - "role": "Maintainer" - }, - { - "name": "Jakob Perry (japerry)", - "homepage": "https://www.drupal.org/u/japerry", - "role": "Maintainer" - }, - { - "name": "Tim Plunkett (tim.plunkett)", - "homepage": "https://www.drupal.org/u/timplunkett", - "role": "Maintainer" - }, - { - "name": "James Gilliland (neclimdul)", - "homepage": "https://www.drupal.org/u/neclimdul", - "role": "Maintainer" - }, - { - "name": "Daniel Wehner (dawehner)", - "homepage": "https://www.drupal.org/u/dawehner", - "role": "Maintainer" - }, - { - "name": "joelpittet", - "homepage": "https://www.drupal.org/user/160302" - }, - { - "name": "merlinofchaos", - "homepage": "https://www.drupal.org/user/26979" - }, - { - "name": "neclimdul", - "homepage": "https://www.drupal.org/user/48673" - }, - { - "name": "sdboyer", - "homepage": "https://www.drupal.org/user/146719" - }, - { - "name": "sun", - "homepage": "https://www.drupal.org/user/54136" - }, - { - "name": "tim.plunkett", - "homepage": "https://www.drupal.org/user/241634" - } - ], - "description": "Provides a number of utility and helper APIs for Drupal developers and site builders.", - "homepage": "https://www.drupal.org/project/ctools", - "support": { - "source": "https://git.drupalcode.org/project/ctools", - "issues": "https://www.drupal.org/project/issues/ctools" - } - }, - { - "name": "drupal/ctools_block", - "version": "3.4.0", - "version_normalized": "3.4.0.0", - "require": { - "drupal/core": "^8 || ^9", - "drupal/ctools": "*" - }, - "type": "metapackage", - "extra": { - "drupal": { - "version": "8.x-3.4", - "datestamp": "1585763383", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "EclipseGc", - "homepage": "https://www.drupal.org/user/61203" - }, - { - "name": "damiankloip", - "homepage": "https://www.drupal.org/user/1037976" - }, - { - "name": "dawehner", - "homepage": "https://www.drupal.org/user/99340" - }, - { - "name": "esmerel", - "homepage": "https://www.drupal.org/user/164022" - }, - { - "name": "japerry", - "homepage": "https://www.drupal.org/user/45640" - }, - { - "name": "joelpittet", - "homepage": "https://www.drupal.org/user/160302" - }, - { - "name": "merlinofchaos", - "homepage": "https://www.drupal.org/user/26979" - }, - { - "name": "neclimdul", - "homepage": "https://www.drupal.org/user/48673" - }, - { - "name": "sdboyer", - "homepage": "https://www.drupal.org/user/146719" - }, - { - "name": "sun", - "homepage": "https://www.drupal.org/user/54136" - }, - { - "name": "tim.plunkett", - "homepage": "https://www.drupal.org/user/241634" - } - ], - "description": "Provides improvements to blocks that will one day be added to Drupal core.", - "homepage": "https://www.drupal.org/project/ctools", - "support": { - "source": "https://git.drupalcode.org/project/ctools" - } - }, - { - "name": "drupal/devel", - "version": "2.1.0", - "version_normalized": "2.1.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/devel.git", - "reference": "8.x-2.1" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/devel-8.x-2.1.zip", - "reference": "8.x-2.1", - "shasum": "8f735892922aa5f228e681e645e5f02b1c008f14" - }, - "require": { - "drupal/core": "~8.0", - "symfony/var-dumper": "~2.7|^3|^4" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.1", - "datestamp": "1556799496", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "drush": { - "services": { - "drush.services.yml": "^9" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Moshe Weitzman", - "homepage": "https://github.com/weitzman", - "email": "weitzman@tejasa.com", - "role": "Maintainer" - }, - { - "name": "Hans Salvisberg", - "homepage": "https://www.drupal.org/u/salvis", - "email": "drupal@salvisberg.com", - "role": "Maintainer" - }, - { - "name": "Luca Lusso", - "homepage": "https://www.drupal.org/u/lussoluca", - "role": "Maintainer" - }, - { - "name": "Marco (willzyx)", - "homepage": "https://www.drupal.org/u/willzyx", - "role": "Maintainer" - }, - { - "name": "See contributors", - "homepage": "https://www.drupal.org/node/3236/committers" - } - ], - "description": "Various blocks, pages, and functions for developers.", - "homepage": "http://drupal.org/project/devel", - "support": { - "source": "http://cgit.drupalcode.org/devel", - "issues": "http://drupal.org/project/devel", - "irc": "irc://irc.freenode.org/drupal-contribute" - } - }, - { - "name": "drupal/domain_301_redirect", - "version": "1.0.0-alpha0", - "version_normalized": "1.0.0.0-alpha0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/domain_301_redirect.git", - "reference": "8.x-1.0-alpha0" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/domain_301_redirect-8.x-1.0-alpha0.zip", - "reference": "8.x-1.0-alpha0", - "shasum": "7b2756cdba8ecf8af052e9a6105530c1eaa2cfa5" - }, - "require": { - "drupal/core": "~8.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.0-alpha0", - "datestamp": "1569004385", - "security-coverage": { - "status": "not-covered", - "message": "Alpha releases are not covered by Drupal security advisories." - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Kevin Hankens", - "homepage": "https://www.drupal.org/user/78090" - }, - { - "name": "jessebeach", - "homepage": "https://www.drupal.org/user/748566" - }, - { - "name": "nagba", - "homepage": "https://www.drupal.org/user/21231" - }, - { - "name": "naveenvalecha", - "homepage": "https://www.drupal.org/user/2665733" - }, - { - "name": "timhilliard", - "homepage": "https://www.drupal.org/user/195493" - } - ], - "description": "Allows you to 301 redirect any domain to the main domain associated with a site.", - "homepage": "http://drupal.org/project/domain_301_redirect", - "keywords": [ - "Drupal" - ], - "support": { - "source": "http://cgit.drupalcode.org/domain_301_redirect", - "issues": "http://drupal.org/project/domain_301_redirect" - } - }, - { - "name": "drupal/ds", - "version": "3.9.0", - "version_normalized": "3.9.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/ds.git", - "reference": "8.x-3.9" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/ds-8.x-3.9.zip", - "reference": "8.x-3.9", - "shasum": "7b419763cd87c2b3f06313489500746705a46334" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "require-dev": { - "drupal/devel": "3.x-dev", - "drupal/field_group": "3.x-dev" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-3.9", - "datestamp": "1598898821", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Bram Goffings", - "homepage": "https://www.drupal.org/user/172527", - "role": "Maintainer" - }, - { - "name": "Kristof De Jaeger", - "homepage": "http://realize.be/", - "role": "Maintainer" - }, - { - "name": "Brecht Ceyssens", - "homepage": "https://www.drupal.org/user/591438", - "role": "Maintainer" - }, - { - "name": "swentel", - "homepage": "https://www.drupal.org/user/107403" - } - ], - "description": "Extend the display options for every entity type.", - "homepage": "https://www.drupal.org/project/ds", - "keywords": [ - "drupal", - "layout", - "php" - ], - "support": { - "source": "http://git.drupal.org/project/ds.git", - "issues": "https://www.drupal.org/project/issues/ds", - "irc": "irc://irc.freenode.org/drupal-contribute" - } - }, - { - "name": "drupal/easy_breadcrumb", - "version": "1.13.0", - "version_normalized": "1.13.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/easy_breadcrumb.git", - "reference": "8.x-1.13" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/easy_breadcrumb-8.x-1.13.zip", - "reference": "8.x-1.13", - "shasum": "8a8be82e1de1383eb849989b1c5790dd13270ffa" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.13", - "datestamp": "1595445195", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Neslee Canil Pinto", - "homepage": "https://www.drupal.org/u/neslee-canil-pinto", - "role": "Maintainer" - }, - { - "name": "Greg Boggs", - "homepage": "https://www.drupal.org/u/greg-boggs", - "role": "Maintainer" - }, - { - "name": "RenatoG", - "homepage": "https://www.drupal.org/user/3326031" - }, - { - "name": "diamondsea", - "homepage": "https://www.drupal.org/user/430714" - }, - { - "name": "hmartens", - "homepage": "https://www.drupal.org/user/622826" - }, - { - "name": "loopduplicate", - "homepage": "https://www.drupal.org/user/717290" - }, - { - "name": "sonemonu", - "homepage": "https://www.drupal.org/user/1667988" - }, - { - "name": "tatarbj", - "homepage": "https://www.drupal.org/user/649590" - }, - { - "name": "volkswagenchick", - "homepage": "https://www.drupal.org/user/3332522" - } - ], - "description": "Adds configuration to the system breadcrumbs.", - "homepage": "https://www.drupal.org/project/easy_breadcrumb", - "support": { - "source": "https://git.drupalcode.org/project/easy_breadcrumb", - "issues": "https://www.drupal.org/project/issues/easy_breadcrumb" - } - }, - { - "name": "drupal/easychart", - "version": "3.4.0", - "version_normalized": "3.4.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/easychart.git", - "reference": "8.x-3.4" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/easychart-8.x-3.4.zip", - "reference": "8.x-3.4", - "shasum": "6ec1848fd12b1515c16d841cc87a071883fa476c" - }, - "require": { - "drupal/core": "^8" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-3.4", - "datestamp": "1475594996", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Jan-Yves Vanhaverbeke", - "homepage": "https://www.drupal.org/user/1823074", - "role": "Maintainer" - }, - { - "name": "Thomas Daem", - "homepage": "https://www.drupal.org/user/591438", - "role": "Maintainer" - }, - { - "name": "Kristof De Jaeger", - "homepage": "http://realize.be/", - "role": "Maintainer" - }, - { - "name": "thomas_rz", - "homepage": "https://www.drupal.org/user/1142210" - } - ], - "description": "A visual editor for the world's best web charting tool: Highcharts.", - "homepage": "https://www.drupal.org/project/easychart", - "keywords": [ - "Highcharts", - "chart", - "drupal" - ], - "support": { - "source": "http://git.drupal.org/project/easychart.git", - "issues": "https://www.drupal.org/project/issues/easychart", - "irc": "irc://irc.freenode.org/drupal-contribute" - } - }, - { - "name": "drupal/entity_browser", - "version": "2.5.0", - "version_normalized": "2.5.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/entity_browser.git", - "reference": "8.x-2.5" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/entity_browser-8.x-2.5.zip", - "reference": "8.x-2.5", - "shasum": "29456b961f0f90ff064601ab8a382446a8143774" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "require-dev": { - "drupal/embed": "~1.0", - "drupal/entity_embed": "1.x-dev", - "drupal/entity_reference_revisions": "1.x-dev", - "drupal/entityqueue": "1.x-dev", - "drupal/inline_entity_form": "1.x-dev", - "drupal/paragraphs": "1.x-dev", - "drupal/token": "~1.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.5", - "datestamp": "1588015429", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Janez Urevc", - "homepage": "https://github.com/slashrsm", - "role": "Maintainer" - }, - { - "name": "Primoz Hmeljak", - "homepage": "https://github.com/primsi", - "role": "Maintainer" - }, - { - "name": "See other contributors", - "homepage": "https://www.drupal.org/node/1943336/committers", - "role": "contributor" - }, - { - "name": "Drupal Media Team", - "homepage": "https://www.drupal.org/user/3260690" - }, - { - "name": "Primsi", - "homepage": "https://www.drupal.org/user/282629" - }, - { - "name": "marcingy", - "homepage": "https://www.drupal.org/user/77320" - }, - { - "name": "oknate", - "homepage": "https://www.drupal.org/user/471638" - }, - { - "name": "samuel.mortenson", - "homepage": "https://www.drupal.org/user/2582268" - }, - { - "name": "slashrsm", - "homepage": "https://www.drupal.org/user/744628" - } - ], - "description": "Entity browsing and selecting component.", - "homepage": "http://drupal.org/project/entity_browser", - "support": { - "source": "https://git.drupalcode.org/project/entity_browser", - "issues": "https://www.drupal.org/project/issues/entity_browser", - "irc": "irc://irc.freenode.org/drupal-contribute" - } - }, - { - "name": "drupal/entity_print", - "version": "2.2.0", - "version_normalized": "2.2.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/entity_print.git", - "reference": "8.x-2.2" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/entity_print-8.x-2.2.zip", - "reference": "8.x-2.2", - "shasum": "5bd7671e2563a68925ab7f6ecd8dc8e8e396a0ea" - }, - "require": { - "dompdf/dompdf": "~0.8.0", - "drupal/core": "^8 || ^9" - }, - "suggest": { - "mikehaertl/phpwkhtmltopdf": "PhpWkhtmlToPdf provides the PHP library to use Wkhtmltopdf" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.2", - "datestamp": "1592533892", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Ben Dougherty", - "homepage": "https://www.drupal.org/u/benjy" - }, - { - "name": "benjy", - "homepage": "https://www.drupal.org/user/1852732" - }, - { - "name": "pameeela", - "homepage": "https://www.drupal.org/user/1431110" - } - ], - "description": "PDF print solution for any Drupal entity.", - "homepage": "http://drupal.org/project/entity_print", - "keywords": [ - "PDF", - "drupal", - "print", - "web" - ], - "support": { - "source": "https://git.drupalcode.org/project/entity_print" - } - }, - { - "name": "drupal/entity_reference_revisions", - "version": "1.8.0", - "version_normalized": "1.8.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/entity_reference_revisions.git", - "reference": "8.x-1.8" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/entity_reference_revisions-8.x-1.8.zip", - "reference": "8.x-1.8", - "shasum": "c1279e6c683edc2dbccedba8de1505340c8a62b6" - }, - "require": { - "drupal/core": "^8.7.7 || ^9" - }, - "require-dev": { - "drupal/diff": "1.x-dev" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.8", - "datestamp": "1583961846", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0" - ], - "authors": [ - { - "name": "Berdir", - "homepage": "https://www.drupal.org/user/214652" - }, - { - "name": "Frans", - "homepage": "https://www.drupal.org/user/514222" - }, - { - "name": "jeroen.b", - "homepage": "https://www.drupal.org/user/1853532" - }, - { - "name": "miro_dietiker", - "homepage": "https://www.drupal.org/user/227761" - } - ], - "description": "Entity Reference Revisions", - "homepage": "https://www.drupal.org/project/entity_reference_revisions", - "support": { - "source": "https://git.drupalcode.org/project/entity_reference_revisions" - } - }, - { - "name": "drupal/externalauth", - "version": "1.3.0", - "version_normalized": "1.3.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/externalauth.git", - "reference": "8.x-1.3" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/externalauth-8.x-1.3.zip", - "reference": "8.x-1.3", - "shasum": "b1b38e6718fe66bd38fc894dab1f9d7a7d60f10b" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.3", - "datestamp": "1587629529", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "rgristroph", - "homepage": "https://www.drupal.org/user/516442" - }, - { - "name": "snufkin", - "homepage": "https://www.drupal.org/user/58645" - }, - { - "name": "svendecabooter", - "homepage": "https://www.drupal.org/user/35369" - } - ], - "description": "Helper module to authenticate users using an external site / service and storing identification details", - "homepage": "https://www.drupal.org/project/externalauth", - "support": { - "source": "https://git.drupalcode.org/project/externalauth" - } - }, - { - "name": "drupal/extlink", - "version": "1.5.0", - "version_normalized": "1.5.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/extlink.git", - "reference": "8.x-1.5" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/extlink-8.x-1.5.zip", - "reference": "8.x-1.5", - "shasum": "5a2b74d12ff9e9257a0566cca8dac3872da64970" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.5", - "datestamp": "1601382250", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Nate Lampton", - "homepage": "https://www.drupal.org/u/quicksketch", - "role": "Maintainer" - }, - { - "name": "Lachlan Ennis", - "homepage": "https://www.drupal.org/u/elachlan", - "role": "Maintainer" - }, - { - "name": "Neslee Canil Pinto", - "homepage": "https://www.drupal.org/u/neslee-canil-pinto", - "role": "Maintainer" - } - ], - "description": "Modify behavior and appearance of external links.", - "homepage": "https://www.drupal.org/project/extlink", - "keywords": [ - "Drupal", - "External Links" - ], - "support": { - "source": "https://git.drupalcode.org/project/extlink", - "issues": "https://www.drupal.org/project/issues/extlink" - } - }, - { - "name": "drupal/facets", - "version": "1.6.0", - "version_normalized": "1.6.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/facets.git", - "reference": "8.x-1.6" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/facets-8.x-1.6.zip", - "reference": "8.x-1.6", - "shasum": "4942b62f1cae20eaface3c0627551716c8706255" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "require-dev": { - "drupal/search_api": "~1.5" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.6", - "datestamp": "1604397981", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "branch-alias": { - "dev-8.x-1.x": "1.x-dev" - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "See all contributors", - "homepage": "https://www.drupal.org/node/2348769/committers" - }, - { - "name": "StryKaizer", - "homepage": "https://www.drupal.org/user/462700" - }, - { - "name": "borisson_", - "homepage": "https://www.drupal.org/user/2393360" - } - ], - "description": "The Facet module allows site builders to easily create and manage faceted search interfaces.", - "homepage": "https://www.drupal.org/project/facets", - "support": { - "source": "git://git.drupal.org/project/facets.git", - "issues": "https://www.drupal.org/project/issues/facets", - "irc": "irc://irc.freenode.org/drupal-search-api" - } - }, - { - "name": "drupal/fast_404", - "version": "2.0.0-alpha5", - "version_normalized": "2.0.0.0-alpha5", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/fast_404.git", - "reference": "8.x-2.0-alpha5" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/fast_404-8.x-2.0-alpha5.zip", - "reference": "8.x-2.0-alpha5", - "shasum": "071518c28f73ed011068ec0dbfe07a5904b8f982" - }, - "require": { - "drupal/core": "^8.8" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.0-alpha5", - "datestamp": "1590876049", - "security-coverage": { - "status": "not-covered", - "message": "Alpha releases are not covered by Drupal security advisories." - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "adammalone", - "homepage": "https://www.drupal.org/user/1295980" - }, - { - "name": "bonus", - "homepage": "https://www.drupal.org/user/360002" - }, - { - "name": "naveenvalecha", - "homepage": "https://www.drupal.org/user/2665733" - }, - { - "name": "neetu morwani", - "homepage": "https://www.drupal.org/user/2632025" - }, - { - "name": "soyarma", - "homepage": "https://www.drupal.org/user/286273" - } - ], - "homepage": "https://www.drupal.org/project/fast_404", - "support": { - "source": "https://git.drupalcode.org/project/fast_404" - } - }, - { - "name": "drupal/features", - "version": "3.12.0", - "version_normalized": "3.12.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/features.git", - "reference": "8.x-3.12" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/features-8.x-3.12.zip", - "reference": "8.x-3.12", - "shasum": "f28d6e7d3340e32666a3e8ae515ed746dbe86b98" - }, - "require": { - "drupal/config_update": "^1.4", - "drupal/core": "^8.8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-3.12", - "datestamp": "1612830531", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "drush": { - "services": { - "drush.services.yml": "^9 || ^10" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "dawehner", - "homepage": "https://www.drupal.org/user/99340" - }, - { - "name": "donquixote", - "homepage": "https://www.drupal.org/user/459338" - }, - { - "name": "e2thex", - "homepage": "https://www.drupal.org/user/189123" - }, - { - "name": "febbraro", - "homepage": "https://www.drupal.org/user/43670" - }, - { - "name": "flocondetoile", - "homepage": "https://www.drupal.org/user/2006064" - }, - { - "name": "jmiccolis", - "homepage": "https://www.drupal.org/user/31731" - }, - { - "name": "joseph.olstad", - "homepage": "https://www.drupal.org/user/1321830" - }, - { - "name": "mpotter", - "homepage": "https://www.drupal.org/user/616192" - }, - { - "name": "nedjo", - "homepage": "https://www.drupal.org/user/4481" - }, - { - "name": "tim.plunkett", - "homepage": "https://www.drupal.org/user/241634" - } - ], - "description": "Enables administrators to package configuration into modules", - "homepage": "https://www.drupal.org/project/features", - "support": { - "source": "https://git.drupalcode.org/project/features" - } - }, - { - "name": "drupal/feeds", - "version": "3.0.0-alpha10", - "version_normalized": "3.0.0.0-alpha10", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/feeds.git", - "reference": "8.x-3.0-alpha10" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/feeds-8.x-3.0-alpha10.zip", - "reference": "8.x-3.0-alpha10", - "shasum": "84691c6258503c8d4afea5009dcd21bbd8292d49" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "require-dev": { - "drupal/pathauto": "^1.8", - "drush/drush": "^9 || ^10" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-3.0-alpha10", - "datestamp": "1612455136", - "security-coverage": { - "status": "not-covered", - "message": "Project has not opted into security advisory coverage!" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Dave Reid", - "homepage": "https://www.drupal.org/user/53892" - }, - { - "name": "Ian Ward", - "homepage": "https://www.drupal.org/user/4736" - }, - { - "name": "MegaChriz", - "homepage": "https://www.drupal.org/user/654114" - }, - { - "name": "Will White", - "homepage": "https://www.drupal.org/user/32237" - }, - { - "name": "alex_b", - "homepage": "https://www.drupal.org/user/53995" - }, - { - "name": "e2thex", - "homepage": "https://www.drupal.org/user/189123" - }, - { - "name": "febbraro", - "homepage": "https://www.drupal.org/user/43670" - }, - { - "name": "franz", - "homepage": "https://www.drupal.org/user/581844" - }, - { - "name": "jmiccolis", - "homepage": "https://www.drupal.org/user/31731" - }, - { - "name": "joelpittet", - "homepage": "https://www.drupal.org/user/160302" - }, - { - "name": "kking", - "homepage": "https://www.drupal.org/user/24399" - }, - { - "name": "tobby", - "homepage": "https://www.drupal.org/user/154797" - }, - { - "name": "tristanoneil", - "homepage": "https://www.drupal.org/user/340659" - }, - { - "name": "twistor", - "homepage": "https://www.drupal.org/user/473738" - }, - { - "name": "yhahn", - "homepage": "https://www.drupal.org/user/264833" - } - ], - "description": "Aggregates RSS/Atom/RDF feeds, imports CSV files and more.", - "homepage": "https://www.drupal.org/project/feeds", - "keywords": [ - "Drupal" - ], - "support": { - "source": "https://git.drupalcode.org/project/feeds", - "issues": "https://www.drupal.org/project/issues/feeds" - } - }, - { - "name": "drupal/fences", - "version": "2.0.0-rc1", - "version_normalized": "2.0.0.0-RC1", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/fences.git", - "reference": "8.x-2.0-rc1" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/fences-8.x-2.0-rc1.zip", - "reference": "8.x-2.0-rc1", - "shasum": "0ec3a95dda7bdbdd13401bc834d75a3c7dd1c256" - }, - "require": { - "drupal/core": "^8.7.7 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.0-rc1", - "datestamp": "1590457540", - "security-coverage": { - "status": "not-covered", - "message": "RC releases are not covered by Drupal security advisories." - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "CrashTest_", - "homepage": "https://www.drupal.org/user/261457" - }, - { - "name": "JohnAlbin", - "homepage": "https://www.drupal.org/user/32095" - }, - { - "name": "Sam152", - "homepage": "https://www.drupal.org/user/1485048" - }, - { - "name": "gleroux02", - "homepage": "https://www.drupal.org/user/282323" - }, - { - "name": "jensimmons", - "homepage": "https://www.drupal.org/user/140882" - }, - { - "name": "stevector", - "homepage": "https://www.drupal.org/user/179805" - } - ], - "description": "Alter wrapping markup of fields.", - "homepage": "https://www.drupal.org/project/fences", - "support": { - "source": "https://git.drupalcode.org/project/fences" - } - }, - { - "name": "drupal/field_formatter_class", - "version": "1.5.0", - "version_normalized": "1.5.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/field_formatter_class.git", - "reference": "8.x-1.5" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/field_formatter_class-8.x-1.5.zip", - "reference": "8.x-1.5", - "shasum": "a51e0078615791a285250693a4e88775fac87b70" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.5", - "datestamp": "1610334141", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Andrew Macpherson", - "homepage": "https://www.drupal.org/u/andrewmacpherson", - "role": "maintainer" - }, - { - "name": "Oleksandr Dekhteruk", - "homepage": "https://www.drupal.org/u/pifagor", - "role": "maintainer" - }, - { - "name": "mfer", - "homepage": "https://www.drupal.org/user/25701" - }, - { - "name": "pifagor", - "homepage": "https://www.drupal.org/user/2375692" - } - ], - "description": "Provides custom HTML class settings for field formatters.", - "homepage": "https://www.drupal.org/project/field_formatter_class", - "support": { - "source": "https://git.drupalcode.org/project/field_formatter_class", - "issues": "https://www.drupal.org/project/issues/field_formatter_class" - } - }, - { - "name": "drupal/field_group", - "version": "3.1.0", - "version_normalized": "3.1.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/field_group.git", - "reference": "8.x-3.1" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/field_group-8.x-3.1.zip", - "reference": "8.x-3.1", - "shasum": "8a719eaea594f0ba874172831cb28da93c66b77a" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "require-dev": { - "drupal/jquery_ui_accordion": "^1.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-3.1", - "datestamp": "1591772567", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Hydra", - "homepage": "https://www.drupal.org/user/647364" - }, - { - "name": "Stalski", - "homepage": "https://www.drupal.org/user/322618" - }, - { - "name": "jyve", - "homepage": "https://www.drupal.org/user/591438" - }, - { - "name": "nils.destoop", - "homepage": "https://www.drupal.org/user/361625" - }, - { - "name": "swentel", - "homepage": "https://www.drupal.org/user/107403" - } - ], - "description": "Provides the field_group module.", - "homepage": "https://www.drupal.org/project/field_group", - "support": { - "source": "https://git.drupalcode.org/project/field_group", - "issues": "https://www.drupal.org/project/issues/field_group" - } - }, - { - "name": "drupal/field_permissions", - "version": "1.1.0", - "version_normalized": "1.1.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/field_permissions.git", - "reference": "8.x-1.1" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/field_permissions-8.x-1.1.zip", - "reference": "8.x-1.1", - "shasum": "11e31db94999e6871ad7633455315bc27989a7ea" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.1", - "datestamp": "1598646882", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "branch-alias": { - "dev-8.x-1.x": "1.x-dev" - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "RobLoach", - "homepage": "https://www.drupal.org/user/61114" - }, - { - "name": "japerry", - "homepage": "https://www.drupal.org/user/45640" - }, - { - "name": "jhedstrom", - "homepage": "https://www.drupal.org/user/208732" - }, - { - "name": "mariacha1", - "homepage": "https://www.drupal.org/user/2210776" - }, - { - "name": "markus_petrux", - "homepage": "https://www.drupal.org/user/39593" - } - ], - "description": "The Field Permissions module allows site administrators to set field-level permissions to edit, view and create fields on any entity.", - "homepage": "https://www.drupal.org/project/field_permissions", - "support": { - "source": "https://git.drupalcode.org/project/field_permissions", - "issues": "https://www.drupal.org/project/issues/field_permissions" - } - }, - { - "name": "drupal/file_mdm", - "version": "dev-1.x", - "version_normalized": "dev-1.x", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/file_mdm.git", - "reference": "30264f78b6c6f98a614e2da8d1e0c843dce59472" - }, - "require": { - "drupal/core": "~8.0", - "lsolesen/pel": "0.9.6", - "phenx/php-font-lib": "^0.5", - "php": ">=5.6" - }, - "require-dev": { - "drupal/image_effects": "*" - }, - "type": "drupal-module", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - }, - "drupal": { - "version": "8.x-1.1+8-dev", - "datestamp": "1576326787", - "security-coverage": { - "status": "not-covered", - "message": "Dev releases are not covered by Drupal security advisories." - } - } - }, - "installation-source": "source", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "mondrake", - "homepage": "https://www.drupal.org/user/1307444" - } - ], - "description": "Provides a service to manage file metadata.", - "homepage": "https://www.drupal.org/project/file_mdm", - "support": { - "source": "https://git.drupalcode.org/project/file_mdm" - } - }, - { - "name": "drupal/file_mdm_exif", - "version": "1.1.0", - "version_normalized": "1.1.0.0", - "require": { - "drupal/core": "~8.0", - "drupal/file_mdm": "*" - }, - "require-dev": { - "drupal/image_effects": "*" - }, - "type": "metapackage", - "extra": { - "drupal": { - "version": "8.x-1.1", - "datestamp": "1488273785", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "mondrake", - "homepage": "https://www.drupal.org/user/1307444" - } - ], - "description": "Provides a file metadata plugin for EXIF image information.", - "homepage": "https://www.drupal.org/project/file_mdm", - "support": { - "source": "https://git.drupalcode.org/project/file_mdm" - } - }, - { - "name": "drupal/filefield_paths", - "version": "1.0.0-beta5", - "version_normalized": "1.0.0.0-beta5", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/filefield_paths.git", - "reference": "8.x-1.0-beta5" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/filefield_paths-8.x-1.0-beta5.zip", - "reference": "8.x-1.0-beta5", - "shasum": "06719aaeee87bf5abdfb75e0079fcaf0bbd996a6" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "require-dev": { - "drupal/ctools": "*", - "drupal/pathauto": "*", - "drupal/redirect": "*", - "drupal/token": "*" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.0-beta5", - "datestamp": "1606806673", - "security-coverage": { - "status": "not-covered", - "message": "Beta releases are not covered by Drupal security advisories." - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Deciphered", - "homepage": "https://www.drupal.org/user/103796" - }, - { - "name": "voleger", - "homepage": "https://www.drupal.org/user/3260314" - } - ], - "description": "Adds improved Token based file sorting and renaming functionalities.", - "homepage": "https://www.drupal.org/project/filefield_paths", - "support": { - "source": "https://git.drupalcode.org/project/filefield_paths" - } - }, - { - "name": "drupal/honeypot", - "version": "1.30.0", - "version_normalized": "1.30.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/honeypot.git", - "reference": "8.x-1.30" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/honeypot-8.x-1.30.zip", - "reference": "8.x-1.30", - "shasum": "1d7983e8e07feee4f13e4b05c9a10db15ae2097e" - }, - "require": { - "drupal/core": "~8.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.30", - "datestamp": "1576274288", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Jeff Geerling", - "homepage": "https://www.drupal.org/user/213194", - "email": "geerlingguy@mac.com" - }, - { - "name": "geerlingguy", - "homepage": "https://www.drupal.org/user/389011" - }, - { - "name": "vijaycs85", - "homepage": "https://www.drupal.org/user/93488" - } - ], - "description": "Mitigates spam form submissions using the honeypot method.", - "homepage": "https://www.drupal.org/project/honeypot", - "keywords": [ - "deterrent", - "form", - "honeypot", - "honeytrap", - "php", - "spam" - ], - "support": { - "source": "https://git.drupalcode.org/project/honeypot" - } - }, - { - "name": "drupal/hook_event_dispatcher", - "version": "1.29.0", - "version_normalized": "1.29.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/hook_event_dispatcher.git", - "reference": "8.x-1.29" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/hook_event_dispatcher-8.x-1.29.zip", - "reference": "8.x-1.29", - "shasum": "81cbc5f27b1e62ee323b27fb826ec75d3762c68f" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "require-dev": { - "drupal/coder": "8.3.1", - "drupal/core": "^8.8", - "drupal/eck": "^1.0@alpha", - "drupal/paragraphs": "^1.10", - "drupal/webform": "*", - "mockery/mockery": "^1.3", - "php-parallel-lint/php-parallel-lint": "^1.0", - "phpmd/phpmd": "2.7.0", - "phpunit/phpunit": "^7", - "squizlabs/php_codesniffer": "^3.4" - }, - "suggest": { - "drupal/paragraphs": "Enables the creation of paragraphs entities.", - "drupal/token": "Provides additional tokens not supported by core (most notably fields), as well as a UI for browsing tokens." - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.29", - "datestamp": "1589110992", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Drupal\\hook_event_dispatcher\\": "src/", - "Drupal\\webform_event_dispatcher\\": "modules/webform_event_dispatcher/src/" - } - }, - "autoload-dev": { - "psr-4": { - "Drupal\\Tests\\hook_event_dispatcher\\": "tests/src/", - "Drupal\\Tests\\webform_event_dispatcher\\": "modules/webform_event_dispatcher/tests/src/", - "Drupal\\Tests\\": "vendor/drupal/core/tests/Drupal/Tests", - "Drupal\\TestTools\\": "vendor/drupal/core/tests/Drupal/TestTools", - "Drupal\\views\\": "vendor/drupal/core/modules/views/src/" - } - }, - "notification-url": "https://packages.drupal.org/8/downloads", - "scripts": { - "test": [ - "@phplint", - "@phpunit", - "@phpcs", - "@phpmd" - ], - "phplint": [ - "vendor/bin/parallel-lint --exclude vendor/ --exclude .idea/ -e php,module,inc,install,profile,theme ." - ], - "phpunit": [ - "vendor/bin/phpunit --configuration=phpunit.xml" - ], - "phpcs": [ - "vendor/bin/phpcs --ignore=vendor/,.idea/ --standard=vendor/drupal/coder/coder_sniffer/Drupal/ruleset.xml --extensions=php,module,inc,install,profile,theme --report=full --warning-severity=0 ." - ], - "phpcbf": [ - "vendor/bin/phpcbf --ignore=vendor/,.idea/ --standard=vendor/drupal/coder/coder_sniffer/Drupal/ruleset.xml --extensions=php,module,inc,install,profile,theme ." - ], - "phpmd": [ - "vendor/bin/phpmd --exclude vendor/,.idea/ --suffixes php,module,inc,install,profile,theme . text phpmd.xml" - ] - }, - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "pdenooijer", - "homepage": "https://www.drupal.org/user/3175437" - }, - { - "name": "robin.ingelbrecht", - "homepage": "https://www.drupal.org/user/2339074" - } - ], - "description": "Dispatches events for several drupal core hooks.", - "homepage": "https://www.drupal.org/project/hook_event_dispatcher", - "support": { - "source": "https://git.drupalcode.org/project/hook_event_dispatcher" - } - }, - { - "name": "drupal/hotjar", - "version": "2.0.0", - "version_normalized": "2.0.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/hotjar.git", - "reference": "8.x-2.0" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/hotjar-8.x-2.0.zip", - "reference": "8.x-2.0", - "shasum": "a2e21a22bcc7ba5e6f374350220eb00b1167722c" - }, - "require": { - "drupal/core": "^8.8 || ^9", - "ext-json": "*" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.0", - "datestamp": "1605689024", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "csakiistvan", - "homepage": "https://www.drupal.org/user/491514" - }, - { - "name": "tikaszvince", - "homepage": "https://www.drupal.org/user/337178" - } - ], - "description": "Allows your site to be tracked by Hotjar by adding a Javascript tracking code to every page", - "homepage": "https://www.drupal.org/project/hotjar", - "support": { - "source": "https://git.drupalcode.org/project/hotjar" - } - }, - { - "name": "drupal/imagemagick", - "version": "2.7.0", - "version_normalized": "2.7.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/imagemagick.git", - "reference": "8.x-2.7" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/imagemagick-8.x-2.7.zip", - "reference": "8.x-2.7", - "shasum": "e70fa0124305d99d5cf3f59d95c3e52657c1c8b4" - }, - "require": { - "drupal/core": "^8.3", - "drupal/file_mdm": "^1.1", - "drupal/file_mdm_exif": "^1.1", - "fileeye/mimemap": "^1.1.1" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.7", - "datestamp": "1581425670", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Chris Charlton", - "homepage": "https://www.drupal.org/user/17089" - }, - { - "name": "chx", - "homepage": "https://www.drupal.org/user/9446" - }, - { - "name": "claudiu.cristea", - "homepage": "https://www.drupal.org/user/56348" - }, - { - "name": "dman", - "homepage": "https://www.drupal.org/user/33240" - }, - { - "name": "dopry", - "homepage": "https://www.drupal.org/user/22202" - }, - { - "name": "drewish", - "homepage": "https://www.drupal.org/user/34869" - }, - { - "name": "gdl", - "homepage": "https://www.drupal.org/user/507326" - }, - { - "name": "mondrake", - "homepage": "https://www.drupal.org/user/1307444" - }, - { - "name": "quicksketch", - "homepage": "https://www.drupal.org/user/35821" - }, - { - "name": "sun", - "homepage": "https://www.drupal.org/user/54136" - }, - { - "name": "walkah", - "homepage": "https://www.drupal.org/user/1531" - } - ], - "description": "Provides an image toolkit to integrate ImageMagick with the Image API.", - "homepage": "https://www.drupal.org/project/imagemagick", - "support": { - "source": "https://git.drupalcode.org/project/imagemagick" - } - }, - { - "name": "drupal/imce", - "version": "2.3.0", - "version_normalized": "2.3.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/imce.git", - "reference": "8.x-2.3" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/imce-8.x-2.3.zip", - "reference": "8.x-2.3", - "shasum": "87548af8f66ef91146b70046755c1700a3847be6" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.3", - "datestamp": "1599926540", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "See contributors", - "homepage": "https://www.drupal.org/node/2841111/committers", - "role": "Developer" - }, - { - "name": "ufku", - "homepage": "https://www.drupal.org/user/9910" - } - ], - "description": "Provides a file manager supporting personal folders.", - "homepage": "https://drupal.org/project/imce", - "support": { - "source": "https://git.drupalcode.org/project/imce", - "issues": "https://www.drupal.org/project/issues/imce?version=8.x" - } - }, - { - "name": "drupal/jquery_ui", - "version": "1.4.0", - "version_normalized": "1.4.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/jquery_ui.git", - "reference": "8.x-1.4" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/jquery_ui-8.x-1.4.zip", - "reference": "8.x-1.4", - "shasum": "64c19ecc8902e2b4b1ab0cc5f5fe28dbc83bfebe" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.4", - "datestamp": "1582149957", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "RobLoach", - "homepage": "https://www.drupal.org/user/61114" - }, - { - "name": "jjeff", - "homepage": "https://www.drupal.org/user/17190" - }, - { - "name": "lauriii", - "homepage": "https://www.drupal.org/user/1078742" - }, - { - "name": "litwol", - "homepage": "https://www.drupal.org/user/78134" - }, - { - "name": "mfb", - "homepage": "https://www.drupal.org/user/12302" - }, - { - "name": "mfer", - "homepage": "https://www.drupal.org/user/25701" - }, - { - "name": "mikelutz", - "homepage": "https://www.drupal.org/user/2972409" - }, - { - "name": "sun", - "homepage": "https://www.drupal.org/user/54136" - }, - { - "name": "webchick", - "homepage": "https://www.drupal.org/user/24967" - }, - { - "name": "zrpnr", - "homepage": "https://www.drupal.org/user/1448368" - } - ], - "description": "Provides jQuery UI library.", - "homepage": "https://www.drupal.org/project/jquery_ui", - "support": { - "source": "https://git.drupalcode.org/project/jquery_ui" - } - }, - { - "name": "drupal/jquery_ui_draggable", - "version": "1.2.0", - "version_normalized": "1.2.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/jquery_ui_draggable.git", - "reference": "8.x-1.2" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/jquery_ui_draggable-8.x-1.2.zip", - "reference": "8.x-1.2", - "shasum": "09e17046e38aebf84ed573822b0d5be6de3f0c94" - }, - "require": { - "drupal/core": "^8 || ^9", - "drupal/jquery_ui": "*" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.2", - "datestamp": "1582150027", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "bnjmnm", - "homepage": "https://www.drupal.org/user/2369194" - }, - { - "name": "lauriii", - "homepage": "https://www.drupal.org/user/1078742" - }, - { - "name": "zrpnr", - "homepage": "https://www.drupal.org/user/1448368" - } - ], - "description": "Provides jQuery UI Draggable library.", - "homepage": "https://www.drupal.org/project/jquery_ui_draggable", - "support": { - "source": "https://git.drupalcode.org/project/jquery_ui_draggable" - } - }, - { - "name": "drupal/jquery_ui_droppable", - "version": "1.2.0", - "version_normalized": "1.2.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/jquery_ui_droppable.git", - "reference": "8.x-1.2" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/jquery_ui_droppable-8.x-1.2.zip", - "reference": "8.x-1.2", - "shasum": "6e53043f2d3215f211721eea4d4c6ab5d1672b14" - }, - "require": { - "drupal/core": "^8 || ^9", - "drupal/jquery_ui": "*", - "drupal/jquery_ui_draggable": "*" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.2", - "datestamp": "1582150071", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "bnjmnm", - "homepage": "https://www.drupal.org/user/2369194" - }, - { - "name": "lauriii", - "homepage": "https://www.drupal.org/user/1078742" - }, - { - "name": "zrpnr", - "homepage": "https://www.drupal.org/user/1448368" - } - ], - "description": "Provides jQuery UI Droppable library.", - "homepage": "https://www.drupal.org/project/jquery_ui_droppable", - "support": { - "source": "https://git.drupalcode.org/project/jquery_ui_droppable" - } - }, - { - "name": "drupal/kint", - "version": "2.1.0", - "version_normalized": "2.1.0.0", - "require": { - "drupal/core": "~8.0", - "drupal/devel": "^2" - }, - "type": "metapackage", - "extra": { - "drupal": { - "version": "8.x-2.1", - "datestamp": "1556799496", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "drupalspoons", - "homepage": "https://www.drupal.org/user/3647684" - }, - { - "name": "moshe weitzman", - "homepage": "https://www.drupal.org/user/23" - } - ], - "description": "Wrapper for Kint debugging tool.", - "homepage": "https://www.drupal.org/project/devel", - "support": { - "source": "https://git.drupalcode.org/project/devel" - } - }, - { - "name": "drupal/ludwig", - "version": "1.6.0", - "version_normalized": "1.6.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/ludwig.git", - "reference": "8.x-1.6" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/ludwig-8.x-1.6.zip", - "reference": "8.x-1.6", - "shasum": "33b1fcfb794cb69a1425bf4259a7a3847301fd49" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.6", - "datestamp": "1611958525", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "bojanz", - "homepage": "https://www.drupal.org/user/86106" - }, - { - "name": "devad", - "homepage": "https://www.drupal.org/user/2268520" - }, - { - "name": "jsacksick", - "homepage": "https://www.drupal.org/user/972218" - }, - { - "name": "mglaman", - "homepage": "https://www.drupal.org/user/2416470" - } - ], - "description": "Provides a manual alternative to Composer.", - "homepage": "https://www.drupal.org/project/ludwig", - "support": { - "source": "https://git.drupalcode.org/project/ludwig" - } - }, - { - "name": "drupal/mailsystem", - "version": "4.3.0", - "version_normalized": "4.3.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/mailsystem.git", - "reference": "8.x-4.3" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/mailsystem-8.x-4.3.zip", - "reference": "8.x-4.3", - "shasum": "1a74016e268ff207535be5d5e42ac8f72ac89050" - }, - "require": { - "drupal/core": "^8.7.7 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-4.3", - "datestamp": "1586203024", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Berdir", - "homepage": "https://www.drupal.org/user/214652" - }, - { - "name": "Les Lim", - "homepage": "https://www.drupal.org/user/84263" - }, - { - "name": "Manuel Garcia", - "homepage": "https://www.drupal.org/user/213194" - }, - { - "name": "Nafes", - "homepage": "https://www.drupal.org/user/2489926" - }, - { - "name": "miro_dietiker", - "homepage": "https://www.drupal.org/user/227761" - }, - { - "name": "pillarsdotnet", - "homepage": "https://www.drupal.org/user/36148" - } - ], - "description": "Mail System", - "homepage": "https://www.drupal.org/project/mailsystem", - "support": { - "source": "https://git.drupalcode.org/project/mailsystem" - } - }, - { - "name": "drupal/matomo", - "version": "1.11.0", - "version_normalized": "1.11.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/matomo.git", - "reference": "8.x-1.11" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/matomo-8.x-1.11.zip", - "reference": "8.x-1.11", - "shasum": "82be96c20ab15df03d199ab98d047cef6e67d40b" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "require-dev": { - "drupal/php": "*", - "drupal/token": "*" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.11", - "datestamp": "1601651459", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Carsten Logemann", - "homepage": "https://www.drupal.org/u/C_Logemann" - }, - { - "name": "Shelane French", - "homepage": "https://www.drupal.org/u/shelane" - }, - { - "name": "See other contributors", - "homepage": "https://www.drupal.org/node/247808/committers" - } - ], - "description": "Adds Matomo javascript tracking code to all your site's pages", - "homepage": "https://www.drupal.org/project/matomo", - "support": { - "source": "https://git.drupal.org/project/matomo.git", - "issues": "https://www.drupal.org/project/issues/matomo" - } - }, - { - "name": "drupal/memcache", - "version": "2.2.0", - "version_normalized": "2.2.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/memcache.git", - "reference": "8.x-2.2" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/memcache-8.x-2.2.zip", - "reference": "8.x-2.2", - "shasum": "1d9876763c7ef04a9bba698ddcadbe708037fed2" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.2", - "datestamp": "1601053267", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "branch-alias": { - "dev-8.x-2.x": "2.x-dev" - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Fabianx", - "homepage": "https://www.drupal.org/user/693738" - }, - { - "name": "Jeremy", - "homepage": "https://www.drupal.org/user/409" - }, - { - "name": "bdragon", - "homepage": "https://www.drupal.org/user/53081" - }, - { - "name": "catch", - "homepage": "https://www.drupal.org/user/35733" - }, - { - "name": "damiankloip", - "homepage": "https://www.drupal.org/user/1037976" - }, - { - "name": "japerry", - "homepage": "https://www.drupal.org/user/45640" - }, - { - "name": "jvandyk", - "homepage": "https://www.drupal.org/user/2375" - }, - { - "name": "robertDouglass", - "homepage": "https://www.drupal.org/user/5449" - } - ], - "description": "High performance integration with memcache.", - "homepage": "http://drupal.org/project/memcache", - "support": { - "source": "https://git.drupalcode.org/project/memcache", - "issues": "https://www.drupal.org/project/issues/memcache" - } - }, - { - "name": "drupal/menu_block", - "version": "1.6.0", - "version_normalized": "1.6.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/menu_block.git", - "reference": "8.x-1.6" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/menu_block-8.x-1.6.zip", - "reference": "8.x-1.6", - "shasum": "3da96af15c3a5f5f1966e28b6e87b74228617998" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.6", - "datestamp": "1587721600", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Dave Reid", - "homepage": "https://www.drupal.org/user/53892" - }, - { - "name": "JohnAlbin", - "homepage": "https://www.drupal.org/user/32095" - }, - { - "name": "RenatoG", - "homepage": "https://www.drupal.org/user/3326031" - }, - { - "name": "joelpittet", - "homepage": "https://www.drupal.org/user/160302" - }, - { - "name": "kim.pepper", - "homepage": "https://www.drupal.org/user/370574" - }, - { - "name": "rrrob", - "homepage": "https://www.drupal.org/user/273533" - } - ], - "description": "Provides configurable blocks of menu links.", - "homepage": "https://www.drupal.org/project/menu_block", - "support": { - "source": "https://git.drupalcode.org/project/menu_block" - } - }, - { - "name": "drupal/menu_breadcrumb", - "version": "1.14.0", - "version_normalized": "1.14.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/menu_breadcrumb.git", - "reference": "8.x-1.14" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/menu_breadcrumb-8.x-1.14.zip", - "reference": "8.x-1.14", - "shasum": "3edeb447410cdb0635d0babbfc641010014bee7f" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.14", - "datestamp": "1598626277", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "RyanPrice", - "homepage": "https://www.drupal.org/user/873848" - }, - { - "name": "aaron", - "homepage": "https://www.drupal.org/user/33420" - }, - { - "name": "gdevlugt", - "homepage": "https://www.drupal.org/user/167273" - }, - { - "name": "rphair", - "homepage": "https://www.drupal.org/user/3196607" - }, - { - "name": "vaibhavjain", - "homepage": "https://www.drupal.org/user/1159692" - }, - { - "name": "xurizaemon", - "homepage": "https://www.drupal.org/user/76026" - } - ], - "description": "Create breadcrumbs from nested menu titles and/or taxonomy membership.", - "homepage": "https://www.drupal.org/project/menu_breadcrumb", - "support": { - "source": "https://git.drupalcode.org/project/menu_breadcrumb" - } - }, - { - "name": "drupal/menu_force", - "version": "1.2.0", - "version_normalized": "1.2.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/menu_force.git", - "reference": "8.x-1.2" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/menu_force-8.x-1.2.zip", - "reference": "8.x-1.2", - "shasum": "96036cf057002223ee08d1f03e494cbad25439ac" - }, - "require": { - "drupal/core": "^8.7.7 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.2", - "datestamp": "1593463689", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "BarisW", - "homepage": "https://www.drupal.org/user/107229" - }, - { - "name": "perennial.sky", - "homepage": "https://www.drupal.org/user/2622667" - }, - { - "name": "scuba_fly", - "homepage": "https://www.drupal.org/user/953390" - } - ], - "description": "Makes sure a node gets added to the menu system on specific content types", - "homepage": "https://www.drupal.org/project/menu_force", - "support": { - "source": "https://git.drupalcode.org/project/menu_force" - } - }, - { - "name": "drupal/metatag", - "version": "1.15.0", - "version_normalized": "1.15.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/metatag.git", - "reference": "8.x-1.15" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/metatag-8.x-1.15.zip", - "reference": "8.x-1.15", - "shasum": "7658d7286fdc075ea72a6ec36aea737b1182b5d8" - }, - "require": { - "drupal/core": "^8 || ^9", - "drupal/token": "^1.0" - }, - "require-dev": { - "drupal/metatag_dc": "*", - "drupal/metatag_open_graph": "*", - "drupal/page_manager": "4.x-dev", - "drupal/panelizer": "4.x-dev", - "drupal/redirect": "1.x-dev" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.15", - "datestamp": "1611210662", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "See contributors", - "homepage": "https://www.drupal.org/node/640498/committers", - "role": "Developer" - }, - { - "name": "Dave Reid", - "homepage": "https://www.drupal.org/user/53892" - } - ], - "description": "Manage meta tags for all entities.", - "homepage": "https://www.drupal.org/project/metatag", - "keywords": [ - "Drupal", - "seo" - ], - "support": { - "source": "https://git.drupalcode.org/project/metatag", - "issues": "https://www.drupal.org/project/issues/metatag", - "docs": "https://www.drupal.org/docs/8/modules/metatag" - } - }, - { - "name": "drupal/migrate_devel", - "version": "1.4.0", - "version_normalized": "1.4.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/migrate_devel.git", - "reference": "8.x-1.4" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/migrate_devel-8.x-1.4.zip", - "reference": "8.x-1.4", - "shasum": "d8b6c8b1c6238a3a1cae241ce5dca759028c9504" - }, - "require": { - "drupal/core": "^8", - "drupal/devel": "*", - "drupal/kint": "*" - }, - "conflict": { - "drupal/core": ">=9", - "drush/drush": ">=9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.4", - "datestamp": "1592350448", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Derimagia", - "homepage": "https://www.drupal.org/user/819640" - }, - { - "name": "aczietlow", - "homepage": "https://www.drupal.org/user/1616656" - }, - { - "name": "andrewmacpherson", - "homepage": "https://www.drupal.org/user/265648" - } - ], - "description": "Migrate Development Tools", - "homepage": "https://www.drupal.org/project/migrate_devel", - "support": { - "source": "https://git.drupalcode.org/project/migrate_devel", - "issues": "https://www.drupal.org/project/issues/migrate_devel" - } - }, - { - "name": "drupal/migrate_plus", - "version": "4.2.0", - "version_normalized": "4.2.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/migrate_plus.git", - "reference": "8.x-4.2" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/migrate_plus-8.x-4.2.zip", - "reference": "8.x-4.2", - "shasum": "5736a43e39cc5c091d54ceef2849ea35ba979af3" - }, - "require": { - "drupal/core": "^8.3" - }, - "require-dev": { - "drupal/entity": "*", - "drupal/migrate_example_advanced_setup": "*", - "drupal/migrate_example_setup": "*", - "drupal/migrate_tools": "*", - "drupal/profile": "*" - }, - "suggest": { - "ext-soap": "*", - "sainsburys/guzzle-oauth2-plugin": "3.0 required for the OAuth2 authentication plugin" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-4.2", - "datestamp": "1555683487", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Mike Ryan", - "homepage": "https://www.drupal.org/u/mikeryan", - "role": "Maintainer" - }, - { - "name": "mikeryan", - "homepage": "https://www.drupal.org/user/4420" - } - ], - "description": "Enhancements to core migration support.", - "homepage": "https://www.drupal.org/project/migrate_plus", - "support": { - "source": "https://cgit.drupalcode.org/migrate_plus", - "issues": "https://www.drupal.org/project/issues/migrate_plus", - "irc": "irc://irc.freenode.org/drupal-migrate" - } - }, - { - "name": "drupal/migrate_tools", - "version": "4.5.0", - "version_normalized": "4.5.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/migrate_tools.git", - "reference": "8.x-4.5" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/migrate_tools-8.x-4.5.zip", - "reference": "8.x-4.5", - "shasum": "06390b359bf53c50a30f2d6dc4c7542bfb1fe7ca" - }, - "require": { - "drupal/core": "^8 || ^9", - "drupal/migrate_plus": "^4 || ^5" - }, - "require-dev": { - "drupal/migrate_plus": "4.x-dev", - "drupal/migrate_source_csv": "^2.2", - "drush/drush": "^10" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-4.5", - "datestamp": "1574693285", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "drush": { - "services": { - "drush.services.yml": "^9 || ^10" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "drupalspoons", - "homepage": "https://www.drupal.org/user/3647684" - }, - { - "name": "mikeryan", - "homepage": "https://www.drupal.org/user/4420" - } - ], - "description": "Tools to assist in developing and running migrations.", - "homepage": "http://drupal.org/project/migrate_tools", - "support": { - "source": "http://cgit.drupalcode.org/migrate_tools", - "issues": "http://drupal.org/project/migrate_tools", - "irc": "irc://irc.freenode.org/drupal-migrate" - } - }, - { - "name": "drupal/migrate_upgrade", - "version": "3.2.0", - "version_normalized": "3.2.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/migrate_upgrade.git", - "reference": "8.x-3.2" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/migrate_upgrade-8.x-3.2.zip", - "reference": "8.x-3.2", - "shasum": "f7be28c9fa9e2c56db24fafaf4e9cd6815582aed" - }, - "require": { - "drupal/core": "^8 || ^9", - "drupal/migrate_plus": "^4 || ^5", - "drush/drush": "^8 || ^9 || ^10", - "php": ">7.1" - }, - "require-dev": { - "drupal/migrate_plus": "^5", - "drush/drush": "^10" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-3.2", - "datestamp": "1588260599", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "drush": { - "services": { - "drush.services.yml": "^9 || ^10" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Mike Ryan", - "homepage": "https://www.drupal.org/u/mikeryan", - "role": "Maintainer" - }, - { - "name": "Lucas Hedding", - "homepage": "https://www.drupal.org/u/heddn", - "role": "Maintainer" - } - ], - "description": "Drush support for direct upgrades from older Drupal versions.", - "homepage": "https://www.drupal.org/project/migrate_upgrade", - "support": { - "source": "https://git.drupalcode.org/project/migrate_upgrade", - "issues": "https://www.drupal.org/project/issues/migrate_upgrade", - "slack": "#migrate" - } - }, - { - "name": "drupal/module_filter", - "version": "3.1.0", - "version_normalized": "3.1.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/module_filter.git", - "reference": "8.x-3.1" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/module_filter-8.x-3.1.zip", - "reference": "8.x-3.1", - "shasum": "39d627ce60280ae54bcf9beae217b85cce1969e4" - }, - "require": { - "drupal/core": "~8.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-3.1", - "datestamp": "1507650844", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "andrey.troeglazov", - "homepage": "https://www.drupal.org/user/3145389" - }, - { - "name": "greenSkin", - "homepage": "https://www.drupal.org/user/173855" - } - ], - "description": "Filter the modules list.", - "homepage": "https://www.drupal.org/project/module_filter", - "support": { - "source": "https://git.drupalcode.org/project/module_filter" - } - }, - { - "name": "drupal/node_view_permissions", - "version": "1.4.0", - "version_normalized": "1.4.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/node_view_permissions.git", - "reference": "8.x-1.4" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/node_view_permissions-8.x-1.4.zip", - "reference": "8.x-1.4", - "shasum": "ba113ff1be022517a739dbf16d5caaae6dcccfd9" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.4", - "datestamp": "1603096039", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "adci_contributor", - "homepage": "https://www.drupal.org/user/1830536" - }, - { - "name": "adcillc", - "homepage": "https://www.drupal.org/user/366450" - }, - { - "name": "hoter", - "homepage": "https://www.drupal.org/user/1677790" - } - ], - "description": "Enables permissions \"View own content\" and \"View any content\" for each content type.", - "homepage": "https://www.drupal.org/project/node_view_permissions", - "support": { - "source": "https://git.drupalcode.org/project/node_view_permissions" - } - }, - { - "name": "drupal/openid_connect", - "version": "1.0.0", - "version_normalized": "1.0.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/openid_connect.git", - "reference": "8.x-1.0" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/openid_connect-8.x-1.0.zip", - "reference": "8.x-1.0", - "shasum": "62127d6f81950124c41a76f921678ab6f0a651e3" - }, - "require": { - "drupal/core": "^8.8 || ^9", - "ext-json": "*" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.0", - "datestamp": "1608316550", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Mario Steinitz", - "homepage": "https://www.drupal.org/user/2536014" - }, - { - "name": "balintk", - "homepage": "https://www.drupal.org/user/613760" - }, - { - "name": "bojanz", - "homepage": "https://www.drupal.org/user/86106" - }, - { - "name": "jcnventura", - "homepage": "https://www.drupal.org/user/122464" - }, - { - "name": "pfrilling", - "homepage": "https://www.drupal.org/user/169695" - }, - { - "name": "pjcdawkins", - "homepage": "https://www.drupal.org/user/1025236" - }, - { - "name": "robertDouglass", - "homepage": "https://www.drupal.org/user/5449" - }, - { - "name": "sanduhrs", - "homepage": "https://www.drupal.org/user/28074" - } - ], - "description": "A pluggable client implementation for the OpenID Connect protocol.", - "homepage": "https://www.drupal.org/project/openid_connect", - "keywords": [ - "Drupal" - ], - "support": { - "source": "https://git.drupalcode.org/project/openid_connect", - "issues": "https://www.drupal.org/project/issues/openid_connect" - } - }, - { - "name": "drupal/panelbutton", - "version": "1.3.0", - "version_normalized": "1.3.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/panelbutton.git", - "reference": "8.x-1.3" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/panelbutton-8.x-1.3.zip", - "reference": "8.x-1.3", - "shasum": "1d65e6b9d9b1dfbc27364e2b713f63826bc33031" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.3", - "datestamp": "1592593051", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Kevin Quillen (kevinquillen)", - "homepage": "https://www.drupal.org/u/kevinquillen", - "role": "Maintainer" - }, - { - "name": "ddrozdik", - "homepage": "https://www.drupal.org/user/574124" - }, - { - "name": "kevinquillen", - "homepage": "https://www.drupal.org/user/317279" - } - ], - "description": "Adds the Panel Button plugin to CKEditor. This plugin is a utility plugin that is required by certain user-facing CKEditor plugins.", - "homepage": "http://drupal.org/project/panelbutton", - "keywords": [ - "Drupal" - ], - "support": { - "source": "http://cgit.drupalcode.org/panelbutton", - "issues": "http://drupal.org/project/issues/panelbutton" - } - }, - { - "name": "drupal/panelizer", - "version": "4.4.0", - "version_normalized": "4.4.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/panelizer.git", - "reference": "8.x-4.4" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/panelizer-8.x-4.4.zip", - "reference": "8.x-4.4", - "shasum": "2d19f0be1ad05a0882a276befabf746041b1b5d8" - }, - "require": { - "drupal/core": "^8.8 || ^9", - "drupal/ctools": ">=3.1.0", - "drupal/ctools_block": "*", - "drupal/panels": ">=4.4.0", - "drupal/panels_ipe": "*" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-4.4", - "datestamp": "1588097387", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "branch-alias": { - "dev-8.x-4.x": "4.x-dev" - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Damien McKenna", - "homepage": "https://www.drupal.org/u/damienmckenna" - }, - { - "name": "Kris Vanderwater", - "homepage": "https://www.drupal.org/u/eclipsegc" - }, - { - "name": "David Snopek", - "homepage": "https://www.drupal.org/u/dsnopek" - }, - { - "name": "Jakob Perry", - "homepage": "https://www.drupal.org/u/japerry" - }, - { - "name": "Earl Miles", - "homepage": "https://www.drupal.org/u/merlinofchaos" - }, - { - "name": "See other contributors", - "homepage": "https://www.drupal.org/node/1072922/committers" - }, - { - "name": "phenaproxima", - "homepage": "https://www.drupal.org/user/205645" - }, - { - "name": "tim.plunkett", - "homepage": "https://www.drupal.org/user/241634" - } - ], - "description": "Allow any entity view mode to be rendered using a Panels display.", - "homepage": "https://www.drupal.org/project/panelizer", - "support": { - "source": "http://git.drupal.org/project/panelizer.git", - "issues": "https://www.drupal.org/project/issues/panelizer", - "irc": "irc://irc.freenode.org/drupal-scotch" - } - }, - { - "name": "drupal/panels", - "version": "4.6.0", - "version_normalized": "4.6.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/panels.git", - "reference": "8.x-4.6" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/panels-8.x-4.6.zip", - "reference": "8.x-4.6", - "shasum": "6430436a4d8fb64f8c113729dd92505a1e46b794" - }, - "require": { - "drupal/core": "^8.8 || ^9", - "drupal/ctools": ">=3.0.0", - "drupal/jquery_ui_droppable": "^1.2" - }, - "require-dev": { - "drupal/jquery_ui_droppable": "*", - "drupal/page_manager": "^4" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-4.6", - "datestamp": "1585870866", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "branch-alias": { - "dev-8.x-4.x": "4.x-dev" - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Jakob Perry", - "homepage": "https://www.drupal.org/u/japerry" - }, - { - "name": "Samuel Mortenson", - "homepage": "https://www.drupal.org/u/samuel.mortenson" - }, - { - "name": "See other contributors", - "homepage": "https://www.drupal.org/node/74958/committers" - }, - { - "name": "japerry", - "homepage": "https://www.drupal.org/user/45640" - }, - { - "name": "joelpittet", - "homepage": "https://www.drupal.org/user/160302" - }, - { - "name": "merlinofchaos", - "homepage": "https://www.drupal.org/user/26979" - }, - { - "name": "neclimdul", - "homepage": "https://www.drupal.org/user/48673" - }, - { - "name": "phenaproxima", - "homepage": "https://www.drupal.org/user/205645" - }, - { - "name": "samuel.mortenson", - "homepage": "https://www.drupal.org/user/2582268" - }, - { - "name": "tim.plunkett", - "homepage": "https://www.drupal.org/user/241634" - } - ], - "description": "Core Panels display functions; provides no external UI, at least one other Panels module should be enabled.", - "homepage": "https://www.drupal.org/project/panels", - "support": { - "source": "http://git.drupal.org/project/panels.git", - "issues": "https://www.drupal.org/project/issues/panels", - "irc": "irc://irc.freenode.org/drupal-scotch" - } - }, - { - "name": "drupal/panels_ipe", - "version": "4.6.0", - "version_normalized": "4.6.0.0", - "require": { - "drupal/core": "^8.8 || ^9", - "drupal/jquery_ui_droppable": "*", - "drupal/panels": "*" - }, - "type": "metapackage", - "extra": { - "drupal": { - "version": "8.x-4.6", - "datestamp": "1585870866", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "EclipseGc", - "homepage": "https://www.drupal.org/user/61203" - }, - { - "name": "Letharion", - "homepage": "https://www.drupal.org/user/373603" - }, - { - "name": "esmerel", - "homepage": "https://www.drupal.org/user/164022" - }, - { - "name": "japerry", - "homepage": "https://www.drupal.org/user/45640" - }, - { - "name": "joelpittet", - "homepage": "https://www.drupal.org/user/160302" - }, - { - "name": "merlinofchaos", - "homepage": "https://www.drupal.org/user/26979" - }, - { - "name": "neclimdul", - "homepage": "https://www.drupal.org/user/48673" - }, - { - "name": "phenaproxima", - "homepage": "https://www.drupal.org/user/205645" - }, - { - "name": "samuel.mortenson", - "homepage": "https://www.drupal.org/user/2582268" - }, - { - "name": "tim.plunkett", - "homepage": "https://www.drupal.org/user/241634" - } - ], - "description": "Panels In-place editor.", - "homepage": "https://www.drupal.org/project/panels", - "support": { - "source": "https://git.drupalcode.org/project/panels" - } - }, - { - "name": "drupal/paragraphs", - "version": "1.12.0", - "version_normalized": "1.12.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/paragraphs.git", - "reference": "8.x-1.12" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/paragraphs-8.x-1.12.zip", - "reference": "8.x-1.12", - "shasum": "3b67d8af1160af42d93a4610be1e02869e428965" - }, - "require": { - "drupal/core": "^8.8 || ^9", - "drupal/entity_reference_revisions": "~1.3" - }, - "require-dev": { - "drupal/block_field": "~1.0", - "drupal/ctools": "3.x-dev", - "drupal/diff": "~1.0", - "drupal/entity_browser": "2.x-dev", - "drupal/entity_usage": "2.x-dev", - "drupal/field_group": "3.x-dev", - "drupal/inline_entity_form": "~1.0", - "drupal/paragraphs-paragraphs_library": "*", - "drupal/replicate": "~1.0", - "drupal/search_api": "~1.0", - "drupal/search_api_db": "*" - }, - "suggest": { - "drupal/entity_browser": "Recommended for an improved user experience when using the Paragraphs library module" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.12", - "datestamp": "1590140081", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Berdir", - "homepage": "https://www.drupal.org/user/214652" - }, - { - "name": "Frans", - "homepage": "https://www.drupal.org/user/514222" - }, - { - "name": "Primsi", - "homepage": "https://www.drupal.org/user/282629" - }, - { - "name": "jeroen.b", - "homepage": "https://www.drupal.org/user/1853532" - }, - { - "name": "jstoller", - "homepage": "https://www.drupal.org/user/99012" - }, - { - "name": "miro_dietiker", - "homepage": "https://www.drupal.org/user/227761" - } - ], - "description": "Enables the creation of Paragraphs entities.", - "homepage": "https://www.drupal.org/project/paragraphs", - "support": { - "source": "https://git.drupalcode.org/project/paragraphs" - } - }, - { - "name": "drupal/pathauto", - "version": "1.8.0", - "version_normalized": "1.8.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/pathauto.git", - "reference": "8.x-1.8" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/pathauto-8.x-1.8.zip", - "reference": "8.x-1.8", - "shasum": "ede3216abb9c4f77709338d9147334c595046329" - }, - "require": { - "drupal/core": "^8.8 || ^9", - "drupal/ctools": "*", - "drupal/token": "*" - }, - "suggest": { - "drupal/redirect": "When installed Pathauto will provide a new \"Update Action\" in case your URLs change. This is the recommended update action and is considered the best practice for SEO and usability." - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.8", - "datestamp": "1588103046", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "drush": { - "services": { - "drush.services.yml": "^9 || ^10" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Berdir", - "homepage": "https://www.drupal.org/user/214652" - }, - { - "name": "Dave Reid", - "homepage": "https://www.drupal.org/user/53892" - }, - { - "name": "Freso", - "homepage": "https://www.drupal.org/user/27504" - }, - { - "name": "greggles", - "homepage": "https://www.drupal.org/user/36762" - } - ], - "description": "Provides a mechanism for modules to automatically generate aliases for the content they manage.", - "homepage": "https://www.drupal.org/project/pathauto", - "support": { - "source": "https://cgit.drupalcode.org/pathauto", - "issues": "https://www.drupal.org/project/issues/pathauto", - "documentation": "https://www.drupal.org/docs/8/modules/pathauto" - } - }, - { - "name": "drupal/permissions_by_term", - "version": "2.29.0", - "version_normalized": "2.29.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/permissions_by_term.git", - "reference": "8.x-2.29" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/permissions_by_term-8.x-2.29.zip", - "reference": "8.x-2.29", - "shasum": "40d06fb24d271d2022481fcedc0d4e9c042b6e3b" - }, - "require": { - "drupal/core": "^8.0", - "php": ">=7.1.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.29", - "datestamp": "1612278248", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Peter Majmesku", - "homepage": "https://www.drupal.org/user/786132", - "email": "majmesku@publicplan.de" - }, - { - "name": "SaschaHannes", - "homepage": "https://www.drupal.org/user/3536189" - }, - { - "name": "marcoliver", - "homepage": "https://www.drupal.org/user/1529744" - } - ], - "description": "Restricts access to nodes by taxonomy terms in relation to users and their roles.", - "homepage": "https://www.drupal.org/project/permissions_by_term", - "support": { - "source": "https://git.drupalcode.org/project/permissions_by_term" - } - }, - { - "name": "drupal/piwik", - "version": "1.4.0", - "version_normalized": "1.4.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/piwik.git", - "reference": "8.x-1.4" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/piwik-8.x-1.4.zip", - "reference": "8.x-1.4", - "shasum": "3692831f4b3de636e90679fb052ba8f30e49ac97" - }, - "require": { - "drupal/core": "~8.0", - "drupal/matomo": "^1.0" - }, - "require-dev": { - "drupal/php": "*", - "drupal/token": "*" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.4", - "datestamp": "1530437786", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "hass", - "homepage": "https://www.drupal.org/u/hass" - }, - { - "name": "See other contributors", - "homepage": "https://www.drupal.org/node/247808/committers" - } - ], - "description": "Adds Piwik javascript tracking code to all your site's pages", - "homepage": "https://www.drupal.org/project/piwik", - "support": { - "source": "http://git.drupal.org/project/piwik.git", - "issues": "https://www.drupal.org/project/issues/piwik" - } - }, - { - "name": "drupal/recaptcha", - "version": "2.5.0", - "version_normalized": "2.5.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/recaptcha.git", - "reference": "8.x-2.5" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/recaptcha-8.x-2.5.zip", - "reference": "8.x-2.5", - "shasum": "ffc4e334c2b09cb04b75fa9e0df3f63d1ebde0bc" - }, - "require": { - "drupal/captcha": "^1.0.0-alpha1", - "drupal/core": "~8.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.5", - "datestamp": "1580340616", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "hass", - "homepage": "https://www.drupal.org/u/hass" - }, - { - "name": "See other contributors", - "homepage": "https://www.drupal.org/node/147903/committers" - }, - { - "name": "amykhailova", - "homepage": "https://www.drupal.org/user/2892725" - }, - { - "name": "diolan", - "homepage": "https://www.drupal.org/user/2336786" - }, - { - "name": "hass", - "homepage": "https://www.drupal.org/user/85918" - }, - { - "name": "id.medion", - "homepage": "https://www.drupal.org/user/2542592" - }, - { - "name": "kim.pepper", - "homepage": "https://www.drupal.org/user/370574" - }, - { - "name": "rfay", - "homepage": "https://www.drupal.org/user/30906" - }, - { - "name": "soxofaan", - "homepage": "https://www.drupal.org/user/41478" - }, - { - "name": "wundo", - "homepage": "https://www.drupal.org/user/25523" - } - ], - "description": "Protect your website from spam and abuse while letting real people pass through with ease.", - "homepage": "https://www.drupal.org/project/recaptcha", - "support": { - "source": "https://git.drupal.org/project/recaptcha.git", - "issues": "https://www.drupal.org/project/issues/recaptcha" - } - }, - { - "name": "drupal/redirect", - "version": "1.6.0", - "version_normalized": "1.6.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/redirect.git", - "reference": "8.x-1.6" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/redirect-8.x-1.6.zip", - "reference": "8.x-1.6", - "shasum": "f848e001deac8425ae57d4b9397087c491d37294" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.6", - "datestamp": "1589312204", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Berdir", - "homepage": "https://www.drupal.org/user/214652" - }, - { - "name": "Dave Reid", - "homepage": "https://www.drupal.org/user/53892" - }, - { - "name": "pifagor", - "homepage": "https://www.drupal.org/user/2375692" - } - ], - "description": "Allows users to redirect from old URLs to new URLs.", - "homepage": "https://www.drupal.org/project/redirect", - "support": { - "source": "https://git.drupalcode.org/project/redirect" - } - }, - { - "name": "drupal/require_login", - "version": "2.1.0", - "version_normalized": "2.1.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/require_login.git", - "reference": "8.x-2.1" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/require_login-8.x-2.1.zip", - "reference": "8.x-2.1", - "shasum": "5e1e1e95597005fc132744c42547bf6d16c3a60d" - }, - "require": { - "drupal/core": "~8.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.1", - "datestamp": "1551549486", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "robphillips", - "homepage": "https://www.drupal.org/user/459772" - } - ], - "description": "Require login authentication regardless of user permissions.", - "homepage": "https://www.drupal.org/project/require_login", - "support": { - "source": "https://git.drupalcode.org/project/require_login" - } - }, - { - "name": "drupal/rules", - "version": "3.0.0-alpha6", - "version_normalized": "3.0.0.0-alpha6", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/rules.git", - "reference": "8.x-3.0-alpha6" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/rules-8.x-3.0-alpha6.zip", - "reference": "8.x-3.0-alpha6", - "shasum": "073bf5c23f0ef8f1aebf56538249d50d631d5a24" - }, - "require": { - "drupal/core": "^8.7", - "drupal/typed_data": "1.x-dev" - }, - "require-dev": { - "drupal/typed_data": "1.x-dev" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-3.0-alpha6", - "datestamp": "1595975406", - "security-coverage": { - "status": "not-covered", - "message": "Alpha releases are not covered by Drupal security advisories." - } - }, - "drush": { - "services": { - "drush.services.yml": "^9" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "TR", - "homepage": "https://www.drupal.org/user/202830" - }, - { - "name": "fago", - "homepage": "https://www.drupal.org/user/16747" - }, - { - "name": "klausi", - "homepage": "https://www.drupal.org/user/262198" - } - ], - "description": "React on events and conditionally evaluate actions.", - "homepage": "https://www.drupal.org/project/rules", - "support": { - "source": "https://git.drupalcode.org/project/rules", - "issues": "https://www.drupal.org/project/issues/rules" - } - }, - { - "name": "drupal/scheduler", - "version": "1.3.0", - "version_normalized": "1.3.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/scheduler.git", - "reference": "8.x-1.3" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/scheduler-8.x-1.3.zip", - "reference": "8.x-1.3", - "shasum": "704f9e289c7a42ddfb65297beb0be02e324f02c6" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "require-dev": { - "drupal/devel_generate": "^2.0 || 3.x-dev", - "drupal/rules": "^3", - "drush/drush": "^9.0 || ^10" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.3", - "datestamp": "1591436219", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "drush": { - "services": { - "drush.services.yml": "^9" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Eric Schaefer (Eric Schaefer)", - "homepage": "https://www.drupal.org/u/eric-schaefer", - "role": "Maintainer" - }, - { - "name": "Jonathan Smith (jonathan1055)", - "homepage": "https://www.drupal.org/u/jonathan1055", - "role": "Maintainer" - }, - { - "name": "Pieter Frenssen (pfrenssen)", - "homepage": "https://www.drupal.org/u/pfrenssen", - "role": "Maintainer" - }, - { - "name": "Rick Manelius (rickmanelius)", - "homepage": "https://www.drupal.org/u/rickmanelius", - "role": "Maintainer" - } - ], - "description": "Automatically publish and unpublish content at specified dates and times.", - "homepage": "https://drupal.org/project/scheduler", - "support": { - "source": "https://git.drupalcode.org/project/scheduler", - "issues": "https://www.drupal.org/project/issues/scheduler" - } - }, - { - "name": "drupal/search_api", - "version": "1.19.0", - "version_normalized": "1.19.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/search_api.git", - "reference": "8.x-1.19" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/search_api-8.x-1.19.zip", - "reference": "8.x-1.19", - "shasum": "5654e9d02117e28c585d89a25ea3cc40d20c5019" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "conflict": { - "drupal/search_api_solr": "2.* || 3.0 || 3.1" - }, - "require-dev": { - "drupal/language_fallback_fix": "@dev", - "drupal/search_api_autocomplete": "@dev", - "drupal/search_api_db": "*" - }, - "suggest": { - "drupal/facets": "Adds the ability to create faceted searches.", - "drupal/search_api_autocomplete": "Allows adding autocomplete suggestions to search fields.", - "drupal/search_api_solr": "Adds support for using Apache Solr as a backend." - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.19", - "datestamp": "1612192040", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "drush": { - "services": { - "drush.services.yml": "^9" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Thomas Seidl", - "homepage": "https://www.drupal.org/u/drunken-monkey" - }, - { - "name": "Nick Veenhof", - "homepage": "https://www.drupal.org/u/nick_vh" - }, - { - "name": "See other contributors", - "homepage": "https://www.drupal.org/node/790418/committers" - } - ], - "description": "Provides a generic framework for modules offering search capabilities.", - "homepage": "https://www.drupal.org/project/search_api", - "support": { - "source": "https://git.drupalcode.org/project/search_api", - "issues": "https://www.drupal.org/project/issues/search_api", - "irc": "irc://irc.freenode.org/drupal-search-api" - } - }, - { - "name": "drupal/simplesamlphp_auth", - "version": "3.2.0", - "version_normalized": "3.2.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/simplesamlphp_auth.git", - "reference": "8.x-3.2" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/simplesamlphp_auth-8.x-3.2.zip", - "reference": "8.x-3.2", - "shasum": "a5a2b10fc873eb8669929ad1a6d9599e47a2ca99" - }, - "require": { - "drupal/core": "^8.7|^9.0", - "drupal/externalauth": "^1.1", - "simplesamlphp/simplesamlphp": "^1.18.2" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-3.2", - "datestamp": "1580423953", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Berdir", - "homepage": "https://www.drupal.org/user/214652" - }, - { - "name": "colan", - "homepage": "https://www.drupal.org/user/58704" - }, - { - "name": "dakku", - "homepage": "https://www.drupal.org/user/97634" - }, - { - "name": "geekwisdom", - "homepage": "https://www.drupal.org/user/1662" - }, - { - "name": "snufkin", - "homepage": "https://www.drupal.org/user/58645" - }, - { - "name": "svendecabooter", - "homepage": "https://www.drupal.org/user/35369" - } - ], - "description": "Allows users to authenticate to a remote SAML identity provider (IdP) via a locally configured SimpleSAMLphp service point (SP).", - "homepage": "https://www.drupal.org/project/simplesamlphp_auth", - "support": { - "source": "https://git.drupalcode.org/project/simplesamlphp_auth" - } - }, - { - "name": "drupal/smart_trim", - "version": "1.3.0", - "version_normalized": "1.3.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/smart_trim.git", - "reference": "8.x-1.3" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/smart_trim-8.x-1.3.zip", - "reference": "8.x-1.3", - "shasum": "5894aa067fba19a3452ed8ce749f33bd9ae91907" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.3", - "datestamp": "1589766531", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Mark Casias (markie)", - "homepage": "https://www.drupal.org/u/markie", - "role": "Maintainer" - }, - { - "name": "newsignature", - "homepage": "https://www.drupal.org/user/765518" - }, - { - "name": "ultimike", - "homepage": "https://www.drupal.org/user/51132" - }, - { - "name": "volkswagenchick", - "homepage": "https://www.drupal.org/user/3332522" - } - ], - "description": "Provides a more robust alternative to 'summary or trimmed' textfield format.", - "homepage": "https://drupal.org/project/smart_trim", - "support": { - "source": "https://cgit.drupalcode.org/smart_trim", - "issues": "https://drupal.org/project/issues/smart_trim" - } - }, - { - "name": "drupal/sticky", - "version": "1.1.0", - "version_normalized": "1.1.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/sticky.git", - "reference": "8.x-1.1" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/sticky-8.x-1.1.zip", - "reference": "8.x-1.1", - "shasum": "98735598ba94c5ef2c0ae2ee77717174994724a4" - }, - "require": { - "drupal/core": "~8.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.1", - "datestamp": "1491909243", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "f0ns", - "homepage": "https://www.drupal.org/user/723426" - } - ], - "description": "Sticky is a module that gives you the ability to make any element on your website to always stay visible.", - "homepage": "https://www.drupal.org/project/sticky", - "support": { - "source": "https://git.drupalcode.org/project/sticky" - } - }, - { - "name": "drupal/token", - "version": "1.9.0", - "version_normalized": "1.9.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/token.git", - "reference": "8.x-1.9" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/token-8.x-1.9.zip", - "reference": "8.x-1.9", - "shasum": "a5d234382a1a0e4ba61d4c7a2fa10671ca656be4" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.9", - "datestamp": "1608284866", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "drush": { - "services": { - "drush.services.yml": "^9 || ^10" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Berdir", - "homepage": "https://www.drupal.org/user/214652" - }, - { - "name": "Dave Reid", - "homepage": "https://www.drupal.org/user/53892" - }, - { - "name": "eaton", - "homepage": "https://www.drupal.org/user/16496" - }, - { - "name": "fago", - "homepage": "https://www.drupal.org/user/16747" - }, - { - "name": "greggles", - "homepage": "https://www.drupal.org/user/36762" - }, - { - "name": "mikeryan", - "homepage": "https://www.drupal.org/user/4420" - } - ], - "description": "Provides a user interface for the Token API, some missing core tokens.", - "homepage": "https://www.drupal.org/project/token", - "support": { - "source": "https://git.drupalcode.org/project/token" - } - }, - { - "name": "drupal/twig_tweak", - "version": "2.9.0", - "version_normalized": "2.9.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/twig_tweak.git", - "reference": "8.x-2.9" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/twig_tweak-8.x-2.9.zip", - "reference": "8.x-2.9", - "shasum": "c45ba1a41e323a432d1ff36d0a72344b88595a39" - }, - "require": { - "drupal/core": "^8.7 || ^9.0", - "twig/twig": "^1.41 || ^2.12" - }, - "suggest": { - "symfony/var-dumper": "Better dump() function for debugging Twig variables" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.9", - "datestamp": "1608093728", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Chi", - "homepage": "https://www.drupal.org/user/556138" - } - ], - "description": "A Twig extension with some useful functions and filters for Drupal development.", - "homepage": "https://www.drupal.org/project/twig_tweak", - "keywords": [ - "Drupal", - "Twig" - ], - "support": { - "source": "https://git.drupalcode.org/project/twig_tweak", - "issues": "https://www.drupal.org/project/issues/twig_tweak" - } - }, - { - "name": "drupal/typed_data", - "version": "dev-1.x", - "version_normalized": "dev-1.x", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/typed_data.git", - "reference": "27555f47b522730d04f3b33c9a46c0acbcb3146e" - }, - "require": { - "drupal/core": "^8.8.2 || ^9" - }, - "type": "drupal-module", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - }, - "drupal": { - "version": "8.x-1.0-alpha5+21-dev", - "datestamp": "1600719315", - "security-coverage": { - "status": "not-covered", - "message": "Dev releases are not covered by Drupal security advisories." - } - }, - "drush": { - "services": { - "drush.services.yml": "^9 || ^10" - } - } - }, - "installation-source": "source", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "TR", - "homepage": "https://www.drupal.org/user/202830" - }, - { - "name": "fago", - "homepage": "https://www.drupal.org/user/16747" - } - ], - "description": "Extends the core Typed Data API with new APIs and features.", - "homepage": "https://www.drupal.org/project/typed_data", - "support": { - "source": "https://git.drupalcode.org/project/typed_data", - "issues": "https://www.drupal.org/project/issues/typed_data" - } - }, - { - "name": "drupal/ui_patterns", - "version": "1.2.0", - "version_normalized": "1.2.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/ui_patterns.git", - "reference": "8.x-1.2" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/ui_patterns-8.x-1.2.zip", - "reference": "8.x-1.2", - "shasum": "c792d38a1511e1c24386af5a8da8181d0394b824" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "require-dev": { - "composer/installers": "^1.2", - "cweagans/composer-patches": "~1.4", - "drupal/config_devel": "~1", - "drupal/core-composer-scaffold": "^8.0", - "drupal/core-dev": "^8.0", - "drupal/core-recommended": "~9.0", - "drupal/ds": "~3", - "drupal/field_group": "~3", - "drupal/page_manager": "*", - "drupal/panels": "~4", - "drupal/paragraphs": "~1", - "drupal/token": "~1", - "drush/drush": "~10", - "openeuropa/task-runner": "~1.0-beta3", - "phpro/grumphp": "~0.14" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.2", - "datestamp": "1591882155", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "composer-exit-on-patch-failure": true, - "enable-patching": true, - "drupal-scaffold": { - "locations": { - "web-root": "build/" - } - }, - "installer-paths": { - "build/core": [ - "type:drupal-core" + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Webbeh", + "homepage": "https://www.drupal.org/user/1160608" + }, + { + "name": "cobenash", + "homepage": "https://www.drupal.org/user/2138470" + }, + { + "name": "darol100", + "homepage": "https://www.drupal.org/user/2667123" + }, + { + "name": "dinarcon", + "homepage": "https://www.drupal.org/user/909522" + } + ], + "description": "This plugin adds Font Size and Font Family dropdowns that applies as inline element style.", + "homepage": "https://www.drupal.org/project/ckeditor_font", + "keywords": [ + "Drupal" + ], + "support": { + "source": "http://cgit.drupalcode.org/ckeditor_font", + "issues": "http://drupal.org/project/issues/ckeditor_font" + }, + "install-path": "../../web/modules/contrib/ckeditor_font" + }, + { + "name": "drupal/codesnippet", + "version": "1.7.0", + "version_normalized": "1.7.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/codesnippet.git", + "reference": "8.x-1.7" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/codesnippet-8.x-1.7.zip", + "reference": "8.x-1.7", + "shasum": "d620a6d1272e9811e19cc69524a991e271da142c" + }, + "require": { + "drupal-ckeditor-libraries-group/codesnippet": "^4.5.11", + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.7", + "datestamp": "1593798298", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Kevin Quillen (kevinquillen)", + "homepage": "https://www.drupal.org/u/kevinquillen", + "role": "Maintainer" + }, + { + "name": "kevinquillen", + "homepage": "https://www.drupal.org/user/317279" + }, + { + "name": "szloredan", + "homepage": "https://www.drupal.org/user/3531611" + } + ], + "description": "Adds the CodeSnippet plugin to CKEditor.", + "homepage": "http://drupal.org/project/codesnippet", + "keywords": [ + "Drupal" + ], + "support": { + "source": "http://cgit.drupalcode.org/codesnippet", + "issues": "http://drupal.org/project/issues/codesnippet" + }, + "install-path": "../../web/modules/contrib/codesnippet" + }, + { + "name": "drupal/color_field", + "version": "2.4.0", + "version_normalized": "2.4.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/color_field.git", + "reference": "8.x-2.4" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/color_field-8.x-2.4.zip", + "reference": "8.x-2.4", + "shasum": "11c163a409f4f70083f188d917fecc6052c53a2f" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "require-dev": { + "drupal/token": "~1.3", + "nickwilde1990/php-composter-phpcs-drupal": "^2.0" + }, + "suggest": { + "bower-asset/jquery-simple-color": "^v1.2.2: Provides JavaScript library necessary for the Color Grid widget", + "bower-asset/spectrum": "^1.8: Provides JavaScript library necessary for Spectrum widget." + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.4", + "datestamp": "1596479692", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "targoo", + "homepage": "https://www.drupal.org/user/431910", + "role": "Maintainer" + }, + { + "name": "Nick Wilde", + "homepage": "https://www.drupal.org/user/nickwilde", + "role": "Maintainer" + } + ], + "description": "Provides a color field type to store the color value and opacity", + "homepage": "https://www.drupal.org/project/color_field", + "support": { + "source": "https://git.drupalcode.org/project/color_field", + "issues": "https://www.drupal.org/project/issues/color_field?version=8.x" + }, + "install-path": "../../web/modules/contrib/color_field" + }, + { + "name": "drupal/colorbox", + "version": "1.7.0", + "version_normalized": "1.7.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/colorbox.git", + "reference": "8.x-1.7" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/colorbox-8.x-1.7.zip", + "reference": "8.x-1.7", + "shasum": "64c7290be86fe1d3bf80dcf4003a37b3698bba50" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "suggest": { + "jackmoore/colorbox": "The Colorbox library is required to use the drupal/colorbox module." + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.7", + "datestamp": "1614960641", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "drush": { + "services": { + "drush.services.yml": "^9" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Neslee Canil Pinto", + "homepage": "https://www.drupal.org/u/neslee-canil-pinto", + "role": "Maintainer" + }, + { + "name": "Fredrik Jonsson", + "homepage": "https://www.drupal.org/u/frjo", + "role": "Maintainer" + }, + { + "name": "Sam152", + "homepage": "https://www.drupal.org/user/1485048" + }, + { + "name": "jdwfly", + "homepage": "https://www.drupal.org/user/298179" + }, + { + "name": "rsmylski", + "homepage": "https://www.drupal.org/user/1324348" + } + ], + "description": "A light-weight, customizable lightbox plugin for jQuery.", + "homepage": "https://www.drupal.org/project/colorbox", + "support": { + "source": "https://git.drupalcode.org/project/colorbox", + "issues": "https://www.drupal.org/project/issues/colorbox" + }, + "install-path": "../../web/modules/contrib/colorbox" + }, + { + "name": "drupal/colorbutton", + "version": "1.2.0", + "version_normalized": "1.2.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/colorbutton.git", + "reference": "8.x-1.2" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/colorbutton-8.x-1.2.zip", + "reference": "8.x-1.2", + "shasum": "a3467286d9882819bc45e9573dc2253444971bfc" + }, + "require": { + "drupal/core": "^8 || ^9", + "drupal/panelbutton": "*" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.2", + "datestamp": "1589886092", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Kevin Quillen (kevinquillen)", + "homepage": "https://www.drupal.org/u/kevinquillen", + "role": "Maintainer" + }, + { + "name": "ddrozdik", + "homepage": "https://www.drupal.org/user/574124" + }, + { + "name": "kevinquillen", + "homepage": "https://www.drupal.org/user/317279" + } + ], + "description": "Adds the Color Button plugin to CKEditor.", + "homepage": "http://drupal.org/project/colorbutton", + "keywords": [ + "Drupal" + ], + "support": { + "source": "http://cgit.drupalcode.org/colorbutton", + "issues": "http://drupal.org/project/issues/colorbutton" + }, + "install-path": "../../web/modules/contrib/colorbutton" + }, + { + "name": "drupal/components", + "version": "1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/components.git", + "reference": "8.x-1.1" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/components-8.x-1.1.zip", + "reference": "8.x-1.1", + "shasum": "72af8ff1ca842556ee4b95335595c24703acdb75" + }, + "require": { + "drupal/core": "~8.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.1", + "datestamp": "1556870881", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "JohnAlbin", + "homepage": "https://www.drupal.org/user/32095" + }, + { + "name": "RobLoach", + "homepage": "https://www.drupal.org/user/61114" + } + ], + "description": "Registers “component libraries” defined in modules and themes with the Twig system", + "homepage": "https://www.drupal.org/project/components", + "support": { + "source": "https://git.drupalcode.org/project/components" + }, + "install-path": "../../web/modules/contrib/components" + }, + { + "name": "drupal/config_update", + "version": "1.7.0", + "version_normalized": "1.7.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/config_update.git", + "reference": "8.x-1.7" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/config_update-8.x-1.7.zip", + "reference": "8.x-1.7", + "shasum": "8f079abf7c2ea826a27fa5224b0770a26404c968" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.7", + "datestamp": "1586355587", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "jhodgdon", + "homepage": "https://www.drupal.org/user/155601" + }, + { + "name": "nedjo", + "homepage": "https://www.drupal.org/user/4481" + } + ], + "description": "Provides basic revert and update functionality for other modules", + "homepage": "https://www.drupal.org/project/config_update", + "support": { + "source": "https://git.drupalcode.org/project/config_update" + }, + "install-path": "../../web/modules/contrib/config_update" + }, + { + "name": "drupal/content_access", + "version": "1.0.0-alpha3", + "version_normalized": "1.0.0.0-alpha3", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/content_access.git", + "reference": "8.x-1.0-alpha3" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/content_access-8.x-1.0-alpha3.zip", + "reference": "8.x-1.0-alpha3", + "shasum": "38715d271d166cbf7ed801acd6cee6010962bc79" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "require-dev": { + "drupal/acl": "~1.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.0-alpha3", + "datestamp": "1600327861", + "security-coverage": { + "status": "not-covered", + "message": "Project has not opted into security advisory coverage!" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0" + ], + "authors": [ + { + "name": "fago", + "homepage": "https://www.drupal.org/user/16747" + }, + { + "name": "gisle", + "homepage": "https://www.drupal.org/user/409554" + }, + { + "name": "good_man", + "homepage": "https://www.drupal.org/user/265439" + } + ], + "description": "Provides flexible content access control.", + "homepage": "https://drupal.org/project/content_access", + "support": { + "source": "https://git.drupalcode.org/project/content_access" + }, + "install-path": "../../web/modules/contrib/content_access" + }, + { + "name": "drupal/context", + "version": "4.0.0-beta5", + "version_normalized": "4.0.0.0-beta5", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/context.git", + "reference": "8.x-4.0-beta5" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/context-8.x-4.0-beta5.zip", + "reference": "8.x-4.0-beta5", + "shasum": "893d7e6ce07b23764baa6fd609da811ec80c5a04" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-4.0-beta5", + "datestamp": "1600783508", + "security-coverage": { + "status": "not-covered", + "message": "Beta releases are not covered by Drupal security advisories." + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christoffer Palm", + "homepage": "http://www.oddhill.se/", + "email": "christoffer.palm@oddhill.se", + "role": "Developer" + }, + { + "name": "Steven Jones", + "homepage": "https://www.drupal.org/user/99644" + }, + { + "name": "alex_b", + "homepage": "https://www.drupal.org/user/53995" + }, + { + "name": "boshtian", + "homepage": "https://www.drupal.org/user/1773456" + }, + { + "name": "colan", + "homepage": "https://www.drupal.org/user/58704" + }, + { + "name": "emanaton", + "homepage": "https://www.drupal.org/user/120853" + }, + { + "name": "febbraro", + "homepage": "https://www.drupal.org/user/43670" + }, + { + "name": "fizk", + "homepage": "https://www.drupal.org/user/473174" + }, + { + "name": "hass", + "homepage": "https://www.drupal.org/user/85918" + }, + { + "name": "hefox", + "homepage": "https://www.drupal.org/user/426416" + }, + { + "name": "jmiccolis", + "homepage": "https://www.drupal.org/user/31731" + }, + { + "name": "nedjo", + "homepage": "https://www.drupal.org/user/4481" + }, + { + "name": "patricksettle", + "homepage": "https://www.drupal.org/user/26618" + }, + { + "name": "paulocs", + "homepage": "https://www.drupal.org/user/3640109" + }, + { + "name": "tekante", + "homepage": "https://www.drupal.org/user/640024" + }, + { + "name": "yhahn", + "homepage": "https://www.drupal.org/user/264833" + } + ], + "description": "Manage contextual conditions and reactions for different portions of your site.", + "homepage": "https://github.com/oddhill/context", + "keywords": [ + "Drupal", + "block", + "conditions", + "context", + "visibility" + ], + "support": { + "source": "https://github.com/oddhill/context", + "issues": "https://github.com/oddhill/context/issues", + "docs": "https://github.com/oddhill/context" + }, + "install-path": "../../web/modules/contrib/context" + }, + { + "name": "drupal/contribute", + "version": "1.0.0-beta8", + "version_normalized": "1.0.0.0-beta8", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/contribute.git", + "reference": "8.x-1.0-beta8" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/contribute-8.x-1.0-beta8.zip", + "reference": "8.x-1.0-beta8", + "shasum": "0f197e7ed0997818366d557a1c990d2c199e3565" + }, + "require": { + "drupal/core": "~8.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.0-beta8", + "datestamp": "1572372486", + "security-coverage": { + "status": "not-covered", + "message": "Beta releases are not covered by Drupal security advisories." + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Adrian Cid Almaguer (adriancid)", + "homepage": "https://www.drupal.org/u/adriancid", + "role": "Maintainer" + }, + { + "name": "Jacob Rockowitz (jrockowitz)", + "homepage": "https://www.drupal.org/u/jrockowitz", + "role": "Maintainer" + }, + { + "name": "jrockowitz", + "homepage": "https://www.drupal.org/user/371407" + } + ], + "description": "Provides status report message which encourage users or organizations to join the Drupal community, become a member of Drupal Association, and contribute back to Drupal.", + "homepage": "https://www.drupal.org/project/contribute", + "keywords": [ + "Drupal" + ], + "support": { + "source": "http://cgit.drupalcode.org/contribute", + "issues": "https://www.drupal.org/project/issues/contribute" + }, + "install-path": "../../web/modules/contrib/contribute" + }, + { + "name": "drupal/cookieconsent", + "version": "1.6.0", + "version_normalized": "1.6.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/cookieconsent.git", + "reference": "8.x-1.6" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/cookieconsent-8.x-1.6.zip", + "reference": "8.x-1.6", + "shasum": "3acb8380e230e3a01486e336197e5b543892c409" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.6", + "datestamp": "1592402037", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Hans van Wezenbeek (Nitebreed)", + "homepage": "https://www.drupal.org/u/nitebreed", + "role": "Maintainer" + }, + { + "name": "Steven Buteneers", + "homepage": "https://www.drupal.org/user/3301055" + }, + { + "name": "pjotr", + "homepage": "https://www.drupal.org/user/3487709" + } + ], + "description": "CookieConsent uses the Cookie Consent javascript library for alerting users about the use of cookies on your website", + "homepage": "https://www.drupal.org/project/cookieconsent", + "keywords": [ + "Cookie", + "CookieConsent", + "Drupal" + ], + "support": { + "source": "http://cgit.drupalcode.org/cookieconsent", + "issues": "http://drupal.org/project/issues/cookieconsent" + }, + "install-path": "../../web/modules/contrib/cookieconsent" + }, + { + "name": "drupal/core", + "version": "8.9.13", + "version_normalized": "8.9.13.0", + "source": { + "type": "git", + "url": "https://github.com/drupal/core.git", + "reference": "a53db77b55a035453d7229e0c3069f8591cb4cb6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/drupal/core/zipball/a53db77b55a035453d7229e0c3069f8591cb4cb6", + "reference": "a53db77b55a035453d7229e0c3069f8591cb4cb6", + "shasum": "" + }, + "require": { + "asm89/stack-cors": "^1.1", + "composer/semver": "^1.0", + "doctrine/annotations": "^1.4", + "doctrine/common": "^2.7", + "easyrdf/easyrdf": "^0.9", + "egulias/email-validator": "^2.0", + "ext-date": "*", + "ext-dom": "*", + "ext-filter": "*", + "ext-gd": "*", + "ext-hash": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-pdo": "*", + "ext-session": "*", + "ext-simplexml": "*", + "ext-spl": "*", + "ext-tokenizer": "*", + "ext-xml": "*", + "guzzlehttp/guzzle": "^6.3", + "laminas/laminas-diactoros": "^1.8", + "laminas/laminas-feed": "^2.12", + "masterminds/html5": "^2.1", + "pear/archive_tar": "^1.4.12", + "php": "^7.0.8", + "psr/log": "^1.0", + "stack/builder": "^1.0", + "symfony-cmf/routing": "^1.4", + "symfony/class-loader": "~3.4.0", + "symfony/console": "~3.4.0", + "symfony/dependency-injection": "~3.4.26", + "symfony/event-dispatcher": "~3.4.0", + "symfony/http-foundation": "~3.4.35", + "symfony/http-kernel": "~3.4.14", + "symfony/polyfill-iconv": "^1.0", + "symfony/process": "~3.4.0", + "symfony/psr-http-message-bridge": "^1.1.2", + "symfony/routing": "~3.4.0", + "symfony/serializer": "~3.4.0", + "symfony/translation": "~3.4.0", + "symfony/validator": "~3.4.0", + "symfony/yaml": "~3.4.5", + "twig/twig": "^1.38.2", + "typo3/phar-stream-wrapper": "^3.1.3" + }, + "conflict": { + "drupal/pathauto": "<1.6", + "drush/drush": "<8.1.10" + }, + "replace": { + "drupal/action": "self.version", + "drupal/aggregator": "self.version", + "drupal/automated_cron": "self.version", + "drupal/ban": "self.version", + "drupal/bartik": "self.version", + "drupal/basic_auth": "self.version", + "drupal/big_pipe": "self.version", + "drupal/block": "self.version", + "drupal/block_content": "self.version", + "drupal/block_place": "self.version", + "drupal/book": "self.version", + "drupal/breakpoint": "self.version", + "drupal/ckeditor": "self.version", + "drupal/claro": "self.version", + "drupal/classy": "self.version", + "drupal/color": "self.version", + "drupal/comment": "self.version", + "drupal/config": "self.version", + "drupal/config_translation": "self.version", + "drupal/contact": "self.version", + "drupal/content_moderation": "self.version", + "drupal/content_translation": "self.version", + "drupal/contextual": "self.version", + "drupal/core-annotation": "self.version", + "drupal/core-assertion": "self.version", + "drupal/core-bridge": "self.version", + "drupal/core-class-finder": "self.version", + "drupal/core-datetime": "self.version", + "drupal/core-dependency-injection": "self.version", + "drupal/core-diff": "self.version", + "drupal/core-discovery": "self.version", + "drupal/core-event-dispatcher": "self.version", + "drupal/core-file-cache": "self.version", + "drupal/core-file-security": "self.version", + "drupal/core-filesystem": "self.version", + "drupal/core-gettext": "self.version", + "drupal/core-graph": "self.version", + "drupal/core-http-foundation": "self.version", + "drupal/core-php-storage": "self.version", + "drupal/core-plugin": "self.version", + "drupal/core-proxy-builder": "self.version", + "drupal/core-render": "self.version", + "drupal/core-serialization": "self.version", + "drupal/core-transliteration": "self.version", + "drupal/core-utility": "self.version", + "drupal/core-uuid": "self.version", + "drupal/core-version": "self.version", + "drupal/datetime": "self.version", + "drupal/datetime_range": "self.version", + "drupal/dblog": "self.version", + "drupal/dynamic_page_cache": "self.version", + "drupal/editor": "self.version", + "drupal/entity_reference": "self.version", + "drupal/field": "self.version", + "drupal/field_layout": "self.version", + "drupal/field_ui": "self.version", + "drupal/file": "self.version", + "drupal/filter": "self.version", + "drupal/forum": "self.version", + "drupal/hal": "self.version", + "drupal/help": "self.version", + "drupal/help_topics": "self.version", + "drupal/history": "self.version", + "drupal/image": "self.version", + "drupal/inline_form_errors": "self.version", + "drupal/jsonapi": "self.version", + "drupal/language": "self.version", + "drupal/layout_builder": "self.version", + "drupal/layout_discovery": "self.version", + "drupal/link": "self.version", + "drupal/locale": "self.version", + "drupal/media": "self.version", + "drupal/media_library": "self.version", + "drupal/menu_link_content": "self.version", + "drupal/menu_ui": "self.version", + "drupal/migrate": "self.version", + "drupal/migrate_drupal": "self.version", + "drupal/migrate_drupal_multilingual": "self.version", + "drupal/migrate_drupal_ui": "self.version", + "drupal/minimal": "self.version", + "drupal/node": "self.version", + "drupal/options": "self.version", + "drupal/page_cache": "self.version", + "drupal/path": "self.version", + "drupal/path_alias": "self.version", + "drupal/quickedit": "self.version", + "drupal/rdf": "self.version", + "drupal/responsive_image": "self.version", + "drupal/rest": "self.version", + "drupal/search": "self.version", + "drupal/serialization": "self.version", + "drupal/settings_tray": "self.version", + "drupal/seven": "self.version", + "drupal/shortcut": "self.version", + "drupal/simpletest": "self.version", + "drupal/standard": "self.version", + "drupal/stark": "self.version", + "drupal/statistics": "self.version", + "drupal/syslog": "self.version", + "drupal/system": "self.version", + "drupal/taxonomy": "self.version", + "drupal/telephone": "self.version", + "drupal/text": "self.version", + "drupal/toolbar": "self.version", + "drupal/tour": "self.version", + "drupal/tracker": "self.version", + "drupal/update": "self.version", + "drupal/user": "self.version", + "drupal/views": "self.version", + "drupal/views_ui": "self.version", + "drupal/workflows": "self.version", + "drupal/workspaces": "self.version" + }, + "type": "drupal-core", + "extra": { + "drupal-scaffold": { + "file-mapping": { + "[project-root]/.editorconfig": "assets/scaffold/files/editorconfig", + "[project-root]/.gitattributes": "assets/scaffold/files/gitattributes", + "[web-root]/.csslintrc": "assets/scaffold/files/csslintrc", + "[web-root]/.eslintignore": "assets/scaffold/files/eslintignore", + "[web-root]/.eslintrc.json": "assets/scaffold/files/eslintrc.json", + "[web-root]/.ht.router.php": "assets/scaffold/files/ht.router.php", + "[web-root]/.htaccess": "assets/scaffold/files/htaccess", + "[web-root]/example.gitignore": "assets/scaffold/files/example.gitignore", + "[web-root]/index.php": "assets/scaffold/files/index.php", + "[web-root]/INSTALL.txt": "assets/scaffold/files/drupal.INSTALL.txt", + "[web-root]/README.txt": "assets/scaffold/files/drupal.README.txt", + "[web-root]/robots.txt": "assets/scaffold/files/robots.txt", + "[web-root]/update.php": "assets/scaffold/files/update.php", + "[web-root]/web.config": "assets/scaffold/files/web.config", + "[web-root]/sites/README.txt": "assets/scaffold/files/sites.README.txt", + "[web-root]/sites/development.services.yml": "assets/scaffold/files/development.services.yml", + "[web-root]/sites/example.settings.local.php": "assets/scaffold/files/example.settings.local.php", + "[web-root]/sites/example.sites.php": "assets/scaffold/files/example.sites.php", + "[web-root]/sites/default/default.services.yml": "assets/scaffold/files/default.services.yml", + "[web-root]/sites/default/default.settings.php": "assets/scaffold/files/default.settings.php", + "[web-root]/modules/README.txt": "assets/scaffold/files/modules.README.txt", + "[web-root]/profiles/README.txt": "assets/scaffold/files/profiles.README.txt", + "[web-root]/themes/README.txt": "assets/scaffold/files/themes.README.txt" + } + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Drupal\\Core\\": "lib/Drupal/Core", + "Drupal\\Component\\": "lib/Drupal/Component", + "Drupal\\Driver\\": "../drivers/lib/Drupal/Driver" + }, + "classmap": [ + "lib/Drupal.php", + "lib/Drupal/Component/Utility/Timer.php", + "lib/Drupal/Component/Utility/Unicode.php", + "lib/Drupal/Core/Database/Database.php", + "lib/Drupal/Core/DrupalKernel.php", + "lib/Drupal/Core/DrupalKernelInterface.php", + "lib/Drupal/Core/Site/Settings.php" + ] + }, + "scripts": { + "pre-autoload-dump": [ + "Drupal\\Core\\Composer\\Composer::preAutoloadDump" + ], + "post-autoload-dump": [ + "Drupal\\Core\\Composer\\Composer::ensureHtaccess" + ] + }, + "license": [ + "GPL-2.0-or-later" + ], + "description": "Drupal is an open source content management platform powering millions of websites and applications.", + "install-path": "../../web/core" + }, + { + "name": "drupal/core-composer-scaffold", + "version": "8.9.13", + "version_normalized": "8.9.13.0", + "source": { + "type": "git", + "url": "https://github.com/drupal/core-composer-scaffold.git", + "reference": "c902d07cb49ef73777e2b33a39e54c2861a8c81d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/drupal/core-composer-scaffold/zipball/c902d07cb49ef73777e2b33a39e54c2861a8c81d", + "reference": "c902d07cb49ef73777e2b33a39e54c2861a8c81d", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1 || ^2", + "php": ">=7.0.8" + }, + "conflict": { + "drupal-composer/drupal-scaffold": "*" + }, + "require-dev": { + "composer/composer": "^1.8@stable" + }, + "type": "composer-plugin", + "extra": { + "class": "Drupal\\Composer\\Plugin\\Scaffold\\Plugin", + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Drupal\\Composer\\Plugin\\Scaffold\\": "" + } + }, + "license": [ + "GPL-2.0-or-later" + ], + "description": "A flexible Composer project scaffold builder.", + "homepage": "https://www.drupal.org/project/drupal", + "keywords": [ + "drupal" + ], + "install-path": "../drupal/core-composer-scaffold" + }, + { + "name": "drupal/core-project-message", + "version": "8.9.13", + "version_normalized": "8.9.13.0", + "source": { + "type": "git", + "url": "https://github.com/drupal/core-project-message.git", + "reference": "3f8fa28128f1fef68ee0e6647011a543ef92be5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/drupal/core-project-message/zipball/3f8fa28128f1fef68ee0e6647011a543ef92be5b", + "reference": "3f8fa28128f1fef68ee0e6647011a543ef92be5b", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1 || ^2", + "php": ">=7.0.8" + }, + "type": "composer-plugin", + "extra": { + "class": "Drupal\\Composer\\Plugin\\ProjectMessage\\MessagePlugin" + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Drupal\\Composer\\Plugin\\ProjectMessage\\": "." + } + }, + "license": [ + "GPL-2.0-or-later" + ], + "description": "Adds a message after Composer installation.", + "homepage": "https://www.drupal.org/project/drupal", + "keywords": [ + "drupal" + ], + "install-path": "../drupal/core-project-message" + }, + { + "name": "drupal/core-recommended", + "version": "8.9.13", + "version_normalized": "8.9.13.0", + "source": { + "type": "git", + "url": "https://github.com/drupal/core-recommended.git", + "reference": "7a940fd5b64d2b22366680e2a60d96bf2c10089d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/drupal/core-recommended/zipball/7a940fd5b64d2b22366680e2a60d96bf2c10089d", + "reference": "7a940fd5b64d2b22366680e2a60d96bf2c10089d", + "shasum": "" + }, + "require": { + "asm89/stack-cors": "1.3.0", + "composer/semver": "1.5.1", + "doctrine/annotations": "v1.4.0", + "doctrine/cache": "v1.6.2", + "doctrine/collections": "v1.4.0", + "doctrine/common": "v2.7.3", + "doctrine/inflector": "v1.2.0", + "doctrine/lexer": "1.0.2", + "drupal/core": "8.9.13", + "easyrdf/easyrdf": "0.9.1", + "egulias/email-validator": "2.1.17", + "guzzlehttp/guzzle": "6.5.4", + "guzzlehttp/promises": "v1.3.1", + "guzzlehttp/psr7": "1.6.1", + "laminas/laminas-diactoros": "1.8.7p2", + "laminas/laminas-escaper": "2.6.1", + "laminas/laminas-feed": "2.12.2", + "laminas/laminas-stdlib": "3.2.1", + "laminas/laminas-zendframework-bridge": "1.0.4", + "masterminds/html5": "2.3.0", + "paragonie/random_compat": "v9.99.99", + "pear/archive_tar": "1.4.12", + "pear/console_getopt": "v1.4.3", + "pear/pear-core-minimal": "v1.10.10", + "pear/pear_exception": "v1.0.1", + "psr/container": "1.0.0", + "psr/http-message": "1.0.1", + "psr/log": "1.1.3", + "ralouphie/getallheaders": "3.0.3", + "stack/builder": "v1.0.5", + "symfony-cmf/routing": "1.4.1", + "symfony/class-loader": "v3.4.41", + "symfony/console": "v3.4.41", + "symfony/debug": "v3.4.41", + "symfony/dependency-injection": "v3.4.41", + "symfony/event-dispatcher": "v3.4.41", + "symfony/http-foundation": "v3.4.41", + "symfony/http-kernel": "v3.4.44", + "symfony/polyfill-ctype": "v1.17.0", + "symfony/polyfill-iconv": "v1.17.0", + "symfony/polyfill-intl-idn": "v1.17.0", + "symfony/polyfill-mbstring": "v1.17.0", + "symfony/polyfill-php56": "v1.17.0", + "symfony/polyfill-php70": "v1.17.0", + "symfony/polyfill-php72": "v1.17.0", + "symfony/polyfill-util": "v1.17.0", + "symfony/process": "v3.4.41", + "symfony/psr-http-message-bridge": "v1.1.2", + "symfony/routing": "v3.4.41", + "symfony/serializer": "v3.4.41", + "symfony/translation": "v3.4.41", + "symfony/validator": "v3.4.41", + "symfony/yaml": "v3.4.41", + "twig/twig": "v1.42.5", + "typo3/phar-stream-wrapper": "v3.1.4" + }, + "conflict": { + "webflo/drupal-core-strict": "*" + }, + "type": "metapackage", + "license": [ + "GPL-2.0-or-later" + ], + "description": "Locked core dependencies; require this project INSTEAD OF drupal/core.", + "install-path": null + }, + { + "name": "drupal/ctools", + "version": "3.4.0", + "version_normalized": "3.4.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/ctools.git", + "reference": "8.x-3.4" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/ctools-8.x-3.4.zip", + "reference": "8.x-3.4", + "shasum": "016ca5abb7ac4ca720352a72e8989f3ef0e20539" + }, + "require": { + "drupal/core": "^8.7.7 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-3.4", + "datestamp": "1585763383", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Kris Vanderwater (EclipseGc)", + "homepage": "https://www.drupal.org/u/eclipsegc", + "role": "Maintainer" + }, + { + "name": "Jakob Perry (japerry)", + "homepage": "https://www.drupal.org/u/japerry", + "role": "Maintainer" + }, + { + "name": "Tim Plunkett (tim.plunkett)", + "homepage": "https://www.drupal.org/u/timplunkett", + "role": "Maintainer" + }, + { + "name": "James Gilliland (neclimdul)", + "homepage": "https://www.drupal.org/u/neclimdul", + "role": "Maintainer" + }, + { + "name": "Daniel Wehner (dawehner)", + "homepage": "https://www.drupal.org/u/dawehner", + "role": "Maintainer" + }, + { + "name": "joelpittet", + "homepage": "https://www.drupal.org/user/160302" + }, + { + "name": "merlinofchaos", + "homepage": "https://www.drupal.org/user/26979" + }, + { + "name": "neclimdul", + "homepage": "https://www.drupal.org/user/48673" + }, + { + "name": "sdboyer", + "homepage": "https://www.drupal.org/user/146719" + }, + { + "name": "sun", + "homepage": "https://www.drupal.org/user/54136" + }, + { + "name": "tim.plunkett", + "homepage": "https://www.drupal.org/user/241634" + } + ], + "description": "Provides a number of utility and helper APIs for Drupal developers and site builders.", + "homepage": "https://www.drupal.org/project/ctools", + "support": { + "source": "https://git.drupalcode.org/project/ctools", + "issues": "https://www.drupal.org/project/issues/ctools" + }, + "install-path": "../../web/modules/contrib/ctools" + }, + { + "name": "drupal/ctools_block", + "version": "3.4.0", + "version_normalized": "3.4.0.0", + "require": { + "drupal/core": "^8 || ^9", + "drupal/ctools": "*" + }, + "type": "metapackage", + "extra": { + "drupal": { + "version": "8.x-3.4", + "datestamp": "1585763383", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "EclipseGc", + "homepage": "https://www.drupal.org/user/61203" + }, + { + "name": "damiankloip", + "homepage": "https://www.drupal.org/user/1037976" + }, + { + "name": "dawehner", + "homepage": "https://www.drupal.org/user/99340" + }, + { + "name": "esmerel", + "homepage": "https://www.drupal.org/user/164022" + }, + { + "name": "japerry", + "homepage": "https://www.drupal.org/user/45640" + }, + { + "name": "joelpittet", + "homepage": "https://www.drupal.org/user/160302" + }, + { + "name": "merlinofchaos", + "homepage": "https://www.drupal.org/user/26979" + }, + { + "name": "neclimdul", + "homepage": "https://www.drupal.org/user/48673" + }, + { + "name": "sdboyer", + "homepage": "https://www.drupal.org/user/146719" + }, + { + "name": "sun", + "homepage": "https://www.drupal.org/user/54136" + }, + { + "name": "tim.plunkett", + "homepage": "https://www.drupal.org/user/241634" + } + ], + "description": "Provides improvements to blocks that will one day be added to Drupal core.", + "homepage": "https://www.drupal.org/project/ctools", + "support": { + "source": "https://git.drupalcode.org/project/ctools" + }, + "install-path": null + }, + { + "name": "drupal/devel", + "version": "2.1.0", + "version_normalized": "2.1.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/devel.git", + "reference": "8.x-2.1" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/devel-8.x-2.1.zip", + "reference": "8.x-2.1", + "shasum": "8f735892922aa5f228e681e645e5f02b1c008f14" + }, + "require": { + "drupal/core": "~8.0", + "symfony/var-dumper": "~2.7|^3|^4" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.1", + "datestamp": "1556799496", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "drush": { + "services": { + "drush.services.yml": "^9" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Moshe Weitzman", + "homepage": "https://github.com/weitzman", + "email": "weitzman@tejasa.com", + "role": "Maintainer" + }, + { + "name": "Hans Salvisberg", + "homepage": "https://www.drupal.org/u/salvis", + "email": "drupal@salvisberg.com", + "role": "Maintainer" + }, + { + "name": "Luca Lusso", + "homepage": "https://www.drupal.org/u/lussoluca", + "role": "Maintainer" + }, + { + "name": "Marco (willzyx)", + "homepage": "https://www.drupal.org/u/willzyx", + "role": "Maintainer" + }, + { + "name": "See contributors", + "homepage": "https://www.drupal.org/node/3236/committers" + } + ], + "description": "Various blocks, pages, and functions for developers.", + "homepage": "http://drupal.org/project/devel", + "support": { + "source": "http://cgit.drupalcode.org/devel", + "issues": "http://drupal.org/project/devel", + "irc": "irc://irc.freenode.org/drupal-contribute" + }, + "install-path": "../../web/modules/contrib/devel" + }, + { + "name": "drupal/domain_301_redirect", + "version": "1.0.0-alpha0", + "version_normalized": "1.0.0.0-alpha0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/domain_301_redirect.git", + "reference": "8.x-1.0-alpha0" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/domain_301_redirect-8.x-1.0-alpha0.zip", + "reference": "8.x-1.0-alpha0", + "shasum": "7b2756cdba8ecf8af052e9a6105530c1eaa2cfa5" + }, + "require": { + "drupal/core": "~8.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.0-alpha0", + "datestamp": "1569004385", + "security-coverage": { + "status": "not-covered", + "message": "Alpha releases are not covered by Drupal security advisories." + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Kevin Hankens", + "homepage": "https://www.drupal.org/user/78090" + }, + { + "name": "jessebeach", + "homepage": "https://www.drupal.org/user/748566" + }, + { + "name": "nagba", + "homepage": "https://www.drupal.org/user/21231" + }, + { + "name": "naveenvalecha", + "homepage": "https://www.drupal.org/user/2665733" + }, + { + "name": "timhilliard", + "homepage": "https://www.drupal.org/user/195493" + } + ], + "description": "Allows you to 301 redirect any domain to the main domain associated with a site.", + "homepage": "http://drupal.org/project/domain_301_redirect", + "keywords": [ + "Drupal" + ], + "support": { + "source": "http://cgit.drupalcode.org/domain_301_redirect", + "issues": "http://drupal.org/project/domain_301_redirect" + }, + "install-path": "../../web/modules/contrib/domain_301_redirect" + }, + { + "name": "drupal/ds", + "version": "3.12.0", + "version_normalized": "3.12.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/ds.git", + "reference": "8.x-3.12" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/ds-8.x-3.12.zip", + "reference": "8.x-3.12", + "shasum": "0df49ccc28af94186a6c08aa4233f435c539b273" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "require-dev": { + "drupal/devel": "3.x-dev", + "drupal/field_group": "3.x-dev" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-3.12", + "datestamp": "1615995335", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Bram Goffings", + "homepage": "https://www.drupal.org/user/172527", + "role": "Maintainer" + }, + { + "name": "Kristof De Jaeger", + "homepage": "http://realize.be/", + "role": "Maintainer" + }, + { + "name": "Brecht Ceyssens", + "homepage": "https://www.drupal.org/user/591438", + "role": "Maintainer" + }, + { + "name": "swentel", + "homepage": "https://www.drupal.org/user/107403" + } + ], + "description": "Extend the display options for every entity type.", + "homepage": "https://www.drupal.org/project/ds", + "keywords": [ + "drupal", + "layout", + "php" + ], + "support": { + "source": "http://git.drupal.org/project/ds.git", + "issues": "https://www.drupal.org/project/issues/ds", + "irc": "irc://irc.freenode.org/drupal-contribute" + }, + "install-path": "../../web/modules/contrib/ds" + }, + { + "name": "drupal/easy_breadcrumb", + "version": "1.15.0", + "version_normalized": "1.15.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/easy_breadcrumb.git", + "reference": "8.x-1.15" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/easy_breadcrumb-8.x-1.15.zip", + "reference": "8.x-1.15", + "shasum": "447c1ae946bdba97da97880aae5980f97baf720b" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.15", + "datestamp": "1615310468", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Neslee Canil Pinto", + "homepage": "https://www.drupal.org/u/neslee-canil-pinto", + "role": "Maintainer" + }, + { + "name": "Greg Boggs", + "homepage": "https://www.drupal.org/u/greg-boggs", + "role": "Maintainer" + }, + { + "name": "RenatoG", + "homepage": "https://www.drupal.org/user/3326031" + }, + { + "name": "diamondsea", + "homepage": "https://www.drupal.org/user/430714" + }, + { + "name": "hmartens", + "homepage": "https://www.drupal.org/user/622826" + }, + { + "name": "loopduplicate", + "homepage": "https://www.drupal.org/user/717290" + }, + { + "name": "sonemonu", + "homepage": "https://www.drupal.org/user/1667988" + }, + { + "name": "tatarbj", + "homepage": "https://www.drupal.org/user/649590" + }, + { + "name": "volkswagenchick", + "homepage": "https://www.drupal.org/user/3332522" + } + ], + "description": "Adds configuration to the system breadcrumbs.", + "homepage": "https://www.drupal.org/project/easy_breadcrumb", + "support": { + "source": "https://git.drupalcode.org/project/easy_breadcrumb", + "issues": "https://www.drupal.org/project/issues/easy_breadcrumb" + }, + "install-path": "../../web/modules/contrib/easy_breadcrumb" + }, + { + "name": "drupal/easychart", + "version": "3.4.0", + "version_normalized": "3.4.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/easychart.git", + "reference": "8.x-3.4" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/easychart-8.x-3.4.zip", + "reference": "8.x-3.4", + "shasum": "6ec1848fd12b1515c16d841cc87a071883fa476c" + }, + "require": { + "drupal/core": "^8" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-3.4", + "datestamp": "1475594996", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Jan-Yves Vanhaverbeke", + "homepage": "https://www.drupal.org/user/1823074", + "role": "Maintainer" + }, + { + "name": "Thomas Daem", + "homepage": "https://www.drupal.org/user/591438", + "role": "Maintainer" + }, + { + "name": "Kristof De Jaeger", + "homepage": "http://realize.be/", + "role": "Maintainer" + }, + { + "name": "thomas_rz", + "homepage": "https://www.drupal.org/user/1142210" + } + ], + "description": "A visual editor for the world's best web charting tool: Highcharts.", + "homepage": "https://www.drupal.org/project/easychart", + "keywords": [ + "Highcharts", + "chart", + "drupal" + ], + "support": { + "source": "http://git.drupal.org/project/easychart.git", + "issues": "https://www.drupal.org/project/issues/easychart", + "irc": "irc://irc.freenode.org/drupal-contribute" + }, + "install-path": "../../web/modules/contrib/easychart" + }, + { + "name": "drupal/entity_browser", + "version": "2.5.0", + "version_normalized": "2.5.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/entity_browser.git", + "reference": "8.x-2.5" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/entity_browser-8.x-2.5.zip", + "reference": "8.x-2.5", + "shasum": "29456b961f0f90ff064601ab8a382446a8143774" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "require-dev": { + "drupal/embed": "~1.0", + "drupal/entity_embed": "1.x-dev", + "drupal/entity_reference_revisions": "1.x-dev", + "drupal/entityqueue": "1.x-dev", + "drupal/inline_entity_form": "1.x-dev", + "drupal/paragraphs": "1.x-dev", + "drupal/token": "~1.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.5", + "datestamp": "1588015429", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Janez Urevc", + "homepage": "https://github.com/slashrsm", + "role": "Maintainer" + }, + { + "name": "Primoz Hmeljak", + "homepage": "https://github.com/primsi", + "role": "Maintainer" + }, + { + "name": "See other contributors", + "homepage": "https://www.drupal.org/node/1943336/committers", + "role": "contributor" + }, + { + "name": "Drupal Media Team", + "homepage": "https://www.drupal.org/user/3260690" + }, + { + "name": "Primsi", + "homepage": "https://www.drupal.org/user/282629" + }, + { + "name": "marcingy", + "homepage": "https://www.drupal.org/user/77320" + }, + { + "name": "oknate", + "homepage": "https://www.drupal.org/user/471638" + }, + { + "name": "samuel.mortenson", + "homepage": "https://www.drupal.org/user/2582268" + }, + { + "name": "slashrsm", + "homepage": "https://www.drupal.org/user/744628" + } + ], + "description": "Entity browsing and selecting component.", + "homepage": "http://drupal.org/project/entity_browser", + "support": { + "source": "https://git.drupalcode.org/project/entity_browser", + "issues": "https://www.drupal.org/project/issues/entity_browser", + "irc": "irc://irc.freenode.org/drupal-contribute" + }, + "install-path": "../../web/modules/contrib/entity_browser" + }, + { + "name": "drupal/entity_print", + "version": "2.2.0", + "version_normalized": "2.2.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/entity_print.git", + "reference": "8.x-2.2" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/entity_print-8.x-2.2.zip", + "reference": "8.x-2.2", + "shasum": "5bd7671e2563a68925ab7f6ecd8dc8e8e396a0ea" + }, + "require": { + "dompdf/dompdf": "~0.8.0", + "drupal/core": "^8 || ^9" + }, + "suggest": { + "mikehaertl/phpwkhtmltopdf": "PhpWkhtmlToPdf provides the PHP library to use Wkhtmltopdf" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.2", + "datestamp": "1592533892", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Ben Dougherty", + "homepage": "https://www.drupal.org/u/benjy" + }, + { + "name": "benjy", + "homepage": "https://www.drupal.org/user/1852732" + }, + { + "name": "pameeela", + "homepage": "https://www.drupal.org/user/1431110" + } + ], + "description": "PDF print solution for any Drupal entity.", + "homepage": "http://drupal.org/project/entity_print", + "keywords": [ + "PDF", + "drupal", + "print", + "web" + ], + "support": { + "source": "https://git.drupalcode.org/project/entity_print" + }, + "install-path": "../../web/modules/contrib/entity_print" + }, + { + "name": "drupal/entity_reference_revisions", + "version": "1.9.0", + "version_normalized": "1.9.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/entity_reference_revisions.git", + "reference": "8.x-1.9" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/entity_reference_revisions-8.x-1.9.zip", + "reference": "8.x-1.9", + "shasum": "e1c51bdea495eb3b458130d6f0a00c347f5637df" + }, + "require": { + "drupal/core": "^8.7.7 || ^9" + }, + "require-dev": { + "drupal/diff": "1.x-dev" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.9", + "datestamp": "1614805871", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Berdir", + "homepage": "https://www.drupal.org/user/214652" + }, + { + "name": "Frans", + "homepage": "https://www.drupal.org/user/514222" + }, + { + "name": "jeroen.b", + "homepage": "https://www.drupal.org/user/1853532" + }, + { + "name": "miro_dietiker", + "homepage": "https://www.drupal.org/user/227761" + } + ], + "description": "Entity Reference Revisions", + "homepage": "https://www.drupal.org/project/entity_reference_revisions", + "support": { + "source": "https://git.drupalcode.org/project/entity_reference_revisions" + }, + "install-path": "../../web/modules/contrib/entity_reference_revisions" + }, + { + "name": "drupal/externalauth", + "version": "1.3.0", + "version_normalized": "1.3.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/externalauth.git", + "reference": "8.x-1.3" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/externalauth-8.x-1.3.zip", + "reference": "8.x-1.3", + "shasum": "b1b38e6718fe66bd38fc894dab1f9d7a7d60f10b" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.3", + "datestamp": "1587629529", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "rgristroph", + "homepage": "https://www.drupal.org/user/516442" + }, + { + "name": "snufkin", + "homepage": "https://www.drupal.org/user/58645" + }, + { + "name": "svendecabooter", + "homepage": "https://www.drupal.org/user/35369" + } + ], + "description": "Helper module to authenticate users using an external site / service and storing identification details", + "homepage": "https://www.drupal.org/project/externalauth", + "support": { + "source": "https://git.drupalcode.org/project/externalauth" + }, + "install-path": "../../web/modules/contrib/externalauth" + }, + { + "name": "drupal/extlink", + "version": "1.6.0", + "version_normalized": "1.6.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/extlink.git", + "reference": "8.x-1.6" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/extlink-8.x-1.6.zip", + "reference": "8.x-1.6", + "shasum": "92c2794b1d5ece7978f5f6fa37f719c0b37d470e" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.6", + "datestamp": "1614961993", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Nate Lampton", + "homepage": "https://www.drupal.org/u/quicksketch", + "role": "Maintainer" + }, + { + "name": "Lachlan Ennis", + "homepage": "https://www.drupal.org/u/elachlan", + "role": "Maintainer" + }, + { + "name": "Neslee Canil Pinto", + "homepage": "https://www.drupal.org/u/neslee-canil-pinto", + "role": "Maintainer" + } + ], + "description": "Modify behavior and appearance of external links.", + "homepage": "https://www.drupal.org/project/extlink", + "keywords": [ + "Drupal", + "External Links" + ], + "support": { + "source": "https://git.drupalcode.org/project/extlink", + "issues": "https://www.drupal.org/project/issues/extlink" + }, + "install-path": "../../web/modules/contrib/extlink" + }, + { + "name": "drupal/facets", + "version": "1.7.0", + "version_normalized": "1.7.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/facets.git", + "reference": "8.x-1.7" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/facets-8.x-1.7.zip", + "reference": "8.x-1.7", + "shasum": "5a8a1092617c4dde96f691e23300d0d436c5fcb3" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "require-dev": { + "drupal/search_api": "~1.5" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.7", + "datestamp": "1613751460", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "branch-alias": { + "dev-8.x-1.x": "1.x-dev" + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "See all contributors", + "homepage": "https://www.drupal.org/node/2348769/committers" + }, + { + "name": "StryKaizer", + "homepage": "https://www.drupal.org/user/462700" + }, + { + "name": "borisson_", + "homepage": "https://www.drupal.org/user/2393360" + }, + { + "name": "drunken monkey", + "homepage": "https://www.drupal.org/user/205582" + }, + { + "name": "mkalkbrenner", + "homepage": "https://www.drupal.org/user/124705" + } + ], + "description": "The Facet module allows site builders to easily create and manage faceted search interfaces.", + "homepage": "https://www.drupal.org/project/facets", + "support": { + "source": "git://git.drupal.org/project/facets.git", + "issues": "https://www.drupal.org/project/issues/facets", + "irc": "irc://irc.freenode.org/drupal-search-api" + }, + "install-path": "../../web/modules/contrib/facets" + }, + { + "name": "drupal/fast_404", + "version": "2.0.0-alpha5", + "version_normalized": "2.0.0.0-alpha5", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/fast_404.git", + "reference": "8.x-2.0-alpha5" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/fast_404-8.x-2.0-alpha5.zip", + "reference": "8.x-2.0-alpha5", + "shasum": "071518c28f73ed011068ec0dbfe07a5904b8f982" + }, + "require": { + "drupal/core": "^8.8" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.0-alpha5", + "datestamp": "1590876049", + "security-coverage": { + "status": "not-covered", + "message": "Alpha releases are not covered by Drupal security advisories." + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "adammalone", + "homepage": "https://www.drupal.org/user/1295980" + }, + { + "name": "bonus", + "homepage": "https://www.drupal.org/user/360002" + }, + { + "name": "naveenvalecha", + "homepage": "https://www.drupal.org/user/2665733" + }, + { + "name": "neetu morwani", + "homepage": "https://www.drupal.org/user/2632025" + }, + { + "name": "soyarma", + "homepage": "https://www.drupal.org/user/286273" + } + ], + "homepage": "https://www.drupal.org/project/fast_404", + "support": { + "source": "https://git.drupalcode.org/project/fast_404" + }, + "install-path": "../../web/modules/contrib/fast_404" + }, + { + "name": "drupal/features", + "version": "3.12.0", + "version_normalized": "3.12.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/features.git", + "reference": "8.x-3.12" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/features-8.x-3.12.zip", + "reference": "8.x-3.12", + "shasum": "f28d6e7d3340e32666a3e8ae515ed746dbe86b98" + }, + "require": { + "drupal/config_update": "^1.4", + "drupal/core": "^8.8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-3.12", + "datestamp": "1612830531", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "drush": { + "services": { + "drush.services.yml": "^9 || ^10" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "dawehner", + "homepage": "https://www.drupal.org/user/99340" + }, + { + "name": "donquixote", + "homepage": "https://www.drupal.org/user/459338" + }, + { + "name": "e2thex", + "homepage": "https://www.drupal.org/user/189123" + }, + { + "name": "febbraro", + "homepage": "https://www.drupal.org/user/43670" + }, + { + "name": "flocondetoile", + "homepage": "https://www.drupal.org/user/2006064" + }, + { + "name": "jmiccolis", + "homepage": "https://www.drupal.org/user/31731" + }, + { + "name": "joseph.olstad", + "homepage": "https://www.drupal.org/user/1321830" + }, + { + "name": "mpotter", + "homepage": "https://www.drupal.org/user/616192" + }, + { + "name": "nedjo", + "homepage": "https://www.drupal.org/user/4481" + }, + { + "name": "tim.plunkett", + "homepage": "https://www.drupal.org/user/241634" + } + ], + "description": "Enables administrators to package configuration into modules", + "homepage": "https://www.drupal.org/project/features", + "support": { + "source": "https://git.drupalcode.org/project/features" + }, + "install-path": "../../web/modules/contrib/features" + }, + { + "name": "drupal/feeds", + "version": "3.0.0-alpha10", + "version_normalized": "3.0.0.0-alpha10", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/feeds.git", + "reference": "8.x-3.0-alpha10" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/feeds-8.x-3.0-alpha10.zip", + "reference": "8.x-3.0-alpha10", + "shasum": "84691c6258503c8d4afea5009dcd21bbd8292d49" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "require-dev": { + "drupal/pathauto": "^1.8", + "drush/drush": "^9 || ^10" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-3.0-alpha10", + "datestamp": "1612455136", + "security-coverage": { + "status": "not-covered", + "message": "Project has not opted into security advisory coverage!" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Dave Reid", + "homepage": "https://www.drupal.org/user/53892" + }, + { + "name": "Ian Ward", + "homepage": "https://www.drupal.org/user/4736" + }, + { + "name": "MegaChriz", + "homepage": "https://www.drupal.org/user/654114" + }, + { + "name": "Will White", + "homepage": "https://www.drupal.org/user/32237" + }, + { + "name": "alex_b", + "homepage": "https://www.drupal.org/user/53995" + }, + { + "name": "e2thex", + "homepage": "https://www.drupal.org/user/189123" + }, + { + "name": "febbraro", + "homepage": "https://www.drupal.org/user/43670" + }, + { + "name": "franz", + "homepage": "https://www.drupal.org/user/581844" + }, + { + "name": "jmiccolis", + "homepage": "https://www.drupal.org/user/31731" + }, + { + "name": "joelpittet", + "homepage": "https://www.drupal.org/user/160302" + }, + { + "name": "kking", + "homepage": "https://www.drupal.org/user/24399" + }, + { + "name": "tobby", + "homepage": "https://www.drupal.org/user/154797" + }, + { + "name": "tristanoneil", + "homepage": "https://www.drupal.org/user/340659" + }, + { + "name": "twistor", + "homepage": "https://www.drupal.org/user/473738" + }, + { + "name": "yhahn", + "homepage": "https://www.drupal.org/user/264833" + } + ], + "description": "Aggregates RSS/Atom/RDF feeds, imports CSV files and more.", + "homepage": "https://www.drupal.org/project/feeds", + "keywords": [ + "Drupal" + ], + "support": { + "source": "https://git.drupalcode.org/project/feeds", + "issues": "https://www.drupal.org/project/issues/feeds" + }, + "install-path": "../../web/modules/contrib/feeds" + }, + { + "name": "drupal/fences", + "version": "2.0.0-rc1", + "version_normalized": "2.0.0.0-RC1", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/fences.git", + "reference": "8.x-2.0-rc1" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/fences-8.x-2.0-rc1.zip", + "reference": "8.x-2.0-rc1", + "shasum": "0ec3a95dda7bdbdd13401bc834d75a3c7dd1c256" + }, + "require": { + "drupal/core": "^8.7.7 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.0-rc1", + "datestamp": "1590457540", + "security-coverage": { + "status": "not-covered", + "message": "RC releases are not covered by Drupal security advisories." + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "CrashTest_", + "homepage": "https://www.drupal.org/user/261457" + }, + { + "name": "JohnAlbin", + "homepage": "https://www.drupal.org/user/32095" + }, + { + "name": "Sam152", + "homepage": "https://www.drupal.org/user/1485048" + }, + { + "name": "gleroux02", + "homepage": "https://www.drupal.org/user/282323" + }, + { + "name": "jensimmons", + "homepage": "https://www.drupal.org/user/140882" + }, + { + "name": "stevector", + "homepage": "https://www.drupal.org/user/179805" + } + ], + "description": "Alter wrapping markup of fields.", + "homepage": "https://www.drupal.org/project/fences", + "support": { + "source": "https://git.drupalcode.org/project/fences" + }, + "install-path": "../../web/modules/contrib/fences" + }, + { + "name": "drupal/field_formatter_class", + "version": "1.5.0", + "version_normalized": "1.5.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/field_formatter_class.git", + "reference": "8.x-1.5" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/field_formatter_class-8.x-1.5.zip", + "reference": "8.x-1.5", + "shasum": "a51e0078615791a285250693a4e88775fac87b70" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.5", + "datestamp": "1610334141", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Andrew Macpherson", + "homepage": "https://www.drupal.org/u/andrewmacpherson", + "role": "maintainer" + }, + { + "name": "Oleksandr Dekhteruk", + "homepage": "https://www.drupal.org/u/pifagor", + "role": "maintainer" + }, + { + "name": "mfer", + "homepage": "https://www.drupal.org/user/25701" + }, + { + "name": "pifagor", + "homepage": "https://www.drupal.org/user/2375692" + } + ], + "description": "Provides custom HTML class settings for field formatters.", + "homepage": "https://www.drupal.org/project/field_formatter_class", + "support": { + "source": "https://git.drupalcode.org/project/field_formatter_class", + "issues": "https://www.drupal.org/project/issues/field_formatter_class" + }, + "install-path": "../../web/modules/contrib/field_formatter_class" + }, + { + "name": "drupal/field_group", + "version": "3.1.0", + "version_normalized": "3.1.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/field_group.git", + "reference": "8.x-3.1" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/field_group-8.x-3.1.zip", + "reference": "8.x-3.1", + "shasum": "8a719eaea594f0ba874172831cb28da93c66b77a" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "require-dev": { + "drupal/jquery_ui_accordion": "^1.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-3.1", + "datestamp": "1591772567", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Hydra", + "homepage": "https://www.drupal.org/user/647364" + }, + { + "name": "Stalski", + "homepage": "https://www.drupal.org/user/322618" + }, + { + "name": "jyve", + "homepage": "https://www.drupal.org/user/591438" + }, + { + "name": "nils.destoop", + "homepage": "https://www.drupal.org/user/361625" + }, + { + "name": "swentel", + "homepage": "https://www.drupal.org/user/107403" + } + ], + "description": "Provides the field_group module.", + "homepage": "https://www.drupal.org/project/field_group", + "support": { + "source": "https://git.drupalcode.org/project/field_group", + "issues": "https://www.drupal.org/project/issues/field_group" + }, + "install-path": "../../web/modules/contrib/field_group" + }, + { + "name": "drupal/field_permissions", + "version": "1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/field_permissions.git", + "reference": "8.x-1.1" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/field_permissions-8.x-1.1.zip", + "reference": "8.x-1.1", + "shasum": "11e31db94999e6871ad7633455315bc27989a7ea" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.1", + "datestamp": "1598646882", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "branch-alias": { + "dev-8.x-1.x": "1.x-dev" + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "RobLoach", + "homepage": "https://www.drupal.org/user/61114" + }, + { + "name": "japerry", + "homepage": "https://www.drupal.org/user/45640" + }, + { + "name": "jhedstrom", + "homepage": "https://www.drupal.org/user/208732" + }, + { + "name": "mariacha1", + "homepage": "https://www.drupal.org/user/2210776" + }, + { + "name": "markus_petrux", + "homepage": "https://www.drupal.org/user/39593" + } + ], + "description": "The Field Permissions module allows site administrators to set field-level permissions to edit, view and create fields on any entity.", + "homepage": "https://www.drupal.org/project/field_permissions", + "support": { + "source": "https://git.drupalcode.org/project/field_permissions", + "issues": "https://www.drupal.org/project/issues/field_permissions" + }, + "install-path": "../../web/modules/contrib/field_permissions" + }, + { + "name": "drupal/file_mdm", + "version": "dev-1.x", + "version_normalized": "dev-1.x", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/file_mdm.git", + "reference": "30264f78b6c6f98a614e2da8d1e0c843dce59472" + }, + "require": { + "drupal/core": "~8.0", + "lsolesen/pel": "0.9.6", + "phenx/php-font-lib": "^0.5", + "php": ">=5.6" + }, + "require-dev": { + "drupal/image_effects": "*" + }, + "type": "drupal-module", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + }, + "drupal": { + "version": "8.x-1.1+8-dev", + "datestamp": "1576326787", + "security-coverage": { + "status": "not-covered", + "message": "Dev releases are not covered by Drupal security advisories." + } + } + }, + "installation-source": "source", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "mondrake", + "homepage": "https://www.drupal.org/user/1307444" + } + ], + "description": "Provides a service to manage file metadata.", + "homepage": "https://www.drupal.org/project/file_mdm", + "support": { + "source": "https://git.drupalcode.org/project/file_mdm" + }, + "install-path": "../../web/modules/contrib/file_mdm" + }, + { + "name": "drupal/file_mdm_exif", + "version": "1.1.0", + "version_normalized": "1.1.0.0", + "require": { + "drupal/core": "~8.0", + "drupal/file_mdm": "*" + }, + "require-dev": { + "drupal/image_effects": "*" + }, + "type": "metapackage", + "extra": { + "drupal": { + "version": "8.x-1.1", + "datestamp": "1488273785", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "mondrake", + "homepage": "https://www.drupal.org/user/1307444" + } + ], + "description": "Provides a file metadata plugin for EXIF image information.", + "homepage": "https://www.drupal.org/project/file_mdm", + "support": { + "source": "https://git.drupalcode.org/project/file_mdm" + }, + "install-path": null + }, + { + "name": "drupal/filefield_paths", + "version": "1.0.0-beta5", + "version_normalized": "1.0.0.0-beta5", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/filefield_paths.git", + "reference": "8.x-1.0-beta5" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/filefield_paths-8.x-1.0-beta5.zip", + "reference": "8.x-1.0-beta5", + "shasum": "06719aaeee87bf5abdfb75e0079fcaf0bbd996a6" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "require-dev": { + "drupal/ctools": "*", + "drupal/pathauto": "*", + "drupal/redirect": "*", + "drupal/token": "*" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.0-beta5", + "datestamp": "1606806673", + "security-coverage": { + "status": "not-covered", + "message": "Beta releases are not covered by Drupal security advisories." + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Deciphered", + "homepage": "https://www.drupal.org/user/103796" + }, + { + "name": "voleger", + "homepage": "https://www.drupal.org/user/3260314" + } + ], + "description": "Adds improved Token based file sorting and renaming functionalities.", + "homepage": "https://www.drupal.org/project/filefield_paths", + "support": { + "source": "https://git.drupalcode.org/project/filefield_paths" + }, + "install-path": "../../web/modules/contrib/filefield_paths" + }, + { + "name": "drupal/honeypot", + "version": "1.30.0", + "version_normalized": "1.30.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/honeypot.git", + "reference": "8.x-1.30" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/honeypot-8.x-1.30.zip", + "reference": "8.x-1.30", + "shasum": "1d7983e8e07feee4f13e4b05c9a10db15ae2097e" + }, + "require": { + "drupal/core": "~8.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.30", + "datestamp": "1576274288", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Jeff Geerling", + "homepage": "https://www.drupal.org/user/213194", + "email": "geerlingguy@mac.com" + }, + { + "name": "geerlingguy", + "homepage": "https://www.drupal.org/user/389011" + }, + { + "name": "vijaycs85", + "homepage": "https://www.drupal.org/user/93488" + } + ], + "description": "Mitigates spam form submissions using the honeypot method.", + "homepage": "https://www.drupal.org/project/honeypot", + "keywords": [ + "deterrent", + "form", + "honeypot", + "honeytrap", + "php", + "spam" + ], + "support": { + "source": "https://git.drupalcode.org/project/honeypot" + }, + "install-path": "../../web/modules/contrib/honeypot" + }, + { + "name": "drupal/hook_event_dispatcher", + "version": "1.29.0", + "version_normalized": "1.29.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/hook_event_dispatcher.git", + "reference": "8.x-1.29" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/hook_event_dispatcher-8.x-1.29.zip", + "reference": "8.x-1.29", + "shasum": "81cbc5f27b1e62ee323b27fb826ec75d3762c68f" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "require-dev": { + "drupal/coder": "8.3.1", + "drupal/core": "^8.8", + "drupal/eck": "^1.0@alpha", + "drupal/paragraphs": "^1.10", + "drupal/webform": "*", + "mockery/mockery": "^1.3", + "php-parallel-lint/php-parallel-lint": "^1.0", + "phpmd/phpmd": "2.7.0", + "phpunit/phpunit": "^7", + "squizlabs/php_codesniffer": "^3.4" + }, + "suggest": { + "drupal/paragraphs": "Enables the creation of paragraphs entities.", + "drupal/token": "Provides additional tokens not supported by core (most notably fields), as well as a UI for browsing tokens." + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.29", + "datestamp": "1589110992", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Drupal\\hook_event_dispatcher\\": "src/", + "Drupal\\webform_event_dispatcher\\": "modules/webform_event_dispatcher/src/" + } + }, + "autoload-dev": { + "psr-4": { + "Drupal\\Tests\\hook_event_dispatcher\\": "tests/src/", + "Drupal\\Tests\\webform_event_dispatcher\\": "modules/webform_event_dispatcher/tests/src/", + "Drupal\\Tests\\": "vendor/drupal/core/tests/Drupal/Tests", + "Drupal\\TestTools\\": "vendor/drupal/core/tests/Drupal/TestTools", + "Drupal\\views\\": "vendor/drupal/core/modules/views/src/" + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", + "scripts": { + "test": [ + "@phplint", + "@phpunit", + "@phpcs", + "@phpmd" + ], + "phplint": [ + "vendor/bin/parallel-lint --exclude vendor/ --exclude .idea/ -e php,module,inc,install,profile,theme ." + ], + "phpunit": [ + "vendor/bin/phpunit --configuration=phpunit.xml" + ], + "phpcs": [ + "vendor/bin/phpcs --ignore=vendor/,.idea/ --standard=vendor/drupal/coder/coder_sniffer/Drupal/ruleset.xml --extensions=php,module,inc,install,profile,theme --report=full --warning-severity=0 ." + ], + "phpcbf": [ + "vendor/bin/phpcbf --ignore=vendor/,.idea/ --standard=vendor/drupal/coder/coder_sniffer/Drupal/ruleset.xml --extensions=php,module,inc,install,profile,theme ." + ], + "phpmd": [ + "vendor/bin/phpmd --exclude vendor/,.idea/ --suffixes php,module,inc,install,profile,theme . text phpmd.xml" + ] + }, + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "pdenooijer", + "homepage": "https://www.drupal.org/user/3175437" + }, + { + "name": "robin.ingelbrecht", + "homepage": "https://www.drupal.org/user/2339074" + } + ], + "description": "Dispatches events for several drupal core hooks.", + "homepage": "https://www.drupal.org/project/hook_event_dispatcher", + "support": { + "source": "https://git.drupalcode.org/project/hook_event_dispatcher" + }, + "install-path": "../../web/modules/contrib/hook_event_dispatcher" + }, + { + "name": "drupal/hotjar", + "version": "2.0.0", + "version_normalized": "2.0.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/hotjar.git", + "reference": "8.x-2.0" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/hotjar-8.x-2.0.zip", + "reference": "8.x-2.0", + "shasum": "a2e21a22bcc7ba5e6f374350220eb00b1167722c" + }, + "require": { + "drupal/core": "^8.8 || ^9", + "ext-json": "*" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.0", + "datestamp": "1605689024", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "csakiistvan", + "homepage": "https://www.drupal.org/user/491514" + }, + { + "name": "tikaszvince", + "homepage": "https://www.drupal.org/user/337178" + } + ], + "description": "Allows your site to be tracked by Hotjar by adding a Javascript tracking code to every page", + "homepage": "https://www.drupal.org/project/hotjar", + "support": { + "source": "https://git.drupalcode.org/project/hotjar" + }, + "install-path": "../../web/modules/contrib/hotjar" + }, + { + "name": "drupal/imagemagick", + "version": "2.7.0", + "version_normalized": "2.7.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/imagemagick.git", + "reference": "8.x-2.7" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/imagemagick-8.x-2.7.zip", + "reference": "8.x-2.7", + "shasum": "e70fa0124305d99d5cf3f59d95c3e52657c1c8b4" + }, + "require": { + "drupal/core": "^8.3", + "drupal/file_mdm": "^1.1", + "drupal/file_mdm_exif": "^1.1", + "fileeye/mimemap": "^1.1.1" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.7", + "datestamp": "1581425670", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Chris Charlton", + "homepage": "https://www.drupal.org/user/17089" + }, + { + "name": "chx", + "homepage": "https://www.drupal.org/user/9446" + }, + { + "name": "claudiu.cristea", + "homepage": "https://www.drupal.org/user/56348" + }, + { + "name": "dman", + "homepage": "https://www.drupal.org/user/33240" + }, + { + "name": "dopry", + "homepage": "https://www.drupal.org/user/22202" + }, + { + "name": "drewish", + "homepage": "https://www.drupal.org/user/34869" + }, + { + "name": "gdl", + "homepage": "https://www.drupal.org/user/507326" + }, + { + "name": "mondrake", + "homepage": "https://www.drupal.org/user/1307444" + }, + { + "name": "quicksketch", + "homepage": "https://www.drupal.org/user/35821" + }, + { + "name": "sun", + "homepage": "https://www.drupal.org/user/54136" + }, + { + "name": "walkah", + "homepage": "https://www.drupal.org/user/1531" + } + ], + "description": "Provides an image toolkit to integrate ImageMagick with the Image API.", + "homepage": "https://www.drupal.org/project/imagemagick", + "support": { + "source": "https://git.drupalcode.org/project/imagemagick" + }, + "install-path": "../../web/modules/contrib/imagemagick" + }, + { + "name": "drupal/imce", + "version": "2.3.0", + "version_normalized": "2.3.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/imce.git", + "reference": "8.x-2.3" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/imce-8.x-2.3.zip", + "reference": "8.x-2.3", + "shasum": "87548af8f66ef91146b70046755c1700a3847be6" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.3", + "datestamp": "1599926540", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "See contributors", + "homepage": "https://www.drupal.org/node/2841111/committers", + "role": "Developer" + }, + { + "name": "ufku", + "homepage": "https://www.drupal.org/user/9910" + } + ], + "description": "Provides a file manager supporting personal folders.", + "homepage": "https://drupal.org/project/imce", + "support": { + "source": "https://git.drupalcode.org/project/imce", + "issues": "https://www.drupal.org/project/issues/imce?version=8.x" + }, + "install-path": "../../web/modules/contrib/imce" + }, + { + "name": "drupal/jquery_ui", + "version": "1.4.0", + "version_normalized": "1.4.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/jquery_ui.git", + "reference": "8.x-1.4" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/jquery_ui-8.x-1.4.zip", + "reference": "8.x-1.4", + "shasum": "64c19ecc8902e2b4b1ab0cc5f5fe28dbc83bfebe" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.4", + "datestamp": "1582149957", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "RobLoach", + "homepage": "https://www.drupal.org/user/61114" + }, + { + "name": "jjeff", + "homepage": "https://www.drupal.org/user/17190" + }, + { + "name": "lauriii", + "homepage": "https://www.drupal.org/user/1078742" + }, + { + "name": "litwol", + "homepage": "https://www.drupal.org/user/78134" + }, + { + "name": "mfb", + "homepage": "https://www.drupal.org/user/12302" + }, + { + "name": "mfer", + "homepage": "https://www.drupal.org/user/25701" + }, + { + "name": "mikelutz", + "homepage": "https://www.drupal.org/user/2972409" + }, + { + "name": "sun", + "homepage": "https://www.drupal.org/user/54136" + }, + { + "name": "webchick", + "homepage": "https://www.drupal.org/user/24967" + }, + { + "name": "zrpnr", + "homepage": "https://www.drupal.org/user/1448368" + } + ], + "description": "Provides jQuery UI library.", + "homepage": "https://www.drupal.org/project/jquery_ui", + "support": { + "source": "https://git.drupalcode.org/project/jquery_ui" + }, + "install-path": "../../web/modules/contrib/jquery_ui" + }, + { + "name": "drupal/jquery_ui_draggable", + "version": "1.2.0", + "version_normalized": "1.2.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/jquery_ui_draggable.git", + "reference": "8.x-1.2" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/jquery_ui_draggable-8.x-1.2.zip", + "reference": "8.x-1.2", + "shasum": "09e17046e38aebf84ed573822b0d5be6de3f0c94" + }, + "require": { + "drupal/core": "^8 || ^9", + "drupal/jquery_ui": "*" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.2", + "datestamp": "1582150027", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "bnjmnm", + "homepage": "https://www.drupal.org/user/2369194" + }, + { + "name": "lauriii", + "homepage": "https://www.drupal.org/user/1078742" + }, + { + "name": "zrpnr", + "homepage": "https://www.drupal.org/user/1448368" + } + ], + "description": "Provides jQuery UI Draggable library.", + "homepage": "https://www.drupal.org/project/jquery_ui_draggable", + "support": { + "source": "https://git.drupalcode.org/project/jquery_ui_draggable" + }, + "install-path": "../../web/modules/contrib/jquery_ui_draggable" + }, + { + "name": "drupal/jquery_ui_droppable", + "version": "1.2.0", + "version_normalized": "1.2.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/jquery_ui_droppable.git", + "reference": "8.x-1.2" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/jquery_ui_droppable-8.x-1.2.zip", + "reference": "8.x-1.2", + "shasum": "6e53043f2d3215f211721eea4d4c6ab5d1672b14" + }, + "require": { + "drupal/core": "^8 || ^9", + "drupal/jquery_ui": "*", + "drupal/jquery_ui_draggable": "*" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.2", + "datestamp": "1582150071", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "bnjmnm", + "homepage": "https://www.drupal.org/user/2369194" + }, + { + "name": "lauriii", + "homepage": "https://www.drupal.org/user/1078742" + }, + { + "name": "zrpnr", + "homepage": "https://www.drupal.org/user/1448368" + } + ], + "description": "Provides jQuery UI Droppable library.", + "homepage": "https://www.drupal.org/project/jquery_ui_droppable", + "support": { + "source": "https://git.drupalcode.org/project/jquery_ui_droppable" + }, + "install-path": "../../web/modules/contrib/jquery_ui_droppable" + }, + { + "name": "drupal/kint", + "version": "2.1.0", + "version_normalized": "2.1.0.0", + "require": { + "drupal/core": "~8.0", + "drupal/devel": "^2" + }, + "type": "metapackage", + "extra": { + "drupal": { + "version": "8.x-2.1", + "datestamp": "1556799496", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "drupalspoons", + "homepage": "https://www.drupal.org/user/3647684" + }, + { + "name": "moshe weitzman", + "homepage": "https://www.drupal.org/user/23" + } + ], + "description": "Wrapper for Kint debugging tool.", + "homepage": "https://www.drupal.org/project/devel", + "support": { + "source": "https://git.drupalcode.org/project/devel" + }, + "install-path": null + }, + { + "name": "drupal/ludwig", + "version": "1.7.0", + "version_normalized": "1.7.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/ludwig.git", + "reference": "8.x-1.7" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/ludwig-8.x-1.7.zip", + "reference": "8.x-1.7", + "shasum": "d951c3b4f76f8b0c2f8877793a392868f3537743" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.7", + "datestamp": "1613389167", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "bojanz", + "homepage": "https://www.drupal.org/user/86106" + }, + { + "name": "devad", + "homepage": "https://www.drupal.org/user/2268520" + }, + { + "name": "jsacksick", + "homepage": "https://www.drupal.org/user/972218" + }, + { + "name": "mglaman", + "homepage": "https://www.drupal.org/user/2416470" + } + ], + "description": "Provides a manual alternative to Composer.", + "homepage": "https://www.drupal.org/project/ludwig", + "support": { + "source": "https://git.drupalcode.org/project/ludwig" + }, + "install-path": "../../web/modules/contrib/ludwig" + }, + { + "name": "drupal/mailsystem", + "version": "4.3.0", + "version_normalized": "4.3.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/mailsystem.git", + "reference": "8.x-4.3" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/mailsystem-8.x-4.3.zip", + "reference": "8.x-4.3", + "shasum": "1a74016e268ff207535be5d5e42ac8f72ac89050" + }, + "require": { + "drupal/core": "^8.7.7 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-4.3", + "datestamp": "1586203024", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Berdir", + "homepage": "https://www.drupal.org/user/214652" + }, + { + "name": "Les Lim", + "homepage": "https://www.drupal.org/user/84263" + }, + { + "name": "Manuel Garcia", + "homepage": "https://www.drupal.org/user/213194" + }, + { + "name": "Nafes", + "homepage": "https://www.drupal.org/user/2489926" + }, + { + "name": "miro_dietiker", + "homepage": "https://www.drupal.org/user/227761" + }, + { + "name": "pillarsdotnet", + "homepage": "https://www.drupal.org/user/36148" + } + ], + "description": "Mail System", + "homepage": "https://www.drupal.org/project/mailsystem", + "support": { + "source": "https://git.drupalcode.org/project/mailsystem" + }, + "install-path": "../../web/modules/contrib/mailsystem" + }, + { + "name": "drupal/matomo", + "version": "1.11.0", + "version_normalized": "1.11.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/matomo.git", + "reference": "8.x-1.11" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/matomo-8.x-1.11.zip", + "reference": "8.x-1.11", + "shasum": "82be96c20ab15df03d199ab98d047cef6e67d40b" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "require-dev": { + "drupal/php": "*", + "drupal/token": "*" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.11", + "datestamp": "1601651459", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Carsten Logemann", + "homepage": "https://www.drupal.org/u/C_Logemann" + }, + { + "name": "Shelane French", + "homepage": "https://www.drupal.org/u/shelane" + }, + { + "name": "See other contributors", + "homepage": "https://www.drupal.org/node/247808/committers" + } + ], + "description": "Adds Matomo javascript tracking code to all your site's pages", + "homepage": "https://www.drupal.org/project/matomo", + "support": { + "source": "https://git.drupal.org/project/matomo.git", + "issues": "https://www.drupal.org/project/issues/matomo" + }, + "install-path": "../../web/modules/contrib/matomo" + }, + { + "name": "drupal/memcache", + "version": "2.3.0", + "version_normalized": "2.3.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/memcache.git", + "reference": "8.x-2.3" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/memcache-8.x-2.3.zip", + "reference": "8.x-2.3", + "shasum": "b2f9715612be74f9ce55daaf838f6f17a9eb2f5a" + }, + "require": { + "drupal/core": "^8.9 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.3", + "datestamp": "1614802365", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "branch-alias": { + "dev-8.x-2.x": "2.x-dev" + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Fabianx", + "homepage": "https://www.drupal.org/user/693738" + }, + { + "name": "Jeremy", + "homepage": "https://www.drupal.org/user/409" + }, + { + "name": "bdragon", + "homepage": "https://www.drupal.org/user/53081" + }, + { + "name": "catch", + "homepage": "https://www.drupal.org/user/35733" + }, + { + "name": "damiankloip", + "homepage": "https://www.drupal.org/user/1037976" + }, + { + "name": "japerry", + "homepage": "https://www.drupal.org/user/45640" + }, + { + "name": "jvandyk", + "homepage": "https://www.drupal.org/user/2375" + }, + { + "name": "robertDouglass", + "homepage": "https://www.drupal.org/user/5449" + } + ], + "description": "High performance integration with memcache.", + "homepage": "http://drupal.org/project/memcache", + "support": { + "source": "https://git.drupalcode.org/project/memcache", + "issues": "https://www.drupal.org/project/issues/memcache" + }, + "install-path": "../../web/modules/contrib/memcache" + }, + { + "name": "drupal/menu_block", + "version": "1.6.0", + "version_normalized": "1.6.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/menu_block.git", + "reference": "8.x-1.6" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/menu_block-8.x-1.6.zip", + "reference": "8.x-1.6", + "shasum": "3da96af15c3a5f5f1966e28b6e87b74228617998" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.6", + "datestamp": "1587721600", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Dave Reid", + "homepage": "https://www.drupal.org/user/53892" + }, + { + "name": "JohnAlbin", + "homepage": "https://www.drupal.org/user/32095" + }, + { + "name": "RenatoG", + "homepage": "https://www.drupal.org/user/3326031" + }, + { + "name": "joelpittet", + "homepage": "https://www.drupal.org/user/160302" + }, + { + "name": "kim.pepper", + "homepage": "https://www.drupal.org/user/370574" + }, + { + "name": "rrrob", + "homepage": "https://www.drupal.org/user/273533" + } + ], + "description": "Provides configurable blocks of menu links.", + "homepage": "https://www.drupal.org/project/menu_block", + "support": { + "source": "https://git.drupalcode.org/project/menu_block" + }, + "install-path": "../../web/modules/contrib/menu_block" + }, + { + "name": "drupal/menu_breadcrumb", + "version": "1.14.0", + "version_normalized": "1.14.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/menu_breadcrumb.git", + "reference": "8.x-1.14" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/menu_breadcrumb-8.x-1.14.zip", + "reference": "8.x-1.14", + "shasum": "3edeb447410cdb0635d0babbfc641010014bee7f" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.14", + "datestamp": "1598626277", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "RyanPrice", + "homepage": "https://www.drupal.org/user/873848" + }, + { + "name": "aaron", + "homepage": "https://www.drupal.org/user/33420" + }, + { + "name": "gdevlugt", + "homepage": "https://www.drupal.org/user/167273" + }, + { + "name": "rphair", + "homepage": "https://www.drupal.org/user/3196607" + }, + { + "name": "vaibhavjain", + "homepage": "https://www.drupal.org/user/1159692" + }, + { + "name": "xurizaemon", + "homepage": "https://www.drupal.org/user/76026" + } + ], + "description": "Create breadcrumbs from nested menu titles and/or taxonomy membership.", + "homepage": "https://www.drupal.org/project/menu_breadcrumb", + "support": { + "source": "https://git.drupalcode.org/project/menu_breadcrumb" + }, + "install-path": "../../web/modules/contrib/menu_breadcrumb" + }, + { + "name": "drupal/menu_force", + "version": "1.2.0", + "version_normalized": "1.2.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/menu_force.git", + "reference": "8.x-1.2" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/menu_force-8.x-1.2.zip", + "reference": "8.x-1.2", + "shasum": "96036cf057002223ee08d1f03e494cbad25439ac" + }, + "require": { + "drupal/core": "^8.7.7 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.2", + "datestamp": "1593463689", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "BarisW", + "homepage": "https://www.drupal.org/user/107229" + }, + { + "name": "perennial.sky", + "homepage": "https://www.drupal.org/user/2622667" + }, + { + "name": "scuba_fly", + "homepage": "https://www.drupal.org/user/953390" + } + ], + "description": "Makes sure a node gets added to the menu system on specific content types", + "homepage": "https://www.drupal.org/project/menu_force", + "support": { + "source": "https://git.drupalcode.org/project/menu_force" + }, + "install-path": "../../web/modules/contrib/menu_force" + }, + { + "name": "drupal/metatag", + "version": "1.16.0", + "version_normalized": "1.16.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/metatag.git", + "reference": "8.x-1.16" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/metatag-8.x-1.16.zip", + "reference": "8.x-1.16", + "shasum": "1c0028f4ff4583dc6601035657dd631c351b290c" + }, + "require": { + "drupal/core": "^8 || ^9", + "drupal/token": "^1.0" + }, + "require-dev": { + "drupal/devel": "^4.0", + "drupal/metatag_dc": "*", + "drupal/metatag_open_graph": "*", + "drupal/page_manager": "4.x-dev", + "drupal/panelizer": "4.x-dev", + "drupal/redirect": "1.x-dev" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.16", + "datestamp": "1615820867", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "See contributors", + "homepage": "https://www.drupal.org/node/640498/committers", + "role": "Developer" + }, + { + "name": "Dave Reid", + "homepage": "https://www.drupal.org/user/53892" + } + ], + "description": "Manage meta tags for all entities.", + "homepage": "https://www.drupal.org/project/metatag", + "keywords": [ + "Drupal", + "seo" + ], + "support": { + "source": "https://git.drupalcode.org/project/metatag", + "issues": "https://www.drupal.org/project/issues/metatag", + "docs": "https://www.drupal.org/docs/8/modules/metatag" + }, + "install-path": "../../web/modules/contrib/metatag" + }, + { + "name": "drupal/migrate_devel", + "version": "1.4.0", + "version_normalized": "1.4.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/migrate_devel.git", + "reference": "8.x-1.4" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/migrate_devel-8.x-1.4.zip", + "reference": "8.x-1.4", + "shasum": "d8b6c8b1c6238a3a1cae241ce5dca759028c9504" + }, + "require": { + "drupal/core": "^8", + "drupal/devel": "*", + "drupal/kint": "*" + }, + "conflict": { + "drupal/core": ">=9", + "drush/drush": ">=9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.4", + "datestamp": "1592350448", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Derimagia", + "homepage": "https://www.drupal.org/user/819640" + }, + { + "name": "aczietlow", + "homepage": "https://www.drupal.org/user/1616656" + }, + { + "name": "andrewmacpherson", + "homepage": "https://www.drupal.org/user/265648" + } + ], + "description": "Migrate Development Tools", + "homepage": "https://www.drupal.org/project/migrate_devel", + "support": { + "source": "https://git.drupalcode.org/project/migrate_devel", + "issues": "https://www.drupal.org/project/issues/migrate_devel" + }, + "install-path": "../../web/modules/contrib/migrate_devel" + }, + { + "name": "drupal/migrate_plus", + "version": "4.2.0", + "version_normalized": "4.2.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/migrate_plus.git", + "reference": "8.x-4.2" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/migrate_plus-8.x-4.2.zip", + "reference": "8.x-4.2", + "shasum": "5736a43e39cc5c091d54ceef2849ea35ba979af3" + }, + "require": { + "drupal/core": "^8.3" + }, + "require-dev": { + "drupal/entity": "*", + "drupal/migrate_example_advanced_setup": "*", + "drupal/migrate_example_setup": "*", + "drupal/migrate_tools": "*", + "drupal/profile": "*" + }, + "suggest": { + "ext-soap": "*", + "sainsburys/guzzle-oauth2-plugin": "3.0 required for the OAuth2 authentication plugin" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-4.2", + "datestamp": "1555683487", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Mike Ryan", + "homepage": "https://www.drupal.org/u/mikeryan", + "role": "Maintainer" + }, + { + "name": "mikeryan", + "homepage": "https://www.drupal.org/user/4420" + } + ], + "description": "Enhancements to core migration support.", + "homepage": "https://www.drupal.org/project/migrate_plus", + "support": { + "source": "https://cgit.drupalcode.org/migrate_plus", + "issues": "https://www.drupal.org/project/issues/migrate_plus", + "irc": "irc://irc.freenode.org/drupal-migrate" + }, + "install-path": "../../web/modules/contrib/migrate_plus" + }, + { + "name": "drupal/migrate_tools", + "version": "4.5.0", + "version_normalized": "4.5.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/migrate_tools.git", + "reference": "8.x-4.5" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/migrate_tools-8.x-4.5.zip", + "reference": "8.x-4.5", + "shasum": "06390b359bf53c50a30f2d6dc4c7542bfb1fe7ca" + }, + "require": { + "drupal/core": "^8 || ^9", + "drupal/migrate_plus": "^4 || ^5" + }, + "require-dev": { + "drupal/migrate_plus": "4.x-dev", + "drupal/migrate_source_csv": "^2.2", + "drush/drush": "^10" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-4.5", + "datestamp": "1574693285", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "drush": { + "services": { + "drush.services.yml": "^9 || ^10" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "drupalspoons", + "homepage": "https://www.drupal.org/user/3647684" + }, + { + "name": "mikeryan", + "homepage": "https://www.drupal.org/user/4420" + } + ], + "description": "Tools to assist in developing and running migrations.", + "homepage": "http://drupal.org/project/migrate_tools", + "support": { + "source": "http://cgit.drupalcode.org/migrate_tools", + "issues": "http://drupal.org/project/migrate_tools", + "irc": "irc://irc.freenode.org/drupal-migrate" + }, + "install-path": "../../web/modules/contrib/migrate_tools" + }, + { + "name": "drupal/migrate_upgrade", + "version": "3.2.0", + "version_normalized": "3.2.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/migrate_upgrade.git", + "reference": "8.x-3.2" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/migrate_upgrade-8.x-3.2.zip", + "reference": "8.x-3.2", + "shasum": "f7be28c9fa9e2c56db24fafaf4e9cd6815582aed" + }, + "require": { + "drupal/core": "^8 || ^9", + "drupal/migrate_plus": "^4 || ^5", + "drush/drush": "^8 || ^9 || ^10", + "php": ">7.1" + }, + "require-dev": { + "drupal/migrate_plus": "^5", + "drush/drush": "^10" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-3.2", + "datestamp": "1588260599", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "drush": { + "services": { + "drush.services.yml": "^9 || ^10" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Mike Ryan", + "homepage": "https://www.drupal.org/u/mikeryan", + "role": "Maintainer" + }, + { + "name": "Lucas Hedding", + "homepage": "https://www.drupal.org/u/heddn", + "role": "Maintainer" + } + ], + "description": "Drush support for direct upgrades from older Drupal versions.", + "homepage": "https://www.drupal.org/project/migrate_upgrade", + "support": { + "source": "https://git.drupalcode.org/project/migrate_upgrade", + "issues": "https://www.drupal.org/project/issues/migrate_upgrade", + "slack": "#migrate" + }, + "install-path": "../../web/modules/contrib/migrate_upgrade" + }, + { + "name": "drupal/module_filter", + "version": "3.2.0", + "version_normalized": "3.2.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/module_filter.git", + "reference": "8.x-3.2" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/module_filter-8.x-3.2.zip", + "reference": "8.x-3.2", + "shasum": "b5c1a5141da392340232a1ad0934b921b862e1f4" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-3.2", + "datestamp": "1614918371", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "andrey.troeglazov", + "homepage": "https://www.drupal.org/user/3145389" + }, + { + "name": "greenSkin", + "homepage": "https://www.drupal.org/user/173855" + } + ], + "description": "Filter the modules list.", + "homepage": "http://drupal.org/project/module_filter", + "support": { + "source": "https://git.drupalcode.org/project/module_filter", + "issues": "https://www.drupal.org/project/issues/module_filter" + }, + "install-path": "../../web/modules/contrib/module_filter" + }, + { + "name": "drupal/node_view_permissions", + "version": "1.4.0", + "version_normalized": "1.4.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/node_view_permissions.git", + "reference": "8.x-1.4" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/node_view_permissions-8.x-1.4.zip", + "reference": "8.x-1.4", + "shasum": "ba113ff1be022517a739dbf16d5caaae6dcccfd9" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.4", + "datestamp": "1603096039", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "adci_contributor", + "homepage": "https://www.drupal.org/user/1830536" + }, + { + "name": "adcillc", + "homepage": "https://www.drupal.org/user/366450" + }, + { + "name": "hoter", + "homepage": "https://www.drupal.org/user/1677790" + } + ], + "description": "Enables permissions \"View own content\" and \"View any content\" for each content type.", + "homepage": "https://www.drupal.org/project/node_view_permissions", + "support": { + "source": "https://git.drupalcode.org/project/node_view_permissions" + }, + "install-path": "../../web/modules/contrib/node_view_permissions" + }, + { + "name": "drupal/openid_connect", + "version": "1.0.0", + "version_normalized": "1.0.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/openid_connect.git", + "reference": "8.x-1.0" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/openid_connect-8.x-1.0.zip", + "reference": "8.x-1.0", + "shasum": "62127d6f81950124c41a76f921678ab6f0a651e3" + }, + "require": { + "drupal/core": "^8.8 || ^9", + "ext-json": "*" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.0", + "datestamp": "1608316550", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Mario Steinitz", + "homepage": "https://www.drupal.org/user/2536014" + }, + { + "name": "balintk", + "homepage": "https://www.drupal.org/user/613760" + }, + { + "name": "bojanz", + "homepage": "https://www.drupal.org/user/86106" + }, + { + "name": "jcnventura", + "homepage": "https://www.drupal.org/user/122464" + }, + { + "name": "pfrilling", + "homepage": "https://www.drupal.org/user/169695" + }, + { + "name": "pjcdawkins", + "homepage": "https://www.drupal.org/user/1025236" + }, + { + "name": "robertDouglass", + "homepage": "https://www.drupal.org/user/5449" + }, + { + "name": "sanduhrs", + "homepage": "https://www.drupal.org/user/28074" + } + ], + "description": "A pluggable client implementation for the OpenID Connect protocol.", + "homepage": "https://www.drupal.org/project/openid_connect", + "keywords": [ + "Drupal" + ], + "support": { + "source": "https://git.drupalcode.org/project/openid_connect", + "issues": "https://www.drupal.org/project/issues/openid_connect" + }, + "install-path": "../../web/modules/contrib/openid_connect" + }, + { + "name": "drupal/panelbutton", + "version": "1.3.0", + "version_normalized": "1.3.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/panelbutton.git", + "reference": "8.x-1.3" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/panelbutton-8.x-1.3.zip", + "reference": "8.x-1.3", + "shasum": "1d65e6b9d9b1dfbc27364e2b713f63826bc33031" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.3", + "datestamp": "1592593051", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Kevin Quillen (kevinquillen)", + "homepage": "https://www.drupal.org/u/kevinquillen", + "role": "Maintainer" + }, + { + "name": "ddrozdik", + "homepage": "https://www.drupal.org/user/574124" + }, + { + "name": "kevinquillen", + "homepage": "https://www.drupal.org/user/317279" + } + ], + "description": "Adds the Panel Button plugin to CKEditor. This plugin is a utility plugin that is required by certain user-facing CKEditor plugins.", + "homepage": "http://drupal.org/project/panelbutton", + "keywords": [ + "Drupal" + ], + "support": { + "source": "http://cgit.drupalcode.org/panelbutton", + "issues": "http://drupal.org/project/issues/panelbutton" + }, + "install-path": "../../web/modules/contrib/panelbutton" + }, + { + "name": "drupal/panelizer", + "version": "4.4.0", + "version_normalized": "4.4.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/panelizer.git", + "reference": "8.x-4.4" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/panelizer-8.x-4.4.zip", + "reference": "8.x-4.4", + "shasum": "2d19f0be1ad05a0882a276befabf746041b1b5d8" + }, + "require": { + "drupal/core": "^8.8 || ^9", + "drupal/ctools": ">=3.1.0", + "drupal/ctools_block": "*", + "drupal/panels": ">=4.4.0", + "drupal/panels_ipe": "*" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-4.4", + "datestamp": "1588097387", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "branch-alias": { + "dev-8.x-4.x": "4.x-dev" + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Damien McKenna", + "homepage": "https://www.drupal.org/u/damienmckenna" + }, + { + "name": "Kris Vanderwater", + "homepage": "https://www.drupal.org/u/eclipsegc" + }, + { + "name": "David Snopek", + "homepage": "https://www.drupal.org/u/dsnopek" + }, + { + "name": "Jakob Perry", + "homepage": "https://www.drupal.org/u/japerry" + }, + { + "name": "Earl Miles", + "homepage": "https://www.drupal.org/u/merlinofchaos" + }, + { + "name": "See other contributors", + "homepage": "https://www.drupal.org/node/1072922/committers" + }, + { + "name": "phenaproxima", + "homepage": "https://www.drupal.org/user/205645" + }, + { + "name": "tim.plunkett", + "homepage": "https://www.drupal.org/user/241634" + } + ], + "description": "Allow any entity view mode to be rendered using a Panels display.", + "homepage": "https://www.drupal.org/project/panelizer", + "support": { + "source": "http://git.drupal.org/project/panelizer.git", + "issues": "https://www.drupal.org/project/issues/panelizer", + "irc": "irc://irc.freenode.org/drupal-scotch" + }, + "install-path": "../../web/modules/contrib/panelizer" + }, + { + "name": "drupal/panels", + "version": "4.6.0", + "version_normalized": "4.6.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/panels.git", + "reference": "8.x-4.6" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/panels-8.x-4.6.zip", + "reference": "8.x-4.6", + "shasum": "6430436a4d8fb64f8c113729dd92505a1e46b794" + }, + "require": { + "drupal/core": "^8.8 || ^9", + "drupal/ctools": ">=3.0.0", + "drupal/jquery_ui_droppable": "^1.2" + }, + "require-dev": { + "drupal/jquery_ui_droppable": "*", + "drupal/page_manager": "^4" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-4.6", + "datestamp": "1585870866", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "branch-alias": { + "dev-8.x-4.x": "4.x-dev" + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Jakob Perry", + "homepage": "https://www.drupal.org/u/japerry" + }, + { + "name": "Samuel Mortenson", + "homepage": "https://www.drupal.org/u/samuel.mortenson" + }, + { + "name": "See other contributors", + "homepage": "https://www.drupal.org/node/74958/committers" + }, + { + "name": "japerry", + "homepage": "https://www.drupal.org/user/45640" + }, + { + "name": "joelpittet", + "homepage": "https://www.drupal.org/user/160302" + }, + { + "name": "merlinofchaos", + "homepage": "https://www.drupal.org/user/26979" + }, + { + "name": "neclimdul", + "homepage": "https://www.drupal.org/user/48673" + }, + { + "name": "phenaproxima", + "homepage": "https://www.drupal.org/user/205645" + }, + { + "name": "samuel.mortenson", + "homepage": "https://www.drupal.org/user/2582268" + }, + { + "name": "tim.plunkett", + "homepage": "https://www.drupal.org/user/241634" + } + ], + "description": "Core Panels display functions; provides no external UI, at least one other Panels module should be enabled.", + "homepage": "https://www.drupal.org/project/panels", + "support": { + "source": "http://git.drupal.org/project/panels.git", + "issues": "https://www.drupal.org/project/issues/panels", + "irc": "irc://irc.freenode.org/drupal-scotch" + }, + "install-path": "../../web/modules/contrib/panels" + }, + { + "name": "drupal/panels_ipe", + "version": "4.6.0", + "version_normalized": "4.6.0.0", + "require": { + "drupal/core": "^8.8 || ^9", + "drupal/jquery_ui_droppable": "*", + "drupal/panels": "*" + }, + "type": "metapackage", + "extra": { + "drupal": { + "version": "8.x-4.6", + "datestamp": "1585870866", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "EclipseGc", + "homepage": "https://www.drupal.org/user/61203" + }, + { + "name": "Letharion", + "homepage": "https://www.drupal.org/user/373603" + }, + { + "name": "esmerel", + "homepage": "https://www.drupal.org/user/164022" + }, + { + "name": "japerry", + "homepage": "https://www.drupal.org/user/45640" + }, + { + "name": "joelpittet", + "homepage": "https://www.drupal.org/user/160302" + }, + { + "name": "merlinofchaos", + "homepage": "https://www.drupal.org/user/26979" + }, + { + "name": "neclimdul", + "homepage": "https://www.drupal.org/user/48673" + }, + { + "name": "phenaproxima", + "homepage": "https://www.drupal.org/user/205645" + }, + { + "name": "samuel.mortenson", + "homepage": "https://www.drupal.org/user/2582268" + }, + { + "name": "tim.plunkett", + "homepage": "https://www.drupal.org/user/241634" + } + ], + "description": "Panels In-place editor.", + "homepage": "https://www.drupal.org/project/panels", + "support": { + "source": "https://git.drupalcode.org/project/panels" + }, + "install-path": null + }, + { + "name": "drupal/paragraphs", + "version": "1.12.0", + "version_normalized": "1.12.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/paragraphs.git", + "reference": "8.x-1.12" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/paragraphs-8.x-1.12.zip", + "reference": "8.x-1.12", + "shasum": "3b67d8af1160af42d93a4610be1e02869e428965" + }, + "require": { + "drupal/core": "^8.8 || ^9", + "drupal/entity_reference_revisions": "~1.3" + }, + "require-dev": { + "drupal/block_field": "~1.0", + "drupal/ctools": "3.x-dev", + "drupal/diff": "~1.0", + "drupal/entity_browser": "2.x-dev", + "drupal/entity_usage": "2.x-dev", + "drupal/field_group": "3.x-dev", + "drupal/inline_entity_form": "~1.0", + "drupal/paragraphs-paragraphs_library": "*", + "drupal/replicate": "~1.0", + "drupal/search_api": "~1.0", + "drupal/search_api_db": "*" + }, + "suggest": { + "drupal/entity_browser": "Recommended for an improved user experience when using the Paragraphs library module" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.12", + "datestamp": "1590140081", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Berdir", + "homepage": "https://www.drupal.org/user/214652" + }, + { + "name": "Frans", + "homepage": "https://www.drupal.org/user/514222" + }, + { + "name": "Primsi", + "homepage": "https://www.drupal.org/user/282629" + }, + { + "name": "jeroen.b", + "homepage": "https://www.drupal.org/user/1853532" + }, + { + "name": "jstoller", + "homepage": "https://www.drupal.org/user/99012" + }, + { + "name": "miro_dietiker", + "homepage": "https://www.drupal.org/user/227761" + } + ], + "description": "Enables the creation of Paragraphs entities.", + "homepage": "https://www.drupal.org/project/paragraphs", + "support": { + "source": "https://git.drupalcode.org/project/paragraphs" + }, + "install-path": "../../web/modules/contrib/paragraphs" + }, + { + "name": "drupal/pathauto", + "version": "1.8.0", + "version_normalized": "1.8.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/pathauto.git", + "reference": "8.x-1.8" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/pathauto-8.x-1.8.zip", + "reference": "8.x-1.8", + "shasum": "ede3216abb9c4f77709338d9147334c595046329" + }, + "require": { + "drupal/core": "^8.8 || ^9", + "drupal/ctools": "*", + "drupal/token": "*" + }, + "suggest": { + "drupal/redirect": "When installed Pathauto will provide a new \"Update Action\" in case your URLs change. This is the recommended update action and is considered the best practice for SEO and usability." + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.8", + "datestamp": "1588103046", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "drush": { + "services": { + "drush.services.yml": "^9 || ^10" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Berdir", + "homepage": "https://www.drupal.org/user/214652" + }, + { + "name": "Dave Reid", + "homepage": "https://www.drupal.org/user/53892" + }, + { + "name": "Freso", + "homepage": "https://www.drupal.org/user/27504" + }, + { + "name": "greggles", + "homepage": "https://www.drupal.org/user/36762" + } + ], + "description": "Provides a mechanism for modules to automatically generate aliases for the content they manage.", + "homepage": "https://www.drupal.org/project/pathauto", + "support": { + "source": "https://cgit.drupalcode.org/pathauto", + "issues": "https://www.drupal.org/project/issues/pathauto", + "documentation": "https://www.drupal.org/docs/8/modules/pathauto" + }, + "install-path": "../../web/modules/contrib/pathauto" + }, + { + "name": "drupal/permissions_by_term", + "version": "2.31.0", + "version_normalized": "2.31.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/permissions_by_term.git", + "reference": "8.x-2.31" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/permissions_by_term-8.x-2.31.zip", + "reference": "8.x-2.31", + "shasum": "b92e303e579937a6985d21751e72ad67a1d4404b" + }, + "require": { + "drupal/core": "^8.0", + "php": ">=7.1.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.31", + "datestamp": "1614602591", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Peter Majmesku", + "homepage": "https://www.drupal.org/user/786132", + "email": "majmesku@publicplan.de" + }, + { + "name": "SaschaHannes", + "homepage": "https://www.drupal.org/user/3536189" + }, + { + "name": "marcoliver", + "homepage": "https://www.drupal.org/user/1529744" + } + ], + "description": "Restricts access to nodes by taxonomy terms in relation to users and their roles.", + "homepage": "https://www.drupal.org/project/permissions_by_term", + "support": { + "source": "https://git.drupalcode.org/project/permissions_by_term" + }, + "install-path": "../../web/modules/contrib/permissions_by_term" + }, + { + "name": "drupal/piwik", + "version": "1.4.0", + "version_normalized": "1.4.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/piwik.git", + "reference": "8.x-1.4" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/piwik-8.x-1.4.zip", + "reference": "8.x-1.4", + "shasum": "3692831f4b3de636e90679fb052ba8f30e49ac97" + }, + "require": { + "drupal/core": "~8.0", + "drupal/matomo": "^1.0" + }, + "require-dev": { + "drupal/php": "*", + "drupal/token": "*" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.4", + "datestamp": "1530437786", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "hass", + "homepage": "https://www.drupal.org/u/hass" + }, + { + "name": "See other contributors", + "homepage": "https://www.drupal.org/node/247808/committers" + } + ], + "description": "Adds Piwik javascript tracking code to all your site's pages", + "homepage": "https://www.drupal.org/project/piwik", + "support": { + "source": "http://git.drupal.org/project/piwik.git", + "issues": "https://www.drupal.org/project/issues/piwik" + }, + "install-path": "../../web/modules/contrib/piwik" + }, + { + "name": "drupal/recaptcha", + "version": "2.5.0", + "version_normalized": "2.5.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/recaptcha.git", + "reference": "8.x-2.5" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/recaptcha-8.x-2.5.zip", + "reference": "8.x-2.5", + "shasum": "ffc4e334c2b09cb04b75fa9e0df3f63d1ebde0bc" + }, + "require": { + "drupal/captcha": "^1.0.0-alpha1", + "drupal/core": "~8.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.5", + "datestamp": "1580340616", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "hass", + "homepage": "https://www.drupal.org/u/hass" + }, + { + "name": "See other contributors", + "homepage": "https://www.drupal.org/node/147903/committers" + }, + { + "name": "amykhailova", + "homepage": "https://www.drupal.org/user/2892725" + }, + { + "name": "diolan", + "homepage": "https://www.drupal.org/user/2336786" + }, + { + "name": "hass", + "homepage": "https://www.drupal.org/user/85918" + }, + { + "name": "id.medion", + "homepage": "https://www.drupal.org/user/2542592" + }, + { + "name": "kim.pepper", + "homepage": "https://www.drupal.org/user/370574" + }, + { + "name": "rfay", + "homepage": "https://www.drupal.org/user/30906" + }, + { + "name": "soxofaan", + "homepage": "https://www.drupal.org/user/41478" + }, + { + "name": "wundo", + "homepage": "https://www.drupal.org/user/25523" + } + ], + "description": "Protect your website from spam and abuse while letting real people pass through with ease.", + "homepage": "https://www.drupal.org/project/recaptcha", + "support": { + "source": "https://git.drupal.org/project/recaptcha.git", + "issues": "https://www.drupal.org/project/issues/recaptcha" + }, + "install-path": "../../web/modules/contrib/recaptcha" + }, + { + "name": "drupal/redirect", + "version": "1.6.0", + "version_normalized": "1.6.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/redirect.git", + "reference": "8.x-1.6" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/redirect-8.x-1.6.zip", + "reference": "8.x-1.6", + "shasum": "f848e001deac8425ae57d4b9397087c491d37294" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.6", + "datestamp": "1589312204", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Berdir", + "homepage": "https://www.drupal.org/user/214652" + }, + { + "name": "Dave Reid", + "homepage": "https://www.drupal.org/user/53892" + }, + { + "name": "pifagor", + "homepage": "https://www.drupal.org/user/2375692" + } + ], + "description": "Allows users to redirect from old URLs to new URLs.", + "homepage": "https://www.drupal.org/project/redirect", + "support": { + "source": "https://git.drupalcode.org/project/redirect" + }, + "install-path": "../../web/modules/contrib/redirect" + }, + { + "name": "drupal/require_login", + "version": "2.4.0", + "version_normalized": "2.4.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/require_login.git", + "reference": "8.x-2.4" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/require_login-8.x-2.4.zip", + "reference": "8.x-2.4", + "shasum": "b47b0bde6925d83fe48b835bfd95ed35296b5897" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.4", + "datestamp": "1615474748", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "robphillips", + "homepage": "https://www.drupal.org/user/459772" + } + ], + "description": "Provides catch-all solution to require user authentication on pages.", + "homepage": "https://www.drupal.org/project/require_login", + "support": { + "source": "https://git.drupalcode.org/project/require_login" + }, + "install-path": "../../web/modules/contrib/require_login" + }, + { + "name": "drupal/rules", + "version": "3.0.0-alpha6", + "version_normalized": "3.0.0.0-alpha6", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/rules.git", + "reference": "8.x-3.0-alpha6" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/rules-8.x-3.0-alpha6.zip", + "reference": "8.x-3.0-alpha6", + "shasum": "073bf5c23f0ef8f1aebf56538249d50d631d5a24" + }, + "require": { + "drupal/core": "^8.7", + "drupal/typed_data": "1.x-dev" + }, + "require-dev": { + "drupal/typed_data": "1.x-dev" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-3.0-alpha6", + "datestamp": "1595975406", + "security-coverage": { + "status": "not-covered", + "message": "Alpha releases are not covered by Drupal security advisories." + } + }, + "drush": { + "services": { + "drush.services.yml": "^9" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TR", + "homepage": "https://www.drupal.org/user/202830" + }, + { + "name": "fago", + "homepage": "https://www.drupal.org/user/16747" + }, + { + "name": "klausi", + "homepage": "https://www.drupal.org/user/262198" + } + ], + "description": "React on events and conditionally evaluate actions.", + "homepage": "https://www.drupal.org/project/rules", + "support": { + "source": "https://git.drupalcode.org/project/rules", + "issues": "https://www.drupal.org/project/issues/rules" + }, + "install-path": "../../web/modules/contrib/rules" + }, + { + "name": "drupal/scheduler", + "version": "1.3.0", + "version_normalized": "1.3.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/scheduler.git", + "reference": "8.x-1.3" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/scheduler-8.x-1.3.zip", + "reference": "8.x-1.3", + "shasum": "704f9e289c7a42ddfb65297beb0be02e324f02c6" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "require-dev": { + "drupal/devel_generate": "^2.0 || 3.x-dev", + "drupal/rules": "^3", + "drush/drush": "^9.0 || ^10" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.3", + "datestamp": "1591436219", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "drush": { + "services": { + "drush.services.yml": "^9" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Eric Schaefer (Eric Schaefer)", + "homepage": "https://www.drupal.org/u/eric-schaefer", + "role": "Maintainer" + }, + { + "name": "Jonathan Smith (jonathan1055)", + "homepage": "https://www.drupal.org/u/jonathan1055", + "role": "Maintainer" + }, + { + "name": "Pieter Frenssen (pfrenssen)", + "homepage": "https://www.drupal.org/u/pfrenssen", + "role": "Maintainer" + }, + { + "name": "Rick Manelius (rickmanelius)", + "homepage": "https://www.drupal.org/u/rickmanelius", + "role": "Maintainer" + } + ], + "description": "Automatically publish and unpublish content at specified dates and times.", + "homepage": "https://drupal.org/project/scheduler", + "support": { + "source": "https://git.drupalcode.org/project/scheduler", + "issues": "https://www.drupal.org/project/issues/scheduler" + }, + "install-path": "../../web/modules/contrib/scheduler" + }, + { + "name": "drupal/search_api", + "version": "1.19.0", + "version_normalized": "1.19.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/search_api.git", + "reference": "8.x-1.19" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/search_api-8.x-1.19.zip", + "reference": "8.x-1.19", + "shasum": "5654e9d02117e28c585d89a25ea3cc40d20c5019" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "conflict": { + "drupal/search_api_solr": "2.* || 3.0 || 3.1" + }, + "require-dev": { + "drupal/language_fallback_fix": "@dev", + "drupal/search_api_autocomplete": "@dev", + "drupal/search_api_db": "*" + }, + "suggest": { + "drupal/facets": "Adds the ability to create faceted searches.", + "drupal/search_api_autocomplete": "Allows adding autocomplete suggestions to search fields.", + "drupal/search_api_solr": "Adds support for using Apache Solr as a backend." + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.19", + "datestamp": "1612192040", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "drush": { + "services": { + "drush.services.yml": "^9" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Thomas Seidl", + "homepage": "https://www.drupal.org/u/drunken-monkey" + }, + { + "name": "Nick Veenhof", + "homepage": "https://www.drupal.org/u/nick_vh" + }, + { + "name": "See other contributors", + "homepage": "https://www.drupal.org/node/790418/committers" + } + ], + "description": "Provides a generic framework for modules offering search capabilities.", + "homepage": "https://www.drupal.org/project/search_api", + "support": { + "source": "https://git.drupalcode.org/project/search_api", + "issues": "https://www.drupal.org/project/issues/search_api", + "irc": "irc://irc.freenode.org/drupal-search-api" + }, + "install-path": "../../web/modules/contrib/search_api" + }, + { + "name": "drupal/simplesamlphp_auth", + "version": "3.2.0", + "version_normalized": "3.2.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/simplesamlphp_auth.git", + "reference": "8.x-3.2" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/simplesamlphp_auth-8.x-3.2.zip", + "reference": "8.x-3.2", + "shasum": "a5a2b10fc873eb8669929ad1a6d9599e47a2ca99" + }, + "require": { + "drupal/core": "^8.7|^9.0", + "drupal/externalauth": "^1.1", + "simplesamlphp/simplesamlphp": "^1.18.2" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-3.2", + "datestamp": "1580423953", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Berdir", + "homepage": "https://www.drupal.org/user/214652" + }, + { + "name": "colan", + "homepage": "https://www.drupal.org/user/58704" + }, + { + "name": "dakku", + "homepage": "https://www.drupal.org/user/97634" + }, + { + "name": "geekwisdom", + "homepage": "https://www.drupal.org/user/1662" + }, + { + "name": "snufkin", + "homepage": "https://www.drupal.org/user/58645" + }, + { + "name": "svendecabooter", + "homepage": "https://www.drupal.org/user/35369" + } + ], + "description": "Allows users to authenticate to a remote SAML identity provider (IdP) via a locally configured SimpleSAMLphp service point (SP).", + "homepage": "https://www.drupal.org/project/simplesamlphp_auth", + "support": { + "source": "https://git.drupalcode.org/project/simplesamlphp_auth" + }, + "install-path": "../../web/modules/contrib/simplesamlphp_auth" + }, + { + "name": "drupal/smart_trim", + "version": "1.3.0", + "version_normalized": "1.3.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/smart_trim.git", + "reference": "8.x-1.3" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/smart_trim-8.x-1.3.zip", + "reference": "8.x-1.3", + "shasum": "5894aa067fba19a3452ed8ce749f33bd9ae91907" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.3", + "datestamp": "1589766531", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Mark Casias (markie)", + "homepage": "https://www.drupal.org/u/markie", + "role": "Maintainer" + }, + { + "name": "newsignature", + "homepage": "https://www.drupal.org/user/765518" + }, + { + "name": "ultimike", + "homepage": "https://www.drupal.org/user/51132" + }, + { + "name": "volkswagenchick", + "homepage": "https://www.drupal.org/user/3332522" + } + ], + "description": "Provides a more robust alternative to 'summary or trimmed' textfield format.", + "homepage": "https://drupal.org/project/smart_trim", + "support": { + "source": "https://cgit.drupalcode.org/smart_trim", + "issues": "https://drupal.org/project/issues/smart_trim" + }, + "install-path": "../../web/modules/contrib/smart_trim" + }, + { + "name": "drupal/sticky", + "version": "1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/sticky.git", + "reference": "8.x-1.1" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/sticky-8.x-1.1.zip", + "reference": "8.x-1.1", + "shasum": "98735598ba94c5ef2c0ae2ee77717174994724a4" + }, + "require": { + "drupal/core": "~8.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.1", + "datestamp": "1491909243", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "f0ns", + "homepage": "https://www.drupal.org/user/723426" + } + ], + "description": "Sticky is a module that gives you the ability to make any element on your website to always stay visible.", + "homepage": "https://www.drupal.org/project/sticky", + "support": { + "source": "https://git.drupalcode.org/project/sticky" + }, + "install-path": "../../web/modules/contrib/sticky" + }, + { + "name": "drupal/token", + "version": "1.9.0", + "version_normalized": "1.9.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/token.git", + "reference": "8.x-1.9" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/token-8.x-1.9.zip", + "reference": "8.x-1.9", + "shasum": "a5d234382a1a0e4ba61d4c7a2fa10671ca656be4" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.9", + "datestamp": "1608284866", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "drush": { + "services": { + "drush.services.yml": "^9 || ^10" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Berdir", + "homepage": "https://www.drupal.org/user/214652" + }, + { + "name": "Dave Reid", + "homepage": "https://www.drupal.org/user/53892" + }, + { + "name": "eaton", + "homepage": "https://www.drupal.org/user/16496" + }, + { + "name": "fago", + "homepage": "https://www.drupal.org/user/16747" + }, + { + "name": "greggles", + "homepage": "https://www.drupal.org/user/36762" + }, + { + "name": "mikeryan", + "homepage": "https://www.drupal.org/user/4420" + } + ], + "description": "Provides a user interface for the Token API, some missing core tokens.", + "homepage": "https://www.drupal.org/project/token", + "support": { + "source": "https://git.drupalcode.org/project/token" + }, + "install-path": "../../web/modules/contrib/token" + }, + { + "name": "drupal/twig_tweak", + "version": "2.9.0", + "version_normalized": "2.9.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/twig_tweak.git", + "reference": "8.x-2.9" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/twig_tweak-8.x-2.9.zip", + "reference": "8.x-2.9", + "shasum": "c45ba1a41e323a432d1ff36d0a72344b88595a39" + }, + "require": { + "drupal/core": "^8.7 || ^9.0", + "twig/twig": "^1.41 || ^2.12" + }, + "suggest": { + "symfony/var-dumper": "Better dump() function for debugging Twig variables" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.9", + "datestamp": "1608093728", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Chi", + "homepage": "https://www.drupal.org/user/556138" + } + ], + "description": "A Twig extension with some useful functions and filters for Drupal development.", + "homepage": "https://www.drupal.org/project/twig_tweak", + "keywords": [ + "Drupal", + "Twig" + ], + "support": { + "source": "https://git.drupalcode.org/project/twig_tweak", + "issues": "https://www.drupal.org/project/issues/twig_tweak" + }, + "install-path": "../../web/modules/contrib/twig_tweak" + }, + { + "name": "drupal/typed_data", + "version": "dev-1.x", + "version_normalized": "dev-1.x", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/typed_data.git", + "reference": "27555f47b522730d04f3b33c9a46c0acbcb3146e" + }, + "require": { + "drupal/core": "^8.8.2 || ^9" + }, + "type": "drupal-module", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + }, + "drupal": { + "version": "8.x-1.0-alpha5+21-dev", + "datestamp": "1600719315", + "security-coverage": { + "status": "not-covered", + "message": "Dev releases are not covered by Drupal security advisories." + } + }, + "drush": { + "services": { + "drush.services.yml": "^9 || ^10" + } + } + }, + "installation-source": "source", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TR", + "homepage": "https://www.drupal.org/user/202830" + }, + { + "name": "fago", + "homepage": "https://www.drupal.org/user/16747" + } + ], + "description": "Extends the core Typed Data API with new APIs and features.", + "homepage": "https://www.drupal.org/project/typed_data", + "support": { + "source": "https://git.drupalcode.org/project/typed_data", + "issues": "https://www.drupal.org/project/issues/typed_data" + }, + "install-path": "../../web/modules/contrib/typed_data" + }, + { + "name": "drupal/ui_patterns", + "version": "1.2.0", + "version_normalized": "1.2.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/ui_patterns.git", + "reference": "8.x-1.2" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/ui_patterns-8.x-1.2.zip", + "reference": "8.x-1.2", + "shasum": "c792d38a1511e1c24386af5a8da8181d0394b824" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "require-dev": { + "composer/installers": "^1.2", + "cweagans/composer-patches": "~1.4", + "drupal/config_devel": "~1", + "drupal/core-composer-scaffold": "^8.0", + "drupal/core-dev": "^8.0", + "drupal/core-recommended": "~9.0", + "drupal/ds": "~3", + "drupal/field_group": "~3", + "drupal/page_manager": "*", + "drupal/panels": "~4", + "drupal/paragraphs": "~1", + "drupal/token": "~1", + "drush/drush": "~10", + "openeuropa/task-runner": "~1.0-beta3", + "phpro/grumphp": "~0.14" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.2", + "datestamp": "1591882155", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "composer-exit-on-patch-failure": true, + "enable-patching": true, + "drupal-scaffold": { + "locations": { + "web-root": "build/" + } + }, + "installer-paths": { + "build/core": [ + "type:drupal-core" + ], + "build/modules/contrib/{$name}": [ + "type:drupal-module" + ], + "build/profiles/contrib/{$name}": [ + "type:drupal-profile" + ], + "build/themes/contrib/{$name}": [ + "type:drupal-theme" + ] + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Drupal\\ui_patterns\\": "./src" + } + }, + "autoload-dev": { + "psr-4": { + "Drupal\\Tests\\ui_patterns\\": "./tests/src" + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", + "scripts": { + "post-install-cmd": [ + "./vendor/bin/run drupal:site-setup" + ], + "post-update-cmd": [ + "./vendor/bin/run drupal:site-setup" + ] + }, + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Nuvole Web", + "homepage": "https://www.drupal.org/user/186696", + "email": "info@nuvole.org" + }, + { + "name": "bircher", + "homepage": "https://www.drupal.org/user/1344166" + }, + { + "name": "pescetti", + "homepage": "https://www.drupal.org/user/436244" + } + ], + "description": "UI Patterns.", + "homepage": "https://www.drupal.org/project/ui_patterns", + "keywords": [ + "drupal", + "ui", + "web" + ], + "support": { + "source": "https://git.drupalcode.org/project/ui_patterns" + }, + "install-path": "../../web/modules/contrib/ui_patterns" + }, + { + "name": "drupal/userprotect", + "version": "1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/userprotect.git", + "reference": "8.x-1.1" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/userprotect-8.x-1.1.zip", + "reference": "8.x-1.1", + "shasum": "485e240317a7fc1c0523b082f333c983ea3ca639" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "require-dev": { + "drupal/role_delegation": "^1.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.1", + "datestamp": "1578341583", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "MegaChriz", + "homepage": "https://www.drupal.org/user/654114" + }, + { + "name": "karschsp", + "homepage": "https://www.drupal.org/user/138216" + } + ], + "description": "Allows admins to protect users from being edited or cancelled, on a per-user basis.", + "homepage": "https://www.drupal.org/project/userprotect", + "keywords": [ + "Drupal", + "User Management" + ], + "support": { + "source": "http://cgit.drupalcode.org/userprotect", + "issues": "https://www.drupal.org/project/issues/userprotect" + }, + "install-path": "../../web/modules/contrib/userprotect" + }, + { + "name": "drupal/views_bulk_operations", + "version": "2.6.0", + "version_normalized": "2.6.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/views_bulk_operations.git", + "reference": "8.x-2.6" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/views_bulk_operations-8.x-2.6.zip", + "reference": "8.x-2.6", + "shasum": "517b671adb55c3ad023032607d360dab77db9f22" + }, + "require": { + "drupal/core": "~8.5" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.6", + "datestamp": "1580924749", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "drush": { + "services": { + "drush.services.yml": "^9" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Marcin Grabias", + "homepage": "https://www.drupal.org/u/graber" + }, + { + "name": "Jon Pugh", + "homepage": "https://www.drupal.org/user/17028" + }, + { + "name": "bojanz", + "homepage": "https://www.drupal.org/user/86106" + }, + { + "name": "infojunkie", + "homepage": "https://www.drupal.org/user/48424" + }, + { + "name": "joelpittet", + "homepage": "https://www.drupal.org/user/160302" + } + ], + "description": "Adds an ability to perform bulk operations on selected entities from view results. Provides an API to create such operations.", + "homepage": "https://www.drupal.org/project/views_bulk_operations", + "support": { + "source": "https://git.drupalcode.org/project/views_bulk_operations", + "issues": "https://www.drupal.org/project/issues/views_bulk_operations?version=8.x", + "docs": "https://www.drupal.org/docs/8/modules/views-bulk-operations-vbo" + }, + "install-path": "../../web/modules/contrib/views_bulk_operations" + }, + { + "name": "drupal/views_slideshow", + "version": "4.8.0", + "version_normalized": "4.8.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/views_slideshow.git", + "reference": "8.x-4.8" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/views_slideshow-8.x-4.8.zip", + "reference": "8.x-4.8", + "shasum": "88104843df5e2eaa7e70b796a80573d844583e42" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-4.8", + "datestamp": "1601309225", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Neslee Canil Pinto", + "homepage": "https://www.drupal.org/u/neslee-canil-pinto", + "role": "Maintainer" + }, + { + "name": "NickDickinsonWilde", + "homepage": "https://www.drupal.org/user/3094661" + }, + { + "name": "aaron", + "homepage": "https://www.drupal.org/user/33420" + }, + { + "name": "redndahead", + "homepage": "https://www.drupal.org/user/160320" + }, + { + "name": "vbouchet", + "homepage": "https://www.drupal.org/user/1671428" + } + ], + "description": "Describes relationships between entities.", + "homepage": "https://www.drupal.org/project/views_slideshow", + "support": { + "source": "https://git.drupalcode.org/project/views_slideshow", + "issues": "https://www.drupal.org/project/issues/views_slideshow", + "irc": "irc://irc.freenode.org/drupal-contribute" + }, + "install-path": "../../web/modules/contrib/views_slideshow" + }, + { + "name": "drupal/viewsreference", + "version": "1.7.0", + "version_normalized": "1.7.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/viewsreference.git", + "reference": "8.x-1.7" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/viewsreference-8.x-1.7.zip", + "reference": "8.x-1.7", + "shasum": "6656c717cd78bee180fcc075d28db016fa7775d9" + }, + "require": { + "drupal/core": "^8.6|^9.0", + "php": "^5.5|^7.0", + "squizlabs/php_codesniffer": "*" + }, + "conflict": { + "drupal/viewsreferennce": "*" + }, + "require-dev": { + "composer/installers": "^1.2", + "drupal-composer/drupal-scaffold": "^2.5", + "drupal/coder": "^8.2", + "webflo/drupal-core-require-dev": "~8.5" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.7", + "datestamp": "1610571201", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "installer-paths": { + "../build/core": [ + "type:drupal-core" + ], + "../build/modules/contrib/{$name}": [ + "type:drupal-module" + ], + "../build/themes/contrib/{$name}": [ + "type:drupal-theme" + ] + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "New Zeal", + "homepage": "https://www.drupal.org/user/93571" + }, + { + "name": "jasonawant", + "homepage": "https://www.drupal.org/user/589890" + }, + { + "name": "joekers", + "homepage": "https://www.drupal.org/user/2229066" + }, + { + "name": "seanB", + "homepage": "https://www.drupal.org/user/545912" + } + ], + "description": "Views Reference", + "homepage": "http://drupal.org/project/viewsreference", + "keywords": [ + "Drupal" + ], + "support": { + "source": "http://cgit.drupalcode.org/viewsreference", + "issues": "http://drupal.org/project/issues/viewsreference" + }, + "install-path": "../../web/modules/contrib/viewsreference" + }, + { + "name": "drupal/webform", + "version": "5.25.0", + "version_normalized": "5.25.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/webform.git", + "reference": "8.x-5.25" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/webform-8.x-5.25.zip", + "reference": "8.x-5.25", + "shasum": "115f8bc21549abc080543eb772166eb4fd2a162e" + }, + "require": { + "drupal/core": "^8.8" + }, + "require-dev": { + "drupal/address": "~1.0", + "drupal/bootstrap": "~3.0", + "drupal/captcha": "~1.0", + "drupal/chosen": "~2.0", + "drupal/clientside_validation": "~3.0", + "drupal/clientside_validation_jquery": "*", + "drupal/devel": "~3.0", + "drupal/entity": "~1.0", + "drupal/entity_print": "~2.0", + "drupal/gnode": "*", + "drupal/group": "1.0", + "drupal/lingotek": "~3.0", + "drupal/mailsystem": "~4.0", + "drupal/paragraphs": "~1.0", + "drupal/select2": "~1.0", + "drupal/smtp": "~1.0", + "drupal/styleguide": "~1.0", + "drupal/telephone_validation": "~2.0", + "drupal/token": "~1.0", + "drupal/variationcache": "~1.0", + "drupal/webform_access": "*", + "drupal/webform_attachment": "*", + "drupal/webform_clientside_validation": "*", + "drupal/webform_devel": "*", + "drupal/webform_entity_print": "*", + "drupal/webform_group": "*", + "drupal/webform_node": "*", + "drupal/webform_options_limit": "*", + "drupal/webform_scheduled_email": "*", + "drupal/webform_share": "*", + "drupal/webform_ui": "*" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-5.25", + "datestamp": "1614873338", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "drush": { + "services": { + "drush.services.yml": "^9" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Jacob Rockowitz (jrockowitz)", + "homepage": "https://www.drupal.org/u/jrockowitz", + "role": "Maintainer" + }, + { + "name": "Alexander Trotsenko (bucefal91)", + "homepage": "https://www.drupal.org/u/bucefal91", + "role": "Co-maintainer" + }, + { + "name": "Contributors", + "homepage": "https://www.drupal.org/node/7404/committers", + "role": "Contributor" + }, + { + "name": "fenstrat", + "homepage": "https://www.drupal.org/user/362649" + }, + { + "name": "jrockowitz", + "homepage": "https://www.drupal.org/user/371407" + }, + { + "name": "podarok", + "homepage": "https://www.drupal.org/user/116002" + }, + { + "name": "quicksketch", + "homepage": "https://www.drupal.org/user/35821" + }, + { + "name": "sanchiz", + "homepage": "https://www.drupal.org/user/1671246" + }, + { + "name": "tedbow", + "homepage": "https://www.drupal.org/user/240860" + }, + { + "name": "torotil", + "homepage": "https://www.drupal.org/user/865256" + } + ], + "description": "Enables the creation of webforms and questionnaires.", + "homepage": "https://drupal.org/project/webform", + "support": { + "source": "https://git.drupalcode.org/project/webform", + "issues": "https://www.drupal.org/project/issues/webform?version=8.x", + "docs": "https://www.drupal.org/docs/8/modules/webform", + "forum": "https://drupal.stackexchange.com/questions/tagged/webform" + }, + "install-path": "../../web/modules/contrib/webform" + }, + { + "name": "drupal/webform_analysis", + "version": "1.0.0-beta7", + "version_normalized": "1.0.0.0-beta7", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/webform_analysis.git", + "reference": "8.x-1.0-beta7" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/webform_analysis-8.x-1.0-beta7.zip", + "reference": "8.x-1.0-beta7", + "shasum": "218ee42c0d3d5c62bb29e0e68134188dc2a16c85" + }, + "require": { + "drupal/core": "~8.0", + "drupal/webform": "*" + }, + "require-dev": { + "drupal/webform_node": "*" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.0-beta7", + "datestamp": "1540735084", + "security-coverage": { + "status": "not-covered", + "message": "Project has not opted into security advisory coverage!" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "lbaran", + "homepage": "https://www.drupal.org/user/3368098" + } + ], + "description": "Enables to obtain statistics on the results of form submissions.", + "homepage": "https://www.drupal.org/project/webform_analysis", + "support": { + "source": "https://git.drupalcode.org/project/webform_analysis" + }, + "install-path": "../../web/modules/contrib/webform_analysis" + }, + { + "name": "drupal/webform_invitation", + "version": "1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/webform_invitation.git", + "reference": "8.x-1.1" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/webform_invitation-8.x-1.1.zip", + "reference": "8.x-1.1", + "shasum": "56d01bef036ee6b0503060167e36d49b07278027" + }, + "require": { + "drupal/core": "^8 || ^9", + "drupal/token": "~1.0", + "drupal/webform": "~5.0", + "drupal/webform_ui": "^5.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.1", + "datestamp": "1573305184", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Christian Paul Bruhn (paul-broon)", + "homepage": "https://www.drupal.org/u/paul-broon", + "role": "Maintainer" + }, + { + "name": "Vit Hovezak (kyberman)", + "homepage": "https://www.drupal.org/u/kyberman", + "role": "Co-maintainer" + } + ], + "description": "Provides random strings that can be used as codes for accessing a specific webform.", + "homepage": "https://www.drupal.org/project/webform_invitation", + "support": { + "source": "http://cgit.drupalcode.org/webform_invitation", + "issues": "https://www.drupal.org/project/issues/webform_invitation", + "irc": "irc://irc.freenode.org/drupal-contribute" + }, + "install-path": "../../web/modules/contrib/webform_invitation" + }, + { + "name": "drupal/webform_ui", + "version": "5.25.0", + "version_normalized": "5.25.0.0", + "require": { + "drupal/core": "^8.8", + "drupal/webform": "*" + }, + "type": "metapackage", + "extra": { + "drupal": { + "version": "8.x-5.25", + "datestamp": "1614873338", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "DanChadwick", + "homepage": "https://www.drupal.org/user/504278" + }, + { + "name": "Liam Morland", + "homepage": "https://www.drupal.org/user/493050" + }, + { + "name": "bucefal91", + "homepage": "https://www.drupal.org/user/504128" + }, + { + "name": "fenstrat", + "homepage": "https://www.drupal.org/user/362649" + }, + { + "name": "jrockowitz", + "homepage": "https://www.drupal.org/user/371407" + }, + { + "name": "podarok", + "homepage": "https://www.drupal.org/user/116002" + }, + { + "name": "quicksketch", + "homepage": "https://www.drupal.org/user/35821" + }, + { + "name": "sanchiz", + "homepage": "https://www.drupal.org/user/1671246" + }, + { + "name": "tedbow", + "homepage": "https://www.drupal.org/user/240860" + }, + { + "name": "torotil", + "homepage": "https://www.drupal.org/user/865256" + } + ], + "description": "Provides a user interface for building and maintaining webforms.", + "homepage": "https://www.drupal.org/project/webform", + "support": { + "source": "https://git.drupalcode.org/project/webform" + }, + "install-path": null + }, + { + "name": "drupal/workbench", + "version": "1.3.0", + "version_normalized": "1.3.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/workbench.git", + "reference": "8.x-1.3" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/workbench-8.x-1.3.zip", + "reference": "8.x-1.3", + "shasum": "643d5f27503d7fceda8673812ca9a3bc25ed53e5" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.3", + "datestamp": "1590419810", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Dave Reid", + "homepage": "https://www.drupal.org/user/53892" + }, + { + "name": "agentrickard", + "homepage": "https://www.drupal.org/user/20975" + }, + { + "name": "bbinkovitz", + "homepage": "https://www.drupal.org/user/161263" + }, + { + "name": "becw", + "homepage": "https://www.drupal.org/user/81067" + }, + { + "name": "caroltron", + "homepage": "https://www.drupal.org/user/171342" + }, + { + "name": "robeano", + "homepage": "https://www.drupal.org/user/67660" + }, + { + "name": "stevector", + "homepage": "https://www.drupal.org/user/179805" + } + ], + "description": "Provides convenient dashboards and shortcuts for editors.", + "homepage": "https://www.drupal.org/project/workbench", + "support": { + "source": "https://git.drupalcode.org/project/workbench" + }, + "install-path": "../../web/modules/contrib/workbench" + }, + { + "name": "drupal/workbench_access", + "version": "1.0.0-beta4", + "version_normalized": "1.0.0.0-beta4", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/workbench_access.git", + "reference": "8.x-1.0-beta4" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/workbench_access-8.x-1.0-beta4.zip", + "reference": "8.x-1.0-beta4", + "shasum": "8d81c3daef91d89ecb3c0e3823ee0144b37889a8" + }, + "require": { + "drupal/core": "^8.7.7 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.0-beta4", + "datestamp": "1591119383", + "security-coverage": { + "status": "not-covered", + "message": "Beta releases are not covered by Drupal security advisories." + } + }, + "drush": { + "services": { + "drush.services.yml": "^9 || ^10" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Dave Reid", + "homepage": "https://www.drupal.org/user/53892" + }, + { + "name": "agentrickard", + "homepage": "https://www.drupal.org/user/20975" + }, + { + "name": "becw", + "homepage": "https://www.drupal.org/user/81067" + }, + { + "name": "robeano", + "homepage": "https://www.drupal.org/user/67660" + }, + { + "name": "stevector", + "homepage": "https://www.drupal.org/user/179805" + } + ], + "description": "Hierarchical access control for content.", + "homepage": "https://www.drupal.org/project/workbench_access", + "support": { + "source": "https://git.drupalcode.org/project/workbench_access" + }, + "install-path": "../../web/modules/contrib/workbench_access" + }, + { + "name": "drupal/workbench_moderation", + "version": "1.6.0", + "version_normalized": "1.6.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/workbench_moderation.git", + "reference": "8.x-1.6" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/workbench_moderation-8.x-1.6.zip", + "reference": "8.x-1.6", + "shasum": "4321fb474e6fe23a8c737e8df8337cb1baccf0d0" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "require-dev": { + "drupal/publishing_dropbutton": "~1.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.6", + "datestamp": "1591862577", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Crell", + "homepage": "https://www.drupal.org/user/26398" + }, + { + "name": "Dave Reid", + "homepage": "https://www.drupal.org/user/53892" + }, + { + "name": "agentrickard", + "homepage": "https://www.drupal.org/user/20975" + }, + { + "name": "becw", + "homepage": "https://www.drupal.org/user/81067" + }, + { + "name": "caroltron", + "homepage": "https://www.drupal.org/user/171342" + }, + { + "name": "colan", + "homepage": "https://www.drupal.org/user/58704" + }, + { + "name": "das-peter", + "homepage": "https://www.drupal.org/user/762870" + }, + { + "name": "josephdpurcell", + "homepage": "https://www.drupal.org/user/2944035" + }, + { + "name": "larowlan", + "homepage": "https://www.drupal.org/user/395439" + }, + { + "name": "robeano", + "homepage": "https://www.drupal.org/user/67660" + }, + { + "name": "srjosh", + "homepage": "https://www.drupal.org/user/165878" + }, + { + "name": "stevector", + "homepage": "https://www.drupal.org/user/179805" + }, + { + "name": "tedbow", + "homepage": "https://www.drupal.org/user/240860" + }, + { + "name": "timmillwood", + "homepage": "https://www.drupal.org/user/227849" + } + ], + "description": "Provides moderation states for content", + "homepage": "http://drupal.org/project/workbench_moderation", + "keywords": [ + "Drupal" + ], + "support": { + "source": "http://cgit.drupalcode.org/workbench_moderation", + "issues": "http://drupal.org/project/issues/workbench_moderation" + }, + "install-path": "../../web/modules/contrib/workbench_moderation" + }, + { + "name": "drush/drush", + "version": "8.4.8", + "version_normalized": "8.4.8.0", + "source": { + "type": "git", + "url": "https://github.com/drush-ops/drush.git", + "reference": "b377b1896e344085d06bdbf671a465950a164d1e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/drush-ops/drush/zipball/b377b1896e344085d06bdbf671a465950a164d1e", + "reference": "b377b1896e344085d06bdbf671a465950a164d1e", + "shasum": "" + }, + "require": { + "consolidation/annotated-command": "^2.12.0", + "consolidation/output-formatters": "~3", + "pear/console_table": "~1.3.1", + "php": ">=5.4.5", + "psr/log": "~1.0", + "psy/psysh": "~0.6", + "symfony/console": "~2.7|^3|^4.4", + "symfony/event-dispatcher": "~2.7|^3|^4.4", + "symfony/finder": "~2.7|^3|^4.4", + "symfony/process": "~2.7|^3|^4.4", + "symfony/var-dumper": "~2.7|^3|^4.4|^5", + "symfony/yaml": "~2.3|^3|^4.4", + "webflo/drupal-finder": "^1.1.0", + "webmozart/path-util": "~2" + }, + "require-dev": { + "phpunit/phpunit": "4.*", + "symfony/console": "~2.7", + "symfony/event-dispatcher": "~2.7", + "symfony/finder": "~2.7", + "symfony/process": "2.7.*", + "symfony/var-dumper": "~2.7", + "symfony/yaml": "~2.3" + }, + "suggest": { + "drush/config-extra": "Provides configuration workflow commands, such as config-merge.", + "ext-pcntl": "*" + }, + "time": "2021-03-22T15:27:55+00:00", + "bin": [ + "drush", + "drush.launcher", + "drush.php", + "drush.complete.sh" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "8.3.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Drush\\": "lib/", + "Consolidation\\": "lib/" + }, + "psr-4": { + "Drush\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Moshe Weitzman", + "email": "weitzman@tejasa.com" + }, + { + "name": "Owen Barton", + "email": "drupal@owenbarton.com" + }, + { + "name": "Mark Sonnabaum", + "email": "marksonnabaum@gmail.com" + }, + { + "name": "Antoine Beaupré", + "email": "anarcat@koumbit.org" + }, + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + }, + { + "name": "Jonathan Araña Cruz", + "email": "jonhattan@faita.net" + }, + { + "name": "Jonathan Hedstrom", + "email": "jhedstrom@gmail.com" + }, + { + "name": "Christopher Gervais", + "email": "chris@ergonlogic.com" + }, + { + "name": "Dave Reid", + "email": "dave@davereid.net" + }, + { + "name": "Damian Lee", + "email": "damiankloip@googlemail.com" + } + ], + "description": "Drush is a command line shell and scripting interface for Drupal, a veritable Swiss Army knife designed to make life easier for those of us who spend some of our working hours hacking away at the command prompt.", + "homepage": "http://www.drush.org", + "support": { + "forum": "http://drupal.stackexchange.com/questions/tagged/drush", + "irc": "irc://irc.freenode.org/drush", + "issues": "https://github.com/drush-ops/drush/issues", + "source": "https://github.com/drush-ops/drush/tree/8.4.8" + }, + "funding": [ + { + "url": "https://github.com/weitzman", + "type": "github" + } + ], + "install-path": "../drush/drush" + }, + { + "name": "easyrdf/easyrdf", + "version": "0.9.1", + "version_normalized": "0.9.1.0", + "source": { + "type": "git", + "url": "https://github.com/easyrdf/easyrdf.git", + "reference": "acd09dfe0555fbcfa254291e433c45fdd4652566" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/easyrdf/easyrdf/zipball/acd09dfe0555fbcfa254291e433c45fdd4652566", + "reference": "acd09dfe0555fbcfa254291e433c45fdd4652566", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "ext-pcre": "*", + "php": ">=5.2.8" + }, + "require-dev": { + "phpunit/phpunit": "~3.5", + "sami/sami": "~1.4", + "squizlabs/php_codesniffer": "~1.4.3" + }, + "suggest": { + "ml/json-ld": "~1.0" + }, + "time": "2015-02-27T09:45:49+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "EasyRdf_": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nicholas Humfrey", + "email": "njh@aelius.com", + "homepage": "http://www.aelius.com/njh/", + "role": "Developer" + }, + { + "name": "Alexey Zakhlestin", + "email": "indeyets@gmail.com", + "role": "Developer" + } + ], + "description": "EasyRdf is a PHP library designed to make it easy to consume and produce RDF.", + "homepage": "http://www.easyrdf.org/", + "keywords": [ + "Linked Data", + "RDF", + "Semantic Web", + "Turtle", + "rdfa", + "sparql" + ], + "install-path": "../easyrdf/easyrdf" + }, + { + "name": "egulias/email-validator", + "version": "2.1.17", + "version_normalized": "2.1.17.0", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "ade6887fd9bd74177769645ab5c474824f8a418a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ade6887fd9bd74177769645ab5c474824f8a418a", + "reference": "ade6887fd9bd74177769645ab5c474824f8a418a", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1.0.1", + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.10" + }, + "require-dev": { + "dominicsayers/isemail": "^3.0.7", + "phpunit/phpunit": "^4.8.36|^7.5.15", + "satooshi/php-coveralls": "^1.0.1" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "time": "2020-02-13T22:36:52+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "EmailValidator" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "install-path": "../egulias/email-validator" + }, + { + "name": "fileeye/mimemap", + "version": "1.1.4", + "version_normalized": "1.1.4.0", + "source": { + "type": "git", + "url": "https://github.com/FileEye/MimeMap.git", + "reference": "3a0ddb71f06d8fb3f84f0a3c45348af81803b16d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FileEye/MimeMap/zipball/3a0ddb71f06d8fb3f84f0a3c45348af81803b16d", + "reference": "3a0ddb71f06d8fb3f84f0a3c45348af81803b16d", + "shasum": "" + }, + "require": { + "php": ">=5.4" + }, + "require-dev": { + "phpunit/phpunit": "<10", + "sebastian/comparator": "*", + "sebastian/diff": "*", + "squizlabs/php_codesniffer": "*", + "symfony/console": "*", + "symfony/filesystem": "*", + "symfony/var-dumper": "*", + "symfony/yaml": "*" + }, + "time": "2020-05-16T10:19:16+00:00", + "bin": [ + "bin/fileeye-mimemap" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "FileEye\\MimeMap\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "description": "A PHP library to handle MIME Content-Type fields and their related file extensions.", + "homepage": "https://github.com/FileEye/MimeMap", + "keywords": [ + "mime", + "mime-database", + "mime-parser", + "mime-type" + ], + "support": { + "issues": "https://github.com/FileEye/MimeMap/issues", + "source": "https://github.com/FileEye/MimeMap/tree/master" + }, + "install-path": "../fileeye/mimemap" + }, + { + "name": "gettext/gettext", + "version": "v4.8.4", + "version_normalized": "4.8.4.0", + "source": { + "type": "git", + "url": "https://github.com/php-gettext/Gettext.git", + "reference": "58bc0f7f37e78efb0f9758f93d4a0f669f0f84a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-gettext/Gettext/zipball/58bc0f7f37e78efb0f9758f93d4a0f669f0f84a1", + "reference": "58bc0f7f37e78efb0f9758f93d4a0f669f0f84a1", + "shasum": "" + }, + "require": { + "gettext/languages": "^2.3", + "php": ">=5.4.0" + }, + "require-dev": { + "illuminate/view": "*", + "phpunit/phpunit": "^4.8|^5.7|^6.5", + "squizlabs/php_codesniffer": "^3.0", + "symfony/yaml": "~2", + "twig/extensions": "*", + "twig/twig": "^1.31|^2.0" + }, + "suggest": { + "illuminate/view": "Is necessary if you want to use the Blade extractor", + "symfony/yaml": "Is necessary if you want to use the Yaml extractor/generator", + "twig/extensions": "Is necessary if you want to use the Twig extractor", + "twig/twig": "Is necessary if you want to use the Twig extractor" + }, + "time": "2021-03-10T19:35:49+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Gettext\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Oscar Otero", + "email": "oom@oscarotero.com", + "homepage": "http://oscarotero.com", + "role": "Developer" + } + ], + "description": "PHP gettext manager", + "homepage": "https://github.com/oscarotero/Gettext", + "keywords": [ + "JS", + "gettext", + "i18n", + "mo", + "po", + "translation" + ], + "support": { + "email": "oom@oscarotero.com", + "issues": "https://github.com/oscarotero/Gettext/issues", + "source": "https://github.com/php-gettext/Gettext/tree/v4.8.4" + }, + "funding": [ + { + "url": "https://paypal.me/oscarotero", + "type": "custom" + }, + { + "url": "https://github.com/oscarotero", + "type": "github" + }, + { + "url": "https://www.patreon.com/misteroom", + "type": "patreon" + } + ], + "install-path": "../gettext/gettext" + }, + { + "name": "gettext/languages", + "version": "2.6.0", + "version_normalized": "2.6.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-gettext/Languages.git", + "reference": "38ea0482f649e0802e475f0ed19fa993bcb7a618" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-gettext/Languages/zipball/38ea0482f649e0802e475f0ed19fa993bcb7a618", + "reference": "38ea0482f649e0802e475f0ed19fa993bcb7a618", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.16.0", + "phpunit/phpunit": "^4.8 || ^5.7 || ^6.5 || ^7.5 || ^8.4" + }, + "time": "2019-11-13T10:30:21+00:00", + "bin": [ + "bin/export-plural-rules" + ], + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Gettext\\Languages\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michele Locati", + "email": "mlocati@gmail.com", + "role": "Developer" + } + ], + "description": "gettext languages with plural rules", + "homepage": "https://github.com/php-gettext/Languages", + "keywords": [ + "cldr", + "i18n", + "internationalization", + "l10n", + "language", + "languages", + "localization", + "php", + "plural", + "plural rules", + "plurals", + "translate", + "translations", + "unicode" + ], + "support": { + "issues": "https://github.com/php-gettext/Languages/issues", + "source": "https://github.com/php-gettext/Languages/tree/2.6.0" + }, + "install-path": "../gettext/languages" + }, + { + "name": "guzzlehttp/guzzle", + "version": "6.5.4", + "version_normalized": "6.5.4.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a4a1b6930528a8f7ee03518e6442ec7a44155d9d", + "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.6.1", + "php": ">=5.5", + "symfony/polyfill-intl-idn": "1.17.0" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.1" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "time": "2020-05-25T19:35:05+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.5-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "GuzzleHttp\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "install-path": "../guzzlehttp/guzzle" + }, + { + "name": "guzzlehttp/promises", + "version": "v1.3.1", + "version_normalized": "1.3.1.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "time": "2016-12-20T10:07:11+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "install-path": "../guzzlehttp/promises" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.6.1", + "version_normalized": "1.6.1.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "239400de7a173fe9901b9ac7c06497751f00727a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", + "reference": "239400de7a173fe9901b9ac7c06497751f00727a", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-zlib": "*", + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + }, + "suggest": { + "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" + }, + "time": "2019-07-01T23:21:34+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "install-path": "../guzzlehttp/psr7" + }, + { + "name": "laminas/laminas-diactoros", + "version": "1.8.7p2", + "version_normalized": "1.8.7.0-patch2", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-diactoros.git", + "reference": "6991c1af7c8d2c8efee81b22ba97024781824aaa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/6991c1af7c8d2c8efee81b22ba97024781824aaa", + "reference": "6991c1af7c8d2c8efee81b22ba97024781824aaa", + "shasum": "" + }, + "require": { + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^5.6 || ^7.0", + "psr/http-message": "^1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "replace": { + "zendframework/zend-diactoros": "~1.8.7.0" + }, + "require-dev": { + "ext-dom": "*", + "ext-libxml": "*", + "laminas/laminas-coding-standard": "~1.0", + "php-http/psr7-integration-tests": "dev-master", + "phpunit/phpunit": "^5.7.16 || ^6.0.8 || ^7.2.7" + }, + "time": "2020-03-23T15:28:28+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-release-1.8": "1.8.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "src/functions/create_uploaded_file.php", + "src/functions/marshal_headers_from_sapi.php", + "src/functions/marshal_method_from_sapi.php", + "src/functions/marshal_protocol_version_from_sapi.php", + "src/functions/marshal_uri_from_sapi.php", + "src/functions/normalize_server.php", + "src/functions/normalize_uploaded_files.php", + "src/functions/parse_cookie_header.php", + "src/functions/create_uploaded_file.legacy.php", + "src/functions/marshal_headers_from_sapi.legacy.php", + "src/functions/marshal_method_from_sapi.legacy.php", + "src/functions/marshal_protocol_version_from_sapi.legacy.php", + "src/functions/marshal_uri_from_sapi.legacy.php", + "src/functions/normalize_server.legacy.php", + "src/functions/normalize_uploaded_files.legacy.php", + "src/functions/parse_cookie_header.legacy.php" + ], + "psr-4": { + "Laminas\\Diactoros\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "PSR HTTP Message implementations", + "homepage": "https://laminas.dev", + "keywords": [ + "http", + "laminas", + "psr", + "psr-7" + ], + "install-path": "../laminas/laminas-diactoros" + }, + { + "name": "laminas/laminas-escaper", + "version": "2.6.1", + "version_normalized": "2.6.1.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-escaper.git", + "reference": "25f2a053eadfa92ddacb609dcbbc39362610da70" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/25f2a053eadfa92ddacb609dcbbc39362610da70", + "reference": "25f2a053eadfa92ddacb609dcbbc39362610da70", + "shasum": "" + }, + "require": { + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^5.6 || ^7.0" + }, + "replace": { + "zendframework/zend-escaper": "self.version" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~1.0.0", + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2" + }, + "time": "2019-12-31T16:43:30+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6.x-dev", + "dev-develop": "2.7.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Laminas\\Escaper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs", + "homepage": "https://laminas.dev", + "keywords": [ + "escaper", + "laminas" + ], + "install-path": "../laminas/laminas-escaper" + }, + { + "name": "laminas/laminas-feed", + "version": "2.12.2", + "version_normalized": "2.12.2.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-feed.git", + "reference": "8a193ac96ebcb3e16b6ee754ac2a889eefacb654" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-feed/zipball/8a193ac96ebcb3e16b6ee754ac2a889eefacb654", + "reference": "8a193ac96ebcb3e16b6ee754ac2a889eefacb654", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "laminas/laminas-escaper": "^2.5.2", + "laminas/laminas-stdlib": "^3.2.1", + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^5.6 || ^7.0" + }, + "replace": { + "zendframework/zend-feed": "^2.12.0" + }, + "require-dev": { + "laminas/laminas-cache": "^2.7.2", + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-db": "^2.8.2", + "laminas/laminas-http": "^2.7", + "laminas/laminas-servicemanager": "^2.7.8 || ^3.3", + "laminas/laminas-validator": "^2.10.1", + "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.20", + "psr/http-message": "^1.0.1" + }, + "suggest": { + "laminas/laminas-cache": "Laminas\\Cache component, for optionally caching feeds between requests", + "laminas/laminas-db": "Laminas\\Db component, for use with PubSubHubbub", + "laminas/laminas-http": "Laminas\\Http for PubSubHubbub, and optionally for use with Laminas\\Feed\\Reader", + "laminas/laminas-servicemanager": "Laminas\\ServiceManager component, for easily extending ExtensionManager implementations", + "laminas/laminas-validator": "Laminas\\Validator component, for validating email addresses used in Atom feeds and entries when using the Writer subcomponent", + "psr/http-message": "PSR-7 ^1.0.1, if you wish to use Laminas\\Feed\\Reader\\Http\\Psr7ResponseDecorator" + }, + "time": "2020-03-29T12:36:29+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.12.x-dev", + "dev-develop": "2.13.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Laminas\\Feed\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides functionality for consuming RSS and Atom feeds", + "homepage": "https://laminas.dev", + "keywords": [ + "feed", + "laminas" + ], + "install-path": "../laminas/laminas-feed" + }, + { + "name": "laminas/laminas-stdlib", + "version": "3.2.1", + "version_normalized": "3.2.1.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-stdlib.git", + "reference": "2b18347625a2f06a1a485acfbc870f699dbe51c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/2b18347625a2f06a1a485acfbc870f699dbe51c6", + "reference": "2b18347625a2f06a1a485acfbc870f699dbe51c6", + "shasum": "" + }, + "require": { + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^5.6 || ^7.0" + }, + "replace": { + "zendframework/zend-stdlib": "self.version" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~1.0.0", + "phpbench/phpbench": "^0.13", + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2" + }, + "time": "2019-12-31T17:51:15+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2.x-dev", + "dev-develop": "3.3.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Laminas\\Stdlib\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "SPL extensions, array utilities, error handlers, and more", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "stdlib" + ], + "install-path": "../laminas/laminas-stdlib" + }, + { + "name": "laminas/laminas-zendframework-bridge", + "version": "1.0.4", + "version_normalized": "1.0.4.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-zendframework-bridge.git", + "reference": "fcd87520e4943d968557803919523772475e8ea3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/fcd87520e4943d968557803919523772475e8ea3", + "reference": "fcd87520e4943d968557803919523772475e8ea3", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1", + "squizlabs/php_codesniffer": "^3.5" + }, + "time": "2020-05-20T16:45:56+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev", + "dev-develop": "1.1.x-dev" + }, + "laminas": { + "module": "Laminas\\ZendFrameworkBridge" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "src/autoload.php" + ], + "psr-4": { + "Laminas\\ZendFrameworkBridge\\": "src//" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Alias legacy ZF class names to Laminas Project equivalents.", + "keywords": [ + "ZendFramework", + "autoloading", + "laminas", + "zf" + ], + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "install-path": "../laminas/laminas-zendframework-bridge" + }, + { + "name": "lsolesen/pel", + "version": "0.9.6", + "version_normalized": "0.9.6.0", + "source": { + "type": "git", + "url": "https://github.com/lsolesen/pel.git", + "reference": "c9e3919f5db3b85c3c422d4f8d448dbcb2a87a23" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lsolesen/pel/zipball/c9e3919f5db3b85c3c422d4f8d448dbcb2a87a23", + "reference": "c9e3919f5db3b85c3c422d4f8d448dbcb2a87a23", + "shasum": "" + }, + "require": { + "php": ">=5.0.0" + }, + "require-dev": { + "ext-gd": "*", + "phpunit/phpunit": "5.7.*", + "satooshi/php-coveralls": "1.0.*", + "squizlabs/php_codesniffer": "3.0.0RC3" + }, + "time": "2017-02-03T11:58:58+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "lsolesen\\pel\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0" + ], + "authors": [ + { + "name": "Lars Olesen", + "email": "lars@intraface.dk", + "homepage": "http://intraface.dk", + "role": "Developer" + }, + { + "name": "Martin Geisler", + "email": "martin@geisler.net", + "homepage": "http://geisler.net", + "role": "Developer" + } + ], + "description": "PHP Exif Library. A library for reading and writing Exif headers in JPEG and TIFF images using PHP.", + "homepage": "http://lsolesen.github.com/pel/", + "keywords": [ + "exif", + "image" + ], + "support": { + "issues": "https://github.com/lsolesen/pel/issues", + "source": "https://github.com/lsolesen/pel/tree/master" + }, + "install-path": "../lsolesen/pel" + }, + { + "name": "masterminds/html5", + "version": "2.3.0", + "version_normalized": "2.3.0.0", + "source": { + "type": "git", + "url": "https://github.com/Masterminds/html5-php.git", + "reference": "2c37c6c520b995b761674de3be8455a381679067" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/2c37c6c520b995b761674de3be8455a381679067", + "reference": "2c37c6c520b995b761674de3be8455a381679067", + "shasum": "" + }, + "require": { + "ext-libxml": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "4.*", + "sami/sami": "~2.0", + "satooshi/php-coveralls": "1.0.*" + }, + "time": "2017-09-04T12:26:28+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Masterminds\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matt Butcher", + "email": "technosophos@gmail.com" + }, + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + }, + { + "name": "Matt Farina", + "email": "matt@mattfarina.com" + } + ], + "description": "An HTML5 parser and serializer.", + "homepage": "http://masterminds.github.io/html5-php", + "keywords": [ + "HTML5", + "dom", + "html", + "parser", + "querypath", + "serializer", + "xml" + ], + "install-path": "../masterminds/html5" + }, + { + "name": "nikic/php-parser", + "version": "v4.10.4", + "version_normalized": "4.10.4.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e", + "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "time": "2020-12-20T10:01:03+00:00", + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.4" + }, + "install-path": "../nikic/php-parser" + }, + { + "name": "paragonie/random_compat", + "version": "v9.99.99", + "version_normalized": "9.99.99.0", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "shasum": "" + }, + "require": { + "php": "^7" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "time": "2018-07-02T15:55:56+00:00", + "type": "library", + "installation-source": "dist", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "polyfill", + "pseudorandom", + "random" + ], + "install-path": "../paragonie/random_compat" + }, + { + "name": "pear/archive_tar", + "version": "1.4.12", + "version_normalized": "1.4.12.0", + "source": { + "type": "git", + "url": "https://github.com/pear/Archive_Tar.git", + "reference": "19bb8e95490d3e3ad92fcac95500ca80bdcc7495" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/19bb8e95490d3e3ad92fcac95500ca80bdcc7495", + "reference": "19bb8e95490d3e3ad92fcac95500ca80bdcc7495", + "shasum": "" + }, + "require": { + "pear/pear-core-minimal": "^1.10.0alpha2", + "php": ">=5.2.0" + }, + "require-dev": { + "phpunit/phpunit": "*" + }, + "suggest": { + "ext-bz2": "Bz2 compression support.", + "ext-xz": "Lzma2 compression support.", + "ext-zlib": "Gzip compression support." + }, + "time": "2021-01-18T19:32:54+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Archive_Tar": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "./" + ], + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Vincent Blavet", + "email": "vincent@phpconcept.net" + }, + { + "name": "Greg Beaver", + "email": "greg@chiaraquartet.net" + }, + { + "name": "Michiel Rook", + "email": "mrook@php.net" + } + ], + "description": "Tar file management class with compression support (gzip, bzip2, lzma2)", + "homepage": "https://github.com/pear/Archive_Tar", + "keywords": [ + "archive", + "tar" + ], + "funding": [ + { + "url": "https://github.com/mrook", + "type": "github" + }, + { + "url": "https://www.patreon.com/michielrook", + "type": "patreon" + } + ], + "install-path": "../pear/archive_tar" + }, + { + "name": "pear/console_getopt", + "version": "v1.4.3", + "version_normalized": "1.4.3.0", + "source": { + "type": "git", + "url": "https://github.com/pear/Console_Getopt.git", + "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/a41f8d3e668987609178c7c4a9fe48fecac53fa0", + "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0", + "shasum": "" + }, + "time": "2019-11-20T18:27:48+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "Console": "./" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "./" + ], + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Andrei Zmievski", + "email": "andrei@php.net", + "role": "Lead" + }, + { + "name": "Stig Bakken", + "email": "stig@php.net", + "role": "Developer" + }, + { + "name": "Greg Beaver", + "email": "cellog@php.net", + "role": "Helper" + } + ], + "description": "More info available on: http://pear.php.net/package/Console_Getopt", + "install-path": "../pear/console_getopt" + }, + { + "name": "pear/console_table", + "version": "v1.3.1", + "version_normalized": "1.3.1.0", + "source": { + "type": "git", + "url": "https://github.com/pear/Console_Table.git", + "reference": "1930c11897ca61fd24b95f2f785e99e0f36dcdea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/Console_Table/zipball/1930c11897ca61fd24b95f2f785e99e0f36dcdea", + "reference": "1930c11897ca61fd24b95f2f785e99e0f36dcdea", + "shasum": "" + }, + "require": { + "php": ">=5.2.0" + }, + "suggest": { + "pear/Console_Color2": ">=0.1.2" + }, + "time": "2018-01-25T20:47:17+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "classmap": [ + "Table.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Jan Schneider", + "homepage": "http://pear.php.net/user/yunosh" + }, + { + "name": "Tal Peer", + "homepage": "http://pear.php.net/user/tal" + }, + { + "name": "Xavier Noguer", + "homepage": "http://pear.php.net/user/xnoguer" + }, + { + "name": "Richard Heyes", + "homepage": "http://pear.php.net/user/richard" + } + ], + "description": "Library that makes it easy to build console style tables.", + "homepage": "http://pear.php.net/package/Console_Table/", + "keywords": [ + "console" + ], + "support": { + "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Console_Table", + "source": "https://github.com/pear/Console_Table" + }, + "install-path": "../pear/console_table" + }, + { + "name": "pear/pear-core-minimal", + "version": "v1.10.10", + "version_normalized": "1.10.10.0", + "source": { + "type": "git", + "url": "https://github.com/pear/pear-core-minimal.git", + "reference": "625a3c429d9b2c1546438679074cac1b089116a7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/625a3c429d9b2c1546438679074cac1b089116a7", + "reference": "625a3c429d9b2c1546438679074cac1b089116a7", + "shasum": "" + }, + "require": { + "pear/console_getopt": "~1.4", + "pear/pear_exception": "~1.0" + }, + "replace": { + "rsky/pear-core-min": "self.version" + }, + "time": "2019-11-19T19:00:24+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "src/" + ], + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Christian Weiske", + "email": "cweiske@php.net", + "role": "Lead" + } + ], + "description": "Minimal set of PEAR core files to be used as composer dependency", + "install-path": "../pear/pear-core-minimal" + }, + { + "name": "pear/pear_exception", + "version": "v1.0.1", + "version_normalized": "1.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/pear/PEAR_Exception.git", + "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7", + "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7", + "shasum": "" + }, + "require": { + "php": ">=4.4.0" + }, + "require-dev": { + "phpunit/phpunit": "*" + }, + "time": "2019-12-10T10:24:42+00:00", + "type": "class", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "PEAR/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "." + ], + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Helgi Thormar", + "email": "dufuz@php.net" + }, + { + "name": "Greg Beaver", + "email": "cellog@php.net" + } + ], + "description": "The PEAR Exception base class.", + "homepage": "https://github.com/pear/PEAR_Exception", + "keywords": [ + "exception" + ], + "install-path": "../pear/pear_exception" + }, + { + "name": "phenx/php-font-lib", + "version": "0.5.2", + "version_normalized": "0.5.2.0", + "source": { + "type": "git", + "url": "https://github.com/PhenX/php-font-lib.git", + "reference": "ca6ad461f032145fff5971b5985e5af9e7fa88d8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PhenX/php-font-lib/zipball/ca6ad461f032145fff5971b5985e5af9e7fa88d8", + "reference": "ca6ad461f032145fff5971b5985e5af9e7fa88d8", + "shasum": "" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5 || ^6 || ^7" + }, + "time": "2020-03-08T15:31:32+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "FontLib\\": "src/FontLib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0" + ], + "authors": [ + { + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" + } + ], + "description": "A library to read, parse, export and make subsets of different types of font files.", + "homepage": "https://github.com/PhenX/php-font-lib", + "support": { + "issues": "https://github.com/PhenX/php-font-lib/issues", + "source": "https://github.com/PhenX/php-font-lib/tree/0.5.2" + }, + "install-path": "../phenx/php-font-lib" + }, + { + "name": "phenx/php-svg-lib", + "version": "v0.3.3", + "version_normalized": "0.3.3.0", + "source": { + "type": "git", + "url": "https://github.com/PhenX/php-svg-lib.git", + "reference": "5fa61b65e612ce1ae15f69b3d223cb14ecc60e32" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PhenX/php-svg-lib/zipball/5fa61b65e612ce1ae15f69b3d223cb14ecc60e32", + "reference": "5fa61b65e612ce1ae15f69b3d223cb14ecc60e32", + "shasum": "" + }, + "require": { + "sabberworm/php-css-parser": "^8.3" + }, + "require-dev": { + "phpunit/phpunit": "^5.5|^6.5" + }, + "time": "2019-09-11T20:02:13+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Svg\\": "src/Svg" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0" + ], + "authors": [ + { + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" + } + ], + "description": "A library to read, parse and export to PDF SVG files.", + "homepage": "https://github.com/PhenX/php-svg-lib", + "support": { + "issues": "https://github.com/PhenX/php-svg-lib/issues", + "source": "https://github.com/PhenX/php-svg-lib/tree/master" + }, + "install-path": "../phenx/php-svg-lib" + }, + { + "name": "phpfastcache/riak-client", + "version": "3.4.3", + "version_normalized": "3.4.3.0", + "source": { + "type": "git", + "url": "https://github.com/PHPSocialNetwork/riak-php-client.git", + "reference": "d771f75d16196006604a30bb15adc1c6a9b0fcc9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPSocialNetwork/riak-php-client/zipball/d771f75d16196006604a30bb15adc1c6a9b0fcc9", + "reference": "d771f75d16196006604a30bb15adc1c6a9b0fcc9", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "php": ">=5.4" + }, + "conflict": { + "basho/riak": "*" + }, + "require-dev": { + "apigen/apigen": "4.1.*", + "phpunit/phpunit": "4.8.*" + }, + "time": "2017-11-23T21:33:15+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Basho\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Georges.L", + "email": "contact@geolim4.com", + "homepage": "https://github.com/Geolim4", + "role": "Maintainer" + }, + { + "name": "Christopher Mancini", + "email": "cmancini@basho.com", + "homepage": "https://github.com/christophermancini", + "role": "Former Lead Developer" + }, + { + "name": "Alex Moore", + "email": "amoore@basho.com", + "homepage": "https://github.com/alexmoore", + "role": "Former Developer" + } + ], + "description": "Riak client for PHP (Fork of the official basho/riak due to maintainer significant inactivity)", + "homepage": "https://github.com/PHPSocialNetwork/riak-php-client", + "keywords": [ + "basho", + "client", + "crdt", + "data", + "database", + "datatype", + "driver", + "kv", + "nosql", + "riak" + ], + "support": { + "issues": "https://github.com/PHPSocialNetwork/riak-php-client/issues", + "source": "https://github.com/PHPSocialNetwork/riak-php-client/tree/develop" + }, + "install-path": "../phpfastcache/riak-client" + }, + { + "name": "phpmailer/phpmailer", + "version": "v6.3.0", + "version_normalized": "6.3.0.0", + "source": { + "type": "git", + "url": "https://github.com/PHPMailer/PHPMailer.git", + "reference": "4a08cf4cdd2c38d12ee2b9fa69e5d235f37a6dcb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/4a08cf4cdd2c38d12ee2b9fa69e5d235f37a6dcb", + "reference": "4a08cf4cdd2c38d12ee2b9fa69e5d235f37a6dcb", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "php": ">=5.5.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "doctrine/annotations": "^1.2", + "phpcompatibility/php-compatibility": "^9.3.5", + "roave/security-advisories": "dev-latest", + "squizlabs/php_codesniffer": "^3.5.6", + "yoast/phpunit-polyfills": "^0.2.0" + }, + "suggest": { + "ext-mbstring": "Needed to send email in multibyte encoding charset", + "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", + "league/oauth2-google": "Needed for Google XOAUTH2 authentication", + "psr/log": "For optional PSR-3 debug logging", + "stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication", + "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)" + }, + "time": "2021-02-19T15:28:08+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "PHPMailer\\PHPMailer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-only" + ], + "authors": [ + { + "name": "Marcus Bointon", + "email": "phpmailer@synchromedia.co.uk" + }, + { + "name": "Jim Jagielski", + "email": "jimjag@gmail.com" + }, + { + "name": "Andy Prevost", + "email": "codeworxtech@users.sourceforge.net" + }, + { + "name": "Brent R. Matzelle" + } + ], + "description": "PHPMailer is a full-featured email creation and transfer class for PHP", + "support": { + "issues": "https://github.com/PHPMailer/PHPMailer/issues", + "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.3.0" + }, + "funding": [ + { + "url": "https://github.com/Synchro", + "type": "github" + } + ], + "install-path": "../phpmailer/phpmailer" + }, + { + "name": "psr/container", + "version": "1.0.0", + "version_normalized": "1.0.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" + }, + "time": "2017-02-14T16:28:37+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "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" + ], + "install-path": "../psr/container" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "version_normalized": "1.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "time": "2016-08-06T14:39:51+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "install-path": "../psr/http-message" + }, + { + "name": "psr/log", + "version": "1.1.3", + "version_normalized": "1.1.3.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "time": "2020-03-23T09:12:05+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "install-path": "../psr/log" + }, + { + "name": "psy/psysh", + "version": "v0.10.7", + "version_normalized": "0.10.7.0", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "a395af46999a12006213c0c8346c9445eb31640c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/a395af46999a12006213c0c8346c9445eb31640c", + "reference": "a395af46999a12006213c0c8346c9445eb31640c", + "shasum": "" + }, + "require": { + "dnoegel/php-xdg-base-dir": "0.1.*", + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "~4.0|~3.0|~2.0|~1.3", + "php": "^8.0 || ^7.0 || ^5.5.9", + "symfony/console": "~5.0|~4.0|~3.0|^2.4.2|~2.3.10", + "symfony/var-dumper": "~5.0|~4.0|~3.0|~2.7" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2", + "hoa/console": "3.17.*" + }, + "suggest": { + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", + "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.", + "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit." + }, + "time": "2021-03-14T02:14:56+00:00", + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.10.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "src/functions.php" ], - "build/modules/contrib/{$name}": [ - "type:drupal-module" + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.10.7" + }, + "install-path": "../psy/psysh" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "version_normalized": "3.0.3.0", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "time": "2019-03-08T08:55:37+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "install-path": "../ralouphie/getallheaders" + }, + { + "name": "robrichards/xmlseclibs", + "version": "3.1.1", + "version_normalized": "3.1.1.0", + "source": { + "type": "git", + "url": "https://github.com/robrichards/xmlseclibs.git", + "reference": "f8f19e58f26cdb42c54b214ff8a820760292f8df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/f8f19e58f26cdb42c54b214ff8a820760292f8df", + "reference": "f8f19e58f26cdb42c54b214ff8a820760292f8df", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "php": ">= 5.4" + }, + "time": "2020-09-05T13:00:25+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "RobRichards\\XMLSecLibs\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "A PHP library for XML Security", + "homepage": "https://github.com/robrichards/xmlseclibs", + "keywords": [ + "security", + "signature", + "xml", + "xmldsig" + ], + "support": { + "issues": "https://github.com/robrichards/xmlseclibs/issues", + "source": "https://github.com/robrichards/xmlseclibs/tree/3.1.1" + }, + "install-path": "../robrichards/xmlseclibs" + }, + { + "name": "sabberworm/php-css-parser", + "version": "8.3.1", + "version_normalized": "8.3.1.0", + "source": { + "type": "git", + "url": "https://github.com/sabberworm/PHP-CSS-Parser.git", + "reference": "d217848e1396ef962fb1997cf3e2421acba7f796" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/d217848e1396ef962fb1997cf3e2421acba7f796", + "reference": "d217848e1396ef962fb1997cf3e2421acba7f796", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "codacy/coverage": "^1.4", + "phpunit/phpunit": "~4.8" + }, + "time": "2020-06-01T09:10:00+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "Sabberworm\\CSS": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Raphael Schweikert" + } + ], + "description": "Parser for CSS Files written in PHP", + "homepage": "http://www.sabberworm.com/blog/2010/6/10/php-css-parser", + "keywords": [ + "css", + "parser", + "stylesheet" + ], + "support": { + "issues": "https://github.com/sabberworm/PHP-CSS-Parser/issues", + "source": "https://github.com/sabberworm/PHP-CSS-Parser/tree/8.3.1" + }, + "install-path": "../sabberworm/php-css-parser" + }, + { + "name": "simplesamlphp/composer-module-installer", + "version": "v1.1.8", + "version_normalized": "1.1.8.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/composer-module-installer.git", + "reference": "45161b5406f3e9c82459d0f9a5a1dba064953cfa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/composer-module-installer/zipball/45161b5406f3e9c82459d0f9a5a1dba064953cfa", + "reference": "45161b5406f3e9c82459d0f9a5a1dba064953cfa", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1|^2.0", + "simplesamlphp/simplesamlphp": "*" + }, + "time": "2020-08-25T19:04:33+00:00", + "type": "composer-plugin", + "extra": { + "class": "SimpleSamlPhp\\Composer\\ModuleInstallerPlugin" + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "SimpleSamlPhp\\Composer": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-only" + ], + "description": "A Composer plugin that allows installing SimpleSAMLphp modules through Composer.", + "support": { + "issues": "https://github.com/simplesamlphp/composer-module-installer/issues", + "source": "https://github.com/simplesamlphp/composer-module-installer/tree/v1.1.8" + }, + "install-path": "../simplesamlphp/composer-module-installer" + }, + { + "name": "simplesamlphp/saml2", + "version": "v4.2.0", + "version_normalized": "4.2.0.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/saml2.git", + "reference": "d4038b83be50ccd64ecdc0b7c68e66d63c899d2c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/saml2/zipball/d4038b83be50ccd64ecdc0b7c68e66d63c899d2c", + "reference": "d4038b83be50ccd64ecdc0b7c68e66d63c899d2c", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-openssl": "*", + "ext-zlib": "*", + "php": ">=7.1", + "psr/log": "~1.1", + "robrichards/xmlseclibs": "^3.1.0", + "webmozart/assert": "^1.5" + }, + "require-dev": { + "mockery/mockery": "~1.2", + "phpunit/phpunit": "^7.5", + "sebastian/phpcpd": "~4.1", + "sensiolabs/security-checker": "~6.0", + "simplesamlphp/simplesamlphp-test-framework": "~0.1.0", + "squizlabs/php_codesniffer": "~3.5" + }, + "time": "2021-01-28T21:35:22+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "v4.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "SAML2\\": "src/SAML2" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Andreas Åkre Solberg", + "email": "andreas.solberg@uninett.no" + } + ], + "description": "SAML2 PHP library from SimpleSAMLphp", + "support": { + "issues": "https://github.com/simplesamlphp/saml2/issues", + "source": "https://github.com/simplesamlphp/saml2/tree/v4.2.0" + }, + "install-path": "../simplesamlphp/saml2" + }, + { + "name": "simplesamlphp/simplesamlphp", + "version": "v1.18.8", + "version_normalized": "1.18.8.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp.git", + "reference": "ebb6d15bb8e8b45504adc26fd3872073d1e5cd9b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp/zipball/ebb6d15bb8e8b45504adc26fd3872073d1e5cd9b", + "reference": "ebb6d15bb8e8b45504adc26fd3872073d1e5cd9b", + "shasum": "" + }, + "require": { + "ext-date": "*", + "ext-dom": "*", + "ext-hash": "*", + "ext-json": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-pcre": "*", + "ext-spl": "*", + "ext-zlib": "*", + "gettext/gettext": "^4.6", + "php": ">=5.6", + "phpmailer/phpmailer": "^6.0", + "robrichards/xmlseclibs": "^3.0.4", + "simplesamlphp/saml2": "^3.4 || ^4.0", + "simplesamlphp/simplesamlphp-module-adfs": "^0.9", + "simplesamlphp/simplesamlphp-module-authcrypt": "^0.9", + "simplesamlphp/simplesamlphp-module-authfacebook": "^0.9", + "simplesamlphp/simplesamlphp-module-authorize": "^0.9", + "simplesamlphp/simplesamlphp-module-authtwitter": "^0.9", + "simplesamlphp/simplesamlphp-module-authwindowslive": "^0.9", + "simplesamlphp/simplesamlphp-module-authx509": "^0.9", + "simplesamlphp/simplesamlphp-module-authyubikey": "^0.9", + "simplesamlphp/simplesamlphp-module-cas": "^0.9", + "simplesamlphp/simplesamlphp-module-cdc": "^0.9", + "simplesamlphp/simplesamlphp-module-consent": "^0.9", + "simplesamlphp/simplesamlphp-module-consentadmin": "^0.9", + "simplesamlphp/simplesamlphp-module-discopower": "^0.9", + "simplesamlphp/simplesamlphp-module-exampleattributeserver": "^1.0", + "simplesamlphp/simplesamlphp-module-expirycheck": "^0.9", + "simplesamlphp/simplesamlphp-module-ldap": "^0.9", + "simplesamlphp/simplesamlphp-module-memcachemonitor": "^0.9", + "simplesamlphp/simplesamlphp-module-memcookie": "^1.2", + "simplesamlphp/simplesamlphp-module-metarefresh": "^0.9", + "simplesamlphp/simplesamlphp-module-negotiate": "^0.9", + "simplesamlphp/simplesamlphp-module-oauth": "^0.9", + "simplesamlphp/simplesamlphp-module-preprodwarning": "^0.9", + "simplesamlphp/simplesamlphp-module-radius": "^0.9", + "simplesamlphp/simplesamlphp-module-riak": "^0.9", + "simplesamlphp/simplesamlphp-module-sanitycheck": "^0.9", + "simplesamlphp/simplesamlphp-module-smartattributes": "^0.9", + "simplesamlphp/simplesamlphp-module-sqlauth": "^0.9", + "simplesamlphp/simplesamlphp-module-statistics": "^0.9", + "simplesamlphp/twig-configurable-i18n": "^2.2", + "symfony/config": "^3.4 || ^4.0", + "symfony/dependency-injection": "^3.4 || ^4.0", + "symfony/http-foundation": "^3.4 || ^4.0", + "symfony/http-kernel": "^3.4 || ^4.0", + "symfony/routing": "^3.4 || ^4.0", + "symfony/yaml": "^3.4 || ^4.0", + "twig/twig": "~1.0 || ~2.0" + }, + "require-dev": { + "ext-curl": "*", + "mikey179/vfsstream": "~1.6", + "phpunit/phpunit": "~5.7", + "sensiolabs/security-checker": "^5.0.3", + "simplesamlphp/simplesamlphp-test-framework": "^0.0.14", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "~1.1.9" + }, + "suggest": { + "ext-curl": "Needed in order to check for updates automatically", + "ext-ldap": "Needed if an LDAP backend is used", + "ext-memcache": "Needed if a Memcache server is used to store session information", + "ext-mysql": "Needed if a MySQL backend is used, either for authentication or to store session information", + "ext-pdo": "Needed if a database backend is used, either for authentication or to store session information", + "ext-pgsql": "Needed if a PostgreSQL backend is used, either for authentication or to store session information", + "ext-radius": "Needed if a Radius backend is used", + "predis/predis": "Needed if a Redis server is used to store session information" + }, + "time": "2020-09-02T12:07:28+00:00", + "type": "project", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\": "lib/SimpleSAML" + }, + "files": [ + "lib/_autoload_modules.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Andreas Åkre Solberg", + "email": "andreas.solberg@uninett.no" + }, + { + "name": "Olav Morken", + "email": "olav.morken@uninett.no" + }, + { + "name": "Jaime Perez", + "email": "jaime.perez@uninett.no" + } + ], + "description": "A PHP implementation of a SAML 2.0 service provider and identity provider, also compatible with Shibboleth 1.3 and 2.0.", + "homepage": "http://simplesamlphp.org", + "keywords": [ + "SAML2", + "idp", + "oauth", + "shibboleth", + "sp", + "ws-federation" + ], + "support": { + "issues": "https://github.com/simplesamlphp/simplesamlphp/issues", + "source": "https://github.com/simplesamlphp/simplesamlphp" + }, + "install-path": "../simplesamlphp/simplesamlphp" + }, + { + "name": "simplesamlphp/simplesamlphp-module-adfs", + "version": "v0.9.6", + "version_normalized": "0.9.6.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-adfs.git", + "reference": "425e5ebbdd097c92fe5265a6b48d32a3095c7237" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-adfs/zipball/425e5ebbdd097c92fe5265a6b48d32a3095c7237", + "reference": "425e5ebbdd097c92fe5265a6b48d32a3095c7237", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17", + "webmozart/assert": "<1.7" + }, + "time": "2020-03-31T14:29:24+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\adfs\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Tim van Dijen", + "email": "tvdijen@gmail.com" + } + ], + "description": "A module that implements the WS-federation IDP", + "keywords": [ + "adfs", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-adfs/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-adfs" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/adfs" + }, + { + "name": "simplesamlphp/simplesamlphp-module-authcrypt", + "version": "v0.9.3", + "version_normalized": "0.9.3.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-authcrypt.git", + "reference": "9a2c1a761e2d94394a4f2d3499fd6f0853899530" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authcrypt/zipball/9a2c1a761e2d94394a4f2d3499fd6f0853899530", + "reference": "9a2c1a761e2d94394a4f2d3499fd6f0853899530", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1", + "webmozart/assert": "~1.4", + "whitehat101/apr1-md5": "~1.0" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17" + }, + "time": "2021-01-08T09:09:33+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\authcrypt\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Olav Morken", + "email": "olavmrk@gmail.com" + } + ], + "description": "This module provides authentication against password hashes or .htpasswd files", + "keywords": [ + "authcrypt", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-authcrypt/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-authcrypt" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/authcrypt" + }, + { + "name": "simplesamlphp/simplesamlphp-module-authfacebook", + "version": "v0.9.3", + "version_normalized": "0.9.3.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-authfacebook.git", + "reference": "9152731e939ad4a49e0f06da5f0009ebde0d2b5c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authfacebook/zipball/9152731e939ad4a49e0f06da5f0009ebde0d2b5c", + "reference": "9152731e939ad4a49e0f06da5f0009ebde0d2b5c", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1" + }, + "require-dev": { + "simplesamlphp/simplesamlphp": "^1.17", + "simplesamlphp/simplesamlphp-test-framework": "^0.0.10" + }, + "time": "2020-03-13T11:29:21+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\authfacebook\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Andjelko Horvat", + "email": "comel@vingd.com" + }, + { + "name": "Tim van Dijen", + "email": "tvdijen@gmail.com" + } + ], + "description": "A module that is able to authenticate against Facebook", + "keywords": [ + "facebook", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/simplesamlphp/simplesamlphp-module-authfacebook/issues", + "source": "https://github.com/simplesamlphp/simplesamlphp-module-authfacebook" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/authfacebook" + }, + { + "name": "simplesamlphp/simplesamlphp-module-authorize", + "version": "v0.9.3", + "version_normalized": "0.9.3.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-authorize.git", + "reference": "0593bfcb84fca9d9133f415246ab8ca51b412c92" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authorize/zipball/0593bfcb84fca9d9133f415246ab8ca51b412c92", + "reference": "0593bfcb84fca9d9133f415246ab8ca51b412c92", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17" + }, + "time": "2021-03-24T10:37:17+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\authorize\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Ernesto Revilla", + "email": "erny@yaco.es" + } + ], + "description": "This module provides a user authorization filter based on attribute matching", + "keywords": [ + "authorize", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-authorize/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-authorize" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/authorize" + }, + { + "name": "simplesamlphp/simplesamlphp-module-authtwitter", + "version": "v0.9.1", + "version_normalized": "0.9.1.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-authtwitter.git", + "reference": "29a15e58061222632fea9eb2c807aef5e2c0d54a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authtwitter/zipball/29a15e58061222632fea9eb2c807aef5e2c0d54a", + "reference": "29a15e58061222632fea9eb2c807aef5e2c0d54a", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "simplesamlphp/composer-module-installer": "~1.0", + "simplesamlphp/simplesamlphp-module-oauth": "^0.9" + }, + "require-dev": { + "phpunit/phpunit": "~4.8.35", + "simplesamlphp/simplesamlphp": "^1.17" + }, + "time": "2019-12-03T09:00:09+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\authtwitter\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Olav Morken", + "email": "olavmrk@gmail.com" + }, + { + "name": "Tim van Dijen", + "email": "tvdijen@gmail.com" + } + ], + "description": "A module that is able to perform authentication against Twitter", + "keywords": [ + "simplesamlphp", + "twitter" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-authtwitter/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-authtwitter" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/authtwitter" + }, + { + "name": "simplesamlphp/simplesamlphp-module-authwindowslive", + "version": "v0.9.1", + "version_normalized": "0.9.1.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-authwindowslive.git", + "reference": "f40aecec6c0adaedb6693309840c98cec783876e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authwindowslive/zipball/f40aecec6c0adaedb6693309840c98cec783876e", + "reference": "f40aecec6c0adaedb6693309840c98cec783876e", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17" + }, + "time": "2019-12-03T09:01:13+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\authwindowslive\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Olav Morken", + "email": "olavmrk@gmail.com" + }, + { + "name": "Tim van Dijen", + "email": "tvdijen@gmail.com" + } + ], + "description": "A module that is able to perform authentication against Windows Live", + "keywords": [ + "live", + "simplesamlphp", + "windows", + "windowslive" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-authwindowslive/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-authwindowslive" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/authwindowslive" + }, + { + "name": "simplesamlphp/simplesamlphp-module-authx509", + "version": "v0.9.8", + "version_normalized": "0.9.8.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-authX509.git", + "reference": "66525b1ec4145ec8d0d0e9db4534624b6be4c1fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authX509/zipball/66525b1ec4145ec8d0d0e9db4534624b6be4c1fb", + "reference": "66525b1ec4145ec8d0d0e9db4534624b6be4c1fb", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "simplesamlphp/composer-module-installer": "~1.1", + "simplesamlphp/simplesamlphp-module-ldap": "^0.9" + }, + "require-dev": { + "simplesamlphp/simplesamlphp": "^1.17", + "simplesamlphp/simplesamlphp-test-framework": "^0.0.15" + }, + "time": "2020-12-15T23:06:47+00:00", + "type": "simplesamlphp-module", + "extra": { + "ssp-mixedcase-module-name": "authX509" + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\authX509\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Joost van Dijk", + "email": "Joost.vanDijk@surfnet.nl" + }, + { + "name": "Tim van Dijen", + "email": "tvdijen@gmail.com" + } + ], + "description": "A module that is able to authenticate users based on X509 client certificates", + "keywords": [ + "simplesamlphp", + "x509" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-authx509/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-authx509" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/authX509" + }, + { + "name": "simplesamlphp/simplesamlphp-module-authyubikey", + "version": "v0.9.1", + "version_normalized": "0.9.1.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-authyubikey.git", + "reference": "8c27bfeb4981d2e6fa40a831e945f40c5a4ad3d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authyubikey/zipball/8c27bfeb4981d2e6fa40a831e945f40c5a4ad3d2", + "reference": "8c27bfeb4981d2e6fa40a831e945f40c5a4ad3d2", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1", + "webmozart/assert": "~1.4" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17" + }, + "time": "2019-12-03T08:52:49+00:00", + "type": "simplesamlphp-module", + "extra": { + "ssp-mixedcase-module-name": "authYubikey" + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\modules\\yubikey\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Tim van Dijen", + "email": "tvdijen@gmail.com" + } + ], + "description": "A module that is able to authenticate against YubiKey", + "keywords": [ + "authyubikey", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-authyubikey/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-authyubikey" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/authYubikey" + }, + { + "name": "simplesamlphp/simplesamlphp-module-cas", + "version": "v0.9.1", + "version_normalized": "0.9.1.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-cas.git", + "reference": "63b72e4600550c507cdfc32fdd208ad59a64321e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-cas/zipball/63b72e4600550c507cdfc32fdd208ad59a64321e", + "reference": "63b72e4600550c507cdfc32fdd208ad59a64321e", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1", + "simplesamlphp/simplesamlphp-module-ldap": "^0.9", + "webmozart/assert": "~1.4" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17" + }, + "time": "2019-12-03T09:03:06+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\cas\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Olav Morken", + "email": "olavmrk@gmail.com" + } + ], + "description": "A module that provides CAS authentication", + "keywords": [ + "cas", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-cas/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-cas" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/cas" + }, + { + "name": "simplesamlphp/simplesamlphp-module-cdc", + "version": "v0.9.1", + "version_normalized": "0.9.1.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-cdc.git", + "reference": "16a5bfac7299e04e5feb472af328e07598708166" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-cdc/zipball/16a5bfac7299e04e5feb472af328e07598708166", + "reference": "16a5bfac7299e04e5feb472af328e07598708166", + "shasum": "" + }, + "require": { + "simplesamlphp/composer-module-installer": ">=1.1.6" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17" + }, + "time": "2019-12-03T09:04:11+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\cdc\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Olav Morken", + "email": "olav.morken@uninett.no" + }, + { + "name": "Jaime Perez Crespo", + "email": "jaime.perez@uninett.no" + } + ], + "description": "A SimpleSAMLphp module that allows integration with CDC", + "homepage": "https://simplesamlphp.org/", + "keywords": [ + "cdc", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/simplesamlphp/simplesamlphp-module-cdc/issues", + "source": "https://github.com/simplesamlphp/simplesamlphp-module-cdc/" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/cdc" + }, + { + "name": "simplesamlphp/simplesamlphp-module-consent", + "version": "v0.9.6", + "version_normalized": "0.9.6.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-consent.git", + "reference": "2f84d15e96afb5a32b6d1cff93370f501ca7867d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-consent/zipball/2f84d15e96afb5a32b6d1cff93370f501ca7867d", + "reference": "2f84d15e96afb5a32b6d1cff93370f501ca7867d", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17", + "webmozart/assert": "<1.7" + }, + "time": "2020-06-15T14:26:23+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\consent\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Olav Morken", + "email": "lavmrk@gmail.com" + } + ], + "description": "A module that will ask for user consent before releasing attributes", + "keywords": [ + "consent", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-consent/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-consent" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/consent" + }, + { + "name": "simplesamlphp/simplesamlphp-module-consentadmin", + "version": "v0.9.1", + "version_normalized": "0.9.1.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-consentadmin.git", + "reference": "466e8d0d751f0080162d78e63ab2e125b24d17a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-consentadmin/zipball/466e8d0d751f0080162d78e63ab2e125b24d17a1", + "reference": "466e8d0d751f0080162d78e63ab2e125b24d17a1", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1", + "simplesamlphp/simplesamlphp-module-consent": "^0.9", + "webmozart/assert": "~1.4" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17" + }, + "time": "2019-12-03T09:06:40+00:00", + "type": "simplesamlphp-module", + "extra": { + "ssp-mixedcase-module-name": "consentAdmin" + }, + "installation-source": "dist", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Jacob Christiansen", + "email": "jach@wayf.dk" + }, + { + "name": "Olav Morken", + "email": "olav.morken@uninett.no" + } + ], + "description": "A module that allows users to manage their consent", + "keywords": [ + "consentadmin", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/simplesamlphp/simplesamlphp-module-consentadmin/issues", + "source": "https://github.com/simplesamlphp/simplesamlphp-module-consentadmin" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/consentAdmin" + }, + { + "name": "simplesamlphp/simplesamlphp-module-discopower", + "version": "v0.9.3", + "version_normalized": "0.9.3.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-discopower.git", + "reference": "c892926e8186d0a2c638f7032dfc30540c1f92fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-discopower/zipball/c892926e8186d0a2c638f7032dfc30540c1f92fb", + "reference": "c892926e8186d0a2c638f7032dfc30540c1f92fb", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1", + "webmozart/assert": "~1.4 <1.6" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17" + }, + "time": "2019-12-13T07:51:43+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\modules\\discopower\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Andreas Åkre Solberg", + "email": "andreas.solberg@uninett.no" + } + ], + "description": "Fancy tabbed discovery service with filtering capabilities where SPs can have different sets of metadata listed", + "keywords": [ + "discopower", + "discovery", + "simplesamlphp" + ], + "install-path": "../simplesamlphp/simplesamlphp/modules/discopower" + }, + { + "name": "simplesamlphp/simplesamlphp-module-exampleattributeserver", + "version": "v1.0.0", + "version_normalized": "1.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-exampleattributeserver.git", + "reference": "63e0323e81c32bc3c9eaa01ea45194bb10153708" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-exampleattributeserver/zipball/63e0323e81c32bc3c9eaa01ea45194bb10153708", + "reference": "63e0323e81c32bc3c9eaa01ea45194bb10153708", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17" + }, + "time": "2019-05-28T12:37:15+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\exampleattributeserver\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Olav Morken", + "email": "olavmrk@gmail.com" + } + ], + "description": "An example for SAML attributes queries", + "keywords": [ + "exampleattributeserver", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-exampleattributeserver/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-exampleattributeserver" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/exampleattributeserver" + }, + { + "name": "simplesamlphp/simplesamlphp-module-expirycheck", + "version": "v0.9.3", + "version_normalized": "0.9.3.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-expirycheck.git", + "reference": "59c59cdf87e2679257b46c07bb4c27666a11cc20" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-expirycheck/zipball/59c59cdf87e2679257b46c07bb4c27666a11cc20", + "reference": "59c59cdf87e2679257b46c07bb4c27666a11cc20", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1", + "webmozart/assert": "~1.4" + }, + "require-dev": { + "simplesamlphp/simplesamlphp": "^1.17", + "simplesamlphp/simplesamlphp-test-framework": "^0.0.10" + }, + "time": "2019-12-14T13:20:46+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\expirycheck\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Alex Mihičinac", + "email": "alexm@arnes.si" + } + ], + "description": "The expirycheck module validates user's expiry date", + "keywords": [ + "expirycheck", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/simplesamlphp/simplesamlphp-module-expirycheck/issues", + "source": "https://github.com/simplesamlphp/simplesamlphp-module-expirycheck" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/expirycheck" + }, + { + "name": "simplesamlphp/simplesamlphp-module-ldap", + "version": "v0.9.10", + "version_normalized": "0.9.10.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-ldap.git", + "reference": "78f04cbe41bfb9dcbcdeff4b5f12e67c060e1a77" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-ldap/zipball/78f04cbe41bfb9dcbcdeff4b5f12e67c060e1a77", + "reference": "78f04cbe41bfb9dcbcdeff4b5f12e67c060e1a77", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17" + }, + "suggest": { + "ext-ldap": "Needed when using LDAP authentication in SimpleSAMLphp" + }, + "time": "2020-09-16T21:09:07+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\ldap\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Olav Morken", + "email": "olavmrk@gmail.com" + }, + { + "name": "Tim van Dijen", + "email": "tvdijen@gmail.com" + } + ], + "description": "A module that provides authentication against LDAP stores", + "keywords": [ + "ldap", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-ldap/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-ldap" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/ldap" + }, + { + "name": "simplesamlphp/simplesamlphp-module-memcachemonitor", + "version": "v0.9.2", + "version_normalized": "0.9.2.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-memcachemonitor.git", + "reference": "900b5c6b59913d9013b8dae090841a127ae55ae5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-memcachemonitor/zipball/900b5c6b59913d9013b8dae090841a127ae55ae5", + "reference": "900b5c6b59913d9013b8dae090841a127ae55ae5", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1" + }, + "require-dev": { + "simplesamlphp/simplesamlphp": "^1.17", + "simplesamlphp/simplesamlphp-test-framework": "~0.0.6" + }, + "time": "2021-01-25T15:44:44+00:00", + "type": "simplesamlphp-module", + "extra": { + "ssp-mixedcase-module-name": "memcacheMonitor" + }, + "installation-source": "dist", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Andreas Åkre Solberg", + "email": "andreas.solberg@uninett.no" + }, + { + "name": "Tim van Dijen", + "email": "tvdijen@gmail.com" + } + ], + "description": "A module that is able display usage statistics of a memcache(d) store", + "keywords": [ + "memcachemonitor", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-memcachemonitor/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-memcachemonitor" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/memcacheMonitor" + }, + { + "name": "simplesamlphp/simplesamlphp-module-memcookie", + "version": "v1.2.2", + "version_normalized": "1.2.2.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-memcookie.git", + "reference": "39535304e8d464b7baa1e82cb441fa432947ff57" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-memcookie/zipball/39535304e8d464b7baa1e82cb441fa432947ff57", + "reference": "39535304e8d464b7baa1e82cb441fa432947ff57", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": ">=1.1.6" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17", + "simplesamlphp/simplesamlphp-test-framework": "^0.0.6" + }, + "time": "2019-08-08T18:33:47+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1" + ], + "authors": [ + { + "name": "Olav Morken", + "email": "olav.morken@uninett.no" + }, + { + "name": "Jaime Perez Crespo", + "email": "jaime.perez@uninett.no" + } + ], + "description": "A SimpleSAMLphp module that allows integration with Auth MemCookie, allowing web applications written in other languages than PHP to integrate with SimpleSAMLphp.", + "homepage": "https://simplesamlphp.org/", + "keywords": [ + "Auth MemCookie", + "apache", + "cookies", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/simplesamlphp/simplesamlphp-module-memcookie/issues", + "source": "https://github.com/simplesamlphp/simplesamlphp-module-memcookie/" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/memcookie" + }, + { + "name": "simplesamlphp/simplesamlphp-module-metarefresh", + "version": "v0.9.6", + "version_normalized": "0.9.6.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-metarefresh.git", + "reference": "e284306a7097297765b5b78a4e28f19f18d4e001" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-metarefresh/zipball/e284306a7097297765b5b78a4e28f19f18d4e001", + "reference": "e284306a7097297765b5b78a4e28f19f18d4e001", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.18" + }, + "time": "2020-07-31T14:43:37+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\metarefresh\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Andreas Åkre Solberg", + "email": "andreas.solberg@uninett.no" + } + ], + "description": "The metarefresh module will download and parse metadata documents and store them locally", + "keywords": [ + "metarefresh", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-metarefresh/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-metarefresh" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/metarefresh" + }, + { + "name": "simplesamlphp/simplesamlphp-module-negotiate", + "version": "v0.9.10", + "version_normalized": "0.9.10.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-negotiate.git", + "reference": "db05ff40399c66e3f14697a8162da6b2fbdab47d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-negotiate/zipball/db05ff40399c66e3f14697a8162da6b2fbdab47d", + "reference": "db05ff40399c66e3f14697a8162da6b2fbdab47d", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1", + "simplesamlphp/simplesamlphp-module-ldap": "^0.9", + "webmozart/assert": "~1.4" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "sensiolabs/security-checker": "^5.0.3", + "simplesamlphp/simplesamlphp": "dev-testing-1.18", + "simplesamlphp/simplesamlphp-test-framework": "^0.0.14", + "squizlabs/php_codesniffer": "^3.5" + }, + "suggest": { + "ext-krb5": "Needed in case the SimpleSAMLphp negotiate module is used" + }, + "time": "2021-01-22T13:36:09+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\negotiate\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Olav Morken", + "email": "olavmrk@gmail.com" + } + ], + "description": "The Negotiate module implements Microsofts Kerberos SPNEGO mechanism", + "keywords": [ + "negotiate", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-negotiate/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-negotiate" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/negotiate" + }, + { + "name": "simplesamlphp/simplesamlphp-module-oauth", + "version": "v0.9.2", + "version_normalized": "0.9.2.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-oauth.git", + "reference": "d14d7aca6e699ec12b3f4dd0128373faa1a2cc61" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-oauth/zipball/d14d7aca6e699ec12b3f4dd0128373faa1a2cc61", + "reference": "d14d7aca6e699ec12b3f4dd0128373faa1a2cc61", + "shasum": "" + }, + "require": { + "simplesamlphp/composer-module-installer": ">=1.1.6" + }, + "require-dev": { + "phpunit/phpunit": "~4.8.36", + "simplesamlphp/simplesamlphp": "^1.17" + }, + "time": "2020-04-29T19:37:43+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Olav Morken", + "email": "olav.morken@uninett.no" + }, + { + "name": "Jaime Perez Crespo", + "email": "jaime.perez@uninett.no" + } + ], + "description": "A SimpleSAMLphp module that allows integration with OAuth1,", + "homepage": "https://simplesamlphp.org/", + "keywords": [ + "oauth1", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/simplesamlphp/simplesamlphp-module-oauth/issues", + "source": "https://github.com/simplesamlphp/simplesamlphp-module-oauth/" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/oauth" + }, + { + "name": "simplesamlphp/simplesamlphp-module-preprodwarning", + "version": "v0.9.2", + "version_normalized": "0.9.2.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-preprodwarning.git", + "reference": "8e032de33a75eb44857dc06d886ad94ee3af4638" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-preprodwarning/zipball/8e032de33a75eb44857dc06d886ad94ee3af4638", + "reference": "8e032de33a75eb44857dc06d886ad94ee3af4638", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17", + "webmozart/assert": "^1.4" + }, + "time": "2020-04-09T13:05:27+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\preprodwarning\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Andreas Åkre Solberg", + "email": "andreas.solberg@uninett.no" + } + ], + "description": "Display a warning when using a pre-production environment", + "keywords": [ + "preprodwarning", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/simplesamlphp/simplesamlphp-module-preprodwarning/issues", + "source": "https://github.com/simplesamlphp/simplesamlphp-module-preprodwarning" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/preprodwarning" + }, + { + "name": "simplesamlphp/simplesamlphp-module-radius", + "version": "v0.9.3", + "version_normalized": "0.9.3.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-radius.git", + "reference": "36bd0f39f9a13f7eb96ead97c97c3634aa1c3f2d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-radius/zipball/36bd0f39f9a13f7eb96ead97c97c3634aa1c3f2d", + "reference": "36bd0f39f9a13f7eb96ead97c97c3634aa1c3f2d", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17", + "simplesamlphp/simplesamlphp-test-framework": "^0.0.7" + }, + "time": "2019-10-03T18:13:07+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\radius\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Olav Morken", + "email": "olavmrk@gmail.com" + } + ], + "description": "A module that is able perform authentication against a RADIUS server", + "keywords": [ + "radius", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-radius/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-radius" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/radius" + }, + { + "name": "simplesamlphp/simplesamlphp-module-riak", + "version": "v0.9.1", + "version_normalized": "0.9.1.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-riak.git", + "reference": "c1a9d9545cb4e05b9205b34624850bb777aca991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-riak/zipball/c1a9d9545cb4e05b9205b34624850bb777aca991", + "reference": "c1a9d9545cb4e05b9205b34624850bb777aca991", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "phpfastcache/riak-client": "^3.4", + "simplesamlphp/composer-module-installer": "~1.1" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17" + }, + "time": "2019-12-03T08:28:45+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\riak\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Tim van Dijen", + "email": "tvdijen@gmail.com" + } + ], + "description": "A module that is able to store key/value pairs in a Riak store", + "keywords": [ + "riak", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-riak/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-riak" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/riak" + }, + { + "name": "simplesamlphp/simplesamlphp-module-sanitycheck", + "version": "v0.9.1", + "version_normalized": "0.9.1.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-sanitycheck.git", + "reference": "15d6664eae73a233c3c4c72fd8a5c2be72b6ed2a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-sanitycheck/zipball/15d6664eae73a233c3c4c72fd8a5c2be72b6ed2a", + "reference": "15d6664eae73a233c3c4c72fd8a5c2be72b6ed2a", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1", + "webmozart/assert": "~1.4" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17" + }, + "time": "2020-05-07T11:34:29+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\sanitycheck\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Andreas Åkre Solberg", + "email": "andreas.solberg@uninett.no" + } + ], + "description": "Perform sanity checks on configuration", + "keywords": [ + "sanitycheck", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-sanitycheck/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-sanitycheck" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/sanitycheck" + }, + { + "name": "simplesamlphp/simplesamlphp-module-smartattributes", + "version": "v0.9.1", + "version_normalized": "0.9.1.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-smartattributes.git", + "reference": "b45d3ecd916e359a9cae05f9ae9df09b5c42f4e6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-smartattributes/zipball/b45d3ecd916e359a9cae05f9ae9df09b5c42f4e6", + "reference": "b45d3ecd916e359a9cae05f9ae9df09b5c42f4e6", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17" + }, + "time": "2019-12-03T09:24:09+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\smartattributes\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Andreas Åkre Solberg", + "email": "andreas.solberg@uninett.no" + } + ], + "description": "The SmartAttributes module provides additional authentication processing filters to manipulate attributes.", + "keywords": [ + "simplesamlphp", + "smartattributes" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-smartattributes/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-smartattributes" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/smartattributes" + }, + { + "name": "simplesamlphp/simplesamlphp-module-sqlauth", + "version": "v0.9.1", + "version_normalized": "0.9.1.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-sqlauth.git", + "reference": "31bce8763ad97f4b4473e4ad4a5a96ddc136ef6b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-sqlauth/zipball/31bce8763ad97f4b4473e4ad4a5a96ddc136ef6b", + "reference": "31bce8763ad97f4b4473e4ad4a5a96ddc136ef6b", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17", + "webmozart/assert": "^1.4" + }, + "time": "2019-12-03T09:07:09+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\sqlauth\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Olav Morken", + "email": "olavmrk@gmail.com" + } + ], + "description": "This is a authentication module for authenticating a user against a SQL database", + "keywords": [ + "simplesamlphp", + "sqlauth" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-sqlauth/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-sqlauth" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/sqlauth" + }, + { + "name": "simplesamlphp/simplesamlphp-module-statistics", + "version": "v0.9.6", + "version_normalized": "0.9.6.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-statistics.git", + "reference": "03fb6bdbbf5ce0a0cb257208db79aacac227ac10" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-statistics/zipball/03fb6bdbbf5ce0a0cb257208db79aacac227ac10", + "reference": "03fb6bdbbf5ce0a0cb257208db79aacac227ac10", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1", + "webmozart/assert": "^1.4" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17", + "simplesamlphp/simplesamlphp-test-framework": "^0.0.12" + }, + "time": "2021-01-25T15:15:26+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\statistics\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Andreas Åkre Solberg", + "email": "andreas.solberg@uninett.no" + } + ], + "description": "The SimpleSAMLphp statistics module", + "keywords": [ + "simplesamlphp", + "statistics" + ], + "support": { + "issues": "https://github.com/simplesamlphp/simplesamlphp-module-statistics/issues", + "source": "https://github.com/simplesamlphp/simplesamlphp-module-statistics" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/statistics" + }, + { + "name": "simplesamlphp/twig-configurable-i18n", + "version": "v2.3.4", + "version_normalized": "2.3.4.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/twig-configurable-i18n.git", + "reference": "e2bffc7eed3112a0b3870ef5b4da0fd74c7c4b8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/twig-configurable-i18n/zipball/e2bffc7eed3112a0b3870ef5b4da0fd74c7c4b8a", + "reference": "e2bffc7eed3112a0b3870ef5b4da0fd74c7c4b8a", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "twig/extensions": "@dev" + }, + "require-dev": { + "phpunit/phpunit": "^7.5", + "sensiolabs/security-checker": "~6.0.3", + "simplesamlphp/simplesamlphp-test-framework": "~0.1.2", + "squizlabs/php_codesniffer": "^3.5", + "twig/twig": "^2.13" + }, + "time": "2020-08-27T12:51:10+00:00", + "type": "project", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\TwigConfigurableI18n\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1" + ], + "authors": [ + { + "name": "Jaime Perez", + "email": "jaime.perez@uninett.no" + } + ], + "description": "This is an extension on top of Twig's i18n extension, allowing you to customize which functions to use for translations.", + "keywords": [ + "extension", + "gettext", + "i18n", + "internationalization", + "translation", + "twig" + ], + "support": { + "issues": "https://github.com/simplesamlphp/twig-configurable-i18n/issues", + "source": "https://github.com/simplesamlphp/twig-configurable-i18n" + }, + "install-path": "../simplesamlphp/twig-configurable-i18n" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "3.5.8", + "version_normalized": "3.5.8.0", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "9d583721a7157ee997f235f327de038e7ea6dac4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/9d583721a7157ee997f235f327de038e7ea6dac4", + "reference": "9d583721a7157ee997f235f327de038e7ea6dac4", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "time": "2020-10-23T02:01:07+00:00", + "bin": [ + "bin/phpcs", + "bin/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "installation-source": "dist", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", + "keywords": [ + "phpcs", + "standards" + ], + "support": { + "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", + "source": "https://github.com/squizlabs/PHP_CodeSniffer", + "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" + }, + "install-path": "../squizlabs/php_codesniffer" + }, + { + "name": "stack/builder", + "version": "v1.0.5", + "version_normalized": "1.0.5.0", + "source": { + "type": "git", + "url": "https://github.com/stackphp/builder.git", + "reference": "fb3d136d04c6be41120ebf8c0cc71fe9507d750a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/stackphp/builder/zipball/fb3d136d04c6be41120ebf8c0cc71fe9507d750a", + "reference": "fb3d136d04c6be41120ebf8c0cc71fe9507d750a", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "symfony/http-foundation": "~2.1|~3.0|~4.0", + "symfony/http-kernel": "~2.1|~3.0|~4.0" + }, + "require-dev": { + "silex/silex": "~1.0" + }, + "time": "2017-11-18T14:57:29+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Stack": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + } + ], + "description": "Builder for stack middlewares based on HttpKernelInterface.", + "keywords": [ + "stack" + ], + "install-path": "../stack/builder" + }, + { + "name": "symfony-cmf/routing", + "version": "1.4.1", + "version_normalized": "1.4.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony-cmf/routing.git", + "reference": "fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony-cmf/routing/zipball/fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac", + "reference": "fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac", + "shasum": "" + }, + "require": { + "php": "^5.3.9|^7.0", + "psr/log": "1.*", + "symfony/http-kernel": "^2.2|3.*", + "symfony/routing": "^2.2|3.*" + }, + "require-dev": { + "friendsofsymfony/jsrouting-bundle": "^1.1", + "symfony-cmf/testing": "^1.3", + "symfony/config": "^2.2|3.*", + "symfony/dependency-injection": "^2.0.5|3.*", + "symfony/event-dispatcher": "^2.1|3.*" + }, + "suggest": { + "symfony/event-dispatcher": "DynamicRouter can optionally trigger an event at the start of matching. Minimal version (~2.1)" + }, + "time": "2017-05-09T08:10:41+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Cmf\\Component\\Routing\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony CMF Community", + "homepage": "https://github.com/symfony-cmf/Routing/contributors" + } + ], + "description": "Extends the Symfony2 routing component for dynamic routes and chaining several routers", + "homepage": "http://cmf.symfony.com", + "keywords": [ + "database", + "routing" + ], + "install-path": "../symfony-cmf/routing" + }, + { + "name": "symfony/class-loader", + "version": "v3.4.41", + "version_normalized": "3.4.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/class-loader.git", + "reference": "e4636a4f23f157278a19e5db160c63de0da297d8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/class-loader/zipball/e4636a4f23f157278a19e5db160c63de0da297d8", + "reference": "e4636a4f23f157278a19e5db160c63de0da297d8", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "require-dev": { + "symfony/finder": "~2.8|~3.0|~4.0", + "symfony/polyfill-apcu": "~1.1" + }, + "suggest": { + "symfony/polyfill-apcu": "For using ApcClassLoader on HHVM" + }, + "time": "2020-03-15T09:38:08+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\ClassLoader\\": "" + }, + "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 ClassLoader Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/class-loader" + }, + { + "name": "symfony/config", + "version": "v4.4.20", + "version_normalized": "4.4.20.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "98606c6fa1a8f55ff964ccdd704275bf5b9f71b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/98606c6fa1a8f55ff964ccdd704275bf5b9f71b3", + "reference": "98606c6fa1a8f55ff964ccdd704275bf5b9f71b3", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/filesystem": "^3.4|^4.0|^5.0", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/finder": "<3.4" + }, + "require-dev": { + "symfony/event-dispatcher": "^3.4|^4.0|^5.0", + "symfony/finder": "^3.4|^4.0|^5.0", + "symfony/messenger": "^4.1|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/yaml": "^3.4|^4.0|^5.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "time": "2021-02-22T15:36:50+00:00", + "type": "library", + "installation-source": "dist", + "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": "Helps you find, load, combine, autofill and validate configuration values of any kind", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/config/tree/v4.4.20" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/config" + }, + { + "name": "symfony/console", + "version": "v3.4.41", + "version_normalized": "3.4.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "bfe29ead7e7b1cc9ce74c6a40d06ad1f96fced13" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/bfe29ead7e7b1cc9ce74c6a40d06ad1f96fced13", + "reference": "bfe29ead7e7b1cc9ce74c6a40d06ad1f96fced13", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/debug": "~2.8|~3.0|~4.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/process": "<3.3" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.3|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.3|~4.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "time": "2020-05-30T18:58:05+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "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", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/console" + }, + { + "name": "symfony/debug", + "version": "v3.4.41", + "version_normalized": "3.4.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "518c6a00d0872da30bd06aee3ea59a0a5cf54d6d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/518c6a00d0872da30bd06aee3ea59a0a5cf54d6d", + "reference": "518c6a00d0872da30bd06aee3ea59a0a5cf54d6d", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + }, + "require-dev": { + "symfony/http-kernel": "~2.8|~3.0|~4.0" + }, + "time": "2020-05-22T18:25:20+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "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 Debug Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/debug" + }, + { + "name": "symfony/dependency-injection", + "version": "v3.4.41", + "version_normalized": "3.4.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "e39380b7104b0ec538a075ae919f00c7e5267bac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/e39380b7104b0ec538a075ae919f00c7e5267bac", + "reference": "e39380b7104b0ec538a075ae919f00c7e5267bac", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "psr/container": "^1.0" + }, + "conflict": { + "symfony/config": "<3.3.7", + "symfony/finder": "<3.3", + "symfony/proxy-manager-bridge": "<3.4", + "symfony/yaml": "<3.4" + }, + "provide": { + "psr/container-implementation": "1.0" + }, + "require-dev": { + "symfony/config": "~3.3|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/yaml": "~3.4|~4.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": "" + }, + "time": "2020-05-30T21:06:01+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "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", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/dependency-injection" + }, + { + "name": "symfony/event-dispatcher", + "version": "v3.4.41", + "version_normalized": "3.4.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "14d978f8e8555f2de719c00eb65376be7d2e9081" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/14d978f8e8555f2de719c00eb65376be7d2e9081", + "reference": "14d978f8e8555f2de719c00eb65376be7d2e9081", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "conflict": { + "symfony/dependency-injection": "<3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~2.8|~3.0|~4.0", + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/stopwatch": "~2.8|~3.0|~4.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "time": "2020-05-05T15:06:23+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "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", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/event-dispatcher" + }, + { + "name": "symfony/filesystem", + "version": "v5.2.4", + "version_normalized": "5.2.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "710d364200997a5afde34d9fe57bd52f3cc1e108" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/710d364200997a5afde34d9fe57bd52f3cc1e108", + "reference": "710d364200997a5afde34d9fe57bd52f3cc1e108", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8" + }, + "time": "2021-02-12T10:38:38+00:00", + "type": "library", + "installation-source": "dist", + "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": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v5.2.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/filesystem" + }, + { + "name": "symfony/finder", + "version": "v4.4.20", + "version_normalized": "4.4.20.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "2543795ab1570df588b9bbd31e1a2bd7037b94f6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/2543795ab1570df588b9bbd31e1a2bd7037b94f6", + "reference": "2543795ab1570df588b9bbd31e1a2bd7037b94f6", + "shasum": "" + }, + "require": { + "php": ">=7.1.3" + }, + "time": "2021-02-12T10:48:09+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v4.4.20" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/finder" + }, + { + "name": "symfony/http-foundation", + "version": "v3.4.41", + "version_normalized": "3.4.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "fbd216d2304b1a3fe38d6392b04729c8dd356359" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/fbd216d2304b1a3fe38d6392b04729c8dd356359", + "reference": "fbd216d2304b1a3fe38d6392b04729c8dd356359", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php70": "~1.6" + }, + "require-dev": { + "symfony/expression-language": "~2.8|~3.0|~4.0" + }, + "time": "2020-05-16T13:15:54+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "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 HttpFoundation Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/http-foundation" + }, + { + "name": "symfony/http-kernel", + "version": "v3.4.44", + "version_normalized": "3.4.44.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "27dcaa8c6b18c75df9f37badeb4d3564ffaa1326" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/27dcaa8c6b18c75df9f37badeb4d3564ffaa1326", + "reference": "27dcaa8c6b18c75df9f37badeb4d3564ffaa1326", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "psr/log": "~1.0", + "symfony/debug": "^3.3.3|~4.0", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php56": "~1.8" + }, + "conflict": { + "symfony/config": "<2.8", + "symfony/dependency-injection": "<3.4.10|<4.0.10,>=4", + "symfony/var-dumper": "<3.3", + "twig/twig": "<1.34|<2.4,>=2" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/cache": "~1.0", + "symfony/browser-kit": "~2.8|~3.0|~4.0", + "symfony/class-loader": "~2.8|~3.0", + "symfony/config": "~2.8|~3.0|~4.0", + "symfony/console": "~2.8|~3.0|~4.0", + "symfony/css-selector": "~2.8|~3.0|~4.0", + "symfony/dependency-injection": "^3.4.10|^4.0.10", + "symfony/dom-crawler": "~2.8|~3.0|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/finder": "~2.8|~3.0|~4.0", + "symfony/process": "~2.8|~3.0|~4.0", + "symfony/routing": "~3.4|~4.0", + "symfony/stopwatch": "~2.8|~3.0|~4.0", + "symfony/templating": "~2.8|~3.0|~4.0", + "symfony/translation": "~2.8|~3.0|~4.0", + "symfony/var-dumper": "~3.3|~4.0" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "", + "symfony/finder": "", + "symfony/var-dumper": "" + }, + "time": "2020-08-31T05:53:42+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "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 HttpKernel Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/http-kernel" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.17.0", + "version_normalized": "1.17.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e94c8b1bbe2bc77507a1056cdb06451c75b427f9", + "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "time": "2020-05-12T16:14:59+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "installation-source": "dist", + "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" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-ctype" + }, + { + "name": "symfony/polyfill-iconv", + "version": "v1.17.0", + "version_normalized": "1.17.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-iconv.git", + "reference": "c4de7601eefbf25f9d47190abe07f79fe0a27424" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/c4de7601eefbf25f9d47190abe07f79fe0a27424", + "reference": "c4de7601eefbf25f9d47190abe07f79fe0a27424", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-iconv": "For best performance" + }, + "time": "2020-05-12T16:47:27+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Iconv\\": "" + }, + "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 Iconv extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "iconv", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-iconv" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.17.0", + "version_normalized": "1.17.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3bff59ea7047e925be6b7f2059d60af31bb46d6a", + "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "time": "2020-05-12T16:47:27+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-intl-idn" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.17.0", + "version_normalized": "1.17.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "fa79b11539418b02fc5e1897267673ba2c19419c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c", + "reference": "fa79b11539418b02fc5e1897267673ba2c19419c", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "time": "2020-05-12T16:47:27+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "installation-source": "dist", + "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" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-mbstring" + }, + { + "name": "symfony/polyfill-php56", + "version": "v1.17.0", + "version_normalized": "1.17.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php56.git", + "reference": "e3c8c138280cdfe4b81488441555583aa1984e23" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/e3c8c138280cdfe4b81488441555583aa1984e23", + "reference": "e3c8c138280cdfe4b81488441555583aa1984e23", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-util": "~1.0" + }, + "time": "2020-05-12T16:47:27+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php56\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-php56" + }, + { + "name": "symfony/polyfill-php70", + "version": "v1.17.0", + "version_normalized": "1.17.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php70.git", + "reference": "82225c2d7d23d7e70515496d249c0152679b468e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/82225c2d7d23d7e70515496d249c0152679b468e", + "reference": "82225c2d7d23d7e70515496d249c0152679b468e", + "shasum": "" + }, + "require": { + "paragonie/random_compat": "~1.0|~2.0|~9.99", + "php": ">=5.3.3" + }, + "time": "2020-05-12T16:47:27+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php70\\": "" + }, + "files": [ + "bootstrap.php" ], - "build/profiles/contrib/{$name}": [ - "type:drupal-profile" + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-php70" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.17.0", + "version_normalized": "1.17.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "f048e612a3905f34931127360bdd2def19a5e582" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582", + "reference": "f048e612a3905f34931127360bdd2def19a5e582", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "time": "2020-05-12T16:47:27+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-php72" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.22.1", + "version_normalized": "1.22.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91", + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "time": "2021-01-07T16:49:33+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" ], - "build/themes/contrib/{$name}": [ - "type:drupal-theme" + "classmap": [ + "Resources/stubs" ] - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Drupal\\ui_patterns\\": "./src" - } - }, - "autoload-dev": { - "psr-4": { - "Drupal\\Tests\\ui_patterns\\": "./tests/src" - } - }, - "notification-url": "https://packages.drupal.org/8/downloads", - "scripts": { - "post-install-cmd": [ - "./vendor/bin/run drupal:site-setup" - ], - "post-update-cmd": [ - "./vendor/bin/run drupal:site-setup" - ] - }, - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Nuvole Web", - "homepage": "https://www.drupal.org/user/186696", - "email": "info@nuvole.org" - }, - { - "name": "bircher", - "homepage": "https://www.drupal.org/user/1344166" - }, - { - "name": "pescetti", - "homepage": "https://www.drupal.org/user/436244" - } - ], - "description": "UI Patterns.", - "homepage": "https://www.drupal.org/project/ui_patterns", - "keywords": [ - "drupal", - "ui", - "web" - ], - "support": { - "source": "https://git.drupalcode.org/project/ui_patterns" - } - }, - { - "name": "drupal/userprotect", - "version": "1.1.0", - "version_normalized": "1.1.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/userprotect.git", - "reference": "8.x-1.1" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/userprotect-8.x-1.1.zip", - "reference": "8.x-1.1", - "shasum": "485e240317a7fc1c0523b082f333c983ea3ca639" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "require-dev": { - "drupal/role_delegation": "^1.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.1", - "datestamp": "1578341583", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "MegaChriz", - "homepage": "https://www.drupal.org/user/654114" - }, - { - "name": "karschsp", - "homepage": "https://www.drupal.org/user/138216" - } - ], - "description": "Allows admins to protect users from being edited or cancelled, on a per-user basis.", - "homepage": "https://www.drupal.org/project/userprotect", - "keywords": [ - "Drupal", - "User Management" - ], - "support": { - "source": "http://cgit.drupalcode.org/userprotect", - "issues": "https://www.drupal.org/project/issues/userprotect" - } - }, - { - "name": "drupal/views_bulk_operations", - "version": "2.6.0", - "version_normalized": "2.6.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/views_bulk_operations.git", - "reference": "8.x-2.6" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/views_bulk_operations-8.x-2.6.zip", - "reference": "8.x-2.6", - "shasum": "517b671adb55c3ad023032607d360dab77db9f22" - }, - "require": { - "drupal/core": "~8.5" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.6", - "datestamp": "1580924749", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "drush": { - "services": { - "drush.services.yml": "^9" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Marcin Grabias", - "homepage": "https://www.drupal.org/u/graber" - }, - { - "name": "Jon Pugh", - "homepage": "https://www.drupal.org/user/17028" - }, - { - "name": "bojanz", - "homepage": "https://www.drupal.org/user/86106" - }, - { - "name": "infojunkie", - "homepage": "https://www.drupal.org/user/48424" - }, - { - "name": "joelpittet", - "homepage": "https://www.drupal.org/user/160302" - } - ], - "description": "Adds an ability to perform bulk operations on selected entities from view results. Provides an API to create such operations.", - "homepage": "https://www.drupal.org/project/views_bulk_operations", - "support": { - "source": "https://git.drupalcode.org/project/views_bulk_operations", - "issues": "https://www.drupal.org/project/issues/views_bulk_operations?version=8.x", - "docs": "https://www.drupal.org/docs/8/modules/views-bulk-operations-vbo" - } - }, - { - "name": "drupal/views_slideshow", - "version": "4.8.0", - "version_normalized": "4.8.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/views_slideshow.git", - "reference": "8.x-4.8" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/views_slideshow-8.x-4.8.zip", - "reference": "8.x-4.8", - "shasum": "88104843df5e2eaa7e70b796a80573d844583e42" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-4.8", - "datestamp": "1601309225", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Neslee Canil Pinto", - "homepage": "https://www.drupal.org/u/neslee-canil-pinto", - "role": "Maintainer" - }, - { - "name": "NickDickinsonWilde", - "homepage": "https://www.drupal.org/user/3094661" - }, - { - "name": "aaron", - "homepage": "https://www.drupal.org/user/33420" - }, - { - "name": "redndahead", - "homepage": "https://www.drupal.org/user/160320" - }, - { - "name": "vbouchet", - "homepage": "https://www.drupal.org/user/1671428" - } - ], - "description": "Describes relationships between entities.", - "homepage": "https://www.drupal.org/project/views_slideshow", - "support": { - "source": "https://git.drupalcode.org/project/views_slideshow", - "issues": "https://www.drupal.org/project/issues/views_slideshow", - "irc": "irc://irc.freenode.org/drupal-contribute" - } - }, - { - "name": "drupal/viewsreference", - "version": "1.7.0", - "version_normalized": "1.7.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/viewsreference.git", - "reference": "8.x-1.7" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/viewsreference-8.x-1.7.zip", - "reference": "8.x-1.7", - "shasum": "6656c717cd78bee180fcc075d28db016fa7775d9" - }, - "require": { - "drupal/core": "^8.6|^9.0", - "php": "^5.5|^7.0", - "squizlabs/php_codesniffer": "*" - }, - "conflict": { - "drupal/viewsreferennce": "*" - }, - "require-dev": { - "composer/installers": "^1.2", - "drupal-composer/drupal-scaffold": "^2.5", - "drupal/coder": "^8.2", - "webflo/drupal-core-require-dev": "~8.5" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.7", - "datestamp": "1610571201", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "installer-paths": { - "../build/core": [ - "type:drupal-core" - ], - "../build/modules/contrib/{$name}": [ - "type:drupal-module" + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-php80" + }, + { + "name": "symfony/polyfill-util", + "version": "v1.17.0", + "version_normalized": "1.17.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-util.git", + "reference": "4afb4110fc037752cf0ce9869f9ab8162c4e20d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/4afb4110fc037752cf0ce9869f9ab8162c4e20d7", + "reference": "4afb4110fc037752cf0ce9869f9ab8162c4e20d7", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "time": "2020-05-12T16:14:59+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Util\\": "" + } + }, + "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 utilities for portability of PHP codes", + "homepage": "https://symfony.com", + "keywords": [ + "compat", + "compatibility", + "polyfill", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-util" + }, + { + "name": "symfony/process", + "version": "v3.4.41", + "version_normalized": "3.4.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "8a895f0c92a7c4b10db95139bcff71bdf66d4d21" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/8a895f0c92a7c4b10db95139bcff71bdf66d4d21", + "reference": "8a895f0c92a7c4b10db95139bcff71bdf66d4d21", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "time": "2020-05-23T17:05:51+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Process Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/process" + }, + { + "name": "symfony/psr-http-message-bridge", + "version": "v1.1.2", + "version_normalized": "1.1.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/psr-http-message-bridge.git", + "reference": "a33352af16f78a5ff4f9d90811536abf210df12b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/a33352af16f78a5ff4f9d90811536abf210df12b", + "reference": "a33352af16f78a5ff4f9d90811536abf210df12b", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0", + "psr/http-message": "^1.0", + "symfony/http-foundation": "^2.3.42 || ^3.4 || ^4.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^3.4 || ^4.0" + }, + "suggest": { + "nyholm/psr7": "For a super lightweight PSR-7/17 implementation" + }, + "time": "2019-04-03T17:09:40+00:00", + "type": "symfony-bridge", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\PsrHttpMessage\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "PSR HTTP message bridge", + "homepage": "http://symfony.com", + "keywords": [ + "http", + "http-message", + "psr-17", + "psr-7" + ], + "install-path": "../symfony/psr-http-message-bridge" + }, + { + "name": "symfony/routing", + "version": "v3.4.41", + "version_normalized": "3.4.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "e0d43b6f9417ad59ecaa8e2f799b79eef417387f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/e0d43b6f9417ad59ecaa8e2f799b79eef417387f", + "reference": "e0d43b6f9417ad59ecaa8e2f799b79eef417387f", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "conflict": { + "symfony/config": "<3.3.1", + "symfony/dependency-injection": "<3.3", + "symfony/yaml": "<3.4" + }, + "require-dev": { + "doctrine/annotations": "~1.0", + "psr/log": "~1.0", + "symfony/config": "^3.3.1|~4.0", + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/http-foundation": "~2.8|~3.0|~4.0", + "symfony/yaml": "~3.4|~4.0" + }, + "suggest": { + "doctrine/annotations": "For using the annotation loader", + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "time": "2020-05-30T19:50:06+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "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 Routing Component", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/routing" + }, + { + "name": "symfony/serializer", + "version": "v3.4.41", + "version_normalized": "3.4.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/serializer.git", + "reference": "0db90db012b1b0a04fbb2d64ae9160871cad9d4f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/serializer/zipball/0db90db012b1b0a04fbb2d64ae9160871cad9d4f", + "reference": "0db90db012b1b0a04fbb2d64ae9160871cad9d4f", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "phpdocumentor/type-resolver": "<0.2.1", + "symfony/dependency-injection": "<3.2", + "symfony/property-access": ">=3.0,<3.0.4|>=2.8,<2.8.4", + "symfony/property-info": "<3.1", + "symfony/yaml": "<3.4" + }, + "require-dev": { + "doctrine/annotations": "~1.0", + "doctrine/cache": "~1.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0", + "symfony/cache": "~3.1|~4.0", + "symfony/config": "~2.8|~3.0|~4.0", + "symfony/dependency-injection": "~3.2|~4.0", + "symfony/http-foundation": "~2.8|~3.0|~4.0", + "symfony/property-access": "~2.8|~3.0|~4.0", + "symfony/property-info": "^3.4.13|~4.0", + "symfony/yaml": "~3.4|~4.0" + }, + "suggest": { + "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.", + "doctrine/cache": "For using the default cached annotation reader and metadata cache.", + "psr/cache-implementation": "For using the metadata cache.", + "symfony/config": "For using the XML mapping loader.", + "symfony/http-foundation": "For using a MIME type guesser within the DataUriNormalizer.", + "symfony/property-access": "For using the ObjectNormalizer.", + "symfony/property-info": "To deserialize relations.", + "symfony/yaml": "For using the default YAML mapping loader." + }, + "time": "2020-05-30T18:58:05+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Serializer\\": "" + }, + "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 Serializer Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/serializer" + }, + { + "name": "symfony/translation", + "version": "v3.4.41", + "version_normalized": "3.4.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "b0cd62ef0ff7ec31b67d78d7fc818e2bda4e844f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/b0cd62ef0ff7ec31b67d78d7fc818e2bda4e844f", + "reference": "b0cd62ef0ff7ec31b67d78d7fc818e2bda4e844f", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/config": "<2.8", + "symfony/dependency-injection": "<3.4", + "symfony/yaml": "<3.4" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~2.8|~3.0|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/finder": "~2.8|~3.0|~4.0", + "symfony/http-kernel": "~3.4|~4.0", + "symfony/intl": "^2.8.18|^3.2.5|~4.0", + "symfony/var-dumper": "~3.4|~4.0", + "symfony/yaml": "~3.4|~4.0" + }, + "suggest": { + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "time": "2020-05-30T18:58:05+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "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", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/translation" + }, + { + "name": "symfony/validator", + "version": "v3.4.41", + "version_normalized": "3.4.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/validator.git", + "reference": "5fb88120a11a75e17b602103a893dd8b27804529" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/validator/zipball/5fb88120a11a75e17b602103a893dd8b27804529", + "reference": "5fb88120a11a75e17b602103a893dd8b27804529", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation": "~2.8|~3.0|~4.0" + }, + "conflict": { + "doctrine/lexer": "<1.0.2", + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", + "symfony/dependency-injection": "<3.3", + "symfony/http-kernel": "<3.3.5", + "symfony/yaml": "<3.4" + }, + "require-dev": { + "doctrine/annotations": "~1.7", + "doctrine/cache": "~1.0", + "egulias/email-validator": "^2.1.10", + "symfony/cache": "~3.1|~4.0", + "symfony/config": "~2.8|~3.0|~4.0", + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/http-foundation": "~2.8|~3.0|~4.0", + "symfony/http-kernel": "^3.3.5|~4.0", + "symfony/intl": "^2.8.18|^3.2.5|~4.0", + "symfony/property-access": "~2.8|~3.0|~4.0", + "symfony/var-dumper": "~3.3|~4.0", + "symfony/yaml": "~3.4|~4.0" + }, + "suggest": { + "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.", + "doctrine/cache": "For using the default cached annotation reader and metadata cache.", + "egulias/email-validator": "Strict (RFC compliant) email validation", + "psr/cache-implementation": "For using the metadata cache.", + "symfony/config": "", + "symfony/expression-language": "For using the Expression validator", + "symfony/http-foundation": "", + "symfony/intl": "", + "symfony/property-access": "For accessing properties within comparison constraints", + "symfony/yaml": "" + }, + "time": "2020-05-30T18:43:38+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Validator\\": "" + }, + "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 Validator Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/validator" + }, + { + "name": "symfony/var-dumper", + "version": "v4.4.20", + "version_normalized": "4.4.20.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "a1eab2f69906dc83c5ddba4632180260d0ab4f7f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/a1eab2f69906dc83c5ddba4632180260d0ab4f7f", + "reference": "a1eab2f69906dc83c5ddba4632180260d0ab4f7f", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php72": "~1.5", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", + "symfony/console": "<3.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^3.4|^4.0|^5.0", + "symfony/process": "^4.4|^5.0", + "twig/twig": "^1.43|^2.13|^3.0.4" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "time": "2021-01-27T09:09:26+00:00", + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "installation-source": "dist", + "autoload": { + "files": [ + "Resources/functions/dump.php" ], - "../build/themes/contrib/{$name}": [ - "type:drupal-theme" + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "New Zeal", - "homepage": "https://www.drupal.org/user/93571" - }, - { - "name": "jasonawant", - "homepage": "https://www.drupal.org/user/589890" - }, - { - "name": "joekers", - "homepage": "https://www.drupal.org/user/2229066" - }, - { - "name": "seanB", - "homepage": "https://www.drupal.org/user/545912" - } - ], - "description": "Views Reference", - "homepage": "http://drupal.org/project/viewsreference", - "keywords": [ - "Drupal" - ], - "support": { - "source": "http://cgit.drupalcode.org/viewsreference", - "issues": "http://drupal.org/project/issues/viewsreference" - } - }, - { - "name": "drupal/webform", - "version": "5.24.0", - "version_normalized": "5.24.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/webform.git", - "reference": "8.x-5.24" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/webform-8.x-5.24.zip", - "reference": "8.x-5.24", - "shasum": "d7e2d856e840bf7b7ff0b06f80be1f492fe65b7b" - }, - "require": { - "drupal/core": "^8.8" - }, - "require-dev": { - "drupal/address": "~1.0", - "drupal/bootstrap": "~3.0", - "drupal/captcha": "~1.0", - "drupal/chosen": "~2.0", - "drupal/clientside_validation": "~3.0", - "drupal/clientside_validation_jquery": "*", - "drupal/devel": "~3.0", - "drupal/entity": "~1.0", - "drupal/entity_print": "~2.0", - "drupal/gnode": "*", - "drupal/group": "1.0", - "drupal/lingotek": "~3.0", - "drupal/mailsystem": "~4.0", - "drupal/paragraphs": "~1.0", - "drupal/select2": "~1.0", - "drupal/smtp": "~1.0", - "drupal/styleguide": "~1.0", - "drupal/telephone_validation": "~2.0", - "drupal/token": "~1.0", - "drupal/variationcache": "~1.0", - "drupal/webform_access": "*", - "drupal/webform_attachment": "*", - "drupal/webform_clientside_validation": "*", - "drupal/webform_devel": "*", - "drupal/webform_entity_print": "*", - "drupal/webform_group": "*", - "drupal/webform_node": "*", - "drupal/webform_options_limit": "*", - "drupal/webform_scheduled_email": "*", - "drupal/webform_share": "*", - "drupal/webform_ui": "*" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-5.24", - "datestamp": "1612453175", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "drush": { - "services": { - "drush.services.yml": "^9" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Jacob Rockowitz (jrockowitz)", - "homepage": "https://www.drupal.org/u/jrockowitz", - "role": "Maintainer" - }, - { - "name": "Alexander Trotsenko (bucefal91)", - "homepage": "https://www.drupal.org/u/bucefal91", - "role": "Co-maintainer" - }, - { - "name": "Contributors", - "homepage": "https://www.drupal.org/node/7404/committers", - "role": "Contributor" - }, - { - "name": "fenstrat", - "homepage": "https://www.drupal.org/user/362649" - }, - { - "name": "jrockowitz", - "homepage": "https://www.drupal.org/user/371407" - }, - { - "name": "podarok", - "homepage": "https://www.drupal.org/user/116002" - }, - { - "name": "quicksketch", - "homepage": "https://www.drupal.org/user/35821" - }, - { - "name": "sanchiz", - "homepage": "https://www.drupal.org/user/1671246" - }, - { - "name": "tedbow", - "homepage": "https://www.drupal.org/user/240860" - }, - { - "name": "torotil", - "homepage": "https://www.drupal.org/user/865256" - } - ], - "description": "Enables the creation of webforms and questionnaires.", - "homepage": "https://drupal.org/project/webform", - "support": { - "source": "https://git.drupalcode.org/project/webform", - "issues": "https://www.drupal.org/project/issues/webform?version=8.x", - "docs": "https://www.drupal.org/docs/8/modules/webform", - "forum": "https://drupal.stackexchange.com/questions/tagged/webform" - } - }, - { - "name": "drupal/webform_analysis", - "version": "1.0.0-beta7", - "version_normalized": "1.0.0.0-beta7", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/webform_analysis.git", - "reference": "8.x-1.0-beta7" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/webform_analysis-8.x-1.0-beta7.zip", - "reference": "8.x-1.0-beta7", - "shasum": "218ee42c0d3d5c62bb29e0e68134188dc2a16c85" - }, - "require": { - "drupal/core": "~8.0", - "drupal/webform": "*" - }, - "require-dev": { - "drupal/webform_node": "*" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.0-beta7", - "datestamp": "1540735084", - "security-coverage": { - "status": "not-covered", - "message": "Project has not opted into security advisory coverage!" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "lbaran", - "homepage": "https://www.drupal.org/user/3368098" - } - ], - "description": "Enables to obtain statistics on the results of form submissions.", - "homepage": "https://www.drupal.org/project/webform_analysis", - "support": { - "source": "https://git.drupalcode.org/project/webform_analysis" - } - }, - { - "name": "drupal/webform_invitation", - "version": "1.1.0", - "version_normalized": "1.1.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/webform_invitation.git", - "reference": "8.x-1.1" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/webform_invitation-8.x-1.1.zip", - "reference": "8.x-1.1", - "shasum": "56d01bef036ee6b0503060167e36d49b07278027" - }, - "require": { - "drupal/core": "^8 || ^9", - "drupal/token": "~1.0", - "drupal/webform": "~5.0", - "drupal/webform_ui": "^5.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.1", - "datestamp": "1573305184", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Christian Paul Bruhn (paul-broon)", - "homepage": "https://www.drupal.org/u/paul-broon", - "role": "Maintainer" - }, - { - "name": "Vit Hovezak (kyberman)", - "homepage": "https://www.drupal.org/u/kyberman", - "role": "Co-maintainer" - } - ], - "description": "Provides random strings that can be used as codes for accessing a specific webform.", - "homepage": "https://www.drupal.org/project/webform_invitation", - "support": { - "source": "http://cgit.drupalcode.org/webform_invitation", - "issues": "https://www.drupal.org/project/issues/webform_invitation", - "irc": "irc://irc.freenode.org/drupal-contribute" - } - }, - { - "name": "drupal/webform_ui", - "version": "5.24.0", - "version_normalized": "5.24.0.0", - "require": { - "drupal/core": "^8.8", - "drupal/webform": "*" - }, - "type": "metapackage", - "extra": { - "drupal": { - "version": "8.x-5.24", - "datestamp": "1612453175", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "DanChadwick", - "homepage": "https://www.drupal.org/user/504278" - }, - { - "name": "Liam Morland", - "homepage": "https://www.drupal.org/user/493050" - }, - { - "name": "bucefal91", - "homepage": "https://www.drupal.org/user/504128" - }, - { - "name": "fenstrat", - "homepage": "https://www.drupal.org/user/362649" - }, - { - "name": "jrockowitz", - "homepage": "https://www.drupal.org/user/371407" - }, - { - "name": "podarok", - "homepage": "https://www.drupal.org/user/116002" - }, - { - "name": "quicksketch", - "homepage": "https://www.drupal.org/user/35821" - }, - { - "name": "sanchiz", - "homepage": "https://www.drupal.org/user/1671246" - }, - { - "name": "tedbow", - "homepage": "https://www.drupal.org/user/240860" - }, - { - "name": "torotil", - "homepage": "https://www.drupal.org/user/865256" - } - ], - "description": "Provides a user interface for building and maintaining webforms.", - "homepage": "https://www.drupal.org/project/webform", - "support": { - "source": "https://git.drupalcode.org/project/webform" - } - }, - { - "name": "drupal/workbench", - "version": "1.3.0", - "version_normalized": "1.3.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/workbench.git", - "reference": "8.x-1.3" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/workbench-8.x-1.3.zip", - "reference": "8.x-1.3", - "shasum": "643d5f27503d7fceda8673812ca9a3bc25ed53e5" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.3", - "datestamp": "1590419810", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Dave Reid", - "homepage": "https://www.drupal.org/user/53892" - }, - { - "name": "agentrickard", - "homepage": "https://www.drupal.org/user/20975" - }, - { - "name": "bbinkovitz", - "homepage": "https://www.drupal.org/user/161263" - }, - { - "name": "becw", - "homepage": "https://www.drupal.org/user/81067" - }, - { - "name": "caroltron", - "homepage": "https://www.drupal.org/user/171342" - }, - { - "name": "robeano", - "homepage": "https://www.drupal.org/user/67660" - }, - { - "name": "stevector", - "homepage": "https://www.drupal.org/user/179805" - } - ], - "description": "Provides convenient dashboards and shortcuts for editors.", - "homepage": "https://www.drupal.org/project/workbench", - "support": { - "source": "https://git.drupalcode.org/project/workbench" - } - }, - { - "name": "drupal/workbench_access", - "version": "1.0.0-beta4", - "version_normalized": "1.0.0.0-beta4", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/workbench_access.git", - "reference": "8.x-1.0-beta4" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/workbench_access-8.x-1.0-beta4.zip", - "reference": "8.x-1.0-beta4", - "shasum": "8d81c3daef91d89ecb3c0e3823ee0144b37889a8" - }, - "require": { - "drupal/core": "^8.7.7 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.0-beta4", - "datestamp": "1591119383", - "security-coverage": { - "status": "not-covered", - "message": "Beta releases are not covered by Drupal security advisories." - } - }, - "drush": { - "services": { - "drush.services.yml": "^9 || ^10" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Dave Reid", - "homepage": "https://www.drupal.org/user/53892" - }, - { - "name": "agentrickard", - "homepage": "https://www.drupal.org/user/20975" - }, - { - "name": "becw", - "homepage": "https://www.drupal.org/user/81067" - }, - { - "name": "robeano", - "homepage": "https://www.drupal.org/user/67660" - }, - { - "name": "stevector", - "homepage": "https://www.drupal.org/user/179805" - } - ], - "description": "Hierarchical access control for content.", - "homepage": "https://www.drupal.org/project/workbench_access", - "support": { - "source": "https://git.drupalcode.org/project/workbench_access" - } - }, - { - "name": "drupal/workbench_moderation", - "version": "1.6.0", - "version_normalized": "1.6.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/workbench_moderation.git", - "reference": "8.x-1.6" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/workbench_moderation-8.x-1.6.zip", - "reference": "8.x-1.6", - "shasum": "4321fb474e6fe23a8c737e8df8337cb1baccf0d0" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "require-dev": { - "drupal/publishing_dropbutton": "~1.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.6", - "datestamp": "1591862577", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Crell", - "homepage": "https://www.drupal.org/user/26398" - }, - { - "name": "Dave Reid", - "homepage": "https://www.drupal.org/user/53892" - }, - { - "name": "agentrickard", - "homepage": "https://www.drupal.org/user/20975" - }, - { - "name": "becw", - "homepage": "https://www.drupal.org/user/81067" - }, - { - "name": "caroltron", - "homepage": "https://www.drupal.org/user/171342" - }, - { - "name": "colan", - "homepage": "https://www.drupal.org/user/58704" - }, - { - "name": "das-peter", - "homepage": "https://www.drupal.org/user/762870" - }, - { - "name": "josephdpurcell", - "homepage": "https://www.drupal.org/user/2944035" - }, - { - "name": "larowlan", - "homepage": "https://www.drupal.org/user/395439" - }, - { - "name": "robeano", - "homepage": "https://www.drupal.org/user/67660" - }, - { - "name": "srjosh", - "homepage": "https://www.drupal.org/user/165878" - }, - { - "name": "stevector", - "homepage": "https://www.drupal.org/user/179805" - }, - { - "name": "tedbow", - "homepage": "https://www.drupal.org/user/240860" - }, - { - "name": "timmillwood", - "homepage": "https://www.drupal.org/user/227849" - } - ], - "description": "Provides moderation states for content", - "homepage": "http://drupal.org/project/workbench_moderation", - "keywords": [ - "Drupal" - ], - "support": { - "source": "http://cgit.drupalcode.org/workbench_moderation", - "issues": "http://drupal.org/project/issues/workbench_moderation" - } - }, - { - "name": "drush/drush", - "version": "8.4.6", - "version_normalized": "8.4.6.0", - "source": { - "type": "git", - "url": "https://github.com/drush-ops/drush.git", - "reference": "4e48e11d7fe858eebe6c2fad71650c977d3f8900" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/drush-ops/drush/zipball/4e48e11d7fe858eebe6c2fad71650c977d3f8900", - "reference": "4e48e11d7fe858eebe6c2fad71650c977d3f8900", - "shasum": "" - }, - "require": { - "consolidation/annotated-command": "^2.12.0", - "consolidation/output-formatters": "~3", - "pear/console_table": "~1.3.1", - "php": ">=5.4.5", - "psr/log": "~1.0", - "psy/psysh": "~0.6", - "symfony/console": "~2.7|^3|^4.4", - "symfony/event-dispatcher": "~2.7|^3|^4.4", - "symfony/finder": "~2.7|^3|^4.4", - "symfony/process": "~2.7|^3|^4.4", - "symfony/var-dumper": "~2.7|^3|^4.4|^5", - "symfony/yaml": "~2.3|^3|^4.4", - "webflo/drupal-finder": "^1.1.0", - "webmozart/path-util": "~2" - }, - "require-dev": { - "phpunit/phpunit": "4.*", - "symfony/console": "~2.7", - "symfony/event-dispatcher": "~2.7", - "symfony/finder": "~2.7", - "symfony/process": "2.7.*", - "symfony/var-dumper": "~2.7", - "symfony/yaml": "~2.3" - }, - "suggest": { - "drush/config-extra": "Provides configuration workflow commands, such as config-merge.", - "ext-pcntl": "*" - }, - "time": "2021-02-01T15:34:47+00:00", - "bin": [ - "drush", - "drush.launcher", - "drush.php", - "drush.complete.sh" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "8.3.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-0": { - "Drush\\": "lib/", - "Consolidation\\": "lib/" - }, - "psr-4": { - "Drush\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Moshe Weitzman", - "email": "weitzman@tejasa.com" - }, - { - "name": "Owen Barton", - "email": "drupal@owenbarton.com" - }, - { - "name": "Mark Sonnabaum", - "email": "marksonnabaum@gmail.com" - }, - { - "name": "Antoine Beaupré", - "email": "anarcat@koumbit.org" - }, - { - "name": "Greg Anderson", - "email": "greg.1.anderson@greenknowe.org" - }, - { - "name": "Jonathan Araña Cruz", - "email": "jonhattan@faita.net" - }, - { - "name": "Jonathan Hedstrom", - "email": "jhedstrom@gmail.com" - }, - { - "name": "Christopher Gervais", - "email": "chris@ergonlogic.com" - }, - { - "name": "Dave Reid", - "email": "dave@davereid.net" - }, - { - "name": "Damian Lee", - "email": "damiankloip@googlemail.com" - } - ], - "description": "Drush is a command line shell and scripting interface for Drupal, a veritable Swiss Army knife designed to make life easier for those of us who spend some of our working hours hacking away at the command prompt.", - "homepage": "http://www.drush.org", - "support": { - "forum": "http://drupal.stackexchange.com/questions/tagged/drush", - "irc": "irc://irc.freenode.org/drush", - "issues": "https://github.com/drush-ops/drush/issues", - "source": "https://github.com/drush-ops/drush/tree/8.4.6" - }, - "funding": [ - { - "url": "https://github.com/weitzman", - "type": "github" - } - ] - }, - { - "name": "easyrdf/easyrdf", - "version": "0.9.1", - "version_normalized": "0.9.1.0", - "source": { - "type": "git", - "url": "https://github.com/easyrdf/easyrdf.git", - "reference": "acd09dfe0555fbcfa254291e433c45fdd4652566" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/easyrdf/easyrdf/zipball/acd09dfe0555fbcfa254291e433c45fdd4652566", - "reference": "acd09dfe0555fbcfa254291e433c45fdd4652566", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "ext-pcre": "*", - "php": ">=5.2.8" - }, - "require-dev": { - "phpunit/phpunit": "~3.5", - "sami/sami": "~1.4", - "squizlabs/php_codesniffer": "~1.4.3" - }, - "suggest": { - "ml/json-ld": "~1.0" - }, - "time": "2015-02-27T09:45:49+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-0": { - "EasyRdf_": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nicholas Humfrey", - "email": "njh@aelius.com", - "homepage": "http://www.aelius.com/njh/", - "role": "Developer" - }, - { - "name": "Alexey Zakhlestin", - "email": "indeyets@gmail.com", - "role": "Developer" - } - ], - "description": "EasyRdf is a PHP library designed to make it easy to consume and produce RDF.", - "homepage": "http://www.easyrdf.org/", - "keywords": [ - "Linked Data", - "RDF", - "Semantic Web", - "Turtle", - "rdfa", - "sparql" - ] - }, - { - "name": "egulias/email-validator", - "version": "2.1.17", - "version_normalized": "2.1.17.0", - "source": { - "type": "git", - "url": "https://github.com/egulias/EmailValidator.git", - "reference": "ade6887fd9bd74177769645ab5c474824f8a418a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ade6887fd9bd74177769645ab5c474824f8a418a", - "reference": "ade6887fd9bd74177769645ab5c474824f8a418a", - "shasum": "" - }, - "require": { - "doctrine/lexer": "^1.0.1", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.10" - }, - "require-dev": { - "dominicsayers/isemail": "^3.0.7", - "phpunit/phpunit": "^4.8.36|^7.5.15", - "satooshi/php-coveralls": "^1.0.1" - }, - "suggest": { - "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" - }, - "time": "2020-02-13T22:36:52+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Egulias\\EmailValidator\\": "EmailValidator" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Eduardo Gulias Davis" - } - ], - "description": "A library for validating emails against several RFCs", - "homepage": "https://github.com/egulias/EmailValidator", - "keywords": [ - "email", - "emailvalidation", - "emailvalidator", - "validation", - "validator" - ] - }, - { - "name": "fileeye/mimemap", - "version": "1.1.4", - "version_normalized": "1.1.4.0", - "source": { - "type": "git", - "url": "https://github.com/FileEye/MimeMap.git", - "reference": "3a0ddb71f06d8fb3f84f0a3c45348af81803b16d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FileEye/MimeMap/zipball/3a0ddb71f06d8fb3f84f0a3c45348af81803b16d", - "reference": "3a0ddb71f06d8fb3f84f0a3c45348af81803b16d", - "shasum": "" - }, - "require": { - "php": ">=5.4" - }, - "require-dev": { - "phpunit/phpunit": "<10", - "sebastian/comparator": "*", - "sebastian/diff": "*", - "squizlabs/php_codesniffer": "*", - "symfony/console": "*", - "symfony/filesystem": "*", - "symfony/var-dumper": "*", - "symfony/yaml": "*" - }, - "time": "2020-05-16T10:19:16+00:00", - "bin": [ - "bin/fileeye-mimemap" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "FileEye\\MimeMap\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "description": "A PHP library to handle MIME Content-Type fields and their related file extensions.", - "homepage": "https://github.com/FileEye/MimeMap", - "keywords": [ - "mime", - "mime-database", - "mime-parser", - "mime-type" - ], - "support": { - "issues": "https://github.com/FileEye/MimeMap/issues", - "source": "https://github.com/FileEye/MimeMap/tree/master" - } - }, - { - "name": "gettext/gettext", - "version": "v4.8.3", - "version_normalized": "4.8.3.0", - "source": { - "type": "git", - "url": "https://github.com/php-gettext/Gettext.git", - "reference": "57ff4fb16647e78e80a5909fe3c190f1c3110321" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-gettext/Gettext/zipball/57ff4fb16647e78e80a5909fe3c190f1c3110321", - "reference": "57ff4fb16647e78e80a5909fe3c190f1c3110321", - "shasum": "" - }, - "require": { - "gettext/languages": "^2.3", - "php": ">=5.4.0" - }, - "require-dev": { - "illuminate/view": "*", - "phpunit/phpunit": "^4.8|^5.7|^6.5", - "squizlabs/php_codesniffer": "^3.0", - "symfony/yaml": "~2", - "twig/extensions": "*", - "twig/twig": "^1.31|^2.0" - }, - "suggest": { - "illuminate/view": "Is necessary if you want to use the Blade extractor", - "symfony/yaml": "Is necessary if you want to use the Yaml extractor/generator", - "twig/extensions": "Is necessary if you want to use the Twig extractor", - "twig/twig": "Is necessary if you want to use the Twig extractor" - }, - "time": "2020-11-18T22:35:49+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Gettext\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Oscar Otero", - "email": "oom@oscarotero.com", - "homepage": "http://oscarotero.com", - "role": "Developer" - } - ], - "description": "PHP gettext manager", - "homepage": "https://github.com/oscarotero/Gettext", - "keywords": [ - "JS", - "gettext", - "i18n", - "mo", - "po", - "translation" - ], - "support": { - "email": "oom@oscarotero.com", - "issues": "https://github.com/oscarotero/Gettext/issues", - "source": "https://github.com/php-gettext/Gettext/tree/v4.8.3" - } - }, - { - "name": "gettext/languages", - "version": "2.6.0", - "version_normalized": "2.6.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-gettext/Languages.git", - "reference": "38ea0482f649e0802e475f0ed19fa993bcb7a618" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-gettext/Languages/zipball/38ea0482f649e0802e475f0ed19fa993bcb7a618", - "reference": "38ea0482f649e0802e475f0ed19fa993bcb7a618", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.16.0", - "phpunit/phpunit": "^4.8 || ^5.7 || ^6.5 || ^7.5 || ^8.4" - }, - "time": "2019-11-13T10:30:21+00:00", - "bin": [ - "bin/export-plural-rules" - ], - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Gettext\\Languages\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michele Locati", - "email": "mlocati@gmail.com", - "role": "Developer" - } - ], - "description": "gettext languages with plural rules", - "homepage": "https://github.com/php-gettext/Languages", - "keywords": [ - "cldr", - "i18n", - "internationalization", - "l10n", - "language", - "languages", - "localization", - "php", - "plural", - "plural rules", - "plurals", - "translate", - "translations", - "unicode" - ], - "support": { - "issues": "https://github.com/php-gettext/Languages/issues", - "source": "https://github.com/php-gettext/Languages/tree/2.6.0" - } - }, - { - "name": "guzzlehttp/guzzle", - "version": "6.5.4", - "version_normalized": "6.5.4.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a4a1b6930528a8f7ee03518e6442ec7a44155d9d", - "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.6.1", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "1.17.0" - }, - "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.1" - }, - "suggest": { - "psr/log": "Required for using the Log middleware" - }, - "time": "2020-05-25T19:35:05+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.5-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "GuzzleHttp\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" - ] - }, - { - "name": "guzzlehttp/promises", - "version": "v1.3.1", - "version_normalized": "1.3.1.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "shasum": "" - }, - "require": { - "php": ">=5.5.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0" - }, - "time": "2016-12-20T10:07:11+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ] - }, - { - "name": "guzzlehttp/psr7", - "version": "1.6.1", - "version_normalized": "1.6.1.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" - }, - "suggest": { - "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" - }, - "time": "2019-07-01T23:21:34+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Schultze", - "homepage": "https://github.com/Tobion" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ] - }, - { - "name": "laminas/laminas-diactoros", - "version": "1.8.7p2", - "version_normalized": "1.8.7.0-patch2", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-diactoros.git", - "reference": "6991c1af7c8d2c8efee81b22ba97024781824aaa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/6991c1af7c8d2c8efee81b22ba97024781824aaa", - "reference": "6991c1af7c8d2c8efee81b22ba97024781824aaa", - "shasum": "" - }, - "require": { - "laminas/laminas-zendframework-bridge": "^1.0", - "php": "^5.6 || ^7.0", - "psr/http-message": "^1.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "replace": { - "zendframework/zend-diactoros": "~1.8.7.0" - }, - "require-dev": { - "ext-dom": "*", - "ext-libxml": "*", - "laminas/laminas-coding-standard": "~1.0", - "php-http/psr7-integration-tests": "dev-master", - "phpunit/phpunit": "^5.7.16 || ^6.0.8 || ^7.2.7" - }, - "time": "2020-03-23T15:28:28+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-release-1.8": "1.8.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "src/functions/create_uploaded_file.php", - "src/functions/marshal_headers_from_sapi.php", - "src/functions/marshal_method_from_sapi.php", - "src/functions/marshal_protocol_version_from_sapi.php", - "src/functions/marshal_uri_from_sapi.php", - "src/functions/normalize_server.php", - "src/functions/normalize_uploaded_files.php", - "src/functions/parse_cookie_header.php", - "src/functions/create_uploaded_file.legacy.php", - "src/functions/marshal_headers_from_sapi.legacy.php", - "src/functions/marshal_method_from_sapi.legacy.php", - "src/functions/marshal_protocol_version_from_sapi.legacy.php", - "src/functions/marshal_uri_from_sapi.legacy.php", - "src/functions/normalize_server.legacy.php", - "src/functions/normalize_uploaded_files.legacy.php", - "src/functions/parse_cookie_header.legacy.php" - ], - "psr-4": { - "Laminas\\Diactoros\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "PSR HTTP Message implementations", - "homepage": "https://laminas.dev", - "keywords": [ - "http", - "laminas", - "psr", - "psr-7" - ] - }, - { - "name": "laminas/laminas-escaper", - "version": "2.6.1", - "version_normalized": "2.6.1.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-escaper.git", - "reference": "25f2a053eadfa92ddacb609dcbbc39362610da70" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/25f2a053eadfa92ddacb609dcbbc39362610da70", - "reference": "25f2a053eadfa92ddacb609dcbbc39362610da70", - "shasum": "" - }, - "require": { - "laminas/laminas-zendframework-bridge": "^1.0", - "php": "^5.6 || ^7.0" - }, - "replace": { - "zendframework/zend-escaper": "self.version" - }, - "require-dev": { - "laminas/laminas-coding-standard": "~1.0.0", - "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2" - }, - "time": "2019-12-31T16:43:30+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.6.x-dev", - "dev-develop": "2.7.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Laminas\\Escaper\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs", - "homepage": "https://laminas.dev", - "keywords": [ - "escaper", - "laminas" - ] - }, - { - "name": "laminas/laminas-feed", - "version": "2.12.2", - "version_normalized": "2.12.2.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-feed.git", - "reference": "8a193ac96ebcb3e16b6ee754ac2a889eefacb654" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-feed/zipball/8a193ac96ebcb3e16b6ee754ac2a889eefacb654", - "reference": "8a193ac96ebcb3e16b6ee754ac2a889eefacb654", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "laminas/laminas-escaper": "^2.5.2", - "laminas/laminas-stdlib": "^3.2.1", - "laminas/laminas-zendframework-bridge": "^1.0", - "php": "^5.6 || ^7.0" - }, - "replace": { - "zendframework/zend-feed": "^2.12.0" - }, - "require-dev": { - "laminas/laminas-cache": "^2.7.2", - "laminas/laminas-coding-standard": "~1.0.0", - "laminas/laminas-db": "^2.8.2", - "laminas/laminas-http": "^2.7", - "laminas/laminas-servicemanager": "^2.7.8 || ^3.3", - "laminas/laminas-validator": "^2.10.1", - "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.20", - "psr/http-message": "^1.0.1" - }, - "suggest": { - "laminas/laminas-cache": "Laminas\\Cache component, for optionally caching feeds between requests", - "laminas/laminas-db": "Laminas\\Db component, for use with PubSubHubbub", - "laminas/laminas-http": "Laminas\\Http for PubSubHubbub, and optionally for use with Laminas\\Feed\\Reader", - "laminas/laminas-servicemanager": "Laminas\\ServiceManager component, for easily extending ExtensionManager implementations", - "laminas/laminas-validator": "Laminas\\Validator component, for validating email addresses used in Atom feeds and entries when using the Writer subcomponent", - "psr/http-message": "PSR-7 ^1.0.1, if you wish to use Laminas\\Feed\\Reader\\Http\\Psr7ResponseDecorator" - }, - "time": "2020-03-29T12:36:29+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.12.x-dev", - "dev-develop": "2.13.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Laminas\\Feed\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "provides functionality for consuming RSS and Atom feeds", - "homepage": "https://laminas.dev", - "keywords": [ - "feed", - "laminas" - ] - }, - { - "name": "laminas/laminas-stdlib", - "version": "3.2.1", - "version_normalized": "3.2.1.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-stdlib.git", - "reference": "2b18347625a2f06a1a485acfbc870f699dbe51c6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/2b18347625a2f06a1a485acfbc870f699dbe51c6", - "reference": "2b18347625a2f06a1a485acfbc870f699dbe51c6", - "shasum": "" - }, - "require": { - "laminas/laminas-zendframework-bridge": "^1.0", - "php": "^5.6 || ^7.0" - }, - "replace": { - "zendframework/zend-stdlib": "self.version" - }, - "require-dev": { - "laminas/laminas-coding-standard": "~1.0.0", - "phpbench/phpbench": "^0.13", - "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2" - }, - "time": "2019-12-31T17:51:15+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2.x-dev", - "dev-develop": "3.3.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Laminas\\Stdlib\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "SPL extensions, array utilities, error handlers, and more", - "homepage": "https://laminas.dev", - "keywords": [ - "laminas", - "stdlib" - ] - }, - { - "name": "laminas/laminas-zendframework-bridge", - "version": "1.0.4", - "version_normalized": "1.0.4.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-zendframework-bridge.git", - "reference": "fcd87520e4943d968557803919523772475e8ea3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/fcd87520e4943d968557803919523772475e8ea3", - "reference": "fcd87520e4943d968557803919523772475e8ea3", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1", - "squizlabs/php_codesniffer": "^3.5" - }, - "time": "2020-05-20T16:45:56+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev", - "dev-develop": "1.1.x-dev" - }, - "laminas": { - "module": "Laminas\\ZendFrameworkBridge" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "src/autoload.php" - ], - "psr-4": { - "Laminas\\ZendFrameworkBridge\\": "src//" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Alias legacy ZF class names to Laminas Project equivalents.", - "keywords": [ - "ZendFramework", - "autoloading", - "laminas", - "zf" - ], - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ] - }, - { - "name": "lsolesen/pel", - "version": "0.9.6", - "version_normalized": "0.9.6.0", - "source": { - "type": "git", - "url": "https://github.com/lsolesen/pel.git", - "reference": "c9e3919f5db3b85c3c422d4f8d448dbcb2a87a23" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/lsolesen/pel/zipball/c9e3919f5db3b85c3c422d4f8d448dbcb2a87a23", - "reference": "c9e3919f5db3b85c3c422d4f8d448dbcb2a87a23", - "shasum": "" - }, - "require": { - "php": ">=5.0.0" - }, - "require-dev": { - "ext-gd": "*", - "phpunit/phpunit": "5.7.*", - "satooshi/php-coveralls": "1.0.*", - "squizlabs/php_codesniffer": "3.0.0RC3" - }, - "time": "2017-02-03T11:58:58+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "lsolesen\\pel\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0" - ], - "authors": [ - { - "name": "Lars Olesen", - "email": "lars@intraface.dk", - "homepage": "http://intraface.dk", - "role": "Developer" - }, - { - "name": "Martin Geisler", - "email": "martin@geisler.net", - "homepage": "http://geisler.net", - "role": "Developer" - } - ], - "description": "PHP Exif Library. A library for reading and writing Exif headers in JPEG and TIFF images using PHP.", - "homepage": "http://lsolesen.github.com/pel/", - "keywords": [ - "exif", - "image" - ], - "support": { - "issues": "https://github.com/lsolesen/pel/issues", - "source": "https://github.com/lsolesen/pel/tree/master" - } - }, - { - "name": "masterminds/html5", - "version": "2.3.0", - "version_normalized": "2.3.0.0", - "source": { - "type": "git", - "url": "https://github.com/Masterminds/html5-php.git", - "reference": "2c37c6c520b995b761674de3be8455a381679067" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/2c37c6c520b995b761674de3be8455a381679067", - "reference": "2c37c6c520b995b761674de3be8455a381679067", - "shasum": "" - }, - "require": { - "ext-libxml": "*", - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "4.*", - "sami/sami": "~2.0", - "satooshi/php-coveralls": "1.0.*" - }, - "time": "2017-09-04T12:26:28+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Masterminds\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Matt Butcher", - "email": "technosophos@gmail.com" - }, - { - "name": "Asmir Mustafic", - "email": "goetas@gmail.com" - }, - { - "name": "Matt Farina", - "email": "matt@mattfarina.com" - } - ], - "description": "An HTML5 parser and serializer.", - "homepage": "http://masterminds.github.io/html5-php", - "keywords": [ - "HTML5", - "dom", - "html", - "parser", - "querypath", - "serializer", - "xml" - ] - }, - { - "name": "nikic/php-parser", - "version": "v4.10.4", - "version_normalized": "4.10.4.0", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e", - "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=7.0" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" - }, - "time": "2020-12-20T10:01:03+00:00", - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.9-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.4" - } - }, - { - "name": "paragonie/random_compat", - "version": "v9.99.99", - "version_normalized": "9.99.99.0", - "source": { - "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "shasum": "" - }, - "require": { - "php": "^7" - }, - "require-dev": { - "phpunit/phpunit": "4.*|5.*", - "vimeo/psalm": "^1" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." - }, - "time": "2018-07-02T15:55:56+00:00", - "type": "library", - "installation-source": "dist", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" - ] - }, - { - "name": "pear/archive_tar", - "version": "1.4.12", - "version_normalized": "1.4.12.0", - "source": { - "type": "git", - "url": "https://github.com/pear/Archive_Tar.git", - "reference": "19bb8e95490d3e3ad92fcac95500ca80bdcc7495" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/19bb8e95490d3e3ad92fcac95500ca80bdcc7495", - "reference": "19bb8e95490d3e3ad92fcac95500ca80bdcc7495", - "shasum": "" - }, - "require": { - "pear/pear-core-minimal": "^1.10.0alpha2", - "php": ">=5.2.0" - }, - "require-dev": { - "phpunit/phpunit": "*" - }, - "suggest": { - "ext-bz2": "Bz2 compression support.", - "ext-xz": "Lzma2 compression support.", - "ext-zlib": "Gzip compression support." - }, - "time": "2021-01-18T19:32:54+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-0": { - "Archive_Tar": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "./" - ], - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Vincent Blavet", - "email": "vincent@phpconcept.net" - }, - { - "name": "Greg Beaver", - "email": "greg@chiaraquartet.net" - }, - { - "name": "Michiel Rook", - "email": "mrook@php.net" - } - ], - "description": "Tar file management class with compression support (gzip, bzip2, lzma2)", - "homepage": "https://github.com/pear/Archive_Tar", - "keywords": [ - "archive", - "tar" - ], - "funding": [ - { - "url": "https://github.com/mrook", - "type": "github" - }, - { - "url": "https://www.patreon.com/michielrook", - "type": "patreon" - } - ] - }, - { - "name": "pear/console_getopt", - "version": "v1.4.3", - "version_normalized": "1.4.3.0", - "source": { - "type": "git", - "url": "https://github.com/pear/Console_Getopt.git", - "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/a41f8d3e668987609178c7c4a9fe48fecac53fa0", - "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0", - "shasum": "" - }, - "time": "2019-11-20T18:27:48+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-0": { - "Console": "./" - } - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "./" - ], - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Andrei Zmievski", - "email": "andrei@php.net", - "role": "Lead" - }, - { - "name": "Stig Bakken", - "email": "stig@php.net", - "role": "Developer" - }, - { - "name": "Greg Beaver", - "email": "cellog@php.net", - "role": "Helper" - } - ], - "description": "More info available on: http://pear.php.net/package/Console_Getopt" - }, - { - "name": "pear/console_table", - "version": "v1.3.1", - "version_normalized": "1.3.1.0", - "source": { - "type": "git", - "url": "https://github.com/pear/Console_Table.git", - "reference": "1930c11897ca61fd24b95f2f785e99e0f36dcdea" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pear/Console_Table/zipball/1930c11897ca61fd24b95f2f785e99e0f36dcdea", - "reference": "1930c11897ca61fd24b95f2f785e99e0f36dcdea", - "shasum": "" - }, - "require": { - "php": ">=5.2.0" - }, - "suggest": { - "pear/Console_Color2": ">=0.1.2" - }, - "time": "2018-01-25T20:47:17+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "Table.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Jan Schneider", - "homepage": "http://pear.php.net/user/yunosh" - }, - { - "name": "Tal Peer", - "homepage": "http://pear.php.net/user/tal" - }, - { - "name": "Xavier Noguer", - "homepage": "http://pear.php.net/user/xnoguer" - }, - { - "name": "Richard Heyes", - "homepage": "http://pear.php.net/user/richard" - } - ], - "description": "Library that makes it easy to build console style tables.", - "homepage": "http://pear.php.net/package/Console_Table/", - "keywords": [ - "console" - ], - "support": { - "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Console_Table", - "source": "https://github.com/pear/Console_Table" - } - }, - { - "name": "pear/pear-core-minimal", - "version": "v1.10.10", - "version_normalized": "1.10.10.0", - "source": { - "type": "git", - "url": "https://github.com/pear/pear-core-minimal.git", - "reference": "625a3c429d9b2c1546438679074cac1b089116a7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/625a3c429d9b2c1546438679074cac1b089116a7", - "reference": "625a3c429d9b2c1546438679074cac1b089116a7", - "shasum": "" - }, - "require": { - "pear/console_getopt": "~1.4", - "pear/pear_exception": "~1.0" - }, - "replace": { - "rsky/pear-core-min": "self.version" - }, - "time": "2019-11-19T19:00:24+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-0": { - "": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "src/" - ], - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Christian Weiske", - "email": "cweiske@php.net", - "role": "Lead" - } - ], - "description": "Minimal set of PEAR core files to be used as composer dependency" - }, - { - "name": "pear/pear_exception", - "version": "v1.0.1", - "version_normalized": "1.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/pear/PEAR_Exception.git", - "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7", - "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7", - "shasum": "" - }, - "require": { - "php": ">=4.4.0" - }, - "require-dev": { - "phpunit/phpunit": "*" - }, - "time": "2019-12-10T10:24:42+00:00", - "type": "class", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "PEAR/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "." - ], - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Helgi Thormar", - "email": "dufuz@php.net" - }, - { - "name": "Greg Beaver", - "email": "cellog@php.net" - } - ], - "description": "The PEAR Exception base class.", - "homepage": "https://github.com/pear/PEAR_Exception", - "keywords": [ - "exception" - ] - }, - { - "name": "phenx/php-font-lib", - "version": "0.5.2", - "version_normalized": "0.5.2.0", - "source": { - "type": "git", - "url": "https://github.com/PhenX/php-font-lib.git", - "reference": "ca6ad461f032145fff5971b5985e5af9e7fa88d8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PhenX/php-font-lib/zipball/ca6ad461f032145fff5971b5985e5af9e7fa88d8", - "reference": "ca6ad461f032145fff5971b5985e5af9e7fa88d8", - "shasum": "" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5 || ^6 || ^7" - }, - "time": "2020-03-08T15:31:32+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "FontLib\\": "src/FontLib" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0" - ], - "authors": [ - { - "name": "Fabien Ménager", - "email": "fabien.menager@gmail.com" - } - ], - "description": "A library to read, parse, export and make subsets of different types of font files.", - "homepage": "https://github.com/PhenX/php-font-lib", - "support": { - "issues": "https://github.com/PhenX/php-font-lib/issues", - "source": "https://github.com/PhenX/php-font-lib/tree/0.5.2" - } - }, - { - "name": "phenx/php-svg-lib", - "version": "v0.3.3", - "version_normalized": "0.3.3.0", - "source": { - "type": "git", - "url": "https://github.com/PhenX/php-svg-lib.git", - "reference": "5fa61b65e612ce1ae15f69b3d223cb14ecc60e32" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PhenX/php-svg-lib/zipball/5fa61b65e612ce1ae15f69b3d223cb14ecc60e32", - "reference": "5fa61b65e612ce1ae15f69b3d223cb14ecc60e32", - "shasum": "" - }, - "require": { - "sabberworm/php-css-parser": "^8.3" - }, - "require-dev": { - "phpunit/phpunit": "^5.5|^6.5" - }, - "time": "2019-09-11T20:02:13+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Svg\\": "src/Svg" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0" - ], - "authors": [ - { - "name": "Fabien Ménager", - "email": "fabien.menager@gmail.com" - } - ], - "description": "A library to read, parse and export to PDF SVG files.", - "homepage": "https://github.com/PhenX/php-svg-lib", - "support": { - "issues": "https://github.com/PhenX/php-svg-lib/issues", - "source": "https://github.com/PhenX/php-svg-lib/tree/master" - } - }, - { - "name": "phpfastcache/riak-client", - "version": "3.4.3", - "version_normalized": "3.4.3.0", - "source": { - "type": "git", - "url": "https://github.com/PHPSocialNetwork/riak-php-client.git", - "reference": "d771f75d16196006604a30bb15adc1c6a9b0fcc9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHPSocialNetwork/riak-php-client/zipball/d771f75d16196006604a30bb15adc1c6a9b0fcc9", - "reference": "d771f75d16196006604a30bb15adc1c6a9b0fcc9", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "ext-json": "*", - "php": ">=5.4" - }, - "conflict": { - "basho/riak": "*" - }, - "require-dev": { - "apigen/apigen": "4.1.*", - "phpunit/phpunit": "4.8.*" - }, - "time": "2017-11-23T21:33:15+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Basho\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Georges.L", - "email": "contact@geolim4.com", - "homepage": "https://github.com/Geolim4", - "role": "Maintainer" - }, - { - "name": "Christopher Mancini", - "email": "cmancini@basho.com", - "homepage": "https://github.com/christophermancini", - "role": "Former Lead Developer" - }, - { - "name": "Alex Moore", - "email": "amoore@basho.com", - "homepage": "https://github.com/alexmoore", - "role": "Former Developer" - } - ], - "description": "Riak client for PHP (Fork of the official basho/riak due to maintainer significant inactivity)", - "homepage": "https://github.com/PHPSocialNetwork/riak-php-client", - "keywords": [ - "basho", - "client", - "crdt", - "data", - "database", - "datatype", - "driver", - "kv", - "nosql", - "riak" - ], - "support": { - "issues": "https://github.com/PHPSocialNetwork/riak-php-client/issues", - "source": "https://github.com/PHPSocialNetwork/riak-php-client/tree/develop" - } - }, - { - "name": "phpmailer/phpmailer", - "version": "v6.2.0", - "version_normalized": "6.2.0.0", - "source": { - "type": "git", - "url": "https://github.com/PHPMailer/PHPMailer.git", - "reference": "e38888a75c070304ca5514197d4847a59a5c853f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/e38888a75c070304ca5514197d4847a59a5c853f", - "reference": "e38888a75c070304ca5514197d4847a59a5c853f", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-filter": "*", - "ext-hash": "*", - "php": ">=5.5.0" - }, - "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "doctrine/annotations": "^1.2", - "phpcompatibility/php-compatibility": "^9.3.5", - "roave/security-advisories": "dev-latest", - "squizlabs/php_codesniffer": "^3.5.6", - "yoast/phpunit-polyfills": "^0.2.0" - }, - "suggest": { - "ext-mbstring": "Needed to send email in multibyte encoding charset", - "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", - "league/oauth2-google": "Needed for Google XOAUTH2 authentication", - "psr/log": "For optional PSR-3 debug logging", - "stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication", - "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)" - }, - "time": "2020-11-25T15:24:57+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "PHPMailer\\PHPMailer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-only" - ], - "authors": [ - { - "name": "Marcus Bointon", - "email": "phpmailer@synchromedia.co.uk" - }, - { - "name": "Jim Jagielski", - "email": "jimjag@gmail.com" - }, - { - "name": "Andy Prevost", - "email": "codeworxtech@users.sourceforge.net" - }, - { - "name": "Brent R. Matzelle" - } - ], - "description": "PHPMailer is a full-featured email creation and transfer class for PHP", - "support": { - "issues": "https://github.com/PHPMailer/PHPMailer/issues", - "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.2.0" - }, - "funding": [ - { - "url": "https://github.com/Synchro", - "type": "github" - } - ] - }, - { - "name": "psr/container", - "version": "1.0.0", - "version_normalized": "1.0.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" - }, - "time": "2017-02-14T16:28:37+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "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" - ] - }, - { - "name": "psr/http-message", - "version": "1.0.1", - "version_normalized": "1.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "time": "2016-08-06T14:39:51+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ] - }, - { - "name": "psr/log", - "version": "1.1.3", - "version_normalized": "1.1.3.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", - "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "time": "2020-03-23T09:12:05+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ] - }, - { - "name": "psy/psysh", - "version": "v0.10.6", - "version_normalized": "0.10.6.0", - "source": { - "type": "git", - "url": "https://github.com/bobthecow/psysh.git", - "reference": "6f990c19f91729de8b31e639d6e204ea59f19cf3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/6f990c19f91729de8b31e639d6e204ea59f19cf3", - "reference": "6f990c19f91729de8b31e639d6e204ea59f19cf3", - "shasum": "" - }, - "require": { - "dnoegel/php-xdg-base-dir": "0.1.*", - "ext-json": "*", - "ext-tokenizer": "*", - "nikic/php-parser": "~4.0|~3.0|~2.0|~1.3", - "php": "^8.0 || ^7.0 || ^5.5.9", - "symfony/console": "~5.0|~4.0|~3.0|^2.4.2|~2.3.10", - "symfony/var-dumper": "~5.0|~4.0|~3.0|~2.7" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.2", - "hoa/console": "3.17.*" - }, - "suggest": { - "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", - "ext-pdo-sqlite": "The doc command requires SQLite to work.", - "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", - "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.", - "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit." - }, - "time": "2021-01-18T15:53:43+00:00", - "bin": [ - "bin/psysh" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "0.10.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Psy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Justin Hileman", - "email": "justin@justinhileman.info", - "homepage": "http://justinhileman.com" - } - ], - "description": "An interactive shell for modern PHP.", - "homepage": "http://psysh.org", - "keywords": [ - "REPL", - "console", - "interactive", - "shell" - ], - "support": { - "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.10.6" - } - }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "version_normalized": "3.0.3.0", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "time": "2019-03-08T08:55:37+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders." - }, - { - "name": "robrichards/xmlseclibs", - "version": "3.1.1", - "version_normalized": "3.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/robrichards/xmlseclibs.git", - "reference": "f8f19e58f26cdb42c54b214ff8a820760292f8df" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/f8f19e58f26cdb42c54b214ff8a820760292f8df", - "reference": "f8f19e58f26cdb42c54b214ff8a820760292f8df", - "shasum": "" - }, - "require": { - "ext-openssl": "*", - "php": ">= 5.4" - }, - "time": "2020-09-05T13:00:25+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "RobRichards\\XMLSecLibs\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "A PHP library for XML Security", - "homepage": "https://github.com/robrichards/xmlseclibs", - "keywords": [ - "security", - "signature", - "xml", - "xmldsig" - ], - "support": { - "issues": "https://github.com/robrichards/xmlseclibs/issues", - "source": "https://github.com/robrichards/xmlseclibs/tree/3.1.1" - } - }, - { - "name": "sabberworm/php-css-parser", - "version": "8.3.1", - "version_normalized": "8.3.1.0", - "source": { - "type": "git", - "url": "https://github.com/sabberworm/PHP-CSS-Parser.git", - "reference": "d217848e1396ef962fb1997cf3e2421acba7f796" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/d217848e1396ef962fb1997cf3e2421acba7f796", - "reference": "d217848e1396ef962fb1997cf3e2421acba7f796", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "codacy/coverage": "^1.4", - "phpunit/phpunit": "~4.8" - }, - "time": "2020-06-01T09:10:00+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-0": { - "Sabberworm\\CSS": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Raphael Schweikert" - } - ], - "description": "Parser for CSS Files written in PHP", - "homepage": "http://www.sabberworm.com/blog/2010/6/10/php-css-parser", - "keywords": [ - "css", - "parser", - "stylesheet" - ], - "support": { - "issues": "https://github.com/sabberworm/PHP-CSS-Parser/issues", - "source": "https://github.com/sabberworm/PHP-CSS-Parser/tree/8.3.1" - } - }, - { - "name": "simplesamlphp/composer-module-installer", - "version": "v1.1.8", - "version_normalized": "1.1.8.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/composer-module-installer.git", - "reference": "45161b5406f3e9c82459d0f9a5a1dba064953cfa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/composer-module-installer/zipball/45161b5406f3e9c82459d0f9a5a1dba064953cfa", - "reference": "45161b5406f3e9c82459d0f9a5a1dba064953cfa", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.1|^2.0", - "simplesamlphp/simplesamlphp": "*" - }, - "time": "2020-08-25T19:04:33+00:00", - "type": "composer-plugin", - "extra": { - "class": "SimpleSamlPhp\\Composer\\ModuleInstallerPlugin" - }, - "installation-source": "dist", - "autoload": { - "psr-0": { - "SimpleSamlPhp\\Composer": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-only" - ], - "description": "A Composer plugin that allows installing SimpleSAMLphp modules through Composer.", - "support": { - "issues": "https://github.com/simplesamlphp/composer-module-installer/issues", - "source": "https://github.com/simplesamlphp/composer-module-installer/tree/v1.1.8" - } - }, - { - "name": "simplesamlphp/saml2", - "version": "v4.2.0", - "version_normalized": "4.2.0.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/saml2.git", - "reference": "d4038b83be50ccd64ecdc0b7c68e66d63c899d2c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/saml2/zipball/d4038b83be50ccd64ecdc0b7c68e66d63c899d2c", - "reference": "d4038b83be50ccd64ecdc0b7c68e66d63c899d2c", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-openssl": "*", - "ext-zlib": "*", - "php": ">=7.1", - "psr/log": "~1.1", - "robrichards/xmlseclibs": "^3.1.0", - "webmozart/assert": "^1.5" - }, - "require-dev": { - "mockery/mockery": "~1.2", - "phpunit/phpunit": "^7.5", - "sebastian/phpcpd": "~4.1", - "sensiolabs/security-checker": "~6.0", - "simplesamlphp/simplesamlphp-test-framework": "~0.1.0", - "squizlabs/php_codesniffer": "~3.5" - }, - "time": "2021-01-28T21:35:22+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "v4.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "SAML2\\": "src/SAML2" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], - "authors": [ - { - "name": "Andreas Åkre Solberg", - "email": "andreas.solberg@uninett.no" - } - ], - "description": "SAML2 PHP library from SimpleSAMLphp", - "support": { - "issues": "https://github.com/simplesamlphp/saml2/issues", - "source": "https://github.com/simplesamlphp/saml2/tree/v4.2.0" - } - }, - { - "name": "simplesamlphp/simplesamlphp", - "version": "v1.18.8", - "version_normalized": "1.18.8.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp.git", - "reference": "ebb6d15bb8e8b45504adc26fd3872073d1e5cd9b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp/zipball/ebb6d15bb8e8b45504adc26fd3872073d1e5cd9b", - "reference": "ebb6d15bb8e8b45504adc26fd3872073d1e5cd9b", - "shasum": "" - }, - "require": { - "ext-date": "*", - "ext-dom": "*", - "ext-hash": "*", - "ext-json": "*", - "ext-mbstring": "*", - "ext-openssl": "*", - "ext-pcre": "*", - "ext-spl": "*", - "ext-zlib": "*", - "gettext/gettext": "^4.6", - "php": ">=5.6", - "phpmailer/phpmailer": "^6.0", - "robrichards/xmlseclibs": "^3.0.4", - "simplesamlphp/saml2": "^3.4 || ^4.0", - "simplesamlphp/simplesamlphp-module-adfs": "^0.9", - "simplesamlphp/simplesamlphp-module-authcrypt": "^0.9", - "simplesamlphp/simplesamlphp-module-authfacebook": "^0.9", - "simplesamlphp/simplesamlphp-module-authorize": "^0.9", - "simplesamlphp/simplesamlphp-module-authtwitter": "^0.9", - "simplesamlphp/simplesamlphp-module-authwindowslive": "^0.9", - "simplesamlphp/simplesamlphp-module-authx509": "^0.9", - "simplesamlphp/simplesamlphp-module-authyubikey": "^0.9", - "simplesamlphp/simplesamlphp-module-cas": "^0.9", - "simplesamlphp/simplesamlphp-module-cdc": "^0.9", - "simplesamlphp/simplesamlphp-module-consent": "^0.9", - "simplesamlphp/simplesamlphp-module-consentadmin": "^0.9", - "simplesamlphp/simplesamlphp-module-discopower": "^0.9", - "simplesamlphp/simplesamlphp-module-exampleattributeserver": "^1.0", - "simplesamlphp/simplesamlphp-module-expirycheck": "^0.9", - "simplesamlphp/simplesamlphp-module-ldap": "^0.9", - "simplesamlphp/simplesamlphp-module-memcachemonitor": "^0.9", - "simplesamlphp/simplesamlphp-module-memcookie": "^1.2", - "simplesamlphp/simplesamlphp-module-metarefresh": "^0.9", - "simplesamlphp/simplesamlphp-module-negotiate": "^0.9", - "simplesamlphp/simplesamlphp-module-oauth": "^0.9", - "simplesamlphp/simplesamlphp-module-preprodwarning": "^0.9", - "simplesamlphp/simplesamlphp-module-radius": "^0.9", - "simplesamlphp/simplesamlphp-module-riak": "^0.9", - "simplesamlphp/simplesamlphp-module-sanitycheck": "^0.9", - "simplesamlphp/simplesamlphp-module-smartattributes": "^0.9", - "simplesamlphp/simplesamlphp-module-sqlauth": "^0.9", - "simplesamlphp/simplesamlphp-module-statistics": "^0.9", - "simplesamlphp/twig-configurable-i18n": "^2.2", - "symfony/config": "^3.4 || ^4.0", - "symfony/dependency-injection": "^3.4 || ^4.0", - "symfony/http-foundation": "^3.4 || ^4.0", - "symfony/http-kernel": "^3.4 || ^4.0", - "symfony/routing": "^3.4 || ^4.0", - "symfony/yaml": "^3.4 || ^4.0", - "twig/twig": "~1.0 || ~2.0" - }, - "require-dev": { - "ext-curl": "*", - "mikey179/vfsstream": "~1.6", - "phpunit/phpunit": "~5.7", - "sensiolabs/security-checker": "^5.0.3", - "simplesamlphp/simplesamlphp-test-framework": "^0.0.14", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "~1.1.9" - }, - "suggest": { - "ext-curl": "Needed in order to check for updates automatically", - "ext-ldap": "Needed if an LDAP backend is used", - "ext-memcache": "Needed if a Memcache server is used to store session information", - "ext-mysql": "Needed if a MySQL backend is used, either for authentication or to store session information", - "ext-pdo": "Needed if a database backend is used, either for authentication or to store session information", - "ext-pgsql": "Needed if a PostgreSQL backend is used, either for authentication or to store session information", - "ext-radius": "Needed if a Radius backend is used", - "predis/predis": "Needed if a Redis server is used to store session information" - }, - "time": "2020-09-02T12:07:28+00:00", - "type": "project", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\": "lib/SimpleSAML" - }, - "files": [ - "lib/_autoload_modules.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], - "authors": [ - { - "name": "Andreas Åkre Solberg", - "email": "andreas.solberg@uninett.no" - }, - { - "name": "Olav Morken", - "email": "olav.morken@uninett.no" - }, - { - "name": "Jaime Perez", - "email": "jaime.perez@uninett.no" - } - ], - "description": "A PHP implementation of a SAML 2.0 service provider and identity provider, also compatible with Shibboleth 1.3 and 2.0.", - "homepage": "http://simplesamlphp.org", - "keywords": [ - "SAML2", - "idp", - "oauth", - "shibboleth", - "sp", - "ws-federation" - ], - "support": { - "issues": "https://github.com/simplesamlphp/simplesamlphp/issues", - "source": "https://github.com/simplesamlphp/simplesamlphp" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-adfs", - "version": "v0.9.6", - "version_normalized": "0.9.6.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-adfs.git", - "reference": "425e5ebbdd097c92fe5265a6b48d32a3095c7237" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-adfs/zipball/425e5ebbdd097c92fe5265a6b48d32a3095c7237", - "reference": "425e5ebbdd097c92fe5265a6b48d32a3095c7237", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17", - "webmozart/assert": "<1.7" - }, - "time": "2020-03-31T14:29:24+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\adfs\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], - "authors": [ - { - "name": "Tim van Dijen", - "email": "tvdijen@gmail.com" - } - ], - "description": "A module that implements the WS-federation IDP", - "keywords": [ - "adfs", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-adfs/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-adfs" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-authcrypt", - "version": "v0.9.3", - "version_normalized": "0.9.3.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-authcrypt.git", - "reference": "9a2c1a761e2d94394a4f2d3499fd6f0853899530" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authcrypt/zipball/9a2c1a761e2d94394a4f2d3499fd6f0853899530", - "reference": "9a2c1a761e2d94394a4f2d3499fd6f0853899530", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1", - "webmozart/assert": "~1.4", - "whitehat101/apr1-md5": "~1.0" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17" - }, - "time": "2021-01-08T09:09:33+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\authcrypt\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], - "authors": [ - { - "name": "Olav Morken", - "email": "olavmrk@gmail.com" - } - ], - "description": "This module provides authentication against password hashes or .htpasswd files", - "keywords": [ - "authcrypt", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-authcrypt/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-authcrypt" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-authfacebook", - "version": "v0.9.3", - "version_normalized": "0.9.3.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-authfacebook.git", - "reference": "9152731e939ad4a49e0f06da5f0009ebde0d2b5c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authfacebook/zipball/9152731e939ad4a49e0f06da5f0009ebde0d2b5c", - "reference": "9152731e939ad4a49e0f06da5f0009ebde0d2b5c", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1" - }, - "require-dev": { - "simplesamlphp/simplesamlphp": "^1.17", - "simplesamlphp/simplesamlphp-test-framework": "^0.0.10" - }, - "time": "2020-03-13T11:29:21+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\authfacebook\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Andjelko Horvat", - "email": "comel@vingd.com" - }, - { - "name": "Tim van Dijen", - "email": "tvdijen@gmail.com" - } - ], - "description": "A module that is able to authenticate against Facebook", - "keywords": [ - "facebook", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/simplesamlphp/simplesamlphp-module-authfacebook/issues", - "source": "https://github.com/simplesamlphp/simplesamlphp-module-authfacebook" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-authorize", - "version": "v0.9.2", - "version_normalized": "0.9.2.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-authorize.git", - "reference": "c2607a5252ee1256b50ce7795e35513b116998d4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authorize/zipball/c2607a5252ee1256b50ce7795e35513b116998d4", - "reference": "c2607a5252ee1256b50ce7795e35513b116998d4", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17" - }, - "time": "2020-02-25T15:16:57+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\authorize\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Ernesto Revilla", - "email": "erny@yaco.es" - } - ], - "description": "This module provides a user authorization filter based on attribute matching", - "keywords": [ - "authorize", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-authorize/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-authorize" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-authtwitter", - "version": "v0.9.1", - "version_normalized": "0.9.1.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-authtwitter.git", - "reference": "29a15e58061222632fea9eb2c807aef5e2c0d54a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authtwitter/zipball/29a15e58061222632fea9eb2c807aef5e2c0d54a", - "reference": "29a15e58061222632fea9eb2c807aef5e2c0d54a", - "shasum": "" - }, - "require": { - "php": ">=5.5", - "simplesamlphp/composer-module-installer": "~1.0", - "simplesamlphp/simplesamlphp-module-oauth": "^0.9" - }, - "require-dev": { - "phpunit/phpunit": "~4.8.35", - "simplesamlphp/simplesamlphp": "^1.17" - }, - "time": "2019-12-03T09:00:09+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\authtwitter\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Olav Morken", - "email": "olavmrk@gmail.com" - }, - { - "name": "Tim van Dijen", - "email": "tvdijen@gmail.com" - } - ], - "description": "A module that is able to perform authentication against Twitter", - "keywords": [ - "simplesamlphp", - "twitter" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-authtwitter/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-authtwitter" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-authwindowslive", - "version": "v0.9.1", - "version_normalized": "0.9.1.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-authwindowslive.git", - "reference": "f40aecec6c0adaedb6693309840c98cec783876e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authwindowslive/zipball/f40aecec6c0adaedb6693309840c98cec783876e", - "reference": "f40aecec6c0adaedb6693309840c98cec783876e", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17" - }, - "time": "2019-12-03T09:01:13+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\authwindowslive\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Olav Morken", - "email": "olavmrk@gmail.com" - }, - { - "name": "Tim van Dijen", - "email": "tvdijen@gmail.com" - } - ], - "description": "A module that is able to perform authentication against Windows Live", - "keywords": [ - "live", - "simplesamlphp", - "windows", - "windowslive" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-authwindowslive/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-authwindowslive" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-authx509", - "version": "v0.9.8", - "version_normalized": "0.9.8.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-authX509.git", - "reference": "66525b1ec4145ec8d0d0e9db4534624b6be4c1fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authX509/zipball/66525b1ec4145ec8d0d0e9db4534624b6be4c1fb", - "reference": "66525b1ec4145ec8d0d0e9db4534624b6be4c1fb", - "shasum": "" - }, - "require": { - "php": ">=5.5", - "simplesamlphp/composer-module-installer": "~1.1", - "simplesamlphp/simplesamlphp-module-ldap": "^0.9" - }, - "require-dev": { - "simplesamlphp/simplesamlphp": "^1.17", - "simplesamlphp/simplesamlphp-test-framework": "^0.0.15" - }, - "time": "2020-12-15T23:06:47+00:00", - "type": "simplesamlphp-module", - "extra": { - "ssp-mixedcase-module-name": "authX509" - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\authX509\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], - "authors": [ - { - "name": "Joost van Dijk", - "email": "Joost.vanDijk@surfnet.nl" - }, - { - "name": "Tim van Dijen", - "email": "tvdijen@gmail.com" - } - ], - "description": "A module that is able to authenticate users based on X509 client certificates", - "keywords": [ - "simplesamlphp", - "x509" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-authx509/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-authx509" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-authyubikey", - "version": "v0.9.1", - "version_normalized": "0.9.1.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-authyubikey.git", - "reference": "8c27bfeb4981d2e6fa40a831e945f40c5a4ad3d2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authyubikey/zipball/8c27bfeb4981d2e6fa40a831e945f40c5a4ad3d2", - "reference": "8c27bfeb4981d2e6fa40a831e945f40c5a4ad3d2", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1", - "webmozart/assert": "~1.4" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17" - }, - "time": "2019-12-03T08:52:49+00:00", - "type": "simplesamlphp-module", - "extra": { - "ssp-mixedcase-module-name": "authYubikey" - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\modules\\yubikey\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Tim van Dijen", - "email": "tvdijen@gmail.com" - } - ], - "description": "A module that is able to authenticate against YubiKey", - "keywords": [ - "authyubikey", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-authyubikey/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-authyubikey" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-cas", - "version": "v0.9.1", - "version_normalized": "0.9.1.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-cas.git", - "reference": "63b72e4600550c507cdfc32fdd208ad59a64321e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-cas/zipball/63b72e4600550c507cdfc32fdd208ad59a64321e", - "reference": "63b72e4600550c507cdfc32fdd208ad59a64321e", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1", - "simplesamlphp/simplesamlphp-module-ldap": "^0.9", - "webmozart/assert": "~1.4" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17" - }, - "time": "2019-12-03T09:03:06+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\cas\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Olav Morken", - "email": "olavmrk@gmail.com" - } - ], - "description": "A module that provides CAS authentication", - "keywords": [ - "cas", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-cas/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-cas" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-cdc", - "version": "v0.9.1", - "version_normalized": "0.9.1.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-cdc.git", - "reference": "16a5bfac7299e04e5feb472af328e07598708166" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-cdc/zipball/16a5bfac7299e04e5feb472af328e07598708166", - "reference": "16a5bfac7299e04e5feb472af328e07598708166", - "shasum": "" - }, - "require": { - "simplesamlphp/composer-module-installer": ">=1.1.6" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17" - }, - "time": "2019-12-03T09:04:11+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\cdc\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Olav Morken", - "email": "olav.morken@uninett.no" - }, - { - "name": "Jaime Perez Crespo", - "email": "jaime.perez@uninett.no" - } - ], - "description": "A SimpleSAMLphp module that allows integration with CDC", - "homepage": "https://simplesamlphp.org/", - "keywords": [ - "cdc", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/simplesamlphp/simplesamlphp-module-cdc/issues", - "source": "https://github.com/simplesamlphp/simplesamlphp-module-cdc/" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-consent", - "version": "v0.9.6", - "version_normalized": "0.9.6.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-consent.git", - "reference": "2f84d15e96afb5a32b6d1cff93370f501ca7867d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-consent/zipball/2f84d15e96afb5a32b6d1cff93370f501ca7867d", - "reference": "2f84d15e96afb5a32b6d1cff93370f501ca7867d", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17", - "webmozart/assert": "<1.7" - }, - "time": "2020-06-15T14:26:23+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\consent\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], - "authors": [ - { - "name": "Olav Morken", - "email": "lavmrk@gmail.com" - } - ], - "description": "A module that will ask for user consent before releasing attributes", - "keywords": [ - "consent", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-consent/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-consent" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-consentadmin", - "version": "v0.9.1", - "version_normalized": "0.9.1.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-consentadmin.git", - "reference": "466e8d0d751f0080162d78e63ab2e125b24d17a1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-consentadmin/zipball/466e8d0d751f0080162d78e63ab2e125b24d17a1", - "reference": "466e8d0d751f0080162d78e63ab2e125b24d17a1", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1", - "simplesamlphp/simplesamlphp-module-consent": "^0.9", - "webmozart/assert": "~1.4" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17" - }, - "time": "2019-12-03T09:06:40+00:00", - "type": "simplesamlphp-module", - "extra": { - "ssp-mixedcase-module-name": "consentAdmin" - }, - "installation-source": "dist", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Jacob Christiansen", - "email": "jach@wayf.dk" - }, - { - "name": "Olav Morken", - "email": "olav.morken@uninett.no" - } - ], - "description": "A module that allows users to manage their consent", - "keywords": [ - "consentadmin", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/simplesamlphp/simplesamlphp-module-consentadmin/issues", - "source": "https://github.com/simplesamlphp/simplesamlphp-module-consentadmin" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-discopower", - "version": "v0.9.3", - "version_normalized": "0.9.3.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-discopower.git", - "reference": "c892926e8186d0a2c638f7032dfc30540c1f92fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-discopower/zipball/c892926e8186d0a2c638f7032dfc30540c1f92fb", - "reference": "c892926e8186d0a2c638f7032dfc30540c1f92fb", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1", - "webmozart/assert": "~1.4 <1.6" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17" - }, - "time": "2019-12-13T07:51:43+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\modules\\discopower\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Andreas Åkre Solberg", - "email": "andreas.solberg@uninett.no" - } - ], - "description": "Fancy tabbed discovery service with filtering capabilities where SPs can have different sets of metadata listed", - "keywords": [ - "discopower", - "discovery", - "simplesamlphp" - ] - }, - { - "name": "simplesamlphp/simplesamlphp-module-exampleattributeserver", - "version": "v1.0.0", - "version_normalized": "1.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-exampleattributeserver.git", - "reference": "63e0323e81c32bc3c9eaa01ea45194bb10153708" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-exampleattributeserver/zipball/63e0323e81c32bc3c9eaa01ea45194bb10153708", - "reference": "63e0323e81c32bc3c9eaa01ea45194bb10153708", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17" - }, - "time": "2019-05-28T12:37:15+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\exampleattributeserver\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Olav Morken", - "email": "olavmrk@gmail.com" - } - ], - "description": "An example for SAML attributes queries", - "keywords": [ - "exampleattributeserver", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-exampleattributeserver/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-exampleattributeserver" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-expirycheck", - "version": "v0.9.3", - "version_normalized": "0.9.3.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-expirycheck.git", - "reference": "59c59cdf87e2679257b46c07bb4c27666a11cc20" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-expirycheck/zipball/59c59cdf87e2679257b46c07bb4c27666a11cc20", - "reference": "59c59cdf87e2679257b46c07bb4c27666a11cc20", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1", - "webmozart/assert": "~1.4" - }, - "require-dev": { - "simplesamlphp/simplesamlphp": "^1.17", - "simplesamlphp/simplesamlphp-test-framework": "^0.0.10" - }, - "time": "2019-12-14T13:20:46+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\expirycheck\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Alex Mihičinac", - "email": "alexm@arnes.si" - } - ], - "description": "The expirycheck module validates user's expiry date", - "keywords": [ - "expirycheck", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/simplesamlphp/simplesamlphp-module-expirycheck/issues", - "source": "https://github.com/simplesamlphp/simplesamlphp-module-expirycheck" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-ldap", - "version": "v0.9.10", - "version_normalized": "0.9.10.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-ldap.git", - "reference": "78f04cbe41bfb9dcbcdeff4b5f12e67c060e1a77" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-ldap/zipball/78f04cbe41bfb9dcbcdeff4b5f12e67c060e1a77", - "reference": "78f04cbe41bfb9dcbcdeff4b5f12e67c060e1a77", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17" - }, - "suggest": { - "ext-ldap": "Needed when using LDAP authentication in SimpleSAMLphp" - }, - "time": "2020-09-16T21:09:07+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\ldap\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], - "authors": [ - { - "name": "Olav Morken", - "email": "olavmrk@gmail.com" - }, - { - "name": "Tim van Dijen", - "email": "tvdijen@gmail.com" - } - ], - "description": "A module that provides authentication against LDAP stores", - "keywords": [ - "ldap", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-ldap/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-ldap" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-memcachemonitor", - "version": "v0.9.2", - "version_normalized": "0.9.2.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-memcachemonitor.git", - "reference": "900b5c6b59913d9013b8dae090841a127ae55ae5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-memcachemonitor/zipball/900b5c6b59913d9013b8dae090841a127ae55ae5", - "reference": "900b5c6b59913d9013b8dae090841a127ae55ae5", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1" - }, - "require-dev": { - "simplesamlphp/simplesamlphp": "^1.17", - "simplesamlphp/simplesamlphp-test-framework": "~0.0.6" - }, - "time": "2021-01-25T15:44:44+00:00", - "type": "simplesamlphp-module", - "extra": { - "ssp-mixedcase-module-name": "memcacheMonitor" - }, - "installation-source": "dist", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], - "authors": [ - { - "name": "Andreas Åkre Solberg", - "email": "andreas.solberg@uninett.no" - }, - { - "name": "Tim van Dijen", - "email": "tvdijen@gmail.com" - } - ], - "description": "A module that is able display usage statistics of a memcache(d) store", - "keywords": [ - "memcachemonitor", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-memcachemonitor/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-memcachemonitor" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-memcookie", - "version": "v1.2.2", - "version_normalized": "1.2.2.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-memcookie.git", - "reference": "39535304e8d464b7baa1e82cb441fa432947ff57" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-memcookie/zipball/39535304e8d464b7baa1e82cb441fa432947ff57", - "reference": "39535304e8d464b7baa1e82cb441fa432947ff57", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": ">=1.1.6" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17", - "simplesamlphp/simplesamlphp-test-framework": "^0.0.6" - }, - "time": "2019-08-08T18:33:47+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1" - ], - "authors": [ - { - "name": "Olav Morken", - "email": "olav.morken@uninett.no" - }, - { - "name": "Jaime Perez Crespo", - "email": "jaime.perez@uninett.no" - } - ], - "description": "A SimpleSAMLphp module that allows integration with Auth MemCookie, allowing web applications written in other languages than PHP to integrate with SimpleSAMLphp.", - "homepage": "https://simplesamlphp.org/", - "keywords": [ - "Auth MemCookie", - "apache", - "cookies", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/simplesamlphp/simplesamlphp-module-memcookie/issues", - "source": "https://github.com/simplesamlphp/simplesamlphp-module-memcookie/" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-metarefresh", - "version": "v0.9.6", - "version_normalized": "0.9.6.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-metarefresh.git", - "reference": "e284306a7097297765b5b78a4e28f19f18d4e001" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-metarefresh/zipball/e284306a7097297765b5b78a4e28f19f18d4e001", - "reference": "e284306a7097297765b5b78a4e28f19f18d4e001", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.18" - }, - "time": "2020-07-31T14:43:37+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\metarefresh\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], - "authors": [ - { - "name": "Andreas Åkre Solberg", - "email": "andreas.solberg@uninett.no" - } - ], - "description": "The metarefresh module will download and parse metadata documents and store them locally", - "keywords": [ - "metarefresh", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-metarefresh/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-metarefresh" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-negotiate", - "version": "v0.9.10", - "version_normalized": "0.9.10.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-negotiate.git", - "reference": "db05ff40399c66e3f14697a8162da6b2fbdab47d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-negotiate/zipball/db05ff40399c66e3f14697a8162da6b2fbdab47d", - "reference": "db05ff40399c66e3f14697a8162da6b2fbdab47d", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1", - "simplesamlphp/simplesamlphp-module-ldap": "^0.9", - "webmozart/assert": "~1.4" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "sensiolabs/security-checker": "^5.0.3", - "simplesamlphp/simplesamlphp": "dev-testing-1.18", - "simplesamlphp/simplesamlphp-test-framework": "^0.0.14", - "squizlabs/php_codesniffer": "^3.5" - }, - "suggest": { - "ext-krb5": "Needed in case the SimpleSAMLphp negotiate module is used" - }, - "time": "2021-01-22T13:36:09+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\negotiate\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], - "authors": [ - { - "name": "Olav Morken", - "email": "olavmrk@gmail.com" - } - ], - "description": "The Negotiate module implements Microsofts Kerberos SPNEGO mechanism", - "keywords": [ - "negotiate", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-negotiate/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-negotiate" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-oauth", - "version": "v0.9.2", - "version_normalized": "0.9.2.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-oauth.git", - "reference": "d14d7aca6e699ec12b3f4dd0128373faa1a2cc61" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-oauth/zipball/d14d7aca6e699ec12b3f4dd0128373faa1a2cc61", - "reference": "d14d7aca6e699ec12b3f4dd0128373faa1a2cc61", - "shasum": "" - }, - "require": { - "simplesamlphp/composer-module-installer": ">=1.1.6" - }, - "require-dev": { - "phpunit/phpunit": "~4.8.36", - "simplesamlphp/simplesamlphp": "^1.17" - }, - "time": "2020-04-29T19:37:43+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], - "authors": [ - { - "name": "Olav Morken", - "email": "olav.morken@uninett.no" - }, - { - "name": "Jaime Perez Crespo", - "email": "jaime.perez@uninett.no" - } - ], - "description": "A SimpleSAMLphp module that allows integration with OAuth1,", - "homepage": "https://simplesamlphp.org/", - "keywords": [ - "oauth1", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/simplesamlphp/simplesamlphp-module-oauth/issues", - "source": "https://github.com/simplesamlphp/simplesamlphp-module-oauth/" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-preprodwarning", - "version": "v0.9.2", - "version_normalized": "0.9.2.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-preprodwarning.git", - "reference": "8e032de33a75eb44857dc06d886ad94ee3af4638" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-preprodwarning/zipball/8e032de33a75eb44857dc06d886ad94ee3af4638", - "reference": "8e032de33a75eb44857dc06d886ad94ee3af4638", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17", - "webmozart/assert": "^1.4" - }, - "time": "2020-04-09T13:05:27+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\preprodwarning\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], - "authors": [ - { - "name": "Andreas Åkre Solberg", - "email": "andreas.solberg@uninett.no" - } - ], - "description": "Display a warning when using a pre-production environment", - "keywords": [ - "preprodwarning", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/simplesamlphp/simplesamlphp-module-preprodwarning/issues", - "source": "https://github.com/simplesamlphp/simplesamlphp-module-preprodwarning" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-radius", - "version": "v0.9.3", - "version_normalized": "0.9.3.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-radius.git", - "reference": "36bd0f39f9a13f7eb96ead97c97c3634aa1c3f2d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-radius/zipball/36bd0f39f9a13f7eb96ead97c97c3634aa1c3f2d", - "reference": "36bd0f39f9a13f7eb96ead97c97c3634aa1c3f2d", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17", - "simplesamlphp/simplesamlphp-test-framework": "^0.0.7" - }, - "time": "2019-10-03T18:13:07+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\radius\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Olav Morken", - "email": "olavmrk@gmail.com" - } - ], - "description": "A module that is able perform authentication against a RADIUS server", - "keywords": [ - "radius", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-radius/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-radius" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-riak", - "version": "v0.9.1", - "version_normalized": "0.9.1.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-riak.git", - "reference": "c1a9d9545cb4e05b9205b34624850bb777aca991" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-riak/zipball/c1a9d9545cb4e05b9205b34624850bb777aca991", - "reference": "c1a9d9545cb4e05b9205b34624850bb777aca991", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "phpfastcache/riak-client": "^3.4", - "simplesamlphp/composer-module-installer": "~1.1" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17" - }, - "time": "2019-12-03T08:28:45+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\riak\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Tim van Dijen", - "email": "tvdijen@gmail.com" - } - ], - "description": "A module that is able to store key/value pairs in a Riak store", - "keywords": [ - "riak", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-riak/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-riak" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-sanitycheck", - "version": "v0.9.1", - "version_normalized": "0.9.1.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-sanitycheck.git", - "reference": "15d6664eae73a233c3c4c72fd8a5c2be72b6ed2a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-sanitycheck/zipball/15d6664eae73a233c3c4c72fd8a5c2be72b6ed2a", - "reference": "15d6664eae73a233c3c4c72fd8a5c2be72b6ed2a", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1", - "webmozart/assert": "~1.4" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17" - }, - "time": "2020-05-07T11:34:29+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\sanitycheck\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], - "authors": [ - { - "name": "Andreas Åkre Solberg", - "email": "andreas.solberg@uninett.no" - } - ], - "description": "Perform sanity checks on configuration", - "keywords": [ - "sanitycheck", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-sanitycheck/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-sanitycheck" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-smartattributes", - "version": "v0.9.1", - "version_normalized": "0.9.1.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-smartattributes.git", - "reference": "b45d3ecd916e359a9cae05f9ae9df09b5c42f4e6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-smartattributes/zipball/b45d3ecd916e359a9cae05f9ae9df09b5c42f4e6", - "reference": "b45d3ecd916e359a9cae05f9ae9df09b5c42f4e6", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17" - }, - "time": "2019-12-03T09:24:09+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\smartattributes\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Andreas Åkre Solberg", - "email": "andreas.solberg@uninett.no" - } - ], - "description": "The SmartAttributes module provides additional authentication processing filters to manipulate attributes.", - "keywords": [ - "simplesamlphp", - "smartattributes" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-smartattributes/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-smartattributes" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-sqlauth", - "version": "v0.9.1", - "version_normalized": "0.9.1.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-sqlauth.git", - "reference": "31bce8763ad97f4b4473e4ad4a5a96ddc136ef6b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-sqlauth/zipball/31bce8763ad97f4b4473e4ad4a5a96ddc136ef6b", - "reference": "31bce8763ad97f4b4473e4ad4a5a96ddc136ef6b", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17", - "webmozart/assert": "^1.4" - }, - "time": "2019-12-03T09:07:09+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\sqlauth\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Olav Morken", - "email": "olavmrk@gmail.com" - } - ], - "description": "This is a authentication module for authenticating a user against a SQL database", - "keywords": [ - "simplesamlphp", - "sqlauth" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-sqlauth/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-sqlauth" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-statistics", - "version": "v0.9.6", - "version_normalized": "0.9.6.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-statistics.git", - "reference": "03fb6bdbbf5ce0a0cb257208db79aacac227ac10" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-statistics/zipball/03fb6bdbbf5ce0a0cb257208db79aacac227ac10", - "reference": "03fb6bdbbf5ce0a0cb257208db79aacac227ac10", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1", - "webmozart/assert": "^1.4" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17", - "simplesamlphp/simplesamlphp-test-framework": "^0.0.12" - }, - "time": "2021-01-25T15:15:26+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\statistics\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], - "authors": [ - { - "name": "Andreas Åkre Solberg", - "email": "andreas.solberg@uninett.no" - } - ], - "description": "The SimpleSAMLphp statistics module", - "keywords": [ - "simplesamlphp", - "statistics" - ], - "support": { - "issues": "https://github.com/simplesamlphp/simplesamlphp-module-statistics/issues", - "source": "https://github.com/simplesamlphp/simplesamlphp-module-statistics" - } - }, - { - "name": "simplesamlphp/twig-configurable-i18n", - "version": "v2.3.4", - "version_normalized": "2.3.4.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/twig-configurable-i18n.git", - "reference": "e2bffc7eed3112a0b3870ef5b4da0fd74c7c4b8a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/twig-configurable-i18n/zipball/e2bffc7eed3112a0b3870ef5b4da0fd74c7c4b8a", - "reference": "e2bffc7eed3112a0b3870ef5b4da0fd74c7c4b8a", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "twig/extensions": "@dev" - }, - "require-dev": { - "phpunit/phpunit": "^7.5", - "sensiolabs/security-checker": "~6.0.3", - "simplesamlphp/simplesamlphp-test-framework": "~0.1.2", - "squizlabs/php_codesniffer": "^3.5", - "twig/twig": "^2.13" - }, - "time": "2020-08-27T12:51:10+00:00", - "type": "project", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\TwigConfigurableI18n\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1" - ], - "authors": [ - { - "name": "Jaime Perez", - "email": "jaime.perez@uninett.no" - } - ], - "description": "This is an extension on top of Twig's i18n extension, allowing you to customize which functions to use for translations.", - "keywords": [ - "extension", - "gettext", - "i18n", - "internationalization", - "translation", - "twig" - ], - "support": { - "issues": "https://github.com/simplesamlphp/twig-configurable-i18n/issues", - "source": "https://github.com/simplesamlphp/twig-configurable-i18n" - } - }, - { - "name": "squizlabs/php_codesniffer", - "version": "3.5.8", - "version_normalized": "3.5.8.0", - "source": { - "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "9d583721a7157ee997f235f327de038e7ea6dac4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/9d583721a7157ee997f235f327de038e7ea6dac4", - "reference": "9d583721a7157ee997f235f327de038e7ea6dac4", - "shasum": "" - }, - "require": { - "ext-simplexml": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" - }, - "time": "2020-10-23T02:01:07+00:00", - "bin": [ - "bin/phpcs", - "bin/phpcbf" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "installation-source": "dist", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Greg Sherwood", - "role": "lead" - } - ], - "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", - "keywords": [ - "phpcs", - "standards" - ], - "support": { - "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", - "source": "https://github.com/squizlabs/PHP_CodeSniffer", - "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" - } - }, - { - "name": "stack/builder", - "version": "v1.0.5", - "version_normalized": "1.0.5.0", - "source": { - "type": "git", - "url": "https://github.com/stackphp/builder.git", - "reference": "fb3d136d04c6be41120ebf8c0cc71fe9507d750a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/stackphp/builder/zipball/fb3d136d04c6be41120ebf8c0cc71fe9507d750a", - "reference": "fb3d136d04c6be41120ebf8c0cc71fe9507d750a", - "shasum": "" - }, - "require": { - "php": ">=5.3.0", - "symfony/http-foundation": "~2.1|~3.0|~4.0", - "symfony/http-kernel": "~2.1|~3.0|~4.0" - }, - "require-dev": { - "silex/silex": "~1.0" - }, - "time": "2017-11-18T14:57:29+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-0": { - "Stack": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - } - ], - "description": "Builder for stack middlewares based on HttpKernelInterface.", - "keywords": [ - "stack" - ] - }, - { - "name": "symfony-cmf/routing", - "version": "1.4.1", - "version_normalized": "1.4.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony-cmf/routing.git", - "reference": "fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony-cmf/routing/zipball/fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac", - "reference": "fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac", - "shasum": "" - }, - "require": { - "php": "^5.3.9|^7.0", - "psr/log": "1.*", - "symfony/http-kernel": "^2.2|3.*", - "symfony/routing": "^2.2|3.*" - }, - "require-dev": { - "friendsofsymfony/jsrouting-bundle": "^1.1", - "symfony-cmf/testing": "^1.3", - "symfony/config": "^2.2|3.*", - "symfony/dependency-injection": "^2.0.5|3.*", - "symfony/event-dispatcher": "^2.1|3.*" - }, - "suggest": { - "symfony/event-dispatcher": "DynamicRouter can optionally trigger an event at the start of matching. Minimal version (~2.1)" - }, - "time": "2017-05-09T08:10:41+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Cmf\\Component\\Routing\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony CMF Community", - "homepage": "https://github.com/symfony-cmf/Routing/contributors" - } - ], - "description": "Extends the Symfony2 routing component for dynamic routes and chaining several routers", - "homepage": "http://cmf.symfony.com", - "keywords": [ - "database", - "routing" - ] - }, - { - "name": "symfony/class-loader", - "version": "v3.4.41", - "version_normalized": "3.4.41.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/class-loader.git", - "reference": "e4636a4f23f157278a19e5db160c63de0da297d8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/class-loader/zipball/e4636a4f23f157278a19e5db160c63de0da297d8", - "reference": "e4636a4f23f157278a19e5db160c63de0da297d8", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8" - }, - "require-dev": { - "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/polyfill-apcu": "~1.1" - }, - "suggest": { - "symfony/polyfill-apcu": "For using ApcClassLoader on HHVM" - }, - "time": "2020-03-15T09:38:08+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\ClassLoader\\": "" - }, - "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 ClassLoader Component", - "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/config", - "version": "v4.4.19", - "version_normalized": "4.4.19.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/config.git", - "reference": "2c4c7827a7e143f5cf375666641b0f448eab8802" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/2c4c7827a7e143f5cf375666641b0f448eab8802", - "reference": "2c4c7827a7e143f5cf375666641b0f448eab8802", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/filesystem": "^3.4|^4.0|^5.0", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/finder": "<3.4" - }, - "require-dev": { - "symfony/event-dispatcher": "^3.4|^4.0|^5.0", - "symfony/finder": "^3.4|^4.0|^5.0", - "symfony/messenger": "^4.1|^5.0", - "symfony/service-contracts": "^1.1|^2", - "symfony/yaml": "^3.4|^4.0|^5.0" - }, - "suggest": { - "symfony/yaml": "To use the yaml reference dumper" - }, - "time": "2021-01-27T09:09:26+00:00", - "type": "library", - "installation-source": "dist", - "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": "Helps you find, load, combine, autofill and validate configuration values of any kind", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/config/tree/v4.4.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/console", - "version": "v3.4.41", - "version_normalized": "3.4.41.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "bfe29ead7e7b1cc9ce74c6a40d06ad1f96fced13" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/bfe29ead7e7b1cc9ce74c6a40d06ad1f96fced13", - "reference": "bfe29ead7e7b1cc9ce74c6a40d06ad1f96fced13", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/debug": "~2.8|~3.0|~4.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/dependency-injection": "<3.4", - "symfony/process": "<3.3" - }, - "provide": { - "psr/log-implementation": "1.0" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~3.3|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", - "symfony/lock": "~3.4|~4.0", - "symfony/process": "~3.3|~4.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, - "time": "2020-05-30T18:58:05+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "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", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/debug", - "version": "v3.4.41", - "version_normalized": "3.4.41.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "518c6a00d0872da30bd06aee3ea59a0a5cf54d6d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/518c6a00d0872da30bd06aee3ea59a0a5cf54d6d", - "reference": "518c6a00d0872da30bd06aee3ea59a0a5cf54d6d", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "psr/log": "~1.0" - }, - "conflict": { - "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" - }, - "require-dev": { - "symfony/http-kernel": "~2.8|~3.0|~4.0" - }, - "time": "2020-05-22T18:25:20+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Debug\\": "" - }, - "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 Debug Component", - "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/dependency-injection", - "version": "v3.4.41", - "version_normalized": "3.4.41.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/dependency-injection.git", - "reference": "e39380b7104b0ec538a075ae919f00c7e5267bac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/e39380b7104b0ec538a075ae919f00c7e5267bac", - "reference": "e39380b7104b0ec538a075ae919f00c7e5267bac", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "psr/container": "^1.0" - }, - "conflict": { - "symfony/config": "<3.3.7", - "symfony/finder": "<3.3", - "symfony/proxy-manager-bridge": "<3.4", - "symfony/yaml": "<3.4" - }, - "provide": { - "psr/container-implementation": "1.0" - }, - "require-dev": { - "symfony/config": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/yaml": "~3.4|~4.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": "" - }, - "time": "2020-05-30T21:06:01+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "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", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/event-dispatcher", - "version": "v3.4.41", - "version_normalized": "3.4.41.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "14d978f8e8555f2de719c00eb65376be7d2e9081" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/14d978f8e8555f2de719c00eb65376be7d2e9081", - "reference": "14d978f8e8555f2de719c00eb65376be7d2e9081", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8" - }, - "conflict": { - "symfony/dependency-injection": "<3.3" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0|~4.0", - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/stopwatch": "~2.8|~3.0|~4.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "time": "2020-05-05T15:06:23+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "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", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/filesystem", - "version": "v5.2.3", - "version_normalized": "5.2.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "262d033b57c73e8b59cd6e68a45c528318b15038" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/262d033b57c73e8b59cd6e68a45c528318b15038", - "reference": "262d033b57c73e8b59cd6e68a45c528318b15038", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8" - }, - "time": "2021-01-27T10:01:46+00:00", - "type": "library", - "installation-source": "dist", - "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": "Provides basic utilities for the filesystem", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.2.3" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/finder", - "version": "v4.4.19", - "version_normalized": "4.4.19.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "25d79cfccfc12e84e7a63a248c3f0720fdd92db6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/25d79cfccfc12e84e7a63a248c3f0720fdd92db6", - "reference": "25d79cfccfc12e84e7a63a248c3f0720fdd92db6", - "shasum": "" - }, - "require": { - "php": ">=7.1.3" - }, - "time": "2021-01-27T09:09:26+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/finder/tree/v4.4.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/http-foundation", - "version": "v3.4.41", - "version_normalized": "3.4.41.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "fbd216d2304b1a3fe38d6392b04729c8dd356359" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/fbd216d2304b1a3fe38d6392b04729c8dd356359", - "reference": "fbd216d2304b1a3fe38d6392b04729c8dd356359", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php70": "~1.6" - }, - "require-dev": { - "symfony/expression-language": "~2.8|~3.0|~4.0" - }, - "time": "2020-05-16T13:15:54+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpFoundation\\": "" - }, - "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 HttpFoundation Component", - "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/http-kernel", - "version": "v3.4.44", - "version_normalized": "3.4.44.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-kernel.git", - "reference": "27dcaa8c6b18c75df9f37badeb4d3564ffaa1326" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/27dcaa8c6b18c75df9f37badeb4d3564ffaa1326", - "reference": "27dcaa8c6b18c75df9f37badeb4d3564ffaa1326", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "psr/log": "~1.0", - "symfony/debug": "^3.3.3|~4.0", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php56": "~1.8" - }, - "conflict": { - "symfony/config": "<2.8", - "symfony/dependency-injection": "<3.4.10|<4.0.10,>=4", - "symfony/var-dumper": "<3.3", - "twig/twig": "<1.34|<2.4,>=2" - }, - "provide": { - "psr/log-implementation": "1.0" - }, - "require-dev": { - "psr/cache": "~1.0", - "symfony/browser-kit": "~2.8|~3.0|~4.0", - "symfony/class-loader": "~2.8|~3.0", - "symfony/config": "~2.8|~3.0|~4.0", - "symfony/console": "~2.8|~3.0|~4.0", - "symfony/css-selector": "~2.8|~3.0|~4.0", - "symfony/dependency-injection": "^3.4.10|^4.0.10", - "symfony/dom-crawler": "~2.8|~3.0|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/process": "~2.8|~3.0|~4.0", - "symfony/routing": "~3.4|~4.0", - "symfony/stopwatch": "~2.8|~3.0|~4.0", - "symfony/templating": "~2.8|~3.0|~4.0", - "symfony/translation": "~2.8|~3.0|~4.0", - "symfony/var-dumper": "~3.3|~4.0" - }, - "suggest": { - "symfony/browser-kit": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "", - "symfony/finder": "", - "symfony/var-dumper": "" - }, - "time": "2020-08-31T05:53:42+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpKernel\\": "" - }, - "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 HttpKernel Component", - "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.17.0", - "version_normalized": "1.17.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e94c8b1bbe2bc77507a1056cdb06451c75b427f9", - "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "time": "2020-05-12T16:14:59+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.17-dev" - } - }, - "installation-source": "dist", - "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" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/polyfill-iconv", - "version": "v1.17.0", - "version_normalized": "1.17.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "c4de7601eefbf25f9d47190abe07f79fe0a27424" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/c4de7601eefbf25f9d47190abe07f79fe0a27424", - "reference": "c4de7601eefbf25f9d47190abe07f79fe0a27424", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-iconv": "For best performance" - }, - "time": "2020-05-12T16:47:27+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.17-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Iconv\\": "" - }, - "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 Iconv extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "iconv", - "polyfill", - "portable", - "shim" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/polyfill-intl-idn", - "version": "v1.17.0", - "version_normalized": "1.17.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3bff59ea7047e925be6b7f2059d60af31bb46d6a", - "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php72": "^1.10" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "time": "2020-05-12T16:47:27+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.17-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.17.0", - "version_normalized": "1.17.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "fa79b11539418b02fc5e1897267673ba2c19419c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c", - "reference": "fa79b11539418b02fc5e1897267673ba2c19419c", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "time": "2020-05-12T16:47:27+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.17-dev" - } - }, - "installation-source": "dist", - "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" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/polyfill-php56", - "version": "v1.17.0", - "version_normalized": "1.17.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php56.git", - "reference": "e3c8c138280cdfe4b81488441555583aa1984e23" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/e3c8c138280cdfe4b81488441555583aa1984e23", - "reference": "e3c8c138280cdfe4b81488441555583aa1984e23", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "symfony/polyfill-util": "~1.0" - }, - "time": "2020-05-12T16:47:27+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.17-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php56\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/polyfill-php70", - "version": "v1.17.0", - "version_normalized": "1.17.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "82225c2d7d23d7e70515496d249c0152679b468e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/82225c2d7d23d7e70515496d249c0152679b468e", - "reference": "82225c2d7d23d7e70515496d249c0152679b468e", - "shasum": "" - }, - "require": { - "paragonie/random_compat": "~1.0|~2.0|~9.99", - "php": ">=5.3.3" - }, - "time": "2020-05-12T16:47:27+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.17-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php70\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/polyfill-php72", - "version": "v1.17.0", - "version_normalized": "1.17.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "f048e612a3905f34931127360bdd2def19a5e582" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582", - "reference": "f048e612a3905f34931127360bdd2def19a5e582", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "time": "2020-05-12T16:47:27+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.17-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.22.0", - "version_normalized": "1.22.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91", - "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "time": "2021-01-07T16:49:33+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.22-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/polyfill-util", - "version": "v1.17.0", - "version_normalized": "1.17.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-util.git", - "reference": "4afb4110fc037752cf0ce9869f9ab8162c4e20d7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/4afb4110fc037752cf0ce9869f9ab8162c4e20d7", - "reference": "4afb4110fc037752cf0ce9869f9ab8162c4e20d7", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "time": "2020-05-12T16:14:59+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.17-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Util\\": "" - } - }, - "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 utilities for portability of PHP codes", - "homepage": "https://symfony.com", - "keywords": [ - "compat", - "compatibility", - "polyfill", - "shim" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/process", - "version": "v3.4.41", - "version_normalized": "3.4.41.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "8a895f0c92a7c4b10db95139bcff71bdf66d4d21" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/8a895f0c92a7c4b10db95139bcff71bdf66d4d21", - "reference": "8a895f0c92a7c4b10db95139bcff71bdf66d4d21", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8" - }, - "time": "2020-05-23T17:05:51+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Process Component", - "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/psr-http-message-bridge", - "version": "v1.1.2", - "version_normalized": "1.1.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "a33352af16f78a5ff4f9d90811536abf210df12b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/a33352af16f78a5ff4f9d90811536abf210df12b", - "reference": "a33352af16f78a5ff4f9d90811536abf210df12b", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0", - "psr/http-message": "^1.0", - "symfony/http-foundation": "^2.3.42 || ^3.4 || ^4.0" - }, - "require-dev": { - "symfony/phpunit-bridge": "^3.4 || ^4.0" - }, - "suggest": { - "nyholm/psr7": "For a super lightweight PSR-7/17 implementation" - }, - "time": "2019-04-03T17:09:40+00:00", - "type": "symfony-bridge", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Bridge\\PsrHttpMessage\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "PSR HTTP message bridge", - "homepage": "http://symfony.com", - "keywords": [ - "http", - "http-message", - "psr-17", - "psr-7" - ] - }, - { - "name": "symfony/routing", - "version": "v3.4.41", - "version_normalized": "3.4.41.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "e0d43b6f9417ad59ecaa8e2f799b79eef417387f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/e0d43b6f9417ad59ecaa8e2f799b79eef417387f", - "reference": "e0d43b6f9417ad59ecaa8e2f799b79eef417387f", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8" - }, - "conflict": { - "symfony/config": "<3.3.1", - "symfony/dependency-injection": "<3.3", - "symfony/yaml": "<3.4" - }, - "require-dev": { - "doctrine/annotations": "~1.0", - "psr/log": "~1.0", - "symfony/config": "^3.3.1|~4.0", - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "~2.8|~3.0|~4.0", - "symfony/yaml": "~3.4|~4.0" - }, - "suggest": { - "doctrine/annotations": "For using the annotation loader", - "symfony/config": "For using the all-in-one router or any loader", - "symfony/expression-language": "For using expression matching", - "symfony/http-foundation": "For using a Symfony Request object", - "symfony/yaml": "For using the YAML loader" - }, - "time": "2020-05-30T19:50:06+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Routing\\": "" - }, - "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 Routing Component", - "homepage": "https://symfony.com", - "keywords": [ - "router", - "routing", - "uri", - "url" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/serializer", - "version": "v3.4.41", - "version_normalized": "3.4.41.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/serializer.git", - "reference": "0db90db012b1b0a04fbb2d64ae9160871cad9d4f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/0db90db012b1b0a04fbb2d64ae9160871cad9d4f", - "reference": "0db90db012b1b0a04fbb2d64ae9160871cad9d4f", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "phpdocumentor/type-resolver": "<0.2.1", - "symfony/dependency-injection": "<3.2", - "symfony/property-access": ">=3.0,<3.0.4|>=2.8,<2.8.4", - "symfony/property-info": "<3.1", - "symfony/yaml": "<3.4" - }, - "require-dev": { - "doctrine/annotations": "~1.0", - "doctrine/cache": "~1.0", - "phpdocumentor/reflection-docblock": "^3.0|^4.0", - "symfony/cache": "~3.1|~4.0", - "symfony/config": "~2.8|~3.0|~4.0", - "symfony/dependency-injection": "~3.2|~4.0", - "symfony/http-foundation": "~2.8|~3.0|~4.0", - "symfony/property-access": "~2.8|~3.0|~4.0", - "symfony/property-info": "^3.4.13|~4.0", - "symfony/yaml": "~3.4|~4.0" - }, - "suggest": { - "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.", - "doctrine/cache": "For using the default cached annotation reader and metadata cache.", - "psr/cache-implementation": "For using the metadata cache.", - "symfony/config": "For using the XML mapping loader.", - "symfony/http-foundation": "For using a MIME type guesser within the DataUriNormalizer.", - "symfony/property-access": "For using the ObjectNormalizer.", - "symfony/property-info": "To deserialize relations.", - "symfony/yaml": "For using the default YAML mapping loader." - }, - "time": "2020-05-30T18:58:05+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Serializer\\": "" - }, - "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 Serializer Component", - "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/translation", - "version": "v3.4.41", - "version_normalized": "3.4.41.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "b0cd62ef0ff7ec31b67d78d7fc818e2bda4e844f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/b0cd62ef0ff7ec31b67d78d7fc818e2bda4e844f", - "reference": "b0cd62ef0ff7ec31b67d78d7fc818e2bda4e844f", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/config": "<2.8", - "symfony/dependency-injection": "<3.4", - "symfony/yaml": "<3.4" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/http-kernel": "~3.4|~4.0", - "symfony/intl": "^2.8.18|^3.2.5|~4.0", - "symfony/var-dumper": "~3.4|~4.0", - "symfony/yaml": "~3.4|~4.0" - }, - "suggest": { - "psr/log-implementation": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" - }, - "time": "2020-05-30T18:58:05+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "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", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/validator", - "version": "v3.4.41", - "version_normalized": "3.4.41.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/validator.git", - "reference": "5fb88120a11a75e17b602103a893dd8b27804529" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/5fb88120a11a75e17b602103a893dd8b27804529", - "reference": "5fb88120a11a75e17b602103a893dd8b27804529", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.0", - "symfony/translation": "~2.8|~3.0|~4.0" - }, - "conflict": { - "doctrine/lexer": "<1.0.2", - "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", - "symfony/dependency-injection": "<3.3", - "symfony/http-kernel": "<3.3.5", - "symfony/yaml": "<3.4" - }, - "require-dev": { - "doctrine/annotations": "~1.7", - "doctrine/cache": "~1.0", - "egulias/email-validator": "^2.1.10", - "symfony/cache": "~3.1|~4.0", - "symfony/config": "~2.8|~3.0|~4.0", - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "~2.8|~3.0|~4.0", - "symfony/http-kernel": "^3.3.5|~4.0", - "symfony/intl": "^2.8.18|^3.2.5|~4.0", - "symfony/property-access": "~2.8|~3.0|~4.0", - "symfony/var-dumper": "~3.3|~4.0", - "symfony/yaml": "~3.4|~4.0" - }, - "suggest": { - "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.", - "doctrine/cache": "For using the default cached annotation reader and metadata cache.", - "egulias/email-validator": "Strict (RFC compliant) email validation", - "psr/cache-implementation": "For using the metadata cache.", - "symfony/config": "", - "symfony/expression-language": "For using the Expression validator", - "symfony/http-foundation": "", - "symfony/intl": "", - "symfony/property-access": "For accessing properties within comparison constraints", - "symfony/yaml": "" - }, - "time": "2020-05-30T18:43:38+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Validator\\": "" - }, - "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 Validator Component", - "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/var-dumper", - "version": "v4.4.19", - "version_normalized": "4.4.19.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "a1eab2f69906dc83c5ddba4632180260d0ab4f7f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/a1eab2f69906dc83c5ddba4632180260d0ab4f7f", - "reference": "a1eab2f69906dc83c5ddba4632180260d0ab4f7f", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php72": "~1.5", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", - "symfony/console": "<3.4" - }, - "require-dev": { - "ext-iconv": "*", - "symfony/console": "^3.4|^4.0|^5.0", - "symfony/process": "^4.4|^5.0", - "twig/twig": "^1.43|^2.13|^3.0.4" - }, - "suggest": { - "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", - "ext-intl": "To show region name in time zone dump", - "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" - }, - "time": "2021-01-27T09:09:26+00:00", - "bin": [ - "Resources/bin/var-dump-server" - ], - "type": "library", - "installation-source": "dist", - "autoload": { - "files": [ - "Resources/functions/dump.php" - ], - "psr-4": { - "Symfony\\Component\\VarDumper\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides mechanisms for walking through any arbitrary PHP variable", - "homepage": "https://symfony.com", - "keywords": [ - "debug", - "dump" - ], - "support": { - "source": "https://github.com/symfony/var-dumper/tree/v4.4.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/yaml", - "version": "v3.4.41", - "version_normalized": "3.4.41.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "7233ac2bfdde24d672f5305f2b3f6b5d741ef8eb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/7233ac2bfdde24d672f5305f2b3f6b5d741ef8eb", - "reference": "7233ac2bfdde24d672f5305f2b3f6b5d741ef8eb", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/console": "<3.4" - }, - "require-dev": { - "symfony/console": "~3.4|~4.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" - }, - "time": "2020-05-11T07:51:54+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "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", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "twig/extensions", - "version": "v1.5.4", - "version_normalized": "1.5.4.0", - "source": { - "type": "git", - "url": "https://github.com/twigphp/Twig-extensions.git", - "reference": "57873c8b0c1be51caa47df2cdb824490beb16202" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig-extensions/zipball/57873c8b0c1be51caa47df2cdb824490beb16202", - "reference": "57873c8b0c1be51caa47df2cdb824490beb16202", - "shasum": "" - }, - "require": { - "twig/twig": "^1.27|^2.0" - }, - "require-dev": { - "symfony/phpunit-bridge": "^3.4", - "symfony/translation": "^2.7|^3.4" - }, - "suggest": { - "symfony/translation": "Allow the time_diff output to be translated" - }, - "time": "2018-12-05T18:34:18+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.5-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-0": { - "Twig_Extensions_": "lib/" - }, - "psr-4": { - "Twig\\Extensions\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Common additional features for Twig that do not directly belong in core", - "keywords": [ - "i18n", - "text" - ], - "support": { - "issues": "https://github.com/twigphp/Twig-extensions/issues", - "source": "https://github.com/twigphp/Twig-extensions/tree/master" - }, - "abandoned": true - }, - { - "name": "twig/twig", - "version": "v1.42.5", - "version_normalized": "1.42.5.0", - "source": { - "type": "git", - "url": "https://github.com/twigphp/Twig.git", - "reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e", - "reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e", - "shasum": "" - }, - "require": { - "php": ">=5.5.0", - "symfony/polyfill-ctype": "^1.8" - }, - "require-dev": { - "psr/container": "^1.0", - "symfony/phpunit-bridge": "^4.4|^5.0" - }, - "time": "2020-02-11T05:59:23+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.42-dev" - } - }, - "installation-source": "dist", - "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": "Twig Team", - "role": "Contributors" - }, - { - "name": "Armin Ronacher", - "email": "armin.ronacher@active-4.com", - "role": "Project Founder" - } - ], - "description": "Twig, the flexible, fast, and secure template language for PHP", - "homepage": "https://twig.symfony.com", - "keywords": [ - "templating" - ] - }, - { - "name": "typo3/phar-stream-wrapper", - "version": "v3.1.4", - "version_normalized": "3.1.4.0", - "source": { - "type": "git", - "url": "https://github.com/TYPO3/phar-stream-wrapper.git", - "reference": "e0c1b495cfac064f4f5c4bcb6bf67bb7f345ed04" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/TYPO3/phar-stream-wrapper/zipball/e0c1b495cfac064f4f5c4bcb6bf67bb7f345ed04", - "reference": "e0c1b495cfac064f4f5c4bcb6bf67bb7f345ed04", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": "^7.0" - }, - "require-dev": { - "ext-xdebug": "*", - "phpunit/phpunit": "^6.5" - }, - "suggest": { - "ext-fileinfo": "For PHP builtin file type guessing, otherwise uses internal processing" - }, - "time": "2019-12-10T11:53:27+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "v3.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "TYPO3\\PharStreamWrapper\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Interceptors for PHP's native phar:// stream handling", - "homepage": "https://typo3.org/", - "keywords": [ - "phar", - "php", - "security", - "stream-wrapper" - ] - }, - { - "name": "webflo/drupal-finder", - "version": "1.2.2", - "version_normalized": "1.2.2.0", - "source": { - "type": "git", - "url": "https://github.com/webflo/drupal-finder.git", - "reference": "c8e5dbe65caef285fec8057a4c718a0d4138d1ee" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webflo/drupal-finder/zipball/c8e5dbe65caef285fec8057a4c718a0d4138d1ee", - "reference": "c8e5dbe65caef285fec8057a4c718a0d4138d1ee", - "shasum": "" - }, - "require": { - "ext-json": "*" - }, - "require-dev": { - "mikey179/vfsstream": "^1.6", - "phpunit/phpunit": "^4.8" - }, - "time": "2020-10-27T09:42:17+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/DrupalFinder.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Florian Weber", - "email": "florian@webflo.org" - } - ], - "description": "Helper class to locate a Drupal installation from a given path.", - "support": { - "issues": "https://github.com/webflo/drupal-finder/issues", - "source": "https://github.com/webflo/drupal-finder/tree/1.2.2" - } - }, - { - "name": "webmozart/assert", - "version": "1.5.0", - "version_normalized": "1.5.0.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/88e6d84706d09a236046d686bbea96f07b3a34f4", - "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0", - "symfony/polyfill-ctype": "^1.8" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^7.5.13" - }, - "time": "2019-08-24T08:43:50+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3-dev" - } - }, - "installation-source": "dist", - "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" - ] - }, - { - "name": "webmozart/path-util", - "version": "2.3.0", - "version_normalized": "2.3.0.0", - "source": { - "type": "git", - "url": "https://github.com/webmozart/path-util.git", - "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725", - "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "webmozart/assert": "~1.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" - }, - "time": "2015-12-17T08:42:14+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Webmozart\\PathUtil\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.", - "support": { - "issues": "https://github.com/webmozart/path-util/issues", - "source": "https://github.com/webmozart/path-util/tree/2.3.0" - } - }, - { - "name": "whitehat101/apr1-md5", - "version": "v1.0.0", - "version_normalized": "1.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/whitehat101/apr1-md5.git", - "reference": "8b261c9fc0481b4e9fa9d01c6ca70867b5d5e819" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/whitehat101/apr1-md5/zipball/8b261c9fc0481b4e9fa9d01c6ca70867b5d5e819", - "reference": "8b261c9fc0481b4e9fa9d01c6ca70867b5d5e819", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "4.0.*" - }, - "time": "2015-02-11T11:06:42+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "WhiteHat101\\Crypt\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jeremy Ebler", - "email": "jebler@gmail.com" - } - ], - "description": "Apache's APR1-MD5 algorithm in pure PHP", - "homepage": "https://github.com/whitehat101/apr1-md5", - "keywords": [ - "MD5", - "apr1" - ], - "support": { - "issues": "https://github.com/whitehat101/apr1-md5/issues", - "source": "https://github.com/whitehat101/apr1-md5/tree/master" + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v4.4.20" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/var-dumper" + }, + { + "name": "symfony/yaml", + "version": "v3.4.41", + "version_normalized": "3.4.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "7233ac2bfdde24d672f5305f2b3f6b5d741ef8eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/7233ac2bfdde24d672f5305f2b3f6b5d741ef8eb", + "reference": "7233ac2bfdde24d672f5305f2b3f6b5d741ef8eb", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/console": "<3.4" + }, + "require-dev": { + "symfony/console": "~3.4|~4.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "time": "2020-05-11T07:51:54+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "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", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/yaml" + }, + { + "name": "twig/extensions", + "version": "v1.5.4", + "version_normalized": "1.5.4.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig-extensions.git", + "reference": "57873c8b0c1be51caa47df2cdb824490beb16202" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig-extensions/zipball/57873c8b0c1be51caa47df2cdb824490beb16202", + "reference": "57873c8b0c1be51caa47df2cdb824490beb16202", + "shasum": "" + }, + "require": { + "twig/twig": "^1.27|^2.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^3.4", + "symfony/translation": "^2.7|^3.4" + }, + "suggest": { + "symfony/translation": "Allow the time_diff output to be translated" + }, + "time": "2018-12-05T18:34:18+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Twig_Extensions_": "lib/" + }, + "psr-4": { + "Twig\\Extensions\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Common additional features for Twig that do not directly belong in core", + "keywords": [ + "i18n", + "text" + ], + "support": { + "issues": "https://github.com/twigphp/Twig-extensions/issues", + "source": "https://github.com/twigphp/Twig-extensions/tree/master" + }, + "abandoned": true, + "install-path": "../twig/extensions" + }, + { + "name": "twig/twig", + "version": "v1.42.5", + "version_normalized": "1.42.5.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e", + "reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e", + "shasum": "" + }, + "require": { + "php": ">=5.5.0", + "symfony/polyfill-ctype": "^1.8" + }, + "require-dev": { + "psr/container": "^1.0", + "symfony/phpunit-bridge": "^4.4|^5.0" + }, + "time": "2020-02-11T05:59:23+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.42-dev" + } + }, + "installation-source": "dist", + "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": "Twig Team", + "role": "Contributors" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "https://twig.symfony.com", + "keywords": [ + "templating" + ], + "install-path": "../twig/twig" + }, + { + "name": "typo3/phar-stream-wrapper", + "version": "v3.1.4", + "version_normalized": "3.1.4.0", + "source": { + "type": "git", + "url": "https://github.com/TYPO3/phar-stream-wrapper.git", + "reference": "e0c1b495cfac064f4f5c4bcb6bf67bb7f345ed04" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3/phar-stream-wrapper/zipball/e0c1b495cfac064f4f5c4bcb6bf67bb7f345ed04", + "reference": "e0c1b495cfac064f4f5c4bcb6bf67bb7f345ed04", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.0" + }, + "require-dev": { + "ext-xdebug": "*", + "phpunit/phpunit": "^6.5" + }, + "suggest": { + "ext-fileinfo": "For PHP builtin file type guessing, otherwise uses internal processing" + }, + "time": "2019-12-10T11:53:27+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "v3.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "TYPO3\\PharStreamWrapper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Interceptors for PHP's native phar:// stream handling", + "homepage": "https://typo3.org/", + "keywords": [ + "phar", + "php", + "security", + "stream-wrapper" + ], + "install-path": "../typo3/phar-stream-wrapper" + }, + { + "name": "webflo/drupal-finder", + "version": "1.2.2", + "version_normalized": "1.2.2.0", + "source": { + "type": "git", + "url": "https://github.com/webflo/drupal-finder.git", + "reference": "c8e5dbe65caef285fec8057a4c718a0d4138d1ee" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webflo/drupal-finder/zipball/c8e5dbe65caef285fec8057a4c718a0d4138d1ee", + "reference": "c8e5dbe65caef285fec8057a4c718a0d4138d1ee", + "shasum": "" + }, + "require": { + "ext-json": "*" + }, + "require-dev": { + "mikey179/vfsstream": "^1.6", + "phpunit/phpunit": "^4.8" + }, + "time": "2020-10-27T09:42:17+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/DrupalFinder.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Florian Weber", + "email": "florian@webflo.org" + } + ], + "description": "Helper class to locate a Drupal installation from a given path.", + "support": { + "issues": "https://github.com/webflo/drupal-finder/issues", + "source": "https://github.com/webflo/drupal-finder/tree/1.2.2" + }, + "install-path": "../webflo/drupal-finder" + }, + { + "name": "webmozart/assert", + "version": "1.5.0", + "version_normalized": "1.5.0.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/88e6d84706d09a236046d686bbea96f07b3a34f4", + "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36 || ^7.5.13" + }, + "time": "2019-08-24T08:43:50+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "installation-source": "dist", + "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" + ], + "install-path": "../webmozart/assert" + }, + { + "name": "webmozart/path-util", + "version": "2.3.0", + "version_normalized": "2.3.0.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/path-util.git", + "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725", + "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "webmozart/assert": "~1.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "time": "2015-12-17T08:42:14+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Webmozart\\PathUtil\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.", + "support": { + "issues": "https://github.com/webmozart/path-util/issues", + "source": "https://github.com/webmozart/path-util/tree/2.3.0" + }, + "install-path": "../webmozart/path-util" + }, + { + "name": "whitehat101/apr1-md5", + "version": "v1.0.0", + "version_normalized": "1.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/whitehat101/apr1-md5.git", + "reference": "8b261c9fc0481b4e9fa9d01c6ca70867b5d5e819" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/whitehat101/apr1-md5/zipball/8b261c9fc0481b4e9fa9d01c6ca70867b5d5e819", + "reference": "8b261c9fc0481b4e9fa9d01c6ca70867b5d5e819", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "4.0.*" + }, + "time": "2015-02-11T11:06:42+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "WhiteHat101\\Crypt\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeremy Ebler", + "email": "jebler@gmail.com" + } + ], + "description": "Apache's APR1-MD5 algorithm in pure PHP", + "homepage": "https://github.com/whitehat101/apr1-md5", + "keywords": [ + "MD5", + "apr1" + ], + "support": { + "issues": "https://github.com/whitehat101/apr1-md5/issues", + "source": "https://github.com/whitehat101/apr1-md5/tree/master" + }, + "install-path": "../whitehat101/apr1-md5" + }, + { + "name": "wikimedia/composer-merge-plugin", + "version": "v2.0.1", + "version_normalized": "2.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/wikimedia/composer-merge-plugin.git", + "reference": "8ca2ed8ab97c8ebce6b39d9943e9909bb4f18912" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/wikimedia/composer-merge-plugin/zipball/8ca2ed8ab97c8ebce6b39d9943e9909bb4f18912", + "reference": "8ca2ed8ab97c8ebce6b39d9943e9909bb4f18912", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1||^2.0", + "php": ">=7.2.0" + }, + "require-dev": { + "composer/composer": "^1.1||^2.0", + "php-parallel-lint/php-parallel-lint": "~1.1.0", + "phpunit/phpunit": "^8.5||^9.0", + "squizlabs/php_codesniffer": "~3.5.4" + }, + "time": "2021-02-24T05:28:06+00:00", + "type": "composer-plugin", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + }, + "class": "Wikimedia\\Composer\\Merge\\V2\\MergePlugin" + }, + "installation-source": "source", + "autoload": { + "psr-4": { + "Wikimedia\\Composer\\Merge\\V2\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bryan Davis", + "email": "bd808@wikimedia.org" + } + ], + "description": "Composer plugin to merge multiple composer.json files", + "support": { + "issues": "https://github.com/wikimedia/composer-merge-plugin/issues", + "source": "https://github.com/wikimedia/composer-merge-plugin/tree/v2.0.1" + }, + "install-path": "../wikimedia/composer-merge-plugin" } - }, - { - "name": "wikimedia/composer-merge-plugin", - "version": "v1.4.1", - "version_normalized": "1.4.1.0", - "source": { - "type": "git", - "url": "https://github.com/wikimedia/composer-merge-plugin.git", - "reference": "81c6ac72a24a67383419c7eb9aa2b3437f2ab100" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wikimedia/composer-merge-plugin/zipball/81c6ac72a24a67383419c7eb9aa2b3437f2ab100", - "reference": "81c6ac72a24a67383419c7eb9aa2b3437f2ab100", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0", - "php": ">=5.3.2" - }, - "require-dev": { - "composer/composer": "~1.0.0", - "jakub-onderka/php-parallel-lint": "~0.8", - "phpunit/phpunit": "~4.8|~5.0", - "squizlabs/php_codesniffer": "~2.1.0" - }, - "time": "2017-04-25T02:31:25+00:00", - "type": "composer-plugin", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - }, - "class": "Wikimedia\\Composer\\MergePlugin" - }, - "installation-source": "source", - "autoload": { - "psr-4": { - "Wikimedia\\Composer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bryan Davis", - "email": "bd808@wikimedia.org" - } - ], - "description": "Composer plugin to merge multiple composer.json files" - } -] + ], + "dev": true, + "dev-package-names": [] +} diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index 24f21d267..43c11b39d 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -1,12 +1,12 @@ <?php return array ( 'root' => array ( - 'pretty_version' => '8.9.13.x-dev', - 'version' => '8.9.13.9999999-dev', + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', 'aliases' => array ( ), - 'reference' => '3ff7d617b5d6cfbf92444f52710a2523cc318d69', + 'reference' => 'ee54ac5beb8e6d50593b7ea3413e037c689b40e7', 'name' => 'drupal/recommended-project', ), 'versions' => @@ -171,6 +171,15 @@ ), 'reference' => '8.x-2.4', ), + 'drupal/adminimal_theme' => + array ( + 'pretty_version' => '1.6.0', + 'version' => '1.6.0.0', + 'aliases' => + array ( + ), + 'reference' => '8.x-1.6', + ), 'drupal/aggregator' => array ( 'replaced' => @@ -275,14 +284,32 @@ ), 'reference' => '8.x-1.1', ), + 'drupal/cern-adminimal-subtheme' => + array ( + 'pretty_version' => '2.1.0', + 'version' => '2.1.0.0', + 'aliases' => + array ( + ), + 'reference' => 'a2ed5628d532fccb54abbeaf063db3944784bd76', + ), + 'drupal/cern-base-theme' => + array ( + 'pretty_version' => '2.6.6', + 'version' => '2.6.6.0', + 'aliases' => + array ( + ), + 'reference' => 'cb5ed2e618d84b10f0f7c4441ad0be5ce0a2c2d3', + ), 'drupal/cern-cds-media' => array ( - 'pretty_version' => '2.1.3', - 'version' => '2.1.3.0', + 'pretty_version' => '2.1.4', + 'version' => '2.1.4.0', 'aliases' => array ( ), - 'reference' => '57ba9f56ce31d754e1d89117fcdd65ae816ce22c', + 'reference' => '211fb1be8dbb83df9dd791b6f75d8798bb99f290', ), 'drupal/cern-components' => array ( @@ -295,12 +322,12 @@ ), 'drupal/cern-dev-status' => array ( - 'pretty_version' => '2.0.3', - 'version' => '2.0.3.0', + 'pretty_version' => '2.0.5', + 'version' => '2.0.5.0', 'aliases' => array ( ), - 'reference' => '50a2dcafc5ba1d130dd270cff17718f03e4cc3b5', + 'reference' => 'faba2b40d7f34d718f0826dbb38250e42881e71a', ), 'drupal/cern-display-formats' => array ( @@ -311,23 +338,41 @@ ), 'reference' => '57b5b7cc346f4094359efbb53f9cb21cfedbaaf3', ), + 'drupal/cern-drupal-welcome-message-block' => + array ( + 'pretty_version' => '1.1.0', + 'version' => '1.1.0.0', + 'aliases' => + array ( + ), + 'reference' => 'c5a6c1b0b465429ffe2c3d5bac92b6fa39f668f6', + ), 'drupal/cern-full-html-format' => array ( - 'pretty_version' => '2.0.3', - 'version' => '2.0.3.0', + 'pretty_version' => '2.0.4', + 'version' => '2.0.4.0', 'aliases' => array ( ), - 'reference' => '862c0ffe8ed690dc622d72d22292c83f42c77bb6', + 'reference' => '4e4a15aa77576abadb8639f537e31d31edbc09a6', + ), + 'drupal/cern-indico-feeds' => + array ( + 'pretty_version' => '2.0.5', + 'version' => '2.0.5.0', + 'aliases' => + array ( + ), + 'reference' => '8478ce54ec7267c82e3370c5e35642d8e0c11534', ), 'drupal/cern-landing-page' => array ( - 'pretty_version' => '2.2.3', - 'version' => '2.2.3.0', + 'pretty_version' => '2.2.4', + 'version' => '2.2.4.0', 'aliases' => array ( ), - 'reference' => '7f2e2fae22215d2f1b886eb677e9dafdecdc9033', + 'reference' => 'a6aa2903393d64b341900aa65c3e160afd39752f', ), 'drupal/cern-loading' => array ( @@ -340,21 +385,48 @@ ), 'drupal/cern-paragraph-types' => array ( - 'pretty_version' => '2.2.2', - 'version' => '2.2.2.0', + 'pretty_version' => '2.2.3', + 'version' => '2.2.3.0', 'aliases' => array ( ), - 'reference' => 'c62b7f8d71029a6cd6535ef87d465e5e858f74a5', + 'reference' => '5d9bd43e424dc7865ccd564544a1e07045f5c111', + ), + 'drupal/cern-profile-displayname' => + array ( + 'pretty_version' => '2.1.0', + 'version' => '2.1.0.0', + 'aliases' => + array ( + ), + 'reference' => '1392ffebc377e627a22b6a817f2c342d126b93f2', + ), + 'drupal/cern-theme' => + array ( + 'pretty_version' => '2.6.11', + 'version' => '2.6.11.0', + 'aliases' => + array ( + ), + 'reference' => '38332c5687938b4c9368a05693071c884da02d14', ), 'drupal/cern-toolbar' => array ( - 'pretty_version' => '2.2.2', - 'version' => '2.2.2.0', + 'pretty_version' => '2.2.3', + 'version' => '2.2.3.0', 'aliases' => array ( ), - 'reference' => '51e6b5293d8628c03c124c46b1b81e972279393c', + 'reference' => 'ab38a97568bfe8e7f985bde28fdfd847b89aa685', + ), + 'drupal/cern-webcast-feeds' => + array ( + 'pretty_version' => '2.0.4', + 'version' => '2.0.4.0', + 'aliases' => + array ( + ), + 'reference' => '4f255383eec3c97d2b9de1c0bae98d23b16e0076', ), 'drupal/ckeditor' => array ( @@ -413,12 +485,12 @@ ), 'drupal/colorbox' => array ( - 'pretty_version' => '1.6.0', - 'version' => '1.6.0.0', + 'pretty_version' => '1.7.0', + 'version' => '1.7.0.0', 'aliases' => array ( ), - 'reference' => '8.x-1.6', + 'reference' => '8.x-1.7', ), 'drupal/colorbutton' => array ( @@ -795,12 +867,12 @@ ), 'drupal/ds' => array ( - 'pretty_version' => '3.9.0', - 'version' => '3.9.0.0', + 'pretty_version' => '3.12.0', + 'version' => '3.12.0.0', 'aliases' => array ( ), - 'reference' => '8.x-3.9', + 'reference' => '8.x-3.12', ), 'drupal/dynamic_page_cache' => array ( @@ -811,12 +883,21 @@ ), 'drupal/easy_breadcrumb' => array ( - 'pretty_version' => '1.13.0', - 'version' => '1.13.0.0', + 'pretty_version' => '1.15.0', + 'version' => '1.15.0.0', + 'aliases' => + array ( + ), + 'reference' => '8.x-1.15', + ), + 'drupal/easychart' => + array ( + 'pretty_version' => '3.4.0', + 'version' => '3.4.0.0', 'aliases' => array ( ), - 'reference' => '8.x-1.13', + 'reference' => '8.x-3.4', ), 'drupal/editor' => array ( @@ -852,12 +933,12 @@ ), 'drupal/entity_reference_revisions' => array ( - 'pretty_version' => '1.8.0', - 'version' => '1.8.0.0', + 'pretty_version' => '1.9.0', + 'version' => '1.9.0.0', 'aliases' => array ( ), - 'reference' => '8.x-1.8', + 'reference' => '8.x-1.9', ), 'drupal/externalauth' => array ( @@ -870,21 +951,21 @@ ), 'drupal/extlink' => array ( - 'pretty_version' => '1.5.0', - 'version' => '1.5.0.0', + 'pretty_version' => '1.6.0', + 'version' => '1.6.0.0', 'aliases' => array ( ), - 'reference' => '8.x-1.5', + 'reference' => '8.x-1.6', ), 'drupal/facets' => array ( - 'pretty_version' => '1.6.0', - 'version' => '1.6.0.0', + 'pretty_version' => '1.7.0', + 'version' => '1.7.0.0', 'aliases' => array ( ), - 'reference' => '8.x-1.6', + 'reference' => '8.x-1.7', ), 'drupal/fast_404' => array ( @@ -897,12 +978,12 @@ ), 'drupal/features' => array ( - 'pretty_version' => '3.11.0', - 'version' => '3.11.0.0', + 'pretty_version' => '3.12.0', + 'version' => '3.12.0.0', 'aliases' => array ( ), - 'reference' => '8.x-3.11', + 'reference' => '8.x-3.12', ), 'drupal/feeds' => array ( @@ -1186,12 +1267,12 @@ ), 'drupal/ludwig' => array ( - 'pretty_version' => '1.6.0', - 'version' => '1.6.0.0', + 'pretty_version' => '1.7.0', + 'version' => '1.7.0.0', 'aliases' => array ( ), - 'reference' => '8.x-1.6', + 'reference' => '8.x-1.7', ), 'drupal/mailsystem' => array ( @@ -1227,12 +1308,12 @@ ), 'drupal/memcache' => array ( - 'pretty_version' => '2.2.0', - 'version' => '2.2.0.0', + 'pretty_version' => '2.3.0', + 'version' => '2.3.0.0', 'aliases' => array ( ), - 'reference' => '8.x-2.2', + 'reference' => '8.x-2.3', ), 'drupal/menu_block' => array ( @@ -1277,12 +1358,12 @@ ), 'drupal/metatag' => array ( - 'pretty_version' => '1.15.0', - 'version' => '1.15.0.0', + 'pretty_version' => '1.16.0', + 'version' => '1.16.0.0', 'aliases' => array ( ), - 'reference' => '8.x-1.15', + 'reference' => '8.x-1.16', ), 'drupal/migrate' => array ( @@ -1357,12 +1438,12 @@ ), 'drupal/module_filter' => array ( - 'pretty_version' => '3.1.0', - 'version' => '3.1.0.0', + 'pretty_version' => '3.2.0', + 'version' => '3.2.0.0', 'aliases' => array ( ), - 'reference' => '8.x-3.1', + 'reference' => '8.x-3.2', ), 'drupal/node' => array ( @@ -1380,6 +1461,15 @@ ), 'reference' => '8.x-1.4', ), + 'drupal/openid_connect' => + array ( + 'pretty_version' => '1.0.0', + 'version' => '1.0.0.0', + 'aliases' => + array ( + ), + 'reference' => '8.x-1.0', + ), 'drupal/options' => array ( 'replaced' => @@ -1464,12 +1554,12 @@ ), 'drupal/permissions_by_term' => array ( - 'pretty_version' => '2.29.0', - 'version' => '2.29.0.0', + 'pretty_version' => '2.31.0', + 'version' => '2.31.0.0', 'aliases' => array ( ), - 'reference' => '8.x-2.29', + 'reference' => '8.x-2.31', ), 'drupal/piwik' => array ( @@ -1505,12 +1595,12 @@ ), 'drupal/recommended-project' => array ( - 'pretty_version' => '8.9.13.x-dev', - 'version' => '8.9.13.9999999-dev', + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', 'aliases' => array ( ), - 'reference' => '3ff7d617b5d6cfbf92444f52710a2523cc318d69', + 'reference' => 'ee54ac5beb8e6d50593b7ea3413e037c689b40e7', ), 'drupal/redirect' => array ( @@ -1523,12 +1613,12 @@ ), 'drupal/require_login' => array ( - 'pretty_version' => '2.1.0', - 'version' => '2.1.0.0', + 'pretty_version' => '2.4.0', + 'version' => '2.4.0.0', 'aliases' => array ( ), - 'reference' => '8.x-2.1', + 'reference' => '8.x-2.4', ), 'drupal/responsive_image' => array ( @@ -1652,6 +1742,15 @@ 0 => '8.9.13', ), ), + 'drupal/sticky' => + array ( + 'pretty_version' => '1.1.0', + 'version' => '1.1.0.0', + 'aliases' => + array ( + ), + 'reference' => '8.x-1.1', + ), 'drupal/syslog' => array ( 'replaced' => @@ -1811,12 +1910,12 @@ ), 'drupal/webform' => array ( - 'pretty_version' => '5.24.0', - 'version' => '5.24.0.0', + 'pretty_version' => '5.25.0', + 'version' => '5.25.0.0', 'aliases' => array ( ), - 'reference' => '8.x-5.24', + 'reference' => '8.x-5.25', ), 'drupal/webform_analysis' => array ( @@ -1838,8 +1937,8 @@ ), 'drupal/webform_ui' => array ( - 'pretty_version' => '5.24.0', - 'version' => '5.24.0.0', + 'pretty_version' => '5.25.0', + 'version' => '5.25.0.0', 'aliases' => array ( ), @@ -1888,12 +1987,12 @@ ), 'drush/drush' => array ( - 'pretty_version' => '8.4.6', - 'version' => '8.4.6.0', + 'pretty_version' => '8.4.8', + 'version' => '8.4.8.0', 'aliases' => array ( ), - 'reference' => '4e48e11d7fe858eebe6c2fad71650c977d3f8900', + 'reference' => 'b377b1896e344085d06bdbf671a465950a164d1e', ), 'easyrdf/easyrdf' => array ( @@ -1924,12 +2023,12 @@ ), 'gettext/gettext' => array ( - 'pretty_version' => 'v4.8.3', - 'version' => '4.8.3.0', + 'pretty_version' => 'v4.8.4', + 'version' => '4.8.4.0', 'aliases' => array ( ), - 'reference' => '57ff4fb16647e78e80a5909fe3c190f1c3110321', + 'reference' => '58bc0f7f37e78efb0f9758f93d4a0f669f0f84a1', ), 'gettext/languages' => array ( @@ -2122,12 +2221,12 @@ ), 'phpmailer/phpmailer' => array ( - 'pretty_version' => 'v6.2.0', - 'version' => '6.2.0.0', + 'pretty_version' => 'v6.3.0', + 'version' => '6.3.0.0', 'aliases' => array ( ), - 'reference' => 'e38888a75c070304ca5514197d4847a59a5c853f', + 'reference' => '4a08cf4cdd2c38d12ee2b9fa69e5d235f37a6dcb', ), 'psr/container' => array ( @@ -2179,12 +2278,12 @@ ), 'psy/psysh' => array ( - 'pretty_version' => 'v0.10.6', - 'version' => '0.10.6.0', + 'pretty_version' => 'v0.10.7', + 'version' => '0.10.7.0', 'aliases' => array ( ), - 'reference' => '6f990c19f91729de8b31e639d6e204ea59f19cf3', + 'reference' => 'a395af46999a12006213c0c8346c9445eb31640c', ), 'ralouphie/getallheaders' => array ( @@ -2290,12 +2389,12 @@ ), 'simplesamlphp/simplesamlphp-module-authorize' => array ( - 'pretty_version' => 'v0.9.2', - 'version' => '0.9.2.0', + 'pretty_version' => 'v0.9.3', + 'version' => '0.9.3.0', 'aliases' => array ( ), - 'reference' => 'c2607a5252ee1256b50ce7795e35513b116998d4', + 'reference' => '0593bfcb84fca9d9133f415246ab8ca51b412c92', ), 'simplesamlphp/simplesamlphp-module-authtwitter' => array ( @@ -2371,12 +2470,12 @@ ), 'simplesamlphp/simplesamlphp-module-discopower' => array ( - 'pretty_version' => 'v0.9.1', - 'version' => '0.9.1.0', + 'pretty_version' => 'v0.9.3', + 'version' => '0.9.3.0', 'aliases' => array ( ), - 'reference' => '006c0617610f1bae11cf4d17e8ce4c509239a60e', + 'reference' => 'c892926e8186d0a2c638f7032dfc30540c1f92fb', ), 'simplesamlphp/simplesamlphp-module-exampleattributeserver' => array ( @@ -2560,12 +2659,12 @@ ), 'symfony/config' => array ( - 'pretty_version' => 'v4.4.19', - 'version' => '4.4.19.0', + 'pretty_version' => 'v4.4.20', + 'version' => '4.4.20.0', 'aliases' => array ( ), - 'reference' => '2c4c7827a7e143f5cf375666641b0f448eab8802', + 'reference' => '98606c6fa1a8f55ff964ccdd704275bf5b9f71b3', ), 'symfony/console' => array ( @@ -2605,21 +2704,21 @@ ), 'symfony/filesystem' => array ( - 'pretty_version' => 'v5.2.3', - 'version' => '5.2.3.0', + 'pretty_version' => 'v5.2.4', + 'version' => '5.2.4.0', 'aliases' => array ( ), - 'reference' => '262d033b57c73e8b59cd6e68a45c528318b15038', + 'reference' => '710d364200997a5afde34d9fe57bd52f3cc1e108', ), 'symfony/finder' => array ( - 'pretty_version' => 'v4.4.19', - 'version' => '4.4.19.0', + 'pretty_version' => 'v4.4.20', + 'version' => '4.4.20.0', 'aliases' => array ( ), - 'reference' => '25d79cfccfc12e84e7a63a248c3f0720fdd92db6', + 'reference' => '2543795ab1570df588b9bbd31e1a2bd7037b94f6', ), 'symfony/http-foundation' => array ( @@ -2704,8 +2803,8 @@ ), 'symfony/polyfill-php80' => array ( - 'pretty_version' => 'v1.22.0', - 'version' => '1.22.0.0', + 'pretty_version' => 'v1.22.1', + 'version' => '1.22.1.0', 'aliases' => array ( ), @@ -2776,8 +2875,8 @@ ), 'symfony/var-dumper' => array ( - 'pretty_version' => 'v4.4.19', - 'version' => '4.4.19.0', + 'pretty_version' => 'v4.4.20', + 'version' => '4.4.20.0', 'aliases' => array ( ), @@ -2830,12 +2929,12 @@ ), 'webmozart/assert' => array ( - 'pretty_version' => '1.9.1', - 'version' => '1.9.1.0', + 'pretty_version' => '1.5.0', + 'version' => '1.5.0.0', 'aliases' => array ( ), - 'reference' => 'bafc69caeb4d49c39fd0779086c03a3738cbb389', + 'reference' => '88e6d84706d09a236046d686bbea96f07b3a34f4', ), 'webmozart/path-util' => array ( @@ -2857,12 +2956,12 @@ ), 'wikimedia/composer-merge-plugin' => array ( - 'pretty_version' => 'dev-feature/composer-v2', - 'version' => 'dev-feature/composer-v2', + 'pretty_version' => 'v2.0.1', + 'version' => '2.0.1.0', 'aliases' => array ( ), - 'reference' => '3f4c1e914be5ba7b9e84434a69f3bb835bff2ac1', + 'reference' => '8ca2ed8ab97c8ebce6b39d9943e9909bb4f18912', ), 'zendframework/zend-diactoros' => array ( diff --git a/vendor/composer/platform_check.php b/vendor/composer/platform_check.php index a28bc33a8..a8b98d5ce 100644 --- a/vendor/composer/platform_check.php +++ b/vendor/composer/platform_check.php @@ -5,36 +5,22 @@ $issues = array(); if (!(PHP_VERSION_ID >= 70205)) { - $issues[] = 'Your Composer dependencies require a PHP version ">= 7.2.5". You are running ' . PHP_VERSION . '.'; -} - -$missingExtensions = array(); -extension_loaded('ctype') || $missingExtensions[] = 'ctype'; -extension_loaded('curl') || $missingExtensions[] = 'curl'; -extension_loaded('date') || $missingExtensions[] = 'date'; -extension_loaded('dom') || $missingExtensions[] = 'dom'; -extension_loaded('filter') || $missingExtensions[] = 'filter'; -extension_loaded('gd') || $missingExtensions[] = 'gd'; -extension_loaded('hash') || $missingExtensions[] = 'hash'; -extension_loaded('json') || $missingExtensions[] = 'json'; -extension_loaded('libxml') || $missingExtensions[] = 'libxml'; -extension_loaded('mbstring') || $missingExtensions[] = 'mbstring'; -extension_loaded('openssl') || $missingExtensions[] = 'openssl'; -extension_loaded('pcre') || $missingExtensions[] = 'pcre'; -extension_loaded('pdo') || $missingExtensions[] = 'pdo'; -extension_loaded('session') || $missingExtensions[] = 'session'; -extension_loaded('simplexml') || $missingExtensions[] = 'simplexml'; -extension_loaded('spl') || $missingExtensions[] = 'spl'; -extension_loaded('tokenizer') || $missingExtensions[] = 'tokenizer'; -extension_loaded('xml') || $missingExtensions[] = 'xml'; -extension_loaded('xmlwriter') || $missingExtensions[] = 'xmlwriter'; -extension_loaded('zlib') || $missingExtensions[] = 'zlib'; - -if ($missingExtensions) { - $issues[] = 'Your Composer dependencies require the following PHP extensions to be installed: ' . implode(', ', $missingExtensions); + $issues[] = 'Your Composer dependencies require a PHP version ">= 7.2.5". You are running ' . PHP_VERSION . '.'; } if ($issues) { - echo 'Composer detected issues in your platform:' . "\n\n" . implode("\n", $issues); - exit(104); + if (!headers_sent()) { + header('HTTP/1.1 500 Internal Server Error'); + } + if (!ini_get('display_errors')) { + if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { + fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); + } elseif (!headers_sent()) { + echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; + } + } + trigger_error( + 'Composer detected issues in your platform: ' . implode(' ', $issues), + E_USER_ERROR + ); } diff --git a/vendor/drush/drush/commands/core/views.d8.drush.inc b/vendor/drush/drush/commands/core/views.d8.drush.inc index 601905822..009a1a165 100644 --- a/vendor/drush/drush/commands/core/views.d8.drush.inc +++ b/vendor/drush/drush/commands/core/views.d8.drush.inc @@ -68,7 +68,7 @@ function views_drush_command() { 'outputformat' => array( 'default' => 'table', 'pipe-format' => 'list', - 'field-default' => array('name', 'label', 'description', 'status', 'tag'), + 'fields-default' => array('name', 'label', 'description', 'status', 'tag'), 'field-labels' => array('name' => 'Machine Name', 'label' => 'Name', 'description' => 'Description', 'status' => 'Status', 'tag' => 'Tag'), 'output-data-type' => 'format-table', ), diff --git a/vendor/drush/drush/commands/pm/pm.drush.inc b/vendor/drush/drush/commands/pm/pm.drush.inc index 901cf5359..dc5e6f625 100644 --- a/vendor/drush/drush/commands/pm/pm.drush.inc +++ b/vendor/drush/drush/commands/pm/pm.drush.inc @@ -314,7 +314,8 @@ function pm_drush_command() { 'outputformat' => array( 'default' => 'table', 'pipe-format' => 'list', - 'field-labels' => array('package' => 'Package', 'name' => 'Name', 'type' => 'Type', 'status' => 'Status', 'version' => 'Version'), + 'fields-default' => array('package', 'name', 'type', 'status', 'version'), + 'field-labels' => array('package' => 'Package', 'project' => 'Project', 'name' => 'Name', 'display_name' => 'Display Name', 'type' => 'Type', 'status' => 'Status', 'version' => 'Version', 'path' => 'Path'), 'output-data-type' => 'format-table', ), 'aliases' => array('pml', 'pm:list'), @@ -946,9 +947,12 @@ function drush_pm_list() { } $row['package'] = $extension->info['package']; + $row['project'] = isset($extension->info['project']) ? $extension->info['project'] : ''; + $row['display_name'] = $extension->label; $row['name'] = $extension->label; $row['type'] = ucfirst(drush_extension_get_type($extension)); $row['status'] = ucfirst($status); + $row['path'] = drush_extension_get_path($extension); // Suppress notice when version is not present. $row['version'] = @$extension->info['version']; diff --git a/vendor/drush/drush/drush.info b/vendor/drush/drush/drush.info index 180dfc53f..12ea634de 100644 --- a/vendor/drush/drush/drush.info +++ b/vendor/drush/drush/drush.info @@ -1 +1 @@ -drush_version=8.4.6 +drush_version=8.4.8 diff --git a/vendor/drush/drush/includes/drush.inc b/vendor/drush/drush/includes/drush.inc index 17ca2b6c0..7c43e7741 100644 --- a/vendor/drush/drush/includes/drush.inc +++ b/vendor/drush/drush/includes/drush.inc @@ -1454,6 +1454,9 @@ function _drush_log_drupal_messages() { // This is a special case. PHP logs sql errors as 'User Warnings', not errors. drush_set_error('DRUSH_DRUPAL_ERROR_MESSAGE', preg_replace('/^user warning: /i', '', $error)); } + elseif (preg_match('/^deprecated function:/i', $error)) { + drush_log(preg_replace('/^deprecated function: /i', '', $error), LogLevel::WARNING); + } else { drush_set_error('DRUSH_DRUPAL_ERROR_MESSAGE', $error); } diff --git a/vendor/drush/drush/lib/Drush/Boot/DrupalBoot.php b/vendor/drush/drush/lib/Drush/Boot/DrupalBoot.php index 51d591ed7..f41bb1070 100644 --- a/vendor/drush/drush/lib/Drush/Boot/DrupalBoot.php +++ b/vendor/drush/drush/lib/Drush/Boot/DrupalBoot.php @@ -390,7 +390,7 @@ function bootstrap_drupal_site_validate_settings_present() { $conf_path = drush_bootstrap_value('conf_path', $this->conf_path(TRUE, TRUE)); $conf_file = "$conf_path/settings.php"; - if (!file_exists($conf_file) && !getenv('PRESSFLOW_SETTINGS')) { + if (!file_exists($conf_file) && !isset($_SERVER['PRESSFLOW_SETTINGS'])) { return drush_bootstrap_error('DRUPAL_SITE_SETTINGS_NOT_FOUND', dt("Could not find a Drupal settings.php file at !file.", array('!file' => $conf_file))); } diff --git a/vendor/drush/drush/tests/pmEnDisUnListInfoTest.php b/vendor/drush/drush/tests/pmEnDisUnListInfoTest.php index 2a77c38ce..80def093f 100644 --- a/vendor/drush/drush/tests/pmEnDisUnListInfoTest.php +++ b/vendor/drush/drush/tests/pmEnDisUnListInfoTest.php @@ -66,6 +66,14 @@ public function testEnDisUnList() { $this->assertEquals($output->{$key}, $value); } + // Check output fields in pm-list + $this->drush('pm-list', [], $options + ['format' => 'json']); + $extensionProperties = (array)$this->getOutputFromJSON(); + $moduleProperties = (array)$extensionProperties[$moduleToTest]; + $this->assertEquals($moduleToTest, $moduleProperties['project']); + $this->assertEquals('Enabled', $moduleProperties['status']); + $this->assertEquals('Module', $moduleProperties['type']); + // Test pm-projectinfo shows some project info. $this->drush('pm-projectinfo', array($moduleToTest), $options); $output = $this->getOutputFromJSON($moduleToTest); diff --git a/vendor/gettext/gettext/CHANGELOG.md b/vendor/gettext/gettext/CHANGELOG.md index 054e8d823..e06d81171 100644 --- a/vendor/gettext/gettext/CHANGELOG.md +++ b/vendor/gettext/gettext/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/). Previous releases are documented in [github releases](https://github.com/oscarotero/Gettext/releases) +## [4.8.4] - 2021-03-10 +### Fixed +- PHP 8 compatibilty [#266] + ## [4.8.3] - 2020-11-18 ### Fixed - Blade extractor for Laravel8/Jetstream [#261] @@ -160,7 +164,9 @@ Previous releases are documented in [github releases](https://github.com/oscarot [#238]: https://github.com/oscarotero/Gettext/issues/238 [#242]: https://github.com/oscarotero/Gettext/issues/242 [#261]: https://github.com/oscarotero/Gettext/issues/261 +[#266]: https://github.com/oscarotero/Gettext/issues/266 +[4.8.4]: https://github.com/oscarotero/Gettext/compare/v4.8.3...v4.8.4 [4.8.3]: https://github.com/oscarotero/Gettext/compare/v4.8.2...v4.8.3 [4.8.2]: https://github.com/oscarotero/Gettext/compare/v4.8.1...v4.8.2 [4.8.1]: https://github.com/oscarotero/Gettext/compare/v4.8.0...v4.8.1 diff --git a/vendor/gettext/gettext/src/Utils/FunctionsScanner.php b/vendor/gettext/gettext/src/Utils/FunctionsScanner.php index 503c090f3..6d3336d83 100644 --- a/vendor/gettext/gettext/src/Utils/FunctionsScanner.php +++ b/vendor/gettext/gettext/src/Utils/FunctionsScanner.php @@ -30,7 +30,7 @@ public function saveGettextFunctions($translations, array $options) $translations = is_array($translations) ? $translations : [$translations]; /** @var Translations[] $translationByDomain [domain => translations, ..] */ - $translationByDomain = array_reduce($translations, function (&$carry, Translations $translations) { + $translationByDomain = array_reduce($translations, function ($carry, Translations $translations) { $carry[$translations->getDomain()] = $translations; return $carry; }, []); diff --git a/vendor/phpmailer/phpmailer/README.md b/vendor/phpmailer/phpmailer/README.md index d9cbbaaf9..45da2ec32 100644 --- a/vendor/phpmailer/phpmailer/README.md +++ b/vendor/phpmailer/phpmailer/README.md @@ -1,46 +1,45 @@  -# PHPMailer - A full-featured email creation and transfer class for PHP +# PHPMailer – A full-featured email creation and transfer class for PHP -Build status: [](https://travis-ci.org/PHPMailer/PHPMailer) -[](https://scrutinizer-ci.com/g/PHPMailer/PHPMailer/) -[](https://scrutinizer-ci.com/g/PHPMailer/PHPMailer/) +[](https://github.com/PHPMailer/PHPMailer/actions) [](https://packagist.org/packages/phpmailer/phpmailer) [](https://packagist.org/packages/phpmailer/phpmailer) [](https://packagist.org/packages/phpmailer/phpmailer) [](https://packagist.org/packages/phpmailer/phpmailer) [](https://phpmailer.github.io/PHPMailer/) -[](https://packagist.org/packages/phpmailer/phpmailer) [](https://packagist.org/packages/phpmailer/phpmailer) [](https://packagist.org/packages/phpmailer/phpmailer) [](https://packagist.org/packages/phpmailer/phpmailer) [](http://phpmailer.github.io/PHPMailer/) - -## Class Features +## Features - Probably the world's most popular code for sending email from PHP! - Used by many open-source projects: WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomla! and many more -- Integrated SMTP support - send without a local mail server +- Integrated SMTP support – send without a local mail server - Send emails with multiple To, CC, BCC and Reply-to addresses - Multipart/alternative emails for mail clients that do not read HTML email - Add attachments, including inline - Support for UTF-8 content and 8bit, base64, binary, and quoted-printable encodings -- SMTP authentication with LOGIN, PLAIN, CRAM-MD5, and XOAUTH2 mechanisms over SSL and SMTP+STARTTLS transports +- SMTP authentication with LOGIN, PLAIN, CRAM-MD5, and XOAUTH2 mechanisms over SMTPS and SMTP+STARTTLS transports - Validates email addresses automatically -- Protect against header injection attacks +- Protects against header injection attacks - Error messages in over 50 languages! - DKIM and S/MIME signing support -- Compatible with PHP 5.5 and later +- Compatible with PHP 5.5 and later, including PHP 8.0 - Namespaced to prevent name clashes - Much more! ## Why you might need it -Many PHP developers need to send email from their code. The only PHP function that supports this is [`mail()`](https://www.php.net/manual/en/function.mail.php). However, it does not provide any assistance for making use of popular features such as encryption, authentication, HTML messages, and attachments. +Many PHP developers need to send email from their code. The only PHP function that supports this directly is [`mail()`](https://www.php.net/manual/en/function.mail.php). However, it does not provide any assistance for making use of popular features such as encryption, authentication, HTML messages, and attachments. + +Formatting email correctly is surprisingly difficult. There are myriad overlapping (and conflicting) standards, requiring tight adherence to horribly complicated formatting and encoding rules – the vast majority of code that you'll find online that uses the `mail()` function directly is just plain wrong, if not unsafe! -Formatting email correctly is surprisingly difficult. There are myriad overlapping RFCs, requiring tight adherence to horribly complicated formatting and encoding rules – the vast majority of code that you'll find online that uses the `mail()` function directly is just plain wrong! -*Please* don't be tempted to do it yourself – if you don't use PHPMailer, there are many other excellent libraries that you should look at before rolling your own. Try [SwiftMailer](https://swiftmailer.symfony.com/), [Zend/Mail](https://zendframework.github.io/zend-mail/), [ZetaComponents](https://github.com/zetacomponents/Mail) etc. +The PHP `mail()` function usually sends via a local mail server, typically fronted by a `sendmail` binary on Linux, BSD, and macOS platforms, however, Windows usually doesn't include a local mail server; PHPMailer's integrated SMTP client allows email sending on all platforms without needing a local mail server. Be aware though, that the `mail()` function should be avoided when possible; it's both faster and [safer](https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html) to use SMTP to localhost. -The PHP `mail()` function usually sends via a local mail server, typically fronted by a `sendmail` binary on Linux, BSD, and macOS platforms, however, Windows usually doesn't include a local mail server; PHPMailer's integrated SMTP implementation allows email sending on Windows platforms without a local mail server. +*Please* don't be tempted to do it yourself – if you don't use PHPMailer, there are many other excellent libraries that +you should look at before rolling your own. Try [SwiftMailer](https://swiftmailer.symfony.com/) +, [Laminas/Mail](https://docs.laminas.dev/laminas-mail/), [ZetaComponents](https://github.com/zetacomponents/Mail) etc. ## License -This software is distributed under the [LGPL 2.1](http://www.gnu.org/licenses/lgpl-2.1.html) license, along with the [GPL Cooperation Commitment](https://gplcc.github.io/gplcc/). Please read LICENSE for information on the software availability and distribution. +This software is distributed under the [LGPL 2.1](http://www.gnu.org/licenses/lgpl-2.1.html) license, along with the [GPL Cooperation Commitment](https://gplcc.github.io/gplcc/). Please read [LICENSE](https://github.com/PHPMailer/PHPMailer/blob/master/LICENSE) for information on the software availability and distribution. ## Installation & loading PHPMailer is available on [Packagist](https://packagist.org/packages/phpmailer/phpmailer) (using semantic versioning), and installation via [Composer](https://getcomposer.org) is the recommended way to install PHPMailer. Just add this line to your `composer.json` file: ```json -"phpmailer/phpmailer": "~6.1" +"phpmailer/phpmailer": "^6.2" ``` or run @@ -53,7 +52,8 @@ Note that the `vendor` folder and the `vendor/autoload.php` script are generated If you want to use the Gmail XOAUTH2 authentication class, you will also need to add a dependency on the `league/oauth2-client` package in your `composer.json`. -Alternatively, if you're not using Composer, copy the contents of the PHPMailer folder into one of the `include_path` directories specified in your PHP configuration and load each class file manually: +Alternatively, if you're not using Composer, you +can [download PHPMailer as a zip file](https://github.com/PHPMailer/PHPMailer/archive/master.zip), (note that docs and examples are not included in the zip file), then copy the contents of the PHPMailer folder into one of the `include_path` directories specified in your PHP configuration and load each class file manually: ```php <?php @@ -65,60 +65,58 @@ require 'path/to/PHPMailer/src/PHPMailer.php'; require 'path/to/PHPMailer/src/SMTP.php'; ``` -If you're not using the `SMTP` class explicitly (you're probably not), you don't need a `use` line for the SMTP class. - -If you don't speak git or just want a tarball, click the 'zip' button on the right of the project page in GitHub, though note that docs and examples are not included in the tarball. +If you're not using the `SMTP` class explicitly (you're probably not), you don't need a `use` line for the SMTP class. Even if you're not using exceptions, you do still need to load the `Exception` class as it is used internally. ## Legacy versions -PHPMailer 5.2 (which is compatible with PHP 5.0 - 7.0) is no longer being supported, even for security updates. You will find the latest version of 5.2 in the [5.2-stable branch](https://github.com/PHPMailer/PHPMailer/tree/5.2-stable). If you're using PHP 5.5 or later (which you should be), switch to the 6.x releases. +PHPMailer 5.2 (which is compatible with PHP 5.0 — 7.0) is no longer supported, even for security updates. You will find the latest version of 5.2 in the [5.2-stable branch](https://github.com/PHPMailer/PHPMailer/tree/5.2-stable). If you're using PHP 5.5 or later (which you should be), switch to the 6.x releases. ### Upgrading from 5.2 The biggest changes are that source files are now in the `src/` folder, and PHPMailer now declares the namespace `PHPMailer\PHPMailer`. This has several important effects – [read the upgrade guide](https://github.com/PHPMailer/PHPMailer/tree/master/UPGRADING.md) for more details. ### Minimal installation -While installing the entire package manually or with Composer is simple, convenient, and reliable, you may want to include only vital files in your project. At the very least you will need [src/PHPMailer.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/PHPMailer.php). If you're using SMTP, you'll need [src/SMTP.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/SMTP.php), and if you're using POP-before SMTP, you'll need [src/POP3.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/POP3.php). You can skip the [language](https://github.com/PHPMailer/PHPMailer/tree/master/language/) folder if you're not showing errors to users and can make do with English-only errors. If you're using XOAUTH2 you will need [src/OAuth.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/OAuth.php) as well as the Composer dependencies for the services you wish to authenticate with. Really, it's much easier to use Composer! +While installing the entire package manually or with Composer is simple, convenient, and reliable, you may want to include only vital files in your project. At the very least you will need [src/PHPMailer.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/PHPMailer.php). If you're using SMTP, you'll need [src/SMTP.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/SMTP.php), and if you're using POP-before SMTP (*very* unlikely!), you'll need [src/POP3.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/POP3.php). You can skip the [language](https://github.com/PHPMailer/PHPMailer/tree/master/language/) folder if you're not showing errors to users and can make do with English-only errors. If you're using XOAUTH2 you will need [src/OAuth.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/OAuth.php) as well as the Composer dependencies for the services you wish to authenticate with. Really, it's much easier to use Composer! ## A Simple Example ```php <?php -// Import PHPMailer classes into the global namespace -// These must be at the top of your script, not inside a function +//Import PHPMailer classes into the global namespace +//These must be at the top of your script, not inside a function use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\SMTP; use PHPMailer\PHPMailer\Exception; -// Load Composer's autoloader +//Load Composer's autoloader require 'vendor/autoload.php'; -// Instantiation and passing `true` enables exceptions +//Instantiation and passing `true` enables exceptions $mail = new PHPMailer(true); try { //Server settings - $mail->SMTPDebug = SMTP::DEBUG_SERVER; // Enable verbose debug output - $mail->isSMTP(); // Send using SMTP - $mail->Host = 'smtp1.example.com'; // Set the SMTP server to send through - $mail->SMTPAuth = true; // Enable SMTP authentication - $mail->Username = 'user@example.com'; // SMTP username - $mail->Password = 'secret'; // SMTP password - $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` encouraged - $mail->Port = 587; // TCP port to connect to, use 465 for `PHPMailer::ENCRYPTION_SMTPS` above + $mail->SMTPDebug = SMTP::DEBUG_SERVER; //Enable verbose debug output + $mail->isSMTP(); //Send using SMTP + $mail->Host = 'smtp.example.com'; //Set the SMTP server to send through + $mail->SMTPAuth = true; //Enable SMTP authentication + $mail->Username = 'user@example.com'; //SMTP username + $mail->Password = 'secret'; //SMTP password + $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; //Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` encouraged + $mail->Port = 587; //TCP port to connect to, use 465 for `PHPMailer::ENCRYPTION_SMTPS` above //Recipients $mail->setFrom('from@example.com', 'Mailer'); - $mail->addAddress('joe@example.net', 'Joe User'); // Add a recipient - $mail->addAddress('ellen@example.com'); // Name is optional + $mail->addAddress('joe@example.net', 'Joe User'); //Add a recipient + $mail->addAddress('ellen@example.com'); //Name is optional $mail->addReplyTo('info@example.com', 'Information'); $mail->addCC('cc@example.com'); $mail->addBCC('bcc@example.com'); - // Attachments - $mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments - $mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name + //Attachments + $mail->addAttachment('/var/tmp/file.tar.gz'); //Add attachments + $mail->addAttachment('/tmp/image.jpg', 'new.jpg'); //Optional name - // Content - $mail->isHTML(true); // Set email format to HTML + //Content + $mail->isHTML(true); //Set email format to HTML $mail->Subject = 'Here is the subject'; $mail->Body = 'This is the HTML message body <b>in bold!</b>'; $mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; @@ -130,7 +128,7 @@ try { } ``` -You'll find plenty more to play with in the [examples](https://github.com/PHPMailer/PHPMailer/tree/master/examples) folder. +You'll find plenty to play with in the [examples](https://github.com/PHPMailer/PHPMailer/tree/master/examples) folder, which covers many common scenarios including sending through gmail, building contact forms, sending to mailing lists, and more. If you are re-using the instance (e.g. when sending to a mailing list), you may need to clear the recipient list to avoid sending duplicate messages. See [the mailing list example](https://github.com/PHPMailer/PHPMailer/blob/master/examples/mailing_list.phps) for further guidance. @@ -140,43 +138,43 @@ That's it. You should now be ready to use PHPMailer! PHPMailer defaults to English, but in the [language](https://github.com/PHPMailer/PHPMailer/tree/master/language/) folder you'll find many translations for PHPMailer error messages that you may encounter. Their filenames contain [ISO 639-1](http://en.wikipedia.org/wiki/ISO_639-1) language code for the translations, for example `fr` for French. To specify a language, you need to tell PHPMailer which one to use, like this: ```php -// To load the French version +//To load the French version $mail->setLanguage('fr', '/optional/path/to/language/directory/'); ``` -We welcome corrections and new languages - if you're looking for corrections to do, run the [PHPMailerLangTest.php](https://github.com/PHPMailer/PHPMailer/tree/master/test/PHPMailerLangTest.php) script in the tests folder and it will show any missing translations. +We welcome corrections and new languages – if you're looking for corrections to do, run the [PHPMailerLangTest.php](https://github.com/PHPMailer/PHPMailer/tree/master/test/PHPMailerLangTest.php) script in the tests folder and it will show any missing translations. ## Documentation -Start reading at the [GitHub wiki](https://github.com/PHPMailer/PHPMailer/wiki). If you're having trouble, this should be the first place you look as it's the most frequently updated. +Start reading at the [GitHub wiki](https://github.com/PHPMailer/PHPMailer/wiki). If you're having trouble, head for [the troubleshooting guide](https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting) as it's frequently updated. Examples of how to use PHPMailer for common scenarios can be found in the [examples](https://github.com/PHPMailer/PHPMailer/tree/master/examples) folder. If you're looking for a good starting point, we recommend you start with [the Gmail example](https://github.com/PHPMailer/PHPMailer/tree/master/examples/gmail.phps). -Note that in order to reduce PHPMailer's deployed code footprint, the examples are no longer included if you load PHPMailer via Composer or via [GitHub's zip file download](https://github.com/PHPMailer/PHPMailer/archive/master.zip), so you'll need to either clone the git repository or use the above links to get to the examples directly. +To reduce PHPMailer's deployed code footprint, examples are not included if you load PHPMailer via Composer or via [GitHub's zip file download](https://github.com/PHPMailer/PHPMailer/archive/master.zip), so you'll need to either clone the git repository or use the above links to get to the examples directly. -Complete generated API documentation is [available online](http://phpmailer.github.io/PHPMailer/). +Complete generated API documentation is [available online](https://phpmailer.github.io/PHPMailer/). -You can generate complete API-level documentation by running `phpdoc` in the top-level folder, and documentation will appear in the `docs` folder, though you'll need to have [PHPDocumentor](http://www.phpdoc.org) installed. You may find [the unit tests](https://github.com/PHPMailer/PHPMailer/blob/master/test/PHPMailerTest.php) a good source of how to do various operations such as encryption. +You can generate complete API-level documentation by running `phpdoc` in the top-level folder, and documentation will appear in the `docs` folder, though you'll need to have [PHPDocumentor](http://www.phpdoc.org) installed. You may find [the unit tests](https://github.com/PHPMailer/PHPMailer/blob/master/test/PHPMailerTest.php) a good reference for how to do various operations such as encryption. If the documentation doesn't cover what you need, search the [many questions on Stack Overflow](http://stackoverflow.com/questions/tagged/phpmailer), and before you ask a question about "SMTP Error: Could not connect to SMTP host.", [read the troubleshooting guide](https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting). ## Tests -There is a PHPUnit test script in the [test](https://github.com/PHPMailer/PHPMailer/tree/master/test/) folder. PHPMailer uses PHPUnit 4.8 - we would use 5.x but we need to run on PHP 5.5. +[PHPMailer tests](https://github.com/PHPMailer/PHPMailer/tree/master/test/) use PHPUnit 9, with [a polyfill](https://github.com/Yoast/PHPUnit-Polyfills) to let 9-style tests run on older PHPUnit and PHP versions. -Build status: [](https://travis-ci.org/PHPMailer/PHPMailer) +[](https://github.com/PHPMailer/PHPMailer/actions) If this isn't passing, is there something you can do to help? ## Security Please disclose any vulnerabilities found responsibly – report security issues to the maintainers privately. -See [SECURITY](https://github.com/PHPMailer/PHPMailer/tree/master/SECURITY.md) for details on security issues. +See [SECURITY](https://github.com/PHPMailer/PHPMailer/tree/master/SECURITY.md) and [PHPMailer's security advisories on GitHub](https://github.com/PHPMailer/PHPMailer/security). ## Contributing Please submit bug reports, suggestions and pull requests to the [GitHub issue tracker](https://github.com/PHPMailer/PHPMailer/issues). We're particularly interested in fixing edge-cases, expanding test coverage and updating translations. -If you found a mistake in the docs, or want to add something, go ahead and amend the wiki - anyone can edit it. +If you found a mistake in the docs, or want to add something, go ahead and amend the wiki – anyone can edit it. If you have git clones from prior to the move to the PHPMailer GitHub organisation, you'll need to update any remote URLs referencing the old GitHub location with a command like this from within your clone: @@ -187,27 +185,28 @@ git remote set-url upstream https://github.com/PHPMailer/PHPMailer.git Please *don't* use the SourceForge or Google Code projects any more; they are obsolete and no longer maintained. ## Sponsorship -Development time and resources for PHPMailer are provided by [Smartmessages.net](https://info.smartmessages.net/), a powerful email marketing system. +Development time and resources for PHPMailer are provided by [Smartmessages.net](https://info.smartmessages.net/), the world's only privacy-first email marketing system. + +<a href="https://info.smartmessages.net/"><img src="https://www.smartmessages.net/img/smartmessages-logo.svg" width="550" alt="Smartmessages.net privacy-first email marketing logo"></a> -<a href="https://info.smartmessages.net/"><img src="https://www.smartmessages.net/img/smartmessages-logo.svg" width="250" height="28" alt="Smartmessages email marketing"></a> -Other contributions are gladly received, whether in beer 🍺, T-shirts 👕, Amazon wishlist raids, or cold, hard cash 💰. If you'd like to donate to say "thank you" to maintainers or contributors, please contact them through individual profile pages via [the contributors page](https://github.com/PHPMailer/PHPMailer/graphs/contributors). +Contributions are very welcome, whether in beer 🍺, T-shirts 👕, or cold, hard cash 💰. Sponsorship through GitHub is a simple and convenient way to say "thank you" to PHPMailer's maintainers and contributors – just click the "Sponsor" button [on the project page](https://github.com/PHPMailer/PHPMailer). ## Changelog See [changelog](changelog.md). ## History - PHPMailer was originally written in 2001 by Brent R. Matzelle as a [SourceForge project](http://sourceforge.net/projects/phpmailer/). -- Marcus Bointon (coolbru on SF) and Andy Prevost (codeworxtech) took over the project in 2004. +- [Marcus Bointon](https://github.com/Synchro) (`coolbru` on SF) and Andy Prevost (`codeworxtech`) took over the project in 2004. - Became an Apache incubator project on Google Code in 2010, managed by Jim Jagielski. -- Marcus created his fork on [GitHub](https://github.com/Synchro/PHPMailer) in 2008. +- Marcus created [his fork on GitHub](https://github.com/Synchro/PHPMailer) in 2008. - Jim and Marcus decide to join forces and use GitHub as the canonical and official repo for PHPMailer in 2013. -- PHPMailer moves to the [PHPMailer organisation](https://github.com/PHPMailer) on GitHub in 2013. +- PHPMailer moves to [the PHPMailer organisation](https://github.com/PHPMailer) on GitHub in 2013. ### What's changed since moving from SourceForge? - Official successor to the SourceForge and Google Code projects. - Test suite. -- Continuous integration with Travis-CI. +- Continuous integration with Github Actions. - Composer support. - Public development. - Additional languages and language strings. diff --git a/vendor/phpmailer/phpmailer/VERSION b/vendor/phpmailer/phpmailer/VERSION index 4ac4fded4..e7e42a4b5 100644 --- a/vendor/phpmailer/phpmailer/VERSION +++ b/vendor/phpmailer/phpmailer/VERSION @@ -1 +1 @@ -6.2.0 \ No newline at end of file +6.3.0 \ No newline at end of file diff --git a/vendor/phpmailer/phpmailer/get_oauth_token.php b/vendor/phpmailer/phpmailer/get_oauth_token.php index 560d36458..ad8c5a621 100644 --- a/vendor/phpmailer/phpmailer/get_oauth_token.php +++ b/vendor/phpmailer/phpmailer/get_oauth_token.php @@ -38,11 +38,11 @@ * Plenty to choose from here: * @see http://oauth2-client.thephpleague.com/providers/thirdparty/ */ -// @see https://github.com/thephpleague/oauth2-google +//@see https://github.com/thephpleague/oauth2-google use League\OAuth2\Client\Provider\Google; -// @see https://packagist.org/packages/hayageek/oauth2-yahoo +//@see https://packagist.org/packages/hayageek/oauth2-yahoo use Hayageek\OAuth2\Client\Provider\Yahoo; -// @see https://github.com/stevenmaguire/oauth2-microsoft +//@see https://github.com/stevenmaguire/oauth2-microsoft use Stevenmaguire\OAuth2\Client\Provider\Microsoft; if (!isset($_GET['code']) && !isset($_GET['provider'])) { @@ -121,26 +121,26 @@ } if (!isset($_GET['code'])) { - // If we don't have an authorization code then get one + //If we don't have an authorization code then get one $authUrl = $provider->getAuthorizationUrl($options); $_SESSION['oauth2state'] = $provider->getState(); header('Location: ' . $authUrl); exit; -// Check given state against previously stored one to mitigate CSRF attack + //Check given state against previously stored one to mitigate CSRF attack } elseif (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) { unset($_SESSION['oauth2state']); unset($_SESSION['provider']); exit('Invalid state'); } else { unset($_SESSION['provider']); - // Try to get an access token (using the authorization code grant) + //Try to get an access token (using the authorization code grant) $token = $provider->getAccessToken( 'authorization_code', [ 'code' => $_GET['code'] ] ); - // Use this to interact with an API on the users behalf - // Use this to get a new access token if the old one expires + //Use this to interact with an API on the users behalf + //Use this to get a new access token if the old one expires echo 'Refresh Token: ', $token->getRefreshToken(); } diff --git a/vendor/phpmailer/phpmailer/language/phpmailer.lang-cs.php b/vendor/phpmailer/phpmailer/language/phpmailer.lang-cs.php index 55bdd9c89..e770a1a26 100644 --- a/vendor/phpmailer/phpmailer/language/phpmailer.lang-cs.php +++ b/vendor/phpmailer/phpmailer/language/phpmailer.lang-cs.php @@ -16,6 +16,8 @@ $PHPMAILER_LANG['from_failed'] = 'Následující adresa odesílatele je nesprávná: '; $PHPMAILER_LANG['instantiate'] = 'Nelze vytvořit instanci emailové funkce.'; $PHPMAILER_LANG['invalid_address'] = 'Neplatná adresa: '; +$PHPMAILER_LANG['invalid_hostentry'] = 'Záznam hostitele je nesprávný: '; +$PHPMAILER_LANG['invalid_host'] = 'Hostitel je nesprávný: '; $PHPMAILER_LANG['mailer_not_supported'] = ' mailer není podporován.'; $PHPMAILER_LANG['provide_address'] = 'Musíte zadat alespoň jednu emailovou adresu příjemce.'; $PHPMAILER_LANG['recipients_failed'] = 'Chyba SMTP: Následující adresy příjemců nejsou správně: '; diff --git a/vendor/phpmailer/phpmailer/language/phpmailer.lang-sk.php b/vendor/phpmailer/phpmailer/language/phpmailer.lang-sk.php index a1cfb2889..028f5bc49 100644 --- a/vendor/phpmailer/phpmailer/language/phpmailer.lang-sk.php +++ b/vendor/phpmailer/phpmailer/language/phpmailer.lang-sk.php @@ -18,6 +18,8 @@ $PHPMAILER_LANG['from_failed'] = 'Následujúca adresa From je nesprávna: '; $PHPMAILER_LANG['instantiate'] = 'Nedá sa vytvoriť inštancia emailovej funkcie.'; $PHPMAILER_LANG['invalid_address'] = 'Neodoslané, emailová adresa je nesprávna: '; +$PHPMAILER_LANG['invalid_hostentry'] = 'Záznam hostiteľa je nesprávny: '; +$PHPMAILER_LANG['invalid_host'] = 'Hostiteľ je nesprávny: '; $PHPMAILER_LANG['mailer_not_supported'] = ' emailový klient nieje podporovaný.'; $PHPMAILER_LANG['provide_address'] = 'Musíte zadať aspoň jednu emailovú adresu príjemcu.'; $PHPMAILER_LANG['recipients_failed'] = 'SMTP Error: Adresy príjemcov niesu správne '; diff --git a/vendor/phpmailer/phpmailer/phpunit.xml.dist b/vendor/phpmailer/phpmailer/phpunit.xml.dist new file mode 100644 index 000000000..c68df9652 --- /dev/null +++ b/vendor/phpmailer/phpmailer/phpunit.xml.dist @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<phpunit + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/8.5/phpunit.xsd" + backupGlobals="true" + bootstrap="vendor/autoload.php" + verbose="true" + colors="true" + forceCoversAnnotation="false" + > + <testsuites> + <testsuite name="PHPMailerTests"> + <directory>./test/</directory> + </testsuite> + </testsuites> + <listeners> + <listener class="PHPMailer\Test\DebugLogTestListener" /> + </listeners> + <groups> + <exclude> + <group>languages</group> + <group>pop3</group> + </exclude> + </groups> + <filter> + <whitelist addUncoveredFilesFromWhitelist="true"> + <directory suffix=".php">./src</directory> + </whitelist> + </filter> + <logging> + <log type="coverage-text" target="php://stdout" showUncoveredFiles="true"/> + <log type="coverage-clover" target="build/logs/clover.xml"/> + <log type="junit" target="build/logs/junit.xml"/> + </logging> +</phpunit> diff --git a/vendor/phpmailer/phpmailer/src/OAuth.php b/vendor/phpmailer/phpmailer/src/OAuth.php index 07fde4c81..c93d0be1b 100644 --- a/vendor/phpmailer/phpmailer/src/OAuth.php +++ b/vendor/phpmailer/phpmailer/src/OAuth.php @@ -123,7 +123,7 @@ protected function getToken() */ public function getOauth64() { - // Get a new token if it's not available or has expired + //Get a new token if it's not available or has expired if (null === $this->oauthToken || $this->oauthToken->hasExpired()) { $this->oauthToken = $this->getToken(); } diff --git a/vendor/phpmailer/phpmailer/src/PHPMailer.php b/vendor/phpmailer/phpmailer/src/PHPMailer.php index c8fc1a824..62553fd46 100644 --- a/vendor/phpmailer/phpmailer/src/PHPMailer.php +++ b/vendor/phpmailer/phpmailer/src/PHPMailer.php @@ -748,7 +748,7 @@ class PHPMailer * * @var string */ - const VERSION = '6.2.0'; + const VERSION = '6.3.0'; /** * Error severity: message only, continue processing. @@ -862,18 +862,25 @@ private function mailPassthru($to, $subject, $body, $header, $params) $subject = $this->encodeHeader($this->secureHeader($subject)); } //Calling mail() with null params breaks + $this->edebug('Sending with mail()'); + $this->edebug('Sendmail path: ' . ini_get('sendmail_path')); + $this->edebug("Envelope sender: {$this->Sender}"); + $this->edebug("To: {$to}"); + $this->edebug("Subject: {$subject}"); + $this->edebug("Headers: {$header}"); if (!$this->UseSendmailOptions || null === $params) { $result = @mail($to, $subject, $body, $header); } else { + $this->edebug("Additional params: {$params}"); $result = @mail($to, $subject, $body, $header, $params); } - + $this->edebug('Result: ' . ($result ? 'true' : 'false')); return $result; } /** - * Output debugging info via user-defined method. - * Only generates output if SMTP debug output is enabled (@see SMTP::$do_debug). + * Output debugging info via a user-defined method. + * Only generates output if debug output is enabled. * * @see PHPMailer::$Debugoutput * @see PHPMailer::$SMTPDebug @@ -1070,7 +1077,7 @@ protected function addOrEnqueueAnAddress($kind, $address, $name) $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim $pos = strrpos($address, '@'); if (false === $pos) { - // At-sign is missing. + //At-sign is missing. $error_message = sprintf( '%s (%s): %s', $this->lang('invalid_address'), @@ -1086,7 +1093,7 @@ protected function addOrEnqueueAnAddress($kind, $address, $name) return false; } $params = [$kind, $address, $name]; - // Enqueue addresses with IDN until we know the PHPMailer::$CharSet. + //Enqueue addresses with IDN until we know the PHPMailer::$CharSet. if (static::idnSupported() && $this->has8bitChars(substr($address, ++$pos))) { if ('Reply-To' !== $kind) { if (!array_key_exists($address, $this->RecipientsQueue)) { @@ -1103,7 +1110,7 @@ protected function addOrEnqueueAnAddress($kind, $address, $name) return false; } - // Immediately add standard addresses without IDN. + //Immediately add standard addresses without IDN. return call_user_func_array([$this, 'addAnAddress'], $params); } @@ -1191,6 +1198,11 @@ public static function parseAddresses($addrstr, $useimap = true) $address->mailbox . '@' . $address->host ) ) { + //Decode the name part if it's present and encoded + if (property_exists($address, 'personal') && preg_match('/^=\?.*\?=$/', $address->personal)) { + $address->personal = mb_decode_mimeheader($address->personal); + } + $addresses[] = [ 'name' => (property_exists($address, 'personal') ? $address->personal : ''), 'address' => $address->mailbox . '@' . $address->host, @@ -1214,9 +1226,15 @@ public static function parseAddresses($addrstr, $useimap = true) } else { list($name, $email) = explode('<', $address); $email = trim(str_replace('>', '', $email)); + $name = trim($name); if (static::validateAddress($email)) { + //If this name is encoded, decode it + if (preg_match('/^=\?.*\?=$/', $name)) { + $name = mb_decode_mimeheader($name); + } $addresses[] = [ - 'name' => trim(str_replace(['"', "'"], '', $name)), + //Remove any surrounding quotes and spaces from the name + 'name' => trim($name, '\'" '), 'address' => $email, ]; } @@ -1242,7 +1260,7 @@ public function setFrom($address, $name = '', $auto = true) { $address = trim($address); $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim - // Don't validate now addresses with IDN. Will be done in send(). + //Don't validate now addresses with IDN. Will be done in send(). $pos = strrpos($address, '@'); if ( (false === $pos) @@ -1395,7 +1413,7 @@ public static function idnSupported() */ public function punyencodeAddress($address) { - // Verify we have required functions, CharSet, and at-sign. + //Verify we have required functions, CharSet, and at-sign. $pos = strrpos($address, '@'); if ( !empty($this->CharSet) && @@ -1403,16 +1421,20 @@ public function punyencodeAddress($address) static::idnSupported() ) { $domain = substr($address, ++$pos); - // Verify CharSet string is a valid one, and domain properly encoded in this CharSet. + //Verify CharSet string is a valid one, and domain properly encoded in this CharSet. if ($this->has8bitChars($domain) && @mb_check_encoding($domain, $this->CharSet)) { - $domain = mb_convert_encoding($domain, 'UTF-8', $this->CharSet); + //Convert the domain from whatever charset it's in to UTF-8 + $domain = mb_convert_encoding($domain, self::CHARSET_UTF8, $this->CharSet); //Ignore IDE complaints about this line - method signature changed in PHP 5.4 $errorcode = 0; if (defined('INTL_IDNA_VARIANT_UTS46')) { - $punycode = idn_to_ascii($domain, $errorcode, INTL_IDNA_VARIANT_UTS46); + //Use the current punycode standard (appeared in PHP 7.2) + $punycode = idn_to_ascii($domain, $errorcode, \INTL_IDNA_VARIANT_UTS46); } elseif (defined('INTL_IDNA_VARIANT_2003')) { - $punycode = idn_to_ascii($domain, $errorcode, INTL_IDNA_VARIANT_2003); + //Fall back to this old, deprecated/removed encoding + $punycode = idn_to_ascii($domain, $errorcode, \INTL_IDNA_VARIANT_2003); } else { + //Fall back to a default we don't know about $punycode = idn_to_ascii($domain, $errorcode); } if (false !== $punycode) { @@ -1462,7 +1484,7 @@ public function preSend() { if ( 'smtp' === $this->Mailer - || ('mail' === $this->Mailer && (PHP_VERSION_ID >= 80000 || stripos(PHP_OS, 'WIN') === 0)) + || ('mail' === $this->Mailer && (\PHP_VERSION_ID >= 80000 || stripos(PHP_OS, 'WIN') === 0)) ) { //SMTP mandates RFC-compliant line endings //and it's also used with mail() on Windows @@ -1474,8 +1496,8 @@ public function preSend() //Check for buggy PHP versions that add a header with an incorrect line break if ( 'mail' === $this->Mailer - && ((PHP_VERSION_ID >= 70000 && PHP_VERSION_ID < 70017) - || (PHP_VERSION_ID >= 70100 && PHP_VERSION_ID < 70103)) + && ((\PHP_VERSION_ID >= 70000 && \PHP_VERSION_ID < 70017) + || (\PHP_VERSION_ID >= 70100 && \PHP_VERSION_ID < 70103)) && ini_get('mail.add_x_header') === '1' && stripos(PHP_OS, 'WIN') === 0 ) { @@ -1488,10 +1510,10 @@ public function preSend() } try { - $this->error_count = 0; // Reset errors + $this->error_count = 0; //Reset errors $this->mailHeader = ''; - // Dequeue recipient and Reply-To addresses with IDN + //Dequeue recipient and Reply-To addresses with IDN foreach (array_merge($this->RecipientsQueue, $this->ReplyToQueue) as $params) { $params[1] = $this->punyencodeAddress($params[1]); call_user_func_array([$this, 'addAnAddress'], $params); @@ -1500,7 +1522,7 @@ public function preSend() throw new Exception($this->lang('provide_address'), self::STOP_CRITICAL); } - // Validate From, Sender, and ConfirmReadingTo addresses + //Validate From, Sender, and ConfirmReadingTo addresses foreach (['From', 'Sender', 'ConfirmReadingTo'] as $address_kind) { $this->$address_kind = trim($this->$address_kind); if (empty($this->$address_kind)) { @@ -1524,29 +1546,29 @@ public function preSend() } } - // Set whether the message is multipart/alternative + //Set whether the message is multipart/alternative if ($this->alternativeExists()) { $this->ContentType = static::CONTENT_TYPE_MULTIPART_ALTERNATIVE; } $this->setMessageType(); - // Refuse to send an empty message unless we are specifically allowing it + //Refuse to send an empty message unless we are specifically allowing it if (!$this->AllowEmpty && empty($this->Body)) { throw new Exception($this->lang('empty_message'), self::STOP_CRITICAL); } //Trim subject consistently $this->Subject = trim($this->Subject); - // Create body before headers in case body makes changes to headers (e.g. altering transfer encoding) + //Create body before headers in case body makes changes to headers (e.g. altering transfer encoding) $this->MIMEHeader = ''; $this->MIMEBody = $this->createBody(); - // createBody may have added some headers, so retain them + //createBody may have added some headers, so retain them $tempheaders = $this->MIMEHeader; $this->MIMEHeader = $this->createHeader(); $this->MIMEHeader .= $tempheaders; - // To capture the complete message when using mail(), create - // an extra header list which createHeader() doesn't fold in + //To capture the complete message when using mail(), create + //an extra header list which createHeader() doesn't fold in if ('mail' === $this->Mailer) { if (count($this->to) > 0) { $this->mailHeader .= $this->addrAppend('To', $this->to); @@ -1559,7 +1581,7 @@ public function preSend() ); } - // Sign with DKIM if enabled + //Sign with DKIM if enabled if ( !empty($this->DKIM_domain) && !empty($this->DKIM_selector) @@ -1600,7 +1622,7 @@ public function preSend() public function postSend() { try { - // Choose the mailer and send through it + //Choose the mailer and send through it switch ($this->Mailer) { case 'sendmail': case 'qmail': @@ -1645,22 +1667,45 @@ public function postSend() */ protected function sendmailSend($header, $body) { + if ($this->Mailer === 'qmail') { + $this->edebug('Sending with qmail'); + } else { + $this->edebug('Sending with sendmail'); + } $header = static::stripTrailingWSP($header) . static::$LE . static::$LE; - - // CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped. - if (!empty($this->Sender) && self::isShellSafe($this->Sender)) { - if ('qmail' === $this->Mailer) { + //This sets the SMTP envelope sender which gets turned into a return-path header by the receiver + //A space after `-f` is optional, but there is a long history of its presence + //causing problems, so we don't use one + //Exim docs: http://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_exim_command_line.html + //Sendmail docs: http://www.sendmail.org/~ca/email/man/sendmail.html + //Qmail docs: http://www.qmail.org/man/man8/qmail-inject.html + //Example problem: https://www.drupal.org/node/1057954 + //CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped. + if ('' === $this->Sender) { + $this->Sender = $this->From; + } + if (empty($this->Sender) && !empty(ini_get('sendmail_from'))) { + //PHP config has a sender address we can use + $this->Sender = ini_get('sendmail_from'); + } + //CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped. + //But sendmail requires this param, so fail without it + if (!empty($this->Sender) && static::validateAddress($this->Sender) && self::isShellSafe($this->Sender)) { + if ($this->Mailer === 'qmail') { $sendmailFmt = '%s -f%s'; } else { $sendmailFmt = '%s -oi -f%s -t'; } - } elseif ('qmail' === $this->Mailer) { - $sendmailFmt = '%s'; } else { - $sendmailFmt = '%s -oi -t'; + $this->edebug('Sender address unusable or missing: ' . $this->Sender); + return false; } $sendmail = sprintf($sendmailFmt, escapeshellcmd($this->Sendmail), $this->Sender); + $this->edebug('Sendmail path: ' . $this->Sendmail); + $this->edebug('Sendmail command: ' . $sendmail); + $this->edebug('Envelope sender: ' . $this->Sender); + $this->edebug("Headers: {$header}"); if ($this->SingleTo) { foreach ($this->SingleToArray as $toAddr) { @@ -1668,6 +1713,7 @@ protected function sendmailSend($header, $body) if (!$mail) { throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL); } + $this->edebug("To: {$toAddr}"); fwrite($mail, 'To: ' . $toAddr . "\n"); fwrite($mail, $header); fwrite($mail, $body); @@ -1682,6 +1728,7 @@ protected function sendmailSend($header, $body) $this->From, [] ); + $this->edebug("Result: " . ($result === 0 ? 'true' : 'false')); if (0 !== $result) { throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL); } @@ -1704,6 +1751,7 @@ protected function sendmailSend($header, $body) $this->From, [] ); + $this->edebug("Result: " . ($result === 0 ? 'true' : 'false')); if (0 !== $result) { throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL); } @@ -1724,7 +1772,7 @@ protected function sendmailSend($header, $body) */ protected static function isShellSafe($string) { - // Future-proof + //Future-proof if ( escapeshellcmd($string) !== $string || !in_array(escapeshellarg($string), ["'$string'", "\"$string\""]) @@ -1737,9 +1785,9 @@ protected static function isShellSafe($string) for ($i = 0; $i < $length; ++$i) { $c = $string[$i]; - // All other characters have a special meaning in at least one common shell, including = and +. - // Full stop (.) has a special meaning in cmd.exe, but its impact should be negligible here. - // Note that this does permit non-Latin alphanumeric characters based on the current locale. + //All other characters have a special meaning in at least one common shell, including = and +. + //Full stop (.) has a special meaning in cmd.exe, but its impact should be negligible here. + //Note that this does permit non-Latin alphanumeric characters based on the current locale. if (!ctype_alnum($c) && strpos('@_-.', $c) === false) { return false; } @@ -1809,11 +1857,18 @@ protected function mailSend($header, $body) //Sendmail docs: http://www.sendmail.org/~ca/email/man/sendmail.html //Qmail docs: http://www.qmail.org/man/man8/qmail-inject.html //Example problem: https://www.drupal.org/node/1057954 - // CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped. - if (!empty($this->Sender) && static::validateAddress($this->Sender) && self::isShellSafe($this->Sender)) { - $params = sprintf('-f%s', $this->Sender); + //CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped. + if ('' === $this->Sender) { + $this->Sender = $this->From; + } + if (empty($this->Sender) && !empty(ini_get('sendmail_from'))) { + //PHP config has a sender address we can use + $this->Sender = ini_get('sendmail_from'); } if (!empty($this->Sender) && static::validateAddress($this->Sender)) { + if (self::isShellSafe($this->Sender)) { + $params = sprintf('-f%s', $this->Sender); + } $old_from = ini_get('sendmail_from'); ini_set('sendmail_from', $this->Sender); } @@ -1899,7 +1954,7 @@ protected function smtpSend($header, $body) } $callbacks = []; - // Attempt to send to all recipients + //Attempt to send to all recipients foreach ([$this->to, $this->cc, $this->bcc] as $togroup) { foreach ($togroup as $to) { if (!$this->smtp->recipient($to[0], $this->dsn)) { @@ -1914,7 +1969,7 @@ protected function smtpSend($header, $body) } } - // Only send the DATA command if we have viable recipients + //Only send the DATA command if we have viable recipients if ((count($this->all_recipients) > count($bad_rcpt)) && !$this->smtp->data($header . $body)) { throw new Exception($this->lang('data_not_accepted'), self::STOP_CRITICAL); } @@ -1976,7 +2031,7 @@ public function smtpConnect($options = null) $options = $this->SMTPOptions; } - // Already connected? + //Already connected? if ($this->smtp->connected()) { return true; } @@ -1998,14 +2053,14 @@ public function smtpConnect($options = null) ) ) { $this->edebug($this->lang('invalid_hostentry') . ' ' . trim($hostentry)); - // Not a valid host entry + //Not a valid host entry continue; } - // $hostinfo[1]: optional ssl or tls prefix - // $hostinfo[2]: the hostname - // $hostinfo[3]: optional port number - // The host string prefix can temporarily override the current setting for SMTPSecure - // If it's not specified, the default value is used + //$hostinfo[1]: optional ssl or tls prefix + //$hostinfo[2]: the hostname + //$hostinfo[3]: optional port number + //The host string prefix can temporarily override the current setting for SMTPSecure + //If it's not specified, the default value is used //Check the host name is a valid name or IP address before trying to use it if (!static::isValidHost($hostinfo[2])) { @@ -2017,11 +2072,11 @@ public function smtpConnect($options = null) $tls = (static::ENCRYPTION_STARTTLS === $this->SMTPSecure); if ('ssl' === $hostinfo[1] || ('' === $hostinfo[1] && static::ENCRYPTION_SMTPS === $this->SMTPSecure)) { $prefix = 'ssl://'; - $tls = false; // Can't have SSL and TLS at the same time + $tls = false; //Can't have SSL and TLS at the same time $secure = static::ENCRYPTION_SMTPS; } elseif ('tls' === $hostinfo[1]) { $tls = true; - // tls doesn't use a prefix + //TLS doesn't use a prefix $secure = static::ENCRYPTION_STARTTLS; } //Do we need the OpenSSL extension? @@ -2051,10 +2106,10 @@ public function smtpConnect($options = null) } $this->smtp->hello($hello); //Automatically enable TLS encryption if: - // * it's not disabled - // * we have openssl extension - // * we are not already using SSL - // * the server offers STARTTLS + //* it's not disabled + //* we have openssl extension + //* we are not already using SSL + //* the server offers STARTTLS if ($this->SMTPAutoTLS && $sslext && 'ssl' !== $secure && $this->smtp->getServerExt('STARTTLS')) { $tls = true; } @@ -2062,7 +2117,7 @@ public function smtpConnect($options = null) if (!$this->smtp->startTLS()) { throw new Exception($this->lang('connect_host')); } - // We must resend EHLO after TLS negotiation + //We must resend EHLO after TLS negotiation $this->smtp->hello($hello); } if ( @@ -2080,14 +2135,14 @@ public function smtpConnect($options = null) } catch (Exception $exc) { $lastexception = $exc; $this->edebug($exc->getMessage()); - // We must have connected, but then failed TLS or Auth, so close connection nicely + //We must have connected, but then failed TLS or Auth, so close connection nicely $this->smtp->quit(); } } } - // If we get here, all connection attempts have failed, so close connection hard + //If we get here, all connection attempts have failed, so close connection hard $this->smtp->close(); - // As we've caught all exceptions, just report whatever the last one was + //As we've caught all exceptions, just report whatever the last one was if ($this->exceptions && null !== $lastexception) { throw $lastexception; } @@ -2118,7 +2173,7 @@ public function smtpClose() */ public function setLanguage($langcode = 'en', $lang_path = '') { - // Backwards compatibility for renamed language codes + //Backwards compatibility for renamed language codes $renamed_langcodes = [ 'br' => 'pt_br', 'cz' => 'cs', @@ -2134,7 +2189,7 @@ public function setLanguage($langcode = 'en', $lang_path = '') $langcode = $renamed_langcodes[$langcode]; } - // Define full set of translatable strings in English + //Define full set of translatable strings in English $PHPMAILER_LANG = [ 'authenticate' => 'SMTP Error: Could not authenticate.', 'connect_host' => 'SMTP Error: Could not connect to SMTP host.', @@ -2159,7 +2214,7 @@ public function setLanguage($langcode = 'en', $lang_path = '') 'extension_missing' => 'Extension missing: ', ]; if (empty($lang_path)) { - // Calculate an absolute path so it can work if CWD is not here + //Calculate an absolute path so it can work if CWD is not here $lang_path = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'language' . DIRECTORY_SEPARATOR; } //Validate $langcode @@ -2168,20 +2223,20 @@ public function setLanguage($langcode = 'en', $lang_path = '') } $foundlang = true; $lang_file = $lang_path . 'phpmailer.lang-' . $langcode . '.php'; - // There is no English translation file + //There is no English translation file if ('en' !== $langcode) { - // Make sure language file path is readable + //Make sure language file path is readable if (!static::fileIsAccessible($lang_file)) { $foundlang = false; } else { - // Overwrite language-specific strings. - // This way we'll never have missing translation keys. + //Overwrite language-specific strings. + //This way we'll never have missing translation keys. $foundlang = include $lang_file; } } $this->language = $PHPMAILER_LANG; - return (bool) $foundlang; // Returns false if language not found + return (bool) $foundlang; //Returns false if language not found } /** @@ -2225,7 +2280,7 @@ public function addrAppend($type, $addr) */ public function addrFormat($addr) { - if (empty($addr[1])) { // No name provided + if (empty($addr[1])) { //No name provided return $this->secureHeader($addr[0]); } @@ -2252,8 +2307,8 @@ public function wrapText($message, $length, $qp_mode = false) } else { $soft_break = static::$LE; } - // If utf-8 encoding is used, we will need to make sure we don't - // split multibyte characters when we wrap + //If utf-8 encoding is used, we will need to make sure we don't + //split multibyte characters when we wrap $is_utf8 = static::CHARSET_UTF8 === strtolower($this->CharSet); $lelen = strlen(static::$LE); $crlflen = strlen(static::$LE); @@ -2353,29 +2408,29 @@ public function utf8CharBoundary($encodedText, $maxLength) $lastChunk = substr($encodedText, $maxLength - $lookBack, $lookBack); $encodedCharPos = strpos($lastChunk, '='); if (false !== $encodedCharPos) { - // Found start of encoded character byte within $lookBack block. - // Check the encoded byte value (the 2 chars after the '=') + //Found start of encoded character byte within $lookBack block. + //Check the encoded byte value (the 2 chars after the '=') $hex = substr($encodedText, $maxLength - $lookBack + $encodedCharPos + 1, 2); $dec = hexdec($hex); if ($dec < 128) { - // Single byte character. - // If the encoded char was found at pos 0, it will fit - // otherwise reduce maxLength to start of the encoded char + //Single byte character. + //If the encoded char was found at pos 0, it will fit + //otherwise reduce maxLength to start of the encoded char if ($encodedCharPos > 0) { $maxLength -= $lookBack - $encodedCharPos; } $foundSplitPos = true; } elseif ($dec >= 192) { - // First byte of a multi byte character - // Reduce maxLength to split at start of character + //First byte of a multi byte character + //Reduce maxLength to split at start of character $maxLength -= $lookBack - $encodedCharPos; $foundSplitPos = true; } elseif ($dec < 192) { - // Middle byte of a multi byte character, look further back + //Middle byte of a multi byte character, look further back $lookBack += 3; } } else { - // No encoded character found + //No encoded character found $foundSplitPos = true; } } @@ -2419,7 +2474,7 @@ public function createHeader() $result .= $this->headerLine('Date', '' === $this->MessageDate ? self::rfcDate() : $this->MessageDate); - // The To header is created automatically by mail(), so needs to be omitted here + //The To header is created automatically by mail(), so needs to be omitted here if ('mail' !== $this->Mailer) { if ($this->SingleTo) { foreach ($this->to as $toaddr) { @@ -2433,12 +2488,12 @@ public function createHeader() } $result .= $this->addrAppend('From', [[trim($this->From), $this->FromName]]); - // sendmail and mail() extract Cc from the header before sending + //sendmail and mail() extract Cc from the header before sending if (count($this->cc) > 0) { $result .= $this->addrAppend('Cc', $this->cc); } - // sendmail and mail() extract Bcc from the header before sending + //sendmail and mail() extract Bcc from the header before sending if ( ( 'sendmail' === $this->Mailer || 'qmail' === $this->Mailer || 'mail' === $this->Mailer @@ -2452,13 +2507,13 @@ public function createHeader() $result .= $this->addrAppend('Reply-To', $this->ReplyTo); } - // mail() sets the subject itself + //mail() sets the subject itself if ('mail' !== $this->Mailer) { $result .= $this->headerLine('Subject', $this->encodeHeader($this->secureHeader($this->Subject))); } - // Only allow a custom message ID if it conforms to RFC 5322 section 3.6.4 - // https://tools.ietf.org/html/rfc5322#section-3.6.4 + //Only allow a custom message ID if it conforms to RFC 5322 section 3.6.4 + //https://tools.ietf.org/html/rfc5322#section-3.6.4 if ('' !== $this->MessageID && preg_match('/^<.*@.*>$/', $this->MessageID)) { $this->lastMessageID = $this->MessageID; } else { @@ -2484,7 +2539,7 @@ public function createHeader() $result .= $this->headerLine('Disposition-Notification-To', '<' . $this->ConfirmReadingTo . '>'); } - // Add custom headers + //Add custom headers foreach ($this->CustomHeader as $header) { $result .= $this->headerLine( trim($header[0]), @@ -2526,28 +2581,24 @@ public function getMailMIME() $result .= $this->textLine(' boundary="' . $this->boundary[1] . '"'); break; default: - // Catches case 'plain': and case '': + //Catches case 'plain': and case '': $result .= $this->textLine('Content-Type: ' . $this->ContentType . '; charset=' . $this->CharSet); $ismultipart = false; break; } - // RFC1341 part 5 says 7bit is assumed if not specified + //RFC1341 part 5 says 7bit is assumed if not specified if (static::ENCODING_7BIT !== $this->Encoding) { - // RFC 2045 section 6.4 says multipart MIME parts may only use 7bit, 8bit or binary CTE + //RFC 2045 section 6.4 says multipart MIME parts may only use 7bit, 8bit or binary CTE if ($ismultipart) { if (static::ENCODING_8BIT === $this->Encoding) { $result .= $this->headerLine('Content-Transfer-Encoding', static::ENCODING_8BIT); } - // The only remaining alternatives are quoted-printable and base64, which are both 7bit compatible + //The only remaining alternatives are quoted-printable and base64, which are both 7bit compatible } else { $result .= $this->headerLine('Content-Transfer-Encoding', $this->Encoding); } } - if ('mail' !== $this->Mailer) { -// $result .= static::$LE; - } - return $result; } @@ -2816,7 +2867,7 @@ public function createBody() $body .= $this->attachAll('attachment', $this->boundary[1]); break; default: - // Catch case 'plain' and case '', applies to simple `text/plain` and `text/html` body content types + //Catch case 'plain' and case '', applies to simple `text/plain` and `text/html` body content types //Reset the `Encoding` property in case we changed it for line length reasons $this->Encoding = $bodyEncoding; $body .= $this->encodeString($this->Body, $this->Encoding); @@ -2907,7 +2958,7 @@ protected function getBoundary($boundary, $charSet, $contentType, $encoding) $result .= $this->textLine('--' . $boundary); $result .= sprintf('Content-Type: %s; charset=%s', $contentType, $charSet); $result .= static::$LE; - // RFC1341 part 5 says 7bit is assumed if not specified + //RFC1341 part 5 says 7bit is assumed if not specified if (static::ENCODING_7BIT !== $encoding) { $result .= $this->headerLine('Content-Transfer-Encoding', $encoding); } @@ -3005,7 +3056,7 @@ public function addAttachment( throw new Exception($this->lang('file_access') . $path, self::STOP_CONTINUE); } - // If a MIME type is not specified, try to work it out from the file name + //If a MIME type is not specified, try to work it out from the file name if ('' === $type) { $type = static::filenameToType($path); } @@ -3024,7 +3075,7 @@ public function addAttachment( 2 => $name, 3 => $encoding, 4 => $type, - 5 => false, // isStringAttachment + 5 => false, //isStringAttachment 6 => $disposition, 7 => $name, ]; @@ -3064,16 +3115,16 @@ public function getAttachments() */ protected function attachAll($disposition_type, $boundary) { - // Return text of body + //Return text of body $mime = []; $cidUniq = []; $incl = []; - // Add all attachments + //Add all attachments foreach ($this->attachment as $attachment) { - // Check if it is a valid disposition_filter + //Check if it is a valid disposition_filter if ($attachment[6] === $disposition_type) { - // Check for string attachment + //Check for string attachment $string = ''; $path = ''; $bString = $attachment[5]; @@ -3114,7 +3165,7 @@ protected function attachAll($disposition_type, $boundary) static::$LE ); } - // RFC1341 part 5 says 7bit is assumed if not specified + //RFC1341 part 5 says 7bit is assumed if not specified if (static::ENCODING_7BIT !== $encoding) { $mime[] = sprintf('Content-Transfer-Encoding: %s%s', $encoding, static::$LE); } @@ -3124,7 +3175,7 @@ protected function attachAll($disposition_type, $boundary) $mime[] = 'Content-ID: <' . $this->encodeHeader($this->secureHeader($cid)) . '>' . static::$LE; } - // Allow for bypassing the Content-Disposition header + //Allow for bypassing the Content-Disposition header if (!empty($disposition)) { $encoded_name = $this->encodeHeader($this->secureHeader($name)); if (!empty($encoded_name)) { @@ -3145,7 +3196,7 @@ protected function attachAll($disposition_type, $boundary) $mime[] = static::$LE; } - // Encode as string attachment + //Encode as string attachment if ($bString) { $mime[] = $this->encodeString($string, $encoding); } else { @@ -3221,7 +3272,7 @@ public function encodeString($str, $encoding = self::ENCODING_BASE64) case static::ENCODING_7BIT: case static::ENCODING_8BIT: $encoded = static::normalizeBreaks($str); - // Make sure it ends with a line break + //Make sure it ends with a line break if (substr($encoded, -(strlen(static::$LE))) !== static::$LE) { $encoded .= static::$LE; } @@ -3259,7 +3310,7 @@ public function encodeHeader($str, $position = 'text') switch (strtolower($position)) { case 'phrase': if (!preg_match('/[\200-\377]/', $str)) { - // Can't use addslashes as we don't know the value of magic_quotes_sybase + //Can't use addslashes as we don't know the value of magic_quotes_sybase $encoded = addcslashes($str, "\0..\37\177\\\""); if (($str === $encoded) && !preg_match('/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/', $str)) { return $encoded; @@ -3285,7 +3336,7 @@ public function encodeHeader($str, $position = 'text') $charset = static::CHARSET_ASCII; } - // Q/B encoding adds 8 chars and the charset ("` =?<charset>?[QB]?<content>?=`"). + //Q/B encoding adds 8 chars and the charset ("` =?<charset>?[QB]?<content>?=`"). $overhead = 8 + strlen($charset); if ('mail' === $this->Mailer) { @@ -3294,26 +3345,26 @@ public function encodeHeader($str, $position = 'text') $maxlen = static::MAX_LINE_LENGTH - $overhead; } - // Select the encoding that produces the shortest output and/or prevents corruption. + //Select the encoding that produces the shortest output and/or prevents corruption. if ($matchcount > strlen($str) / 3) { - // More than 1/3 of the content needs encoding, use B-encode. + //More than 1/3 of the content needs encoding, use B-encode. $encoding = 'B'; } elseif ($matchcount > 0) { - // Less than 1/3 of the content needs encoding, use Q-encode. + //Less than 1/3 of the content needs encoding, use Q-encode. $encoding = 'Q'; } elseif (strlen($str) > $maxlen) { - // No encoding needed, but value exceeds max line length, use Q-encode to prevent corruption. + //No encoding needed, but value exceeds max line length, use Q-encode to prevent corruption. $encoding = 'Q'; } else { - // No reformatting needed + //No reformatting needed $encoding = false; } switch ($encoding) { case 'B': if ($this->hasMultiBytes($str)) { - // Use a custom function which correctly encodes and wraps long - // multibyte strings without breaking lines within a character + //Use a custom function which correctly encodes and wraps long + //multibyte strings without breaking lines within a character $encoded = $this->base64EncodeWrapMB($str, "\n"); } else { $encoded = base64_encode($str); @@ -3348,7 +3399,7 @@ public function hasMultiBytes($str) return strlen($str) > mb_strlen($str, $this->CharSet); } - // Assume no multibytes (we can't handle without mbstring functions anyway) + //Assume no multibytes (we can't handle without mbstring functions anyway) return false; } @@ -3386,11 +3437,11 @@ public function base64EncodeWrapMB($str, $linebreak = null) } $mb_length = mb_strlen($str, $this->CharSet); - // Each line must have length <= 75, including $start and $end + //Each line must have length <= 75, including $start and $end $length = 75 - strlen($start) - strlen($end); - // Average multi-byte ratio + //Average multi-byte ratio $ratio = $mb_length / strlen($str); - // Base64 has a 4:3 ratio + //Base64 has a 4:3 ratio $avgLength = floor($length * $ratio * .75); $offset = 0; @@ -3405,7 +3456,7 @@ public function base64EncodeWrapMB($str, $linebreak = null) $encoded .= $chunk . $linebreak; } - // Chomp the last linefeed + //Chomp the last linefeed return substr($encoded, 0, -strlen($linebreak)); } @@ -3434,12 +3485,12 @@ public function encodeQP($string) */ public function encodeQ($str, $position = 'text') { - // There should not be any EOL in the string + //There should not be any EOL in the string $pattern = ''; $encoded = str_replace(["\r", "\n"], '', $str); switch (strtolower($position)) { case 'phrase': - // RFC 2047 section 5.3 + //RFC 2047 section 5.3 $pattern = '^A-Za-z0-9!*+\/ -'; break; /* @@ -3452,15 +3503,15 @@ public function encodeQ($str, $position = 'text') /* Intentional fall through */ case 'text': default: - // RFC 2047 section 5.1 - // Replace every high ascii, control, =, ? and _ characters + //RFC 2047 section 5.1 + //Replace every high ascii, control, =, ? and _ characters $pattern = '\000-\011\013\014\016-\037\075\077\137\177-\377' . $pattern; break; } $matches = []; if (preg_match_all("/[{$pattern}]/", $encoded, $matches)) { - // If the string contains an '=', make sure it's the first thing we replace - // so as to avoid double-encoding + //If the string contains an '=', make sure it's the first thing we replace + //so as to avoid double-encoding $eqkey = array_search('=', $matches[0], true); if (false !== $eqkey) { unset($matches[0][$eqkey]); @@ -3470,8 +3521,8 @@ public function encodeQ($str, $position = 'text') $encoded = str_replace($char, '=' . sprintf('%02X', ord($char)), $encoded); } } - // Replace spaces with _ (more readable than =20) - // RFC 2047 section 4.2(2) + //Replace spaces with _ (more readable than =20) + //RFC 2047 section 4.2(2) return str_replace(' ', '_', $encoded); } @@ -3498,7 +3549,7 @@ public function addStringAttachment( $disposition = 'attachment' ) { try { - // If a MIME type is not specified, try to work it out from the file name + //If a MIME type is not specified, try to work it out from the file name if ('' === $type) { $type = static::filenameToType($filename); } @@ -3507,14 +3558,14 @@ public function addStringAttachment( throw new Exception($this->lang('encoding') . $encoding); } - // Append to $attachment array + //Append to $attachment array $this->attachment[] = [ 0 => $string, 1 => $filename, 2 => static::mb_pathinfo($filename, PATHINFO_BASENAME), 3 => $encoding, 4 => $type, - 5 => true, // isStringAttachment + 5 => true, //isStringAttachment 6 => $disposition, 7 => 0, ]; @@ -3565,7 +3616,7 @@ public function addEmbeddedImage( throw new Exception($this->lang('file_access') . $path, self::STOP_CONTINUE); } - // If a MIME type is not specified, try to work it out from the file name + //If a MIME type is not specified, try to work it out from the file name if ('' === $type) { $type = static::filenameToType($path); } @@ -3579,14 +3630,14 @@ public function addEmbeddedImage( $name = $filename; } - // Append to $attachment array + //Append to $attachment array $this->attachment[] = [ 0 => $path, 1 => $filename, 2 => $name, 3 => $encoding, 4 => $type, - 5 => false, // isStringAttachment + 5 => false, //isStringAttachment 6 => $disposition, 7 => $cid, ]; @@ -3631,7 +3682,7 @@ public function addStringEmbeddedImage( $disposition = 'inline' ) { try { - // If a MIME type is not specified, try to work it out from the name + //If a MIME type is not specified, try to work it out from the name if ('' === $type && !empty($name)) { $type = static::filenameToType($name); } @@ -3640,14 +3691,14 @@ public function addStringEmbeddedImage( throw new Exception($this->lang('encoding') . $encoding); } - // Append to $attachment array + //Append to $attachment array $this->attachment[] = [ 0 => $string, 1 => $name, 2 => $name, 3 => $encoding, 4 => $type, - 5 => true, // isStringAttachment + 5 => true, //isStringAttachment 6 => $disposition, 7 => $cid, ]; @@ -3867,8 +3918,8 @@ protected function setError($msg) */ public static function rfcDate() { - // Set the time zone to whatever the default is to avoid 500 errors - // Will default to UTC if it's not set properly in php.ini + //Set the time zone to whatever the default is to avoid 500 errors + //Will default to UTC if it's not set properly in php.ini date_default_timezone_set(@date_default_timezone_get()); return date('D, j M Y H:i:s O'); @@ -3946,13 +3997,13 @@ public static function isValidHost($host) protected function lang($key) { if (count($this->language) < 1) { - $this->setLanguage(); // set the default language + $this->setLanguage(); //Set the default language } if (array_key_exists($key, $this->language)) { if ('smtp_connect_failed' === $key) { - //Include a link to troubleshooting docs on SMTP connection failure - //this is by far the biggest cause of support questions + //Include a link to troubleshooting docs on SMTP connection failure. + //This is by far the biggest cause of support questions //but it's usually not PHPMailer's fault. return $this->language[$key] . ' https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting'; } @@ -3987,7 +4038,7 @@ public function isError() public function addCustomHeader($name, $value = null) { if (null === $value && strpos($name, ':') !== false) { - // Value passed in as name:value + //Value passed in as name:value list($name, $value) = explode(':', $name, 2); } $name = trim($name); @@ -4041,11 +4092,11 @@ public function msgHTML($message, $basedir = '', $advanced = false) preg_match_all('/(?<!-)(src|background)=["\'](.*)["\']/Ui', $message, $images); if (array_key_exists(2, $images)) { if (strlen($basedir) > 1 && '/' !== substr($basedir, -1)) { - // Ensure $basedir has a trailing / + //Ensure $basedir has a trailing / $basedir .= '/'; } foreach ($images[2] as $imgindex => $url) { - // Convert data URIs into embedded images + //Convert data URIs into embedded images //e.g. "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" $match = []; if (preg_match('#^data:(image/(?:jpe?g|gif|png));?(base64)?,(.+)#', $url, $match)) { @@ -4059,7 +4110,7 @@ public function msgHTML($message, $basedir = '', $advanced = false) } //Hash the decoded data, not the URL, so that the same data-URI image used in multiple places //will only be embedded once, even if it used a different encoding - $cid = substr(hash('sha256', $data), 0, 32) . '@phpmailer.0'; // RFC2392 S 2 + $cid = substr(hash('sha256', $data), 0, 32) . '@phpmailer.0'; //RFC2392 S 2 if (!$this->cidExists($cid)) { $this->addStringEmbeddedImage( @@ -4078,13 +4129,13 @@ public function msgHTML($message, $basedir = '', $advanced = false) continue; } if ( - // Only process relative URLs if a basedir is provided (i.e. no absolute local paths) + //Only process relative URLs if a basedir is provided (i.e. no absolute local paths) !empty($basedir) - // Ignore URLs containing parent dir traversal (..) + //Ignore URLs containing parent dir traversal (..) && (strpos($url, '..') === false) - // Do not change urls that are already inline images + //Do not change urls that are already inline images && 0 !== strpos($url, 'cid:') - // Do not change absolute URLs, including anonymous protocol + //Do not change absolute URLs, including anonymous protocol && !preg_match('#^[a-z][a-z0-9+.-]*:?//#i', $url) ) { $filename = static::mb_pathinfo($url, PATHINFO_BASENAME); @@ -4092,7 +4143,7 @@ public function msgHTML($message, $basedir = '', $advanced = false) if ('.' === $directory) { $directory = ''; } - // RFC2392 S 2 + //RFC2392 S 2 $cid = substr(hash('sha256', $url), 0, 32) . '@phpmailer.0'; if (strlen($basedir) > 1 && '/' !== substr($basedir, -1)) { $basedir .= '/'; @@ -4119,7 +4170,7 @@ public function msgHTML($message, $basedir = '', $advanced = false) } } $this->isHTML(); - // Convert all message body line breaks to LE, makes quoted-printable encoding work much better + //Convert all message body line breaks to LE, makes quoted-printable encoding work much better $this->Body = static::normalizeBreaks($message); $this->AltBody = static::normalizeBreaks($this->html2text($message, $advanced)); if (!$this->alternativeExists()) { @@ -4138,9 +4189,9 @@ public function msgHTML($message, $basedir = '', $advanced = false) * Example usage: * * ```php - * // Use default conversion + * //Use default conversion * $plain = $mail->html2text($html); - * // Use your own custom converter + * //Use your own custom converter * $plain = $mail->html2text($html, function($html) { * $converter = new MyHtml2text($html); * return $converter->get_text(); @@ -4307,7 +4358,7 @@ public static function _mime_types($ext = '') */ public static function filenameToType($filename) { - // In case the path is a URL, strip any query string before getting extension + //In case the path is a URL, strip any query string before getting extension $qpos = strpos($filename, '?'); if (false !== $qpos) { $filename = substr($filename, 0, $qpos); @@ -4418,9 +4469,9 @@ public static function normalizeBreaks($text, $breaktype = null) if (null === $breaktype) { $breaktype = static::$LE; } - // Normalise to \n + //Normalise to \n $text = str_replace([self::CRLF, "\r"], "\n", $text); - // Now convert LE as needed + //Now convert LE as needed if ("\n" !== $breaktype) { $text = str_replace("\n", $breaktype, $text); } @@ -4526,13 +4577,13 @@ public function DKIM_Sign($signHeader) $privKey = openssl_pkey_get_private($privKeyStr); } if (openssl_sign($signHeader, $signature, $privKey, 'sha256WithRSAEncryption')) { - if (PHP_MAJOR_VERSION < 8) { + if (\PHP_MAJOR_VERSION < 8) { openssl_pkey_free($privKey); } return base64_encode($signature); } - if (PHP_MAJOR_VERSION < 8) { + if (\PHP_MAJOR_VERSION < 8) { openssl_pkey_free($privKey); } @@ -4599,7 +4650,7 @@ public function DKIM_BodyC($body) if (empty($body)) { return self::CRLF; } - // Normalize line endings to CRLF + //Normalize line endings to CRLF $body = static::normalizeBreaks($body, self::CRLF); //Reduce multiple trailing line breaks to a single one @@ -4619,9 +4670,9 @@ public function DKIM_BodyC($body) */ public function DKIM_Add($headers_line, $subject, $body) { - $DKIMsignatureType = 'rsa-sha256'; // Signature & hash algorithms - $DKIMcanonicalization = 'relaxed/simple'; // Canonicalization methods of header & body - $DKIMquery = 'dns/txt'; // Query method + $DKIMsignatureType = 'rsa-sha256'; //Signature & hash algorithms + $DKIMcanonicalization = 'relaxed/simple'; //Canonicalization methods of header & body + $DKIMquery = 'dns/txt'; //Query method $DKIMtime = time(); //Always sign these headers without being asked //Recommended list from https://tools.ietf.org/html/rfc6376#section-5.4.1 @@ -4722,7 +4773,8 @@ public function DKIM_Add($headers_line, $subject, $body) $headerKeys = ' h=' . implode(':', $headersToSignKeys) . ';' . static::$LE; $headerValues = implode(static::$LE, $headersToSign); $body = $this->DKIM_BodyC($body); - $DKIMb64 = base64_encode(pack('H*', hash('sha256', $body))); // Base64 of packed binary SHA-256 hash of body + //Base64 of packed binary SHA-256 hash of body + $DKIMb64 = base64_encode(pack('H*', hash('sha256', $body))); $ident = ''; if ('' !== $this->DKIM_identity) { $ident = ' i=' . $this->DKIM_identity . ';' . static::$LE; diff --git a/vendor/phpmailer/phpmailer/src/POP3.php b/vendor/phpmailer/phpmailer/src/POP3.php index 235e6372d..0c2059069 100644 --- a/vendor/phpmailer/phpmailer/src/POP3.php +++ b/vendor/phpmailer/phpmailer/src/POP3.php @@ -46,7 +46,7 @@ class POP3 * * @var string */ - const VERSION = '6.2.0'; + const VERSION = '6.3.0'; /** * Default POP3 port number. @@ -199,13 +199,13 @@ public static function popBeforeSmtp( public function authorise($host, $port = false, $timeout = false, $username = '', $password = '', $debug_level = 0) { $this->host = $host; - // If no port value provided, use default + //If no port value provided, use default if (false === $port) { $this->port = static::DEFAULT_PORT; } else { $this->port = (int) $port; } - // If no timeout value provided, use default + //If no timeout value provided, use default if (false === $timeout) { $this->tval = static::DEFAULT_TIMEOUT; } else { @@ -214,9 +214,9 @@ public function authorise($host, $port = false, $timeout = false, $username = '' $this->do_debug = $debug_level; $this->username = $username; $this->password = $password; - // Reset the error log + //Reset the error log $this->errors = []; - // connect + //Connect $result = $this->connect($this->host, $this->port, $this->tval); if ($result) { $login_result = $this->login($this->username, $this->password); @@ -226,7 +226,7 @@ public function authorise($host, $port = false, $timeout = false, $username = '' return true; } } - // We need to disconnect regardless of whether the login succeeded + //We need to disconnect regardless of whether the login succeeded $this->disconnect(); return false; @@ -243,7 +243,7 @@ public function authorise($host, $port = false, $timeout = false, $username = '' */ public function connect($host, $port = false, $tval = 30) { - // Are we already connected? + //Are we already connected? if ($this->connected) { return true; } @@ -256,22 +256,22 @@ public function connect($host, $port = false, $tval = 30) $port = static::DEFAULT_PORT; } - // connect to the POP3 server + //Connect to the POP3 server $errno = 0; $errstr = ''; $this->pop_conn = fsockopen( - $host, // POP3 Host - $port, // Port # - $errno, // Error Number - $errstr, // Error Message + $host, //POP3 Host + $port, //Port # + $errno, //Error Number + $errstr, //Error Message $tval - ); // Timeout (seconds) - // Restore the error handler + ); //Timeout (seconds) + //Restore the error handler restore_error_handler(); - // Did we connect? + //Did we connect? if (false === $this->pop_conn) { - // It would appear not... + //It would appear not... $this->setError( "Failed to connect to server $host on port $port. errno: $errno; errstr: $errstr" ); @@ -279,14 +279,14 @@ public function connect($host, $port = false, $tval = 30) return false; } - // Increase the stream time-out + //Increase the stream time-out stream_set_timeout($this->pop_conn, $tval, 0); - // Get the POP3 server response + //Get the POP3 server response $pop3_response = $this->getResponse(); - // Check for the +OK + //Check for the +OK if ($this->checkResponse($pop3_response)) { - // The connection is established and the POP3 server is talking + //The connection is established and the POP3 server is talking $this->connected = true; return true; @@ -316,11 +316,11 @@ public function login($username = '', $password = '') $password = $this->password; } - // Send the Username + //Send the Username $this->sendString("USER $username" . static::LE); $pop3_response = $this->getResponse(); if ($this->checkResponse($pop3_response)) { - // Send the Password + //Send the Password $this->sendString("PASS $password" . static::LE); $pop3_response = $this->getResponse(); if ($this->checkResponse($pop3_response)) { diff --git a/vendor/phpmailer/phpmailer/src/SMTP.php b/vendor/phpmailer/phpmailer/src/SMTP.php index ab7f46e4c..68f3aeccc 100644 --- a/vendor/phpmailer/phpmailer/src/SMTP.php +++ b/vendor/phpmailer/phpmailer/src/SMTP.php @@ -35,7 +35,7 @@ class SMTP * * @var string */ - const VERSION = '6.2.0'; + const VERSION = '6.3.0'; /** * SMTP line break constant. @@ -312,11 +312,11 @@ protected function edebug($str, $level = 0) */ public function connect($host, $port = null, $timeout = 30, $options = []) { - // Clear errors to avoid confusion + //Clear errors to avoid confusion $this->setError(''); - // Make sure we are __not__ connected + //Make sure we are __not__ connected if ($this->connected()) { - // Already connected, generate error + //Already connected, generate error $this->setError('Already connected to a server'); return false; @@ -324,7 +324,7 @@ public function connect($host, $port = null, $timeout = 30, $options = []) if (empty($port)) { $port = self::DEFAULT_PORT; } - // Connect to the SMTP server + //Connect to the SMTP server $this->edebug( "Connection: opening to $host:$port, timeout=$timeout, options=" . (count($options) > 0 ? var_export($options, true) : 'array()'), @@ -340,11 +340,23 @@ public function connect($host, $port = null, $timeout = 30, $options = []) $this->edebug('Connection: opened', self::DEBUG_CONNECTION); - // Get any announcement + //Get any announcement $this->last_reply = $this->get_lines(); $this->edebug('SERVER -> CLIENT: ' . $this->last_reply, self::DEBUG_SERVER); - - return true; + $responseCode = (int)substr($this->last_reply, 0, 3); + if ($responseCode === 220) { + return true; + } + //Anything other than a 220 response means something went wrong + //RFC 5321 says the server will wait for us to send a QUIT in response to a 554 error + //https://tools.ietf.org/html/rfc5321#section-3.1 + if ($responseCode === 554) { + $this->quit(); + } + //This will handle 421 responses which may not wait for a QUIT (e.g. if the server is being shut down) + $this->edebug('Connection: closing due to error', self::DEBUG_CONNECTION); + $this->close(); + return false; } /** @@ -397,7 +409,7 @@ protected function getSMTPConnection($host, $port = null, $timeout = 30, $option restore_error_handler(); } - // Verify we connected properly + //Verify we connected properly if (!is_resource($connection)) { $this->setError( 'Failed to connect to server', @@ -414,11 +426,11 @@ protected function getSMTPConnection($host, $port = null, $timeout = 30, $option return false; } - // SMTP server can take longer to respond, give longer timeout for first read - // Windows does not have support for this timeout function + //SMTP server can take longer to respond, give longer timeout for first read + //Windows does not have support for this timeout function if (strpos(PHP_OS, 'WIN') !== 0) { $max = (int)ini_get('max_execution_time'); - // Don't bother if unlimited, or if set_time_limit is disabled + //Don't bother if unlimited, or if set_time_limit is disabled if (0 !== $max && $timeout > $max && strpos(ini_get('disable_functions'), 'set_time_limit') === false) { @set_time_limit($timeout); } @@ -449,7 +461,7 @@ public function startTLS() $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT; } - // Begin encrypted connection + //Begin encrypted connection set_error_handler([$this, 'errorHandler']); $crypto_ok = stream_socket_enable_crypto( $this->smtp_conn, @@ -487,11 +499,11 @@ public function authenticate( } if (array_key_exists('EHLO', $this->server_caps)) { - // SMTP extensions are available; try to find a proper authentication method + //SMTP extensions are available; try to find a proper authentication method if (!array_key_exists('AUTH', $this->server_caps)) { $this->setError('Authentication is not allowed at this stage'); - // 'at this stage' means that auth may be allowed after the stage changes - // e.g. after STARTTLS + //'at this stage' means that auth may be allowed after the stage changes + //e.g. after STARTTLS return false; } @@ -535,11 +547,11 @@ public function authenticate( } switch ($authtype) { case 'PLAIN': - // Start authentication + //Start authentication if (!$this->sendCommand('AUTH', 'AUTH PLAIN', 334)) { return false; } - // Send encoded username and password + //Send encoded username and password if ( !$this->sendCommand( 'User & Password', @@ -551,7 +563,7 @@ public function authenticate( } break; case 'LOGIN': - // Start authentication + //Start authentication if (!$this->sendCommand('AUTH', 'AUTH LOGIN', 334)) { return false; } @@ -563,17 +575,17 @@ public function authenticate( } break; case 'CRAM-MD5': - // Start authentication + //Start authentication if (!$this->sendCommand('AUTH CRAM-MD5', 'AUTH CRAM-MD5', 334)) { return false; } - // Get the challenge + //Get the challenge $challenge = base64_decode(substr($this->last_reply, 4)); - // Build the response + //Build the response $response = $username . ' ' . $this->hmac($challenge, $password); - // send encoded credentials + //send encoded credentials return $this->sendCommand('Username', base64_encode($response), 235); case 'XOAUTH2': //The OAuth instance must be set up prior to requesting auth. @@ -582,7 +594,7 @@ public function authenticate( } $oauth = $OAuth->getOauth64(); - // Start authentication + //Start authentication if (!$this->sendCommand('AUTH', 'AUTH XOAUTH2 ' . $oauth, 235)) { return false; } @@ -612,15 +624,15 @@ protected function hmac($data, $key) return hash_hmac('md5', $data, $key); } - // The following borrowed from - // http://php.net/manual/en/function.mhash.php#27225 + //The following borrowed from + //http://php.net/manual/en/function.mhash.php#27225 - // RFC 2104 HMAC implementation for php. - // Creates an md5 HMAC. - // Eliminates the need to install mhash to compute a HMAC - // by Lance Rushing + //RFC 2104 HMAC implementation for php. + //Creates an md5 HMAC. + //Eliminates the need to install mhash to compute a HMAC + //by Lance Rushing - $bytelen = 64; // byte length for md5 + $bytelen = 64; //byte length for md5 if (strlen($key) > $bytelen) { $key = pack('H*', md5($key)); } @@ -643,7 +655,7 @@ public function connected() if (is_resource($this->smtp_conn)) { $sock_status = stream_get_meta_data($this->smtp_conn); if ($sock_status['eof']) { - // The socket is valid but we are not connected + //The socket is valid but we are not connected $this->edebug( 'SMTP NOTICE: EOF caught while checking if connected', self::DEBUG_CLIENT @@ -653,7 +665,7 @@ public function connected() return false; } - return true; // everything looks good + return true; //everything looks good } return false; @@ -671,7 +683,7 @@ public function close() $this->server_caps = null; $this->helo_rply = null; if (is_resource($this->smtp_conn)) { - // close the connection and cleanup + //Close the connection and cleanup fclose($this->smtp_conn); $this->smtp_conn = null; //Makes for cleaner serialization $this->edebug('Connection: closed', self::DEBUG_CONNECTION); @@ -706,7 +718,7 @@ public function data($msg_data) * NOTE: this does not count towards line-length limit. */ - // Normalize line breaks before exploding + //Normalize line breaks before exploding $lines = explode("\n", str_replace(["\r\n", "\r"], "\n", $msg_data)); /* To distinguish between a complete RFC822 message and a plain message body, we check if the first field @@ -752,7 +764,8 @@ public function data($msg_data) //Send the lines to the server foreach ($lines_out as $line_out) { - //RFC2821 section 4.5.2 + //Dot-stuffing as per RFC5321 section 4.5.2 + //https://tools.ietf.org/html/rfc5321#section-4.5.2 if (!empty($line_out) && $line_out[0] === '.') { $line_out = '.' . $line_out; } @@ -786,7 +799,16 @@ public function data($msg_data) public function hello($host = '') { //Try extended hello first (RFC 2821) - return $this->sendHello('EHLO', $host) or $this->sendHello('HELO', $host); + if ($this->sendHello('EHLO', $host)) { + return true; + } + + //Some servers shut down the SMTP service here (RFC 5321) + if (substr($this->helo_rply, 0, 3) == '421') { + return false; + } + + return $this->sendHello('HELO', $host); } /** @@ -976,12 +998,12 @@ protected function sendCommand($command, $commandstring, $expect) $this->client_send($commandstring . static::LE, $command); $this->last_reply = $this->get_lines(); - // Fetch SMTP code and possible error code explanation + //Fetch SMTP code and possible error code explanation $matches = []; if (preg_match('/^([\d]{3})[ -](?:([\d]\\.[\d]\\.[\d]{1,2}) )?/', $this->last_reply, $matches)) { $code = (int) $matches[1]; $code_ex = (count($matches) > 2 ? $matches[2] : null); - // Cut off error code from each response line + //Cut off error code from each response line $detail = preg_replace( "/{$code}[ -]" . ($code_ex ? str_replace('.', '\\.', $code_ex) . ' ' : '') . '/m', @@ -989,7 +1011,7 @@ protected function sendCommand($command, $commandstring, $expect) $this->last_reply ); } else { - // Fall back to simple parsing if regex fails + //Fall back to simple parsing if regex fails $code = (int) substr($this->last_reply, 0, 3); $code_ex = null; $detail = substr($this->last_reply, 4); @@ -1184,7 +1206,7 @@ public function getLastReply() */ protected function get_lines() { - // If the connection is bad, give up straight away + //If the connection is bad, give up straight away if (!is_resource($this->smtp_conn)) { return ''; } @@ -1237,13 +1259,13 @@ protected function get_lines() $str = @fgets($this->smtp_conn, self::MAX_REPLY_LENGTH); $this->edebug('SMTP INBOUND: "' . trim($str) . '"', self::DEBUG_LOWLEVEL); $data .= $str; - // If response is only 3 chars (not valid, but RFC5321 S4.2 says it must be handled), - // or 4th character is a space or a line break char, we are done reading, break the loop. - // String array access is a significant micro-optimisation over strlen + //If response is only 3 chars (not valid, but RFC5321 S4.2 says it must be handled), + //or 4th character is a space or a line break char, we are done reading, break the loop. + //String array access is a significant micro-optimisation over strlen if (!isset($str[3]) || $str[3] === ' ' || $str[3] === "\r" || $str[3] === "\n") { break; } - // Timed-out? Log and break + //Timed-out? Log and break $info = stream_get_meta_data($this->smtp_conn); if ($info['timed_out']) { $this->edebug( @@ -1252,7 +1274,7 @@ protected function get_lines() ); break; } - // Now check if reads took too long + //Now check if reads took too long if ($endtime && time() > $endtime) { $this->edebug( 'SMTP -> get_lines(): timelimit reached (' . diff --git a/vendor/psy/psysh/src/CodeCleaner.php b/vendor/psy/psysh/src/CodeCleaner.php index 69cd326a0..c23bd2b36 100644 --- a/vendor/psy/psysh/src/CodeCleaner.php +++ b/vendor/psy/psysh/src/CodeCleaner.php @@ -49,6 +49,7 @@ */ class CodeCleaner { + private $yolo = false; private $parser; private $printer; private $traverser; @@ -60,9 +61,12 @@ class CodeCleaner * @param Parser|null $parser A PhpParser Parser instance. One will be created if not explicitly supplied * @param Printer|null $printer A PhpParser Printer instance. One will be created if not explicitly supplied * @param NodeTraverser|null $traverser A PhpParser NodeTraverser instance. One will be created if not explicitly supplied + * @param bool $yolo run without input validation */ - public function __construct(Parser $parser = null, Printer $printer = null, NodeTraverser $traverser = null) + public function __construct(Parser $parser = null, Printer $printer = null, NodeTraverser $traverser = null, $yolo = false) { + $this->yolo = $yolo; + if ($parser === null) { $parserFactory = new ParserFactory(); $parser = $parserFactory->createParser(); @@ -77,6 +81,16 @@ public function __construct(Parser $parser = null, Printer $printer = null, Node } } + /** + * Check whether this CodeCleaner is in YOLO mode. + * + * @return bool + */ + public function yolo() + { + return $this->yolo; + } + /** * Get default CodeCleaner passes. * @@ -84,6 +98,10 @@ public function __construct(Parser $parser = null, Printer $printer = null, Node */ private function getDefaultPasses() { + if ($this->yolo) { + return $this->getYoloPasses(); + } + $useStatementPass = new UseStatementPass(); $namespacePass = new NamespacePass($this); @@ -127,6 +145,36 @@ private function getDefaultPasses() ]; } + /** + * A set of code cleaner passes that don't try to do any validation, and + * only do minimal rewriting to make things work inside the REPL. + * + * This list should stay in sync with the "rewriting shenanigans" in + * getDefaultPasses above. + * + * @return array + */ + private function getYoloPasses() + { + $useStatementPass = new UseStatementPass(); + $namespacePass = new NamespacePass($this); + + // Try to add implicit `use` statements and an implicit namespace, + // based on the file in which the `debug` call was made. + $this->addImplicitDebugContext([$useStatementPass, $namespacePass]); + + return [ + new LeavePsyshAlonePass(), + $useStatementPass, // must run before the namespace pass + new ExitPass(), + new ImplicitReturnPass(), + new MagicConstantsPass(), + $namespacePass, // must run after the implicit return pass + new RequirePass(), + new StrictTypesPass(), + ]; + } + /** * "Warm up" code cleaner passes when we're coming from a debug call. * diff --git a/vendor/psy/psysh/src/Command/ReflectingCommand.php b/vendor/psy/psysh/src/Command/ReflectingCommand.php index b98274569..47b779e21 100644 --- a/vendor/psy/psysh/src/Command/ReflectingCommand.php +++ b/vendor/psy/psysh/src/Command/ReflectingCommand.php @@ -120,10 +120,7 @@ protected function resolveName($name, $includeFunctions = false) // Check $name against the current namespace and use statements. if (self::couldBeClassName($name)) { try { - $maybeAlias = $this->resolveCode($name.'::class'); - if ($maybeAlias !== $name) { - return $maybeAlias; - } + $name = $this->resolveCode($name.'::class'); } catch (RuntimeException $e) { // /shrug } @@ -146,7 +143,7 @@ protected function resolveName($name, $includeFunctions = false) protected function couldBeClassName($name) { // Regex based on https://www.php.net/manual/en/language.oop5.basic.php#language.oop5.basic.class - return \preg_match('/^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*(\\[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*)*$/', $name); + return \preg_match('/^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*(\\\\[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*)*$/', $name); } /** diff --git a/vendor/psy/psysh/src/Configuration.php b/vendor/psy/psysh/src/Configuration.php index d7ca8ba6b..4623fcae2 100644 --- a/vendor/psy/psysh/src/Configuration.php +++ b/vendor/psy/psysh/src/Configuration.php @@ -71,6 +71,7 @@ class Configuration 'useReadline', 'useTabCompletion', 'useUnicode', + 'yolo', 'verbosity', 'warnOnMultipleConfigs', ]; @@ -107,6 +108,7 @@ class Configuration private $forceArrayIndexes = false; private $formatterStyles = []; private $verbosity = self::VERBOSITY_NORMAL; + private $yolo = false; // services private $readline; @@ -199,6 +201,11 @@ public static function fromInput(InputInterface $input) } } + // Handle --yolo + if (self::getOptionFromInput($input, ['yolo'])) { + $config->setYolo(true); + } + return $config; } @@ -341,6 +348,8 @@ public static function getInputOptions() new InputOption('interaction', null, InputOption::VALUE_NONE, 'Force PsySH to run in interactive mode.'), new InputOption('no-interaction', null, InputOption::VALUE_NONE, 'Run PsySH without interactive input. Requires input from stdin.'), new InputOption('raw-output', 'r', InputOption::VALUE_NONE, 'Print var_export-style return values (for non-interactive input)'), + + new InputOption('yolo', null, InputOption::VALUE_NONE, 'Run PsySH with minimal input validation. You probably don\'t want this.'), ]; } @@ -990,12 +999,30 @@ public function setCodeCleaner(CodeCleaner $cleaner) public function getCodeCleaner() { if (!isset($this->cleaner)) { - $this->cleaner = new CodeCleaner(); + $this->cleaner = new CodeCleaner(null, null, null, $this->yolo()); } return $this->cleaner; } + /** + * Enable or disable running PsySH without input validation. + * + * You don't want this. + */ + public function setYolo($yolo) + { + $this->yolo = (bool) $yolo; + } + + /** + * Check whether to disable input validation. + */ + public function yolo() + { + return $this->yolo; + } + /** * Enable or disable tab completion. * diff --git a/vendor/psy/psysh/src/ExecutionLoop/RunkitReloader.php b/vendor/psy/psysh/src/ExecutionLoop/RunkitReloader.php index de10aa041..e0375a2d8 100644 --- a/vendor/psy/psysh/src/ExecutionLoop/RunkitReloader.php +++ b/vendor/psy/psysh/src/ExecutionLoop/RunkitReloader.php @@ -30,7 +30,8 @@ class RunkitReloader extends AbstractListener */ public static function isSupported() { - return \extension_loaded('runkit'); + // runkit_import was removed in runkit7-4.0.0a1 + return \extension_loaded('runkit') || \extension_loaded('runkit7') && \function_exists('runkit_import'); } /** @@ -101,14 +102,22 @@ private function reload(Shell $shell) // } foreach ($modified as $file) { - runkit_import($file, ( + $flags = ( RUNKIT_IMPORT_FUNCTIONS | RUNKIT_IMPORT_CLASSES | RUNKIT_IMPORT_CLASS_METHODS | RUNKIT_IMPORT_CLASS_CONSTS | RUNKIT_IMPORT_CLASS_PROPS | RUNKIT_IMPORT_OVERRIDE - )); + ); + + // these two const cannot be used with RUNKIT_IMPORT_OVERRIDE in runkit7 + if (\extension_loaded('runkit7')) { + $flags &= ~RUNKIT_IMPORT_CLASS_PROPS & ~RUNKIT_IMPORT_CLASS_STATIC_PROPS; + runkit7_import($file, $flags); + } else { + runkit_import($file, $flags); + } } } diff --git a/vendor/psy/psysh/src/Formatter/TraceFormatter.php b/vendor/psy/psysh/src/Formatter/TraceFormatter.php index 6f8debae3..7a638a519 100644 --- a/vendor/psy/psysh/src/Formatter/TraceFormatter.php +++ b/vendor/psy/psysh/src/Formatter/TraceFormatter.php @@ -71,9 +71,14 @@ public static function formatTrace($throwable, FilterOptions $filter = null, $co $class = isset($trace[$i]['class']) ? $trace[$i]['class'] : ''; $type = isset($trace[$i]['type']) ? $trace[$i]['type'] : ''; $function = $trace[$i]['function']; - $file = isset($trace[$i]['file']) ? self::replaceCwd($cwd, $trace[$i]['file']) : 'n/a'; + $file = isset($trace[$i]['file']) ? $trace[$i]['file'] : 'n/a'; $line = isset($trace[$i]['line']) ? $trace[$i]['line'] : 'n/a'; + // Make file paths relative to cwd + if ($cwd !== false) { + $file = \preg_replace('/^'.\preg_quote($cwd, '/').'/', '', $file); + } + // Leave execution loop out of the `eval()'d code` lines if (\preg_match("#/src/Execution(?:Loop)?Closure.php\(\d+\) : eval\(\)'d code$#", \str_replace('\\', '/', $file))) { $file = "eval()'d code"; @@ -96,21 +101,4 @@ public static function formatTrace($throwable, FilterOptions $filter = null, $co return $lines; } - - /** - * Replace the given directory from the start of a filepath. - * - * @param string $cwd - * @param string $file - * - * @return string - */ - private static function replaceCwd($cwd, $file) - { - if ($cwd === false) { - return $file; - } else { - return \preg_replace('/^'.\preg_quote($cwd, '/').'/', '', $file); - } - } } diff --git a/vendor/psy/psysh/src/Shell.php b/vendor/psy/psysh/src/Shell.php index 96014e779..fe703b247 100644 --- a/vendor/psy/psysh/src/Shell.php +++ b/vendor/psy/psysh/src/Shell.php @@ -48,7 +48,7 @@ */ class Shell extends Application { - const VERSION = 'v0.10.6'; + const VERSION = 'v0.10.7'; const PROMPT = '>>> '; const BUFF_PROMPT = '... '; diff --git a/vendor/psy/psysh/src/VarDumper/Dumper.php b/vendor/psy/psysh/src/VarDumper/Dumper.php index 2bcda0501..9ee3ef862 100644 --- a/vendor/psy/psysh/src/VarDumper/Dumper.php +++ b/vendor/psy/psysh/src/VarDumper/Dumper.php @@ -74,7 +74,7 @@ protected function style($style, $value, $attr = []) $map = self::$controlCharsMap; $cchr = $this->styles['cchr']; - $chunks = \preg_split(self::$controlCharsRx, $value, null, \PREG_SPLIT_NO_EMPTY | \PREG_SPLIT_DELIM_CAPTURE); + $chunks = \preg_split(self::$controlCharsRx, $value, -1, \PREG_SPLIT_NO_EMPTY | \PREG_SPLIT_DELIM_CAPTURE); foreach ($chunks as $chunk) { if (\preg_match(self::$onlyControlCharsRx, $chunk)) { $chars = ''; diff --git a/vendor/psy/psysh/src/functions.php b/vendor/psy/psysh/src/functions.php index 1fd073e80..be03c56aa 100644 --- a/vendor/psy/psysh/src/functions.php +++ b/vendor/psy/psysh/src/functions.php @@ -29,7 +29,22 @@ */ function sh() { - return 'extract(\Psy\debug(get_defined_vars(), isset($this) ? $this : @get_called_class()));'; + if (\version_compare(\PHP_VERSION, '8.0', '<')) { + return '\extract(\Psy\debug(\get_defined_vars(), isset($this) ? $this : @\get_called_class()));'; + } + + return <<<'EOS' +if (isset($this)) { + \extract(\Psy\debug(\get_defined_vars(), $this)); +} else { + try { + static::class; + \extract(\Psy\debug(\get_defined_vars(), static::class)); + } catch (\Error $e) { + \extract(\Psy\debug(\get_defined_vars())); + } +} +EOS; } } @@ -175,6 +190,7 @@ function info(Configuration $config = null) $input = [ 'interactive mode' => $config->interactiveMode(), 'input interactive' => $config->getInputInteractive(), + 'yolo' => $config->yolo(), ]; if ($config->hasReadline()) { @@ -367,6 +383,7 @@ function bin() -r, --raw-output Print var_export-style return values (for non-interactive input) -q, --quiet Shhhhhh. -v|vv|vvv, --verbose Increase the verbosity of messages. + --yolo Run PsySH without input validation. You don't want this. EOL; exit($usageException === null ? 0 : 1); diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authorize/LICENSE b/vendor/simplesamlphp/simplesamlphp/modules/authorize/LICENSE index 0a041280b..a345e48d0 100644 --- a/vendor/simplesamlphp/simplesamlphp/modules/authorize/LICENSE +++ b/vendor/simplesamlphp/simplesamlphp/modules/authorize/LICENSE @@ -1,165 +1,459 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 - Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + \ No newline at end of file diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authorize/composer.json b/vendor/simplesamlphp/simplesamlphp/modules/authorize/composer.json index 2e2194e35..1c8478642 100644 --- a/vendor/simplesamlphp/simplesamlphp/modules/authorize/composer.json +++ b/vendor/simplesamlphp/simplesamlphp/modules/authorize/composer.json @@ -3,7 +3,7 @@ "description": "This module provides a user authorization filter based on attribute matching", "type": "simplesamlphp-module", "keywords": ["simplesamlphp", "authorize"], - "license": "LGPL-3.0-or-later", + "license": "LGPL-2.1-or-later", "authors": [ { "name": "Ernesto Revilla", diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authorize/templates/authorize_403.twig b/vendor/simplesamlphp/simplesamlphp/modules/authorize/templates/authorize_403.twig index 52d9a2430..de7718759 100644 --- a/vendor/simplesamlphp/simplesamlphp/modules/authorize/templates/authorize_403.twig +++ b/vendor/simplesamlphp/simplesamlphp/modules/authorize/templates/authorize_403.twig @@ -2,12 +2,12 @@ {% block content %} <h1>{% trans %}{authorize:Authorize:403_header}{% endtrans %}</h1> -{% if reject_msg %} +{% if reject_msg is defined %} <p>{{ reject_msg|translateFromArray }}</p> {% else %} <p>{% trans %}{authorize:Authorize:403_text}{% endtrans %}</p> {% endif %} - {% if logoutURL %} + {% if logoutURL is defined %} <p> <a href="{{ logoutURL }}">{% trans %}{status:logout}{% endtrans %}</a> </p> diff --git a/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php b/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php index 77d1664c7..8bd47407f 100644 --- a/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php +++ b/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php @@ -18,7 +18,7 @@ use Symfony\Component\Config\Definition\PrototypedArrayNode; /** - * Dumps a XML reference configuration for the given configuration/node instance. + * Dumps an XML reference configuration for the given configuration/node instance. * * @author Wouter J <waldio.webdesign@gmail.com> */ diff --git a/vendor/symfony/config/Exception/FileLoaderImportCircularReferenceException.php b/vendor/symfony/config/Exception/FileLoaderImportCircularReferenceException.php index 8c5e73652..aa27f9869 100644 --- a/vendor/symfony/config/Exception/FileLoaderImportCircularReferenceException.php +++ b/vendor/symfony/config/Exception/FileLoaderImportCircularReferenceException.php @@ -18,7 +18,7 @@ */ class FileLoaderImportCircularReferenceException extends LoaderLoadException { - public function __construct(array $resources, int $code = null, \Throwable $previous = null) + public function __construct(array $resources, ?int $code = 0, \Throwable $previous = null) { $message = sprintf('Circular reference detected in "%s" ("%s" > "%s").', $this->varToString($resources[0]), implode('" > "', $resources), $resources[0]); diff --git a/vendor/symfony/config/Exception/FileLoaderLoadException.php b/vendor/symfony/config/Exception/FileLoaderLoadException.php index 16beec593..e53106a11 100644 --- a/vendor/symfony/config/Exception/FileLoaderLoadException.php +++ b/vendor/symfony/config/Exception/FileLoaderLoadException.php @@ -21,13 +21,13 @@ class FileLoaderLoadException extends \Exception { /** - * @param string $resource The resource that could not be imported - * @param string $sourceResource The original resource importing the new resource - * @param int $code The error code - * @param \Throwable $previous A previous exception - * @param string $type The type of resource + * @param string $resource The resource that could not be imported + * @param string|null $sourceResource The original resource importing the new resource + * @param int|null $code The error code + * @param \Throwable|null $previous A previous exception + * @param string|null $type The type of resource */ - public function __construct(string $resource, string $sourceResource = null, int $code = null, \Throwable $previous = null, string $type = null) + public function __construct(string $resource, string $sourceResource = null, ?int $code = 0, \Throwable $previous = null, string $type = null) { $message = ''; if ($previous) { diff --git a/vendor/symfony/config/Loader/DelegatingLoader.php b/vendor/symfony/config/Loader/DelegatingLoader.php index e40e57d7a..fd5c8e957 100644 --- a/vendor/symfony/config/Loader/DelegatingLoader.php +++ b/vendor/symfony/config/Loader/DelegatingLoader.php @@ -34,7 +34,7 @@ public function __construct(LoaderResolverInterface $resolver) public function load($resource, $type = null) { if (false === $loader = $this->resolver->resolve($resource, $type)) { - throw new LoaderLoadException($resource, null, null, null, $type); + throw new LoaderLoadException($resource, null, 0, null, $type); } return $loader->load($resource, $type); diff --git a/vendor/symfony/config/Loader/FileLoader.php b/vendor/symfony/config/Loader/FileLoader.php index 1ca59665a..b7c2491b5 100644 --- a/vendor/symfony/config/Loader/FileLoader.php +++ b/vendor/symfony/config/Loader/FileLoader.php @@ -177,7 +177,7 @@ private function doImport($resource, string $type = null, bool $ignoreErrors = f throw $e; } - throw new LoaderLoadException($resource, $sourceResource, null, $e, $type); + throw new LoaderLoadException($resource, $sourceResource, 0, $e, $type); } } diff --git a/vendor/symfony/config/Loader/Loader.php b/vendor/symfony/config/Loader/Loader.php index 698ab40af..a83088e43 100644 --- a/vendor/symfony/config/Loader/Loader.php +++ b/vendor/symfony/config/Loader/Loader.php @@ -70,7 +70,7 @@ public function resolve($resource, $type = null) $loader = null === $this->resolver ? false : $this->resolver->resolve($resource, $type); if (false === $loader) { - throw new LoaderLoadException($resource, null, null, null, $type); + throw new LoaderLoadException($resource, null, 0, null, $type); } return $loader; diff --git a/vendor/symfony/filesystem/Filesystem.php b/vendor/symfony/filesystem/Filesystem.php index 49c6f70d6..35c568e71 100644 --- a/vendor/symfony/filesystem/Filesystem.php +++ b/vendor/symfony/filesystem/Filesystem.php @@ -717,14 +717,16 @@ private function getSchemeAndHierarchy(string $filename): array } /** + * @param mixed ...$args + * * @return mixed */ - private static function box(callable $func) + private static function box(callable $func, ...$args) { self::$lastError = null; set_error_handler(__CLASS__.'::handleError'); try { - $result = $func(...\array_slice(\func_get_args(), 1)); + $result = $func(...$args); restore_error_handler(); return $result; diff --git a/vendor/symfony/finder/Finder.php b/vendor/symfony/finder/Finder.php index 4cf723bf3..87fc187b2 100644 --- a/vendor/symfony/finder/Finder.php +++ b/vendor/symfony/finder/Finder.php @@ -20,6 +20,7 @@ use Symfony\Component\Finder\Iterator\ExcludeDirectoryFilterIterator; use Symfony\Component\Finder\Iterator\FilecontentFilterIterator; use Symfony\Component\Finder\Iterator\FilenameFilterIterator; +use Symfony\Component\Finder\Iterator\LazyIterator; use Symfony\Component\Finder\Iterator\SizeRangeFilterIterator; use Symfony\Component\Finder\Iterator\SortableIterator; @@ -635,7 +636,9 @@ public function getIterator() $iterator = new \AppendIterator(); foreach ($this->dirs as $dir) { - $iterator->append($this->searchInDirectory($dir)); + $iterator->append(new \IteratorIterator(new LazyIterator(function () use ($dir) { + return $this->searchInDirectory($dir); + }))); } foreach ($this->iterators as $it) { @@ -669,7 +672,8 @@ public function append($iterator) } elseif ($iterator instanceof \Traversable || \is_array($iterator)) { $it = new \ArrayIterator(); foreach ($iterator as $file) { - $it->append($file instanceof \SplFileInfo ? $file : new \SplFileInfo($file)); + $file = $file instanceof \SplFileInfo ? $file : new \SplFileInfo($file); + $it[$file->getPathname()] = $file; } $this->iterators[] = $it; } else { diff --git a/vendor/symfony/finder/Iterator/LazyIterator.php b/vendor/symfony/finder/Iterator/LazyIterator.php new file mode 100644 index 000000000..32cc37ff1 --- /dev/null +++ b/vendor/symfony/finder/Iterator/LazyIterator.php @@ -0,0 +1,32 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * @author Jérémy Derussé <jeremy@derusse.com> + * + * @internal + */ +class LazyIterator implements \IteratorAggregate +{ + private $iteratorFactory; + + public function __construct(callable $iteratorFactory) + { + $this->iteratorFactory = $iteratorFactory; + } + + public function getIterator(): \Traversable + { + yield from ($this->iteratorFactory)(); + } +} diff --git a/vendor/wikimedia/composer-merge-plugin b/vendor/wikimedia/composer-merge-plugin index 81c6ac72a..8ca2ed8ab 160000 --- a/vendor/wikimedia/composer-merge-plugin +++ b/vendor/wikimedia/composer-merge-plugin @@ -1 +1 @@ -Subproject commit 81c6ac72a24a67383419c7eb9aa2b3437f2ab100 +Subproject commit 8ca2ed8ab97c8ebce6b39d9943e9909bb4f18912 diff --git a/web/modules/contrib/colorbox/colorbox.info.yml b/web/modules/contrib/colorbox/colorbox.info.yml index f75ef2844..34c971eb9 100644 --- a/web/modules/contrib/colorbox/colorbox.info.yml +++ b/web/modules/contrib/colorbox/colorbox.info.yml @@ -8,7 +8,7 @@ configure: colorbox.admin_settings dependencies: - drupal:image -# Information added by Drupal.org packaging script on 2020-04-16 -version: '8.x-1.6' +# Information added by Drupal.org packaging script on 2021-03-05 +version: '8.x-1.7' project: 'colorbox' -datestamp: 1587016345 +datestamp: 1614960643 diff --git a/web/modules/contrib/colorbox/colorbox.install b/web/modules/contrib/colorbox/colorbox.install index 065c505ca..7dd17cb44 100644 --- a/web/modules/contrib/colorbox/colorbox.install +++ b/web/modules/contrib/colorbox/colorbox.install @@ -5,16 +5,11 @@ * Install, update and uninstall functions for the colorbox module. */ -use Drupal\Core\Url; - /** * Implements hook_install(). */ function colorbox_install() { \Drupal::messenger()->addMessage(t('Thanks for installing Colorbox')); - \Drupal::messenger()->addMessage(t('You may configure Colorbox by visiting <a href="@url_settings">@url_settings</a>', [ - '@url_settings' => Url::fromRoute('colorbox.admin_settings')->toString(), - ])); } /** diff --git a/web/modules/contrib/colorbox/colorbox.services.yml b/web/modules/contrib/colorbox/colorbox.services.yml index 1fce9d0c1..d7ffa3633 100644 --- a/web/modules/contrib/colorbox/colorbox.services.yml +++ b/web/modules/contrib/colorbox/colorbox.services.yml @@ -5,3 +5,6 @@ services: colorbox.attachment: class: Drupal\colorbox\ColorboxAttachment arguments: ['@colorbox.activation_check', '@module_handler', '@config.factory'] + colorbox.gallery_id_generator: + class: Drupal\colorbox\GalleryIdHelper + arguments: ['@config.factory', '@token'] diff --git a/web/modules/contrib/colorbox/colorbox.theme.inc b/web/modules/contrib/colorbox/colorbox.theme.inc index 7843813a7..07f177578 100644 --- a/web/modules/contrib/colorbox/colorbox.theme.inc +++ b/web/modules/contrib/colorbox/colorbox.theme.inc @@ -5,7 +5,6 @@ * Colorbox theme functions. */ -use Drupal\Component\Utility\Crypt; use Drupal\file\Entity\File; use Drupal\image\Entity\ImageStyle; @@ -26,7 +25,6 @@ */ function template_preprocess_colorbox_formatter(&$variables) { // @codingStandardsIgnoreEnd - static $gallery_token = NULL; $item = $variables['item']; $item_attributes = isset($variables['item_attributes']) ? $variables['item_attributes'] : []; @@ -39,7 +37,6 @@ function template_preprocess_colorbox_formatter(&$variables) { // Build the caption. $entity_title = $entity->label(); $entity_type = $entity->getEntityTypeId(); - $entity_bundle = $entity->bundle(); switch ($settings['colorbox_caption']) { case 'auto': @@ -72,7 +69,11 @@ function template_preprocess_colorbox_formatter(&$variables) { case 'custom': $token_service = \Drupal::token(); - $caption = $token_service->replace($settings['colorbox_caption_custom'], [$entity_type => $entity, 'file' => $item], ['clear' => TRUE]); + $caption = $token_service->replace( + $settings['colorbox_caption_custom'], + [$entity_type => $entity, 'file' => $item], + ['clear' => TRUE] + ); break; default: @@ -84,52 +85,11 @@ function template_preprocess_colorbox_formatter(&$variables) { $config = \Drupal::config('colorbox.settings'); $colorbox_style = $config->get('colorbox_style'); $trim_length = $config->get('colorbox_caption_trim_length'); - if (((strpos($colorbox_style, 'colorbox/example') !== FALSE) || $config->get('colorbox_caption_trim')) && (mb_strlen($caption) > $trim_length)) { - $caption = mb_substr($caption, 0, $trim_length - 5) . '...'; + if (((strpos($colorbox_style, 'colorbox/example') !== FALSE) || $config->get('colorbox_caption_trim')) && (strlen($caption) > $trim_length)) { + $caption = substr($caption, 0, $trim_length - 5) . '...'; } - // Build the gallery id. - $id = $entity->id(); - $entity_id = !empty($id) ? $entity_bundle . '-' . $id : 'entity-id'; - $field_name = $item->getParent()->getName(); - - switch ($settings['colorbox_gallery']) { - case 'post': - $gallery_id = 'gallery-' . $entity_id; - break; - - case 'page': - $gallery_id = 'gallery-all'; - break; - - case 'field_post': - $gallery_id = 'gallery-' . $entity_id . '-' . $field_name; - break; - - case 'field_page': - $gallery_id = 'gallery-' . $field_name; - break; - - case 'custom': - $token_service = \Drupal::token(); - $gallery_id = $token_service->replace($settings['colorbox_gallery_custom'], [$entity_type => $entity, 'file' => $item], ['clear' => TRUE]); - break; - - default: - $gallery_id = ''; - } - - // If gallery id is not empty add unique per-request token to avoid - // images being added manually to galleries. - if (!empty($gallery_id) && $config->get('advanced.unique_token')) { - // Check if gallery token has already been set, we need to reuse - // the token for the whole request. - if (is_null($gallery_token)) { - // We use a short token since randomness is not critical. - $gallery_token = Crypt::randomBytesBase64(8); - } - $gallery_id = $gallery_id . '-' . $gallery_token; - } + $gallery_id = \Drupal::service('colorbox.gallery_id_generator')->generateId($entity, $item, $settings); // Set up the $variables['image'] parameter. if ($settings['style_name'] == 'hide') { @@ -152,7 +112,7 @@ function template_preprocess_colorbox_formatter(&$variables) { $variables['image']['#attributes'] = $item_attributes; // Do not output an empty 'title' attribute. - if (mb_strlen($item->title) != 0) { + if (strlen($item->title) != 0) { $variables['image']['#title'] = $item->title; $data_cbox_img_attrs['title'] = '"title":"' . $item->title . '"'; } diff --git a/web/modules/contrib/colorbox/composer.json b/web/modules/contrib/colorbox/composer.json index 3b02609fb..5ce7f1fe9 100644 --- a/web/modules/contrib/colorbox/composer.json +++ b/web/modules/contrib/colorbox/composer.json @@ -7,7 +7,7 @@ "issues": "https://www.drupal.org/project/issues/colorbox", "source": "https://git.drupalcode.org/project/colorbox" }, - "license": "GPL-2.0+", + "license": "GPL-2.0-or-later", "minimum-stability": "dev", "authors": [ { @@ -35,7 +35,9 @@ } } ], - "require": {}, + "require": { + "drupal/core": "^8.8 || ^9" + }, "suggest": { "jackmoore/colorbox": "The Colorbox library is required to use the drupal/colorbox module." }, diff --git a/web/modules/contrib/colorbox/drush.services.yml b/web/modules/contrib/colorbox/drush.services.yml index 0f8040eb6..e1dbbcf8c 100644 --- a/web/modules/contrib/colorbox/drush.services.yml +++ b/web/modules/contrib/colorbox/drush.services.yml @@ -1,5 +1,7 @@ services: colorbox.commands: class: \Drupal\colorbox\Commands\ColorboxCommands + arguments: + - '@library.discovery' tags: - { name: drush.command } diff --git a/web/modules/contrib/colorbox/src/ColorboxAttachment.php b/web/modules/contrib/colorbox/src/ColorboxAttachment.php index feb843d73..cd09389fb 100644 --- a/web/modules/contrib/colorbox/src/ColorboxAttachment.php +++ b/web/modules/contrib/colorbox/src/ColorboxAttachment.php @@ -15,7 +15,7 @@ class ColorboxAttachment implements ElementAttachmentInterface { use StringTranslationTrait; /** - * The service to determin if colorbox should be activated. + * The service to determine if colorbox should be activated. * * @var \Drupal\colorbox\ActivationCheckInterface */ diff --git a/web/modules/contrib/colorbox/src/Commands/ColorboxCommands.php b/web/modules/contrib/colorbox/src/Commands/ColorboxCommands.php index 8a88efe5e..9b5f81684 100644 --- a/web/modules/contrib/colorbox/src/Commands/ColorboxCommands.php +++ b/web/modules/contrib/colorbox/src/Commands/ColorboxCommands.php @@ -2,10 +2,11 @@ namespace Drupal\colorbox\Commands; +use Drupal\Core\Asset\libraryDiscovery; use Drush\Commands\DrushCommands; -use Symfony\Component\Filesystem\Filesystem; use GuzzleHttp\Client; use GuzzleHttp\Exception\RequestException; +use Symfony\Component\Filesystem\Filesystem; /** * A Drush commandfile. @@ -20,6 +21,20 @@ */ class ColorboxCommands extends DrushCommands { + /** + * Library discovery service. + * + * @var Drupal\Core\Asset\libraryDiscovery + */ + protected $libraryDiscovery; + + /** + * {@inheritdoc} + */ + public function __construct(libraryDiscovery $library_discovery) { + $this->libraryDiscovery = $library_discovery; + } + /** * Download and install the Colorbox plugin. * @@ -49,7 +64,7 @@ public function download($path = '') { } // Load the colorbox defined library. - if ($colorbox_library = \Drupal::service('library.discovery')->getLibraryByName('colorbox', 'colorbox')) { + if ($colorbox_library = $this->libraryDiscovery->getLibraryByName('colorbox', 'colorbox')) { // Download the file. $client = new Client(); $destination = tempnam(sys_get_temp_dir(), 'colorbox-tmp'); diff --git a/web/modules/contrib/colorbox/src/Form/ColorboxSettingsForm.php b/web/modules/contrib/colorbox/src/Form/ColorboxSettingsForm.php index 6d463af95..d73bf6e86 100644 --- a/web/modules/contrib/colorbox/src/Form/ColorboxSettingsForm.php +++ b/web/modules/contrib/colorbox/src/Form/ColorboxSettingsForm.php @@ -66,6 +66,9 @@ protected function getEditableConfigNames() { * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state) { + global $base_url; + $module_path = \Drupal::service('extension.list.module')->getPath('colorbox'); + $img_folder_path = $base_url . '/' . $module_path . '/images/admin'; $config = $this->configFactory->get('colorbox.settings'); @@ -90,7 +93,7 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#title' => $this->t('Style'), '#options' => $colorbox_styles, '#default_value' => $config->get('custom.style'), - '#description' => $this->t('Select the style to use for the Colorbox. The example styles are the ones that come with the Colorbox plugin. Select "None" if you have added Colorbox styles to your theme. <br> <strong>Examples</strong>: <ul><li><a href="/modules/contrib/colorbox/images/admin/example_default.png" target="blank">Default</a></li><li><a href="/modules/contrib/colorbox/images/admin/example_plain.png" target="blank">Plain</a></li><li><a href="/modules/contrib/colorbox/images/admin/example_stockholm_syndrome.png" target="blank">Stockholm Syndrome</a></li><li><a href="/modules/contrib/colorbox/images/admin/colorbox_example_1.png" target="blank">Example 1</a></li><li><a href="/modules/contrib/colorbox/images/admin/colorbox_example_2.png" target="blank">Example 2</a></li><li><a href="/modules/contrib/colorbox/images/admin/colorbox_example_3.png" target="blank">Example 3</a></li><li><a href="/modules/contrib/colorbox/images/admin/colorbox_example_4.png" target="blank">Example 4</a></li><li><a href="/modules/contrib/colorbox/images/admin/example_none.png" target="blank">None</a></li></ul>'), + '#description' => $this->t('Select the style to use for the Colorbox. The example styles are the ones that come with the Colorbox plugin. Select "None" if you have added Colorbox styles to your theme. <br> <strong>Examples</strong>: <ul><li><a href="@img_folder_path/example_default.png" target="blank">Default</a></li><li><a href="@img_folder_path/example_plain.png" target="blank">Plain</a></li><li><a href="@img_folder_path/example_stockholm_syndrome.png" target="blank">Stockholm Syndrome</a></li><li><a href="@img_folder_path/colorbox_example_1.png" target="blank">Example 1</a></li><li><a href="@img_folder_path/colorbox_example_2.png" target="blank">Example 2</a></li><li><a href="@img_folder_path/colorbox_example_3.png" target="blank">Example 3</a></li><li><a href="@img_folder_path/colorbox_example_4.png" target="blank">Example 4</a></li><li><a href="@img_folder_path/example_none.png" target="blank">None</a></li></ul>', ['@img_folder_path' => $img_folder_path]), ]; $form['colorbox_custom_settings']['colorbox_custom_settings_activate'] = [ '#type' => 'radios', diff --git a/web/modules/contrib/colorbox/src/GalleryIdHelper.php b/web/modules/contrib/colorbox/src/GalleryIdHelper.php new file mode 100644 index 000000000..df900e80e --- /dev/null +++ b/web/modules/contrib/colorbox/src/GalleryIdHelper.php @@ -0,0 +1,118 @@ +<?php + +namespace Drupal\colorbox; + +use Drupal\Component\Utility\Crypt; +use Drupal\Core\Config\ConfigFactoryInterface; +use Drupal\Core\Entity\ContentEntityInterface; +use Drupal\Core\Field\FieldItemInterface; +use Drupal\Core\Utility\Token; + +/** + * Implementation of GalleryIdHelper. + * + * @package Drupal\colorbox + */ +class GalleryIdHelper { + + /** + * The Gallery Token. + * + * @var null + */ + protected $galleryToken = NULL; + + /** + * The Configuration Factory. + * + * @var \Drupal\Core\Config\ConfigFactoryInterface + */ + protected $configFactory; + + /** + * The Token. + * + * @var \Drupal\Core\Utility\Token + */ + protected $token; + + /** + * GalleryIdHelper constructor. + * + * @param \Drupal\Core\Config\ConfigFactoryInterface $configFactory + * The Configuration Factory. + * @param \Drupal\Core\Utility\Token $token + * The Token. + */ + public function __construct(ConfigFactoryInterface $configFactory, Token $token) { + $this->configFactory = $configFactory; + $this->token = $token; + } + + /** + * Generate ID. + * + * @param \Drupal\Core\Entity\ContentEntityInterface $entity + * The Entity. + * @param \Drupal\Core\Field\FieldItemInterface $item + * The Item. + * @param array $settings + * The Settings. + * + * @return string + * Return string. + */ + public function generateId(ContentEntityInterface $entity, FieldItemInterface $item, array $settings) { + $entity_bundle = $entity->bundle(); + $entity_type = $entity->getEntityTypeId(); + $config = $this->configFactory->get('colorbox.settings'); + + // Build the gallery id. + $id = $entity->id(); + $entity_id = !empty($id) ? $entity_bundle . '-' . $id : 'entity-id'; + $field_name = $item->getParent()->getName(); + + switch ($settings['colorbox_gallery']) { + case 'post': + $gallery_id = 'gallery-' . $entity_id; + break; + + case 'page': + $gallery_id = 'gallery-all'; + break; + + case 'field_post': + $gallery_id = 'gallery-' . $entity_id . '-' . $field_name; + break; + + case 'field_page': + $gallery_id = 'gallery-' . $field_name; + break; + + case 'custom': + $gallery_id = $this->token->replace( + $settings['colorbox_gallery_custom'], + [$entity_type => $entity, 'file' => $item], + ['clear' => TRUE] + ); + break; + + default: + $gallery_id = ''; + } + + // If gallery id is not empty add unique per-request token to avoid. + // images being added manually to galleries. + if (!empty($gallery_id) && $config->get('advanced.unique_token')) { + // Check if gallery token has already been set, we need to reuse. + // the token for the whole request. + if (is_null($this->galleryToken)) { + // We use a short token since randomness is not critical. + $this->galleryToken = Crypt::randomBytesBase64(8); + } + $gallery_id = $gallery_id . '-' . $this->galleryToken; + } + return $gallery_id; + } + +} diff --git a/web/modules/contrib/colorbox/templates/colorbox-formatter.html.twig b/web/modules/contrib/colorbox/templates/colorbox-formatter.html.twig index b282c1b87..a5c86188f 100644 --- a/web/modules/contrib/colorbox/templates/colorbox-formatter.html.twig +++ b/web/modules/contrib/colorbox/templates/colorbox-formatter.html.twig @@ -13,4 +13,5 @@ * @ingroup themeable */ #} + <a href="{{ url }}"{{ attributes }}>{{ image }}</a> diff --git a/web/modules/contrib/colorbox/tests/modules/colorbox_library_test/colorbox_library_test.info.yml b/web/modules/contrib/colorbox/tests/modules/colorbox_library_test/colorbox_library_test.info.yml index 57dbbebaf..4cae3dd70 100644 --- a/web/modules/contrib/colorbox/tests/modules/colorbox_library_test/colorbox_library_test.info.yml +++ b/web/modules/contrib/colorbox/tests/modules/colorbox_library_test/colorbox_library_test.info.yml @@ -1,11 +1,11 @@ -name: Colorbox Library Test -description: Ensure colorbox can be tested properly with the downloaded library. +name: 'Colorbox Library Test' +description: 'Ensure colorbox can be tested properly with the downloaded library.' type: module hidden: true package: Testing core_version_requirement: ^8.8 || ^9 -# Information added by Drupal.org packaging script on 2020-04-16 -version: '8.x-1.6' +# Information added by Drupal.org packaging script on 2021-03-05 +version: '8.x-1.7' project: 'colorbox' -datestamp: 1587016345 +datestamp: 1614960643 diff --git a/web/modules/contrib/ds/config/schema/ds.field_plugin.schema.yml b/web/modules/contrib/ds/config/schema/ds.field_plugin.schema.yml index b86102837..9f5f19e3d 100644 --- a/web/modules/contrib/ds/config/schema/ds.field_plugin.schema.yml +++ b/web/modules/contrib/ds/config/schema/ds.field_plugin.schema.yml @@ -47,6 +47,14 @@ ds.field_plugin.link: ds.field_plugin.user: type: ds.field_plugin.entity +ds.field_plugin.mail_link: + type: mapping + label: 'Mapping for the mail link field settings' + mapping: + mail_link: + type: boolean + label: 'Link to mail' + ds.field_plugin.entity: type: mapping label: 'Mapping for the entity field settings' diff --git a/web/modules/contrib/ds/config/schema/ds.views.schema.yml b/web/modules/contrib/ds/config/schema/ds.views.schema.yml index 696f54a38..aede0cceb 100644 --- a/web/modules/contrib/ds/config/schema/ds.views.schema.yml +++ b/web/modules/contrib/ds/config/schema/ds.views.schema.yml @@ -72,3 +72,11 @@ ds_views_entity_row: switch: type: boolean label: 'Use the alternative view mode selected in the display settings tab.' + deltas_fieldset: + type: mapping + label: 'Delta fields' + mapping: + delta_fields: + sequence: + - type: string + label: 'Field wrapper' diff --git a/web/modules/contrib/ds/ds.info.yml b/web/modules/contrib/ds/ds.info.yml index 092631b85..5debd2797 100644 --- a/web/modules/contrib/ds/ds.info.yml +++ b/web/modules/contrib/ds/ds.info.yml @@ -10,7 +10,7 @@ dependencies: test_dependencies: - field_group:field_group -# Information added by Drupal.org packaging script on 2020-08-31 -version: '8.x-3.9' +# Information added by Drupal.org packaging script on 2021-03-17 +version: '8.x-3.12' project: 'ds' -datestamp: 1598898823 +datestamp: 1615995337 diff --git a/web/modules/contrib/ds/ds.module b/web/modules/contrib/ds/ds.module index c4c421206..c7f93d09a 100644 --- a/web/modules/contrib/ds/ds.module +++ b/web/modules/contrib/ds/ds.module @@ -309,20 +309,30 @@ function ds_entity_view_alter(&$build, EntityInterface $entity, EntityDisplayInt if (isset($component['third_party_settings']['ds']) && !empty($component['third_party_settings']['ds']['ds_limit'])) { $limit = $component['third_party_settings']['ds']['ds_limit']; if (isset($build[$field]) && isset($build[$field]['#items'])) { - if ($limit === 'delta' && isset($entity->ds_delta) && isset($entity->ds_delta[$field])) { - $delta = $entity->ds_delta[$field]; - $filtered_elements = Element::children($build['field']); + if ($limit === 'delta' && isset($build['#ds_delta']) && isset($build['#ds_delta'][$field])) { + + // Get delta. + $delta = $build['#ds_delta'][$field]; + + // Remove caching for this entity as it otherwise won't work. + unset($build['#cache']); + + $filtered_elements = Element::children($build[$field]); foreach ($filtered_elements as $filtered_element) { if ($filtered_element != $delta) { - unset($build[$field][$filtered_element]); + $build[$field][$filtered_element]['#access'] = FALSE; } } } - else { + elseif (is_numeric($limit)) { + + // Remove caching for this entity as it otherwise won't work. + unset($build['#cache']); + $filtered_elements = Element::children($build[$field]); $filtered_elements = array_slice($filtered_elements, $limit); foreach ($filtered_elements as $filtered_element) { - unset($build[$field][$filtered_element]); + $build[$field][$filtered_element]['#access'] = FALSE; } } } @@ -350,7 +360,6 @@ function ds_entity_view_alter(&$build, EntityInterface $entity, EntityDisplayInt $field['settings'] = $field_values[$key]['settings']; } - /* @var $field_instance \Drupal\ds\Plugin\DsField\DsFieldInterface */ $field_instance = Ds::getFieldInstance($key, $field, $entity, $view_mode, $display, $build); $field_value = $field_instance->build(); $field_title = $field_instance->getTitle(); @@ -408,11 +417,6 @@ function template_preprocess_ds_entity_view(&$variables) { $configuration = $build['#ds_configuration']; - // Process the render array so we can reuse it. - // Don't add/override the cache key if there aren't any. - if (!empty($build['#cache']['keys'])) { - $build['#cache']['keys'][0] = 'ds_entity_view'; - } unset($build['#theme']); unset($build['#pre_render']); unset($build['#sorted']); @@ -497,17 +501,19 @@ function ds_preprocess_ds_layout(&$variables) { } // Create region variables based on the layout settings. - foreach ($layout_settings['wrappers'] as $region_name => $wrapper) { - // @todo remove from D9, This is deprecated - $variables[$region_name . '_classes'] = !empty($layout_settings['classes'][$region_name]) ? ' ' . implode(' ', $layout_settings['classes'][$region_name]) : ''; - // The new way of doing stuff is creating an attributes object. - if (!empty($layout_settings['classes'][$region_name])) { - $variables[$region_name . '_attributes'] = new Attribute(['class' => $layout_settings['classes'][$region_name]]); - } - else { - $variables[$region_name . '_attributes'] = new Attribute(); + if (!empty($layout_settings['wrappers']) && is_array($layout_settings['wrappers'])) { + foreach ($layout_settings['wrappers'] as $region_name => $wrapper) { + // @todo remove from D9, This is deprecated + $variables[$region_name . '_classes'] = !empty($layout_settings['classes'][$region_name]) ? ' ' . implode(' ', $layout_settings['classes'][$region_name]) : ''; + // The new way of doing stuff is creating an attributes object. + if (!empty($layout_settings['classes'][$region_name])) { + $variables[$region_name . '_attributes'] = new Attribute(['class' => $layout_settings['classes'][$region_name]]); + } + else { + $variables[$region_name . '_attributes'] = new Attribute(); + } + $variables[$region_name . '_wrapper'] = !empty($layout_settings['wrappers'][$region_name]) ? $layout_settings['wrappers'][$region_name] : 'div'; } - $variables[$region_name . '_wrapper'] = !empty($layout_settings['wrappers'][$region_name]) ? $layout_settings['wrappers'][$region_name] : 'div'; } // Add a layout wrapper. @@ -1020,7 +1026,7 @@ function ds_field_formatter_third_party_settings_form(FormatterInterface $plugin '#type' => 'textfield', '#title' => t('UI limit'), '#size' => 2, - '#description' => t("Enter a number to limit the number of items or 'delta' to print a specific delta (usually configured in views or found in entity->ds_delta). Leave empty to display them all. Note that depending on the formatter settings, this option might not always work."), + '#description' => t("Enter a number to limit the number of items or 'delta' to print a specific delta (usually configured in views or found in entity->ds_delta).<br />Leave empty to display them all. Note that depending on the formatter settings, this option might not always work."), '#default_value' => !empty($settings[$name]['ds_limit']) ? $settings[$name]['ds_limit'] : '', ]; } diff --git a/web/modules/contrib/ds/ds.routing.yml b/web/modules/contrib/ds/ds.routing.yml index f3d81fe6b..9b1152019 100644 --- a/web/modules/contrib/ds/ds.routing.yml +++ b/web/modules/contrib/ds/ds.routing.yml @@ -13,7 +13,7 @@ ds.list: requirements: _permission: 'admin display suite' ds.admin_settings: - path: 'admin/structure/ds/settings' + path: '/admin/structure/ds/settings' defaults: _form: '\Drupal\ds\Form\SettingsForm' _title: 'Settings' diff --git a/web/modules/contrib/ds/includes/field_ui.inc b/web/modules/contrib/ds/includes/field_ui.inc index f0ae68e27..91402ce32 100644 --- a/web/modules/contrib/ds/includes/field_ui.inc +++ b/web/modules/contrib/ds/includes/field_ui.inc @@ -11,6 +11,7 @@ use Drupal\Core\Entity\Entity\EntityViewDisplay; use Drupal\Core\Form\FormState; use Drupal\Core\Form\FormStateInterface; +use Drupal\Core\Messenger\MessengerInterface; use Drupal\Core\Plugin\PluginFormInterface; use Drupal\Core\Render\Element; use Drupal\Core\Url; @@ -428,7 +429,7 @@ function ds_field_ui_layouts_save($form, FormStateInterface $form_state) { $record['layout']['settings']['attributes'] = ''; $record['layout']['settings']['link_attribute'] = FALSE; $record['layout']['settings']['link_custom'] = ''; - $fields = _ds_sort_fields($form_state->getValue('fields'), 'weight'); + $fields = _ds_sort_fields((array) $form_state->getValue('fields'), 'weight'); foreach ($fields as $field_key => $field) { // Ignore new fieldgroup, new field or existing field. @@ -455,7 +456,7 @@ function ds_field_ui_layouts_save($form, FormStateInterface $form_state) { elseif (!empty($layout)) { $save_display = TRUE; - $fields = _ds_sort_fields($form_state->getValue('fields'), 'weight'); + $fields = _ds_sort_fields((array) $form_state->getValue('fields'), 'weight'); foreach ($fields as $key => $field) { // Make sure to hide hidden fields. @@ -851,38 +852,56 @@ function _ds_field_ui_table_layouts($entity_type, $bundle, $view_mode, array &$f // See if we can clone from another view mode. $options = []; $entity_displays = \Drupal::configFactory()->listAll('core.entity_view_display.' . $entity_type . '.' . $bundle); - foreach ($entity_displays as $name) { - $row = \Drupal::config($name)->get(); - if ($row['mode'] == $view_mode) { - continue; - } - if ($row['targetEntityType'] == $entity_type && $row['bundle'] == $bundle) { - $options[$row['id']] = Unicode::ucfirst(str_replace('_', ' ', $row['targetEntityType'])) . ' > ' . Unicode::ucfirst(str_replace('_', ' ', $row['bundle'])) . ' > ' . Unicode::ucfirst(str_replace('_', ' ', $row['mode'])); + if (!empty($entity_displays)) { + $entity_type_info = \Drupal::entityTypeManager()->getDefinition($entity_type); + foreach ($entity_displays as $name) { + $row = \Drupal::config($name)->get(); + if ($row['mode'] === $view_mode) { + continue; + } + + if ($row['mode'] != 'default') { + $view_mode_label = \Drupal::entityTypeManager()->getStorage('entity_view_mode')->load($entity_type . '.' . $row['mode'])->label(); + } + else { + $view_mode_label = 'Default'; + } + + if ($row['targetEntityType'] === $entity_type && $row['bundle'] === $bundle) { + if ($entity_type_info->getBundleEntityType()) { + $bundle_info = \Drupal::entityTypeManager()->getStorage($entity_type_info->getBundleEntityType())->load($bundle); + $options[$row['id']] = $entity_type_info->getLabel() . ' > ' . $bundle_info->label() . ' > ' . $view_mode_label; + } + else { + $options[$row['id']] = $entity_type_info->getLabel() . ' > ' . $view_mode_label; + } + } } - } - if (!empty($options)) { + if (!empty($options)) { + natcasesort($options); - // Clone from another layout. - $form['ds_clone'] = [ - '#type' => 'details', - '#group' => 'additional_settings', - '#title' => t('Clone layout'), - '#collapsible' => TRUE, - '#collapsed' => TRUE, - ]; - $form['ds_clone']['clone'] = [ - '#title' => t('Select an existing layout to clone.'), - '#type' => 'select', - '#options' => $options, - '#weight' => 20, - ]; - $form['ds_clone']['clone_submit'] = [ - '#type' => 'submit', - '#value' => t('Clone layout'), - '#submit' => ['ds_field_ui_layout_clone'], - '#weight' => 21, - ]; + // Clone from another layout. + $form['ds_clone'] = [ + '#type' => 'details', + '#group' => 'additional_settings', + '#title' => t('Clone layout'), + '#collapsible' => TRUE, + '#collapsed' => TRUE, + ]; + $form['ds_clone']['clone'] = [ + '#title' => t('Select an existing layout to clone.'), + '#type' => 'select', + '#options' => $options, + '#weight' => 20, + ]; + $form['ds_clone']['clone_submit'] = [ + '#type' => 'submit', + '#value' => t('Clone layout'), + '#submit' => ['ds_field_ui_layout_clone'], + '#weight' => 21, + ]; + } } } @@ -1134,6 +1153,80 @@ function _ds_field_ui_fields($entity_type, $bundle, $view_mode, array &$form, Fo $field_settings = $form['#ds_layout']['fields']; $form['#field_settings'] = $field_settings; + if (empty($form['fields'])) { + // EntityDisplayFormBase doesn't add the fields table and field_ui library + // when there are no fields. Since DS needs those, we add them. + $form['#attached']['library'][] = 'field_ui/drupal.field_ui'; + $form['fields'] = [ + '#type' => 'field_ui_table', + '#weight' => -101, + '#header' => [ + t('Field'), + t('Weight'), + t('Parent'), + t('Region'), + t('Label'), + ['data' => t('Format'), 'colspan' => 3], + ], + '#regions' => [], + '#attributes' => [ + 'class' => ['field-ui-overview'], + 'id' => 'field-display-overview', + ], + '#tabledrag' => [ + [ + 'action' => 'order', + 'relationship' => 'sibling', + 'group' => 'field-weight', + ], + [ + 'action' => 'match', + 'relationship' => 'parent', + 'group' => 'field-parent', + 'subgroup' => 'field-parent', + 'source' => 'field-name', + ], + [ + 'action' => 'match', + 'relationship' => 'parent', + 'group' => 'field-region', + 'subgroup' => 'field-region', + 'source' => 'field-name', + ], + ], + ]; + + // Check for the 'There are no fields yet added. You can add new fields on + // the Manage fields page.' warning message. We really don't need it. + $warnings = \Drupal::messenger()->messagesByType(MessengerInterface::TYPE_WARNING); + if (count($warnings) == 1) { + \Drupal::messenger()->deleteByType(MessengerInterface::TYPE_WARNING); + } + + // In overviews involving nested rows from contributed modules (i.e + // field_group), the 'plugin type' selects can trigger a series of changes + // in child rows. The #ajax behavior is therefore not attached directly to + // the selects, but triggered by the client-side script through a hidden + // #ajax 'Refresh' button. A hidden 'refresh_rows' input tracks the name of + // affected rows. + $form['refresh_rows'] = ['#type' => 'hidden']; + $form['refresh'] = [ + '#type' => 'submit', + '#value' => t('Refresh'), + '#op' => 'refresh_table', + '#submit' => ['::multistepSubmit'], + '#ajax' => [ + 'callback' => '::multistepAjax', + 'wrapper' => 'field-display-overview-wrapper', + 'effect' => 'fade', + // The button stays hidden, so we hide the Ajax spinner too. Ad-hoc + // spinners will be added manually by the client-side script. + 'progress' => 'none', + ], + '#attributes' => ['class' => ['visually-hidden']], + ]; + + } $table = &$form['fields']; $form['#ds_fields'] = []; @@ -1449,6 +1542,7 @@ function ds_field_row_form_format_summary_construct(&$table, $key, FormStateInte */ function _ds_sort_fields(array $a, $subkey) { $c = []; + $b = []; foreach ($a as $k => $v) { if (isset($v[$subkey])) { $b[$k] = $v[$subkey]; diff --git a/web/modules/contrib/ds/modules/ds_devel/ds_devel.info.yml b/web/modules/contrib/ds/modules/ds_devel/ds_devel.info.yml index b3031ad1f..0b796897f 100644 --- a/web/modules/contrib/ds/modules/ds_devel/ds_devel.info.yml +++ b/web/modules/contrib/ds/modules/ds_devel/ds_devel.info.yml @@ -7,7 +7,7 @@ dependencies: - ds:ds - devel:devel -# Information added by Drupal.org packaging script on 2020-08-31 -version: '8.x-3.9' +# Information added by Drupal.org packaging script on 2021-03-17 +version: '8.x-3.12' project: 'ds' -datestamp: 1598898823 +datestamp: 1615995337 diff --git a/web/modules/contrib/ds/modules/ds_extras/ds_extras.info.yml b/web/modules/contrib/ds/modules/ds_extras/ds_extras.info.yml index d1383a186..4547da244 100644 --- a/web/modules/contrib/ds/modules/ds_extras/ds_extras.info.yml +++ b/web/modules/contrib/ds/modules/ds_extras/ds_extras.info.yml @@ -7,7 +7,7 @@ configure: admin/structure/ds/settings dependencies: - ds:ds -# Information added by Drupal.org packaging script on 2020-08-31 -version: '8.x-3.9' +# Information added by Drupal.org packaging script on 2021-03-17 +version: '8.x-3.12' project: 'ds' -datestamp: 1598898823 +datestamp: 1615995337 diff --git a/web/modules/contrib/ds/modules/ds_switch_view_mode/ds_switch_view_mode.info.yml b/web/modules/contrib/ds/modules/ds_switch_view_mode/ds_switch_view_mode.info.yml index 55cce0962..41b854105 100644 --- a/web/modules/contrib/ds/modules/ds_switch_view_mode/ds_switch_view_mode.info.yml +++ b/web/modules/contrib/ds/modules/ds_switch_view_mode/ds_switch_view_mode.info.yml @@ -6,7 +6,7 @@ package: 'Display Suite' dependencies: - ds:ds -# Information added by Drupal.org packaging script on 2020-08-31 -version: '8.x-3.9' +# Information added by Drupal.org packaging script on 2021-03-17 +version: '8.x-3.12' project: 'ds' -datestamp: 1598898823 +datestamp: 1615995337 diff --git a/web/modules/contrib/ds/src/Plugin/DsField/Field.php b/web/modules/contrib/ds/src/Plugin/DsField/Field.php index f7760b3c1..ef5f9aeb8 100644 --- a/web/modules/contrib/ds/src/Plugin/DsField/Field.php +++ b/web/modules/contrib/ds/src/Plugin/DsField/Field.php @@ -3,6 +3,7 @@ namespace Drupal\ds\Plugin\DsField; use Drupal\Core\Template\Attribute; +use Drupal\Core\Url; /** * The base plugin to create DS fields. @@ -42,7 +43,7 @@ public function build() { <{{ wrapper }}{{ attributes }}> {% endif %} {% if is_link %} - {{ link(output, entity_url) }} + {{ link(output, entity_url, link_attributes) }} {% else %} {{ output }} {% endif %} @@ -57,8 +58,14 @@ public function build() { $is_link = FALSE; $entity_url = NULL; if (!empty($this->entity()->id())) { - $is_link = !empty($config['link']); - $entity_url = $this->entity()->toUrl(); + $is_link = !empty($config['link']) || !empty($config['mail_link']); + + if (!empty($config['mail_link'])) { + $entity_url = Url::fromUri('mailto:' . $output); + } + else { + $entity_url = $this->entity()->toUrl(); + } if (!empty($config['link class'])) { $entity_url->setOption('attributes', ['class' => explode(' ', $config['link class'])]); } @@ -77,6 +84,7 @@ public function build() { 'is_link' => $is_link, 'wrapper' => !empty($config['wrapper']) ? $config['wrapper'] : '', 'attributes' => $attributes, + 'link_attributes' => new Attribute(), 'entity_url' => $entity_url, 'output' => $output, ], diff --git a/web/modules/contrib/ds/src/Plugin/DsField/User/UserMail.php b/web/modules/contrib/ds/src/Plugin/DsField/User/UserMail.php new file mode 100644 index 000000000..7e17bd160 --- /dev/null +++ b/web/modules/contrib/ds/src/Plugin/DsField/User/UserMail.php @@ -0,0 +1,58 @@ +<?php + +namespace Drupal\ds\Plugin\DsField\User; + +use Drupal\Core\Form\FormStateInterface; +use Drupal\ds\Plugin\DsField\Field; + +/** + * Plugin that renders the username. + * + * @DsField( + * id = "usermail", + * title = @Translation("User e-mail"), + * entity_type = "user", + * provider = "user" + * ) + */ +class UserMail extends Field { + + /** + * {@inheritdoc} + */ + public function entityRenderKey() { + return 'mail'; + } + + /** + * {@inheritdoc} + */ + public function settingsForm($form, FormStateInterface $form_state) { + $config = $this->getConfiguration(); + + $settings['mail_link'] = [ + '#type' => 'checkbox', + '#title' => 'Link to mail', + '#default_value' => $config['mail_link'], + ]; + + return $settings; + } + + /** + * {@inheritdoc} + */ + public function settingsSummary($settings) { + $config = $this->getConfiguration(); + + $summary = []; + if (!empty($config['mail_link'])) { + $summary[] = 'Link to mail: yes'; + } + else { + $summary[] = 'Link to mail: no'; + } + + return $summary; + } +} diff --git a/web/modules/contrib/ds/src/Plugin/views/Entity/Render/CurrentLanguageRenderer.php b/web/modules/contrib/ds/src/Plugin/views/Entity/Render/CurrentLanguageRenderer.php index 9f31c7163..9bcc7ac87 100644 --- a/web/modules/contrib/ds/src/Plugin/views/Entity/Render/CurrentLanguageRenderer.php +++ b/web/modules/contrib/ds/src/Plugin/views/Entity/Render/CurrentLanguageRenderer.php @@ -14,8 +14,11 @@ class CurrentLanguageRenderer extends RendererBase { * * @param \Drupal\views\ResultRow $row * The result row. + * + * @return string */ public function getLangcode(ResultRow $row) { + return $this->languageManager->getCurrentLanguage()->getId(); } } diff --git a/web/modules/contrib/ds/src/Plugin/views/Entity/Render/RendererBase.php b/web/modules/contrib/ds/src/Plugin/views/Entity/Render/RendererBase.php index a3d24f8fa..fcefd2105 100644 --- a/web/modules/contrib/ds/src/Plugin/views/Entity/Render/RendererBase.php +++ b/web/modules/contrib/ds/src/Plugin/views/Entity/Render/RendererBase.php @@ -3,6 +3,7 @@ namespace Drupal\ds\Plugin\views\Entity\Render; use Drupal\views\Entity\Render\EntityTranslationRendererBase; +use Drupal\views\ResultRow; /** * Renders entities in the current language. @@ -17,12 +18,53 @@ public function preRender(array $result) { $this->dsPreRender($result); } + /** + * {@inheritdoc} + */ + public function render(ResultRow $row) { + $entity_id = $row->_entity->id(); + $langcode = $this->getLangcode($row); + if (isset($this->build[$entity_id][$langcode])) { + $build = $this->build[$entity_id][$langcode]; + $this->alterBuild($build, $row); + return $build; + } + return []; + } + + /** + * Alter the build. + * + * @param $build + * @param $row + */ + protected function alterBuild(&$build, $row) { + // Add row index. Remember that in case you want to use this, you will + // have to remove the cache for this build. + $build['#row_index'] = isset($row->index) ? $row->index : NULL; + + // Delta fields. + $delta_fields = $this->view->rowPlugin->options['delta_fieldset']['delta_fields']; + if (!empty($delta_fields)) { + foreach ($delta_fields as $field) { + $field_name_delta = $field . '_delta'; + if (isset($row->{$field_name_delta})) { + $build['#ds_delta'][$field] = $row->{$field_name_delta}; + } + } + } + } + /** * Pre renders all the Display Suite rows. + * + * @param array $result + * @param bool $translation */ protected function dsPreRender(array $result, $translation = FALSE) { if ($result) { - // Get all entities which will be used to render in rows. + + // Get the view builder to render this entity. $view_builder = \Drupal::entityTypeManager()->getViewBuilder($this->entityType->id()); $i = 0; @@ -33,6 +75,7 @@ protected function dsPreRender(array $result, $translation = FALSE) { $group_value_content = ''; $entity = $row->_entity; $entity->view = $this->view; + /* @var $entity \Drupal\Core\Entity\EntityInterface */ $entity_id = $entity->id(); $langcode = $this->getLangcode($row); @@ -66,12 +109,10 @@ protected function dsPreRender(array $result, $translation = FALSE) { $modules = \Drupal::moduleHandler()->getImplementations('ds_views_row_render_entity'); foreach ($modules as $module) { if ($content = \Drupal::moduleHandler()->invoke($module, 'ds_views_row_render_entity', [$entity, $view_mode])) { - if (!$translation) { - $this->build[$entity_id] = $content; - } - else { - $this->build[$entity_id][$langcode] = $content; + if (!is_array($content)) { + $content = ['#markup' => $content]; } + $this->build[$entity_id][$langcode] = $content; $rendered = TRUE; } } @@ -87,22 +128,10 @@ protected function dsPreRender(array $result, $translation = FALSE) { \Drupal::moduleHandler()->alter('ds_views_view_mode', $view_mode, $context); if (!$rendered) { - if (!$translation) { - if (!empty($view_mode)) { - $this->build[$entity_id] = $view_builder->view($entity, $view_mode, $langcode); - } - else { - $this->build[$entity_id] = $view_builder->view($entity, 'full', $langcode); - } - } - else { - if (!empty($view_mode)) { - $this->build[$entity_id][$langcode] = $view_builder->view($entity, $view_mode, $langcode); - } - else { - $this->build[$entity_id][$langcode] = $view_builder->view($entity, 'full', $langcode); - } + if (empty($view_mode)) { + $view_mode = 'full'; } + $this->build[$entity_id][$langcode] = $view_builder->view($entity, $view_mode, $langcode); } $context = [ diff --git a/web/modules/contrib/ds/src/Plugin/views/Entity/Render/TranslationLanguageRenderer.php b/web/modules/contrib/ds/src/Plugin/views/Entity/Render/TranslationLanguageRenderer.php index 759032f15..7d4bb7c4d 100644 --- a/web/modules/contrib/ds/src/Plugin/views/Entity/Render/TranslationLanguageRenderer.php +++ b/web/modules/contrib/ds/src/Plugin/views/Entity/Render/TranslationLanguageRenderer.php @@ -6,7 +6,7 @@ use Drupal\views\ResultRow; /** - * Renders entities in the current language. + * Renders entity translations in their row language. */ class TranslationLanguageRenderer extends DefaultLanguageRenderer { @@ -52,7 +52,13 @@ public function preRender(array $result) { public function render(ResultRow $row) { $entity_id = $row->_entity->id(); $langcode = $this->getLangcode($row); - return $this->build[$entity_id][$langcode]; + if (isset($this->build[$entity_id][$langcode])) { + $build = $this->build[$entity_id][$langcode]; + $this->alterBuild($build, $row); + return $build; + } + + return []; } /** diff --git a/web/modules/contrib/ds/src/Plugin/views/row/EntityRow.php b/web/modules/contrib/ds/src/Plugin/views/row/EntityRow.php index 4107271ac..88275a7da 100644 --- a/web/modules/contrib/ds/src/Plugin/views/row/EntityRow.php +++ b/web/modules/contrib/ds/src/Plugin/views/row/EntityRow.php @@ -18,6 +18,22 @@ */ class EntityRow extends ViewsEntityRow { + /** + * {@inheritdoc} + */ + public function query() { + parent::query(); + + $delta_fields = $this->options['delta_fieldset']['delta_fields']; + if (!empty($delta_fields)) { + foreach ($delta_fields as $field) { + $table_name = $this->entityTypeId . '__' . $field; + $field_name_delta = $field . '_delta'; + $this->view->query->addField($table_name, 'delta', $field_name_delta); + } + } + } + /** * Contains an array of render arrays, one for each rendered entity. * @@ -57,6 +73,11 @@ protected function defineOptions() { 'switch' => ['default' => FALSE, 'bool' => TRUE], ], ]; + $options['delta_fieldset'] = [ + 'contains' => [ + 'delta_fields' => ['default' => []], + ], + ]; return $options; } @@ -167,6 +188,30 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) { $form['grouping_fieldset']['group']['#description'] = $this->t('Grouping is disabled because you do not have any sort fields.'); } + // Delta fields. + $delta_fields = []; + $fields = \Drupal::service('entity_field.manager')->getFieldStorageDefinitions($this->entityTypeId); + /** @var \Drupal\Core\Field\FieldStorageDefinitionInterface $field */ + foreach ($fields as $key => $field) { + if ($field->getCardinality() != 1) { + $delta_fields[$key] = $key; + } + } + $form['delta_fieldset'] = array( + '#type' => 'fieldset', + '#title' => t('Delta fields'), + '#collapsible' => TRUE, + '#collapsed' => empty($this->options['delta_fields']), + ); + $form['delta_fieldset']['delta_fields'] = array( + '#type' => 'select', + '#title' => t('Select fields'), + '#description' => t('Select fields which "delta" value should be added to the result row. On the manage display of an entity you can decide to look for this delta value to only print that row.'), + '#options' => $delta_fields, + '#multiple' => TRUE, + '#default_value' => !empty($this->options['delta_fieldset']['delta_fields']) ? $this->options['delta_fieldset']['delta_fields'] : '', + ); + // Advanced function. $form['advanced_fieldset'] = [ '#type' => 'details', diff --git a/web/modules/contrib/ds/tests/modules/ds_exportables_test/ds_exportables_test.info.yml b/web/modules/contrib/ds/tests/modules/ds_exportables_test/ds_exportables_test.info.yml index bb92a2240..6105aaa81 100644 --- a/web/modules/contrib/ds/tests/modules/ds_exportables_test/ds_exportables_test.info.yml +++ b/web/modules/contrib/ds/tests/modules/ds_exportables_test/ds_exportables_test.info.yml @@ -5,7 +5,7 @@ package: 'Display Suite' core_version_requirement: ^8.8 || ^9 hidden: TRUE -# Information added by Drupal.org packaging script on 2020-08-31 -version: '8.x-3.9' +# Information added by Drupal.org packaging script on 2021-03-17 +version: '8.x-3.12' project: 'ds' -datestamp: 1598898823 +datestamp: 1615995337 diff --git a/web/modules/contrib/ds/tests/modules/ds_test/ds_test.info.yml b/web/modules/contrib/ds/tests/modules/ds_test/ds_test.info.yml index fbbabc08a..3335c7cf6 100644 --- a/web/modules/contrib/ds/tests/modules/ds_test/ds_test.info.yml +++ b/web/modules/contrib/ds/tests/modules/ds_test/ds_test.info.yml @@ -6,7 +6,7 @@ type: module dependencies: - ds_extras:ds_extras -# Information added by Drupal.org packaging script on 2020-08-31 -version: '8.x-3.9' +# Information added by Drupal.org packaging script on 2021-03-17 +version: '8.x-3.12' project: 'ds' -datestamp: 1598898823 +datestamp: 1615995337 diff --git a/web/modules/contrib/ds/tests/modules/ds_test_rdf/ds_test_rdf.info.yml b/web/modules/contrib/ds/tests/modules/ds_test_rdf/ds_test_rdf.info.yml index 7c3c19371..4fdce2424 100644 --- a/web/modules/contrib/ds/tests/modules/ds_test_rdf/ds_test_rdf.info.yml +++ b/web/modules/contrib/ds/tests/modules/ds_test_rdf/ds_test_rdf.info.yml @@ -4,7 +4,7 @@ core_version_requirement: ^8.8 || ^9 package: 'Display Suite' type: module -# Information added by Drupal.org packaging script on 2020-08-31 -version: '8.x-3.9' +# Information added by Drupal.org packaging script on 2021-03-17 +version: '8.x-3.12' project: 'ds' -datestamp: 1598898823 +datestamp: 1615995337 diff --git a/web/modules/contrib/ds/tests/src/Functional/FieldGroupTest.php b/web/modules/contrib/ds/tests/src/Functional/FieldGroupTest.php index 6c6577d5c..5726f9fc1 100644 --- a/web/modules/contrib/ds/tests/src/Functional/FieldGroupTest.php +++ b/web/modules/contrib/ds/tests/src/Functional/FieldGroupTest.php @@ -7,17 +7,19 @@ /** * Tests for field group integration with Display Suite. * - * @group ds + * @group ds_disabled */ class FieldGroupTest extends TestBase { - use FieldGroupTestTrait; + //use FieldGroupTestTrait; /** * Test tabs. */ public function testFieldPlugin() { + return; + // Create a node. $settings = ['type' => 'article', 'promote' => 1]; $node = $this->drupalCreateNode($settings); diff --git a/web/modules/contrib/ds/tests/src/Functional/TestBase.php b/web/modules/contrib/ds/tests/src/Functional/TestBase.php index 50f4bc34a..86fcf9eb9 100644 --- a/web/modules/contrib/ds/tests/src/Functional/TestBase.php +++ b/web/modules/contrib/ds/tests/src/Functional/TestBase.php @@ -42,7 +42,7 @@ abstract class TestBase extends BrowserTestBase { 'ds_test', 'ds_switch_view_mode', 'layout_discovery', - 'field_group', + //'field_group', ]; /** diff --git a/web/modules/contrib/ds/tests/themes/ds_test_layout_theme/ds_test_layout_theme.info.yml b/web/modules/contrib/ds/tests/themes/ds_test_layout_theme/ds_test_layout_theme.info.yml index da31eb720..3041ddc87 100644 --- a/web/modules/contrib/ds/tests/themes/ds_test_layout_theme/ds_test_layout_theme.info.yml +++ b/web/modules/contrib/ds/tests/themes/ds_test_layout_theme/ds_test_layout_theme.info.yml @@ -4,7 +4,7 @@ description: 'Theme for testing a theme-provided layout' base theme: classy core_version_requirement: ^8.8 || ^9 -# Information added by Drupal.org packaging script on 2020-08-31 -version: '8.x-3.9' +# Information added by Drupal.org packaging script on 2021-03-17 +version: '8.x-3.12' project: 'ds' -datestamp: 1598898823 +datestamp: 1615995337 diff --git a/web/modules/contrib/easy_breadcrumb/README.md b/web/modules/contrib/easy_breadcrumb/README.md index ba49132c5..65deb3597 100644 --- a/web/modules/contrib/easy_breadcrumb/README.md +++ b/web/modules/contrib/easy_breadcrumb/README.md @@ -25,7 +25,7 @@ to automatically extract the breadcrumb's segments and its respective links. The module is really a plug and play module because it auto-generates the breadcrumb by using the current URL and nothing extra is needed. - * For a full description of the module visit: + * For the description of the module visit: https://www.drupal.org/project/easy_breadcrumb or https://www.drupal.org/docs/8/improve-the-breadcrumbs diff --git a/web/modules/contrib/easy_breadcrumb/config/install/easy_breadcrumb.settings.yml b/web/modules/contrib/easy_breadcrumb/config/install/easy_breadcrumb.settings.yml index 21d8c9535..e282ca815 100644 --- a/web/modules/contrib/easy_breadcrumb/config/install/easy_breadcrumb.settings.yml +++ b/web/modules/contrib/easy_breadcrumb/config/install/easy_breadcrumb.settings.yml @@ -1,33 +1,39 @@ -applies_admin_routes: TRUE -include_home_segment: TRUE -home_segment_title: 'Home' -home_segment_keep: FALSE -include_title_segment: TRUE -language_path_prefix_as_segment: FALSE -use_menu_title_as_fallback: FALSE -use_page_title_as_menu_title_fallback: FALSE -remove_repeated_segments: TRUE -term_hierarchy: FALSE -absolute_paths: FALSE -hide_single_home_item: FALSE -title_from_page_when_available: TRUE -capitalizator_mode: 'ucwords' +applies_admin_routes: true +include_home_segment: true +alternative_title_field: 'field_breadcrumb_title' +home_segment_title: Home +home_segment_keep: false +include_title_segment: true +language_path_prefix_as_segment: false +use_menu_title_as_fallback: false +use_page_title_as_menu_title_fallback: false +remove_repeated_segments: true +term_hierarchy: false +absolute_paths: false +hide_single_home_item: false +title_from_page_when_available: true +capitalizator_mode: ucwords capitalizator_ignored_words: - of - and - or - de - del - - y + - 'y' - o - a -capitalizator_forced_words_first_letter: FALSE -capitalizator_forced_words_case_sensitivity: TRUE -add_structured_data_jsonld: FALSE -use_site_title: FALSE -dependencies: - module: - - easy_breadcrumb - enforced: - module: - - easy_breadcrumb +capitalizator_forced_words: { } +capitalizator_forced_words_first_letter: false +capitalizator_forced_words_case_sensitivity: true +add_structured_data_json_ld: false +use_site_title: false +include_invalid_paths: false +excluded_paths: '' +replaced_titles: '' +custom_paths: '' +title_segment_as_link: false +follow_redirects: true +limit_segment_display: FALSE +truncator_mode: false +truncator_length: '100' +truncator_dots: true diff --git a/web/modules/contrib/easy_breadcrumb/config/schema/easy_breadcrumb.schema.yml b/web/modules/contrib/easy_breadcrumb/config/schema/easy_breadcrumb.schema.yml index ec7fa8287..145b210f1 100644 --- a/web/modules/contrib/easy_breadcrumb/config/schema/easy_breadcrumb.schema.yml +++ b/web/modules/contrib/easy_breadcrumb/config/schema/easy_breadcrumb.schema.yml @@ -20,6 +20,10 @@ easy_breadcrumb.settings: include_home_segment: type: boolean label: 'Include the front page as a segment in the breadcrumb' + alternative_title_field: + type: label + label: 'Alternative title field for the breadcrumb' + translatable: true home_segment_title: type: label label: 'Title for the front page segment in the breadcrumb' @@ -60,9 +64,48 @@ easy_breadcrumb.settings: term_hierarchy: type: boolean label: 'Use term hierarchy' - add_structured_data_jsonld: - type: boolean - label: 'Add current breadcrumb as structured data in JSON-LD to the HTML head' use_site_title: type: boolean label: 'Use site title for the front page segment in the breadcrumb' + add_structured_data_json_ld: + type: boolean + label: 'Add current breadcrumb as structured data in JSON-LD to the HTML head' + capitalizator_mode: + type: string + label: 'Transformation mode for the segments titles' + capitalizator_ignored_words: + type: sequence + label: 'Words to be ignored by the capitalizator' + sequence: + type: text + label: 'Ignored word' + capitalizator_forced_words: + type: sequence + label: 'Words to be forced to capitalized by the capitalizator' + sequence: + type: text + label: 'Forced word' + capitalizator_forced_words_case_sensitivity: + type: boolean + label: 'Use case sensitivity when matching words to be forced to capitalization.' + capitalizator_forced_words_first_letter: + type: boolean + label: 'Make the first letters of each segment capitalized.' + follow_redirects: + type: boolean + label: 'Follow redirects if the redirect module is enabled.' + limit_segment_display: + type: boolean + label: 'Limit breadcrumb trail segments' + segment_display_limit: + type: number + label: 'Breadcrumb segment count' + truncator_mode: + type: boolean + label: 'Enable truncation for titles.' + truncator_length: + type: text + label: 'Set the limit for truncation.' + truncator_dots: + type: boolean + label: 'Enable dots at the end of truncation.' diff --git a/web/modules/contrib/easy_breadcrumb/easy_breadcrumb.info.yml b/web/modules/contrib/easy_breadcrumb/easy_breadcrumb.info.yml index 5e08396a4..4c7341936 100644 --- a/web/modules/contrib/easy_breadcrumb/easy_breadcrumb.info.yml +++ b/web/modules/contrib/easy_breadcrumb/easy_breadcrumb.info.yml @@ -1,11 +1,12 @@ name: 'Easy Breadcrumb' type: module description: 'Provides configurable path based breadcrumbs.' +package: 'Navigation' core: 8.x core_version_requirement: ^8 || ^9 configure: easy_breadcrumb.general_settings_form -# Information added by Drupal.org packaging script on 2020-07-22 -version: '8.x-1.13' +# Information added by Drupal.org packaging script on 2021-03-09 +version: '8.x-1.15' project: 'easy_breadcrumb' -datestamp: 1595377204 +datestamp: 1615310469 diff --git a/web/modules/contrib/easy_breadcrumb/easy_breadcrumb.install b/web/modules/contrib/easy_breadcrumb/easy_breadcrumb.install index d2ef72df5..169ff8b1f 100644 --- a/web/modules/contrib/easy_breadcrumb/easy_breadcrumb.install +++ b/web/modules/contrib/easy_breadcrumb/easy_breadcrumb.install @@ -68,6 +68,57 @@ function easy_breadcrumb_update_8005() { drupal_flush_all_caches(); } +/** + * Fix configuration. + */ +function easy_breadcrumb_update_8006() { + $config = \Drupal::configFactory()->getEditable(EasyBreadcrumbConstants::MODULE_SETTINGS); + + $config + // This key is now named 'add_structured_data_json_ld'. + ->clear('add_structured_data_jsonld') + // This key is unnecessary. + ->clear('dependencies'); + + // Add missing keys if not present. + $potentially_missing_keys = [ + EasyBreadcrumbConstants::ADD_STRUCTURED_DATA_JSON_LD => FALSE, + EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS => [], + EasyBreadcrumbConstants::INCLUDE_INVALID_PATHS => FALSE, + EasyBreadcrumbConstants::EXCLUDED_PATHS => '', + EasyBreadcrumbConstants::REPLACED_TITLES => '', + EasyBreadcrumbConstants::CUSTOM_PATHS => '', + EasyBreadcrumbConstants::TITLE_SEGMENT_AS_LINK => FALSE, + ]; + $data = $config->get(); + foreach ($potentially_missing_keys as $key => $default) { + if (!isset($data[$key])) { + $config->set($key, $default); + } + } + + // Fix variable types. + $config->set(EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS_FIRST_LETTER, (bool) $config->get(EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS_FIRST_LETTER)); + $config->set(EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS_CASE_SENSITIVITY, (bool) $config->get(EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS_CASE_SENSITIVITY)); + $config->set(EasyBreadcrumbConstants::ADD_STRUCTURED_DATA_JSON_LD, (bool) $config->get(EasyBreadcrumbConstants::ADD_STRUCTURED_DATA_JSON_LD)); + + // Change 'capitalizator_ignored_words' and 'capitalizator_forced_words' to be + // lists rather than maps. + $config->set(EasyBreadcrumbConstants::CAPITALIZATOR_IGNORED_WORDS, array_values($config->get(EasyBreadcrumbConstants::CAPITALIZATOR_IGNORED_WORDS) ?: [])); + $config->set(EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS, array_values($config->get(EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS) ?: [])); + + $config->save(TRUE); +} + +/** + * Enable follow redirects. + */ +function easy_breadcrumb_update_8007() { + $config = \Drupal::configFactory()->getEditable(EasyBreadcrumbConstants::MODULE_SETTINGS); + $config->set(EasyBreadcrumbConstants::FOLLOW_REDIRECTS, TRUE); + $config->save(TRUE); +} + /** * Implements hook_install(). * diff --git a/web/modules/contrib/easy_breadcrumb/easy_breadcrumb.services.yml b/web/modules/contrib/easy_breadcrumb/easy_breadcrumb.services.yml index 2a98661fc..c2abae63b 100644 --- a/web/modules/contrib/easy_breadcrumb/easy_breadcrumb.services.yml +++ b/web/modules/contrib/easy_breadcrumb/easy_breadcrumb.services.yml @@ -7,3 +7,9 @@ services: easy_breadcrumb.structured_data_json_ld: class: Drupal\easy_breadcrumb\EasyBreadcrumbStructuredDataJsonLd arguments: ['@easy_breadcrumb.breadcrumb', '@config.factory', '@current_route_match'] + logger.channel.easy_breadcrumb: + parent: logger.channel_base + arguments: ['easy_breadcrumb'] + easy_breadcrumb.title_resolver: + class: Drupal\easy_breadcrumb\TitleResolver + arguments: ['@controller_resolver', '@string_translation', '@http_kernel.controller.argument_resolver'] diff --git a/web/modules/contrib/easy_breadcrumb/src/EasyBreadcrumbBuilder.php b/web/modules/contrib/easy_breadcrumb/src/EasyBreadcrumbBuilder.php old mode 100755 new mode 100644 index 35a401f9e..91cdf2f7c --- a/web/modules/contrib/easy_breadcrumb/src/EasyBreadcrumbBuilder.php +++ b/web/modules/contrib/easy_breadcrumb/src/EasyBreadcrumbBuilder.php @@ -3,6 +3,7 @@ namespace Drupal\easy_breadcrumb; use Drupal\Component\Render\MarkupInterface; +use Drupal\Component\Utility\Html; use Drupal\Component\Utility\Unicode; use Drupal\Component\Utility\Xss; use Drupal\Core\Access\AccessManagerInterface; @@ -38,6 +39,7 @@ use Symfony\Component\Routing\Exception\RouteNotFoundException; use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Entity\EntityRepositoryInterface; +use Drupal\Core\Entity\ContentEntityInterface; /** * Primary implementation for the Easy Breadcrumb builder. @@ -96,7 +98,7 @@ class EasyBreadcrumbBuilder implements BreadcrumbBuilderInterface { /** * The title resolver. * - * @var \Drupal\Core\Controller\TitleResolverInterface + * @var \Drupal\easy_breadcrumb\TitleResolver */ protected $titleResolver; @@ -178,7 +180,7 @@ class EasyBreadcrumbBuilder implements BreadcrumbBuilderInterface { * The inbound path processor. * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory * The config factory service. - * @param \Drupal\Core\Controller\TitleResolverInterface $title_resolver + * @param \Drupal\easy_breadcrumb\TitleResolverInterface $title_resolver * The title resolver service. * @param \Drupal\Core\Session\AccountInterface $current_user * The current user object. @@ -219,6 +221,17 @@ public function __construct(RequestContext $context, AccessManagerInterface $acc $this->moduleHandler = $module_handler; } + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container) { + return new static( + // $container->get('easy_breadcrumb.title_resolver'),. + $definition = $container->getDefinition('easy_breadcrumb.title_resolver'), + $definition->setClass('Drupal\easy_breadcrumb\TitleResolver') + ); + } + /** * {@inheritdoc} */ @@ -250,6 +263,8 @@ public function build(RouteMatchInterface $route_match) { $curr_lang = $this->languageManager->getCurrentLanguage()->getId(); $replacedTitles = []; $mapValues = preg_split('/[\r\n]+/', $this->config->get(EasyBreadcrumbConstants::REPLACED_TITLES)); + $limit_display = $this->config->get(EasyBreadcrumbConstants::LIMIT_SEGMENT_DISPLAY); + $segment_limit = $this->config->get(EasyBreadcrumbConstants::SEGMENT_DISPLAY_LIMIT); foreach ($mapValues as $mapValue) { $values = explode("::", $mapValue); @@ -295,22 +310,39 @@ public function build(RouteMatchInterface $route_match) { $is_regex = preg_match('/^regex\s*!\s*\/(.*)/', $custom_path, $regex_match); if ($is_regex) { $custom_path = $regex_match[1]; - $url_group_matches = []; + $regex_group_matches = []; } // If the path matches the current path, build the breadcrumbs. if ( - ($is_regex && preg_match("|" . $custom_path . "|", $path, $url_group_matches)) + ($is_regex && preg_match("|" . $custom_path . "|", $path, $regex_group_matches)) || (!$is_regex && $path == $custom_path) ) { if ($this->config->get(EasyBreadcrumbConstants::INCLUDE_HOME_SEGMENT)) { $links[] = Link::createFromRoute($this->config->get(EasyBreadcrumbConstants::HOME_SEGMENT_TITLE), '<front>'); } + if ($is_regex && count($regex_group_matches) > 1) { + // Discard first element as that's the full matched string + // rather than a captured group. + array_shift($regex_group_matches); + } + // Get $title|[$url] pairs from $values. foreach ($values as $pair) { $settings = explode("|", $pair); - $title = Xss::filter(trim($settings[0])); + $title = Html::decodeEntities(Xss::filter(trim($settings[0]))); + + // If the custom title includes any regex match groups + // (eg. "/foo/(\d*)/bar") then check if the urls for any segments + // have matched group variables (eg. $1 or $3) and if they do + // substitute them out for the the corresponding + // matched strings. + if ($is_regex) { + foreach ($regex_group_matches as $group_num => $captured_str) { + $title = str_replace('$' . ($group_num + 1), urlencode($captured_str), $title); + } + } // Get URL if it is provided. $url = ''; @@ -322,11 +354,8 @@ public function build(RouteMatchInterface $route_match) { // have matched group variables (eg. $1 or $3) and if they do // substitute them out for the the corresponding // matched strings. - if ($is_regex && count($url_group_matches) > 1) { - // Discard first element as that's the full matched string - // rather than a captured group. - array_shift($url_group_matches); - foreach ($url_group_matches as $group_num => $captured_str) { + if ($is_regex) { + foreach ($regex_group_matches as $group_num => $captured_str) { $url = str_replace('$' . ($group_num + 1), urlencode($captured_str), $url); } } @@ -401,7 +430,7 @@ public function build(RouteMatchInterface $route_match) { // Remove the first parameter if it matches the current language. if (!($this->config->get(EasyBreadcrumbConstants::LANGUAGE_PATH_PREFIX_AS_SEGMENT))) { - if (mb_strtolower($path_elements[0]) == $curr_lang) { + if (mb_strtolower($path_elements[0]) == mb_strtolower($curr_lang)) { // Preserve case in language to allow path matching to work properly. $curr_lang = $path_elements[0]; @@ -410,7 +439,11 @@ public function build(RouteMatchInterface $route_match) { } } } - while (count($path_elements) > 0) { + + // Remove leading breadcrumb segments by limiting the following loop. + $loop_limit = ($limit_display && isset($segment_limit)) ? $segment_limit : 0; + + while (count($path_elements) > $loop_limit) { $check_path = '/' . implode('/', $path_elements); if ($add_langcode) { $check_path = '/' . $curr_lang . $check_path; @@ -434,15 +467,32 @@ public function build(RouteMatchInterface $route_match) { // the access result's cacheability metadata. if ($access->isAllowed()) { if ($this->config->get(EasyBreadcrumbConstants::TITLE_FROM_PAGE_WHEN_AVAILABLE)) { - $title = $this->normalizeText($this->getTitleString($route_request, $route_match, $replacedTitles)); - if (empty($title)) { - unset($title); + // Get the title if the current route represents an entity. + if (($route = $route_match->getRouteObject()) && ($parameters = $route->getOption('parameters'))) { + foreach ($parameters as $name => $options) { + if (isset($options['type']) && strpos($options['type'], 'entity:') === 0) { + $entity = $route_match->getParameter($name); + if ($entity instanceof ContentEntityInterface && $entity->hasLinkTemplate('canonical')) { + $title = $entity->label(); + break; + } + } + } } + else { + $title = $this->normalizeText($this->getTitleString($route_request, $route_match, $replacedTitles)); + if ($this->config->get(EasyBreadcrumbConstants::TRUNCATOR_MODE)) { + $title = $this->truncator($title); + } + if (empty($title)) { + unset($title); + } - // If the title is to be replaced... - if (!empty($title) && array_key_exists($title, $replacedTitles)) { - // Replaces the title. - $title = $replacedTitles[(string) $title]; + // If the title is to be replaced... + if (!empty($title) && array_key_exists($title, $replacedTitles)) { + // Replaces the title. + $title = $replacedTitles[(string) $title]; + } } } if (!isset($title)) { @@ -460,6 +510,9 @@ public function build(RouteMatchInterface $route_match) { if ($title && array_key_exists($title, $replacedTitles)) { $title = $replacedTitles[$title]; } + if ($this->config->get(EasyBreadcrumbConstants::TRUNCATOR_MODE)) { + $title = $this->truncator($title); + } } } else { @@ -468,6 +521,9 @@ public function build(RouteMatchInterface $route_match) { if (array_key_exists($title, $replacedTitles)) { $title = $replacedTitles[$title]; } + if ($this->config->get(EasyBreadcrumbConstants::TRUNCATOR_MODE)) { + $title = $this->truncator($title); + } } } @@ -478,6 +534,9 @@ public function build(RouteMatchInterface $route_match) { if (array_key_exists($title, $replacedTitles)) { $title = $replacedTitles[$title]; } + if ($this->config->get(EasyBreadcrumbConstants::TRUNCATOR_MODE)) { + $title = $this->truncator($title); + } } } @@ -487,7 +546,7 @@ public function build(RouteMatchInterface $route_match) { && !$this->config->get(EasyBreadcrumbConstants::TITLE_SEGMENT_AS_LINK)) { $links[] = Link::createFromRoute($title, '<none>'); } - else { + elseif ($route_match->getRouteObject()) { $url = Url::fromRouteMatch($route_match); if ($this->config->get(EasyBreadcrumbConstants::ABSOLUTE_PATHS)) { $url->setOption('absolute', TRUE); @@ -599,12 +658,48 @@ public function applyTitleReplacement(&$title, array $replacements) { * Either the current title string or NULL if unable to determine it. */ public function getTitleString(Request $route_request, RouteMatchInterface $route_match, array $replacedTitles) { - $title = $this->titleResolver->getTitle($route_request, $route_match->getRouteObject()); + try { + $title = $this->titleResolver->getTitle($route_request, $route_match->getRouteObject()); + } + catch (\InvalidArgumentException $exception) { + $title = NULL; + } $this->applyTitleReplacement($title, $replacedTitles); + // Title resolver only returns title if route defines a _title or + // _title_callback but some core routes like node.edit or block_content.edit + // uses $main_content['#title'] to set a title. Add an special case to set a + // title for {entity_type_id}.{operation} when it's possible. + if (NULL === $title && $entityForm = $route_match->getRouteObject()->getDefault('_entity_form')) { + $entityFormParts = explode('.', $entityForm); + + if (2 === count($entityFormParts)) { + $entity_type_id = $entityFormParts[0]; + $operation = $entityFormParts[1]; + + // Operations that can be used as a title: add, edit or delete. + if (in_array($operation, ['add', 'edit', 'delete'])) { + $title = $operation; + } + // Operations used to show the entity: default, view or preview. + elseif (in_array($operation, ['default', 'view', 'preview'])) { + if ($entity = $route_match->getParameter($entity_type_id)) { + if (is_object($entity)) { + if (method_exists($entity, 'getTitle')) { + $title = $entity->getTitle(); + } + elseif (method_exists($entity, 'label')) { + $title = $entity->label(); + } + } + } + } + } + } + // If title is object then try to render it. if ($title instanceof MarkupInterface) { - $title = strip_tags((string) $title); + $title = strip_tags(Html::decodeEntities($title)); } // Other paths, such as admin/structure/menu/manage/main, will // return a render array suitable to render using core's XSS filter. @@ -612,12 +707,10 @@ public function getTitleString(Request $route_request, RouteMatchInterface $rout // If this render array has #allowed tags use that instead of default. $tags = array_key_exists('#allowed_tags', $title) ? $title['#allowed_tags'] : NULL; - $title = Xss::filter($title['#markup'], $tags); + $title = Html::decodeEntities(Xss::filter($title['#markup'], $tags)); } - // If a route declares the title in an unexpected way, log and return NULL. if (!is_string($title)) { - $this->logger->get('easy_breadcrumb')->notice('Easy Breadcrumb could not determine the title to use for @path', ['@path' => $route_match->getRouteObject()->getPath()]); return NULL; } @@ -709,7 +802,7 @@ protected function getRequestForPath($path, array $exclude) { // Check to see if the path is actually a redirect, if it is, resolve it to // its source before we create the request. Strip the starting slash, // redirect module doesn't include it. - if ($this->moduleHandler->moduleExists('redirect')) { + if ($this->moduleHandler->moduleExists('redirect') && $this->config->get(EasyBreadcrumbConstants::FOLLOW_REDIRECTS)) { $redirect_path = $path; if ($redirect_path[0] === '/') { $redirect_path = substr($redirect_path, 1); @@ -799,7 +892,7 @@ private function normalizeText($raw_text) { for ($i = 1; $i < $words_quantity; ++$i) { // Transforms this word only if it is not in the list of ignored words. - if (!isset($ignored_words[$words[$i]])) { + if (!in_array($words[$i], $ignored_words, TRUE)) { $words[$i] = Unicode::ucfirst($words[$i]); } } @@ -846,7 +939,7 @@ private function normalizeText($raw_text) { } $normalized_text = implode(' ', $words); } - else { + elseif ($capitalizator_mode === 'ucfirst') { // Transforms the text 'once a time' to 'Once a time' (ucfirst). $normalized_text = Unicode::ucfirst($normalized_text); @@ -855,4 +948,24 @@ private function normalizeText($raw_text) { return $normalized_text; } + /** + * Truncate the title. + * + * @param string $title + * Text/title to be truncated. + * + * @return array|\Drupal\Core\StringTranslation\TranslatableMarkup|false|mixed|string|null + * Return truncated title. + */ + public function truncator(string $title) { + $title = mb_strimwidth( + $title, + 0, + $this->config->get(EasyBreadcrumbConstants::TRUNCATOR_LENGTH), + $this->config->get(EasyBreadcrumbConstants::TRUNCATOR_DOTS) ? '...' : '', + 'utf8' + ); + return $title; + } + } diff --git a/web/modules/contrib/easy_breadcrumb/src/EasyBreadcrumbConstants.php b/web/modules/contrib/easy_breadcrumb/src/EasyBreadcrumbConstants.php index 8172ab1c4..24429d2ab 100644 --- a/web/modules/contrib/easy_breadcrumb/src/EasyBreadcrumbConstants.php +++ b/web/modules/contrib/easy_breadcrumb/src/EasyBreadcrumbConstants.php @@ -51,6 +51,11 @@ class EasyBreadcrumbConstants { */ const INCLUDE_HOME_SEGMENT = 'include_home_segment'; + /** + * Alternative title field for breadcrumbs. + */ + const ALTERNATIVE_TITLE_FIELD = 'alternative_title_field'; + /** * Title for the front page segment. */ @@ -146,6 +151,36 @@ class EasyBreadcrumbConstants { */ const ADD_STRUCTURED_DATA_JSON_LD = 'add_structured_data_json_ld'; + /** + * Follow redirects in case the redirect module is enabled. + */ + const FOLLOW_REDIRECTS = 'follow_redirects'; + + /** + * Limit breadcrumb trail segments. + */ + const LIMIT_SEGMENT_DISPLAY = 'limit_segment_display'; + + /** + * Breadcrumb segment count. + */ + const SEGMENT_DISPLAY_LIMIT = 'segment_display_limit'; + + /** + * Breadcrumb truncator mode. + */ + const TRUNCATOR_MODE = 'truncator_mode'; + + /** + * Breadcrumb truncator length. + */ + const TRUNCATOR_LENGTH = 'truncator_length'; + + /** + * Breadcrumbs truncator dots. + */ + const TRUNCATOR_DOTS = 'truncator_dots'; + /** * Default list of excluded paths. * diff --git a/web/modules/contrib/easy_breadcrumb/src/EasyBreadcrumbStructuredDataJsonLd.php b/web/modules/contrib/easy_breadcrumb/src/EasyBreadcrumbStructuredDataJsonLd.php index 9dfeb8c74..e0a204e34 100644 --- a/web/modules/contrib/easy_breadcrumb/src/EasyBreadcrumbStructuredDataJsonLd.php +++ b/web/modules/contrib/easy_breadcrumb/src/EasyBreadcrumbStructuredDataJsonLd.php @@ -91,6 +91,10 @@ public function value() { $name = $link->getText(); $item = $link->getUrl()->setAbsolute(TRUE)->toString(); + // Escape " to produce valid json for titles with "" in them. + $name = str_replace('"','\"', $name); + $item = str_replace('"','\"', $item); + // Add a comma before each item except the first. if ($position > 1) { $value .= ','; @@ -112,6 +116,7 @@ public function value() { "name": "' . $name . '" }'; } + // Increment position for next run. $position++; diff --git a/web/modules/contrib/easy_breadcrumb/src/Form/EasyBreadcrumbGeneralSettingsForm.php b/web/modules/contrib/easy_breadcrumb/src/Form/EasyBreadcrumbGeneralSettingsForm.php index b4b3448f4..b83f704ce 100644 --- a/web/modules/contrib/easy_breadcrumb/src/Form/EasyBreadcrumbGeneralSettingsForm.php +++ b/web/modules/contrib/easy_breadcrumb/src/Form/EasyBreadcrumbGeneralSettingsForm.php @@ -84,6 +84,13 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#default_value' => $config->get(EasyBreadcrumbConstants::INCLUDE_HOME_SEGMENT), ]; + $details_general[EasyBreadcrumbConstants::ALTERNATIVE_TITLE_FIELD] = [ + '#type' => 'textfield', + '#title' => $this->t('Alternative title field name for breadcrumb'), + '#description' => $this->t('This field name is to be added in the entity to display the alternative title in the breadcrumb.'), + '#default_value' => $config->get(EasyBreadcrumbConstants::ALTERNATIVE_TITLE_FIELD), + ]; + $details_general[EasyBreadcrumbConstants::HOME_SEGMENT_TITLE] = [ '#type' => 'textfield', '#title' => $this->t('Title for the front page segment in the breadcrumb'), @@ -110,6 +117,16 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#title' => $this->t('Use page title as fallback for menu title'), '#description' => $this->t('Use page title as fallback if menu title cannot be found. This option works when not using "real page title" above.'), '#default_value' => $config->get(EasyBreadcrumbConstants::USE_PAGE_TITLE_AS_MENU_TITLE_FALLBACK), + // This option is evaluated only if the USE_MENU_TITLE_AS_FALLBACK + // is checked. + '#states' => [ + 'disabled' => [ + ':input[name="' . EasyBreadcrumbConstants::USE_MENU_TITLE_AS_FALLBACK . '"]' => ['checked' => FALSE], + ], + 'invisible' => [ + ':input[name="' . EasyBreadcrumbConstants::USE_MENU_TITLE_AS_FALLBACK . '"]' => ['checked' => FALSE], + ], + ], ]; $details_general[EasyBreadcrumbConstants::USE_SITE_TITLE] = [ @@ -126,6 +143,13 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#default_value' => $config->get(EasyBreadcrumbConstants::ADD_STRUCTURED_DATA_JSON_LD), ]; + $details_general[EasyBreadcrumbConstants::FOLLOW_REDIRECTS] = [ + '#type' => 'checkbox', + '#title' => $this->t('Follow redirects.'), + '#description' => $this->t('In case the <a href="@href" target="_blank">redirect module</a> is enabled, follow the configured redirects', ['@href' => 'https://www.drupal.org/project/redirect']), + '#default_value' => $config->get(EasyBreadcrumbConstants::FOLLOW_REDIRECTS), + ]; + // Formats the excluded paths array as line separated list of paths // before displaying them. $excluded_paths = $config->get(EasyBreadcrumbConstants::EXCLUDED_PATHS); @@ -138,6 +162,20 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#default_value' => $excluded_paths, ]; + $details_general[EasyBreadcrumbConstants::LIMIT_SEGMENT_DISPLAY] = [ + '#type' => 'checkbox', + '#title' => $this->t('Limit breadcrumb trail segments'), + '#description' => $this->t('Limit the number of displayed breadcrumb trail segments.'), + '#default_value' => $config->get(EasyBreadcrumbConstants::LIMIT_SEGMENT_DISPLAY), + ]; + + $details_general[EasyBreadcrumbConstants::SEGMENT_DISPLAY_LIMIT] = [ + '#type' => 'number', + '#title' => $this->t('Breadcrumb segment count'), + '#description' => $this->t('Number of breadcrumb trail segments to display'), + '#default_value' => $config->get(EasyBreadcrumbConstants::SEGMENT_DISPLAY_LIMIT), + ]; + // Formats the excluded paths array as line separated list of paths // before displaying them. $replaced_titles = $config->get(EasyBreadcrumbConstants::REPLACED_TITLES); @@ -293,6 +331,41 @@ public function buildForm(array $form, FormStateInterface $form_state) { ], ]; + $details_advanced[EasyBreadcrumbConstants::TRUNCATOR_MODE] = [ + '#type' => 'checkbox', + '#title' => $this->t("Truncate the page's title to a maximum number."), + '#description' => t("Example: if you set it to 10, from <em>Long page title</em> will be <em>Long pa...</em>"), + '#default_value' => $config->get(EasyBreadcrumbConstants::TRUNCATOR_MODE), + ]; + + $details_advanced[EasyBreadcrumbConstants::TRUNCATOR_LENGTH] = [ + '#type' => 'textfield', + '#title' => $this->t("Set the limit of truncation"), + '#default_value' => $config->get(EasyBreadcrumbConstants::TRUNCATOR_LENGTH), + '#states' => [ + 'visible' => [ + ':input[name="' . EasyBreadcrumbConstants::TRUNCATOR_MODE . '"]' => ['checked' => TRUE], + ], + 'invisible' => [ + ':input[name="' . EasyBreadcrumbConstants::TRUNCATOR_MODE . '"]' => ['checked' => FALSE], + ], + ], + ]; + + $details_advanced[EasyBreadcrumbConstants::TRUNCATOR_DOTS] = [ + '#type' => 'checkbox', + '#title' => $this->t("The truncated page's title will have 3 dots in its end."), + '#default_value' => $config->get(EasyBreadcrumbConstants::TRUNCATOR_DOTS), + '#states' => [ + 'visible' => [ + ':input[name="' . EasyBreadcrumbConstants::TRUNCATOR_MODE . '"]' => ['checked' => TRUE], + ], + 'invisible' => [ + ':input[name="' . EasyBreadcrumbConstants::TRUNCATOR_MODE . '"]' => ['checked' => FALSE], + ], + ], + ]; + $form = []; // Inserts the details for grouping general settings fields. @@ -309,7 +382,18 @@ public function submitForm(array &$form, FormStateInterface $form_state) { $settings = $this->configFactory->getEditable(EasyBreadcrumbConstants::MODULE_SETTINGS); + // Get the values. $values = $form_state->cleanValues()->getValues(); + + // Convert words lists to arrays where required. + $keys_to_process = [ + EasyBreadcrumbConstants::CAPITALIZATOR_IGNORED_WORDS, + EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS, + ]; + foreach ($keys_to_process as $key) { + $values[$key] = $this->processValuesToArray($values[$key]); + } + foreach ($values as $field_key => $field_value) { $settings->set($field_key, $field_value); } @@ -331,14 +415,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) { * An array of processed words. */ private function processValuesToArray($words) { - $words_arr = []; - $words = preg_replace('/\r*\n+/', ' ', $words); - $words = trim($words); - $words_arr_aux = $words === '' ? [] : preg_split('/\s+/', $words); - foreach ($words_arr_aux as $word) { - $words_arr[$word] = $word; - } - return $words_arr; + return preg_split('/\s+/', $words, -1, PREG_SPLIT_NO_EMPTY); } } diff --git a/web/modules/contrib/easy_breadcrumb/src/TitleResolver.php b/web/modules/contrib/easy_breadcrumb/src/TitleResolver.php new file mode 100644 index 000000000..776fb58ae --- /dev/null +++ b/web/modules/contrib/easy_breadcrumb/src/TitleResolver.php @@ -0,0 +1,79 @@ +<?php + +namespace Drupal\easy_breadcrumb; + +use Drupal\Core\Controller\TitleResolver as ControllerTitleResolver; +use Drupal\Core\Url; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\Routing\Route; +use Drupal\Core\Entity\EntityTypeManagerInterface; +use Symfony\Component\DependencyInjection\ContainerInterface; +use Drupal\Core\Config\ConfigFactoryInterface; +use Drupal\Component\Utility\Xss; + +/** + * Class TitleResolver. + */ +class TitleResolver extends ControllerTitleResolver { + + /** + * The field storage config storage. + * + * @var \Drupal\Core\Entity\EntityTypeManager + */ + protected $entityTypeManager; + + /** + * Breadcrumb config object. + * + * @var \Drupal\Core\Config\Config + */ + protected $config; + + /** + * Constructs a new EntityDisplayRebuilder. + * + * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager + * The entity manager. + * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory + * The config factory service. + */ + public function __construct(EntityTypeManagerInterface $entity_type_manager, ConfigFactoryInterface $config_factory) { + $this->entityTypeManager = $entity_type_manager; + $this->config = $config_factory->get(EasyBreadcrumbConstants::MODULE_SETTINGS); + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container) { + return new static( + $container->get('entity_type.manager'), + $container->get('config.factory') + ); + } + + /** + * {@inheritdoc} + */ + public function getTitle(Request $request, Route $route) { + $url = Url::fromUri("internal:" . $request->getRequestUri()); + $route_parts = explode(".", $url->getRouteName()); + $entity = NULL; + $params = $url->getRouteParameters(); + if ($route_parts[0] === 'entity' && $route_parts[2] === 'canonical') { + $entity_type = $route_parts[1]; + $entity = $this->entityTypeManager->getStorage($entity_type)->load($params[$entity_type]); + + } + if ($entity !== NULL) { + $alternative_title_field = $this->config->get(EasyBreadcrumbConstants::ALTERNATIVE_TITLE_FIELD); + if ($entity->hasField($alternative_title_field) && !$entity->get($alternative_title_field) + ->isEmpty()) { + return Xss::filter($entity->get($alternative_title_field)->value); + } + } + return parent::getTitle($request, $route); + } + +} diff --git a/web/modules/contrib/easy_breadcrumb/tests/modules/easy_breadcrumb_test/easy_breadcrumb_test.info.yml b/web/modules/contrib/easy_breadcrumb/tests/modules/easy_breadcrumb_test/easy_breadcrumb_test.info.yml index f22e6f9c7..bc2636ece 100644 --- a/web/modules/contrib/easy_breadcrumb/tests/modules/easy_breadcrumb_test/easy_breadcrumb_test.info.yml +++ b/web/modules/contrib/easy_breadcrumb/tests/modules/easy_breadcrumb_test/easy_breadcrumb_test.info.yml @@ -5,7 +5,7 @@ core: 8.x core_version_requirement: ^8 || ^9 type: module -# Information added by Drupal.org packaging script on 2020-07-22 -version: '8.x-1.13' +# Information added by Drupal.org packaging script on 2021-03-09 +version: '8.x-1.15' project: 'easy_breadcrumb' -datestamp: 1595377204 +datestamp: 1615310469 diff --git a/web/modules/contrib/easy_breadcrumb/tests/src/Functional/EasyBreabcrumbConfigureTest.php b/web/modules/contrib/easy_breadcrumb/tests/src/Functional/EasyBreabcrumbConfigureTest.php new file mode 100644 index 000000000..06d7869d9 --- /dev/null +++ b/web/modules/contrib/easy_breadcrumb/tests/src/Functional/EasyBreabcrumbConfigureTest.php @@ -0,0 +1,111 @@ +<?php + +namespace Drupal\Tests\easy_email\Functional; + +use Drupal\Core\Serialization\Yaml; +use Drupal\easy_breadcrumb\EasyBreadcrumbConstants; +use Drupal\Tests\BrowserTestBase; + +/** + * Tests configuring easy_breadcrumb. + * + * @group easy_breadcrumb + */ +class EasyBreabcrumbConfigureTest extends BrowserTestBase { + + /** + * {@inheritdoc} + */ + protected static $modules = ['easy_breadcrumb']; + + /** + * {@inheritdoc} + */ + protected $defaultTheme = 'stark'; + + /** + * Tests configuring easy_breadcrumb. + */ + public function testAdministration() { + $assert = $this->assertSession(); + + $config_after_install = $this->config('easy_breadcrumb.settings')->get(); + $this->drupalGet('admin/config/user-interface/easy-breadcrumb'); + $assert->statusCodeEquals(403); + + $this->drupalLogin($this->createUser(['administer easy breadcrumb'])); + $this->drupalGet('admin/config/user-interface/easy-breadcrumb'); + $assert->statusCodeEquals(200); + $this->submitForm([], 'Save configuration'); + $assert->statusCodeEquals(200); + $assert->pageTextContainsOnce('The configuration options have been saved.'); + $this->assertSame($config_after_install, $this->config('easy_breadcrumb.settings')->get()); + } + + /** + * Tests easy_breadcrumb_update_8006() on default install config. + */ + public function test8006DefaultConfigurationUpdate() { + $this->doUpdateTest(__DIR__ . '/fixtures/pre8006_default_configuration.yml'); + } + + /** + * Tests easy_breadcrumb_update_8006() on config that has been saved via form. + */ + public function test8006AfterFormSaveConfigurationUpdate() { + $this->doUpdateTest(__DIR__ . '/fixtures/pre8006_after_form_save_configuration.yml'); + } + + /** + * Tests easy_breadcrumb_update_8006(). + * + * Calls the update method manually on a fixture. + * + * @param string $fixture + * Path to fixture. + */ + protected function doUpdateTest($fixture) { + $assert = $this->assertSession(); + module_load_install('easy_breadcrumb'); + + // Reset the configuration to pre 8006 values. Directly write to the + // database to avoid schema checking. + $pre8006_install_configuration = Yaml::decode(file_get_contents($fixture)); + \Drupal::database()->update('config') + ->fields([ + 'data' => serialize($pre8006_install_configuration), + ]) + ->condition('name', 'easy_breadcrumb.settings') + ->condition('collection', '') + ->execute(); + + // Run the update. + easy_breadcrumb_update_8006(); + $this->refreshVariables(); + + $config_after_update = $this->config('easy_breadcrumb.settings')->get(); + $this->assertArrayNotHasKey('dependencies', $config_after_update); + $this->assertArrayNotHasKey('add_structured_data_jsonld', $config_after_update); + $this->assertArrayHasKey(EasyBreadcrumbConstants::ADD_STRUCTURED_DATA_JSON_LD, $config_after_update); + $this->assertArrayHasKey(EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS, $config_after_update); + $this->assertArrayHasKey(EasyBreadcrumbConstants::INCLUDE_INVALID_PATHS, $config_after_update); + $this->assertArrayHasKey(EasyBreadcrumbConstants::EXCLUDED_PATHS, $config_after_update); + $this->assertArrayHasKey(EasyBreadcrumbConstants::REPLACED_TITLES, $config_after_update); + $this->assertArrayHasKey(EasyBreadcrumbConstants::CUSTOM_PATHS, $config_after_update); + $this->assertArrayHasKey(EasyBreadcrumbConstants::TITLE_SEGMENT_AS_LINK, $config_after_update); + // Ensure that 'capitalizator_ignored_words' and + // 'capitalizator_forced_words' are lists and not maps. + $this->assertSame(array_keys($config_after_update[EasyBreadcrumbConstants::CAPITALIZATOR_IGNORED_WORDS]), array_keys(array_values($config_after_update[EasyBreadcrumbConstants::CAPITALIZATOR_IGNORED_WORDS]))); + $this->assertSame(array_keys($config_after_update[EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS]), array_keys(array_values($config_after_update[EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS]))); + + // Easy configuration is not changed by visiting configuration form. + $this->drupalLogin($this->createUser(['administer easy breadcrumb'])); + $this->drupalGet('admin/config/user-interface/easy-breadcrumb'); + $assert->statusCodeEquals(200); + $this->submitForm([], 'Save configuration'); + $assert->statusCodeEquals(200); + $assert->pageTextContainsOnce('The configuration options have been saved.'); + $this->assertSame($config_after_update, $this->config('easy_breadcrumb.settings')->get()); + } + +} diff --git a/web/modules/contrib/easy_breadcrumb/tests/src/Functional/fixtures/pre8006_after_form_save_configuration.yml b/web/modules/contrib/easy_breadcrumb/tests/src/Functional/fixtures/pre8006_after_form_save_configuration.yml new file mode 100644 index 000000000..345a1cee6 --- /dev/null +++ b/web/modules/contrib/easy_breadcrumb/tests/src/Functional/fixtures/pre8006_after_form_save_configuration.yml @@ -0,0 +1,43 @@ +applies_admin_routes: true +include_home_segment: true +home_segment_title: Home +home_segment_keep: false +include_title_segment: true +language_path_prefix_as_segment: false +use_menu_title_as_fallback: false +use_page_title_as_menu_title_fallback: false +remove_repeated_segments: true +term_hierarchy: false +absolute_paths: false +hide_single_home_item: false +title_from_page_when_available: true +capitalizator_mode: ucwords +capitalizator_ignored_words: + of: of + and: and + or: or + de: de + del: del + 'y': 'y' + o: o + a: a +capitalizator_forced_words_first_letter: 0 +capitalizator_forced_words_case_sensitivity: 1 +add_structured_data_jsonld: false +use_site_title: false +dependencies: + module: + - easy_breadcrumb + enforced: + module: + - easy_breadcrumb +_core: + default_config_hash: ey8bRwK17YbAVEX7GEm09YR5UneOQ_Nqzh6a3V-rIP0 +include_invalid_paths: false +add_structured_data_json_ld: 0 +excluded_paths: '' +replaced_titles: '' +custom_paths: '' +title_segment_as_link: false +capitalizator_forced_words: + test: test diff --git a/web/modules/contrib/easy_breadcrumb/tests/src/Functional/fixtures/pre8006_default_configuration.yml b/web/modules/contrib/easy_breadcrumb/tests/src/Functional/fixtures/pre8006_default_configuration.yml new file mode 100644 index 000000000..21d8c9535 --- /dev/null +++ b/web/modules/contrib/easy_breadcrumb/tests/src/Functional/fixtures/pre8006_default_configuration.yml @@ -0,0 +1,33 @@ +applies_admin_routes: TRUE +include_home_segment: TRUE +home_segment_title: 'Home' +home_segment_keep: FALSE +include_title_segment: TRUE +language_path_prefix_as_segment: FALSE +use_menu_title_as_fallback: FALSE +use_page_title_as_menu_title_fallback: FALSE +remove_repeated_segments: TRUE +term_hierarchy: FALSE +absolute_paths: FALSE +hide_single_home_item: FALSE +title_from_page_when_available: TRUE +capitalizator_mode: 'ucwords' +capitalizator_ignored_words: + - of + - and + - or + - de + - del + - y + - o + - a +capitalizator_forced_words_first_letter: FALSE +capitalizator_forced_words_case_sensitivity: TRUE +add_structured_data_jsonld: FALSE +use_site_title: FALSE +dependencies: + module: + - easy_breadcrumb + enforced: + module: + - easy_breadcrumb diff --git a/web/modules/contrib/entity_reference_revisions/composer.json b/web/modules/contrib/entity_reference_revisions/composer.json index 7fdfb2e91..793e16e23 100644 --- a/web/modules/contrib/entity_reference_revisions/composer.json +++ b/web/modules/contrib/entity_reference_revisions/composer.json @@ -2,7 +2,7 @@ "name": "drupal/entity_reference_revisions", "description": "Entity Reference Revisions", "type": "drupal-module", - "license": "GPL-2.0", + "license": "GPL-2.0-or-later", "require": { "drupal/core": "^8.7.7 || ^9" }, diff --git a/web/modules/contrib/entity_reference_revisions/drush.services.yml b/web/modules/contrib/entity_reference_revisions/drush.services.yml new file mode 100644 index 000000000..fad7549bb --- /dev/null +++ b/web/modules/contrib/entity_reference_revisions/drush.services.yml @@ -0,0 +1,6 @@ +services: + entity_reference_revisions.commands: + class: \Drupal\entity_reference_revisions\Commands\EntityReferenceRevisionsCommands + arguments: ['@entity_reference_revisions.orphan_purger'] + tags: + - { name: drush.command } diff --git a/web/modules/contrib/entity_reference_revisions/entity_reference_revisions.info.yml b/web/modules/contrib/entity_reference_revisions/entity_reference_revisions.info.yml index 55807d434..0549cb09b 100644 --- a/web/modules/contrib/entity_reference_revisions/entity_reference_revisions.info.yml +++ b/web/modules/contrib/entity_reference_revisions/entity_reference_revisions.info.yml @@ -3,8 +3,10 @@ type: module description: Adds a Entity Reference field type with revision support. core_version_requirement: ^8.7.7 || ^9 package: Field types +dependencies: + - drupal:field -# Information added by Drupal.org packaging script on 2020-03-11 -version: '8.x-1.8' +# Information added by Drupal.org packaging script on 2021-03-03 +version: '8.x-1.9' project: 'entity_reference_revisions' -datestamp: 1583961849 +datestamp: 1614805875 diff --git a/web/modules/contrib/entity_reference_revisions/entity_reference_revisions.services.yml b/web/modules/contrib/entity_reference_revisions/entity_reference_revisions.services.yml index d112df982..d72705c44 100755 --- a/web/modules/contrib/entity_reference_revisions/entity_reference_revisions.services.yml +++ b/web/modules/contrib/entity_reference_revisions/entity_reference_revisions.services.yml @@ -1,4 +1,4 @@ services: entity_reference_revisions.orphan_purger: class: Drupal\entity_reference_revisions\EntityReferenceRevisionsOrphanPurger - arguments: ['@entity_type.manager', '@date.formatter', '@datetime.time', '@database', '@messenger'] + arguments: ['@entity_type.manager', '@entity_field.manager', '@date.formatter', '@datetime.time', '@database', '@messenger'] diff --git a/web/modules/contrib/entity_reference_revisions/src/Commands/EntityReferenceRevisionsCommands.php b/web/modules/contrib/entity_reference_revisions/src/Commands/EntityReferenceRevisionsCommands.php new file mode 100644 index 000000000..d23d30785 --- /dev/null +++ b/web/modules/contrib/entity_reference_revisions/src/Commands/EntityReferenceRevisionsCommands.php @@ -0,0 +1,62 @@ +<?php + +namespace Drupal\entity_reference_revisions\Commands; + +use Drupal\entity_reference_revisions\EntityReferenceRevisionsOrphanPurger; +use Drush\Commands\DrushCommands; +use Drush\Drush; +use Drush\Utils\StringUtils; + +/** + * A Drush commandfile. + */ +class EntityReferenceRevisionsCommands extends DrushCommands { + + /** + * The purger service. + * + * @var \Drupal\entity_reference_revisions\EntityReferenceRevisionsOrphanPurger + */ + protected $purger; + + /** + * Constructs a ERRCommands object. + * + * @param \Drupal\entity_reference_revisions\EntityReferenceRevisionsOrphanPurger $purger + */ + public function __construct(EntityReferenceRevisionsOrphanPurger $purger) { + $this->purger = $purger; + } + + /** + * Orphan composite revision deletion. + * + * @param $types + * A comma delimited list of entity types to check for orphans. Omit to + * choose from a list. + * @usage drush err:purge paragraph + * Purge orphaned paragraphs. + * + * @command err:purge + * @aliases errp + */ + public function purge($types) { + $this->purger->setBatch(StringUtils::csvToArray($types)); + drush_backend_batch_process(); + } + + /** + * @hook interact err:purge + */ + public function interact($input, $output) { + if (empty($input->getArgument('types'))) { + $choices = []; + foreach ($this->purger->getCompositeEntityTypes() as $entity_type) { + $choices[(string) $entity_type->id()] = (string) $entity_type->getLabel(); + } + $selected = $this->io()->choice(dt("Choose the entity type to clear"), $choices); + $input->setArgument('types', $selected); + } + } + +} diff --git a/web/modules/contrib/entity_reference_revisions/src/EntityReferenceRevisionsOrphanPurger.php b/web/modules/contrib/entity_reference_revisions/src/EntityReferenceRevisionsOrphanPurger.php index 8735817fc..ed7604c3d 100644 --- a/web/modules/contrib/entity_reference_revisions/src/EntityReferenceRevisionsOrphanPurger.php +++ b/web/modules/contrib/entity_reference_revisions/src/EntityReferenceRevisionsOrphanPurger.php @@ -6,6 +6,7 @@ use Drupal\Core\Database\Connection; use Drupal\Core\Datetime\DateFormatterInterface; use Drupal\Core\Entity\ContentEntityInterface; +use Drupal\Core\Entity\EntityFieldManagerInterface; use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Messenger\MessengerInterface; use Drupal\Core\Site\Settings; @@ -40,6 +41,13 @@ class EntityReferenceRevisionsOrphanPurger { */ protected $entityTypeManager; + /** + * The entity field manager. + * + * @var \Drupal\Core\Entity\EntityFieldManagerInterface + */ + protected $entityFieldManager; + /** * The date formatter service. * @@ -80,6 +88,8 @@ class EntityReferenceRevisionsOrphanPurger { * * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager * The entity type manager. + * @param \Drupal\Core\Entity\EntityFieldManagerInterface $entity_field_manager + * The entity field manager. * @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter * The date formatter service. * @param \Drupal\Component\Datetime\TimeInterface $time @@ -89,8 +99,9 @@ class EntityReferenceRevisionsOrphanPurger { * @param \Drupal\Core\Messenger\MessengerInterface $messenger * The messenger service. */ - public function __construct(EntityTypeManagerInterface $entity_type_manager, DateFormatterInterface $date_formatter, TimeInterface $time, Connection $database, MessengerInterface $messenger) { + public function __construct(EntityTypeManagerInterface $entity_type_manager, EntityFieldManagerInterface $entity_field_manager, DateFormatterInterface $date_formatter, TimeInterface $time, Connection $database, MessengerInterface $messenger) { $this->entityTypeManager = $entity_type_manager; + $this->entityFieldManager = $entity_field_manager; $this->dateFormatter = $date_formatter; $this->time = $time; $this->database = $database; @@ -138,10 +149,10 @@ public function deleteUnusedRevision(ContentEntityInterface $composite_revision) * * @param string $entity_type_id * The entity type id, for example 'paragraph'. - * @param array $context + * @param Iterable|array $context * The context array. */ - public function deleteOrphansBatchOperation($entity_type_id, array &$context) { + public function deleteOrphansBatchOperation($entity_type_id, &$context) { $composite_type = $this->entityTypeManager->getDefinition($entity_type_id); $composite_revision_key = $composite_type->getKey('revision'); /** @var \Drupal\Core\Entity\ContentEntityStorageInterface $composite_storage */ @@ -349,22 +360,45 @@ protected function isValidParent($parent_type, $parent_field_name) { } $status = static::PARENT_VALID; + // If the parent type does not exist anymore, the composite is not used. if (!$this->entityTypeManager->hasDefinition($parent_type)) { $status = static::PARENT_INVALID_DELETE; } - // Check if the parent field is valid. - elseif (!($parent_field_config = $this->entityTypeManager->getStorage('field_storage_config')->load("$parent_type.$parent_field_name"))) { - $status = static::PARENT_INVALID_DELETE; - } - // In case the parent field has no target revision ID key we can not be sure - // that this revision is not used anymore. - elseif (empty($parent_field_config->getSchema()['columns']['target_revision_id'])) { - $status = static::PARENT_INVALID_SKIP; + else { + $parent_field_definitions = $this->entityFieldManager->getFieldStorageDefinitions($parent_type); + if (!isset($parent_field_definitions[$parent_field_name])) { + $status = static::PARENT_INVALID_DELETE; + } + // In case the parent field has no target revision ID key we can not be + // sure that this revision is not used anymore. + elseif (empty($parent_field_definitions[$parent_field_name]->getSchema()['columns']['target_revision_id'])) { + $status = static::PARENT_INVALID_SKIP; + } } $this->validParents[$parent_type][$parent_field_name] = $status; return $status; } + /** + * Returns a list of composite entity types. + * + * @return \Drupal\Core\Entity\EntityTypeInterface[] + * An array of composite entity types. + */ + public function getCompositeEntityTypes() { + $composite_entity_types = []; + $entity_types = $this->entityTypeManager->getDefinitions(); + foreach ($entity_types as $entity_type) { + $has_parent_type_field = $entity_type->get('entity_revision_parent_type_field'); + $has_parent_id_field = $entity_type->get('entity_revision_parent_id_field'); + $has_parent_field_name_field = $entity_type->get('entity_revision_parent_field_name_field'); + if ($has_parent_type_field && $has_parent_id_field && $has_parent_field_name_field) { + $composite_entity_types[] = $entity_type; + } + } + return $composite_entity_types; + } + } diff --git a/web/modules/contrib/entity_reference_revisions/src/Form/OrphanedCompositeEntitiesDeleteForm.php b/web/modules/contrib/entity_reference_revisions/src/Form/OrphanedCompositeEntitiesDeleteForm.php index b3da36da6..6267c979b 100644 --- a/web/modules/contrib/entity_reference_revisions/src/Form/OrphanedCompositeEntitiesDeleteForm.php +++ b/web/modules/contrib/entity_reference_revisions/src/Form/OrphanedCompositeEntitiesDeleteForm.php @@ -80,7 +80,7 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#markup' => $this->t('Delete orphaned composite entities revisions that are no longer referenced. If there are no revisions left, the entity will be deleted as long as it is not used.'), ]; $options = []; - foreach ($this->getCompositeEntityTypes() as $entity_type) { + foreach ($this->purger->getCompositeEntityTypes() as $entity_type) { $options[$entity_type->id()] = $entity_type->getLabel(); } $form['composite_entity_types'] = [ @@ -107,24 +107,4 @@ public function submitForm(array &$form, FormStateInterface $form_state) { $this->purger->setBatch(array_filter($form_state->getValue('composite_entity_types'))); } - /** - * Returns a list of composite entity types. - * - * @return \Drupal\Core\Entity\EntityTypeInterface[] - * An array of composite entity types. - */ - public function getCompositeEntityTypes() { - $composite_entity_types = []; - $entity_types = $this->entityTypeManager->getDefinitions(); - foreach ($entity_types as $entity_type) { - $has_parent_type_field = $entity_type->get('entity_revision_parent_type_field'); - $has_parent_id_field = $entity_type->get('entity_revision_parent_id_field'); - $has_parent_field_name_field = $entity_type->get('entity_revision_parent_field_name_field'); - if ($has_parent_type_field && $has_parent_id_field && $has_parent_field_name_field) { - $composite_entity_types[] = $entity_type; - } - } - return $composite_entity_types; - } - } diff --git a/web/modules/contrib/entity_reference_revisions/src/Plugin/Field/FieldType/EntityReferenceRevisionsItem.php b/web/modules/contrib/entity_reference_revisions/src/Plugin/Field/FieldType/EntityReferenceRevisionsItem.php index 16496dbc7..4a313ea6c 100644 --- a/web/modules/contrib/entity_reference_revisions/src/Plugin/Field/FieldType/EntityReferenceRevisionsItem.php +++ b/web/modules/contrib/entity_reference_revisions/src/Plugin/Field/FieldType/EntityReferenceRevisionsItem.php @@ -472,11 +472,6 @@ public static function generateSampleValue(FieldDefinitionInterface $field_defin $selection_manager = \Drupal::service('plugin.manager.entity_reference_selection'); $entity_manager = \Drupal::entityTypeManager(); - // Bail if there are no referenceable entities. - if (!$selection_manager->getSelectionHandler($field_definition)->getReferenceableEntities()) { - return; - } - // ERR field values are never cross referenced so we need to generate new // target entities. First, find the target entity type. $target_type_id = $field_definition->getFieldStorageDefinition()->getSetting('target_type'); @@ -486,7 +481,14 @@ public static function generateSampleValue(FieldDefinitionInterface $field_defin // Determine referenceable bundles. $bundle_manager = \Drupal::service('entity_type.bundle.info'); if (isset($handler_settings['target_bundles']) && is_array($handler_settings['target_bundles'])) { - $bundles = $handler_settings['target_bundles']; + if (empty($handler_settings['negate'])) { + $bundles = $handler_settings['target_bundles']; + } + else { + $bundles = array_filter($bundle_manager->getBundleInfo($target_type_id), function ($bundle) use ($handler_settings) { + return !in_array($bundle, $handler_settings['target_bundles'], TRUE); + }); + } } else { $bundles = $bundle_manager->getBundleInfo($target_type_id); diff --git a/web/modules/contrib/entity_reference_revisions/src/Plugin/migrate/destination/EntityReferenceRevisions.php b/web/modules/contrib/entity_reference_revisions/src/Plugin/migrate/destination/EntityReferenceRevisions.php index d4baf31c6..6bbd60ad2 100644 --- a/web/modules/contrib/entity_reference_revisions/src/Plugin/migrate/destination/EntityReferenceRevisions.php +++ b/web/modules/contrib/entity_reference_revisions/src/Plugin/migrate/destination/EntityReferenceRevisions.php @@ -17,6 +17,8 @@ * - new_revisions: (optional) Flag to indicate if a new revision should be * created instead of updating a previous default record. Only applicable when * providing an entity id without a revision_id. + * - force_revision: (optional) Flag to ignore other checks and always create a + * revision. * * @MigrateDestination( * id = "entity_reference_revisions", @@ -102,9 +104,15 @@ protected function getEntity(Row $row, array $oldDestinationIdValues) { $entity_id = $oldDestinationIdValues ? array_shift($oldDestinationIdValues) : $this->getEntityId($row); - $revision_id = $oldDestinationIdValues ? - array_pop($oldDestinationIdValues) : - $row->getDestinationProperty($this->getKey('revision')); + $configuration = $this->getConfiguration(); + if (isset($configuration['force_revision']) && $configuration['force_revision'] == TRUE) { + $revision_id = NULL; + } + else { + $revision_id = $oldDestinationIdValues ? + array_pop($oldDestinationIdValues) : + $row->getDestinationProperty($this->getKey('revision')); + } // If a specific revision_id is supplied and exists, assert the entity_id // matches (if supplied), and update the revision. diff --git a/web/modules/contrib/entity_reference_revisions/tests/modules/entity_composite_relationship_test/entity_composite_relationship_test.info.yml b/web/modules/contrib/entity_reference_revisions/tests/modules/entity_composite_relationship_test/entity_composite_relationship_test.info.yml index 7b906fc29..fe3a5aacc 100644 --- a/web/modules/contrib/entity_reference_revisions/tests/modules/entity_composite_relationship_test/entity_composite_relationship_test.info.yml +++ b/web/modules/contrib/entity_reference_revisions/tests/modules/entity_composite_relationship_test/entity_composite_relationship_test.info.yml @@ -8,7 +8,7 @@ dependencies: - entity_reference_revisions:entity_reference_revisions - drupal:entity_test -# Information added by Drupal.org packaging script on 2020-03-11 -version: '8.x-1.8' +# Information added by Drupal.org packaging script on 2021-03-03 +version: '8.x-1.9' project: 'entity_reference_revisions' -datestamp: 1583961849 +datestamp: 1614805875 diff --git a/web/modules/contrib/entity_reference_revisions/tests/modules/entity_host_relationship_test/entity_host_relationship_test.info.yml b/web/modules/contrib/entity_reference_revisions/tests/modules/entity_host_relationship_test/entity_host_relationship_test.info.yml new file mode 100644 index 000000000..5a32314af --- /dev/null +++ b/web/modules/contrib/entity_reference_revisions/tests/modules/entity_host_relationship_test/entity_host_relationship_test.info.yml @@ -0,0 +1,13 @@ +name: 'Entity Host Base Field ERR' +type: module +description: 'Entity host with base field definition using entity_reference_revisions.' +package: Testing +core_version_requirement: ^8.7.7 || ^9 + +dependencies: + - entity_composite_relationship_test:entity_composite_relationship_test + +# Information added by Drupal.org packaging script on 2021-03-03 +version: '8.x-1.9' +project: 'entity_reference_revisions' +datestamp: 1614805875 diff --git a/web/modules/contrib/entity_reference_revisions/tests/modules/entity_host_relationship_test/entity_host_relationship_test.permissions.yml b/web/modules/contrib/entity_reference_revisions/tests/modules/entity_host_relationship_test/entity_host_relationship_test.permissions.yml new file mode 100644 index 000000000..b3f255634 --- /dev/null +++ b/web/modules/contrib/entity_reference_revisions/tests/modules/entity_host_relationship_test/entity_host_relationship_test.permissions.yml @@ -0,0 +1,2 @@ +administer entity_test host: + title: administer entity_test host diff --git a/web/modules/contrib/entity_reference_revisions/tests/modules/entity_host_relationship_test/src/Entity/EntityTestHostRelationship.php b/web/modules/contrib/entity_reference_revisions/tests/modules/entity_host_relationship_test/src/Entity/EntityTestHostRelationship.php new file mode 100644 index 000000000..7c588fba1 --- /dev/null +++ b/web/modules/contrib/entity_reference_revisions/tests/modules/entity_host_relationship_test/src/Entity/EntityTestHostRelationship.php @@ -0,0 +1,51 @@ +<?php + +namespace Drupal\entity_host_relationship_test\Entity; + +use Drupal\Core\Entity\EntityTypeInterface; +use Drupal\Core\Entity\RevisionableInterface; +use Drupal\Core\Field\BaseFieldDefinition; +use Drupal\Core\Field\FieldStorageDefinitionInterface; +use Drupal\entity_test\Entity\EntityTestMulRev; + +/** + * Defines the test entity class. + * + * @ContentEntityType( + * id = "entity_host_relationship_test", + * label = @Translation("Test entity host"), + * base_table = "entity_test_host", + * revision_table = "entity_test_host_revision", + * data_table = "entity_test_host_field_data", + * revision_data_table = "entity_test_host_field_revision", + * content_translation_ui_skip = TRUE, + * translatable = TRUE, + * admin_permission = "administer entity_test host", + * entity_keys = { + * "id" = "id", + * "uuid" = "uuid", + * "revision" = "revision_id", + * "bundle" = "type", + * "label" = "name", + * "langcode" = "langcode", + * } + * ) + */ +class EntityTestHostRelationship extends EntityTestMulRev implements RevisionableInterface { + + /** + * {@inheritdoc} + */ + public static function baseFieldDefinitions(EntityTypeInterface $entity_type) { + $fields = parent::baseFieldDefinitions($entity_type); + + $fields['entity'] = BaseFieldDefinition::create('entity_reference_revisions') + ->setLabel(t('Entity test composite')) + ->setRevisionable(TRUE) + ->setSetting('target_type', 'entity_test_composite') + ->setDisplayConfigurable('form', TRUE) + ->setDisplayConfigurable('view', TRUE); + + return $fields; + } +} diff --git a/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsAdminTest.php b/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsAdminTest.php index f2618b914..e26f480dc 100644 --- a/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsAdminTest.php +++ b/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsAdminTest.php @@ -94,7 +94,8 @@ public function testEntityReferenceRevisions() { 'title[0][value]' => $title, 'body[0][value]' => 'Revision 1', ); - $this->drupalPostForm('node/add/article', $edit, t('Save')); + $this->drupalGet('node/add/article'); + $this->submitForm($edit, 'Save'); $this->assertText($title); $this->assertText('Revision 1'); $node = $this->drupalGetNodeByTitle($title); @@ -107,7 +108,7 @@ public function testEntityReferenceRevisions() { 'title[0][value]' => 'Entity reference revision content', 'field_entity_reference_revisions[1][target_id]' => $node->label() . ' (' . $node->id() . ')', ]; - $this->drupalPostForm(NULL, $edit, t('Save')); + $this->submitForm($edit, 'Save'); $this->assertLinkByHref('node/' . $node_target->id()); $this->assertText('Entity revisions Entity reference revision content has been created.'); $this->assertText('Entity reference revision content'); @@ -119,7 +120,8 @@ public function testEntityReferenceRevisions() { 'body[0][value]' => 'Revision 2', 'revision' => TRUE, ); - $this->drupalPostForm('node/' . $node->id() . '/edit', $edit, t('Save')); + $this->drupalGet('node/' . $node->id() . '/edit'); + $this->submitForm($edit, 'Save'); $this->assertText($title); $this->assertText('Revision 2'); @@ -137,7 +139,8 @@ public function testEntityReferenceRevisions() { 'label' => 'Entity reference revisions field', 'field_name' => 'entity_ref_revisions_field', ); - $this->drupalPostForm('admin/structure/types/manage/entity_revisions/fields/add-field', $edit, t('Save and continue')); + $this->drupalGet('admin/structure/types/manage/entity_revisions/fields/add-field'); + $this->submitForm($edit, 'Save and continue'); $this->assertNoOption('edit-settings-target-type', 'user'); $this->assertOption('edit-settings-target-type', 'node'); diff --git a/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsAutocompleteTest.php b/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsAutocompleteTest.php index 95cff0915..602fff55a 100644 --- a/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsAutocompleteTest.php +++ b/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsAutocompleteTest.php @@ -86,7 +86,8 @@ public function testEntityReferenceRevisionsAutocompleteProcessing() { 'info[0][value]' => $block_label, 'body[0][value]' => $block_content, ); - $this->drupalPostForm('block/add', $edit, t('Save')); + $this->drupalGet('block/add'); + $this->submitForm($edit, 'Save'); $block = $this->drupalGetBlockByInfo($block_label); // Create an article. @@ -96,7 +97,8 @@ public function testEntityReferenceRevisionsAutocompleteProcessing() { 'body[0][value]' => 'Revision 1', 'field_entity_reference_revisions[0][target_id]' => $block_label . ' (' . $block->id() . ')', ); - $this->drupalPostForm('node/add/article', $edit, t('Save')); + $this->drupalGet('node/add/article'); + $this->submitForm($edit, 'Save'); $this->assertText($title); $this->assertText(Html::escape($block_content)); @@ -144,7 +146,8 @@ function createBlockContentType($parameters) { 'id' => $machine_name, 'revision' => TRUE, ); - $this->drupalPostForm('admin/structure/block/block-content/types/add', $edit, t('Save')); + $this->drupalGet('admin/structure/block/block-content/types/add'); + $this->submitForm($edit, 'Save'); $this->assertText($label); } diff --git a/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsDiffTest.php b/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsDiffTest.php index a79d4d94d..f924f3f15 100644 --- a/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsDiffTest.php +++ b/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsDiffTest.php @@ -82,7 +82,8 @@ public function testEntityReferenceRevisionsDiff() { 'title[0][value]' => $title_node_1, 'body[0][value]' => 'body_node_1', ]; - $this->drupalPostForm('node/add/article', $edit, t('Save')); + $this->drupalGet('node/add/article'); + $this->submitForm($edit, 'Save'); // Create second referenced node. $title_node_2 = 'referenced_node_2'; @@ -90,7 +91,8 @@ public function testEntityReferenceRevisionsDiff() { 'title[0][value]' => $title_node_2, 'body[0][value]' => 'body_node_2', ]; - $this->drupalPostForm('node/add/article', $edit, t('Save')); + $this->drupalGet('node/add/article'); + $this->submitForm($edit, 'Save'); // Create referencing node. $title = 'referencing_node'; @@ -99,11 +101,12 @@ public function testEntityReferenceRevisionsDiff() { 'title[0][value]' => $title, 'field_err_field[0][target_id]' => $title_node_1 . ' (' . $node->id() . ')', ]; - $this->drupalPostForm('node/add/article', $edit, t('Save')); + $this->drupalGet('node/add/article'); + $this->submitForm($edit, 'Save'); // Check the plugin is set. $this->drupalGet('admin/config/content/diff/fields'); - $this->drupalPostForm(NULL, ['fields[node__field_err_field][plugin][type]' => 'entity_reference_revisions_field_diff_builder'], t('Save')); + $this->submitForm(['fields[node__field_err_field][plugin][type]' => 'entity_reference_revisions_field_diff_builder'], 'Save'); // Update the referenced node of the err field and create a new revision. $node = $this->drupalGetNodeByTitle($title); @@ -112,10 +115,12 @@ public function testEntityReferenceRevisionsDiff() { 'field_err_field[0][target_id]' => $title_node_2 . ' (' . $referenced_node_new->id() . ')', 'revision' => TRUE, ]; - $this->drupalPostForm('node/' . $node->id() . '/edit', $edit, t('Save')); + $this->drupalGet('node/' . $node->id() . '/edit'); + $this->submitForm($edit, 'Save'); // Compare the revisions of the referencing node. - $this->drupalPostForm('node/' . $node->id() . '/revisions', [], t('Compare selected revisions')); + $this->drupalGet('node/' . $node->id() . '/revisions'); + $this->submitForm([], 'Compare selected revisions'); // Assert the field changes. $this->assertRaw('class="diff-context diff-deletedline">' . $title_node_1); diff --git a/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsNormalizerTest.php b/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsNormalizerTest.php index 740fe8b19..9abae19a6 100644 --- a/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsNormalizerTest.php +++ b/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsNormalizerTest.php @@ -73,7 +73,8 @@ public function testEntityReferenceRevisions() { 'title[0][value]' => $title, 'body[0][value]' => 'Revision 1', ); - $this->drupalPostForm('node/add/article', $edit, t('Save')); + $this->drupalGet('node/add/article'); + $this->submitForm($edit, 'Save'); $this->assertText($title); $this->assertText('Revision 1'); $node = $this->drupalGetNodeByTitle($title); @@ -84,7 +85,8 @@ public function testEntityReferenceRevisions() { 'title[0][value]' => $err_title, 'field_entity_reference_revisions[0][target_id]' => $node->label() . ' (' . $node->id() . ')', ); - $this->drupalPostForm('node/add/entity_revisions', $edit, t('Save')); + $this->drupalGet('node/add/entity_revisions'); + $this->submitForm($edit, 'Save'); $this->assertText('Entity revisions Entity reference revision content has been created.'); $err_node = $this->drupalGetNodeByTitle($err_title); @@ -97,7 +99,8 @@ public function testEntityReferenceRevisions() { 'body[0][value]' => 'Revision 2', 'revision' => TRUE, ); - $this->drupalPostForm('node/' . $node->id() . '/edit', $edit, t('Save')); + $this->drupalGet('node/' . $node->id() . '/edit'); + $this->submitForm($edit, 'Save'); $serializer = $this->container->get('serializer'); $normalized = $serializer->normalize($err_node, 'hal_json'); $request = \Drupal::request(); diff --git a/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsOrphanRemovalForBaseFieldDefinitionTest.php b/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsOrphanRemovalForBaseFieldDefinitionTest.php new file mode 100644 index 000000000..364bdfed4 --- /dev/null +++ b/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsOrphanRemovalForBaseFieldDefinitionTest.php @@ -0,0 +1,244 @@ +<?php + +namespace Drupal\Tests\entity_reference_revisions\Functional; + +use Drupal\entity_composite_relationship_test\Entity\EntityTestCompositeRelationship; +use Drupal\entity_host_relationship_test\Entity\EntityTestHostRelationship; + +/** + * Tests orphan composite revisions are properly removed. + * + * @group entity_reference_revisions + */ +class EntityReferenceRevisionsOrphanRemovalForBaseFieldDefinitionTest extends EntityReferenceRevisionsOrphanRemovalTest { + + /** + * A user with administration access. + * + * @var \Drupal\user\UserInterface + */ + protected $adminUser; + + /** + * Modules to enable. + * + * @var array + */ + public static $modules = [ + 'node', + 'field', + 'entity_reference_revisions', + 'entity_composite_relationship_test', + 'entity_host_relationship_test', + ]; + + /** + * {@inheritdoc} + */ + public function insertRevisionableData() { + /** @var \Drupal\node\NodeStorageInterface $entity_host_storage */ + $entity_host_storage = \Drupal::entityTypeManager()->getStorage('entity_host_relationship_test'); + // Scenario 1: A composite with a default revision that is referenced and an + // old revision that is not. Result: Only the old revision is deleted. + $composite_entity_first = EntityTestCompositeRelationship::create([ + 'name' => 'first not used, second used', + 'parent_id' => 1000, + 'parent_type' => 'entity_host_relationship_test', + 'parent_field_name' => 'entity', + ]); + $composite_entity_first->save(); + $composite_entity_first = EntityTestCompositeRelationship::load($composite_entity_first->id()); + $composite_entity_first->setNewRevision(TRUE); + $composite_entity_first->save(); + $entity_host = EntityTestHostRelationship::create([ + 'name' => 'First composite', + 'entity' => $composite_entity_first, + ]); + $entity_host->save(); + + // Scenario 2: A composite with an old revision that is used and a default + // revision that is not. Result: Nothing should be deleted. + $composite_entity_second = EntityTestCompositeRelationship::create([ + 'name' => 'first used, second not used', + ]); + $composite_entity_second->save(); + $entity_host = EntityTestHostRelationship::create([ + 'name' => 'Second composite', + 'entity' => $composite_entity_second, + ]); + $entity_host->save(); + $entity_host = $this->getEntityHostByName('Second composite'); + $entity_host = $entity_host_storage->createRevision($entity_host); + $entity_host->set('entity', NULL); + $entity_host->save(); + $composite_entity_second = EntityTestCompositeRelationship::load($composite_entity_second->id()); + $composite_entity_second->setNewRevision(TRUE); + $composite_entity_second->save(); + + // Scenario 3: A composite with an old revision and a default revision both + // that are not used with empty parent fields. Result: Nothing should be + // deleted since we do not know if it is still used. + $composite_entity_third = EntityTestCompositeRelationship::create([ + 'name' => 'first not used, second not used', + ]); + $composite_entity_third->save(); + $composite_entity_third = EntityTestCompositeRelationship::load($composite_entity_third->id()); + $composite_entity_third->setNewRevision(TRUE); + $composite_entity_third->save(); + + // Scenario 4: A composite with an old revision and a default revision both + // that are not used with filled parent fields. Result: Should first delete + // the old revision and then the default revision. Delete the entity too. + $composite_entity_fourth = EntityTestCompositeRelationship::create([ + 'name' => '1st filled not, 2nd filled not', + 'parent_id' => 1001, + 'parent_type' => 'entity_host_relationship_test', + 'parent_field_name' => 'entity', + ]); + $composite_entity_fourth->save(); + $composite_entity_fourth = EntityTestCompositeRelationship::load($composite_entity_fourth->id()); + $composite_entity_fourth->setNewRevision(TRUE); + $composite_entity_fourth->set('parent_id', 1001); + $composite_entity_fourth->save(); + + // Scenario 5: A composite with many revisions and 2 at least used. Result: + // Delete all unused revisions. + $composite_entity_fifth = EntityTestCompositeRelationship::create([ + 'name' => '1st not, 2nd used, 3rd not, 4th', + 'parent_id' => 1001, + 'parent_type' => 'entity_host_relationship_test', + 'parent_field_name' => 'entity', + ]); + $composite_entity_fifth->save(); + $composite_entity_fifth = EntityTestCompositeRelationship::load($composite_entity_fifth->id()); + $composite_entity_fifth->setNewRevision(TRUE); + $composite_entity_fifth->save(); + $entity_host = EntityTestHostRelationship::create([ + 'name' => 'Third composite', + 'entity' => $composite_entity_fifth, + ]); + $entity_host->save(); + $entity_host = $this->getEntityHostByName('Second composite'); + $entity_host = $entity_host_storage->createRevision($entity_host); + $entity_host->set('entity', NULL); + $entity_host->save(); + $composite_entity_fifth = EntityTestCompositeRelationship::load($composite_entity_fifth->id()); + $composite_entity_fifth->setNewRevision(TRUE); + $composite_entity_fifth->save(); + $entity_host = $this->getEntityHostByName('Third composite'); + $entity_host = $entity_host_storage->createRevision($entity_host); + $entity_host->set('entity', $composite_entity_fifth); + $entity_host->save(); + + // Scenario 6: A composite with wrong parent fields filled pointing to a non + // existent parent (Parent 1). However, Parent 2 references it. Result: Must + // not be deleted. + $entity_host = EntityTestHostRelationship::create([ + 'name' => 'DELETED composite', + ]); + $entity_host->save(); + $composite_entity_sixth = EntityTestCompositeRelationship::create([ + 'name' => 'wrong parent fields', + 'parent_id' => $entity_host->id(), + 'parent_type' => 'entity_host_relationship_test', + 'parent_field_name' => 'entity', + ]); + $composite_entity_sixth->save(); + $entity_host->delete(); + $entity_host = EntityTestHostRelationship::create([ + 'name' => 'Fourth composite', + 'entity' => $composite_entity_sixth, + ]); + $entity_host->save(); + } + + /** + * {@inheritdoc} + */ + public function insertNonRevisionableData() { + // Scenario 1: A composite with a default revision that is referenced and an + // old revision that is not. Result: Only the old revision is deleted. + $composite_entity_first = EntityTestCompositeRelationship::create([ + 'name' => 'NR first not used, second used', + 'parent_id' => 1001, + 'parent_type' => 'entity_host_relationship_test', + 'parent_field_name' => 'entity', + ]); + $composite_entity_first->save(); + $composite_entity_first = EntityTestCompositeRelationship::load($composite_entity_first->id()); + $composite_entity_first->setNewRevision(TRUE); + $composite_entity_first->save(); + $entity_host = EntityTestHostRelationship::create([ + 'name' => 'First NR composite', + 'entity' => $composite_entity_first, + ]); + $entity_host->save(); + + // Scenario 2: A composite with an old revision that is used and a default + // revision that is not. Result: Nothing should be deleted. + $composite_entity_second = EntityTestCompositeRelationship::create([ + 'name' => 'NR first used, second not used', + ]); + $composite_entity_second->save(); + $entity_host = EntityTestHostRelationship::create([ + 'name' => 'Second NR composite', + 'entity' => $composite_entity_second, + ]); + $entity_host->save(); + $composite_entity_second = EntityTestCompositeRelationship::load($composite_entity_second->id()); + $composite_entity_second->setNewRevision(TRUE); + $composite_entity_second->save(); + + // Scenario 3: A composite with many revisions and 2 at least used. Result: + // Delete all unused revisions. + $composite_entity_third = EntityTestCompositeRelationship::create([ + 'name' => 'NR 1st not, 2nd, 3rd not, 4th', + 'parent_id' => 1001, + 'parent_type' => 'entity_host_relationship_test', + 'parent_field_name' => 'entity', + ]); + $composite_entity_third->save(); + $composite_entity_third = EntityTestCompositeRelationship::load($composite_entity_third->id()); + $composite_entity_third->setNewRevision(TRUE); + $composite_entity_third->save(); + $entity_host = EntityTestHostRelationship::create([ + 'name' => 'Third NR composite', + 'entity' => $composite_entity_third, + ]); + $entity_host->save(); + $entity_host = $this->getEntityHostByName('Third NR composite'); + $entity_host->set('entity', NULL); + $entity_host->save(); + $composite_entity_third = EntityTestCompositeRelationship::load($composite_entity_third->id()); + $composite_entity_third->setNewRevision(TRUE); + $composite_entity_third->save(); + $entity_host = $this->getEntityHostByName('Third NR composite'); + $entity_host->set('entity', $composite_entity_third); + $entity_host->save(); + } + + /** + * Get an entity host from the database based on its name. + * + * @param string $name + * A entity name. + * @param bool $reset + * (optional) Whether to reset the entity cache. + * + * @return \Drupal\Core\Entity\RevisionableInterface + * A revisionable entity matching $name. + */ + protected function getEntityHostByName($name, $reset = FALSE) { + if ($reset) { + \Drupal::entityTypeManager()->getStorage('entity_host_relationship_test')->resetCache(); + } + $name = (string) $name; + /** @var \Drupal\Core\Entity\RevisionableInterface[] $entities */ + $entities = \Drupal::entityTypeManager() + ->getStorage('entity_host_relationship_test') + ->loadByProperties(['name' => $name]); + // Load the first entity returned from the database. + return reset($entities); + } + +} diff --git a/web/modules/contrib/entity_reference_revisions/tests/src/Kernel/Plugin/migrate/destination/EntityReferenceRevisionsDestinationTest.php b/web/modules/contrib/entity_reference_revisions/tests/src/Kernel/Plugin/migrate/destination/EntityReferenceRevisionsDestinationTest.php index 05f781f54..a9a26a409 100644 --- a/web/modules/contrib/entity_reference_revisions/tests/src/Kernel/Plugin/migrate/destination/EntityReferenceRevisionsDestinationTest.php +++ b/web/modules/contrib/entity_reference_revisions/tests/src/Kernel/Plugin/migrate/destination/EntityReferenceRevisionsDestinationTest.php @@ -236,6 +236,116 @@ public function getEntityDataProvider() { ]; } + /** + * Tests get entity. + * + * @dataProvider getEntityDataProviderForceRevision + * + * @covers ::getEntity + * @covers ::rollback + * @covers ::rollbackNonTranslation + */ + public function testGetEntityForceRevision(array $definition, array $expected) { + /** @var \Drupal\migrate\Plugin\Migration $migration */ + $migration = $this->migrationPluginManager->createStubMigration($definition); + $migrationExecutable = (new MigrateExecutable($migration, $this)); + /** @var \Drupal\Core\Entity\EntityStorageBase $storage */ + $storage = $this->readAttribute($migration->getDestinationPlugin(), 'storage'); + // Test inserting and updating by looping twice. + for ($i = 0; $i < 2; $i++) { + $migrationExecutable->import(); + $migration->getIdMap()->prepareUpdate(); + foreach ($expected[$i] as $data) { + $entity = $storage->loadRevision($data['revision_id']); + $this->assertEquals($data['label'], $entity->label()); + $this->assertEquals($data['id'], $entity->id()); + } + } + $migrationExecutable->rollback(); + for ($i = 0; $i < 2; $i++) { + foreach ($expected[$i] as $data) { + $entity = $storage->loadRevision($data['id']); + $this->assertEmpty($entity); + } + } + } + + /** + * Provides multiple migration definitions for "getEntity" test. + */ + public function getEntityDataProviderForceRevision() { + return [ + 'with ids, new revisions and no force revision' => [ + 'definition' => [ + 'source' => [ + 'plugin' => 'embedded_data', + 'data_rows' => [ + ['id' => 1, 'name' => 'content item 1a'], + ['id' => 2, 'name' => 'content item 2'], + ], + 'ids' => [ + 'id' => ['type' => 'integer'], + 'name' => ['type' => 'text'], + ], + ], + 'process' => [ + 'name' => 'name', + 'id' => 'id', + ], + 'destination' => [ + 'plugin' => 'entity_reference_revisions:entity_test_composite', + 'new_revisions' => TRUE, + 'force_revision' => FALSE, + ], + ], + 'expected' => [ + [ + ['id' => 1, 'revision_id' => 1, 'label' => 'content item 1a'], + ['id' => 2, 'revision_id' => 2, 'label' => 'content item 2'], + ], + [ + ['id' => 1, 'revision_id' => 1, 'label' => 'content item 1a'], + ['id' => 2, 'revision_id' => 2, 'label' => 'content item 2'], + ] + ], + ], + 'with ids, new revisions and force revision' => [ + 'definition' => [ + 'source' => [ + 'plugin' => 'embedded_data', + 'data_rows' => [ + ['id' => 1, 'name' => 'content item 1a'], + ['id' => 2, 'name' => 'content item 2'], + ], + 'ids' => [ + 'id' => ['type' => 'integer'], + 'name' => ['type' => 'text'], + ], + ], + 'process' => [ + 'name' => 'name', + 'id' => 'id', + ], + 'destination' => [ + 'plugin' => 'entity_reference_revisions:entity_test_composite', + 'new_revisions' => TRUE, + 'force_revision' => TRUE, + ], + ], + 'expected' => [ + [ + ['id' => 1, 'revision_id' => 1, 'label' => 'content item 1a'], + ['id' => 2, 'revision_id' => 2, 'label' => 'content item 2'], + ], + [ + ['id' => 1, 'revision_id' => 3, 'label' => 'content item 1a'], + ['id' => 2, 'revision_id' => 4, 'label' => 'content item 2'], + ] + ], + ], + ]; + } + /** * Tests multi-value and single-value destination field linkage. * diff --git a/web/modules/contrib/extlink/extlink.info.yml b/web/modules/contrib/extlink/extlink.info.yml index 723cd804d..e3818f69c 100644 --- a/web/modules/contrib/extlink/extlink.info.yml +++ b/web/modules/contrib/extlink/extlink.info.yml @@ -6,7 +6,7 @@ core: 8.x configure: extlink_admin.settings core_version_requirement: ^8 || ^9 -# Information added by Drupal.org packaging script on 2020-09-29 -version: '8.x-1.5' +# Information added by Drupal.org packaging script on 2021-03-05 +version: '8.x-1.6' project: 'extlink' -datestamp: 1601382187 +datestamp: 1614961996 diff --git a/web/modules/contrib/extlink/extlink.js b/web/modules/contrib/extlink/extlink.js index dd815407d..7d57dc900 100644 --- a/web/modules/contrib/extlink/extlink.js +++ b/web/modules/contrib/extlink/extlink.js @@ -10,7 +10,7 @@ Drupal.extlink = Drupal.extlink || {}; Drupal.extlink.attach = function (context, drupalSettings) { - if (!drupalSettings.data.hasOwnProperty('extlink')) { + if (typeof drupalSettings.data === 'undefined' || !drupalSettings.data.hasOwnProperty('extlink')) { return; } diff --git a/web/modules/contrib/extlink/extlink.module b/web/modules/contrib/extlink/extlink.module index c802bf51b..e52a3ec53 100644 --- a/web/modules/contrib/extlink/extlink.module +++ b/web/modules/contrib/extlink/extlink.module @@ -89,6 +89,14 @@ function _extlink_get_settings_from_config(Config $config) { $fa_mailto_classes = $config->get('extlink_font_awesome_classes.mailto') ?: 'fa fa-envelope-o'; $fa_mailto_classes = array_map($callback, explode(' ', $fa_mailto_classes)); + $extAlertText = ""; + + if( !is_array($settings['extlink_alert_text']) ){ + $extAlertText = ((isset($settings['extlink_alert_text'])) ? Xss::filterAdmin($settings['extlink_alert_text']) : t('This link will take you to an external web site. We are not responsible for their content.')); + } else { + $extAlertText = ((isset($settings['extlink_alert_text']['value'])) ? Html::escape($settings['extlink_alert_text']['value']) : t('This link will take you to an external web site. We are not responsible for their content.')); + } + return [ 'extTarget' => ((isset($settings['extlink_target'])) ? $settings['extlink_target'] : FALSE), 'extTargetNoOverride' => ((isset($settings['extlink_target_no_override'])) ? $settings['extlink_target_no_override'] : FALSE), @@ -104,7 +112,7 @@ function _extlink_get_settings_from_config(Config $config) { 'extCssExclude' => ((isset($settings['extlink_css_exclude'])) ? $settings['extlink_css_exclude'] : ''), 'extCssExplicit' => ((isset($settings['extlink_css_explicit'])) ? $settings['extlink_css_explicit'] : ''), 'extAlert' => ((isset($settings['extlink_alert'])) ? $settings['extlink_alert'] : FALSE), - 'extAlertText' => ((isset($settings['extlink_alert_text'])) ? Xss::filterAdmin($settings['extlink_alert_text']) : t('This link will take you to an external web site. We are not responsible for their content.')), + 'extAlertText' => $extAlertText, 'mailtoClass' => ((isset($settings['extlink_mailto_class'])) ? $settings['extlink_mailto_class'] : 'mailto'), 'mailtoLabel' => ((isset($settings['extlink_mailto_label'])) ? Html::escape($settings['extlink_mailto_label']) : t('(link sends email)')), 'extUseFontAwesome' => ((isset($settings['extlink_use_font_awesome'])) ? $settings['extlink_use_font_awesome'] : FALSE), diff --git a/web/modules/contrib/extlink/tests/src/FunctionalJavascript/ExtlinkAdminTest.php b/web/modules/contrib/extlink/tests/src/FunctionalJavascript/ExtlinkAdminTest.php index 31d6242d1..f5d599c89 100644 --- a/web/modules/contrib/extlink/tests/src/FunctionalJavascript/ExtlinkAdminTest.php +++ b/web/modules/contrib/extlink/tests/src/FunctionalJavascript/ExtlinkAdminTest.php @@ -36,7 +36,8 @@ public function testExtlinkDisabledOnAdminRoutes() { $this->assertRaw('/extlink/extlink.js'); // Disable Extlink on admin routes. - $this->drupalPostForm(self::EXTLINK_ADMIN_PATH, ['extlink_exclude_admin_routes' => TRUE], 'Save configuration'); + $this->drupalGet(self::EXTLINK_ADMIN_PATH); + $this->submitForm(['extlink_exclude_admin_routes' => TRUE], 'Save configuration'); $this->assertNoRaw('/extlink/extlink.js'); } diff --git a/web/modules/contrib/facets/facets.info.yml b/web/modules/contrib/facets/facets.info.yml index ac195b9f3..c03abbff4 100644 --- a/web/modules/contrib/facets/facets.info.yml +++ b/web/modules/contrib/facets/facets.info.yml @@ -8,7 +8,7 @@ test_dependencies: - search_api:search_api - drupal:views -# Information added by Drupal.org packaging script on 2020-11-03 -version: '8.x-1.6' +# Information added by Drupal.org packaging script on 2021-02-19 +version: '8.x-1.7' project: 'facets' -datestamp: 1604397982 +datestamp: 1613751462 diff --git a/web/modules/contrib/facets/facets.module b/web/modules/contrib/facets/facets.module index 07b5f9d50..6c04f21a0 100644 --- a/web/modules/contrib/facets/facets.module +++ b/web/modules/contrib/facets/facets.module @@ -15,7 +15,6 @@ use Drupal\facets\Entity\Facet; use Drupal\facets\Entity\FacetSource; use Drupal\facets\FacetInterface; -use Drupal\search_api\Query\QueryInterface; use Drupal\views\Entity\View; use Drupal\Core\Entity\EntityInterface; use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException; @@ -71,25 +70,6 @@ function facets_theme($existing, $type, $theme, $path) { ]; } -/** - * Implements hook_search_api_query_alter(). - */ -function facets_search_api_query_alter(QueryInterface &$query) { - if ($query->getIndex()->getServerInstance()->supportsFeature('search_api_facets')) { - /** @var \Drupal\facets\FacetManager\DefaultFacetManager $facet_manager */ - $facet_manager = \Drupal::service('facets.manager'); - - // It's safe to hardcode this to the search api scheme because this is in a - // search_api_query_alter method. If this generated source is not correct, - // implementing the same alter and directly calling - // $manager->alterQuery($query, $your_facetsource_id); will fix that. - $facet_source = 'search_api:' . str_replace(':', '__', $query->getSearchId()); - - // Add the active filters. - $facet_manager->alterQuery($query, $facet_source); - } -} - /** * Implements hook_entity_presave(). * @@ -358,61 +338,12 @@ function facets_system_breadcrumb_alter(Breadcrumb &$breadcrumb, RouteMatchInter * Implements hook_language_switch_links_alter(). */ function facets_language_switch_links_alter(array &$links, $type, Url $url) { - /** @var \Drupal\Core\Language\LanguageManagerInterface $languageManager */ - $languageManager = \Drupal::languageManager(); - $language_interface = $languageManager->getCurrentLanguage(); - /** @var \Drupal\facets\FacetInterface[] $allFacets */ - $allFacets = \Drupal::entityTypeManager() - ->getStorage('facets_facet') - ->loadMultiple(); - - /** @var \Drupal\facets\UrlProcessor\UrlProcessorPluginManager $urlProcessorManager */ - $urlProcessorManager = \Drupal::service('plugin.manager.facets.url_processor'); - foreach ($links as &$link) { - if (empty($link['language']) || !($link['language'] instanceof LanguageInterface) || $link['language']->getId() === $language_interface->getId()) { - continue; - } - - foreach ($allFacets as $facet) { - if (!isset($link['query'][$facet->getFacetSourceConfig()->getFilterKey()]) || - !is_array($link['query'][$facet->getFacetSourceConfig()->getFilterKey()])) { - continue; - } - - $configName = 'facets.facet.' . $facet->id(); - $untranslatedAlias = $languageManager->getLanguageConfigOverride($language_interface->getId(), $configName)->get('url_alias'); - $translatedAlias = $languageManager->getLanguageConfigOverride($link['language']->getId(), $configName)->get('url_alias'); - - // If we don't have a translated alias, that means we're trying to create - // a link to the original language. - if ($translatedAlias === NULL) { - $translatedAlias = \Drupal::config($configName)->getOriginal('url_alias', FALSE); - } - // If we don't have an untranslated alias, we're trying to create a link - // from the original language. - if ($untranslatedAlias === NULL) { - $untranslatedAlias = \Drupal::config($configName)->getOriginal('url_alias', FALSE); - } - - /** @var \Drupal\facets\UrlProcessor\UrlProcessorInterface $urlProcessor */ - $urlProcessor = $urlProcessorManager - ->createInstance($facet - ->getFacetSourceConfig() - ->getUrlProcessorName(), ['facet' => $facet] - ); - - foreach ($link['query'][$facet->getFacetSourceConfig()->getFilterKey()] as &$filters) { - $separator = $urlProcessor->getSeparator(); - $filters = preg_replace( - '/(' . $untranslatedAlias . ")$separator/", - $translatedAlias . $separator, - $filters - ); - } - } - } + /** @var \Drupal\facets\LanguageSwitcherLinksAlterer $alterer */ + $alterer = \Drupal::service('facets.language_switcher_links_alterer'); + $alterer->alter($links, $type, $url); } + /** * Implements hook_form_FORM_ID_alter(). */ diff --git a/web/modules/contrib/facets/facets.services.yml b/web/modules/contrib/facets/facets.services.yml index bd4c6fb71..103f94a62 100644 --- a/web/modules/contrib/facets/facets.services.yml +++ b/web/modules/contrib/facets/facets.services.yml @@ -33,8 +33,16 @@ services: arguments: - '@plugin.manager.facets.url_processor' - '@entity_type.manager' - facets.event_subscriber: - class: Drupal\facets\EventSubscriber + facets.configuration_subscriber: + class: Drupal\facets\EventSubscriber\ConfigurationSubscriber arguments: ['@plugin.manager.block'] tags: - { name: event_subscriber } + facets.search_api_subscriber: + class: Drupal\facets\EventSubscriber\SearchApiSubscriber + arguments: ['@facets.manager'] + tags: + - { name: event_subscriber } + facets.language_switcher_links_alterer: + class: Drupal\facets\LanguageSwitcherLinksAlterer + arguments: ['@language_manager', '@cache.default', '@entity_type.manager', '@plugin.manager.facets.url_processor'] diff --git a/web/modules/contrib/facets/modules/facets_range_widget/facets_range_widget.info.yml b/web/modules/contrib/facets/modules/facets_range_widget/facets_range_widget.info.yml index 9ab897745..868d8c861 100644 --- a/web/modules/contrib/facets/modules/facets_range_widget/facets_range_widget.info.yml +++ b/web/modules/contrib/facets/modules/facets_range_widget/facets_range_widget.info.yml @@ -10,7 +10,7 @@ test_dependencies: - facets:facets - drupal:views -# Information added by Drupal.org packaging script on 2020-11-03 -version: '8.x-1.6' +# Information added by Drupal.org packaging script on 2021-02-19 +version: '8.x-1.7' project: 'facets' -datestamp: 1604397982 +datestamp: 1613751462 diff --git a/web/modules/contrib/facets/modules/facets_range_widget/src/Plugin/facets/processor/RangeSliderProcessor.php b/web/modules/contrib/facets/modules/facets_range_widget/src/Plugin/facets/processor/RangeSliderProcessor.php index 636900e1f..62cf04afb 100644 --- a/web/modules/contrib/facets/modules/facets_range_widget/src/Plugin/facets/processor/RangeSliderProcessor.php +++ b/web/modules/contrib/facets/modules/facets_range_widget/src/Plugin/facets/processor/RangeSliderProcessor.php @@ -55,7 +55,7 @@ public function build(FacetInterface $facet, array $results) { /** @var \Drupal\facets\Result\ResultInterface[] $results */ foreach ($results as &$result) { $new_active_filters = $active_filters; - unset($new_active_filters[$facet->getUrlAlias()]); + unset($new_active_filters[$facet->id()]); // Add one generic query filter with the min and max placeholder. $new_active_filters[$facet->id()][] = '(min:__range_slider_min__,max:__range_slider_max__)'; $url = \Drupal::service('facets.utility.url_generator')->getUrl($new_active_filters, FALSE); diff --git a/web/modules/contrib/facets/modules/facets_rest/facets_rest.info.yml b/web/modules/contrib/facets/modules/facets_rest/facets_rest.info.yml index 698b1919f..75284deb7 100644 --- a/web/modules/contrib/facets/modules/facets_rest/facets_rest.info.yml +++ b/web/modules/contrib/facets/modules/facets_rest/facets_rest.info.yml @@ -12,7 +12,7 @@ test_dependencies: - drupal:views - drupal:rest -# Information added by Drupal.org packaging script on 2020-11-03 -version: '8.x-1.6' +# Information added by Drupal.org packaging script on 2021-02-19 +version: '8.x-1.7' project: 'facets' -datestamp: 1604397982 +datestamp: 1613751462 diff --git a/web/modules/contrib/facets/modules/facets_rest/src/Plugin/views/style/FacetsSerializer.php b/web/modules/contrib/facets/modules/facets_rest/src/Plugin/views/style/FacetsSerializer.php index da35dfee9..ffbec259e 100644 --- a/web/modules/contrib/facets/modules/facets_rest/src/Plugin/views/style/FacetsSerializer.php +++ b/web/modules/contrib/facets/modules/facets_rest/src/Plugin/views/style/FacetsSerializer.php @@ -109,11 +109,23 @@ public function render() { $this->facetsManager->updateResults($facetsource_id); $processed_facets = []; + $facets_metadata = []; foreach ($facets as $facet) { $processed_facets[] = $this->facetsManager->build($facet); + $facets_metadata[$facet->id()] = array( + 'label' => $facet->label(), + 'weight' => $facet->getWeight(), + 'field_id' => $facet->getFieldIdentifier(), + 'url_alias' => $facet->getUrlAlias() + ); } + uasort($facets_metadata, function($a, $b) { + return $a['weight'] > $b['weight']; + }); $rows['facets'] = array_values($processed_facets); + $rows['facets_metadata'] = $facets_metadata; + if (!$this->options['show_facets']) { $rows = $rows['search_results']; } diff --git a/web/modules/contrib/facets/modules/facets_rest/tests/rest_view/rest_view.info.yml b/web/modules/contrib/facets/modules/facets_rest/tests/rest_view/rest_view.info.yml index 5e4d6814a..c240c060e 100644 --- a/web/modules/contrib/facets/modules/facets_rest/tests/rest_view/rest_view.info.yml +++ b/web/modules/contrib/facets/modules/facets_rest/tests/rest_view/rest_view.info.yml @@ -3,6 +3,7 @@ type: module description: 'Provides a Search API + rest dependency to execute tests.' package: 'Testing' hidden: true +core_version_requirement: ^8.8 || ^9 dependencies: - drupal:rest - drupal:views @@ -11,7 +12,7 @@ dependencies: - search_api:search_api_test_db - facets:facets_rest -# Information added by Drupal.org packaging script on 2020-11-03 -version: '8.x-1.6' +# Information added by Drupal.org packaging script on 2021-02-19 +version: '8.x-1.7' project: 'facets' -datestamp: 1604397982 +datestamp: 1613751462 diff --git a/web/modules/contrib/facets/modules/facets_summary/facets_summary.info.yml b/web/modules/contrib/facets/modules/facets_summary/facets_summary.info.yml index af59e521a..918416f5f 100644 --- a/web/modules/contrib/facets/modules/facets_summary/facets_summary.info.yml +++ b/web/modules/contrib/facets/modules/facets_summary/facets_summary.info.yml @@ -10,7 +10,7 @@ test_dependencies: - search_api:search_api - drupal:views -# Information added by Drupal.org packaging script on 2020-11-03 -version: '8.x-1.6' +# Information added by Drupal.org packaging script on 2021-02-19 +version: '8.x-1.7' project: 'facets' -datestamp: 1604397982 +datestamp: 1613751462 diff --git a/web/modules/contrib/facets/modules/facets_summary/facets_summary.module b/web/modules/contrib/facets/modules/facets_summary/facets_summary.module index bb8267fbc..6720862c6 100644 --- a/web/modules/contrib/facets/modules/facets_summary/facets_summary.module +++ b/web/modules/contrib/facets/modules/facets_summary/facets_summary.module @@ -5,8 +5,6 @@ * Hook implementations for the facets summary module. */ -use Drupal\search_api\Query\QueryInterface; - /** * Implements hook_theme(). */ @@ -55,25 +53,6 @@ function facets_summary_theme($existing, $type, $theme, $path) { ]; } -/** - * Implements hook_search_api_query_alter(). - */ -function facets_summary_search_api_query_alter(QueryInterface &$query) { - $facet_source_id = 'search_api:' . str_replace(':', '__', $query->getSearchId()); - $storage = \Drupal::entityTypeManager()->getStorage('facets_summary'); - // Get all the facet summaries for the facet source. - $facet_summaries = $storage->loadByProperties(['facet_source_id' => $facet_source_id]); - /** @var \Drupal\facets_summary\FacetsSummaryInterface $facet_summary */ - foreach ($facet_summaries as $facet_summary) { - $processors = $facet_summary->getProcessors(); - // If the count processor is enabled, results count must not be skipped. - if (in_array('show_count', array_keys($processors))) { - $query->setOption('skip result count', FALSE); - break; - } - } -} - /** * Implements hook_theme_suggestions_HOOK(). */ diff --git a/web/modules/contrib/facets/modules/facets_summary/facets_summary.services.yml b/web/modules/contrib/facets/modules/facets_summary/facets_summary.services.yml index dc1268cc5..ba1a6f5fb 100644 --- a/web/modules/contrib/facets/modules/facets_summary/facets_summary.services.yml +++ b/web/modules/contrib/facets/modules/facets_summary/facets_summary.services.yml @@ -8,3 +8,8 @@ services: - '@plugin.manager.facets.facet_source' - '@plugin.manager.facets_summary.processor' - '@facets.manager' + facets_summary.search_api_subscriber: + class: Drupal\facets_summary\EventSubscriber\SearchApiSubscriber + arguments: ['@entity_type.manager'] + tags: + - { name: event_subscriber } diff --git a/web/modules/contrib/facets/modules/facets_summary/src/EventSubscriber/SearchApiSubscriber.php b/web/modules/contrib/facets/modules/facets_summary/src/EventSubscriber/SearchApiSubscriber.php new file mode 100644 index 000000000..4a154c4c1 --- /dev/null +++ b/web/modules/contrib/facets/modules/facets_summary/src/EventSubscriber/SearchApiSubscriber.php @@ -0,0 +1,60 @@ +<?php + +namespace Drupal\facets_summary\EventSubscriber; + +use Drupal\Core\Entity\EntityTypeManagerInterface; +use Drupal\search_api\Event\QueryPreExecuteEvent; +use Drupal\search_api\Event\SearchApiEvents; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; + +class SearchApiSubscriber implements EventSubscriberInterface { + + /** + * @var \Drupal\Core\Entity\EntityTypeManagerInterface + */ + private $entityTypeManager; + + /** + * Constructs a new class instance. + * + * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entityTypeManager + * The entity type manager. + */ + public function __construct(EntityTypeManagerInterface $entityTypeManager) { + $this->entityTypeManager = $entityTypeManager; + } + + /** + * Reacts to the query alter event. + * + * @param \Drupal\search_api\Event\QueryPreExecuteEvent $event + * The query alter event. + */ + public function queryAlter(QueryPreExecuteEvent $event) { + $query = $event->getQuery(); + + $facet_source_id = 'search_api:' . str_replace(':', '__', $query->getSearchId()); + $storage = $this->entityTypeManager->getStorage('facets_summary'); + // Get all the facet summaries for the facet source. + $facet_summaries = $storage->loadByProperties(['facet_source_id' => $facet_source_id]); + /** @var \Drupal\facets_summary\FacetsSummaryInterface $facet_summary */ + foreach ($facet_summaries as $facet_summary) { + $processors = $facet_summary->getProcessors(); + // If the count processor is enabled, results count must not be skipped. + if (in_array('show_count', array_keys($processors))) { + $query->setOption('skip result count', FALSE); + break; + } + } + } + + /** + * {@inheritdoc} + */ + public static function getSubscribedEvents() { + return [ + SearchApiEvents::QUERY_PRE_EXECUTE => 'queryAlter', + ]; + } + +} diff --git a/web/modules/contrib/facets/src/Controller/FacetBlockAjaxController.php b/web/modules/contrib/facets/src/Controller/FacetBlockAjaxController.php index 993a64792..d1d446d1f 100644 --- a/web/modules/contrib/facets/src/Controller/FacetBlockAjaxController.php +++ b/web/modules/contrib/facets/src/Controller/FacetBlockAjaxController.php @@ -118,13 +118,13 @@ public function ajaxFacetBlockView(Request $request) { $path = $request->request->get('facet_link'); $facets_blocks = $request->request->get('facets_blocks'); - // Make sure we are not updating blocks multiple times. - $facets_blocks = array_unique($facets_blocks); - if (empty($path) || empty($facets_blocks)) { throw new NotFoundHttpException('No facet link or facet blocks found.'); } + // Make sure we are not updating blocks multiple times. + $facets_blocks = array_unique($facets_blocks); + $new_request = Request::create($path); $request_stack = new RequestStack(); $processed = $this->pathProcessor->processInbound($path, $new_request); diff --git a/web/modules/contrib/facets/src/EventSubscriber.php b/web/modules/contrib/facets/src/EventSubscriber/ConfigurationSubscriber.php similarity index 91% rename from web/modules/contrib/facets/src/EventSubscriber.php rename to web/modules/contrib/facets/src/EventSubscriber/ConfigurationSubscriber.php index 7902cdd52..bfb2567e5 100644 --- a/web/modules/contrib/facets/src/EventSubscriber.php +++ b/web/modules/contrib/facets/src/EventSubscriber/ConfigurationSubscriber.php @@ -1,6 +1,6 @@ <?php -namespace Drupal\facets; +namespace Drupal\facets\EventSubscriber; use Drupal\Core\Block\BlockManagerInterface; use Drupal\Core\Config\ConfigCrudEvent; @@ -10,7 +10,7 @@ /** * Config subscriber for facet delete. */ -class EventSubscriber implements EventSubscriberInterface { +class ConfigurationSubscriber implements EventSubscriberInterface { /** * Drupal core's block manager. diff --git a/web/modules/contrib/facets/src/EventSubscriber/SearchApiSubscriber.php b/web/modules/contrib/facets/src/EventSubscriber/SearchApiSubscriber.php new file mode 100644 index 000000000..93f578c81 --- /dev/null +++ b/web/modules/contrib/facets/src/EventSubscriber/SearchApiSubscriber.php @@ -0,0 +1,63 @@ +<?php + +namespace Drupal\facets\EventSubscriber; + +use Drupal\facets\FacetManager\DefaultFacetManager; +use Drupal\search_api\Event\QueryPreExecuteEvent; +use Drupal\search_api\Event\SearchApiEvents; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; + +class SearchApiSubscriber implements EventSubscriberInterface { + + /** + * @var \Drupal\facets\FacetManager\DefaultFacetManager + */ + private $facetManager; + + /** + * Constructs a new class instance. + * + * @param \Drupal\facets\FacetManager\DefaultFacetManager $facetManager + * The messenger. + */ + public function __construct(DefaultFacetManager $facetManager) { + $this->facetManager = $facetManager; + } + + /** + * Reacts to the query alter event. + * + * @param \Drupal\search_api\Event\QueryPreExecuteEvent $event + * The query alter event. + */ + public function queryAlter(QueryPreExecuteEvent $event) { + $query = $event->getQuery(); + + if ($query->getIndex()->getServerInstance()->supportsFeature('search_api_facets')) { + // It's safe to hardcode this to the search api scheme because this is in + // an event subscriber. If this generated source is not correct, + // implementing the same subscriber and directly calling + // $manager->alterQuery($query, $your_facetsource_id); will fix that. + $facet_source = 'search_api:' . str_replace(':', '__', $query->getSearchId()); + + // Add the active filters. + $this->facetManager->alterQuery($query, $facet_source); + } + } + + /** + * {@inheritdoc} + */ + public static function getSubscribedEvents() { + // Workaround to avoid a fatal error during site install from existing config. + // @see https://www.drupal.org/project/facets/issues/3199156 + if (!class_exists('\Drupal\search_api\Event\SearchApiEvents', TRUE)) { + return []; + } + + return [ + SearchApiEvents::QUERY_PRE_EXECUTE => 'queryAlter', + ]; + } + +} diff --git a/web/modules/contrib/facets/src/FacetSource/FacetSourcePluginManager.php b/web/modules/contrib/facets/src/FacetSource/FacetSourcePluginManager.php index 3d2540c56..8c436e196 100644 --- a/web/modules/contrib/facets/src/FacetSource/FacetSourcePluginManager.php +++ b/web/modules/contrib/facets/src/FacetSource/FacetSourcePluginManager.php @@ -22,8 +22,10 @@ class FacetSourcePluginManager extends DefaultPluginManager { */ public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler) { parent::__construct('Plugin/facets/facet_source', $namespaces, $module_handler, FacetSourcePluginInterface::class, FacetsFacetSource::class); + $this->setCacheBackend($cache_backend, 'facet_source_plugins'); } + /** * {@inheritdoc} */ diff --git a/web/modules/contrib/facets/src/Hierarchy/HierarchyInterface.php b/web/modules/contrib/facets/src/Hierarchy/HierarchyInterface.php index a000c1567..2b418d9af 100644 --- a/web/modules/contrib/facets/src/Hierarchy/HierarchyInterface.php +++ b/web/modules/contrib/facets/src/Hierarchy/HierarchyInterface.php @@ -40,4 +40,19 @@ public function getNestedChildIds($id); */ public function getChildIds(array $ids); + /** + * Retrieve the siblings for an array of ids. + * + * @param array $ids + * An array of ids. + * @param array $activeIds + * An array of currently active ids. + * @param bool $parentSiblings + * Show parent siblings. + * + * @return array + * Given sibling ids as key, value is an array of ids. + */ + public function getSiblingIds(array $ids, array $activeIds = [], bool $parentSiblings = TRUE); + } diff --git a/web/modules/contrib/facets/src/Hierarchy/HierarchyPluginBase.php b/web/modules/contrib/facets/src/Hierarchy/HierarchyPluginBase.php index 96dc4dc42..505ecddf1 100644 --- a/web/modules/contrib/facets/src/Hierarchy/HierarchyPluginBase.php +++ b/web/modules/contrib/facets/src/Hierarchy/HierarchyPluginBase.php @@ -20,4 +20,13 @@ public static function create(ContainerInterface $container, array $configuratio return new static($configuration, $plugin_id, $plugin_definition, $request); } + /** + * Provide a default implementation for backward compatibility. + * + * {@inheritdoc} + */ + public function getSiblingIds(array $ids, array $activeIds = [], bool $parentSiblings = TRUE) { + return []; + } + } diff --git a/web/modules/contrib/facets/src/LanguageSwitcherLinksAlterer.php b/web/modules/contrib/facets/src/LanguageSwitcherLinksAlterer.php new file mode 100644 index 000000000..de2574227 --- /dev/null +++ b/web/modules/contrib/facets/src/LanguageSwitcherLinksAlterer.php @@ -0,0 +1,187 @@ +<?php + +namespace Drupal\facets; + +use Drupal\Core\Cache\Cache; +use Drupal\Core\Cache\CacheBackendInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; +use Drupal\Core\Language\LanguageInterface; +use Drupal\Core\Language\LanguageManagerInterface; +use Drupal\Core\Url; +use Drupal\facets\UrlProcessor\UrlProcessorPluginManager; + +/** + * Helper service that alters the language switcher links. + * + * Facet URL aliases can be translated so we need to make sure that if we are + * on a page that has facet filters in the URL, we replace the language switcher + * links filters with the translated facet URL aliases for the target language. + */ +class LanguageSwitcherLinksAlterer { + + /** + * The language manager. + * + * @var \Drupal\Core\Language\LanguageManagerInterface + */ + protected $languageManager; + + /** + * The cache backend. + * + * @var \Drupal\Core\Cache\CacheBackendInterface + */ + protected $cacheBackend; + + /** + * The entity type manager. + * + * @var \Drupal\Core\Entity\EntityTypeManagerInterface + */ + protected $entityTypeManager; + + /** + * The URL processor plugin manager. + * + * @var \Drupal\facets\UrlProcessor\UrlProcessorPluginManager + */ + protected $urlProcessorManager; + + /** + * The data needed to alter the language switcher links. + * + * @var array + */ + protected $data = []; + + /** + * LanguageSwitcherLinksAlterer constructor. + * + * @param \Drupal\Core\Language\LanguageManagerInterface $languageManager + * The language manager. + * @param \Drupal\Core\Cache\CacheBackendInterface $cacheBackend + * The cache backend. + * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entityTypeManager + * The entity type manager. + * @param \Drupal\facets\UrlProcessor\UrlProcessorPluginManager $urlProcessorManager + * The URL processor plugin manager. + */ + public function __construct(LanguageManagerInterface $languageManager, CacheBackendInterface $cacheBackend, EntityTypeManagerInterface $entityTypeManager, UrlProcessorPluginManager $urlProcessorManager) { + $this->languageManager = $languageManager; + $this->cacheBackend = $cacheBackend; + $this->entityTypeManager = $entityTypeManager; + $this->urlProcessorManager = $urlProcessorManager; + } + + /** + * Alters the language switcher links. + * + * @param array $links + * The links. + * @param $type + * The language type. + * @param \Drupal\Core\Url $url + * The URL the switch links will be relative to. + * + * @see facets_language_switch_links_alter() + */ + public function alter(array &$links, $type, Url $url) { + if (!$this->data) { + $this->initializeData(); + } + + $current_language = $this->languageManager->getCurrentLanguage(); + + foreach ($links as &$link) { + if (empty($link['language']) || !($link['language'] instanceof LanguageInterface) || $link['language']->getId() === $current_language->getId()) { + continue; + } + + foreach ($this->data as $facet_id => $facet_info) { + $filter_key = $facet_info['filter_key']; + $separator = $facet_info['separator']; + $url_aliases = $facet_info['url_aliases']; + $original_language = $url_aliases['original']; + + if (!isset($link['query'][$filter_key]) || !is_array($link['query'][$filter_key])) { + continue; + } + + $untranslated_alias = $url_aliases[$this->languageManager->getCurrentLanguage()->getId()]; + $translated_alias = $url_aliases[$link['language']->getId()]; + + // If we don't have a translated alias, that means we're trying to create + // a link to the original language. + if ($translated_alias === NULL) { + $translated_alias = $url_aliases[$original_language]; + } + // If we don't have an untranslated alias, we're trying to create a link + // from the original language. + if ($untranslated_alias === NULL) { + $untranslated_alias = $url_aliases[$original_language]; + } + + foreach ($link['query'][$filter_key] as &$filters) { + $filters = preg_replace( + '/(' . $untranslated_alias . ")$separator/", + $translated_alias . $separator, + $filters + ); + } + } + } + } + + /** + * Initializes the data needed for altering the language switcher links. + * + * It runs through all the facets on the site and all the languages and + * creates a cache of the URL aliases for all the languages. + */ + protected function initializeData() { + $cache = $this->cacheBackend->get('facets_language_switcher_links'); + if ($cache) { + $this->data = $cache->data; + return; + } + + $data = []; + + /** @var \Drupal\facets\FacetInterface[] $facets */ + $facets = $this->entityTypeManager->getStorage('facets_facet')->loadMultipleOverrideFree(); + + $cache_tags = []; + foreach ($facets as $facet) { + $cache_tags = Cache::mergeTags($cache_tags, $facet->getCacheTags()); + + /** @var \Drupal\facets\UrlProcessor\UrlProcessorInterface $urlProcessor */ + $id = $facet->getFacetSourceConfig()->getUrlProcessorName(); + $url_processor = $this->urlProcessorManager->createInstance($id, ['facet' => $facet]); + + if (!isset($data[$facet->id()])) { + $data[$facet->id()] = [ + 'separator' => $url_processor->getSeparator(), + 'filter_key' => $facet->getFacetSourceConfig()->getFilterKey(), + 'url_aliases' => [ + 'original' => $facet->language()->getId(), + $facet->language()->getId() => $facet->getUrlAlias(), + ], + ]; + } + + foreach ($this->languageManager->getLanguages() as $language) { + if ($language->getId() === $facet->language()->getId()) { + // Skip the original facet language as it's covered above. + continue; + } + + $config_name = 'facets.facet.' . $facet->id(); + $translated_alias = $this->languageManager->getLanguageConfigOverride($language->getId(), $config_name)->get('url_alias'); + $data[$facet->id()]['url_aliases'][$language->getId()] = $translated_alias; + } + } + + $this->data = $data; + $this->cacheBackend->set('facets_language_switcher_links', $data, Cache::PERMANENT, $cache_tags); + } +} diff --git a/web/modules/contrib/facets/src/Plugin/facets/hierarchy/Taxonomy.php b/web/modules/contrib/facets/src/Plugin/facets/hierarchy/Taxonomy.php index e57d3b483..e9e4a1fe4 100644 --- a/web/modules/contrib/facets/src/Plugin/facets/hierarchy/Taxonomy.php +++ b/web/modules/contrib/facets/src/Plugin/facets/hierarchy/Taxonomy.php @@ -114,6 +114,48 @@ public function getChildIds(array $ids) { return $parents; } + /** + * {@inheritdoc} + */ + public function getSiblingIds(array $ids, array $activeIds = [], bool $parentSiblings = TRUE) { + if (empty($ids)) { + return []; + } + + $parentIds = []; + $topLevelTerms = []; + + foreach ($ids as $id) { + if (!$activeIds || in_array($id, $activeIds)) { + $currentParentIds = $this->getParentIds($id); + if (!$currentParentIds) { + if (!$topLevelTerms) { + /** @var \Drupal\taxonomy\Entity\Term $term */ + $term = $this->termStorage->load($id); + $topLevelTerms = array_map(function ($term) { + return $term->tid; + }, $this->termStorage->loadTree($term->bundle(), 0, 1)); + } + } + else { + $parentIds[] = $currentParentIds; + } + } + } + + $parentIds = array_unique(array_merge([], ...$parentIds)); + $childIds = array_merge([], ...$this->getChildIds($parentIds)); + + return array_diff( + array_merge( + $childIds, + $topLevelTerms, + (!$topLevelTerms && $parentSiblings) ? $this->getSiblingIds($ids, $parentIds) : [] + ), + $ids + ); + } + /** * Returns the parent tid for a given tid, or false if no parent exists. * diff --git a/web/modules/contrib/facets/src/Plugin/facets/processor/ShowSiblingsProcessor.php b/web/modules/contrib/facets/src/Plugin/facets/processor/ShowSiblingsProcessor.php new file mode 100644 index 000000000..4d7f977dd --- /dev/null +++ b/web/modules/contrib/facets/src/Plugin/facets/processor/ShowSiblingsProcessor.php @@ -0,0 +1,40 @@ +<?php + +namespace Drupal\facets\Plugin\facets\processor; + +use Drupal\facets\FacetInterface; +use Drupal\facets\Processor\BuildProcessorInterface; +use Drupal\facets\Processor\ProcessorPluginBase; +use Drupal\facets\Result\Result; + +/** + * Provides a processor that only shows deepest level items. + * + * @FacetsProcessor( + * id = "show_siblings_processor", + * label = @Translation("Show siblings"), + * description = @Translation("Show all siblings of a hierarchical facet item. In 'Advanced settings' this processor should be executed early in the processor chain, for example before ids get converted into titles. It is recommended to enable 'Use hierarchy' and 'Ensure that only one result can be displayed', too."), + * stages = { + * "build" = 40 + * } + * ) + */ +class ShowSiblingsProcessor extends ProcessorPluginBase implements BuildProcessorInterface { + + /** + * {@inheritdoc} + */ + public function build(FacetInterface $facet, array $results) { + /** @var \Drupal\facets\Result\ResultInterface[] $results */ + if ($facet->getUseHierarchy()) { + $rawValues = array_map(function ($result) { + return $result->getRawValue(); + }, $results); + foreach ($facet->getHierarchyInstance()->getSiblingIds($rawValues, $facet->getActiveItems()) as $siblingId) { + $results[] = new Result($facet, $siblingId, $siblingId, 0); + } + } + return $results; + } + +} diff --git a/web/modules/contrib/facets/src/Plugin/facets/query_type/SearchApiRange.php b/web/modules/contrib/facets/src/Plugin/facets/query_type/SearchApiRange.php index e38f1d5a2..d1a50bba6 100644 --- a/web/modules/contrib/facets/src/Plugin/facets/query_type/SearchApiRange.php +++ b/web/modules/contrib/facets/src/Plugin/facets/query_type/SearchApiRange.php @@ -60,6 +60,9 @@ public function build() { foreach ($this->results as $result) { if ($result['count'] || $query_operator == 'or') { $count = $result['count']; + while(is_array($result['filter'])) { + $result['filter'] = current($result['filter']); + } $result_filter = trim($result['filter'], '"'); $result = new Result($this->facet, $result_filter, $result_filter, $count); $facet_results[] = $result; diff --git a/web/modules/contrib/facets/src/QueryType/QueryTypePluginManager.php b/web/modules/contrib/facets/src/QueryType/QueryTypePluginManager.php index f3144807e..6bdf7f2c9 100644 --- a/web/modules/contrib/facets/src/QueryType/QueryTypePluginManager.php +++ b/web/modules/contrib/facets/src/QueryType/QueryTypePluginManager.php @@ -17,6 +17,7 @@ class QueryTypePluginManager extends DefaultPluginManager { */ public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler) { parent::__construct('Plugin/facets/query_type', $namespaces, $module_handler, QueryTypeInterface::class, FacetsQueryType::class); + $this->setCacheBackend($cache_backend, 'facet_query_type_plugins'); } } diff --git a/web/modules/contrib/facets/src/Widget/WidgetPluginManager.php b/web/modules/contrib/facets/src/Widget/WidgetPluginManager.php index 939c6a02f..1dd50ed4c 100644 --- a/web/modules/contrib/facets/src/Widget/WidgetPluginManager.php +++ b/web/modules/contrib/facets/src/Widget/WidgetPluginManager.php @@ -18,6 +18,7 @@ class WidgetPluginManager extends DefaultPluginManager { public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler) { parent::__construct('Plugin/facets/widget', $namespaces, $module_handler, WidgetPluginInterface::class, FacetsWidget::class); $this->alterInfo('widget_plugin_info'); + $this->setCacheBackend($cache_backend, 'facet_widget_plugins'); } } diff --git a/web/modules/contrib/facets/tests/facets_custom_widget/facets_custom_widget.info.yml b/web/modules/contrib/facets/tests/facets_custom_widget/facets_custom_widget.info.yml index fcd3a151f..784c94a89 100644 --- a/web/modules/contrib/facets/tests/facets_custom_widget/facets_custom_widget.info.yml +++ b/web/modules/contrib/facets/tests/facets_custom_widget/facets_custom_widget.info.yml @@ -3,8 +3,8 @@ type: module description: 'Facets custom widget' package: 'Testing' hidden: true - -# Information added by Drupal.org packaging script on 2020-11-03 -version: '8.x-1.6' +core_version_requirement: ^8.8 || ^9 +# Information added by Drupal.org packaging script on 2021-02-19 +version: '8.x-1.7' project: 'facets' -datestamp: 1604397982 +datestamp: 1613751462 diff --git a/web/modules/contrib/facets/tests/facets_events_test/facets_events_test.info.yml b/web/modules/contrib/facets/tests/facets_events_test/facets_events_test.info.yml index b362da181..b3988fd62 100644 --- a/web/modules/contrib/facets/tests/facets_events_test/facets_events_test.info.yml +++ b/web/modules/contrib/facets/tests/facets_events_test/facets_events_test.info.yml @@ -3,8 +3,8 @@ type: module description: 'Facets events test' package: 'Testing' hidden: true - -# Information added by Drupal.org packaging script on 2020-11-03 -version: '8.x-1.6' +core_version_requirement: ^8.8 || ^9 +# Information added by Drupal.org packaging script on 2021-02-19 +version: '8.x-1.7' project: 'facets' -datestamp: 1604397982 +datestamp: 1613751462 diff --git a/web/modules/contrib/facets/tests/facets_query_processor/facets_query_processor.info.yml b/web/modules/contrib/facets/tests/facets_query_processor/facets_query_processor.info.yml index e4a53bbaf..72a91837c 100644 --- a/web/modules/contrib/facets/tests/facets_query_processor/facets_query_processor.info.yml +++ b/web/modules/contrib/facets/tests/facets_query_processor/facets_query_processor.info.yml @@ -3,8 +3,8 @@ type: module description: 'Facets query processor' package: 'Testing' hidden: true - -# Information added by Drupal.org packaging script on 2020-11-03 -version: '8.x-1.6' +core_version_requirement: ^8.8 || ^9 +# Information added by Drupal.org packaging script on 2021-02-19 +version: '8.x-1.7' project: 'facets' -datestamp: 1604397982 +datestamp: 1613751462 diff --git a/web/modules/contrib/facets/tests/facets_search_api_dependency/facets_search_api_dependency.info.yml b/web/modules/contrib/facets/tests/facets_search_api_dependency/facets_search_api_dependency.info.yml index 180180ac6..475858218 100644 --- a/web/modules/contrib/facets/tests/facets_search_api_dependency/facets_search_api_dependency.info.yml +++ b/web/modules/contrib/facets/tests/facets_search_api_dependency/facets_search_api_dependency.info.yml @@ -7,8 +7,8 @@ dependencies: - search_api:search_api - search_api:search_api_test_db - drupal:views - -# Information added by Drupal.org packaging script on 2020-11-03 -version: '8.x-1.6' +core_version_requirement: ^8.8 || ^9 +# Information added by Drupal.org packaging script on 2021-02-19 +version: '8.x-1.7' project: 'facets' -datestamp: 1604397982 +datestamp: 1613751462 diff --git a/web/modules/contrib/ludwig/3195655-11.patch b/web/modules/contrib/ludwig/3195655-11.patch new file mode 100644 index 000000000..f969367b5 --- /dev/null +++ b/web/modules/contrib/ludwig/3195655-11.patch @@ -0,0 +1,281 @@ +diff --git a/src/PackageManager.php b/src/PackageManager.php +index cb4918a..de8e04e 100644 +--- a/src/PackageManager.php ++++ b/src/PackageManager.php +@@ -48,139 +48,154 @@ class PackageManager implements PackageManagerInterface { + $packages = []; + foreach ($extensions as $extension_name => $extension) { + $extension_path = $extension->getPath(); +- $config = $this->jsonRead($this->root . '/' . $extension_path . '/ludwig.json'); +- $config += [ +- 'require' => [], +- ]; +- +- foreach ($config['require'] as $package_name => $package_data) { +- $package_path = $extension_path . '/lib/' . str_replace('/', '-', $package_name) . '/' . $package_data['version']; +- $disable_warnings = isset($package_data['disable_warnings']) ? $package_data['disable_warnings'] : FALSE; +- $package = $this->jsonRead($this->root . '/' . $package_path . '/composer.json'); +- $description = !empty($package['description']) ? $package['description'] : ''; +- $homepage = !empty($package['homepage']) ? $package['homepage'] : ''; +- // Create the base package data array. +- $package_base = [ +- 'name' => $package_name, +- 'version' => $package_data['version'], +- 'description' => $description, +- 'homepage' => $homepage, +- 'provider' => $extension_name, +- 'provider_path' => $extension_path, +- 'download_url' => $package_data['url'], +- 'disable_warnings' => $disable_warnings, +- 'path' => $package_path, ++ // Let's check if this module has ludwig.json file and ++ // proceed only if it does. ++ if (is_file($this->root . '/' . $extension_path . '/ludwig.json')) { ++ $config = $this->jsonRead($this->root . '/' . $extension_path . '/ludwig.json'); ++ $config += [ ++ 'require' => [], + ]; +- if (empty($package)) { +- // Add new package. This one needs a download. +- $package_append = [ +- 'namespace' => '', +- 'paths' => [], +- 'installed' => FALSE, +- 'resource' => '', +- ]; +- $packages[$package_name] = array_merge($package_base, $package_append); +- continue; ++ // Let's check if this module has .module file and ++ // load its content if it has. We will need it later. ++ if (is_file($this->root . '/' . $extension_path . '/' . $extension_name . '.module')) { ++ $module_file = file_get_contents($this->root . '/' . $extension_path . '/' . $extension_name . '.module'); ++ $has_ludwig_service = strpos($module_file, 'ludwig.require_once') !== FALSE; + } +- if (!empty($package['autoload'])) { +- $resources = array_keys($package['autoload']); +- // Iterate through all autoload types. +- foreach ($resources as $resource) { +- if (!empty($package['autoload'][$resource])) { +- if ($resource == 'files' || $resource == 'classmap' || $resource == 'exclude-from-classmap' || $resource == 'target-dir') { +- $autoload = $package['autoload']; +- $package_namespaces = [$resource]; +- } +- elseif ($resource == 'psr-4' || $resource == 'psr-0') { +- $autoload = $package['autoload'][$resource]; +- $package_namespaces = array_keys($autoload); +- } +- else { +- // The unknown library type. +- $package_append = [ +- 'namespace' => '', +- 'paths' => [], +- 'installed' => TRUE, +- 'resource' => 'unknown', +- ]; +- $packages[$package_name] = array_merge($package_base, $package_append); +- continue; +- } +- // Iterate through all the resources inside single autoload type. +- foreach ($package_namespaces as $namespace) { +- $paths_raw = $autoload[$namespace]; +- // Support for both single path (string) and multiple +- // paths (array) inside one resource. +- $paths = []; +- if (is_array($paths_raw)) { +- $paths = $paths_raw; +- } +- elseif (is_string($paths_raw)) { +- $paths[] = $paths_raw; ++ foreach ($config['require'] as $package_name => $package_data) { ++ $package_path = $extension_path . '/lib/' . str_replace('/', '-', $package_name) . '/' . $package_data['version']; ++ $disable_warnings = isset($package_data['disable_warnings']) ? $package_data['disable_warnings'] : FALSE; ++ // Disable the 'classmap' or 'files' warning if this ++ // module's .module file is calling ludwig.require_once ++ // service with this package name as an argument. ++ if (!empty($has_ludwig_service) && !empty($module_file) && ((strpos($module_file, "requireOnce('".$package_name) !== FALSE) || (strpos($module_file, "requireOnce( '".$package_name) !== FALSE) || (strpos($module_file, 'requireOnce("'.$package_name) !== FALSE) || (strpos($module_file, 'requireOnce( "'.$package_name) !== FALSE))) { ++ $disable_warnings = TRUE; ++ } ++ $package = $this->jsonRead($this->root . '/' . $package_path . '/composer.json'); ++ $description = !empty($package['description']) ? $package['description'] : ''; ++ $homepage = !empty($package['homepage']) ? $package['homepage'] : ''; ++ // Create the base package data array. ++ $package_base = [ ++ 'name' => $package_name, ++ 'version' => $package_data['version'], ++ 'description' => $description, ++ 'homepage' => $homepage, ++ 'provider' => $extension_name, ++ 'provider_path' => $extension_path, ++ 'download_url' => $package_data['url'], ++ 'disable_warnings' => $disable_warnings, ++ 'path' => $package_path, ++ ]; ++ if (empty($package)) { ++ // Add new package. This one needs a download. ++ $package_append = [ ++ 'namespace' => '', ++ 'paths' => [], ++ 'installed' => FALSE, ++ 'resource' => '', ++ ]; ++ $packages[$package_name] = array_merge($package_base, $package_append); ++ continue; ++ } ++ if (!empty($package['autoload'])) { ++ $resources = array_keys($package['autoload']); ++ // Iterate through all autoload types. ++ foreach ($resources as $resource) { ++ if (!empty($package['autoload'][$resource])) { ++ if ($resource == 'files' || $resource == 'classmap' || $resource == 'exclude-from-classmap' || $resource == 'target-dir') { ++ $autoload = $package['autoload']; ++ $package_namespaces = [$resource]; + } +- // Autoloading fails if the namespace ends with a backslash. +- $namespace = trim($namespace, '\\'); +- // Iterate through all the paths inside this resource. +- foreach ($paths as $key => $value) { +- $paths[$key] = rtrim($paths[$key], './'); +- // Core only assumes that LudwigServiceProvider is adding +- // PSR-4 paths, each PSR-0 path needs to be converted +- // in order to work. +- if ($resource == 'psr-0' && !empty($namespace)) { +- if (!empty($paths[$key])) { +- $paths[$key] .= '/'; +- } +- $paths[$key] .= str_replace('\\', '/', $namespace); +- } ++ elseif ($resource == 'psr-4' || $resource == 'psr-0') { ++ $autoload = $package['autoload'][$resource]; ++ $package_namespaces = array_keys($autoload); + } +- // Combine $package_name an $paths into uniuqe $name_path value. +- $name_path = $package_name . '_' . implode('-', $paths); +- // Two versions of the same package are not possible. +- // If multiple providers require the same package +- // we keep the highest required version only, since it has +- // the best probability to work for all providers, and +- // it is the most secure. +- if (!isset($packages[$name_path]) || $packages[$name_path]['version'] < $package_data['version']) { +- // If the current item is going to be replaced with the new +- // one, unset the current item first to keep all packages +- // nicely sorted by provider name inside the 'Packages' table. +- if (isset($packages[$name_path])) { +- unset($packages[$name_path]); +- } +- // Add new package. ++ else { ++ // The unknown library type. + $package_append = [ +- 'namespace' => $namespace, +- 'paths' => $paths, ++ 'namespace' => '', ++ 'paths' => [], + 'installed' => TRUE, +- 'resource' => $resource, ++ 'resource' => 'unknown', + ]; +- $packages[$name_path] = array_merge($package_base, $package_append); ++ $packages[$package_name] = array_merge($package_base, $package_append); ++ continue; ++ } ++ // Iterate through all the resources inside single autoload type. ++ foreach ($package_namespaces as $namespace) { ++ $paths_raw = $autoload[$namespace]; ++ // Support for both single path (string) and multiple ++ // paths (array) inside one resource. ++ $paths = []; ++ if (is_array($paths_raw)) { ++ $paths = $paths_raw; ++ } ++ elseif (is_string($paths_raw)) { ++ $paths[] = $paths_raw; ++ } ++ // Autoloading fails if the namespace ends with a backslash. ++ $namespace = trim($namespace, '\\'); ++ // Iterate through all the paths inside this resource. ++ foreach ($paths as $key => $value) { ++ $paths[$key] = rtrim($paths[$key], './'); ++ // Core only assumes that LudwigServiceProvider is adding ++ // PSR-4 paths, each PSR-0 path needs to be converted ++ // in order to work. ++ if ($resource == 'psr-0' && !empty($namespace)) { ++ if (!empty($paths[$key])) { ++ $paths[$key] .= '/'; ++ } ++ $paths[$key] .= str_replace('\\', '/', $namespace); ++ } ++ } ++ // Combine $package_name an $paths into uniuqe $name_path value. ++ $name_path = $package_name . '_' . implode('-', $paths); ++ // Two versions of the same package are not possible. ++ // If multiple providers require the same package ++ // we keep the highest required version only, since it has ++ // the best probability to work for all providers, and ++ // it is the most secure. ++ if (!isset($packages[$name_path]) || $packages[$name_path]['version'] < $package_data['version']) { ++ // If the current item is going to be replaced with the new ++ // one, unset the current item first to keep all packages ++ // nicely sorted by provider name inside the 'Packages' table. ++ if (isset($packages[$name_path])) { ++ unset($packages[$name_path]); ++ } ++ // Add new package. ++ $package_append = [ ++ 'namespace' => $namespace, ++ 'paths' => $paths, ++ 'installed' => TRUE, ++ 'resource' => $resource, ++ ]; ++ $packages[$name_path] = array_merge($package_base, $package_append); ++ } + } + } + } + } +- } +- elseif (!empty($package['include-path'])) { +- // This is the Legacy library (depricated type). +- // They do not have autoload composer.json section +- // but "include-path" section instead. +- $package_append = [ +- 'namespace' => '', +- 'paths' => [], +- 'installed' => TRUE, +- 'resource' => 'legacy', +- ]; +- $packages[$package_name] = array_merge($package_base, $package_append); +- } +- else { +- // The unknown library type. +- $package_append = [ +- 'namespace' => '', +- 'paths' => [], +- 'installed' => TRUE, +- 'resource' => 'unknown', +- ]; +- $packages[$package_name] = array_merge($package_base, $package_append); ++ elseif (!empty($package['include-path'])) { ++ // This is the Legacy library (depricated type). ++ // They do not have autoload composer.json section ++ // but "include-path" section instead. ++ $package_append = [ ++ 'namespace' => '', ++ 'paths' => [], ++ 'installed' => TRUE, ++ 'resource' => 'legacy', ++ ]; ++ $packages[$package_name] = array_merge($package_base, $package_append); ++ } ++ else { ++ // The unknown library type. ++ $package_append = [ ++ 'namespace' => '', ++ 'paths' => [], ++ 'installed' => TRUE, ++ 'resource' => 'unknown', ++ ]; ++ $packages[$package_name] = array_merge($package_base, $package_append); ++ } + } + } + } diff --git a/web/modules/contrib/ludwig/ludwig.info.yml b/web/modules/contrib/ludwig/ludwig.info.yml index 3261807f6..202042e04 100644 --- a/web/modules/contrib/ludwig/ludwig.info.yml +++ b/web/modules/contrib/ludwig/ludwig.info.yml @@ -6,7 +6,7 @@ core: 8.x core_version_requirement: ^8 || ^9 configure: ludwig.packages -# Information added by Drupal.org packaging script on 2021-01-29 -version: '8.x-1.6' +# Information added by Drupal.org packaging script on 2021-02-15 +version: '8.x-1.7' project: 'ludwig' -datestamp: 1611958527 +datestamp: 1613389170 diff --git a/web/modules/contrib/ludwig/src/Controller/PackageController.php b/web/modules/contrib/ludwig/src/Controller/PackageController.php index 1cb04f6b4..3ba49694d 100644 --- a/web/modules/contrib/ludwig/src/Controller/PackageController.php +++ b/web/modules/contrib/ludwig/src/Controller/PackageController.php @@ -118,19 +118,31 @@ public function page() { if ($package['installed'] === FALSE) { $missing++; } + + $guide_link = 'https://www.drupal.org/docs/contributed-modules/ludwig/ludwig-errors-warnings-and-notices'; + if (($package['resource'] == 'classmap' || $package['resource'] == 'files') && empty($package['disable_warnings'])) { - $package['description'] = $this->t('<strong>Warning! The @resource autoload type libraries are not supported by Ludwig yet.</strong>', [ + $package['description'] .= $this->t('<br><strong>Warning! The @resource type libraries are not supported by Ludwig automatically. @read_more.</strong>', [ + '@resource' => strtoupper($package['resource']), + '@read_more' => Link::fromTextAndUrl($this->t('Read more'), Url::fromUri($guide_link))->toString(), + ]); + } + elseif ($package['resource'] == 'exclude-from-classmap' && empty($package['disable_warnings'])) { + $package['description'] .= $this->t('<br><strong>Notice! The @resource property is not supported by Ludwig.</strong> Despite this notice, the library is loaded properly and the module should work nicely. @read_more.', [ '@resource' => strtoupper($package['resource']), + '@read_more' => Link::fromTextAndUrl($this->t('Read more'), Url::fromUri($guide_link))->toString(), ]); } - elseif (($package['resource'] == 'exclude-from-classmap' || $package['resource'] == 'target-dir') && empty($package['disable_warnings'])) { - $package['description'] = $this->t('<strong>Warning! The @resource autoload property is not supported by Ludwig yet.</strong>', [ + elseif ($package['resource'] == 'target-dir' && empty($package['disable_warnings'])) { + $package['description'] .= $this->t('<br><strong>Warning! The @resource property is not supported by Ludwig.</strong> This module may lack some functionality. @read_more.', [ '@resource' => strtoupper($package['resource']), + '@read_more' => Link::fromTextAndUrl($this->t('Read more'), Url::fromUri($guide_link))->toString(), ]); } elseif (($package['resource'] == 'legacy' || $package['resource'] == 'unknown') && empty($package['disable_warnings'])) { - $package['description'] = $this->t('<strong>Warning! The @resource library type. Not supported by Ludwig.</strong>', [ + $package['description'] .= $this->t('<br><strong>Warning! The @resource library type. Not supported by Ludwig. @read_more.</strong>', [ '@resource' => strtoupper($package['resource']), + '@read_more' => Link::fromTextAndUrl($this->t('Read more'), Url::fromUri($guide_link))->toString(), ]); } elseif (!$package['installed']) { @@ -184,9 +196,8 @@ public function page() { } if (!empty($missing)) { - // There are some missing packages, so render - // the "Download all missing packages" button - // as clickable link to the download page. + // There are some missing packages, so render the + // "Download all missing packages" clickable button. $build['#markup'] = $this->t('<div class="button"><a href="@packages-url">Download and unpack all missing packages (@missing)</a></div><div> </div>', [ '@packages-url' => Url::fromRoute('ludwig.packages')->toString() . '?missing=download', '@missing' => $missing, diff --git a/web/modules/contrib/ludwig/src/PackageManager.php b/web/modules/contrib/ludwig/src/PackageManager.php index cb4918aa4..de8e04e02 100644 --- a/web/modules/contrib/ludwig/src/PackageManager.php +++ b/web/modules/contrib/ludwig/src/PackageManager.php @@ -48,139 +48,154 @@ public function getPackages() { $packages = []; foreach ($extensions as $extension_name => $extension) { $extension_path = $extension->getPath(); - $config = $this->jsonRead($this->root . '/' . $extension_path . '/ludwig.json'); - $config += [ - 'require' => [], - ]; - - foreach ($config['require'] as $package_name => $package_data) { - $package_path = $extension_path . '/lib/' . str_replace('/', '-', $package_name) . '/' . $package_data['version']; - $disable_warnings = isset($package_data['disable_warnings']) ? $package_data['disable_warnings'] : FALSE; - $package = $this->jsonRead($this->root . '/' . $package_path . '/composer.json'); - $description = !empty($package['description']) ? $package['description'] : ''; - $homepage = !empty($package['homepage']) ? $package['homepage'] : ''; - // Create the base package data array. - $package_base = [ - 'name' => $package_name, - 'version' => $package_data['version'], - 'description' => $description, - 'homepage' => $homepage, - 'provider' => $extension_name, - 'provider_path' => $extension_path, - 'download_url' => $package_data['url'], - 'disable_warnings' => $disable_warnings, - 'path' => $package_path, + // Let's check if this module has ludwig.json file and + // proceed only if it does. + if (is_file($this->root . '/' . $extension_path . '/ludwig.json')) { + $config = $this->jsonRead($this->root . '/' . $extension_path . '/ludwig.json'); + $config += [ + 'require' => [], ]; - if (empty($package)) { - // Add new package. This one needs a download. - $package_append = [ - 'namespace' => '', - 'paths' => [], - 'installed' => FALSE, - 'resource' => '', - ]; - $packages[$package_name] = array_merge($package_base, $package_append); - continue; + // Let's check if this module has .module file and + // load its content if it has. We will need it later. + if (is_file($this->root . '/' . $extension_path . '/' . $extension_name . '.module')) { + $module_file = file_get_contents($this->root . '/' . $extension_path . '/' . $extension_name . '.module'); + $has_ludwig_service = strpos($module_file, 'ludwig.require_once') !== FALSE; } - if (!empty($package['autoload'])) { - $resources = array_keys($package['autoload']); - // Iterate through all autoload types. - foreach ($resources as $resource) { - if (!empty($package['autoload'][$resource])) { - if ($resource == 'files' || $resource == 'classmap' || $resource == 'exclude-from-classmap' || $resource == 'target-dir') { - $autoload = $package['autoload']; - $package_namespaces = [$resource]; - } - elseif ($resource == 'psr-4' || $resource == 'psr-0') { - $autoload = $package['autoload'][$resource]; - $package_namespaces = array_keys($autoload); - } - else { - // The unknown library type. - $package_append = [ - 'namespace' => '', - 'paths' => [], - 'installed' => TRUE, - 'resource' => 'unknown', - ]; - $packages[$package_name] = array_merge($package_base, $package_append); - continue; - } - // Iterate through all the resources inside single autoload type. - foreach ($package_namespaces as $namespace) { - $paths_raw = $autoload[$namespace]; - // Support for both single path (string) and multiple - // paths (array) inside one resource. - $paths = []; - if (is_array($paths_raw)) { - $paths = $paths_raw; - } - elseif (is_string($paths_raw)) { - $paths[] = $paths_raw; + foreach ($config['require'] as $package_name => $package_data) { + $package_path = $extension_path . '/lib/' . str_replace('/', '-', $package_name) . '/' . $package_data['version']; + $disable_warnings = isset($package_data['disable_warnings']) ? $package_data['disable_warnings'] : FALSE; + // Disable the 'classmap' or 'files' warning if this + // module's .module file is calling ludwig.require_once + // service with this package name as an argument. + if (!empty($has_ludwig_service) && !empty($module_file) && ((strpos($module_file, "requireOnce('".$package_name) !== FALSE) || (strpos($module_file, "requireOnce( '".$package_name) !== FALSE) || (strpos($module_file, 'requireOnce("'.$package_name) !== FALSE) || (strpos($module_file, 'requireOnce( "'.$package_name) !== FALSE))) { + $disable_warnings = TRUE; + } + $package = $this->jsonRead($this->root . '/' . $package_path . '/composer.json'); + $description = !empty($package['description']) ? $package['description'] : ''; + $homepage = !empty($package['homepage']) ? $package['homepage'] : ''; + // Create the base package data array. + $package_base = [ + 'name' => $package_name, + 'version' => $package_data['version'], + 'description' => $description, + 'homepage' => $homepage, + 'provider' => $extension_name, + 'provider_path' => $extension_path, + 'download_url' => $package_data['url'], + 'disable_warnings' => $disable_warnings, + 'path' => $package_path, + ]; + if (empty($package)) { + // Add new package. This one needs a download. + $package_append = [ + 'namespace' => '', + 'paths' => [], + 'installed' => FALSE, + 'resource' => '', + ]; + $packages[$package_name] = array_merge($package_base, $package_append); + continue; + } + if (!empty($package['autoload'])) { + $resources = array_keys($package['autoload']); + // Iterate through all autoload types. + foreach ($resources as $resource) { + if (!empty($package['autoload'][$resource])) { + if ($resource == 'files' || $resource == 'classmap' || $resource == 'exclude-from-classmap' || $resource == 'target-dir') { + $autoload = $package['autoload']; + $package_namespaces = [$resource]; } - // Autoloading fails if the namespace ends with a backslash. - $namespace = trim($namespace, '\\'); - // Iterate through all the paths inside this resource. - foreach ($paths as $key => $value) { - $paths[$key] = rtrim($paths[$key], './'); - // Core only assumes that LudwigServiceProvider is adding - // PSR-4 paths, each PSR-0 path needs to be converted - // in order to work. - if ($resource == 'psr-0' && !empty($namespace)) { - if (!empty($paths[$key])) { - $paths[$key] .= '/'; - } - $paths[$key] .= str_replace('\\', '/', $namespace); - } + elseif ($resource == 'psr-4' || $resource == 'psr-0') { + $autoload = $package['autoload'][$resource]; + $package_namespaces = array_keys($autoload); } - // Combine $package_name an $paths into uniuqe $name_path value. - $name_path = $package_name . '_' . implode('-', $paths); - // Two versions of the same package are not possible. - // If multiple providers require the same package - // we keep the highest required version only, since it has - // the best probability to work for all providers, and - // it is the most secure. - if (!isset($packages[$name_path]) || $packages[$name_path]['version'] < $package_data['version']) { - // If the current item is going to be replaced with the new - // one, unset the current item first to keep all packages - // nicely sorted by provider name inside the 'Packages' table. - if (isset($packages[$name_path])) { - unset($packages[$name_path]); - } - // Add new package. + else { + // The unknown library type. $package_append = [ - 'namespace' => $namespace, - 'paths' => $paths, + 'namespace' => '', + 'paths' => [], 'installed' => TRUE, - 'resource' => $resource, + 'resource' => 'unknown', ]; - $packages[$name_path] = array_merge($package_base, $package_append); + $packages[$package_name] = array_merge($package_base, $package_append); + continue; + } + // Iterate through all the resources inside single autoload type. + foreach ($package_namespaces as $namespace) { + $paths_raw = $autoload[$namespace]; + // Support for both single path (string) and multiple + // paths (array) inside one resource. + $paths = []; + if (is_array($paths_raw)) { + $paths = $paths_raw; + } + elseif (is_string($paths_raw)) { + $paths[] = $paths_raw; + } + // Autoloading fails if the namespace ends with a backslash. + $namespace = trim($namespace, '\\'); + // Iterate through all the paths inside this resource. + foreach ($paths as $key => $value) { + $paths[$key] = rtrim($paths[$key], './'); + // Core only assumes that LudwigServiceProvider is adding + // PSR-4 paths, each PSR-0 path needs to be converted + // in order to work. + if ($resource == 'psr-0' && !empty($namespace)) { + if (!empty($paths[$key])) { + $paths[$key] .= '/'; + } + $paths[$key] .= str_replace('\\', '/', $namespace); + } + } + // Combine $package_name an $paths into uniuqe $name_path value. + $name_path = $package_name . '_' . implode('-', $paths); + // Two versions of the same package are not possible. + // If multiple providers require the same package + // we keep the highest required version only, since it has + // the best probability to work for all providers, and + // it is the most secure. + if (!isset($packages[$name_path]) || $packages[$name_path]['version'] < $package_data['version']) { + // If the current item is going to be replaced with the new + // one, unset the current item first to keep all packages + // nicely sorted by provider name inside the 'Packages' table. + if (isset($packages[$name_path])) { + unset($packages[$name_path]); + } + // Add new package. + $package_append = [ + 'namespace' => $namespace, + 'paths' => $paths, + 'installed' => TRUE, + 'resource' => $resource, + ]; + $packages[$name_path] = array_merge($package_base, $package_append); + } } } } } - } - elseif (!empty($package['include-path'])) { - // This is the Legacy library (depricated type). - // They do not have autoload composer.json section - // but "include-path" section instead. - $package_append = [ - 'namespace' => '', - 'paths' => [], - 'installed' => TRUE, - 'resource' => 'legacy', - ]; - $packages[$package_name] = array_merge($package_base, $package_append); - } - else { - // The unknown library type. - $package_append = [ - 'namespace' => '', - 'paths' => [], - 'installed' => TRUE, - 'resource' => 'unknown', - ]; - $packages[$package_name] = array_merge($package_base, $package_append); + elseif (!empty($package['include-path'])) { + // This is the Legacy library (depricated type). + // They do not have autoload composer.json section + // but "include-path" section instead. + $package_append = [ + 'namespace' => '', + 'paths' => [], + 'installed' => TRUE, + 'resource' => 'legacy', + ]; + $packages[$package_name] = array_merge($package_base, $package_append); + } + else { + // The unknown library type. + $package_append = [ + 'namespace' => '', + 'paths' => [], + 'installed' => TRUE, + 'resource' => 'unknown', + ]; + $packages[$package_name] = array_merge($package_base, $package_append); + } } } } diff --git a/web/modules/contrib/ludwig/src/RequireOnce.php b/web/modules/contrib/ludwig/src/RequireOnce.php index 9d8d5bab9..432539f93 100644 --- a/web/modules/contrib/ludwig/src/RequireOnce.php +++ b/web/modules/contrib/ludwig/src/RequireOnce.php @@ -3,6 +3,7 @@ namespace Drupal\ludwig; use GuzzleHttp\Exception\RequestException; +use Drupal\Core\StringTranslation\StringTranslationTrait; /** * Provides service for ludwig require_once calls. @@ -14,6 +15,8 @@ */ class RequireOnce { + use StringTranslationTrait; + /** * The helper function for Ludwig integration. * @@ -44,7 +47,9 @@ public function requireOnce($package_name, $file_to_require, $dir_name) { require_once $require; } else { - throw new \Exception(sprintf('File not found: %s.', $require)); + \Drupal::logger('ludwig')->error($this->t('File not found: @require.', [ + '@require' => $require, + ])); } } diff --git a/web/modules/contrib/ludwig/tests/modules/ludwig_test/ludwig_test.info.yml b/web/modules/contrib/ludwig/tests/modules/ludwig_test/ludwig_test.info.yml index cfdf533f3..95b7ba22d 100644 --- a/web/modules/contrib/ludwig/tests/modules/ludwig_test/ludwig_test.info.yml +++ b/web/modules/contrib/ludwig/tests/modules/ludwig_test/ludwig_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8 || ^9 dependencies: - ludwig -# Information added by Drupal.org packaging script on 2021-01-29 -version: '8.x-1.6' +# Information added by Drupal.org packaging script on 2021-02-15 +version: '8.x-1.7' project: 'ludwig' -datestamp: 1611958527 +datestamp: 1613389170 diff --git a/web/modules/contrib/memcache/composer.json b/web/modules/contrib/memcache/composer.json index 02d744c55..8b46e877b 100644 --- a/web/modules/contrib/memcache/composer.json +++ b/web/modules/contrib/memcache/composer.json @@ -7,9 +7,6 @@ "issues": "https://www.drupal.org/project/issues/memcache" }, "license": "GPL-2.0-or-later", - "require": { - "drupal/core": "^8.8 || ^9" - }, "extra": { "branch-alias": { "dev-8.x-2.x": "2.x-dev" diff --git a/web/modules/contrib/memcache/memcache.info.yml b/web/modules/contrib/memcache/memcache.info.yml index eba9a3a07..d7ece05f0 100644 --- a/web/modules/contrib/memcache/memcache.info.yml +++ b/web/modules/contrib/memcache/memcache.info.yml @@ -2,9 +2,9 @@ name: Memcache description: 'High performance integration with memcache.' type: module package: 'Performance and scalability' -core_version_requirement: ^8.8 || ^9 +core_version_requirement: ^8.9 || ^9 -# Information added by Drupal.org packaging script on 2020-09-25 -version: '8.x-2.2' +# Information added by Drupal.org packaging script on 2021-03-03 +version: '8.x-2.3' project: 'memcache' -datestamp: 1601053268 +datestamp: 1614802367 diff --git a/web/modules/contrib/memcache/memcache_admin/memcache_admin.info.yml b/web/modules/contrib/memcache/memcache_admin/memcache_admin.info.yml index 83f84c277..a842173dc 100644 --- a/web/modules/contrib/memcache/memcache_admin/memcache_admin.info.yml +++ b/web/modules/contrib/memcache/memcache_admin/memcache_admin.info.yml @@ -2,14 +2,14 @@ name: Memcache Admin description: Adds a User Interface to monitor the Memcache for this site. package: Performance and scalability type: module -core_version_requirement: ^8.8 || ^9 +core_version_requirement: ^8.9 || ^9 configure: memcache_admin.settings dependencies: - memcache:memcache -# Information added by Drupal.org packaging script on 2020-09-25 -version: '8.x-2.2' +# Information added by Drupal.org packaging script on 2021-03-03 +version: '8.x-2.3' project: 'memcache' -datestamp: 1601053268 +datestamp: 1614802367 diff --git a/web/modules/contrib/memcache/memcache_admin/memcache_admin.services.yml b/web/modules/contrib/memcache/memcache_admin/memcache_admin.services.yml index 41de36ccf..c41f4d3dd 100644 --- a/web/modules/contrib/memcache/memcache_admin/memcache_admin.services.yml +++ b/web/modules/contrib/memcache/memcache_admin/memcache_admin.services.yml @@ -3,3 +3,11 @@ services: class: Drupal\memcache_admin\EventSubscriber\MemcacheAdminSubscriber tags: - { name: event_subscriber } + memcache_stats.memcached: + class: Drupal\memcache_admin\EventSubscriber\MemcacheServerStatsSubscriber + tags: + - { name: event_subscriber } + memcache_stats.mcrouter: + class: Drupal\memcache_admin\EventSubscriber\McrouterStatsSubscriber + tags: + - { name: event_subscriber } \ No newline at end of file diff --git a/web/modules/contrib/memcache/memcache_admin/src/Controller/MemcacheStatisticsController.php b/web/modules/contrib/memcache/memcache_admin/src/Controller/MemcacheStatisticsController.php index 7e119da5f..2be90ba87 100644 --- a/web/modules/contrib/memcache/memcache_admin/src/Controller/MemcacheStatisticsController.php +++ b/web/modules/contrib/memcache/memcache_admin/src/Controller/MemcacheStatisticsController.php @@ -3,12 +3,11 @@ namespace Drupal\memcache_admin\Controller; use Drupal\Core\Controller\ControllerBase; -use Drupal\Core\Datetime\DateFormatter; use Drupal\Core\Link; use Drupal\Core\Messenger\MessengerTrait; use Drupal\Core\StringTranslation\StringTranslationTrait; use Drupal\Core\Url; -use Drupal\Component\Render\HtmlEscapedText; +use Drupal\memcache_admin\Event\MemcacheStatsEvent; /** * Memcache Statistics. @@ -24,136 +23,35 @@ class MemcacheStatisticsController extends ControllerBase { * @param string $bin * The bin name. * - * @return string + * @return array * The page output. */ public function statsTable($bin = 'default') { - $output = []; - $servers = []; - - // Get the statistics. - $bin = $this->binMapping($bin); + $bin = $this->getBinMapping($bin); /** @var $memcache \Drupal\memcache\DrupalMemcacheInterface */ $memcache = \Drupal::service('memcache.factory')->get($bin, TRUE); - $stats = $memcache->stats($bin, 'default', TRUE); - - if (empty($stats[$bin])) { - // Failed to load statistics. Provide a useful error about where to get - // more information and help. - $this->messenger()->addError( - $this->t( - 'There may be a problem with your Memcache configuration. Please review @readme for more information.', - [ - '@readme' => 'README.txt', - ] - ) - ); - } - else { - if (count($stats[$bin])) { - $stats = $stats[$bin]; - $aggregate = array_pop($stats); - - if ($memcache->getMemcache() instanceof \Memcached) { - $version = $this->t('Memcached v@version', ['@version' => phpversion('Memcached')]); - } - elseif ($memcache->getMemcache() instanceof \Memcache) { - $version = $this->t('Memcache v@version', ['@version' => phpversion('Memcache')]); - } - else { - $version = $this->t('Unknown'); - $this->messenger()->addError($this->t('Failed to detect the memcache PECL extension.')); - } - foreach ($stats as $server => $statistics) { - if (empty($statistics['uptime'])) { - $this->messenger()->addError($this->t('Failed to connect to server at :address.', [':address' => $server])); - } - else { - $servers[] = $server; - - $data['server_overview'][$server] = $this->t('v@version running @uptime', ['@version' => $statistics['version'], '@uptime' => \Drupal::service('date.formatter')->formatInterval($statistics['uptime'])]); - $data['server_pecl'][$server] = $this->t('n/a'); - $data['server_time'][$server] = \Drupal::service('date.formatter')->format($statistics['time']); - $data['server_connections'][$server] = $this->statsConnections($statistics); - $data['cache_sets'][$server] = $this->statsSets($statistics); - $data['cache_gets'][$server] = $this->statsGets($statistics); - $data['cache_counters'][$server] = $this->statsCounters($statistics); - $data['cache_transfer'][$server] = $this->statsTransfer($statistics); - $data['cache_average'][$server] = $this->statsAverage($statistics); - $data['memory_available'][$server] = $this->statsMemory($statistics); - $data['memory_evictions'][$server] = number_format($statistics['evictions']); - } - } - } + // Instantiate our event. + $event = new MemcacheStatsEvent($memcache, $bin); - // Build a custom report array. - $report = [ - 'uptime' => [ - 'uptime' => [ - 'label' => $this->t('Uptime'), - 'servers' => $data['server_overview'], - ], - 'extension' => [ - 'label' => $this->t('PECL extension'), - 'servers' => [$servers[0] => $version], - ], - 'time' => [ - 'label' => $this->t('Time'), - 'servers' => $data['server_time'], - ], - 'connections' => [ - 'label' => $this->t('Connections'), - 'servers' => $data['server_connections'], - ], - ], - 'stats' => [], - 'memory' => [ - 'memory' => [ - 'label' => $this->t('Available memory'), - 'servers' => $data['memory_available'], - ], - 'evictions' => [ - 'label' => $this->t('Evictions'), - 'servers' => $data['memory_evictions'], - ], - ], - ]; + // Get the event_dispatcher service and dispatch the event. + $event_dispatcher = \Drupal::service('event_dispatcher'); + $event_dispatcher->dispatch(MemcacheStatsEvent::BUILD_MEMCACHE_STATS, $event); - // Don't display aggregate totals if there's only one server. - if (count($servers) > 1) { - $report['uptime']['uptime']['total'] = $this->t('n/a'); - $report['uptime']['extension']['servers'] = $data['server_pecl']; - $report['uptime']['extension']['total'] = $version; - $report['uptime']['time']['total'] = $this->t('n/a'); - $report['uptime']['connections']['total'] = $this->statsConnections($aggregate); - $report['memory']['memory']['total'] = $this->statsMemory($aggregate); - $report['memory']['evictions']['total'] = number_format($aggregate['evictions']); - } - - // Report on stats. - $stats = [ - 'sets' => $this->t('Sets'), - 'gets' => $this->t('Gets'), - 'counters' => $this->t('Counters'), - 'transfer' => $this->t('Transferred'), - 'average' => $this->t('Per-connection average'), - ]; + // Report the PHP Memcache(d) driver version. + if ($memcache->getMemcache() instanceof \Memcached) { + $raw_stats['driver_version'] = $this->t('PECL Driver in Use: Memcached v@version', ['@version' => phpversion('Memcached')]); + } + elseif ($memcache->getMemcache() instanceof \Memcache) { + $raw_stats['driver_version'] = $this->t('PECL Driver in Use: Memcache v@version', ['@version' => phpversion('Memcache')]); + } - foreach ($stats as $type => $label) { - $report['stats'][$type] = [ - 'label' => $label, - 'servers' => $data["cache_{$type}"], - ]; + // Get the event_dispatcher service and dispatch the event. + $event_dispatcher = \Drupal::service('event_dispatcher'); + $event_dispatcher->dispatch(MemcacheStatsEvent::REPORT_MEMCACHE_STATS, $event); - if (count($servers) > 1) { - $func = 'stats' . ucfirst($type); - $report['stats'][$type]['total'] = $this->{$func}($aggregate); - } - } - - $output = $this->statsTablesOutput($bin, $servers, $report); - } + $output = ['#markup' => '<p>' . $raw_stats['driver_version']]; + $output[] = $this->statsTablesOutput($bin, $event->getServers(), $event->getReport()); return $output; } @@ -229,17 +127,6 @@ private function binMapping($bin = 'cache') { } } - /** - * Helper function. Returns the bin name. - */ - private function defaultBin($bin) { - if ($bin == 'default') { - return 'cache'; - } - - return $bin; - } - /** * Statistics report: format total and open connections. */ @@ -253,63 +140,6 @@ private function statsConnections($stats) { ); } - /** - * Statistics report: calculate # of set cmds and total cmds. - */ - private function statsSets($stats) { - if (($stats['cmd_set'] + $stats['cmd_get']) == 0) { - $sets = 0; - } - else { - $sets = $stats['cmd_set'] / ($stats['cmd_set'] + $stats['cmd_get']) * 100; - } - if (empty($stats['uptime'])) { - $average = 0; - } - else { - $average = $sets / $stats['uptime']; - } - return $this->t( - '@average/s; @set sets (@sets%) of @total commands', - [ - '@average' => number_format($average, 2), - '@sets' => number_format($sets, 2), - '@set' => number_format($stats['cmd_set']), - '@total' => number_format($stats['cmd_set'] + $stats['cmd_get']), - ] - ); - } - - /** - * Statistics report: calculate # of get cmds, broken down by hits and misses. - */ - private function statsGets($stats) { - if (($stats['cmd_set'] + $stats['cmd_get']) == 0) { - $gets = 0; - } - else { - $gets = $stats['cmd_get'] / ($stats['cmd_set'] + $stats['cmd_get']) * 100; - } - if (empty($stats['uptime'])) { - $average = 0; - } - else { - $average = $stats['cmd_get'] / $stats['uptime']; - } - return $this->t( - '@average/s; @total gets (@gets%); @hit hits (@percent_hit%) @miss misses (@percent_miss%)', - [ - '@average' => number_format($average, 2), - '@gets' => number_format($gets, 2), - '@hit' => number_format($stats['get_hits']), - '@percent_hit' => ($stats['cmd_get'] > 0 ? number_format($stats['get_hits'] / $stats['cmd_get'] * 100, 2) : '0.00'), - '@miss' => number_format($stats['get_misses']), - '@percent_miss' => ($stats['cmd_get'] > 0 ? number_format($stats['get_misses'] / $stats['cmd_get'] * 100, 2) : '0.00'), - '@total' => number_format($stats['cmd_get']), - ] - ); - } - /** * Statistics report: calculate # of increments and decrements. */ @@ -334,73 +164,6 @@ private function statsCounters($stats) { ); } - /** - * Statistics report: calculate bytes transferred. - */ - private function statsTransfer($stats) { - if ($stats['bytes_written'] == 0) { - $written = 0; - } - else { - $written = $stats['bytes_read'] / $stats['bytes_written'] * 100; - } - return $this->t( - '@to:@from (@written% to cache)', - [ - '@to' => format_size((int) $stats['bytes_read']), - '@from' => format_size((int) $stats['bytes_written']), - '@written' => number_format($written, 2), - ] - ); - } - - /** - * Statistics report: calculate per-connection averages. - */ - private function statsAverage($stats) { - if ($stats['total_connections'] == 0) { - $get = 0; - $set = 0; - $read = 0; - $write = 0; - } - else { - $get = $stats['cmd_get'] / $stats['total_connections']; - $set = $stats['cmd_set'] / $stats['total_connections']; - $read = $stats['bytes_written'] / $stats['total_connections']; - $write = $stats['bytes_read'] / $stats['total_connections']; - } - return $this->t( - '@read in @get gets; @write in @set sets', - [ - '@get' => number_format($get, 2), - '@set' => number_format($set, 2), - '@read' => format_size(number_format($read, 2)), - '@write' => format_size(number_format($write, 2)), - ] - ); - } - - /** - * Statistics report: calculate available memory. - */ - private function statsMemory($stats) { - if ($stats['limit_maxbytes'] == 0) { - $percent = 0; - } - else { - $percent = 100 - $stats['bytes'] / $stats['limit_maxbytes'] * 100; - } - return $this->t( - '@available (@percent%) of @total', - [ - '@available' => format_size($stats['limit_maxbytes'] - $stats['bytes']), - '@percent' => number_format($percent, 2), - '@total' => format_size($stats['limit_maxbytes']), - ] - ); - } - /** * Generates render array for output. */ @@ -409,6 +172,9 @@ private function statsTablesOutput($bin, $servers, $stats) { $memcache_bins = $memcache->getBins(); $links = []; + if (!is_array($servers)) { + return; + } foreach ($servers as $server) { // Convert socket file path so it works with an argument, this should @@ -546,4 +312,31 @@ private function statsTablesRawOutput($cluster, $server, $stats, $type) { return $build; } + /** + * Helper function, reverse map the memcache_bins variable. + */ + protected function getBinMapping($bin = 'cache') { + $memcache = \Drupal::service('memcache.factory')->get(NULL, TRUE); + $memcache_bins = $memcache->getBins(); + + $bins = array_flip($memcache_bins); + if (isset($bins[$bin])) { + return $bins[$bin]; + } + else { + return $this->defaultBin($bin); + } + } + + /** + * Helper function. Returns the bin name. + */ + protected function defaultBin($bin) { + if ($bin == 'default') { + return 'cache'; + } + + return $bin; + } + } diff --git a/web/modules/contrib/memcache/memcache_admin/src/Event/MemcacheStatsEvent.php b/web/modules/contrib/memcache/memcache_admin/src/Event/MemcacheStatsEvent.php new file mode 100644 index 000000000..4b8fc07c5 --- /dev/null +++ b/web/modules/contrib/memcache/memcache_admin/src/Event/MemcacheStatsEvent.php @@ -0,0 +1,190 @@ +<?php + +namespace Drupal\memcache_admin\Event; + +use Drupal\memcache\DrupalMemcacheInterface; +use Symfony\Component\EventDispatcher\Event; + +/** + * Memcache Stats Event + * + * The memcache stats event stores all the attributes generated by the different + * types of memcache servers. Currently memcache_admin supports memcache and + * mcrouter. + */ +class MemcacheStatsEvent extends Event { + + /** + * Event used to build the memcache stats array. + * + * When the stats array is created, this event allows modules to inject extra + * data to be contained within the array. + */ + const BUILD_MEMCACHE_STATS = 'memcache_build_memcache_stats'; + + /** + * Event used to report out the memcache stats array. + * + * When the stats array is created, this event allows modules to inject extra + * data to be contained within the array. + */ + const REPORT_MEMCACHE_STATS = 'memcache_report_memcache_stats'; + + /** + * The Stats Array for which to create attributes. + * + * @var array + */ + protected $rawStats; + + /** + * The Stats Array for which to create attributes. + * + * @var array + */ + protected $formattedStats = []; + + /** + * The Stats Array for which to create attributes. + * + * @var array + */ + protected $totals; + + /** + * The Stats Array for which to create attributes. + * + * @var array + */ + protected $report; + + /** + * The Stats Array for which to create attributes. + * + * @var array + */ + protected $servers; + + /** + * Cache Bin To Retrieve + * @var string $bin + */ + protected $bin; + + protected $memcache; + + /** + * MemcacheStatsEvent constructor. + * + * @param array $raw_stats + * The Stats Data. + * @param string $bin + * The cache bin. + * + */ + public function __construct(DrupalMemcacheInterface $memcache, string $bin = 'default') { + $this->memcache = $memcache; + $this->rawStats = $memcache->stats($bin, 'default', TRUE); + $this->formattedStats = []; + $this->bin = $bin; + } + + /** + * Get the Stats Array being created. + * + * @return array + * The Stats Object. + */ + public function getRawStats() { + return $this->rawStats; + } + + /** + * Gets the stats formatted from a MemcacheStatsInterface. + * @param $server_type + * + * @return array|mixed + */ + public function getFormattedStats($server_type) { + if (isset($this->formattedStats[$server_type])) { + return $this->formattedStats[$server_type]; + } + return []; + } + + /** + * Returns the memcache connection. + */ + public function getMemcache() { + return $this->memcache; + } + + /** + * Returns the cache bin from this event. + */ + public function getCacheBin() { + return $this->bin; + } + + /** + * Sets the formatted stats array with relevant data. + * + * @param string $format + * @param string $bin + * @param string $server + * @param \Drupal\memcache_admin\Stats\MemcacheStatsInterface $data + */ + public function updateFormattedStats($format, $bin, $server, $data) { + $this->formattedStats[$format][$bin][$server] = $data; + } + + /** + * Update the total column when multiple memcache servers exist. + * @param $total + */ + public function updateTotals($total) { + $this->totals = $total; + } + + /** + * Return the total values from all memcache servers. + * @return array + */ + public function getTotals() { + return $this->totals; + } + + /** + * Add a new server to the servers array. + * @param string $server + */ + public function updateServers($server) { + $this->servers[] = $server; + } + + /** + * Retrieve all servers from the servers array. + * + * @return array + */ + public function getServers() { + return $this->servers; + } + + /** + * Update the full report from the event. + * @param $report + */ + public function updateReport($report) { + $this->report = $report; + } + + /** + * Returns the stats report. + * @return array + */ + public function getReport() { + return $this->report; + } + +} diff --git a/web/modules/contrib/memcache/memcache_admin/src/EventSubscriber/McrouterStatsSubscriber.php b/web/modules/contrib/memcache/memcache_admin/src/EventSubscriber/McrouterStatsSubscriber.php new file mode 100644 index 000000000..6432ba94b --- /dev/null +++ b/web/modules/contrib/memcache/memcache_admin/src/EventSubscriber/McrouterStatsSubscriber.php @@ -0,0 +1,68 @@ +<?php + +namespace Drupal\memcache_admin\EventSubscriber; + +use Drupal\Core\Messenger\MessengerTrait; +use Drupal\Core\StringTranslation\StringTranslationTrait; +use Drupal\memcache_admin\Event\MemcacheStatsEvent; +use Drupal\memcache_admin\Stats\McrouterStatsObject; +use Drupal\memcache_admin\Stats\MemcacheStatsObject; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; + +/** + * Adds memcache server specific details to the stats array. + */ +class McrouterStatsSubscriber implements EventSubscriberInterface { + + use StringTranslationTrait; + use MessengerTrait; + + /** + * {@inheritdoc} + */ + public static function getSubscribedEvents() { + $events[MemcacheStatsEvent::BUILD_MEMCACHE_STATS][] = [ + 'onPopulateStats', + 100 + ]; + return $events; + } + + /** + * Adds stats to the memcache event. + * + * @param \Drupal\memcache_admin\Event\MemcacheStatsEvent $event + * The event being dispatched. + * + * @throws \Exception + */ + public function onPopulateStats(MemcacheStatsEvent $event) { + $memcache = $event->getMemcache(); + if (!$memcache->getMemcache()->get('__mcrouter__.version')) { + return; + } + + $raw_stats = $event->getRawStats(); + $bin = $event->getCacheBin(); + + // No cache bin data, return. + if (!isset($raw_stats[$bin])) { + return; + } + // No servers found, return. + if (!is_array($raw_stats[$bin])) { + return; + } + $servers = array_keys($raw_stats[$bin]); + foreach ($servers as $server) { + if ($server =='total') { + continue; + } + // McRouter reports num_servers use that for detecting stats. + if (isset($raw_stats[$bin][$server]['num_servers'])) { + $event->updateFormattedStats('memcache', $bin, $server, new McrouterStatsObject($raw_stats[$bin][$server])); + $event->updateServers($server); + } + } + } +} diff --git a/web/modules/contrib/memcache/memcache_admin/src/EventSubscriber/MemcacheAdminSubscriber.php b/web/modules/contrib/memcache/memcache_admin/src/EventSubscriber/MemcacheAdminSubscriber.php index e0a967627..03ae73981 100644 --- a/web/modules/contrib/memcache/memcache_admin/src/EventSubscriber/MemcacheAdminSubscriber.php +++ b/web/modules/contrib/memcache/memcache_admin/src/EventSubscriber/MemcacheAdminSubscriber.php @@ -32,16 +32,6 @@ public static function getSubscribedEvents() { public function displayStatistics(FilterResponseEvent $event) { $user = \Drupal::currentUser(); - // Removed exclusion criteria, untested. Will likely need to add some of - // these back in. - // @codingStandardsIgnoreStart - // strstr($_SERVER['PHP_SELF'], '/update.php') - // substr($_GET['q'], 0, strlen('batch')) == 'batch' - // strstr($_GET['q'], 'autocomplete') - // substr($_GET['q'], 0, strlen('system/files')) == 'system/files' - // in_array($_GET['q'], ['upload/js', 'admin/content/node-settings/rebuild']) - // @codingStandardsIgnoreEnd - // @todo validate these checks if ($user->id() == 0) { // Suppress for the above criteria. } diff --git a/web/modules/contrib/memcache/memcache_admin/src/EventSubscriber/MemcacheServerStatsSubscriber.php b/web/modules/contrib/memcache/memcache_admin/src/EventSubscriber/MemcacheServerStatsSubscriber.php new file mode 100644 index 000000000..758221bd4 --- /dev/null +++ b/web/modules/contrib/memcache/memcache_admin/src/EventSubscriber/MemcacheServerStatsSubscriber.php @@ -0,0 +1,190 @@ +<?php + +namespace Drupal\memcache_admin\EventSubscriber; + +use Drupal\Core\Messenger\MessengerTrait; +use Drupal\Core\StringTranslation\StringTranslationTrait; +use Drupal\memcache_admin\Event\MemcacheStatsEvent; +use Drupal\memcache_admin\Stats\MemcacheStatsObject; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; + +/** + * Adds memcache server specific details to the stats array. + */ +class MemcacheServerStatsSubscriber implements EventSubscriberInterface { + + use StringTranslationTrait; + use MessengerTrait; + + /** + * {@inheritdoc} + */ + public static function getSubscribedEvents() { + $events[MemcacheStatsEvent::BUILD_MEMCACHE_STATS][] = [ + 'onPopulateStats', + 100 + ]; + $events[MemcacheStatsEvent::REPORT_MEMCACHE_STATS][] = [ + 'onReportStats', + 100 + ]; + return $events; + } + + /** + * Populates the Memcache Server Stats + * + * @param \Drupal\memcache_admin\Event\MemcacheStatsEvent $event + * The event being dispatched. + * + * @throws \Exception + */ + public function onPopulateStats(MemcacheStatsEvent $event) { + $raw_stats = $event->getRawStats(); + $bin = $event->getCacheBin(); + + // No cache bin data, return. + if (!isset($raw_stats[$bin])) { + return; + } + // No servers found, return. + if (!is_array($raw_stats[$bin])) { + return; + } + $servers = array_keys($raw_stats[$bin]); + $memcache_servers = []; + foreach ($servers as $server) { + // Memcache servers report libevent version, use that for detecting stats. + if (isset($raw_stats[$bin][$server]['libevent'])) { + $event->updateFormattedStats('memcache', $bin, $server, new MemcacheStatsObject($raw_stats[$bin][$server])); + $event->updateServers($server); + } + } + if (isset($raw_stats[$bin]['total'])) { + $event->updateTotals([$bin => new MemcacheStatsObject($raw_stats[$bin]['total'])]); + } + } + + /** + * Populates the reporting of a stored set of stats. + * + * @param \Drupal\memcache_admin\Event\MemcacheStatsEvent $event + */ + public function onReportStats(MemcacheStatsEvent $event) { + $stats = $event->getFormattedStats('memcache'); + $bin = $event->getCacheBin(); + + // No cache bin data, return. + if (empty($stats[$bin])) { + // Failed to load statistics. Provide a useful error about where to get + // more information and help. + $this->messenger()->addError( + $this->t( + 'There may be a problem with your Memcache configuration. Please review @readme for more information.', + [ + '@readme' => 'README.txt', + ] + ) + ); + return; + } + // No servers found, return. + if (!is_array($stats[$bin])) { + return; + } + + /** + * @var string $server + * @var MemcacheStatsObject $statistics + */ + foreach ($stats[$bin] as $server => $statistics) { + if (empty($statistics->getUptime())) { + $this->messenger() + ->addError($this->t('Failed to connect to server at :address.', [':address' => $server])); + } + else { + $data['server_overview'][$server] = $this->t('v@version running @uptime', [ + '@version' => $statistics->getVersion(), + '@uptime' => $statistics->getUptime() + ]); + $data['server_time'][$server] = $statistics->getServerTime(); + $data['server_connections'][$server] = $statistics->getConnections(); + $data['cache_sets'][$server] = $statistics->getSets(); + $data['cache_gets'][$server] = $statistics->getGets(); + $data['cache_counters'][$server] = $statistics->getCounters(); + $data['cache_transfer'][$server] = $statistics->getTransferred(); + $data['cache_average'][$server] = $statistics->getConnectionAvg(); + $data['memory_available'][$server] = $statistics->getMemory(); + $data['memory_evictions'][$server] = $statistics->getEvictions(); + } + } + + // Build a custom report array. + $report = [ + 'uptime' => [ + 'uptime' => [ + 'label' => $this->t('Uptime'), + 'servers' => $data['server_overview'], + ], + 'time' => [ + 'label' => $this->t('Time'), + 'servers' => $data['server_time'], + ], + 'connections' => [ + 'label' => $this->t('Connections'), + 'servers' => $data['server_connections'], + ], + ], + 'stats' => [ + 'sets' => [ + 'label' => $this->t('Sets'), + 'servers' => $data["cache_sets"], + ], + 'gets' => [ + 'label' => $this->t('Gets'), + 'servers' => $data["cache_gets"], + ], + 'counters' => [ + 'label' => $this->t('Counters'), + 'servers' => $data["cache_counters"], + ], + 'transfer' => [ + 'label' => $this->t('Transferred'), + 'servers' => $data["cache_transfer"], + ], + 'average' => [ + 'label' => $this->t('Per-connection average'), + 'servers' => $data["cache_average"], + ], + ], + 'memory' => [ + 'memory' => [ + 'label' => $this->t('Available memory'), + 'servers' => $data['memory_available'], + ], + 'evictions' => [ + 'label' => $this->t('Evictions'), + 'servers' => $data['memory_evictions'], + ], + ], + ]; + + // Don't display aggregate totals if there's only one server. + if (count($stats[$bin]) > 1) { + /** @var MemcacheStatsObject $totals */ + $totals = $event->getTotals(); + $report['uptime']['uptime']['total'] = $this->t('n/a'); + $report['uptime']['time']['total'] = $this->t('n/a'); + $report['uptime']['connections']['total'] = $totals[$bin]->getConnections(); + $report['stats']['sets']['total'] = $totals[$bin]->getSets(); + $report['stats']['gets']['total'] = $totals[$bin]->getGets(); + $report['stats']['counters']['total'] = $totals[$bin]->getCounters(); + $report['stats']['transfer']['total'] = $totals[$bin]->getTransferred(); + $report['stats']['average']['total'] = $totals[$bin]->getConnectionAvg(); + $report['memory']['memory']['total'] = $totals[$bin]->getMemory(); + $report['memory']['evictions']['total'] = $totals[$bin]->getEvictions(); + } + + $event->updateReport($report); + } +} diff --git a/web/modules/contrib/memcache/memcache_admin/src/Stats/McrouterStatsObject.php b/web/modules/contrib/memcache/memcache_admin/src/Stats/McrouterStatsObject.php new file mode 100644 index 000000000..4651bdf23 --- /dev/null +++ b/web/modules/contrib/memcache/memcache_admin/src/Stats/McrouterStatsObject.php @@ -0,0 +1,123 @@ +<?php + +namespace Drupal\memcache_admin\Stats; + +use Drupal\Core\StringTranslation\StringTranslationTrait; + +/** + * Class MemcacheStats. + * + * @package Drupal\memcache_admin\Stats + */ +class McrouterStatsObject extends MemcacheStatsObject implements MemcacheStatsInterface { + + use StringTranslationTrait; + + /** + * @var array $stats + */ + protected $stats; + + public function __construct(array $raw_stats) { + $this->stats = $raw_stats; + } + + /** + * @inheritDoc + */ + public function getExtension(): string { + return isset($this->stats['version']) ?? self::NA; + } + + /** + * @inheritDoc + */ + public function getServerTime(): string { + return isset($this->stats['time']) ? \Drupal::service('date.formatter')->format($this->stats['time']) : self::NA; + } + + /** + * Statistics report: format total and open connections. + */ + public function getConnections() { + return self::NA; + } + + /** + * @inheritDoc + */ + public function getCurrentConnections(): string { + return self::NA; + } + + /** + * @inheritDoc + */ + public function getTotalConnections(): string { + return self::NA; + } + + /** + * Statistics report: calculate # of get cmds, broken down by hits and misses. + */ + public function getGets(): string { + return self::NA; + } + + /** + * @inheritDoc + */ + public function getCounters(): string { + return self::NA; + } + + /** + * @inheritDoc + */ + public function getTransferred(): string { + return self::NA; + } + + /** + * @inheritDoc + */ + public function getConnectionAvg(): string { + return self::NA; + } + + /** + * @inheritDoc + */ + public function getMemory(): string { + return self::NA; + } + + /** + * @inheritDoc + */ + public function getEvictions(): string { + return isset($this->stats['evictions']) ? number_format($this->stats['evictions']) : self::NA; + } + + /** + * @inheritDoc + */ + public function setRaw(array $raw_data) { + $this->stats = $raw_data; + } + + /** + * @inheritDoc + */ + public function getRaw(): array { + return $this->stats; + } + + /** + * @inheritDoc + */ + public function getVersion(): string { + return isset($this->stats['version']) ? (string)$this->stats['version'] : self::NA; + } + +} \ No newline at end of file diff --git a/web/modules/contrib/memcache/memcache_admin/src/Stats/MemcacheStatsInterface.php b/web/modules/contrib/memcache/memcache_admin/src/Stats/MemcacheStatsInterface.php new file mode 100644 index 000000000..765955897 --- /dev/null +++ b/web/modules/contrib/memcache/memcache_admin/src/Stats/MemcacheStatsInterface.php @@ -0,0 +1,103 @@ +<?php + +namespace Drupal\memcache_admin\Stats; + +/** + * Defines the Memcache connection interface. + */ +interface MemcacheStatsInterface { + + /** + * Sets an array of raw data for the memcache server. + * + * @param array $raw_data + * + * @return void + */ + public function setRaw(array $raw_data); + + /** + * Returns raw data from the memcache server. + * + * @return array + */ + public function getRaw(): array; + + /** + * Returns the memcache server version. + * + * @return string + */ + public function getVersion(): string; + + /** + * Returns the uptime for the memcache server. + * + * @return string + */ + public function getUptime(): string; + + /** + * Returns the PECL extension for the memcache server. + * + * @return string + */ + public function getExtension(): string; + + /** + * Returns the total connections for the memcache server. + * + * @return string + */ + public function getTotalConnections(): string; + + /** + * Returns the cache sets for the memcache server. + * + * @return string + */ + public function getSets(): string; + + /** + * Returns the cache gets for the memcache server. + * + * @return string + */ + public function getGets(): string; + + /** + * Returns the counters for the memcache server. + * + * @return string + */ + public function getCounters(): string; + + /** + * Returns the data transferred for the memcache server. + * + * @return string + */ + public function getTransferred(): string; + + /** + * Returns the connection averages for the memcache server. + * + * @return string + */ + public function getConnectionAvg(): string; + + /** + * Returns the memory available for the memcache server. + * + * @return string + */ + public function getMemory(): string; + + /** + * Returns the evictions for the memcache server. + * + * @return string + */ + public function getEvictions(): string; + +} \ No newline at end of file diff --git a/web/modules/contrib/memcache/memcache_admin/src/Stats/MemcacheStatsObject.php b/web/modules/contrib/memcache/memcache_admin/src/Stats/MemcacheStatsObject.php new file mode 100644 index 000000000..4a4d51677 --- /dev/null +++ b/web/modules/contrib/memcache/memcache_admin/src/Stats/MemcacheStatsObject.php @@ -0,0 +1,285 @@ +<?php + +namespace Drupal\memcache_admin\Stats; + +use Drupal\Core\StringTranslation\StringTranslationTrait; + +/** + * Class MemcacheStats. + * + * @package Drupal\memcache_admin\Stats + */ +class MemcacheStatsObject implements MemcacheStatsInterface { + + use StringTranslationTrait; + + /** + * Stat Not Available + */ + CONST NA = 'n/a'; + + /** + * @var array $stats + */ + protected $stats; + + public function __construct(array $raw_stats) { + $this->stats = $raw_stats; + } + + /** + * @inheritDoc + */ + public function getUptime(): string { + return isset($this->stats['uptime']) ? \Drupal::service('date.formatter')->formatInterval($this->stats['uptime']) : self::NA; + } + + /** + * @inheritDoc + */ + public function getExtension(): string { + return isset($this->stats['extension']) ?? self::NA; + } + + /** + * @inheritDoc + */ + public function getServerTime(): string { + return isset($this->stats['time']) ? \Drupal::service('date.formatter')->format($this->stats['time']) : self::NA; + } + + /** + * Statistics report: format total and open connections. + */ + public function getConnections() { + if (!isset($this->stats['curr_connections']) || + !isset($this->stats['total_connections']) + ) { + return self::NA; + } + + return $this->t( + '@current open of @total total', + [ + '@current' => number_format($this->stats['curr_connections']), + '@total' => number_format($this->stats['total_connections']), + ] + ); + } + + /** + * @inheritDoc + */ + public function getCurrentConnections(): string { + return isset($this->stats['curr_connections']) ?? '0'; + } + + /** + * @inheritDoc + */ + public function getTotalConnections(): string { + return isset($this->stats['total_connections']) ?? '0'; + } + + /** + * Statistics report: calculate # of set cmds and total cmds. + */ + public function getSets(): string { + if (!isset($this->stats['cmd_set'])) { + return self::NA; + } + + if (($this->stats['cmd_set'] + $this->stats['cmd_get']) == 0) { + $sets = 0; + } + else { + $sets = $this->stats['cmd_set'] / ($this->stats['cmd_set'] + $this->stats['cmd_get']) * 100; + } + if (!isset($this->stats['uptime'])) { + $average = 0; + } + else { + $average = $sets / $this->stats['uptime']; + } + return $this->t( + '@average/s; @set sets (@sets%) of @total commands', + [ + '@average' => number_format($average, 2), + '@sets' => number_format($sets, 2), + '@set' => number_format($this->stats['cmd_set']), + '@total' => number_format($this->stats['cmd_set'] + $this->stats['cmd_get']), + ] + ); + } + + /** + * Statistics report: calculate # of get cmds, broken down by hits and misses. + */ + public function getGets(): string { + if (!isset($this->stats['cmd_set']) || !isset($this->stats['cmd_get'])) { + return self::NA; + } + else { + $get = $this->stats['cmd_get']; + $set = $this->stats['cmd_set']; + $hits = isset($this->stats['get_hits']) ?? 0; + $misses = isset($this->stats['get_misses']) ?? 0; + } + + if (($set + $get) == 0) { + $gets = 0; + } + else { + $gets = $get / ($set + $get) * 100; + } + if (empty($stats['uptime'])) { + $average = 0; + } + else { + $average = $get / $stats['uptime']; + } + return $this->t( + '@average/s; @total gets (@gets%); @hit hits (@percent_hit%) @miss misses (@percent_miss%)', + [ + '@average' => number_format($average, 2), + '@gets' => number_format($gets, 2), + '@hit' => number_format($hits), + '@percent_hit' => ($get > 0 ? number_format($hits / $get * 100, 2) : '0.00'), + '@miss' => number_format($misses), + '@percent_miss' => ($get > 0 ? number_format($misses / $get * 100, 2) : '0.00'), + '@total' => number_format($get), + ] + ); + } + + /** + * @inheritDoc + */ + public function getCounters(): string { + $incr_hits = isset($this->stats['incr_hits']) ?? 0; + $incr_misses = isset($this->stats['incr_misses']) ?? 0; + $decr_hits = isset($this->stats['decr_hits']) ?? 0; + $decr_misses = isset($this->stats['decr_misses']) ?? 0; + + return $this->t( + '@incr increments, @decr decrements', + [ + '@incr' => number_format($incr_hits + $incr_misses), + '@decr' => number_format($decr_hits + $decr_misses), + ] + ); + } + + /** + * @inheritDoc + */ + public function getTransferred(): string { + $read = isset($this->stats['bytes_read']) ?? 0; + $write = isset($this->stats['bytes_written']) ?? 0; + + if ($write == 0) { + $written = 0; + } + else { + $written = $read / $write * 100; + } + return $this->t( + '@to:@from (@written% to cache)', + [ + '@to' => format_size((int) $read), + '@from' => format_size((int) $write), + '@written' => number_format($written, 2), + ] + ); + } + + /** + * @inheritDoc + */ + public function getConnectionAvg(): string { + if (!isset($this->stats['total_connections']) || + !isset($this->stats['cmd_get']) || + !isset($this->stats['cmd_set']) || + !isset($this->stats['bytes_written']) || + !isset($this->stats['bytes_read']) + ) { + return self::NA; + } + if ($this->stats['total_connections'] == 0) { + $get = 0; + $set = 0; + $read = 0; + $write = 0; + } + else { + $get = $this->stats['cmd_get'] / $this->stats['total_connections']; + $set = $this->stats['cmd_set'] / $this->stats['total_connections']; + $read = $this->stats['bytes_written'] / $this->stats['total_connections']; + $write = $this->stats['bytes_read'] / $this->stats['total_connections']; + } + return $this->t( + '@read in @get gets; @write in @set sets', + [ + '@get' => number_format($get, 2), + '@set' => number_format($set, 2), + '@read' => format_size((int) number_format($read, 2)), + '@write' => format_size((int) number_format($write, 2)), + ] + ); + } + + /** + * @inheritDoc + */ + public function getMemory(): string { + if (!isset($this->stats['limit_maxbytes']) || + !isset($this->stats['bytes']) + ) { + return self::NA; + } + + if ($this->stats['limit_maxbytes'] == 0) { + $percent = 0; + } + else { + $percent = 100 - $this->stats['bytes'] / $this->stats['limit_maxbytes'] * 100; + } + return $this->t( + '@available (@percent%) of @total', + [ + '@available' => format_size($this->stats['limit_maxbytes'] - $this->stats['bytes']), + '@percent' => number_format($percent, 2), + '@total' => format_size($this->stats['limit_maxbytes']), + ] + ); + } + + /** + * @inheritDoc + */ + public function getEvictions(): string { + return isset($this->stats['evictions']) ? number_format($this->stats['evictions']) : self::NA; + } + + /** + * @inheritDoc + */ + public function setRaw(array $raw_data) { + $this->stats = $raw_data; + } + + /** + * @inheritDoc + */ + public function getRaw(): array { + return $this->stats; + } + + /** + * @inheritDoc + */ + public function getVersion(): string { + return isset($this->stats['version']) ? (string)$this->stats['version'] : self::NA; + } + +} \ No newline at end of file diff --git a/web/modules/contrib/memcache/src/Cache/TimestampCacheTagsChecksum.php b/web/modules/contrib/memcache/src/Cache/TimestampCacheTagsChecksum.php index 8cb844075..2b2f81854 100644 --- a/web/modules/contrib/memcache/src/Cache/TimestampCacheTagsChecksum.php +++ b/web/modules/contrib/memcache/src/Cache/TimestampCacheTagsChecksum.php @@ -3,7 +3,6 @@ namespace Drupal\memcache\Cache; use Drupal\Core\Cache\CacheTagsChecksumInterface; -use Drupal\Core\Cache\CacheTagsChecksumTrait; use Drupal\Core\Cache\CacheTagsInvalidatorInterface; use Drupal\memcache\Invalidator\TimestampInvalidatorInterface; @@ -12,10 +11,6 @@ */ class TimestampCacheTagsChecksum implements CacheTagsChecksumInterface, CacheTagsInvalidatorInterface { - use CacheTagsChecksumTrait { - getCurrentChecksum as traitGetCurrentChecksum; - } - /** * The timestamp invalidator object. * @@ -23,6 +18,22 @@ class TimestampCacheTagsChecksum implements CacheTagsChecksumInterface, CacheTag */ protected $invalidator; + /** + * Contains already loaded cache invalidations from the backend. + * + * @var array + */ + protected $tagCache = []; + + /** + * A list of tags that have already been invalidated in this request. + * + * Used to prevent the invalidation of the same cache tag multiple times. + * + * @var array + */ + protected $invalidatedTags = []; + /** * Constructs a TimestampCacheTagsChecksum object. * @@ -36,8 +47,14 @@ public function __construct(TimestampInvalidatorInterface $invalidator) { /** * {@inheritdoc} */ - public function doInvalidateTags(array $tags) { + public function invalidateTags(array $tags) { foreach ($tags as $tag) { + // @todo Revisit this behavior and determine a better way to handle. + // Only invalidate tags once per request unless they are written again. + if (isset($this->invalidatedTags[$tag])) { + continue; + } + $this->invalidatedTags[$tag] = TRUE; $this->tagCache[$tag] = $this->invalidator->invalidateTimestamp($tag); } } @@ -46,7 +63,19 @@ public function doInvalidateTags(array $tags) { * {@inheritdoc} */ public function getCurrentChecksum(array $tags) { - return min($this->invalidator->getCurrentTimestamp(), $this->traitGetCurrentChecksum($tags)); + // @todo Revisit the invalidatedTags hack. + // Remove tags that were already invalidated during this request from the + // static caches so that another invalidation can occur later in the same + // request. Without that, written cache items would not be invalidated + // correctly. + foreach ($tags as $tag) { + unset($this->invalidatedTags[$tag]); + } + // Taking the minimum of the current timestamp and the checksum is used to + // ensure that items that are not valid yet are identified properly as not + // valid. The checksum will change continuously until the item is valid, + // at which point the checksum will match and freeze at that value. + return min($this->invalidator->getCurrentTimestamp(), $this->calculateChecksum($tags)); } /** @@ -73,9 +102,9 @@ protected function calculateChecksum(array $tags) { $query_tags = array_diff($tags, array_keys($this->tagCache)); if ($query_tags) { - $tag_invalidations = $this->invalidator->getLastInvalidationTimestamps($query_tags); - $this->tagCache += $tag_invalidations; - $invalid = array_diff($query_tags, array_keys($tag_invalidations)); + $backend_tags = $this->invalidator->getLastInvalidationTimestamps($query_tags); + $this->tagCache += $backend_tags; + $invalid = array_diff($query_tags, array_keys($backend_tags)); if (!empty($invalid)) { // Invalidate any missing tags now. This is necessary because we cannot // zero-optimize our tag list -- we can't tell the difference between @@ -110,21 +139,9 @@ protected function calculateChecksum(array $tags) { /** * {@inheritdoc} */ - protected function getTagInvalidationCounts(array $tags) { - // Note that the CacheTagsChecksumTrait assumes that the checksum strategy - // uses integer counters on each cache tag, but here we use timestamps. We - // return an empty array since we don't fit that mould. Currently only - // \Drupal\Core\Cache\CacheTagsChecksumTrait::calculateChecksum uses this - // method, which we override. - return []; + public function reset() { + $this->tagCache = []; + $this->invalidatedTags = []; } - /** - * {@inheritdoc} - */ - protected function getDatabaseConnection() { - // This is not injected to avoid a dependency on the database in the - // critical path. It is only needed during cache tag invalidations. - return \Drupal::database(); - } } diff --git a/web/modules/contrib/memcache/src/Driver/MemcachedDriver.php b/web/modules/contrib/memcache/src/Driver/MemcachedDriver.php index f6a9a699c..07df5bf01 100755 --- a/web/modules/contrib/memcache/src/Driver/MemcachedDriver.php +++ b/web/modules/contrib/memcache/src/Driver/MemcachedDriver.php @@ -68,7 +68,7 @@ public function getMulti(array $keys) { } } - if (PHP_MAJOR_VERSION === 7) { + if (PHP_MAJOR_VERSION >= 7) { $results = $this->memcache->getMulti($full_keys, \Memcached::GET_PRESERVE_ORDER); } else { diff --git a/web/modules/contrib/memcache/src/MemcacheBackend.php b/web/modules/contrib/memcache/src/MemcacheBackend.php index 32db0c17a..b80bf2eac 100644 --- a/web/modules/contrib/memcache/src/MemcacheBackend.php +++ b/web/modules/contrib/memcache/src/MemcacheBackend.php @@ -74,13 +74,6 @@ class MemcacheBackend implements CacheBackendInterface { */ protected $timestampInvalidator; - /** - * Delayed deletions for deletions during a transaction. - * - * @var string[] - */ - protected $delayedDeletions = []; - /** * Constructs a MemcacheBackend object. * @@ -319,56 +312,18 @@ public function setMultiple(array $items) { * {@inheritdoc} */ public function delete($cid) { - $this->deleteMultiple([$cid]); + $this->memcache->delete($cid); } /** * {@inheritdoc} */ public function deleteMultiple(array $cids) { - $in_transaction = \Drupal::database()->inTransaction(); - if ($in_transaction) { - if (empty($this->delayedDeletions)) { - \Drupal::database()->addRootTransactionEndCallback([$this, 'postRootTransactionCommit']); - } - $this->delayedDeletions = array_unique(array_merge($this->delayedDeletions, $cids)); - } - else { - $this->doDeleteMultiple($cids); - } - } - - /** - * Execute the deletion. - * - * This can be delayed to avoid race conditions. - * - * @param array $cids - * An array of cache IDs to delete. - * - * @see static::deleteMultiple() - */ - public function doDeleteMultiple(array $cids) { foreach ($cids as $cid) { $this->memcache->delete($cid); } } - /** - * Callback to be invoked after a database transaction gets committed. - * - * Invalidates all delayed cache deletions. - * - * @param bool $success - * Whether or not the transaction was successful. - */ - public function postRootTransactionCommit($success) { - if ($success) { - $this->doDeleteMultiple($this->delayedDeletions); - } - $this->delayedDeletions = []; - } - /** * {@inheritdoc} */ diff --git a/web/modules/contrib/memcache/tests/modules/memcache_test/memcache_test.info.yml b/web/modules/contrib/memcache/tests/modules/memcache_test/memcache_test.info.yml index ec7b0ff6e..6e4d6daea 100644 --- a/web/modules/contrib/memcache/tests/modules/memcache_test/memcache_test.info.yml +++ b/web/modules/contrib/memcache/tests/modules/memcache_test/memcache_test.info.yml @@ -5,7 +5,7 @@ package: Testing dependencies: - memcache:memcache -# Information added by Drupal.org packaging script on 2020-09-25 -version: '8.x-2.2' +# Information added by Drupal.org packaging script on 2021-03-03 +version: '8.x-2.3' project: 'memcache' -datestamp: 1601053268 +datestamp: 1614802367 diff --git a/web/modules/contrib/metatag/CHANGELOG.txt b/web/modules/contrib/metatag/CHANGELOG.txt index e5549ef09..0631fc900 100644 --- a/web/modules/contrib/metatag/CHANGELOG.txt +++ b/web/modules/contrib/metatag/CHANGELOG.txt @@ -1,3 +1,50 @@ +Metatag 8.x-1.16, 2021-03-15 +---------------------------- +#3186893 by DamienMcKenna: Document how to update from Metatag Access to Metatag + Extended Perms. +#3187583 by jrb: Syntax error when running PHP 7.0. +#3187898 by rutiolma: Comply with migrations using migrate_upgrade. +#3182548 by DamienMcKenna: Fix tests on 8.x-1.x branch for D9.1. +#3158186 by siddhant.bhosale, rahulrasgon, rokzabukovec, sabina.h, + DamienMcKenna: Replace usages of assertions that are deprecated. +#3186770 by mortim07: System status report page indicates Metatag's token types + do not have any tokens defined. +#3188806 by mortim07, acbramley, DamienMcKenna: Check if the entity being viewed + is the route entity. +#3188839 by mortim07, DamienMcKenna, mrshowerman, FiNeX, bwaindwain: Node tokens + missing. +#3189138 by bwaindwain, DamienMcKenna: Form element still visible even though + permissions turned off. +#3191109 by thalles: Replace deprecated Drupal\KernelTests\AssertLegacyTrait + ::assertEqual by $this->assertEquals(). +#3190808 by Wim Leers, DamienMcKenna: Do not run a "table exists" query for + every migrated row of data (regardless of whether it's a metatag row or not!). +#3193523 by DamienMcKenna: Removed files accidentally committed. +#3189850 by cmod, DamienMcKenna, J-Lee: Undefined index: href in + metatag_page_attachments(). +#3077781 by thejimbirch, DamienMcKenna, mmbk, cindytwilliams: Remove references + to the amphtml meta tag. +#3193502 by DaliaMoh, aritrika.d, DamienMcKenna: Extra if() statement in + _metatag_is_migration_plugin_supported(). +#3123583 by DamienMcKenna, Berdir, jonathan1055: Add Devel dependency, tests + back again. +#3199122 by DamienMcKenna, thejimbirch: Fix compatibility with Drupal 9. +#3199060 by Santhosh-Kumar-Rengasamy, DamienMcKenna: Custom Migration dependency + issue for d7 migrate process plugin. +#2930291 by dobe, trobey, DamienMcKenna, sylus: Expand all text fields to allow + 1,024 characters. +#3202865 by stmh, DamienMcKenna: logic in generateRawElements does not work with + hreflangs. +#2941632 by bgilhome, rokzabukovec, DamienMcKenna, yannickoo, thejimbirch: + og:latitude/longitude have been replaced by place:location:latitude/longitude. +#3196133 by leopathu, DamienMcKenna: Exclusive robots metatags (index, noindex, + follow, nofollow) in Entity Form. +#3145078 by DamienMcKenna, mrinalini9, amjad1233, vijaycs85, dww: Possibly wrong + use of $modules array in setUp() for functional tests. +#3196067 by Ruslan Piskarov, DamienMcKenna, mohit.bansal623: Notice: Undefined + offset: 2 in metatag_tokens() (line 218 of metatag.tokens.inc). + + Metatag 8.x-1.15, 2020-12-05 ---------------------------- #3165112 by Wim Leers, tim.plunkett: Metatag migrations should be tagged diff --git a/web/modules/contrib/metatag/composer.json b/web/modules/contrib/metatag/composer.json index 88b6bbd6f..c43f531a9 100644 --- a/web/modules/contrib/metatag/composer.json +++ b/web/modules/contrib/metatag/composer.json @@ -26,6 +26,7 @@ "drupal/token": "^1.0" }, "require-dev": { + "drupal/devel": "^4.0", "drupal/redirect": "1.x-dev", "drupal/page_manager": "4.x-dev", "drupal/panelizer": "4.x-dev" diff --git a/web/modules/contrib/metatag/metatag.info.yml b/web/modules/contrib/metatag/metatag.info.yml index bf207cb89..cbfc297df 100644 --- a/web/modules/contrib/metatag/metatag.info.yml +++ b/web/modules/contrib/metatag/metatag.info.yml @@ -7,8 +7,10 @@ configure: entity.metatag_defaults.collection dependencies: - drupal:field - token:token +test_dependencies: + - devel:devel -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag.module b/web/modules/contrib/metatag/metatag.module index a5fc44b39..565298c83 100644 --- a/web/modules/contrib/metatag/metatag.module +++ b/web/modules/contrib/metatag/metatag.module @@ -156,15 +156,18 @@ function metatag_page_attachments(array &$attachments) { // Also add a HTTP header "Link:" for canonical URLs and shortlinks. // See HtmlResponseAttachmentsProcessor::processHtmlHeadLink() for the // implementation of the functionality in core. - if (in_array($item[1], ['canonical_url', 'shortlink'])) { - $attributes = $item[0]['#attributes']; - - $href = '<' . Html::escape($attributes['href']) . '>'; - unset($attributes['href']); - if ($param = HtmlResponseAttachmentsProcessor::formatHttpHeaderAttributes($attributes)) { - $href .= ';' . $param; + if (isset($item[0]['#attributes']['href'])) { + if (in_array($item[1], ['canonical_url', 'shortlink'])) { + $attributes = $item[0]['#attributes']; + + $href = '<' . Html::escape($attributes['href']) . '>'; + unset($attributes['href']); + $param = HtmlResponseAttachmentsProcessor::formatHttpHeaderAttributes($attributes); + if (!empty($param)) { + $href .= ';' . $param; + } + $head_links[] = $href; } - $head_links[] = $href; } } @@ -209,6 +212,12 @@ function metatag_page_attachments_alter(array &$attachments) { * Implements hook_entity_view_alter(). */ function metatag_entity_view_alter(array &$build, EntityInterface $entity, EntityViewDisplayInterface $display) { + // Don't proceed any further if the entity being viewed isn't the route + // entity. + if (!_metatag_is_entity_route_entity($entity)) { + return; + } + if (!$entity->getEntityType()->hasLinkTemplate('canonical')) { return; } @@ -234,6 +243,29 @@ function metatag_entity_view_alter(array &$build, EntityInterface $entity, Entit _metatag_remove_duplicate_entity_tags($build); } +/** + * A function to determine whether the entity in question is the route entity. + * + * @param \Drupal\Core\Entity\EntityInterface $entity + * The entity. + * + * @return bool + * The result. + */ +function _metatag_is_entity_route_entity(EntityInterface $entity): bool { + static $cached_entity_uuid; + if (!$cached_entity_uuid) { + foreach (\Drupal::routeMatch()->getParameters() as $route_parameter) { + if ($route_parameter instanceof EntityInterface) { + if ($route_parameter->uuid() === $entity->uuid()) { + $cached_entity_uuid = $entity->uuid(); + } + } + } + } + return ($cached_entity_uuid === $entity->uuid()); +} + /** * Pre render callback for entities processed by Panelizer. * @@ -669,9 +701,16 @@ function metatag_migrate_prepare_row(Row $row, MigrateSourceInterface $source, M return; } - // Work out what sort of migration to do. - // Metatag-D7. - if ($source->getDatabase()->schema()->tableExists('metatag')) { + // Work out what sort of migration to do. Cache the results of this logic so + // that it isn't checked on every single row being processed. + static $metatag_table_exists, $nodewords_table_exists; + if (!isset($metatag_table_exists)) { + $metatag_table_exists = $source->getDatabase()->schema()->tableExists('metatag'); + $nodewords_table_exists = $source->getDatabase()->schema()->tableExists('nodewords'); + } + + // The source is Metatag-D7. + if ($metatag_table_exists) { // @todo Write a more general version rather than hard-coded. // Support a know subset of D7 sources. if (is_a($source, Node7::class)) { @@ -735,8 +774,8 @@ function metatag_migrate_prepare_row(Row $row, MigrateSourceInterface $source, M } } - // Nodewords-D6. - elseif ($source->getDatabase()->schema()->tableExists('nodewords')) { + // The source is Nodewords-D6. + elseif ($nodewords_table_exists) { // @todo Write a more general version rather than hard-coded. // Support a know subset of D6 sources. if (is_a($source, Node6::class)) { @@ -858,14 +897,14 @@ function metatag_migration_plugins_alter(array &$definitions) { // d7_node_complete, which has dependencies on d7_field_instance and // d7_comment_field_instance to ensure correct migration order. if ($bundle_id && isset($definitions["d7_metatag_field_instance:$entity_type_id:$bundle_id"])) { - $definition['migration_dependencies']['required'][] = "d7_metatag_field:$entity_type_id"; - $definition['migration_dependencies']['required'][] = "d7_metatag_field_instance:$entity_type_id:$bundle_id"; - $definition['migration_dependencies']['required'][] = "d7_metatag_field_instance_widget_settings:$entity_type_id:$bundle_id"; + $definition['migration_dependencies']['optional'][] = "d7_metatag_field:$entity_type_id"; + $definition['migration_dependencies']['optional'][] = "d7_metatag_field_instance:$entity_type_id:$bundle_id"; + $definition['migration_dependencies']['optional'][] = "d7_metatag_field_instance_widget_settings:$entity_type_id:$bundle_id"; } elseif (isset($definitions["d7_metatag_field_instance:$entity_type_id"])) { - $definition['migration_dependencies']['required'][] = "d7_metatag_field:$entity_type_id"; - $definition['migration_dependencies']['required'][] = "d7_metatag_field_instance:$entity_type_id"; - $definition['migration_dependencies']['required'][] = "d7_metatag_field_instance_widget_settings:$entity_type_id"; + $definition['migration_dependencies']['optional'][] = "d7_metatag_field:$entity_type_id"; + $definition['migration_dependencies']['optional'][] = "d7_metatag_field_instance:$entity_type_id"; + $definition['migration_dependencies']['optional'][] = "d7_metatag_field_instance_widget_settings:$entity_type_id"; } } } @@ -891,10 +930,19 @@ function _metatag_is_migration_plugin_supported(array $definition) { if (empty($definition['migration_tags'])) { return FALSE; } + if (!is_array($definition['migration_tags'])) { + return FALSE; + } if (!array_intersect(['Drupal 6', 'Drupal 7'], $definition['migration_tags'])) { return FALSE; } + // Support for migrate_upgrade module, to avoid adding dependencies on already + // processed migration procedures. + if (!empty($definition['migration_group'])) { + return FALSE; + } + // This migration has destination plugins defined. if (!empty($definition['destination']['plugin'])) { // Follow logic on hook_entity_base_field_info() and exclude the metatag diff --git a/web/modules/contrib/metatag/metatag.tokens.inc b/web/modules/contrib/metatag/metatag.tokens.inc index 836bfd7e9..8b1674d35 100644 --- a/web/modules/contrib/metatag/metatag.tokens.inc +++ b/web/modules/contrib/metatag/metatag.tokens.inc @@ -54,6 +54,12 @@ function metatag_token_info() { 'nested' => TRUE, ]; + $info['tokens'][$metatag_token_name]['value'] = [ + 'name' => Html::escape($label), + 'module' => 'metatag', + 'description' => $description, + ]; + // Tag list token type. if ($multiple) { $info['types']["list<$metatag_token_name>"] = [ @@ -200,7 +206,7 @@ function metatag_tokens($type, $tokens, array $data, array $options, BubbleableM // For [metatag:tag_name:0], [metatag:tag_name:0:value] and // [metatag:tag_name:value] tokens. else { - [$tag_name, $delta] = explode(':', $name, 2); + list($tag_name, $delta) = explode(':', $name, 2); if (!is_numeric($delta)) { unset($delta); } @@ -215,10 +221,15 @@ function metatag_tokens($type, $tokens, array $data, array $options, BubbleableM // Render only one delta. if (isset($delta)) { - $replacements[$original] = $processed_tags[$tag_name][$delta]; + $replacements[$original] = $processed_tags[$tag_name][$delta] ?? NULL; } else { - $replacements[$original] = is_array($processed_tags[$tag_name]) ? implode(',', $processed_tags[$tag_name]) : $processed_tags[$tag_name]; + if (is_array($processed_tags[$tag_name])) { + $replacements[$original] = implode(',', $processed_tags[$tag_name]); + } + else { + $replacements[$original] = $processed_tags[$tag_name]; + } } } break; diff --git a/web/modules/contrib/metatag/metatag_app_links/metatag_app_links.info.yml b/web/modules/contrib/metatag/metatag_app_links/metatag_app_links.info.yml index 6953e156b..b5a57a087 100644 --- a/web/modules/contrib/metatag/metatag_app_links/metatag_app_links.info.yml +++ b/web/modules/contrib/metatag/metatag_app_links/metatag_app_links.info.yml @@ -6,7 +6,7 @@ package: SEO dependencies: - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_app_links/tests/src/Functional/MetatagAppLinksTagsTest.php b/web/modules/contrib/metatag/metatag_app_links/tests/src/Functional/MetatagAppLinksTagsTest.php index ac47a66d0..9935b482d 100644 --- a/web/modules/contrib/metatag/metatag_app_links/tests/src/Functional/MetatagAppLinksTagsTest.php +++ b/web/modules/contrib/metatag/metatag_app_links/tests/src/Functional/MetatagAppLinksTagsTest.php @@ -11,6 +11,11 @@ */ class MetatagAppLinksTagsTest extends MetatagTagsTestBase { + /** + * {@inheritdoc} + */ + protected static $modules = ['metatag_app_links']; + /** * {@inheritdoc} */ @@ -46,14 +51,6 @@ class MetatagAppLinksTagsTest extends MetatagTagsTestBase { */ protected $testNameAttribute = 'property'; - /** - * {@inheritdoc} - */ - protected function setUp() { - parent::$modules[] = 'metatag_app_links'; - parent::setUp(); - } - /** * Each of these meta tags has a different tag name vs its internal name. */ diff --git a/web/modules/contrib/metatag/metatag_dc/metatag_dc.info.yml b/web/modules/contrib/metatag/metatag_dc/metatag_dc.info.yml index 59c782f66..e084b6bf3 100644 --- a/web/modules/contrib/metatag/metatag_dc/metatag_dc.info.yml +++ b/web/modules/contrib/metatag/metatag_dc/metatag_dc.info.yml @@ -6,7 +6,7 @@ package: SEO dependencies: - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_dc/tests/src/Functional/MetatagDublinCoreTagsTest.php b/web/modules/contrib/metatag/metatag_dc/tests/src/Functional/MetatagDublinCoreTagsTest.php index 963a3315f..032834b3b 100644 --- a/web/modules/contrib/metatag/metatag_dc/tests/src/Functional/MetatagDublinCoreTagsTest.php +++ b/web/modules/contrib/metatag/metatag_dc/tests/src/Functional/MetatagDublinCoreTagsTest.php @@ -11,6 +11,11 @@ */ class MetatagDublinCoreTagsTest extends MetatagTagsTestBase { + /** + * {@inheritdoc} + */ + protected static $modules = ['metatag_dc']; + /** * {@inheritdoc} */ @@ -32,14 +37,6 @@ class MetatagDublinCoreTagsTest extends MetatagTagsTestBase { 'dcterms_type', ]; - /** - * {@inheritdoc} - */ - protected function setUp() { - parent::$modules[] = 'metatag_dc'; - parent::setUp(); - } - /** * Each of these meta tags has a different tag name vs its internal name. */ diff --git a/web/modules/contrib/metatag/metatag_dc_advanced/metatag_dc_advanced.info.yml b/web/modules/contrib/metatag/metatag_dc_advanced/metatag_dc_advanced.info.yml index 598e9c507..73aa8bae7 100644 --- a/web/modules/contrib/metatag/metatag_dc_advanced/metatag_dc_advanced.info.yml +++ b/web/modules/contrib/metatag/metatag_dc_advanced/metatag_dc_advanced.info.yml @@ -7,7 +7,7 @@ dependencies: - metatag:metatag - metatag:metatag_dc -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_dc_advanced/tests/src/Functional/MetatagDublinCoreAdvancedTagsTest.php b/web/modules/contrib/metatag/metatag_dc_advanced/tests/src/Functional/MetatagDublinCoreAdvancedTagsTest.php index 03d8bf7e6..7df9b3a24 100644 --- a/web/modules/contrib/metatag/metatag_dc_advanced/tests/src/Functional/MetatagDublinCoreAdvancedTagsTest.php +++ b/web/modules/contrib/metatag/metatag_dc_advanced/tests/src/Functional/MetatagDublinCoreAdvancedTagsTest.php @@ -12,6 +12,11 @@ */ class MetatagDublinCoreAdvancedTagsTest extends MetatagTagsTestBase { + /** + * {@inheritdoc} + */ + protected static $modules = ['metatag_dc_advanced']; + /** * {@inheritdoc} */ @@ -58,14 +63,6 @@ class MetatagDublinCoreAdvancedTagsTest extends MetatagTagsTestBase { 'dcterms_valid', ]; - /** - * {@inheritdoc} - */ - protected function setUp() { - parent::$modules[] = 'metatag_dc_advanced'; - parent::setUp(); - } - /** * Each of these meta tags has a different tag name vs its internal name. */ diff --git a/web/modules/contrib/metatag/metatag_extended_perms/README.txt b/web/modules/contrib/metatag/metatag_extended_perms/README.txt index ba2d609c9..4bd5059c2 100644 --- a/web/modules/contrib/metatag/metatag_extended_perms/README.txt +++ b/web/modules/contrib/metatag/metatag_extended_perms/README.txt @@ -25,6 +25,48 @@ before enabling it on production, to help ensure these problems are not encountered. +Updating from Metatag Access +-------------------------------------------------------------------------------- +The original sandbox module for this functionality was called "Metatag Access". +Sites which used that submodule should switch to this module. Rather than +loosing their configuration, use the following update script to convert the +permissions. + +/** + * Replace Metatag Access with Metatag Extended Perms. + */ +function mysite_update_9001() { + $installer = \Drupal::service('module_installer'); + + // Install the Metatag Extended Permissions module. + $installer->install(['metatag_extended_perms']); + + // Update the permissions. + foreach (Role::loadMultiple() as $role) { + // Keep track of whether the permissions changed for this role. + $changed = FALSE; + foreach ($role->getPermissions() as $key => $perm) { + // Look for permissions that started with the old permission string. + if (strpos($perm, 'access metatag tag') !== FALSE) { + // Grand the new permission. + $role->grantPermission(str_replace('access metatag tag', 'access metatag', $perm)); + + // Track that the role's permissions changed. + $changed = TRUE; + } + } + + // If the permissions changed, save the role. + if ($changed) { + $role->trustData()->save(); + } + } + + // Uninstall the Metatag Access module. + $installer->uninstall(['metatag_access']); +} + + Credits / contact -------------------------------------------------------------------------------- Originally written by Michael Petri [1]. diff --git a/web/modules/contrib/metatag/metatag_extended_perms/metatag_extended_perms.info.yml b/web/modules/contrib/metatag/metatag_extended_perms/metatag_extended_perms.info.yml index f2d6d1f78..928385acb 100644 --- a/web/modules/contrib/metatag/metatag_extended_perms/metatag_extended_perms.info.yml +++ b/web/modules/contrib/metatag/metatag_extended_perms/metatag_extended_perms.info.yml @@ -6,7 +6,7 @@ package: SEO dependencies: - metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_extended_perms/metatag_extended_perms.module b/web/modules/contrib/metatag/metatag_extended_perms/metatag_extended_perms.module index fb0ff5706..9061ab959 100644 --- a/web/modules/contrib/metatag/metatag_extended_perms/metatag_extended_perms.module +++ b/web/modules/contrib/metatag/metatag_extended_perms/metatag_extended_perms.module @@ -16,6 +16,8 @@ function metatag_extended_perms_field_widget_form_alter(&$element, FormStateInte if ($context['widget'] instanceof MetatagFirehose) { $group_manager = \Drupal::getContainer()->get('plugin.manager.metatag.group'); + // Prevent access to the element until at least one permission is granted. + $element['#access'] = FALSE; foreach (Element::children($element) as $group_id) { $group = $group_manager->getDefinition($group_id, FALSE); if ($group === NULL) { @@ -33,9 +35,10 @@ function metatag_extended_perms_field_widget_form_alter(&$element, FormStateInte $element[$group_id][$tag_id]['#access'] = \Drupal::currentUser() ->hasPermission('access metatag ' . $group_id . '__' . $tag_id); - // Make the group accessible if user has access to the tag. + // Make the parent and group accessible if user has access to the tag. if ($element[$group_id][$tag_id]['#access']) { $element[$group_id]['#access'] = TRUE; + $element['#access'] = TRUE; } } } diff --git a/web/modules/contrib/metatag/metatag_extended_perms/tests/src/Functional/PermissionsTest.php b/web/modules/contrib/metatag/metatag_extended_perms/tests/src/Functional/PermissionsTest.php index 830a4d3d9..392cb0c96 100644 --- a/web/modules/contrib/metatag/metatag_extended_perms/tests/src/Functional/PermissionsTest.php +++ b/web/modules/contrib/metatag/metatag_extended_perms/tests/src/Functional/PermissionsTest.php @@ -104,9 +104,12 @@ public function testPermissionsExist() { $session = $this->assertSession(); $session->statusCodeEquals(200); - // Confirm that the page contains the standard text iddicating this is the + // Confirm that the page contains the standard text indicating this is the // permissions page. - $session->pageTextContains('Administer menus and menu items'); + $session->pageTextContains('Administer modules'); + $session->pageTextContains('Administer site configuration'); + $session->pageTextContains('Administer themes'); + $session->pageTextContains('Administer software updates'); // Look for each of the meta tags. foreach ($this->permissions as $group => $perms) { diff --git a/web/modules/contrib/metatag/metatag_facebook/metatag_facebook.info.yml b/web/modules/contrib/metatag/metatag_facebook/metatag_facebook.info.yml index 11944e97e..ed5f9b5d5 100644 --- a/web/modules/contrib/metatag/metatag_facebook/metatag_facebook.info.yml +++ b/web/modules/contrib/metatag/metatag_facebook/metatag_facebook.info.yml @@ -6,7 +6,7 @@ package: SEO dependencies: - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_facebook/tests/src/Functional/MetatagFacebookTagsTest.php b/web/modules/contrib/metatag/metatag_facebook/tests/src/Functional/MetatagFacebookTagsTest.php index c71799d9b..f3f6c7380 100644 --- a/web/modules/contrib/metatag/metatag_facebook/tests/src/Functional/MetatagFacebookTagsTest.php +++ b/web/modules/contrib/metatag/metatag_facebook/tests/src/Functional/MetatagFacebookTagsTest.php @@ -11,6 +11,11 @@ */ class MetatagFacebookTagsTest extends MetatagTagsTestBase { + /** + * {@inheritdoc} + */ + protected static $modules = ['metatag_facebook']; + /** * {@inheritdoc} */ @@ -25,14 +30,6 @@ class MetatagFacebookTagsTest extends MetatagTagsTestBase { */ protected $testNameAttribute = 'property'; - /** - * {@inheritdoc} - */ - protected function setUp() { - parent::$modules[] = 'metatag_facebook'; - parent::setUp(); - } - /** * Each of these meta tags has a different tag name vs its internal name. */ diff --git a/web/modules/contrib/metatag/metatag_favicons/metatag_favicons.info.yml b/web/modules/contrib/metatag/metatag_favicons/metatag_favicons.info.yml index b5179b53f..4b3940f93 100644 --- a/web/modules/contrib/metatag/metatag_favicons/metatag_favicons.info.yml +++ b/web/modules/contrib/metatag/metatag_favicons/metatag_favicons.info.yml @@ -6,7 +6,7 @@ package: SEO dependencies: - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_favicons/tests/src/Functional/MetatagFaviconsTagsTest.php b/web/modules/contrib/metatag/metatag_favicons/tests/src/Functional/MetatagFaviconsTagsTest.php index 96fcc70ad..aec9f6bf6 100644 --- a/web/modules/contrib/metatag/metatag_favicons/tests/src/Functional/MetatagFaviconsTagsTest.php +++ b/web/modules/contrib/metatag/metatag_favicons/tests/src/Functional/MetatagFaviconsTagsTest.php @@ -11,6 +11,11 @@ */ class MetatagFaviconsTagsTest extends MetatagTagsTestBase { + /** + * {@inheritdoc} + */ + protected static $modules = ['metatag_favicons']; + /** * {@inheritdoc} */ @@ -54,14 +59,6 @@ class MetatagFaviconsTagsTest extends MetatagTagsTestBase { */ protected $testValueAttribute = 'href'; - /** - * {@inheritdoc} - */ - protected function setUp() { - parent::$modules[] = 'metatag_favicons'; - parent::setUp(); - } - /** * Implements {tag_name}TestValueAttribute() for 'shortcut icon'. */ diff --git a/web/modules/contrib/metatag/metatag_google_cse/metatag_google_cse.info.yml b/web/modules/contrib/metatag/metatag_google_cse/metatag_google_cse.info.yml index beb9dbe7d..9cfe7ce4d 100644 --- a/web/modules/contrib/metatag/metatag_google_cse/metatag_google_cse.info.yml +++ b/web/modules/contrib/metatag/metatag_google_cse/metatag_google_cse.info.yml @@ -6,7 +6,7 @@ package: SEO dependencies: - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_google_cse/tests/src/Functional/MetatagGoogleCSETagsTest.php b/web/modules/contrib/metatag/metatag_google_cse/tests/src/Functional/MetatagGoogleCSETagsTest.php index 0787e2512..4867b6db1 100644 --- a/web/modules/contrib/metatag/metatag_google_cse/tests/src/Functional/MetatagGoogleCSETagsTest.php +++ b/web/modules/contrib/metatag/metatag_google_cse/tests/src/Functional/MetatagGoogleCSETagsTest.php @@ -11,6 +11,11 @@ */ class MetatagGoogleCSETagsTest extends MetatagTagsTestBase { + /** + * {@inheritdoc} + */ + protected static $modules = ['metatag_google_cse']; + /** * {@inheritdoc} */ @@ -22,14 +27,6 @@ class MetatagGoogleCSETagsTest extends MetatagTagsTestBase { 'thumbnail', ]; - /** - * {@inheritdoc} - */ - protected function setUp() { - parent::$modules[] = 'metatag_google_cse'; - parent::setUp(); - } - /** * Implements {tag_name}TestTagName() for 'google_rating'. */ diff --git a/web/modules/contrib/metatag/metatag_google_plus/metatag_google_plus.info.yml b/web/modules/contrib/metatag/metatag_google_plus/metatag_google_plus.info.yml index e9c4e69c5..746077905 100644 --- a/web/modules/contrib/metatag/metatag_google_plus/metatag_google_plus.info.yml +++ b/web/modules/contrib/metatag/metatag_google_plus/metatag_google_plus.info.yml @@ -6,7 +6,7 @@ package: SEO dependencies: - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_google_plus/tests/src/Functional/MetatagGooglePlusTagsTest.php b/web/modules/contrib/metatag/metatag_google_plus/tests/src/Functional/MetatagGooglePlusTagsTest.php index 4109d043a..c85c3adf6 100644 --- a/web/modules/contrib/metatag/metatag_google_plus/tests/src/Functional/MetatagGooglePlusTagsTest.php +++ b/web/modules/contrib/metatag/metatag_google_plus/tests/src/Functional/MetatagGooglePlusTagsTest.php @@ -11,6 +11,11 @@ */ class MetatagGooglePlusTagsTest extends MetatagTagsTestBase { + /** + * {@inheritdoc} + */ + protected static $modules = ['metatag_google_plus']; + /** * {@inheritdoc} */ @@ -27,14 +32,6 @@ class MetatagGooglePlusTagsTest extends MetatagTagsTestBase { */ protected $testNameAttribute = 'itemprop'; - /** - * {@inheritdoc} - */ - protected function setUp() { - parent::$modules[] = 'metatag_google_plus'; - parent::setUp(); - } - /** * Each of these meta tags has a different tag name vs its internal name. */ diff --git a/web/modules/contrib/metatag/metatag_hreflang/metatag_hreflang.info.yml b/web/modules/contrib/metatag/metatag_hreflang/metatag_hreflang.info.yml index 2c14c44d6..08f4d821b 100644 --- a/web/modules/contrib/metatag/metatag_hreflang/metatag_hreflang.info.yml +++ b/web/modules/contrib/metatag/metatag_hreflang/metatag_hreflang.info.yml @@ -6,7 +6,7 @@ package: SEO dependencies: - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_hreflang/tests/src/Functional/MetatagHreflangTagsTest.php b/web/modules/contrib/metatag/metatag_hreflang/tests/src/Functional/MetatagHreflangTagsTest.php index 040bd7dfc..8423cf4ba 100644 --- a/web/modules/contrib/metatag/metatag_hreflang/tests/src/Functional/MetatagHreflangTagsTest.php +++ b/web/modules/contrib/metatag/metatag_hreflang/tests/src/Functional/MetatagHreflangTagsTest.php @@ -12,6 +12,11 @@ */ class MetatagHreflangTagsTest extends MetatagTagsTestBase { + /** + * {@inheritdoc} + */ + protected static $modules = ['language', 'metatag_hreflang']; + /** * {@inheritdoc} */ @@ -42,10 +47,6 @@ class MetatagHreflangTagsTest extends MetatagTagsTestBase { * {@inheritdoc} */ protected function setUp() { - // Need the Language module in order for any of this to work. - parent::$modules[] = 'language'; - // This module. - parent::$modules[] = 'metatag_hreflang'; parent::setUp(); // Enable additional languages. diff --git a/web/modules/contrib/metatag/metatag_mobile/metatag_mobile.info.yml b/web/modules/contrib/metatag/metatag_mobile/metatag_mobile.info.yml index 856d0a3e7..d572a64b8 100644 --- a/web/modules/contrib/metatag/metatag_mobile/metatag_mobile.info.yml +++ b/web/modules/contrib/metatag/metatag_mobile/metatag_mobile.info.yml @@ -6,7 +6,7 @@ package: SEO dependencies: - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_mobile/tests/src/Functional/MetatagMobileTagsTest.php b/web/modules/contrib/metatag/metatag_mobile/tests/src/Functional/MetatagMobileTagsTest.php index b7d8fc543..ccb246fd4 100644 --- a/web/modules/contrib/metatag/metatag_mobile/tests/src/Functional/MetatagMobileTagsTest.php +++ b/web/modules/contrib/metatag/metatag_mobile/tests/src/Functional/MetatagMobileTagsTest.php @@ -11,6 +11,11 @@ */ class MetatagMobileTagsTest extends MetatagTagsTestBase { + /** + * {@inheritdoc} + */ + protected static $modules = ['metatag_mobile']; + /** * {@inheritdoc} */ @@ -55,14 +60,6 @@ class MetatagMobileTagsTest extends MetatagTagsTestBase { 'x_ua_compatible', ]; - /** - * {@inheritdoc} - */ - protected function setUp() { - parent::$modules[] = 'metatag_mobile'; - parent::setUp(); - } - /** * {@inheritdoc} */ @@ -92,20 +89,6 @@ protected function alternateHandheldTestValueAttribute() { return 'href'; } - /** - * Implements {tag_name}TestOutputXpath() for 'amphtml'. - */ - protected function amphtmlTestOutputXpath() { - return "//link[@rel='amphtml']"; - } - - /** - * Implements {tag_name}TestValueAttribute() for 'amphtml'. - */ - protected function amphtmlTestValueAttribute() { - return 'href'; - } - /** * Implements {tag_name}TestValue() for 'android_app_link_alternative'. */ diff --git a/web/modules/contrib/metatag/metatag_open_graph/metatag_open_graph.info.yml b/web/modules/contrib/metatag/metatag_open_graph/metatag_open_graph.info.yml index 5e4d81943..01bfba11e 100644 --- a/web/modules/contrib/metatag/metatag_open_graph/metatag_open_graph.info.yml +++ b/web/modules/contrib/metatag/metatag_open_graph/metatag_open_graph.info.yml @@ -6,7 +6,7 @@ package: SEO dependencies: - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_open_graph/src/Plugin/metatag/Tag/OgLatitude.php b/web/modules/contrib/metatag/metatag_open_graph/src/Plugin/metatag/Tag/OgLatitude.php index e1db6f070..b84745d01 100644 --- a/web/modules/contrib/metatag/metatag_open_graph/src/Plugin/metatag/Tag/OgLatitude.php +++ b/web/modules/contrib/metatag/metatag_open_graph/src/Plugin/metatag/Tag/OgLatitude.php @@ -11,7 +11,7 @@ * id = "og_latitude", * label = @Translation("Latitude"), * description = @Translation(""), - * name = "og:latitude", + * name = "place:location:latitude", * group = "open_graph", * weight = 16, * type = "string", diff --git a/web/modules/contrib/metatag/metatag_open_graph/src/Plugin/metatag/Tag/OgLongitude.php b/web/modules/contrib/metatag/metatag_open_graph/src/Plugin/metatag/Tag/OgLongitude.php index a25c59cf4..551bac4b8 100644 --- a/web/modules/contrib/metatag/metatag_open_graph/src/Plugin/metatag/Tag/OgLongitude.php +++ b/web/modules/contrib/metatag/metatag_open_graph/src/Plugin/metatag/Tag/OgLongitude.php @@ -11,7 +11,7 @@ * id = "og_longitude", * label = @Translation("Longitude"), * description = @Translation(""), - * name = "og:longitude", + * name = "place:location:longitude", * group = "open_graph", * weight = 16, * type = "string", diff --git a/web/modules/contrib/metatag/metatag_open_graph/tests/src/Functional/MetatagOpenGraphTagsTest.php b/web/modules/contrib/metatag/metatag_open_graph/tests/src/Functional/MetatagOpenGraphTagsTest.php index b2346f74c..e00f85030 100644 --- a/web/modules/contrib/metatag/metatag_open_graph/tests/src/Functional/MetatagOpenGraphTagsTest.php +++ b/web/modules/contrib/metatag/metatag_open_graph/tests/src/Functional/MetatagOpenGraphTagsTest.php @@ -11,6 +11,11 @@ */ class MetatagOpenGraphTagsTest extends MetatagTagsTestBase { + /** + * {@inheritdoc} + */ + protected static $modules = ['metatag_open_graph']; + /** * {@inheritdoc} */ @@ -86,18 +91,17 @@ class MetatagOpenGraphTagsTest extends MetatagTagsTestBase { */ protected $testNameAttribute = 'property'; - /** - * {@inheritdoc} - */ - protected function setUp() { - parent::$modules[] = 'metatag_open_graph'; - parent::setUp(); - } - /** * Each of these meta tags has a different tag name vs its internal name. */ protected function getTestTagName($tag_name) { + if ($tag_name == 'og_latitude') { + $tag_name = 'place:location:latitude'; + } + elseif ($tag_name == 'og_longitude') { + $tag_name = 'place:location:longitude'; + } + // Replace the first underline with a colon. $tag_name = str_replace('og_', 'og:', $tag_name); $tag_name = str_replace('article_', 'article:', $tag_name); diff --git a/web/modules/contrib/metatag/metatag_open_graph_products/metatag_open_graph_products.info.yml b/web/modules/contrib/metatag/metatag_open_graph_products/metatag_open_graph_products.info.yml index 49e50b737..8c6c2c020 100644 --- a/web/modules/contrib/metatag/metatag_open_graph_products/metatag_open_graph_products.info.yml +++ b/web/modules/contrib/metatag/metatag_open_graph_products/metatag_open_graph_products.info.yml @@ -7,7 +7,7 @@ dependencies: - metatag:metatag - metatag:metatag_open_graph -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_open_graph_products/tests/src/Functional/MetatagOpenGraphProductsTagsTest.php b/web/modules/contrib/metatag/metatag_open_graph_products/tests/src/Functional/MetatagOpenGraphProductsTagsTest.php index 87f169e43..3f1acdfa5 100644 --- a/web/modules/contrib/metatag/metatag_open_graph_products/tests/src/Functional/MetatagOpenGraphProductsTagsTest.php +++ b/web/modules/contrib/metatag/metatag_open_graph_products/tests/src/Functional/MetatagOpenGraphProductsTagsTest.php @@ -11,6 +11,11 @@ */ class MetatagOpenGraphProductsTagsTest extends MetatagTagsTestBase { + /** + * {@inheritdoc} + */ + protected static $modules = ['metatag_open_graph_products']; + /** * {@inheritdoc} */ @@ -29,14 +34,6 @@ class MetatagOpenGraphProductsTagsTest extends MetatagTagsTestBase { */ protected $testNameAttribute = 'property'; - /** - * {@inheritdoc} - */ - protected function setUp() { - parent::$modules[] = 'metatag_open_graph_products'; - parent::setUp(); - } - /** * Each of these meta tags has a different tag name vs its internal name. */ diff --git a/web/modules/contrib/metatag/metatag_page_manager/metatag_page_manager.info.yml b/web/modules/contrib/metatag/metatag_page_manager/metatag_page_manager.info.yml index b266b506d..c469bb375 100644 --- a/web/modules/contrib/metatag/metatag_page_manager/metatag_page_manager.info.yml +++ b/web/modules/contrib/metatag/metatag_page_manager/metatag_page_manager.info.yml @@ -7,7 +7,7 @@ dependencies: - page_manager:page_manager - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_page_manager/tests/src/Functional/MetatagPageManagerTest.php b/web/modules/contrib/metatag/metatag_page_manager/tests/src/Functional/MetatagPageManagerTest.php index 674da434c..5cccbb4af 100644 --- a/web/modules/contrib/metatag/metatag_page_manager/tests/src/Functional/MetatagPageManagerTest.php +++ b/web/modules/contrib/metatag/metatag_page_manager/tests/src/Functional/MetatagPageManagerTest.php @@ -19,7 +19,7 @@ class MetatagPageManagerTest extends BrowserTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // This module. 'metatag_page_manager', 'page_manager_ui', diff --git a/web/modules/contrib/metatag/metatag_pinterest/metatag_pinterest.info.yml b/web/modules/contrib/metatag/metatag_pinterest/metatag_pinterest.info.yml index fbd29135f..f870cf876 100644 --- a/web/modules/contrib/metatag/metatag_pinterest/metatag_pinterest.info.yml +++ b/web/modules/contrib/metatag/metatag_pinterest/metatag_pinterest.info.yml @@ -6,7 +6,7 @@ package: SEO dependencies: - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_pinterest/tests/src/Functional/MetatagPinterestTagsTest.php b/web/modules/contrib/metatag/metatag_pinterest/tests/src/Functional/MetatagPinterestTagsTest.php index 09edba973..791149f4e 100644 --- a/web/modules/contrib/metatag/metatag_pinterest/tests/src/Functional/MetatagPinterestTagsTest.php +++ b/web/modules/contrib/metatag/metatag_pinterest/tests/src/Functional/MetatagPinterestTagsTest.php @@ -11,6 +11,11 @@ */ class MetatagPinterestTagsTest extends MetatagTagsTestBase { + /** + * {@inheritdoc} + */ + protected static $modules = ['metatag_pinterest']; + /** * {@inheritdoc} */ @@ -35,14 +40,6 @@ class MetatagPinterestTagsTest extends MetatagTagsTestBase { */ protected $testNameAttribute = 'property'; - /** - * {@inheritdoc} - */ - protected function setUp() { - parent::$modules[] = 'metatag_pinterest'; - parent::setUp(); - } - /** * Each of these meta tags has a different tag name vs its internal name. */ diff --git a/web/modules/contrib/metatag/metatag_twitter_cards/metatag_twitter_cards.info.yml b/web/modules/contrib/metatag/metatag_twitter_cards/metatag_twitter_cards.info.yml index 75987c56b..48fbb2acc 100644 --- a/web/modules/contrib/metatag/metatag_twitter_cards/metatag_twitter_cards.info.yml +++ b/web/modules/contrib/metatag/metatag_twitter_cards/metatag_twitter_cards.info.yml @@ -6,7 +6,7 @@ package: SEO dependencies: - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_twitter_cards/tests/src/Functional/MetatagTwitterCardsTagsTest.php b/web/modules/contrib/metatag/metatag_twitter_cards/tests/src/Functional/MetatagTwitterCardsTagsTest.php index fa41edc81..9bd0ee112 100644 --- a/web/modules/contrib/metatag/metatag_twitter_cards/tests/src/Functional/MetatagTwitterCardsTagsTest.php +++ b/web/modules/contrib/metatag/metatag_twitter_cards/tests/src/Functional/MetatagTwitterCardsTagsTest.php @@ -11,6 +11,11 @@ */ class MetatagTwitterCardsTagsTest extends MetatagTagsTestBase { + /** + * {@inheritdoc} + */ + protected static $modules = ['metatag_twitter_cards']; + /** * {@inheritdoc} */ @@ -54,14 +59,6 @@ class MetatagTwitterCardsTagsTest extends MetatagTagsTestBase { // 'twitter_cards_player', ]; - /** - * {@inheritdoc} - */ - protected function setUp() { - parent::$modules[] = 'metatag_twitter_cards'; - parent::setUp(); - } - /** * Twitter meta tags (almost) all have colons instead of underlines. * diff --git a/web/modules/contrib/metatag/metatag_verification/metatag_verification.info.yml b/web/modules/contrib/metatag/metatag_verification/metatag_verification.info.yml index 7bc072625..b575b8036 100644 --- a/web/modules/contrib/metatag/metatag_verification/metatag_verification.info.yml +++ b/web/modules/contrib/metatag/metatag_verification/metatag_verification.info.yml @@ -6,7 +6,7 @@ package: SEO dependencies: - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_verification/tests/src/Functional/MetatagVerificationTagsTest.php b/web/modules/contrib/metatag/metatag_verification/tests/src/Functional/MetatagVerificationTagsTest.php index 4ebc2882e..9e01deb5d 100644 --- a/web/modules/contrib/metatag/metatag_verification/tests/src/Functional/MetatagVerificationTagsTest.php +++ b/web/modules/contrib/metatag/metatag_verification/tests/src/Functional/MetatagVerificationTagsTest.php @@ -11,6 +11,13 @@ */ class MetatagVerificationTagsTest extends MetatagTagsTestBase { + /** + * {@inheritdoc} + */ + protected static $modules = [ + 'metatag_verification', + ]; + /** * {@inheritdoc} */ @@ -23,17 +30,9 @@ class MetatagVerificationTagsTest extends MetatagTagsTestBase { 'pinterest', 'pocket', 'yandex', - 'zoom_domain_verification' + 'zoom_domain_verification', ]; - /** - * {@inheritdoc} - */ - protected function setUp() { - parent::$modules[] = 'metatag_verification'; - parent::setUp(); - } - /** * Each of these meta tags has a different tag name vs its internal name. */ diff --git a/web/modules/contrib/metatag/metatag_views/metatag_views.info.yml b/web/modules/contrib/metatag/metatag_views/metatag_views.info.yml index eb0f40ff7..66c98dd3a 100644 --- a/web/modules/contrib/metatag/metatag_views/metatag_views.info.yml +++ b/web/modules/contrib/metatag/metatag_views/metatag_views.info.yml @@ -7,7 +7,7 @@ dependencies: - metatag:metatag - drupal:views -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_views/tests/src/Functional/MetatagViewsBasicsTest.php b/web/modules/contrib/metatag/metatag_views/tests/src/Functional/MetatagViewsBasicsTest.php index 6757e5c3e..728295d4a 100644 --- a/web/modules/contrib/metatag/metatag_views/tests/src/Functional/MetatagViewsBasicsTest.php +++ b/web/modules/contrib/metatag/metatag_views/tests/src/Functional/MetatagViewsBasicsTest.php @@ -17,7 +17,7 @@ class MetatagViewsBasicsTest extends BrowserTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // Modules for core functionality. 'block', 'field', diff --git a/web/modules/contrib/metatag/src/Form/MetatagDefaultsForm.php b/web/modules/contrib/metatag/src/Form/MetatagDefaultsForm.php index bbbbc88d4..98212411d 100644 --- a/web/modules/contrib/metatag/src/Form/MetatagDefaultsForm.php +++ b/web/modules/contrib/metatag/src/Form/MetatagDefaultsForm.php @@ -117,6 +117,9 @@ public function form(array $form, FormStateInterface $form_state) { $token_types = empty($default_type) ? [] : [explode('__', $default_type)[0]]; + // Add the token browser at the top. + $form += $this->metatagToken->tokenBrowser($token_types); + // If this is a new Metatag defaults, then list available bundles. if ($metatag_defaults->isNew()) { $options = $this->getAvailableBundles(); diff --git a/web/modules/contrib/metatag/src/MetatagManager.php b/web/modules/contrib/metatag/src/MetatagManager.php index 53399bc9a..18cac1947 100644 --- a/web/modules/contrib/metatag/src/MetatagManager.php +++ b/web/modules/contrib/metatag/src/MetatagManager.php @@ -553,9 +553,9 @@ public function generateRawElements(array $tags, $entity = NULL, BubbleableMetad array_multisort($group, SORT_ASC, $weight, SORT_ASC, $metatag_tags); $ordered_tags = []; - foreach ($metatag_tags as $metatag) { - if (isset($tags[$metatag['id']])) { - $ordered_tags[$metatag['id']] = $tags[$metatag['id']]; + foreach ($metatag_tags as $id => $metatag) { + if (isset($tags[$id])) { + $ordered_tags[$id] = $tags[$id]; } } diff --git a/web/modules/contrib/metatag/src/Plugin/metatag/Tag/Description.php b/web/modules/contrib/metatag/src/Plugin/metatag/Tag/Description.php index 0c2ba09a6..ee2866ed0 100644 --- a/web/modules/contrib/metatag/src/Plugin/metatag/Tag/Description.php +++ b/web/modules/contrib/metatag/src/Plugin/metatag/Tag/Description.php @@ -19,14 +19,5 @@ * ) */ class Description extends MetaNameBase { - - /** - * {@inheritdoc} - */ - public function form(array $element = []) { - $form = parent::form($element); - $form['#maxlength'] = 320; - return $form; - } - + // Nothing here yet. Just a placeholder class for a plugin. } diff --git a/web/modules/contrib/metatag/src/Plugin/metatag/Tag/MetaNameBase.php b/web/modules/contrib/metatag/src/Plugin/metatag/Tag/MetaNameBase.php index 1c46c9a5f..da0061358 100644 --- a/web/modules/contrib/metatag/src/Plugin/metatag/Tag/MetaNameBase.php +++ b/web/modules/contrib/metatag/src/Plugin/metatag/Tag/MetaNameBase.php @@ -265,7 +265,7 @@ public function form(array $element = []) { '#type' => $this->isLong() ? 'textarea' : 'textfield', '#title' => $this->label(), '#default_value' => $this->value(), - '#maxlength' => 255, + '#maxlength' => 1024, '#required' => isset($element['#required']) ? $element['#required'] : FALSE, '#description' => $this->description(), '#element_validate' => [[get_class($this), 'validateTag']], diff --git a/web/modules/contrib/metatag/src/Plugin/metatag/Tag/Robots.php b/web/modules/contrib/metatag/src/Plugin/metatag/Tag/Robots.php index bd333e0ff..492546a67 100644 --- a/web/modules/contrib/metatag/src/Plugin/metatag/Tag/Robots.php +++ b/web/modules/contrib/metatag/src/Plugin/metatag/Tag/Robots.php @@ -69,28 +69,36 @@ public function form(array $element = []) { 'index' => [ '#states' => [ 'disabled' => [ - ':input[name="robots[noindex]"]' => ['checked' => TRUE], + [':input[name="robots[noindex]"]' => ['checked' => TRUE]], + 'or', + [':input[name*="[robots][noindex]"]' => ['checked' => TRUE]], ], ], ], 'noindex' => [ '#states' => [ 'disabled' => [ - ':input[name="robots[index]"]' => ['checked' => TRUE], + [':input[name="robots[index]"]' => ['checked' => TRUE]], + 'or', + [':input[name*="[robots][index]"]' => ['checked' => TRUE]], ], ], ], 'follow' => [ '#states' => [ 'disabled' => [ - ':input[name="robots[nofollow]"]' => ['checked' => TRUE], + [':input[name="robots[nofollow]"]' => ['checked' => TRUE]], + 'or', + [':input[name*="[robots][nofollow]"]' => ['checked' => TRUE]], ], ], ], 'nofollow' => [ '#states' => [ 'disabled' => [ - ':input[name="robots[follow]"]' => ['checked' => TRUE], + [':input[name="robots[follow]"]' => ['checked' => TRUE]], + 'or', + [':input[name*="[robots][follow]"]' => ['checked' => TRUE]], ], ], ], diff --git a/web/modules/contrib/metatag/src/Plugin/migrate/process/d6/NodewordsEntities.php b/web/modules/contrib/metatag/src/Plugin/migrate/process/d6/NodewordsEntities.php index 4121c442e..b6544d1b5 100644 --- a/web/modules/contrib/metatag/src/Plugin/migrate/process/d6/NodewordsEntities.php +++ b/web/modules/contrib/metatag/src/Plugin/migrate/process/d6/NodewordsEntities.php @@ -261,8 +261,6 @@ public function tagsMap() { // 'hreflang_' . $langcode => 'hreflang_per_language', // From metatag_mobile.metatag.inc: 'alternate_handheld' => 'alternate_handheld', - // @todo https://www.drupal.org/project/metatag/issues/3077781 - // 'amphtml' => '', 'android-app-link-alternative' => 'android_app_link_alternative', 'android-manifest' => 'android_manifest', 'apple-itunes-app' => 'apple_itunes_app', diff --git a/web/modules/contrib/metatag/src/Plugin/migrate/process/d7/MetatagEntities.php b/web/modules/contrib/metatag/src/Plugin/migrate/process/d7/MetatagEntities.php index c5df768f8..d8ea72399 100644 --- a/web/modules/contrib/metatag/src/Plugin/migrate/process/d7/MetatagEntities.php +++ b/web/modules/contrib/metatag/src/Plugin/migrate/process/d7/MetatagEntities.php @@ -247,8 +247,6 @@ protected function tagsMap() { // 'hreflang_' . $langcode => 'hreflang_per_language', // From metatag_mobile.metatag.inc: 'alternate_handheld' => 'alternate_handheld', - // @todo https://www.drupal.org/project/metatag/issues/3077781 - // 'amphtml' => '', 'android-app-link-alternative' => 'android_app_link_alternative', 'android-manifest' => 'android_manifest', 'apple-itunes-app' => 'apple_itunes_app', diff --git a/web/modules/contrib/metatag/tests/modules/metatag_test_custom_route/metatag_test_custom_route.info.yml b/web/modules/contrib/metatag/tests/modules/metatag_test_custom_route/metatag_test_custom_route.info.yml index dc263b855..9d53e1776 100644 --- a/web/modules/contrib/metatag/tests/modules/metatag_test_custom_route/metatag_test_custom_route.info.yml +++ b/web/modules/contrib/metatag/tests/modules/metatag_test_custom_route/metatag_test_custom_route.info.yml @@ -6,7 +6,7 @@ package: Testing dependencies: - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/tests/modules/metatag_test_integration/metatag_test_integration.info.yml b/web/modules/contrib/metatag/tests/modules/metatag_test_integration/metatag_test_integration.info.yml index ac185d1e1..faf3cf056 100644 --- a/web/modules/contrib/metatag/tests/modules/metatag_test_integration/metatag_test_integration.info.yml +++ b/web/modules/contrib/metatag/tests/modules/metatag_test_integration/metatag_test_integration.info.yml @@ -5,7 +5,7 @@ package: Testing dependencies: - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/tests/modules/metatag_test_tag/metatag_test_tag.info.yml b/web/modules/contrib/metatag/tests/modules/metatag_test_tag/metatag_test_tag.info.yml index 94ea37134..12d764ca3 100644 --- a/web/modules/contrib/metatag/tests/modules/metatag_test_tag/metatag_test_tag.info.yml +++ b/web/modules/contrib/metatag/tests/modules/metatag_test_tag/metatag_test_tag.info.yml @@ -6,7 +6,7 @@ package: Testing dependencies: - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/tests/src/Functional/DefaultTags.php b/web/modules/contrib/metatag/tests/src/Functional/DefaultTags.php index 53abe27dd..6375b2530 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/DefaultTags.php +++ b/web/modules/contrib/metatag/tests/src/Functional/DefaultTags.php @@ -17,7 +17,7 @@ class DefaultTags extends BrowserTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // Modules for core functionality. 'node', 'taxonomy', @@ -153,7 +153,7 @@ public function testUserLoginPages() { // Check the meta tags. $xpath = $this->xpath("//link[@rel='canonical']"); - $this->assertNotEqual((string) $xpath[0]->getAttribute('href'), $front_url); + $this->assertNotEquals((string) $xpath[0]->getAttribute('href'), $front_url); self::assertEquals((string) $xpath[0]->getAttribute('href'), $this_page_url); } } diff --git a/web/modules/contrib/metatag/tests/src/Functional/DisabledDefaultTags.php b/web/modules/contrib/metatag/tests/src/Functional/DisabledDefaultTags.php index 66817a4ec..52a23c189 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/DisabledDefaultTags.php +++ b/web/modules/contrib/metatag/tests/src/Functional/DisabledDefaultTags.php @@ -17,7 +17,7 @@ class DisabledDefaultTags extends BrowserTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // Modules for core functionality. 'node', 'taxonomy', diff --git a/web/modules/contrib/metatag/tests/src/Functional/EnsureDevelWebProfilerWorks.php b/web/modules/contrib/metatag/tests/src/Functional/EnsureDevelWebProfilerWorks.php new file mode 100644 index 000000000..901dc0d04 --- /dev/null +++ b/web/modules/contrib/metatag/tests/src/Functional/EnsureDevelWebProfilerWorks.php @@ -0,0 +1,36 @@ +<?php + +namespace Drupal\Tests\metatag\Functional; + +/** + * Verify that enabling WebProfiler won't cause the site to blow up. + * + * @group metatag + */ +class EnsureDevelWebProfilerWorks extends EnsureDevelWorks { + + /** + * {@inheritdoc} + */ + public static $modules = [ + // Modules for core functionality. + 'node', + 'field', + 'field_ui', + 'user', + + // Contrib dependencies. + 'token', + + // This module. + 'metatag', + + // Use the custom route to verify the site works. + 'metatag_test_custom_route', + + // The modules to test. + 'devel', + 'webprofiler', + ]; + +} diff --git a/web/modules/contrib/metatag/tests/src/Functional/EnsureDevelWorks.php b/web/modules/contrib/metatag/tests/src/Functional/EnsureDevelWorks.php new file mode 100644 index 000000000..7fb43a271 --- /dev/null +++ b/web/modules/contrib/metatag/tests/src/Functional/EnsureDevelWorks.php @@ -0,0 +1,63 @@ +<?php + +namespace Drupal\Tests\metatag\Functional; + +use Drupal\Tests\BrowserTestBase; + +/** + * Verify that enabling Devel won't cause the site to blow up. + * + * @group metatag + */ +class EnsureDevelWorks extends BrowserTestBase { + + // Contains helper methods. + use MetatagHelperTrait; + + /** + * {@inheritdoc} + */ + protected $defaultTheme = 'stark'; + + /** + * {@inheritdoc} + */ + public static $modules = [ + // Modules for core functionality. + 'node', + 'field', + 'field_ui', + 'user', + + // Contrib dependencies. + 'token', + + // This module. + 'metatag', + + // Use the custom route to verify the site works. + 'metatag_test_custom_route', + + // The modules to test. + 'devel', + ]; + + /** + * Load the custom route, make sure something is output. + */ + public function testCustomRoute() { + $this->drupalGet('metatag_test_custom_route'); + $this->assertResponse(200); + $this->assertText('Hello world!'); + } + + /** + * Make sure that the system still works when some example content exists. + */ + public function testNode() { + $node = $this->createContentTypeNode(); + $this->drupalGet($node->toUrl()); + $this->assertResponse(200); + } + +} diff --git a/web/modules/contrib/metatag/tests/src/Functional/MaintenanceMode.php b/web/modules/contrib/metatag/tests/src/Functional/MaintenanceMode.php index 680f05da9..1bd3cd8f0 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MaintenanceMode.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MaintenanceMode.php @@ -18,7 +18,7 @@ class MaintenanceMode extends BrowserTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // Modules for core functionality. 'node', 'field', @@ -43,10 +43,11 @@ class MaintenanceMode extends BrowserTestBase { public function testUser1() { // Load the user 1 profile page. $this->drupalGet('/user/1'); + $session = $this->assertSession(); // Confirm the page title is correct. - $this->assertRaw('<title>Access denied | '); - $this->assertNoRaw('<title>admin | '); - $this->assertNoRaw('<title>Site under maintenance | '); + $session->responseContains('<title>Access denied | '); + $session->responseNotContains('<title>admin | '); + $session->responseNotContains('<title>Site under maintenance | '); // Put the site into maintenance mode. \Drupal::state()->set('system.maintenance_mode', TRUE); @@ -55,9 +56,9 @@ public function testUser1() { // Load the user 1 profile page again. $this->drupalGet('/user/1'); // Confirm the page title has changed. - $this->assertNoRaw('<title>Access denied | '); - $this->assertNoRaw('<title>admin | '); - $this->assertRaw('<title>Site under maintenance | '); + $session->responseNotContains('<title>Access denied | '); + $session->responseNotContains('<title>admin | '); + $session->responseContains('<title>Site under maintenance | '); } } diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagAdminTest.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagAdminTest.php index 79e0e292a..867e0c305 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MetatagAdminTest.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagAdminTest.php @@ -20,7 +20,7 @@ class MetatagAdminTest extends BrowserTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // Core modules. // @see testAvailableConfigEntities 'block', @@ -85,77 +85,77 @@ public function testDefaults() { // Check that the user can see the list of metatag defaults. $this->drupalGet('admin/config/search/metatag'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); // Check that the Global defaults were created. - $this->assertLinkByHref('admin/config/search/metatag/global', 0, $this->t('Global defaults were created on installation.')); + $session->linkByHrefExists('admin/config/search/metatag/global'); // Check that Global and entity defaults can't be deleted. - $this->assertNoLinkByHref('admin/config/search/metatag/global/delete', 0, $this->t("Global defaults can't be deleted")); - $this->assertNoLinkByHref('admin/config/search/metatag/node/delete', 0, $this->t("Entity defaults can't be deleted")); + $session->linkByHrefNotExists('admin/config/search/metatag/global/delete'); + $session->linkByHrefNotExists('admin/config/search/metatag/node/delete'); // Check that the module defaults were injected into the Global config // entity. $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $this->assertFieldById('edit-title', $metatag_defaults->get('title'), $this->t('Metatag defaults were injected into the Global configuration entity.')); - // Update the Global defaults and test them. $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $values = [ 'title' => 'Test title', 'description' => 'Test description', ]; $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText('Saved the Global Metatag defaults.'); + $session->pageTextContains('Saved the Global Metatag defaults.'); $this->drupalGet('hit-a-404'); - $this->assertSession()->statusCodeEquals(404); + $session->statusCodeEquals(404); foreach ($values as $metatag => $value) { - $this->assertRaw($value, $this->t('Updated metatag @tag was found in the HEAD section of the page.', ['@tag' => $metatag])); + $session->responseContains($value, $this->t('Updated metatag @tag was found in the HEAD section of the page.', ['@tag' => $metatag])); } // Check that tokens are processed. $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $values = [ 'title' => '[site:name] | Test title', 'description' => '[site:name] | Test description', ]; $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText('Saved the Global Metatag defaults.'); + $session->pageTextContains('Saved the Global Metatag defaults.'); drupal_flush_all_caches(); $this->drupalGet('hit-a-404'); - $this->assertSession()->statusCodeEquals(404); + $session->statusCodeEquals(404); foreach ($values as $metatag => $value) { $processed_value = \Drupal::token()->replace($value); - $this->assertRaw($processed_value, $this->t('Processed token for metatag @tag was found in the HEAD section of the page.', ['@tag' => $metatag])); + $session->responseContains($processed_value, $this->t('Processed token for metatag @tag was found in the HEAD section of the page.', ['@tag' => $metatag])); } // Test the Robots plugin. $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $robots_values = ['index', 'follow', 'noydir']; $values = []; foreach ($robots_values as $value) { $values['robots[' . $value . ']'] = TRUE; } $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText('Saved the Global Metatag defaults.'); + $session->pageTextContains('Saved the Global Metatag defaults.'); drupal_flush_all_caches(); // Trigger a 404 request. $this->drupalGet('hit-a-404'); - $this->assertSession()->statusCodeEquals(404); + $session->statusCodeEquals(404); $robots_value = implode(', ', $robots_values); - $this->assertRaw($robots_value, $this->t('Robots metatag has the expected values.')); + $session->responseContains($robots_value, $this->t('Robots metatag has the expected values.')); // Test reverting global configuration to its defaults. $this->drupalGet('admin/config/search/metatag/global/revert'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $this->drupalPostForm(NULL, [], 'Revert'); - $this->assertText('Reverted Global defaults.'); - $this->assertText($default_title, 'Global title was reverted to its default value.'); + $session->pageTextContains('Reverted Global defaults.'); + $session->pageTextContains($default_title); $this->drupalLogout(); } @@ -174,10 +174,11 @@ public function testAvailableConfigEntities() { // Load the default-add page. $this->drupalGet('admin/config/search/metatag/add'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); // Confirm the 'type' field exists. - $this->assertFieldByName('id'); + $session->fieldExists('id'); // Compile a list of entities from the list. $options = $this->cssSelect('select[name="id"] option'); @@ -208,41 +209,42 @@ public function testSpecialPages() { // Adjust the front page and test it. $this->drupalGet('admin/config/search/metatag/front'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $values = [ 'description' => 'Front page description', ]; $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText('Saved the Front page Metatag defaults.'); + $session->pageTextContains('Saved the Front page Metatag defaults.'); $this->drupalGet('<front>'); - $this->assertSession()->statusCodeEquals(200); - $this->assertRaw($values['description'], $this->t('Front page defaults are used at the front page.')); + $session->statusCodeEquals(200); + $session->responseContains($values['description'], $this->t('Front page defaults are used at the front page.')); // Adjust the 403 page and test it. $this->drupalGet('admin/config/search/metatag/403'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $values = [ 'description' => '403 page description.', ]; $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText('Saved the 403 access denied Metatag defaults.'); + $session->pageTextContains('Saved the 403 access denied Metatag defaults.'); $this->drupalLogout(); $this->drupalGet('admin/config/search/metatag'); - $this->assertSession()->statusCodeEquals(403); - $this->assertRaw($values['description'], $this->t('403 page defaults are used at 403 pages.')); + $session->statusCodeEquals(403); + $session->responseContains($values['description'], $this->t('403 page defaults are used at 403 pages.')); // Adjust the 404 page and test it. $this->drupalLogin($account); $this->drupalGet('admin/config/search/metatag/404'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $values = [ 'description' => '404 page description.', ]; $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText('Saved the 404 page not found Metatag defaults.'); + $session->pageTextContains('Saved the 404 page not found Metatag defaults.'); $this->drupalGet('foo'); - $this->assertSession()->statusCodeEquals(404); - $this->assertRaw($values['description'], $this->t('404 page defaults are used at 404 pages.')); + $session->statusCodeEquals(404); + $session->responseContains($values['description'], $this->t('404 page defaults are used at 404 pages.')); $this->drupalLogout(); } @@ -265,13 +267,14 @@ public function testOverrides() { // Update the Metatag Node defaults. $this->drupalGet('admin/config/search/metatag/node'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $values = [ 'title' => 'Test title for a node.', 'description' => 'Test description for a node.', ]; $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText('Saved the Content Metatag defaults.'); + $session->pageTextContains('Saved the Content Metatag defaults.'); // Create a test node. $node = $this->drupalCreateNode([ @@ -281,32 +284,32 @@ public function testOverrides() { // Check that the new values are found in the response. $this->drupalGet('node/' . $node->id()); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); foreach ($values as $metatag => $value) { - $this->assertRaw($value, $this->t('Node metatag @tag overrides Global defaults.', ['@tag' => $metatag])); + $session->responseContains($value, $this->t('Node metatag @tag overrides Global defaults.', ['@tag' => $metatag])); } // Check that when the node defaults don't define a metatag, the Global one // is used. // First unset node defaults. $this->drupalGet('admin/config/search/metatag/node'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $values = [ 'title' => '', 'description' => '', ]; $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText('Saved the Content Metatag defaults.'); + $session->pageTextContains('Saved the Content Metatag defaults.'); // Then, set global ones. $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $values = [ 'title' => 'Global title', 'description' => 'Global description', ]; $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText('Saved the Global Metatag defaults.'); + $session->pageTextContains('Saved the Global Metatag defaults.'); // Next, test that global defaults are rendered since node ones are empty. // We are creating a new node as doing a get on the previous one would @@ -319,21 +322,21 @@ public function testOverrides() { 'type' => 'article', ]); $this->drupalGet('node/' . $node->id()); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); foreach ($values as $metatag => $value) { - $this->assertRaw($value, $this->t('Found global @tag tag as Node does not set it.', ['@tag' => $metatag])); + $session->responseContains($value, $this->t('Found global @tag tag as Node does not set it.', ['@tag' => $metatag])); } // Now create article overrides and then test them. $this->drupalGet('admin/config/search/metatag/add'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $values = [ 'id' => 'node__article', 'title' => 'Article title override', 'description' => 'Article description override', ]; $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText(strip_tags($this->t('Created the %label Metatag defaults.', ['%label' => 'Content: Article']))); + $session->pageTextContains(strip_tags('Created the Content: Article Metatag defaults.')); // Confirm the fields load properly on the node/add/article page. $node = $this->drupalCreateNode([ @@ -341,17 +344,17 @@ public function testOverrides() { 'type' => 'article', ]); $this->drupalGet('node/' . $node->id()); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); unset($values['id']); foreach ($values as $metatag => $value) { - $this->assertRaw($value, $this->t('Found bundle override for tag @tag.', ['@tag' => $metatag])); + $session->responseContains($value, $this->t('Found bundle override for tag @tag.', ['@tag' => $metatag])); } // Test deleting the article defaults. $this->drupalGet('admin/config/search/metatag/node__article/delete'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $this->drupalPostForm(NULL, [], 'Delete'); - $this->assertText($this->t('Deleted @label defaults.', ['@label' => 'Content: Article'])); + $session->pageTextContains('Deleted Content: Article defaults.'); } /** @@ -377,7 +380,8 @@ public function testEntityDefaultInheritence() { // Add a Metatag field to the Article content type. $this->drupalGet('admin/structure/types/manage/article/fields/add-field'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $edit = [ 'new_storage_type' => 'metatag', 'label' => 'Meta tags', @@ -385,33 +389,33 @@ public function testEntityDefaultInheritence() { ]; $this->drupalPostForm(NULL, $edit, $this->t('Save and continue')); $this->drupalPostForm(NULL, [], $this->t('Save field settings')); - $this->assertText(strip_tags($this->t('Updated field %label field settings.', ['%label' => 'Meta tags']))); + $session->pageTextContains(strip_tags('Updated field Meta tags field settings.')); $this->drupalPostForm(NULL, [], $this->t('Save settings')); - $this->assertText(strip_tags($this->t('Saved %label configuration.', ['%label' => 'Meta tags']))); + $session->pageTextContains(strip_tags('Saved Meta tags configuration.')); // Try creating an article, confirm the fields are present. This should be // the node default values that are shown. $this->drupalGet('node/add/article'); - $this->assertSession()->statusCodeEquals(200); - $this->assertFieldByName('field_meta_tags[0][basic][title]', '[node:title] | [site:name]'); - $this->assertFieldByName('field_meta_tags[0][basic][description]', '[node:summary]'); + $session->statusCodeEquals(200); + $session->fieldValueEquals('field_meta_tags[0][basic][title]', '[node:title] | [site:name]'); + $session->fieldValueEquals('field_meta_tags[0][basic][description]', '[node:summary]'); // Customize the Article content type defaults. $this->drupalGet('admin/config/search/metatag/add'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $values = [ 'id' => 'node__article', 'title' => 'Article title override', 'description' => 'Article description override', ]; $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText(strip_tags($this->t('Created the %label Metatag defaults.', ['%label' => 'Content: Article']))); + $session->pageTextContains(strip_tags('Created the Content: Article Metatag defaults.')); // Try creating an article, this time with the overridden defaults. $this->drupalGet('node/add/article'); - $this->assertSession()->statusCodeEquals(200); - $this->assertFieldByName('field_meta_tags[0][basic][title]', 'Article title override'); - $this->assertFieldByName('field_meta_tags[0][basic][description]', 'Article description override'); + $session->statusCodeEquals(200); + $session->fieldValueEquals('field_meta_tags[0][basic][title]', 'Article title override'); + $session->fieldValueEquals('field_meta_tags[0][basic][description]', 'Article description override'); } /** @@ -422,6 +426,7 @@ public function testDefaultProtected() { $permissions = ['administer site configuration', 'administer meta tags']; $account = $this->drupalCreateUser($permissions); $this->drupalLogin($account); + $session = $this->assertSession(); // Add default metatag for Articles. $edit = [ @@ -431,25 +436,25 @@ public function testDefaultProtected() { // Check that protected defaults contains "Revert" link instead of "Delete". foreach (MetatagManager::protectedDefaults() as $protected) { - $this->assertLinkByHref('/admin/config/search/metatag/' . $protected); - $this->assertLinkByHref('/admin/config/search/metatag/' . $protected . '/revert'); - $this->assertNoLinkByHref('/admin/config/search/metatag/' . $protected . '/delete'); + $session->linkByHrefExists('/admin/config/search/metatag/' . $protected); + $session->linkByHrefExists('/admin/config/search/metatag/' . $protected . '/revert'); + $session->linkByHrefNotExists('/admin/config/search/metatag/' . $protected . '/delete'); } // Confirm that non protected defaults can be deleted. - $this->assertLinkByHref('/admin/config/search/metatag/node__article'); - $this->assertNoLinkByHref('/admin/config/search/metatag/node__article/revert'); - $this->assertLinkByHref('/admin/config/search/metatag/node__article/delete'); + $session->linkByHrefExists('/admin/config/search/metatag/node__article'); + $session->linkByHrefNotExists('/admin/config/search/metatag/node__article/revert'); + $session->linkByHrefExists('/admin/config/search/metatag/node__article/delete'); // Visit each protected default page to confirm "Delete" button is hidden. foreach (MetatagManager::protectedDefaults() as $protected) { $this->drupalGet('/admin/config/search/metatag/' . $protected); - $this->assertNoLink('Delete'); + $session->linkNotExists('Delete'); } // Confirm that non protected defaults can be deleted. $this->drupalGet('/admin/config/search/metatag/node__article'); - $this->assertLink('Delete'); + $session->linkExists('Delete'); } /** @@ -457,16 +462,17 @@ public function testDefaultProtected() { */ public function testListPager() { $this->loginUser1(); + $session = $this->assertSession(); $this->drupalGet('admin/config/search/metatag'); - $this->assertSession()->statusCodeEquals(200); - $this->assertLinkByHref('/admin/config/search/metatag/global'); - $this->assertLinkByHref('/admin/config/search/metatag/front'); - $this->assertLinkByHref('/admin/config/search/metatag/403'); - $this->assertLinkByHref('/admin/config/search/metatag/404'); - $this->assertLinkByHref('/admin/config/search/metatag/node'); - $this->assertLinkByHref('/admin/config/search/metatag/taxonomy_term'); - $this->assertLinkByHref('/admin/config/search/metatag/user'); + $session->statusCodeEquals(200); + $session->linkByHrefExists('/admin/config/search/metatag/global'); + $session->linkByHrefExists('/admin/config/search/metatag/front'); + $session->linkByHrefExists('/admin/config/search/metatag/403'); + $session->linkByHrefExists('/admin/config/search/metatag/404'); + $session->linkByHrefExists('/admin/config/search/metatag/node'); + $session->linkByHrefExists('/admin/config/search/metatag/taxonomy_term'); + $session->linkByHrefExists('/admin/config/search/metatag/user'); // Create 50 vocabularies and generate metatag defaults for all of them. for ($i = 0; $i < 50; $i++) { @@ -479,27 +485,26 @@ public function testListPager() { // Reload the page. $this->drupalGet('admin/config/search/metatag'); - $this->assertLinkByHref('/admin/config/search/metatag/global'); - $this->assertLinkByHref('/admin/config/search/metatag/front'); - $this->assertLinkByHref('/admin/config/search/metatag/403'); - $this->assertLinkByHref('/admin/config/search/metatag/404'); - $this->assertLinkByHref('/admin/config/search/metatag/node'); - $this->assertLinkByHref('/admin/config/search/metatag/taxonomy_term'); + $session->linkByHrefExists('/admin/config/search/metatag/global'); + $session->linkByHrefExists('/admin/config/search/metatag/front'); + $session->linkByHrefExists('/admin/config/search/metatag/403'); + $session->linkByHrefExists('/admin/config/search/metatag/404'); + $session->linkByHrefExists('/admin/config/search/metatag/node'); + $session->linkByHrefExists('/admin/config/search/metatag/taxonomy_term'); // User entity not visible because it has been pushed to the next page. - $this->assertNoLinkByHref('/admin/config/search/metatag/user'); + $session->linkByHrefNotExists('/admin/config/search/metatag/user'); $this->clickLink('Next'); // Go to next page and confirm that parents are loaded and user us present. - $this->assertLinkByHref('/admin/config/search/metatag/global'); - $this->assertLinkByHref('/admin/config/search/metatag/taxonomy_term'); + $session->linkByHrefExists('/admin/config/search/metatag/global'); + $session->linkByHrefExists('/admin/config/search/metatag/taxonomy_term'); // Main links not visible in the 2nd page. - $this->assertNoLinkByHref('/admin/config/search/metatag/front'); - $this->assertNoLinkByHref('/admin/config/search/metatag/403'); - $this->assertNoLinkByHref('/admin/config/search/metatag/404'); - $this->assertNoLinkByHref('/admin/config/search/metatag/node'); + $session->linkByHrefNotExists('/admin/config/search/metatag/front'); + $session->linkByHrefNotExists('/admin/config/search/metatag/403'); + $session->linkByHrefNotExists('/admin/config/search/metatag/404'); + $session->linkByHrefNotExists('/admin/config/search/metatag/node'); // User is present because was pushed to page 2. - $this->assertLinkByHref('/admin/config/search/metatag/user'); - + $session->linkByHrefExists('/admin/config/search/metatag/user'); } } diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagConfigTranslationTest.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagConfigTranslationTest.php index a3179c09e..43388a082 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MetatagConfigTranslationTest.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagConfigTranslationTest.php @@ -31,11 +31,9 @@ class MetatagConfigTranslationTest extends BrowserTestBase { protected $adminUser; /** - * Modules to enable. - * - * @var array + * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ 'metatag', 'language', 'config_translation', @@ -84,14 +82,15 @@ protected function setUp() { public function testConfigTranslationsExist() { // Ensure the config shows on the admin form. $this->drupalGet('admin/config/regional/config-translation'); - $this->assertSession()->statusCodeEquals(200); - $this->assertText($this->t('Metatag defaults')); + $session = $this->assertSession(); + $session->statusCodeEquals(200); + $session->pageTextContains('Metatag defaults'); // Load the main metatag_defaults config translation page. $this->drupalGet('admin/config/regional/config-translation/metatag_defaults'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // @todo Update this to confirm the H1 is loaded. - $this->assertRaw($this->t('Metatag defaults')); + $session->responseContains($this->t('Metatag defaults')); // Load all of the Metatag defaults. $defaults = \Drupal::configFactory()->listAll('metatag.metatag_defaults'); @@ -102,7 +101,7 @@ public function testConfigTranslationsExist() { // Confirm each of the configs is available on the translation form. foreach ($defaults as $config_name) { if ($config_entity = $config_manager->loadConfigEntityByName($config_name)) { - $this->assertText($config_entity->label()); + $session->pageTextContains($config_entity->label()); } } @@ -110,7 +109,7 @@ public function testConfigTranslationsExist() { foreach ($defaults as $config_name) { if ($config_entity = $config_manager->loadConfigEntityByName($config_name)) { $this->drupalGet('admin/config/search/metatag/' . $config_entity->id() . '/translate'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); } else { $this->error('Unable to load a Metatag default config: ' . $config_name); @@ -124,30 +123,31 @@ public function testConfigTranslationsExist() { public function testConfigTranslations() { // Add something to the Global config. $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $edit = [ 'title' => 'Test title', 'description' => 'Test description', ]; $this->drupalPostForm(NULL, $edit, $this->t('Save')); - $this->assertSession()->statusCodeEquals(200); - $this->assertText($this->t('Saved the Global Metatag defaults.')); + $session->statusCodeEquals(200); + $session->pageTextContains('Saved the Global Metatag defaults.'); // Confirm the config has languages available to translate into. $this->drupalGet('admin/config/search/metatag/global/translate'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // Load the translation form. $this->drupalGet('admin/config/search/metatag/global/translate/fr/add'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // Confirm the meta tag fields are shown on the form. Confirm the fields and // values separately to make it easier to pinpoint where the problem is if // one should fail. - $this->assertFieldByName('translation[config_names][metatag.metatag_defaults.global][tags][title]'); - $this->assertFieldByName('translation[config_names][metatag.metatag_defaults.global][tags][title]', $edit['title']); - $this->assertFieldByName('translation[config_names][metatag.metatag_defaults.global][tags][description]'); - $this->assertFieldByName('translation[config_names][metatag.metatag_defaults.global][tags][description]', $edit['description']); + $session->fieldExists('translation[config_names][metatag.metatag_defaults.global][tags][title]'); + $session->fieldValueEquals('translation[config_names][metatag.metatag_defaults.global][tags][title]', $edit['title']); + $session->fieldExists('translation[config_names][metatag.metatag_defaults.global][tags][description]'); + $session->fieldValueEquals('translation[config_names][metatag.metatag_defaults.global][tags][description]', $edit['description']); // Confirm the form can be saved correctly. $edit = [ @@ -155,8 +155,8 @@ public function testConfigTranslations() { 'translation[config_names][metatag.metatag_defaults.global][tags][description]' => 'Le description', ]; $this->drupalPostForm(NULL, $edit, $this->t('Save translation')); - $this->assertSession()->statusCodeEquals(200); - $this->assertText($this->t('Successfully saved French translation')); + $session->statusCodeEquals(200); + $session->pageTextContains('Successfully saved French translation'); // Delete the node metatag defaults to simplify the test. MetatagDefaults::load('node')->delete(); diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagCustomRouteTest.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagCustomRouteTest.php index bd3d2eaaa..7a426b2f6 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MetatagCustomRouteTest.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagCustomRouteTest.php @@ -18,7 +18,7 @@ class MetatagCustomRouteTest extends BrowserTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ 'node', // Dependencies. 'token', @@ -35,7 +35,6 @@ class MetatagCustomRouteTest extends BrowserTestBase { */ protected $defaultTheme = 'stark'; - /** * Run tests on the custom route. */ @@ -57,7 +56,7 @@ public function testCustomRoute() { $this->assertSession()->statusCodeEquals(200); $xpath = $this->xpath("//meta[@name='keywords']"); $this->assertCount(1, $xpath); - $this->assertEqual($xpath[0]->getAttribute('content'), 'test'); + $this->assertEquals('test', $xpath[0]->getAttribute('content')); } } diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldNodeTest.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldNodeTest.php index 46301daf0..24645aeda 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldNodeTest.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldNodeTest.php @@ -12,7 +12,7 @@ class MetatagFieldNodeTest extends MetatagFieldTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // Needed for token handling. 'token', diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldTermTest.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldTermTest.php index b6d2b58bc..9ffa9f7e8 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldTermTest.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldTermTest.php @@ -16,7 +16,7 @@ class MetatagFieldTermTest extends MetatagFieldTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // Needed for token handling. 'token', diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldTestBase.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldTestBase.php index 83dd14944..f84239fa1 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldTestBase.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldTestBase.php @@ -21,11 +21,9 @@ abstract class MetatagFieldTestBase extends BrowserTestBase { protected $profile = 'testing'; /** - * Modules to enable. - * - * @var array + * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // Needed for token handling. 'token', @@ -209,12 +207,13 @@ protected function addField() { public function testGlobalDefaultsInheritance() { // First we set global defaults. $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $global_values = [ 'metatag_test_tag' => 'Global description', ]; $this->drupalPostForm(NULL, $global_values, 'Save'); - $this->assertText('Saved the Global Metatag defaults.'); + $session->pageTextContains('Saved the Global Metatag defaults.'); // Add the field to this entity type. $this->addField(); @@ -222,8 +221,8 @@ public function testGlobalDefaultsInheritance() { // Now when we create an entity, global defaults are used to fill the form // fields. $this->drupalGet($this->entityAddPath); - $this->assertSession()->statusCodeEquals(200); - $this->assertFieldByName('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag'], $this->t('The metatag_test_tag field has the global default as the field default does not define it.')); + $session->statusCodeEquals(200); + $session->fieldValueEquals('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag']); } /** @@ -237,29 +236,30 @@ public function testEntityDefaultsInheritance() { // Set a global default. $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $global_values = [ 'metatag_test_tag' => 'Global description', ]; $this->drupalPostForm(NULL, $global_values, 'Save'); - $this->assertText(strip_tags($this->t('Saved the %label Metatag defaults.', ['%label' => $this->t('Global')]))); + $session->pageTextContains(strip_tags('Saved the Global Metatag defaults.')); // Set an entity default. $this->drupalGet('admin/config/search/metatag/' . $this->entityType); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $entity_values = [ 'metatag_test_tag' => 'Entity description', ]; $this->drupalPostForm(NULL, $entity_values, 'Save'); - $this->assertText(strip_tags($this->t('Saved the %label Metatag defaults.', ['%label' => $this->t($this->entityLabel)]))); + $session->pageTextContains(strip_tags("Saved the $this->entityLabel Metatag defaults.")); // Add the field to this entity type. $this->addField(); // Load the entity form for this entity type. $this->drupalGet($this->entityAddPath); - $this->assertSession()->statusCodeEquals(200); - $this->assertNoText('Fatal error'); + $session->statusCodeEquals(200); + $session->pageTextNotContains('Fatal error'); // Allow the fields to be customized if needed. $title = 'Barfoo'; @@ -272,8 +272,8 @@ public function testEntityDefaultsInheritance() { // If this entity type supports defaults then verify the global default is // not present but that the entity default *is* present. - $this->assertFieldByName('field_metatag[0][basic][metatag_test_tag]', $entity_values['metatag_test_tag']); - $this->assertNoFieldByName('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag']); + $session->fieldValueEquals('field_metatag[0][basic][metatag_test_tag]', $entity_values['metatag_test_tag']); + $session->fieldValueNotEquals('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag']); } /** @@ -291,8 +291,9 @@ public function testBundleDefaultsInheritance() { */ public function testFieldCanBeAdded() { $this->drupalGet($this->entityFieldAdminPath . '/add-field'); - $this->assertSession()->statusCodeEquals(200); - $this->assertRaw('<option value="metatag">' . $this->t('Meta tags') . '</option>'); + $session = $this->assertSession(); + $session->statusCodeEquals(200); + $session->responseContains('<option value="metatag">' . $this->t('Meta tags') . '</option>'); } /** @@ -304,9 +305,10 @@ public function testEntityFieldsAvailable() { // Load the entity's form. $this->drupalGet($this->entityAddPath); - $this->assertSession()->statusCodeEquals(200); - $this->assertNoText('Fatal error'); - $this->assertFieldByName('field_metatag[0][basic][metatag_test_tag]'); + $session = $this->assertSession(); + $session->statusCodeEquals(200); + $session->pageTextNotContains('Fatal error'); + $session->fieldExists('field_metatag[0][basic][metatag_test_tag]'); } /** @@ -317,29 +319,30 @@ public function testEntityFieldsAvailable() { public function testEntityFieldValuesOldEntity() { // Set a global default. $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $global_values = [ 'metatag_test_tag' => 'Global description', ]; $this->drupalPostForm(NULL, $global_values, 'Save'); - $this->assertText(strip_tags($this->t('Saved the %label Metatag defaults.', ['%label' => $this->t('Global')]))); + $session->pageTextContains(strip_tags('Saved the Global Metatag defaults.')); // Set an entity default if it's supported by the entity type. if ($this->entitySupportsDefaults) { $this->drupalGet('admin/config/search/metatag/' . $this->entityType); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $entity_values = [ 'metatag_test_tag' => 'Entity description', ]; $this->drupalPostForm(NULL, $entity_values, 'Save'); - $this->assertText(strip_tags($this->t('Saved the %label Metatag defaults.', ['%label' => $this->t($this->entityLabel)]))); + $session->pageTextContains(strip_tags("Saved the $this->entityLabel Metatag defaults.")); } // Load the entity form for this entity type. $title = 'Barfoo'; $this->drupalGet($this->entityAddPath); - $this->assertSession()->statusCodeEquals(200); - $this->assertNoText('Fatal error'); + $session->statusCodeEquals(200); + $session->pageTextNotContains('Fatal error'); // Allow the fields to be customized if needed. $edit = $this->entityDefaultValues(); @@ -363,16 +366,16 @@ public function testEntityFieldValuesOldEntity() { // Open the 'edit' form for the entity. $this->drupalGet($entity->toUrl('edit-form')); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // If this entity type supports defaults then verify the global default is // not present but that the entity default *is* present. if ($this->entitySupportsDefaults) { - $this->assertNoFieldByName('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag']); - $this->assertFieldByName('field_metatag[0][basic][metatag_test_tag]', $entity_values['metatag_test_tag']); + $session->fieldValueNotEquals('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag']); + $session->fieldValueEquals('field_metatag[0][basic][metatag_test_tag]', $entity_values['metatag_test_tag']); } else { - $this->assertFieldByName('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag']); + $session->fieldValueEquals('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag']); } // @todo Confirm the values output correctly. @@ -386,22 +389,23 @@ public function testEntityFieldValuesOldEntity() { public function testEntityFieldValuesNewEntity() { // Set a global default. $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $global_values = [ 'metatag_test_tag' => 'Global description', ]; $this->drupalPostForm(NULL, $global_values, 'Save'); - $this->assertText(strip_tags($this->t('Saved the %label Metatag defaults.', ['%label' => $this->t('Global')]))); + $session->pageTextContains(strip_tags('Saved the Global Metatag defaults.')); // Set an entity default if it's supported by the entity type. if ($this->entitySupportsDefaults) { $this->drupalGet('admin/config/search/metatag/' . $this->entityType); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $entity_values = [ 'metatag_test_tag' => 'Entity description', ]; $this->drupalPostForm(NULL, $entity_values, 'Save'); - $this->assertText(strip_tags($this->t('Saved the %label Metatag defaults.', ['%label' => $this->t($this->entityLabel)]))); + $session->pageTextContains(strip_tags("Saved the $this->entityLabel Metatag defaults.")); } // Add a field to the entity type. @@ -410,17 +414,17 @@ public function testEntityFieldValuesNewEntity() { // Load the entity form for this entity type. $title = 'Barfoo'; $this->drupalGet($this->entityAddPath); - $this->assertSession()->statusCodeEquals(200); - $this->assertNoText('Fatal error'); + $session->statusCodeEquals(200); + $session->pageTextNotContains('Fatal error'); // If this entity type supports defaults then verify the global default is // not present but that the entity default *is* present. if ($this->entitySupportsDefaults) { - $this->assertNoFieldByName('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag']); - $this->assertFieldByName('field_metatag[0][basic][metatag_test_tag]', $entity_values['metatag_test_tag']); + $session->fieldValueNotEquals('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag']); + $session->fieldValueEquals('field_metatag[0][basic][metatag_test_tag]', $entity_values['metatag_test_tag']); } else { - $this->assertFieldByName('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag']); + $session->fieldValueEquals('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag']); } // Allow the fields to be customized if needed. @@ -442,16 +446,16 @@ public function testEntityFieldValuesNewEntity() { // @todo Confirm the values output correctly. // Open the 'edit' form for the entity. $this->drupalGet($entity->toUrl('edit-form')); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // If this entity type supports defaults then verify the global default is // not present but that the entity default *is* present. if ($this->entitySupportsDefaults) { - $this->assertNoFieldByName('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag']); - $this->assertFieldByName('field_metatag[0][basic][metatag_test_tag]', $entity_values['metatag_test_tag']); + $session->fieldValueNotEquals('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag']); + $session->fieldValueEquals('field_metatag[0][basic][metatag_test_tag]', $entity_values['metatag_test_tag']); } else { - $this->assertFieldByName('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag']); + $session->fieldValueEquals('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag']); } // @todo Confirm the values output correctly. @@ -468,8 +472,9 @@ public function tofixTestEntityField() { // Create a test entity. $this->drupalGet($this->entityAddPath); - $this->assertSession()->statusCodeEquals(200); - $this->assertNoText('Fatal error'); + $session = $this->assertSession(); + $session->statusCodeEquals(200); + $session->pageTextNotContains('Fatal error'); $edit = $this->entityDefaultValues($title) + [ 'field_metatag[0][basic][metatag_test_tag]' => 'Kilimanjaro', ]; @@ -483,10 +488,10 @@ public function tofixTestEntityField() { // Make sure tags that have a field value but no default value still show // up. $this->drupalGet($entity->toUrl()); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $elements = $this->cssSelect('meta[name=metatag_test_tag]'); $this->assertCount(1, $elements, 'Found keywords metatag_test_tag from defaults'); - $this->assertEqual((string) $elements[0]['content'], 'Kilimanjaro', 'Field value for metatag_test_tag found when no default set.'); + $this->assertEquals((string) $elements[0]['content'], 'Kilimanjaro', 'Field value for metatag_test_tag found when no default set.'); // @todo This should not be required, but meta tags does not invalidate // cache upon setting globals. @@ -494,18 +499,18 @@ public function tofixTestEntityField() { // Update the Global defaults and test them. $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $values = [ 'metatag_test_tag' => 'Purple monkey dishwasher', ]; $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText('Saved the Global Metatag defaults.'); + $session->pageTextContains('Saved the Global Metatag defaults.'); $this->drupalGet($entity->toUrl()); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $elements = $this->cssSelect('meta[name=metatag_test_tag]'); $this->assertCount(1, $elements, 'Found test metatag from defaults'); $this->verbose('<pre>' . print_r($elements, TRUE) . '</pre>'); - $this->assertEqual((string) $elements[0]['content'], $values['metatag_test_tag']); + $this->assertEquals((string) $elements[0]['content'], $values['metatag_test_tag']); } } diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldTestTest.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldTestTest.php index 41ca27ab4..fb54470a9 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldTestTest.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldTestTest.php @@ -12,7 +12,7 @@ class MetatagFieldTestTest extends MetatagFieldTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // Needed for token handling. 'token', diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldUserTest.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldUserTest.php index 61c31715c..baa76318a 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldUserTest.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldUserTest.php @@ -12,7 +12,7 @@ class MetatagFieldUserTest extends MetatagFieldTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // Needed for token handling. 'token', diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagForumTest.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagForumTest.php index 860e875d4..a0b1c96df 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MetatagForumTest.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagForumTest.php @@ -17,7 +17,7 @@ class MetatagForumTest extends BrowserTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ 'token', 'metatag', 'node', @@ -71,7 +71,8 @@ protected function setUp() { */ public function testForumPost() { $this->drupalGet('node/add/forum'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $edit = [ 'title[0][value]' => 'Testing forums', 'taxonomy_forums' => 1, @@ -79,8 +80,8 @@ public function testForumPost() { ]; $save_label = (floatval(\Drupal::VERSION) <= 8.3) ? $this->t('Save and publish') : $this->t('Save'); $this->drupalPostForm(NULL, $edit, $save_label); - $this->assertSession()->statusCodeEquals(200); - $this->assertText($this->t('@type @title has been created.', ['@type' => $this->t('Forum topic'), '@title' => 'Testing forums'])); + $session->statusCodeEquals(200); + $session->pageTextContains('Forum topic Testing forums has been created.'); } } diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagFrontpageTest.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagFrontpageTest.php index 50deeec34..ae839d1f7 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MetatagFrontpageTest.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagFrontpageTest.php @@ -18,7 +18,7 @@ class MetatagFrontpageTest extends BrowserTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ 'token', 'metatag', 'node', @@ -64,15 +64,16 @@ protected function setUp() { public function testFrontPageMetatagsEnabledConfig() { // Add something to the front page config. $this->drupalGet('admin/config/search/metatag/front'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $edit = [ 'title' => 'Test title', 'description' => 'Test description', 'keywords' => 'testing,keywords', ]; $this->drupalPostForm(NULL, $edit, $this->t('Save')); - $this->assertSession()->statusCodeEquals(200); - $this->assertText($this->t('Saved the Front page Metatag defaults.')); + $session->statusCodeEquals(200); + $session->pageTextContains('Saved the Front page Metatag defaults.'); // Testing front page metatags. $this->drupalGet('<front>'); @@ -88,7 +89,7 @@ public function testFrontPageMetatagsEnabledConfig() { $this->assertCount(1, $xpath, 'Exactly one ' . $metatag . ' meta tag found.'); $value = $xpath[0]->getAttribute('content'); } - $this->assertEqual($value, $metatag_value); + $this->assertEquals($value, $metatag_value); } $node_path = '/node/' . $this->nodeId; @@ -106,7 +107,7 @@ public function testFrontPageMetatagsEnabledConfig() { $this->assertCount(1, $xpath, 'Exactly one ' . $metatag . ' meta tag found.'); $value = $xpath[0]->getAttribute('content'); } - $this->assertEqual($value, $metatag_value); + $this->assertEquals($value, $metatag_value); } // Change the front page to a valid custom route. @@ -114,19 +115,19 @@ public function testFrontPageMetatagsEnabledConfig() { 'site_frontpage' => '/test-page', ]; $this->drupalGet('admin/config/system/site-information'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $this->drupalPostForm(NULL, $site_edit, $this->t('Save configuration')); - $this->assertText($this->t('The configuration options have been saved.'), 'The front page path has been saved.'); + $session->pageTextContains('The configuration options have been saved.'); return; // @todo Finish this? $this->drupalGet('test-page'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); foreach ($edit as $metatag => $metatag_value) { $xpath = $this->xpath("//meta[@name='" . $metatag . "']"); $this->assertCount(1, $xpath, 'Exactly one ' . $metatag . ' meta tag found.'); $value = $xpath[0]->getAttribute('content'); - $this->assertEqual($value, $metatag_value); + $this->assertEquals($value, $metatag_value); } } @@ -136,20 +137,21 @@ public function testFrontPageMetatagsEnabledConfig() { public function testFrontPageMetatagDisabledConfig() { // Disable front page metatag, enable node metatag & check. $this->drupalGet('admin/config/search/metatag/front/delete'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $this->drupalPostForm(NULL, [], $this->t('Delete')); - $this->assertSession()->statusCodeEquals(200); - $this->assertText($this->t('Deleted Front page defaults.')); + $session->statusCodeEquals(200); + $session->pageTextContains('Deleted Front page defaults.'); // Update the Metatag Node defaults. $this->drupalGet('admin/config/search/metatag/node'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $edit = [ 'title' => 'Test title for a node.', 'description' => 'Test description for a node.', ]; $this->drupalPostForm(NULL, $edit, 'Save'); - $this->assertText('Saved the Content Metatag defaults.'); + $session->pageTextContains('Saved the Content Metatag defaults.'); $this->drupalGet('<front>'); foreach ($edit as $metatag => $metatag_value) { $xpath = $this->xpath("//meta[@name='" . $metatag . "']"); @@ -163,32 +165,32 @@ public function testFrontPageMetatagDisabledConfig() { $this->assertCount(1, $xpath, 'Exactly one ' . $metatag . ' meta tag found.'); $value = $xpath[0]->getAttribute('content'); } - $this->assertEqual($value, $metatag_value); + $this->assertEquals($value, $metatag_value); } // Change the front page to a valid path. $this->drupalGet('admin/config/system/site-information'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $edit = [ 'site_frontpage' => '/test-page', ]; $this->drupalPostForm(NULL, $edit, $this->t('Save configuration')); - $this->assertText($this->t('The configuration options have been saved.'), 'The front page path has been saved.'); + $session->pageTextContains('The configuration options have been saved.'); // Front page is custom route. // Update the Metatag Node global. $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $edit = [ 'title' => 'Test title.', 'description' => 'Test description.', ]; $this->drupalPostForm(NULL, $edit, 'Save'); - $this->assertText('Saved the Global Metatag defaults.'); + $session->pageTextContains('Saved the Global Metatag defaults.'); // Test Metatags. $this->drupalGet('test-page'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); foreach ($edit as $metatag => $metatag_value) { $xpath = $this->xpath("//meta[@name='" . $metatag . "']"); if ($metatag == 'title') { @@ -201,7 +203,7 @@ public function testFrontPageMetatagDisabledConfig() { $this->assertCount(1, $xpath, 'Exactly one ' . $metatag . ' meta tag found.'); $value = $xpath[0]->getAttribute('content'); } - $this->assertEqual($value, $metatag_value); + $this->assertEquals($value, $metatag_value); } } diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagNodeTranslationTest.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagNodeTranslationTest.php index 8470d12f1..01b97cb6f 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MetatagNodeTranslationTest.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagNodeTranslationTest.php @@ -20,7 +20,7 @@ class MetatagNodeTranslationTest extends BrowserTestBase { * * @var array */ - public static $modules = [ + protected static $modules = [ 'content_translation', 'field_ui', 'metatag', @@ -101,45 +101,46 @@ public function testMetatagValueTranslation() { // Add a metatag field to the content type. $this->drupalGet('admin/structure/types'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $this->drupalGet('admin/structure/types/manage/metatag_node'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $edit = [ 'language_configuration[language_alterable]' => TRUE, 'language_configuration[content_translation]' => TRUE, ]; $this->drupalPostForm(NULL, $edit, $this->t('Save content type')); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $this->drupalGet('admin/structure/types/manage/metatag_node/fields/add-field'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $edit = [ 'label' => 'Meta tags', 'field_name' => 'meta_tags', 'new_storage_type' => 'metatag', ]; $this->drupalPostForm(NULL, $edit, $this->t('Save and continue')); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $this->drupalPostForm(NULL, [], $this->t('Save field settings')); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $edit = [ 'translatable' => TRUE, ]; $this->drupalPostForm(NULL, $edit, $this->t('Save settings')); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $this->drupalGet('admin/structure/types/manage/metatag_node/fields/node.metatag_node.field_meta_tags'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // Set up a node without explicit metatag description. This causes the // global default to be used, which contains a token (node:summary). The // token value should be correctly translated. // Load the node form. $this->drupalGet('node/add/metatag_node'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // Check the default values are correct. - $this->assertFieldByName('field_meta_tags[0][basic][title]', '[node:title] | [site:name]', 'Default title token is present.'); - $this->assertFieldByName('field_meta_tags[0][basic][description]', '[node:summary]', 'Default description token is present.'); + $session->fieldValueEquals('field_meta_tags[0][basic][title]', '[node:title] | [site:name]'); + $session->fieldValueEquals('field_meta_tags[0][basic][description]', '[node:summary]'); // Create a node. $edit = [ @@ -147,71 +148,71 @@ public function testMetatagValueTranslation() { 'body[0][value]' => 'French summary.', ]; $this->drupalPostForm(NULL, $edit, $save_label); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $xpath = $this->xpath("//meta[@name='description']"); $this->assertCount(1, $xpath, 'Exactly one description meta tag found.'); $value = $xpath[0]->getAttribute('content'); - $this->assertEqual($value, 'French summary.'); + $this->assertEquals($value, 'French summary.'); $this->drupalGet('node/1/translations/add/en/es'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // Check the default values are there. - $this->assertFieldByName('field_meta_tags[0][basic][title]', '[node:title] | [site:name]', 'Default title token is present.'); - $this->assertFieldByName('field_meta_tags[0][basic][description]', '[node:summary]', 'Default description token is present.'); + $session->fieldValueEquals('field_meta_tags[0][basic][title]', '[node:title] | [site:name]'); + $session->fieldValueEquals('field_meta_tags[0][basic][description]', '[node:summary]'); $edit = [ 'title[0][value]' => 'Node Español', 'body[0][value]' => 'Spanish summary.', ]; $this->drupalPostForm(NULL, $edit, $save_label_i18n); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $this->drupalGet('es/node/1'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $xpath = $this->xpath("//meta[@name='description']"); $this->assertCount(1, $xpath, 'Exactly one description meta tag found.'); $value = $xpath[0]->getAttribute('content'); - $this->assertEqual($value, 'Spanish summary.'); - $this->assertNotEqual($value, 'French summary.'); + $this->assertEquals($value, 'Spanish summary.'); + $this->assertNotEquals($value, 'French summary.'); $this->drupalGet('node/1/edit'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // Check the default values are there. - $this->assertFieldByName('field_meta_tags[0][basic][title]', '[node:title] | [site:name]', 'Default title token is present.'); - $this->assertFieldByName('field_meta_tags[0][basic][description]', '[node:summary]', 'Default description token is present.'); + $session->fieldValueEquals('field_meta_tags[0][basic][title]', '[node:title] | [site:name]'); + $session->fieldValueEquals('field_meta_tags[0][basic][description]', '[node:summary]'); // Set explicit values on the description metatag instead using the // defaults. $this->drupalGet('node/1/edit'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $edit = [ 'field_meta_tags[0][basic][description]' => 'Overridden French description.', ]; $this->drupalPostForm(NULL, $edit, $save_label_i18n); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $xpath = $this->xpath("//meta[@name='description']"); $this->assertCount(1, $xpath, 'Exactly one description meta tag found.'); $value = $xpath[0]->getAttribute('content'); - $this->assertEqual($value, 'Overridden French description.'); - $this->assertNotEqual($value, 'Spanish summary.'); - $this->assertNotEqual($value, 'French summary.'); + $this->assertEquals($value, 'Overridden French description.'); + $this->assertNotEquals($value, 'Spanish summary.'); + $this->assertNotEquals($value, 'French summary.'); $this->drupalGet('es/node/1/edit'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $edit = [ 'field_meta_tags[0][basic][description]' => 'Overridden Spanish description.', ]; $this->drupalPostForm(NULL, $edit, $save_label_i18n); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $xpath = $this->xpath("//meta[@name='description']"); $this->assertCount(1, $xpath, 'Exactly one description meta tag found.'); $value = $xpath[0]->getAttribute('content'); - $this->assertEqual($value, 'Overridden Spanish description.'); - $this->assertNotEqual($value, 'Spanish summary.'); - $this->assertNotEqual($value, 'French summary.'); + $this->assertEquals($value, 'Overridden Spanish description.'); + $this->assertNotEquals($value, 'Spanish summary.'); + $this->assertNotEquals($value, 'French summary.'); } } diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagStringTest.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagStringTest.php index 73c860dba..354297867 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MetatagStringTest.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagStringTest.php @@ -26,7 +26,7 @@ class MetatagStringTest extends BrowserTestBase { * * @var array */ - public static $modules = [ + protected static $modules = [ 'token', 'node', 'field_ui', @@ -128,34 +128,35 @@ public function checkConfig($string) { // Update the Global defaults and test them. $this->drupalGet('admin/config/search/metatag/front'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $edit = [ 'title' => $title_original, 'description' => $desc_original, ]; $this->drupalPostForm(NULL, $edit, 'Save'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $metatag_defaults = \Drupal::config('metatag.metatag_defaults.front'); $default_title = $metatag_defaults->get('tags')['title']; $default_description = $metatag_defaults->get('tags')['description']; // Make sure the title tag is stored correctly. - $this->assertEqual($title_original, $default_title, 'The title tag was stored in its original format.'); - $this->assertNotEqual($title_encoded, $default_title, 'The title tag was not stored in an encoded format.'); - $this->assertNotEqual($title_encodeded, $default_title, 'The title tag was not stored in a double-encoded format.'); + $this->assertEquals($title_original, $default_title, 'The title tag was stored in its original format.'); + $this->assertNotEquals($title_encoded, $default_title, 'The title tag was not stored in an encoded format.'); + $this->assertNotEquals($title_encodeded, $default_title, 'The title tag was not stored in a double-encoded format.'); // Make sure the description tag is stored correctly. - $this->assertEqual($desc_original, $default_description, 'The description tag was stored in its original format.'); - $this->assertNotEqual($desc_encoded, $default_description, 'The description tag was not stored in an encoded format.'); - $this->assertNotEqual($desc_encodeded, $default_description, 'The description tag was not stored in a double-encoded format.'); + $this->assertEquals($desc_original, $default_description, 'The description tag was stored in its original format.'); + $this->assertNotEquals($desc_encoded, $default_description, 'The description tag was not stored in an encoded format.'); + $this->assertNotEquals($desc_encodeded, $default_description, 'The description tag was not stored in a double-encoded format.'); // Set up a node without explicit metatag description. This causes the // global default to be used, which contains a token (node:summary). The // token value should be correctly translated. // Create a node. $this->drupalGet('node/add/page'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $edit = [ 'title[0][value]' => $title_original, 'body[0][value]' => $desc_original, @@ -167,26 +168,26 @@ public function checkConfig($string) { // Load the front page. $this->drupalGet('<front>'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // Again, with xpath the HTML entities will be parsed automagically. $xpath_title = current($this->xpath("//title"))->getText(); - $this->assertEqual($xpath_title, $title_original); - $this->assertNotEqual($xpath_title, $title_encoded); - $this->assertNotEqual($xpath_title, $title_encodeded); + $this->assertEquals($xpath_title, $title_original); + $this->assertNotEquals($xpath_title, $title_encoded); + $this->assertNotEquals($xpath_title, $title_encodeded); // The page title should be HTML encoded; have to do this check manually // because assertRaw() checks the raw HTML, not the parsed strings like // xpath does. - $this->assertRaw('<title>' . $title_encoded . '</title>', 'Confirmed the node title tag is available in its encoded format.'); - $this->assertNoRaw('<title>' . $title_original . '</title>', 'Confirmed the node title tag is not available in its original format.'); - $this->assertNoRaw('<title>' . $title_encodeded . '</title>', 'Confirmed the node title tag is not double-double-encoded?'); + $session->responseContains('<title>' . $title_encoded . '</title>', 'Confirmed the node title tag is available in its encoded format.'); + $session->responseNotContains('<title>' . $title_original . '</title>', 'Confirmed the node title tag is not available in its original format.'); + $session->responseNotContains('<title>' . $title_encodeded . '</title>', 'Confirmed the node title tag is not double-double-encoded?'); // Again, with xpath the HTML entities will be parsed automagically. $xpath = $this->xpath("//meta[@name='description']"); - $this->assertEqual($xpath[0]->getAttribute('content'), $desc_original); - $this->assertNotEqual($xpath[0]->getAttribute('content'), $desc_encoded); - $this->assertNotEqual($xpath[0]->getAttribute('content'), $desc_encodeded); + $this->assertEquals($xpath[0]->getAttribute('content'), $desc_original); + $this->assertNotEquals($xpath[0]->getAttribute('content'), $desc_encoded); + $this->assertNotEquals($xpath[0]->getAttribute('content'), $desc_encodeded); } /** @@ -209,55 +210,56 @@ public function checkNode($string) { // Update the Global defaults and test them. $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $edit = [ 'title' => $title_original, 'description' => $desc_original, ]; $this->drupalPostForm(NULL, $edit, $this->t('Save')); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // Set up a node without explicit metatag description. This causes the // global default to be used, which contains a token (node:summary). The // token value should be correctly translated. // Create a node. $this->drupalGet('node/add/page'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $edit = [ 'title[0][value]' => $title_original, 'body[0][value]' => $desc_original, ]; $this->drupalPostForm(NULL, $edit, $save_label); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // Load the node page. $this->drupalGet('node/1'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // Again, with xpath the HTML entities will be parsed automagically. $xpath_title = current($this->xpath("//title"))->getText(); - $this->assertEqual($xpath_title, $title_original); - $this->assertNotEqual($xpath_title, $title_encoded); - $this->assertNotEqual($xpath_title, $title_encodeded); + $this->assertEquals($xpath_title, $title_original); + $this->assertNotEquals($xpath_title, $title_encoded); + $this->assertNotEquals($xpath_title, $title_encodeded); // The page title should be HTML encoded; have to do this check manually // because assertRaw() checks the raw HTML, not the parsed strings like // xpath does. - $this->assertRaw('<title>' . $title_encoded . '</title>', 'Confirmed the node title tag is encoded.'); + $session->responseContains('<title>' . $title_encoded . '</title>', 'Confirmed the node title tag is encoded.'); // Again, with xpath the HTML entities will be parsed automagically. $xpath = $this->xpath("//meta[@name='description']"); $value = $xpath[0]->getAttribute('content'); - $this->assertEqual($value, $desc_original); - $this->assertNotEqual($value, $desc_encoded); - $this->assertNotEqual($value, $desc_encodeded); + $this->assertEquals($value, $desc_original); + $this->assertNotEquals($value, $desc_encoded); + $this->assertNotEquals($value, $desc_encodeded); // Normal meta tags should be encoded properly. - $this->assertRaw('"' . $desc_encoded . '"', 'Confirmed the node "description" meta tag string was encoded properly.'); + $session->responseContains('"' . $desc_encoded . '"', 'Confirmed the node "description" meta tag string was encoded properly.'); // Normal meta tags with HTML entities should be displayed in their original // format. - $this->assertNoRaw('"' . $desc_original . '"', 'Confirmed the node "description" meta tag string does not show in its original form.'); + $session->responseNotContains('"' . $desc_original . '"', 'Confirmed the node "description" meta tag string does not show in its original form.'); // Normal meta tags should not be double-encoded. - $this->assertNoRaw('"' . $desc_encodeded . '"', 'Confirmed the node "description" meta tag string was not double-encoded.'); + $session->responseNotContains('"' . $desc_encodeded . '"', 'Confirmed the node "description" meta tag string was not double-encoded.'); } /** @@ -278,47 +280,48 @@ public function checkEncodedField($string) { // Update the Global defaults and test them. $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $edit = [ 'title' => $title_original, 'description' => $desc_original, ]; $this->drupalPostForm(NULL, $edit, $this->t('Save')); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // Set up a node without explicit metatag description. This causes the // global default to be used, which contains a token (node:summary). The // token value should be correctly translated. // Create a node. $this->drupalGet('node/add/page'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $edit = [ 'title[0][value]' => $title_original, 'body[0][value]' => $desc_original, ]; $this->drupalPostForm(NULL, $edit, $save_label); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // Load the node page. $this->drupalGet('node/1'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // With xpath the HTML entities will be parsed automagically. $xpath = $this->xpath("//meta[@name='description']"); $value = $xpath[0]->getAttribute('content'); - $this->assertEqual($value, $desc_original); - $this->assertNotEqual($value, $desc_encoded); - $this->assertNotEqual($value, $desc_encodeded); + $this->assertEquals($value, $desc_original); + $this->assertNotEquals($value, $desc_encoded); + $this->assertNotEquals($value, $desc_encodeded); // Normal meta tags should be encoded properly. - $this->assertRaw('"' . $desc_encoded . '"', 'Confirmed the node "description" meta tag string was encoded properly.'); + $session->responseContains('"' . $desc_encoded . '"', 'Confirmed the node "description" meta tag string was encoded properly.'); // Normal meta tags with HTML entities should be displayed in their original // format. - $this->assertNoRaw('"' . $desc_original . '"', 'Confirmed the node "description" meta tag string does not show in its original form.'); + $session->responseNotContains('"' . $desc_original . '"', 'Confirmed the node "description" meta tag string does not show in its original form.'); // Normal meta tags should not be double-encoded. - $this->assertNoRaw('"' . $desc_encodeded . '"', 'Confirmed the node "description" meta tag string was not double-encoded.'); + $session->responseNotContains('"' . $desc_encodeded . '"', 'Confirmed the node "description" meta tag string was not double-encoded.'); } } diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagTagTypesTest.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagTagTypesTest.php index 1d3a36938..475e8b148 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MetatagTagTypesTest.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagTagTypesTest.php @@ -33,7 +33,7 @@ class MetatagTagTypesTest extends BrowserTestBase { * * @var array */ - public static $modules = [ + protected static $modules = [ // Needed for token handling. 'token', @@ -104,7 +104,8 @@ protected function setUp() { */ public function testHtmlIsRemoved() { $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $values = [ 'abstract' => 'No HTML here', 'description' => '<html><body><p class="test">Surrounded by raw HTML</p></body></html>', @@ -112,14 +113,14 @@ public function testHtmlIsRemoved() { ]; $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText('Saved the Global Metatag defaults.'); + $session->pageTextContains('Saved the Global Metatag defaults.'); drupal_flush_all_caches(); $this->drupalGet('hit-a-404'); - $this->assertSession()->statusCodeEquals(404); + $session->statusCodeEquals(404); - $this->assertRaw('<meta name="abstract" content="No HTML here" />', $this->t('Test with no HTML content')); - $this->assertRaw('<meta name="description" content="Surrounded by raw HTML" />', $this->t('Test with raw HTML content')); - $this->assertRaw('<meta name="keywords" content="Surrounded by escaped HTML" />', $this->t('Test with escaped HTML content')); + $session->responseContains('<meta name="abstract" content="No HTML here" />', $this->t('Test with no HTML content')); + $session->responseContains('<meta name="description" content="Surrounded by raw HTML" />', $this->t('Test with raw HTML content')); + $session->responseContains('<meta name="keywords" content="Surrounded by escaped HTML" />', $this->t('Test with escaped HTML content')); } /** @@ -132,19 +133,20 @@ public function testHtmlIsRemoved() { */ public function testSecureTagOption() { $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $values = [ 'og_image' => 'https://blahblahblah.com/insecure.jpg', 'og_image_secure_url' => 'https://blahblahblah.com/secure.jpg', ]; $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText('Saved the Global Metatag defaults.'); + $session->pageTextContains('Saved the Global Metatag defaults.'); drupal_flush_all_caches(); $this->drupalGet(''); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); - $this->assertRaw('<meta property="og:image" content="https://blahblahblah.com/insecure.jpg" />', $this->t('Test og:image with regular https:// link')); - $this->assertRaw('<meta property="og:image:secure_url" content="https://blahblahblah.com/secure.jpg" />', $this->t('Test og:image:secure_url updated regular https:// link to https://')); + $session->responseContains('<meta property="og:image" content="https://blahblahblah.com/insecure.jpg" />', $this->t('Test og:image with regular https:// link')); + $session->responseContains('<meta property="og:image:secure_url" content="https://blahblahblah.com/secure.jpg" />', $this->t('Test og:image:secure_url updated regular https:// link to https://')); } /** @@ -185,13 +187,13 @@ public function todoTestUrl() { // $entities = entity_load_multiple_by_properties('entity_test', [ // 'name' => 'UrlTags', // ]); - // $this->assertEqual(1, count($entities), 'Entity was saved'); + // $this->assertEquals(count($entities), 1, 'Entity was saved'); // $entity = reset($entities); // $this->drupalGet($this->entity_base_path . '/' . $entity->id()); // $this->assertSession()->statusCodeEquals(200); // $elements = $this->cssSelect("meta[name='original-source']"); // $this->assertTrue(count($elements) === 1, 'Found original source metatag from defaults'); - // $this->assertEqual((string) $elements[0]['content'], $edit['field_metatag[0][advanced][original_source]']); + // $this->assertEquals($edit['field_metatag[0][advanced][original_source]'], (string) $elements[0]['content']); // {@endcode} } diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagTagsTestBase.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagTagsTestBase.php index ac78d0bff..d781c8b32 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MetatagTagsTestBase.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagTagsTestBase.php @@ -18,7 +18,7 @@ abstract class MetatagTagsTestBase extends BrowserTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // This is needed for the 'access content' permission. 'node', @@ -106,7 +106,7 @@ public function testTagsArePresent() { $xpath = "//input[@name='{$tag}' and @type='text']"; } - $this->assertFieldByXPath($xpath, NULL, new FormattableMarkup('Found the @tag meta tag field using the xpath: @xpath', ['@tag' => $tag, '@xpath' => $xpath])); + $this->xpath($xpath); } $this->drupalLogout(); @@ -130,6 +130,7 @@ public function testTagsInputOutput($tag_name) { 'title' => $this->t('Hello, world!'), 'type' => 'page', ]); + $session = $this->assertSession(); // Test a non-entity path and an entity path. The non-entity path inherits // the global meta tags, the entity path inherits from its entity config. @@ -151,7 +152,7 @@ public function testTagsInputOutput($tag_name) { // Load the global config. $this->drupalGet($path1); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // Update the Global defaults and test them. $all_values = $values = []; @@ -182,11 +183,11 @@ public function testTagsInputOutput($tag_name) { $values[$test_key] = $test_value; $all_values[$tag_name] = $test_value; $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText($save_message); + $session->pageTextContains($save_message); // Load the test page. $this->drupalGet($path2); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // Look for the values. // Look for a custom method named "{$tag_name}TestOutputXpath", if @@ -269,13 +270,13 @@ public function testTagsInputOutput($tag_name) { $this->verbose($xpath, $tag_name . ': ' . $xpath_string); } $this->assertNotEmpty($xpath[0]->getAttribute($xpath_value_attribute)); - $this->assertEqual($xpath[0]->getAttribute($xpath_value_attribute), $all_values[$tag_name], "The '{$tag_name}' tag was found with the expected value."); + $this->assertEquals($xpath[0]->getAttribute($xpath_value_attribute), $all_values[$tag_name], "The '{$tag_name}' tag was found with the expected value."); } } else { $this->verbose($xpath, $tag_name . ': ' . $xpath_string); $this->assertTrue((string) $xpath[0]); - $this->assertEqual((string) $xpath[0], $all_values[$tag_name], new FormattableMarkup("The '@tag' tag was found with the expected value '@value'.", ['@tag' => $tag_name, '@value' => $all_values[$tag_name]])); + $this->assertEquals((string) $xpath[0], $all_values[$tag_name], new FormattableMarkup("The '@tag' tag was found with the expected value '@value'.", ['@tag' => $tag_name, '@value' => $all_values[$tag_name]])); } } diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagTokenStatus.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagTokenStatus.php new file mode 100644 index 000000000..892a8ec23 --- /dev/null +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagTokenStatus.php @@ -0,0 +1,52 @@ +<?php + +namespace Drupal\Tests\metatag\Functional; + +use Drupal\Core\Url; +use Drupal\Tests\BrowserTestBase; + +/** + * Test the token status for metatag. + * + * @group metatag + */ +class MetatagTokenStatus extends BrowserTestBase +{ + + /** + * {@inheritdoc} + */ + public static $modules = ['metatag']; + + /** + * {@inheritdoc} + */ + protected $defaultTheme = 'stark'; + + /** + * Test the status report does not contain warnings about types. + * + * @see token_get_token_problems + */ + function testStatusReportTypesWarning() + { + $this->drupalLogin($this->rootUser); + $this->drupalGet(Url::fromRoute('system.status')); + + $this->assertSession()->pageTextNotContains('$info[\'types\'][\'metatag'); + } + + /** + * Test the status report does not contain warnings about tokens. + * + * @see token_get_token_problems + */ + function testStatusReportTokensWarning() + { + $this->drupalLogin($this->rootUser); + $this->drupalGet(Url::fromRoute('system.status')); + + $this->assertSession()->pageTextNotContains('$info[\'tokens\'][\'metatag'); + } + +} diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagXssTest.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagXssTest.php index 5243223b6..0ab5ec674 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MetatagXssTest.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagXssTest.php @@ -62,7 +62,7 @@ class MetatagXssTest extends BrowserTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ 'node', 'views', 'system', @@ -120,33 +120,34 @@ protected function setUp() { */ public function testXssMetatagConfig() { $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $values = [ 'title' => $this->xssTitleString, 'abstract' => $this->xssString, 'image_src' => $this->xssImageString, ]; $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText('Saved the Global Metatag defaults.'); + $session->pageTextContains('Saved the Global Metatag defaults.'); $this->rebuildAll(); // Load the Views-based front page. $this->drupalGet('node'); - $this->assertSession()->statusCodeEquals(200); - $this->assertText($this->t('No front page content has been created yet.')); + $session->statusCodeEquals(200); + $session->pageTextContains('No front page content has been created yet.'); // Check for the title tag, which will have the HTML tags removed and then // be lightly HTML encoded. - $this->assertEscaped(strip_tags($this->xssTitleString)); - $this->assertNoRaw($this->xssTitleString); + $session->assertEscaped(strip_tags($this->xssTitleString)); + $session->responseNotContains($this->xssTitleString); // Check for the basic meta tag. - $this->assertRaw($this->escapedXssTag); - $this->assertNoRaw($this->xssString); + $session->responseContains($this->escapedXssTag); + $session->responseNotContains($this->xssString); // Check for the image meta tag. - $this->assertRaw($this->escapedXssImageTag); - $this->assertNoRaw($this->xssImageString); + $session->responseContains($this->escapedXssImageTag); + $session->responseNotContains($this->xssImageString); } /** @@ -156,7 +157,8 @@ public function testXssEntityOverride() { $save_label = (floatval(\Drupal::VERSION) <= 8.3) ? $this->t('Save and publish') : $this->t('Save'); $this->drupalGet('node/add/metatag_node'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $edit = [ 'title[0][value]' => $this->randomString(32), 'field_metatag_field[0][basic][title]' => $this->xssTitleString, @@ -167,16 +169,16 @@ public function testXssEntityOverride() { // Check for the title tag, which will have the HTML tags removed and then // be lightly HTML encoded. - $this->assertEscaped(strip_tags($this->xssTitleString)); - $this->assertNoRaw($this->xssTitleString); + $session->assertEscaped(strip_tags($this->xssTitleString)); + $session->responseNotContains($this->xssTitleString); // Check for the basic meta tag. - $this->assertRaw($this->escapedXssTag); - $this->assertNoRaw($this->xssString); + $session->responseContains($this->escapedXssTag); + $session->responseNotContains($this->xssString); // Check for the image meta tag. - $this->assertRaw($this->escapedXssImageTag); - $this->assertNoRaw($this->xssImageString); + $session->responseContains($this->escapedXssImageTag); + $session->responseNotContains($this->xssImageString); } /** @@ -186,7 +188,8 @@ public function testXssEntityTitle() { $save_label = (floatval(\Drupal::VERSION) <= 8.3) ? $this->t('Save and publish') : $this->t('Save'); $this->drupalGet('node/add/metatag_node'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $edit = [ 'title[0][value]' => $this->xssTitleString, 'body[0][value]' => $this->randomString() . ' ' . $this->randomString(), @@ -195,8 +198,8 @@ public function testXssEntityTitle() { // Check for the title tag, which will have the HTML tags removed and then // be lightly HTML encoded. - $this->assertEscaped(strip_tags($this->xssTitleString)); - $this->assertNoRaw($this->xssTitleString); + $session->assertEscaped(strip_tags($this->xssTitleString)); + $session->responseNotContains($this->xssTitleString); } /** @@ -206,7 +209,8 @@ public function testXssEntityBody() { $save_label = (floatval(\Drupal::VERSION) <= 8.3) ? $this->t('Save and publish') : $this->t('Save'); $this->drupalGet('node/add/metatag_node'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $edit = [ 'title[0][value]' => $this->randomString(), 'body[0][value]' => $this->xssTitleString, @@ -217,7 +221,7 @@ public function testXssEntityBody() { // {@code} // $this->assertNoTitle($this->xssTitleString); // {@endcode} - $this->assertNoRaw($this->xssTitleString); + $session->responseNotContains($this->xssTitleString); } } diff --git a/web/modules/contrib/metatag/tests/src/Functional/NodeJsonOutput.php b/web/modules/contrib/metatag/tests/src/Functional/NodeJsonOutput.php index 5c079df0a..41476177a 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/NodeJsonOutput.php +++ b/web/modules/contrib/metatag/tests/src/Functional/NodeJsonOutput.php @@ -19,7 +19,7 @@ class NodeJsonOutput extends BrowserTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // Modules for core functionality. 'node', 'field', @@ -63,7 +63,7 @@ public function testNode() { $this->assertSession()->statusCodeEquals(200); // Decode the JSON output. - $response = $this->getRawContent(); + $response = $this->getSession()->getPage()->getContent(); $this->assertNotEmpty($response); $json = json_decode($response); $this->verbose($json, 'JSON output'); diff --git a/web/modules/contrib/metatag/tests/src/Functional/NodeTranslation.php b/web/modules/contrib/metatag/tests/src/Functional/NodeTranslation.php index b6f6f14b7..2e720c98e 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/NodeTranslation.php +++ b/web/modules/contrib/metatag/tests/src/Functional/NodeTranslation.php @@ -17,7 +17,7 @@ class NodeTranslation extends BrowserTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // Modules for core functionality. 'language', 'node', diff --git a/web/modules/contrib/metatag/tests/src/Functional/RemoveCoreMetaTags.php b/web/modules/contrib/metatag/tests/src/Functional/RemoveCoreMetaTags.php index 93b492b07..2a27226a7 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/RemoveCoreMetaTags.php +++ b/web/modules/contrib/metatag/tests/src/Functional/RemoveCoreMetaTags.php @@ -17,11 +17,9 @@ class RemoveCoreMetaTags extends BrowserTestBase { use MetatagHelperTrait; /** - * Modules to enable. - * - * @var array + * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ 'token', 'metatag', 'taxonomy', diff --git a/web/modules/contrib/metatag/tests/src/Functional/WithRedirect.php b/web/modules/contrib/metatag/tests/src/Functional/WithRedirect.php index 2f254306e..37340f0fa 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/WithRedirect.php +++ b/web/modules/contrib/metatag/tests/src/Functional/WithRedirect.php @@ -12,7 +12,7 @@ class WithRedirect extends MetatagAdminTest { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ 'node', 'field_ui', 'test_page_test', diff --git a/web/modules/contrib/metatag/tests/src/FunctionalJavascript/MetatagAvailableTokensTest.php b/web/modules/contrib/metatag/tests/src/FunctionalJavascript/MetatagAvailableTokensTest.php new file mode 100644 index 000000000..0b27bd120 --- /dev/null +++ b/web/modules/contrib/metatag/tests/src/FunctionalJavascript/MetatagAvailableTokensTest.php @@ -0,0 +1,45 @@ +<?php + +namespace Drupal\Tests\metatag\FunctionalJavascript; + +use Drupal\Core\Url; +use Drupal\FunctionalJavascriptTests\WebDriverTestBase; + +/** + * Tests the available tokens under metatag routes. + * + * @group metatag + */ +class MetatagAvailableTokensTest extends WebDriverTestBase { + + /** + * {@inheritdoc} + */ + public static $modules = ['metatag', 'node']; + + /** + * {@inheritdoc} + */ + protected $defaultTheme = 'stark'; + + /** + * Test the node metatag defaults page. + */ + function testNodeMetatagDefaultsPage() { + $this->drupalLogin($this->rootUser); + $this->drupalGet(Url::fromRoute('entity.metatag_defaults.edit_form', ['metatag_defaults' => 'node'])); + $page = $this->getSession()->getPage(); + + $token_dialog_link = $page->find('css', '.token-dialog'); + $token_dialog_link->click(); + + $this->assertSession()->assertWaitOnAjaxRequest(); + + $token_dialog = $page->find('css', '.token-tree-dialog'); + + $token_node_token = $token_dialog->find('css', '#token-node'); + + $this->assertNotEmpty($token_node_token); + } + +} diff --git a/web/modules/contrib/metatag/tests/src/Kernel/Form/MetatagSettingsFormTest.php b/web/modules/contrib/metatag/tests/src/Kernel/Form/MetatagSettingsFormTest.php index 417f69e2f..5797ae9d0 100644 --- a/web/modules/contrib/metatag/tests/src/Kernel/Form/MetatagSettingsFormTest.php +++ b/web/modules/contrib/metatag/tests/src/Kernel/Form/MetatagSettingsFormTest.php @@ -27,7 +27,7 @@ class MetatagSettingsFormTest extends KernelTestBase { * * @var array */ - public static $modules = [ + protected static $modules = [ // Core modules. 'system', diff --git a/web/modules/contrib/metatag/tests/src/Kernel/MetatagManagerTest.php b/web/modules/contrib/metatag/tests/src/Kernel/MetatagManagerTest.php index bb1cd5cfc..28e861876 100644 --- a/web/modules/contrib/metatag/tests/src/Kernel/MetatagManagerTest.php +++ b/web/modules/contrib/metatag/tests/src/Kernel/MetatagManagerTest.php @@ -14,7 +14,7 @@ class MetatagManagerTest extends KernelTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // Core modules. 'system', 'field', diff --git a/web/modules/contrib/metatag/tests/src/Kernel/MetatagSettingsTest.php b/web/modules/contrib/metatag/tests/src/Kernel/MetatagSettingsTest.php index 200b35ad9..37be98f2d 100644 --- a/web/modules/contrib/metatag/tests/src/Kernel/MetatagSettingsTest.php +++ b/web/modules/contrib/metatag/tests/src/Kernel/MetatagSettingsTest.php @@ -14,7 +14,7 @@ class MetatagSettingsTest extends KernelTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // Contrib modules. 'token', diff --git a/web/modules/contrib/metatag/tests/src/Kernel/Migrate/d6/NodewordsFieldTest.php b/web/modules/contrib/metatag/tests/src/Kernel/Migrate/d6/NodewordsFieldTest.php index ae5de0dc1..0b0eb9298 100644 --- a/web/modules/contrib/metatag/tests/src/Kernel/Migrate/d6/NodewordsFieldTest.php +++ b/web/modules/contrib/metatag/tests/src/Kernel/Migrate/d6/NodewordsFieldTest.php @@ -21,7 +21,11 @@ class NodewordsFieldTest extends MigrateSqlSourceTestBase { /** * {@inheritdoc} */ - public static $modules = ['metatag', 'migrate_drupal', 'token']; + public static $modules = [ + 'metatag', + 'migrate_drupal', + 'token', + ]; /** * {@inheritdoc} diff --git a/web/modules/contrib/metatag/tests/src/Kernel/Migrate/d7/MetatagFieldTest.php b/web/modules/contrib/metatag/tests/src/Kernel/Migrate/d7/MetatagFieldTest.php index 7030614f8..c335fcd93 100644 --- a/web/modules/contrib/metatag/tests/src/Kernel/Migrate/d7/MetatagFieldTest.php +++ b/web/modules/contrib/metatag/tests/src/Kernel/Migrate/d7/MetatagFieldTest.php @@ -15,7 +15,11 @@ class MetatagFieldTest extends MigrateSqlSourceTestBase { /** * {@inheritdoc} */ - public static $modules = ['token', 'metatag', 'migrate_drupal']; + public static $modules = [ + 'token', + 'metatag', + 'migrate_drupal', + ]; /** * {@inheritdoc} diff --git a/web/modules/contrib/module_filter/README.txt b/web/modules/contrib/module_filter/README.txt new file mode 100644 index 000000000..eee4c4d81 --- /dev/null +++ b/web/modules/contrib/module_filter/README.txt @@ -0,0 +1,128 @@ +CONTENTS OF THIS FILE +--------------------- + + * Introduction + * Installation + * Configuration + * Tabs + * Filter operators + * Maintainers + +INTRODUCTION +------------ + +This module provides a method for filtering modules on the modules page as well +as for filtering projects on the update status report. + +The supplied filter is simpler than using your browsers find a feature which +searches the entire page. The provided filter will filter modules/projects that +do not meet your input. + +Along with the filter textfield there are additional +checkboxes that help to narrow the search more. The modules page contains 3 +checkboxes: Enabled, Disabled, and Unavailable. While the first two +are self-explanatory, the latter two can take an explanation. The Required +checkbox affects visibility of modules that are enabled and have other +module(s) that require it also enabled. The Unavailable checkbox affects +visibility of modules that are disabled and depend on module(s) that are +missing. + +The update status report filter also contains four checkboxes: Up-to-Date, +Update available, Security update, and Unknown. These directly affect the +visibility of each project; whether it is up-to-date, there is an update +available, a security update is available, or the status is unknown. + +Installation +------------ + +To install this module, do the following: + +1. Extract the tarball that you downloaded from Drupal.org. + +2. Upload the entire directory and all its contents to your modules directory. + +Configuration +------------- + +To enable and configure this module do the following: + +1. Go to Admin -> Modules, and enable Module Filter. + +2. Go to Admin -> Configuration -> User interface -> Module filter, and make + any necessary configuration changes. + +Tabs +---- + +By default Module Filter alters the modules page into tabs (Can be disabled on +configuration page). In the tabs view, each package is converted to a vertical +tab rather than a fieldset which greatly increases the ability to browse them. + +There are several benefits to using the tabs view over the standard view for +the modules page. I've listed the key benefits below as well as additional +information that pertains to each. + +1. The increased ease of browsing between packages. + +2. Allows all modules to be listed alphabetically outside of their package, + making it all the easier to find the module by name rather than package it + happens to be in. + +3. The operations for a module are moved within the description column giving + the description more "elbow room". + +4. Filtering is restricted to within the active tab or globally when no tab is + selected. By default no tab is selected which will list all modules. When a + tab is active and you want to get back to the 'all' state click on the + active tab to deselect it. + +5. The number of enabled modules per tab is shown on the active tab. (Can be + disabled on configuration page) + +6. Nice visual aids become available showing what modules are to be + enabled/disabled and the number of matching modules in each tab when + filtering. (Can be disabled on configuration page) + +7. The save configuration button becomes more accessible, either staying at + the bottom of the window when the tabs exceed past the bottom and at the + top when scrolling past the tabs. (Can be disabled on configuration page) + +8. When filtering, tabs that do not contain matches can be hidden. (Can be + enabled on configuration page) + +9. Tab states are remembered like individual pages allowing you to move + forward and backward within your selections via your browsers + forward/backward buttons. + +10. When viewing all modules (no active tab) and mousing over modules it's tab + becomes highlighted to signify which tab it belongs to. + +Filter operators +---------------- + +The modules page's filter has three filter operators available. Filter +operators allow alternative filtering techniques. A filter operator is applied +by typing within the filter textfield 'operator:' (where operator is the +operator type) followed immediately with the string to pass to the operator +function (e.g. 'requires:block'). The available operators are: + +description: + Filter based on a module's description. + +requiredBy: + Filter based on what a module is required by. + +requires: + Filter based on what a module requires. + +Multiple filters (or queries) can be applied by space delimiting. For example, +the filter string 'description:ctools views' would filter down to modules with +"ctools" in the description and "views" within the module's name. To pass a +space within a single query wrap it within double quotes (e.g. 'requires:"chaos +tools"' or '"bulk export"'). + +Maintainers +------------------ + + - Green Skin (greenSkin) - https://www.drupal.org/u/greenskin + - Andrey Troeglazov (andrey.troeglazov) - https://www.drupal.org/u/andreytroeglazov diff --git a/web/modules/contrib/module_filter/composer.json b/web/modules/contrib/module_filter/composer.json new file mode 100644 index 000000000..d07296ece --- /dev/null +++ b/web/modules/contrib/module_filter/composer.json @@ -0,0 +1,11 @@ +{ + "name": "drupal/module_filter", + "description": "Filter the modules list.", + "type": "drupal-module", + "license": "GPL-2.0+", + "homepage": "http://drupal.org/project/module_filter", + "support": { + "issues": "https://www.drupal.org/project/issues/module_filter", + "source": "https://git.drupalcode.org/project/module_filter" + } +} diff --git a/web/modules/contrib/module_filter/config/schema/module_filter.schema.yml b/web/modules/contrib/module_filter/config/schema/module_filter.schema.yml new file mode 100644 index 000000000..ce1af85f3 --- /dev/null +++ b/web/modules/contrib/module_filter/config/schema/module_filter.schema.yml @@ -0,0 +1,7 @@ +module_filter.settings: + type: config_object + label: 'Module filter settings' + mapping: + tabs: + type: boolean + label: 'Boolean indicating whether the Extend page should be enhanced with tabs' diff --git a/web/modules/contrib/module_filter/css/module_filter.modules_tabs.css b/web/modules/contrib/module_filter/css/module_filter.modules_tabs.css index 9b6a4eab8..39d04fbe9 100644 --- a/web/modules/contrib/module_filter/css/module_filter.modules_tabs.css +++ b/web/modules/contrib/module_filter/css/module_filter.modules_tabs.css @@ -5,7 +5,7 @@ position: relative; overflow: hidden; margin: 10px 0; - background: #E6E5E1; + background: #e6e5e1; border: 1px solid #bdbdbd; border-radius: 4px; } @@ -33,7 +33,7 @@ border-bottom: 1px solid #ccc; } .modules-tabs__menu-item.suggest { - background: #F9F9F9; + background: #f9f9f9; } .modules-tabs__menu-item.disabled { background: #ccc; @@ -47,7 +47,7 @@ } .modules-tabs__menu-item a:hover, .modules-tabs__menu-item a:focus { - background: #D5D5D5; + background: #d5d5d5; text-decoration: none; outline: 0; } @@ -55,11 +55,11 @@ .modules-tabs__menu-item.is-selected a:hover, .modules-tabs__menu-item.is-selected a:focus, .modules-tabs__menu-item.is-selected a:active { - background-color: #FCFCFA; + background-color: #fcfcfa; margin-right: -1px; } .modules-tabs__menu-item.disabled a, -.modules-tabs__menu-item.disabled span{ +.modules-tabs__menu-item.disabled span { color: #999; } .modules-tabs__menu-item.disabled a { @@ -93,13 +93,13 @@ .modules-tabs__pane { margin: 0 0 0 240px; /* LTR */ padding: 10px 15px; - background: #FCFCFA; - border-left: 1px solid #A6A5A1; /* LTR */ + background: #fcfcfa; + border-left: 1px solid #a6a5a1; /* LTR */ } [dir="rtl"] .modules-tabs__pane { margin: 0 240px 0 0; border-left: none; - border-right: 1px solid #A6A5A1; + border-right: 1px solid #a6a5a1; } .modules-tabs__pane:after { content: ''; @@ -131,4 +131,3 @@ overflow: hidden; text-overflow: ellipsis; } - diff --git a/web/modules/contrib/module_filter/js/module_filter.modules.js b/web/modules/contrib/module_filter/js/module_filter.modules.js index 0e0671149..85aaff864 100644 --- a/web/modules/contrib/module_filter/js/module_filter.modules.js +++ b/web/modules/contrib/module_filter/js/module_filter.modules.js @@ -45,7 +45,7 @@ ModuleFilter.modulesWrapper = $('.modules-wrapper', ModuleFilter.wrapper); ModuleFilter.input.winnow(ModuleFilter.wrapperId + ' ' + ModuleFilter.selector, { - textSelector: 'td.module .module-name', + textSelector: 'td.module .module-name, .module-machine-name', emptyMessage: Drupal.t('No results'), clearLabel: Drupal.t('clear'), wrapper: ModuleFilter.modulesWrapper, diff --git a/web/modules/contrib/module_filter/js/module_filter.modules_tabs.js b/web/modules/contrib/module_filter/js/module_filter.modules_tabs.js index 103e2cbcf..6fa846071 100644 --- a/web/modules/contrib/module_filter/js/module_filter.modules_tabs.js +++ b/web/modules/contrib/module_filter/js/module_filter.modules_tabs.js @@ -335,7 +335,8 @@ ModuleFilter.modulesWrapper.children('details').each(function() { var $details = $(this); var packageName = $details.children('summary').text(); - var packageId = packageName.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, ''); + var packageId = $details.children('summary').attr('aria-controls'); + packageId = packageId.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, ''); if (tabs[packageId] == undefined) { tabs[packageId] = new Tab(packageName, packageId); diff --git a/web/modules/contrib/module_filter/module_filter.info.yml b/web/modules/contrib/module_filter/module_filter.info.yml index ab442fa9c..fd5130e87 100644 --- a/web/modules/contrib/module_filter/module_filter.info.yml +++ b/web/modules/contrib/module_filter/module_filter.info.yml @@ -1,13 +1,15 @@ -name: Module filter +name: Module Filter type: module description: Filter the modules list. package: Administration -# core: 8.x - +core: 8.x +core_version_requirement: ^8 || ^9 configure: module_filter.settings -# Information added by Drupal.org packaging script on 2017-10-10 -version: '8.x-3.1' -core: '8.x' +dependencies: + - drupal:system (>= 8.3) + +# Information added by Drupal.org packaging script on 2021-03-05 +version: '8.x-3.2' project: 'module_filter' -datestamp: 1507650850 +datestamp: 1614918374 diff --git a/web/modules/contrib/module_filter/module_filter.install b/web/modules/contrib/module_filter/module_filter.install index 3af5125d5..ffbf02c2a 100644 --- a/web/modules/contrib/module_filter/module_filter.install +++ b/web/modules/contrib/module_filter/module_filter.install @@ -10,7 +10,7 @@ */ function module_filter_install() { $state = \Drupal::state(); - $state->set('module_filter.recent', ['module_filter' => REQUEST_TIME]); + $state->set('module_filter.recent', ['module_filter' => \Drupal::time()->getRequestTime()]); } /** diff --git a/web/modules/contrib/module_filter/module_filter.module b/web/modules/contrib/module_filter/module_filter.module index 18c009bb8..981e558d4 100644 --- a/web/modules/contrib/module_filter/module_filter.module +++ b/web/modules/contrib/module_filter/module_filter.module @@ -7,6 +7,27 @@ use Drupal\Core\Render\Element; use Drupal\Core\Form\FormStateInterface; +use Drupal\Core\Routing\RouteMatchInterface; + +/** + * Implements hook_help(). + */ +function module_filter_help($route_name, RouteMatchInterface $route_match) { + switch ($route_name) { + case 'help.page.module_filter': + $output = ''; + $output .= '<p>'; + $output .= t('The modules list page can become quite big when dealing with a fairly large site or even just a dev site meant for testing new and various modules being considered.'); + $output .= '</p>'; + $output .= '<p>'; + $output .= t('What this module aims to accomplish is the ability to quickly find the module you are looking for without having to rely on the browsers search feature which more times than not shows you the module name in the -Required by- or -Depends on- sections of the various modules or even some other location on the page like a menu item.'); + $output .= '</p>'; + $output .= '<p>'; + $output .= t('See the <a href=":project_page">project page on Drupal.org</a> for more details.', [':project_page' => 'https://www.drupal.org/project/module_filter']); + + return $output; + } +} /** * Implements hook_form_FORM_ID_alter(). @@ -53,7 +74,7 @@ function module_filter_form_system_modules_alter(&$form, FormStateInterface $for // Remove recent items older than a week. $recent = array_filter($recent, function ($val) { - return !($val < REQUEST_TIME - 60 * 60 * 24 * 7); + return !($val < \Drupal::time()->getRequestTime() - 60 * 60 * 24 * 7); }); $state->set('module_filter.recent', $recent); @@ -68,7 +89,7 @@ function module_filter_form_system_modules_alter(&$form, FormStateInterface $for } } - $modules = system_rebuild_module_data(); + $modules = \Drupal::service('extension.list.module')->reset()->getList(); foreach ($modules as $name => $module) { if ($name == 'module_filter') { @@ -102,7 +123,7 @@ function module_filter_form_system_modules_confirm_form_alter(&$form, FormStateI /** * Implements hook_form_FORM_ID_alter(). */ -function module_filter_form_system_modules_uninstall_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) { +function module_filter_form_system_modules_uninstall_alter(&$form, FormStateInterface $form_state, $form_id) { $key = array_search('system/drupal.system.modules', $form['#attached']['library']); if ($key !== FALSE) { unset($form['#attached']['library'][$key]); @@ -118,7 +139,7 @@ function module_filter_form_system_modules_uninstall_alter(&$form, \Drupal\Core\ /** * Implements hook_form_FORM_ID_alter(). */ -function module_filter_form_user_admin_permissions_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) { +function module_filter_form_user_admin_permissions_alter(&$form, FormStateInterface $form_state, $form_id) { $form['filters'] = [ '#type' => 'container', '#attributes' => [ @@ -157,6 +178,18 @@ function module_filter_theme_registry_alter(&$theme_registry) { * Implements hook_preprocess_HOOK(). */ function module_filter_preprocess_system_modules_details(&$variables) { + $display_path = \Drupal::config('module_filter.settings')->get('path'); + if ($display_path) { + foreach ($variables['modules'] as &$module) { + // Get the module id from parents. + // Because core does not provide it in template_preprocess_system_modules_details. + $id = $module['name']['#parents'][1]; + $path = drupal_get_path('module', $id); + if (!empty($path)) { + $module['path'] = $path; + } + } + } } /** @@ -170,7 +203,7 @@ function module_filter_system_modules_recent_enabled_submit($form, FormStateInte // the version of Drupal and building the $modules array accordingly. // @see https://www.drupal.org/node/2851653 $modules = []; - if (version_compare(\DRUPAL::VERSION, '8.3.0', '<')) { + if (version_compare(\Drupal::VERSION, '8.3.0', '<')) { foreach ($form_state->getValue('modules') as $package) { $modules += $package; } @@ -182,7 +215,7 @@ function module_filter_system_modules_recent_enabled_submit($form, FormStateInte foreach (Element::children($form['modules']) as $package) { foreach ($modules as $module => $details) { if (isset($form['modules'][$package][$module]) && $form['modules'][$package][$module]['enable']['#default_value'] != $details['enable']) { - $recent[$module] = REQUEST_TIME; + $recent[$module] = \Drupal::time()->getRequestTime(); } } } diff --git a/web/modules/contrib/module_filter/src/Form/ModuleFilterSettingsForm.php b/web/modules/contrib/module_filter/src/Form/ModuleFilterSettingsForm.php index fb1ec4b65..6bc8e3a8f 100644 --- a/web/modules/contrib/module_filter/src/Form/ModuleFilterSettingsForm.php +++ b/web/modules/contrib/module_filter/src/Form/ModuleFilterSettingsForm.php @@ -37,6 +37,13 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#default_value' => $config->get('tabs'), ]; + $form['modules']['path'] = [ + '#type' => 'checkbox', + '#title' => $this->t('Show module path in modules list'), + '#description' => $this->t('Defines if the relative path of each module will be display in its row.'), + '#default_value' => $config->get('path'), + ]; + return $form; } @@ -47,6 +54,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) { $values = $form_state->getValues(); $this->config('module_filter.settings') ->set('tabs', $values['tabs']) + ->set('path', $values['path']) ->save(); parent::submitForm($form, $form_state); diff --git a/web/modules/contrib/module_filter/templates/system-modules-details.html.twig b/web/modules/contrib/module_filter/templates/system-modules-details.html.twig index 144f8609e..03c8d1838 100644 --- a/web/modules/contrib/module_filter/templates/system-modules-details.html.twig +++ b/web/modules/contrib/module_filter/templates/system-modules-details.html.twig @@ -48,7 +48,7 @@ <div class="details-wrapper"> <div class="details-description"> <div class="requirements"> - <div class="admin-requirements">{{ 'Machine name: <span dir="ltr" class="table-filter-text-source">@machine-name</span>'|t({'@machine-name': module.machine_name }) }}</div> + <div class="admin-requirements">{{ 'Machine name: <span dir="ltr" class="module-machine-name table-filter-text-source">@machine-name</span>'|t({'@machine-name': module.machine_name }) }}</div> {% if module.version %} <div class="admin-requirements">{{ 'Version: @module-version'|t({'@module-version': module.version }) }}</div> {% endif %} @@ -58,6 +58,9 @@ {% if module.required_by %} <div class="admin-requirements required-by">{{ 'Required by: @module-list'|t({'@module-list': module.required_by }) }}</div> {% endif %} + {% if module.path %} + <div class="admin-requirements module-path">{{ 'Module path: @module-list'|t({'@module-list': module.path }) }}</div> + {% endif %} </div> {% if module.links %} <div class="links"> diff --git a/web/modules/contrib/permissions_by_term/bitbucket-pipelines.yml b/web/modules/contrib/permissions_by_term/bitbucket-pipelines.yml index 231a4a42a..521c74e34 100644 --- a/web/modules/contrib/permissions_by_term/bitbucket-pipelines.yml +++ b/web/modules/contrib/permissions_by_term/bitbucket-pipelines.yml @@ -23,8 +23,9 @@ pipelines: - mv permissions_by_term/ build/ - cd build - composer create-project drupal-composer/drupal-project:8.x-dev drupal --stability dev --no-interaction - - (cd drupal && composer require behat/behat:^3.0 behat/mink-extension:^2.2 drupal/drupal-extension:^3.2 phpunit/phpunit:^7.0 mikey179/vfsstream:^1.6 --dev) + - (cd drupal && composer require behat/behat:^3.0 behat/mink-extension:^2.2 drupal/drupal-extension:^3.2 phpunit/phpunit:^7.0 mikey179/vfsstream:^1.6 phpstan/phpstan:~0.12.75 phpstan/extension-installer:~1.1.0 mglaman/phpstan-drupal:~0.12.8 --dev) - mv permissions_by_term drupal/web/modules/ + - (cd drupal && cp web/modules/permissions_by_term/tests/phpstan* . && vendor/bin/phpstan analyse web/modules/permissions_by_term/) - (cd drupal/web/modules/permissions_by_term/tests/ && ../../../../vendor/bin/phpunit --testdox) - (cd drupal/web/modules/permissions_by_term/js/ && npm install && npm run bat) - (cd drupal/web && ../vendor/drush/drush/drush si standard --db-url=mysql://root:testing@127.0.01/testing -y && ../vendor/drush/drush/drush en permissions_by_term -y) diff --git a/web/modules/contrib/permissions_by_term/modules/permissions_by_entity/permissions_by_entity.info.yml b/web/modules/contrib/permissions_by_term/modules/permissions_by_entity/permissions_by_entity.info.yml index 7a062adba..1d734bb65 100644 --- a/web/modules/contrib/permissions_by_term/modules/permissions_by_entity/permissions_by_entity.info.yml +++ b/web/modules/contrib/permissions_by_term/modules/permissions_by_entity/permissions_by_entity.info.yml @@ -5,7 +5,7 @@ core: '8.x' dependencies: - permissions_by_term package: 'Permissions by Term (Experimental)' -# Information added by Drupal.org packaging script on 2021-02-02 -version: '8.x-2.29' +# Information added by Drupal.org packaging script on 2021-03-01 +version: '8.x-2.31' project: 'permissions_by_term' -datestamp: 1612278252 +datestamp: 1614602595 diff --git a/web/modules/contrib/permissions_by_term/modules/permissions_by_entity/tests/modules/pbt_entity_test/pbt_entity_test.info.yml b/web/modules/contrib/permissions_by_term/modules/permissions_by_entity/tests/modules/pbt_entity_test/pbt_entity_test.info.yml index 1c20b8297..e774b46db 100644 --- a/web/modules/contrib/permissions_by_term/modules/permissions_by_entity/tests/modules/pbt_entity_test/pbt_entity_test.info.yml +++ b/web/modules/contrib/permissions_by_term/modules/permissions_by_entity/tests/modules/pbt_entity_test/pbt_entity_test.info.yml @@ -4,7 +4,7 @@ description: 'Permissions by term - Entity test module' core: 8.x package: Testing -# Information added by Drupal.org packaging script on 2021-02-02 -version: '8.x-2.29' +# Information added by Drupal.org packaging script on 2021-03-01 +version: '8.x-2.31' project: 'permissions_by_term' -datestamp: 1612278252 +datestamp: 1614602595 diff --git a/web/modules/contrib/permissions_by_term/permissions_by_term.info.yml b/web/modules/contrib/permissions_by_term/permissions_by_term.info.yml index dcda14f38..2ccf7ff79 100644 --- a/web/modules/contrib/permissions_by_term/permissions_by_term.info.yml +++ b/web/modules/contrib/permissions_by_term/permissions_by_term.info.yml @@ -6,11 +6,11 @@ dependencies: - 'drupal:taxonomy' type: module core: '8.x' -# version: '8.x-2.28' +# version: '8.x-2.31' package: 'Permissions by Term' configure: permissions_by_term.settings -# Information added by Drupal.org packaging script on 2021-02-02 -version: '8.x-2.29' +# Information added by Drupal.org packaging script on 2021-03-01 +version: '8.x-2.31' project: 'permissions_by_term' -datestamp: 1612278252 +datestamp: 1614602595 diff --git a/web/modules/contrib/permissions_by_term/permissions_by_term.install b/web/modules/contrib/permissions_by_term/permissions_by_term.install index 5387c1af8..5ed22234a 100644 --- a/web/modules/contrib/permissions_by_term/permissions_by_term.install +++ b/web/modules/contrib/permissions_by_term/permissions_by_term.install @@ -18,25 +18,28 @@ function permissions_by_term_schema() { // Specifications for tabe 'permissions_by_term_user'. $schema['permissions_by_term_user'] = [ 'description' => "Stores the tid's to which a user has permission by his uid.", - 'fields' => [ - 'tid' => [ - 'type' => 'int', + 'fields' => [ + 'tid' => [ + 'type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, ], - 'uid' => [ - 'type' => 'int', + 'uid' => [ + 'type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, ], - 'langcode' => [ - 'type' => 'varchar_ascii', - 'length' => 12, + 'langcode' => [ + 'type' => 'varchar_ascii', + 'length' => 12, 'not null' => TRUE, - 'default' => '', + 'default' => '', ], ], - 'primary key' => [ + 'primary key' => [ + 'tid', + 'uid', + 'langcode', ], ]; @@ -62,11 +65,13 @@ function permissions_by_term_schema() { ], ], 'primary key' => [ + 'tid', + 'rid', + 'langcode', ], ]; return $schema; - } /** @@ -204,3 +209,16 @@ function permissions_by_term_update_8153() { $schema->dropPrimaryKey('permissions_by_term_role'); $schema->dropPrimaryKey('permissions_by_term_user'); } + +/** + * Add composite primary key via unique table column combinations. + */ +function permissions_by_term_update_8230() { + $database = \Drupal::database(); + $schema = $database->schema(); + + $schema->dropPrimaryKey('permissions_by_term_role'); + $schema->addPrimaryKey('permissions_by_term_role', ['tid', 'rid', 'langcode']); + $schema->dropPrimaryKey('permissions_by_term_user'); + $schema->addPrimaryKey('permissions_by_term_user', ['tid', 'uid', 'langcode']); +} diff --git a/web/modules/contrib/permissions_by_term/src/Event/PermissionsByTermDeniedEvent.php b/web/modules/contrib/permissions_by_term/src/Event/PermissionsByTermDeniedEvent.php index 2b80be2ae..398edb046 100644 --- a/web/modules/contrib/permissions_by_term/src/Event/PermissionsByTermDeniedEvent.php +++ b/web/modules/contrib/permissions_by_term/src/Event/PermissionsByTermDeniedEvent.php @@ -33,4 +33,4 @@ public function getNid() { return $this->nid; } -} \ No newline at end of file +} diff --git a/web/modules/contrib/permissions_by_term/src/Service/NodeAccess.php b/web/modules/contrib/permissions_by_term/src/Service/NodeAccess.php index 8491b03b0..ca2f22e01 100644 --- a/web/modules/contrib/permissions_by_term/src/Service/NodeAccess.php +++ b/web/modules/contrib/permissions_by_term/src/Service/NodeAccess.php @@ -288,14 +288,8 @@ public static function rebuildNodeAccessOne($nid) { return 'Processed node ' . $nid; } - /** - * Rebuild permissions by term records only. - * - * @param $uid|NULL - * The user ID to which changes are scoped. - */ - public function rebuildAccess($uid = NULL) { - $nids = $this->getNidsForAccessRebuild($uid); + public function rebuildAccess(): void { + $nids = $this->getNidsForAccessRebuild(); if (count($nids) > 50) { $operations = array_map(function($id) { diff --git a/web/modules/contrib/permissions_by_term/tests/phpstan-baseline.neon b/web/modules/contrib/permissions_by_term/tests/phpstan-baseline.neon new file mode 100644 index 000000000..49fe8f1f5 --- /dev/null +++ b/web/modules/contrib/permissions_by_term/tests/phpstan-baseline.neon @@ -0,0 +1,72 @@ +parameters: + ignoreErrors: + - + message: "#^Unsafe usage of new static\\(\\)\\.$#" + count: 1 + path: web/modules/permissions_by_term/src/Controller/NodeEntityBundleController.php + + - + message: "#^\\\\Drupal calls should be avoided in classes, use dependency injection instead$#" + count: 3 + path: web/modules/permissions_by_term/src/Controller/NodeEntityBundleController.php + + - + message: "#^\\\\Drupal calls should be avoided in classes, use dependency injection instead$#" + count: 1 + path: web/modules/permissions_by_term/src/Controller/PermissionsByTermController.php + + - + message: "#^\\\\Drupal calls should be avoided in classes, use dependency injection instead$#" + count: 1 + path: web/modules/permissions_by_term/src/Factory/NodeAccessRecordFactory.php + + - + message: "#^\\\\Drupal calls should be avoided in classes, use dependency injection instead$#" + count: 8 + path: web/modules/permissions_by_term/src/Form/SettingsForm.php + + - + message: "#^\\\\Drupal calls should be avoided in classes, use dependency injection instead$#" + count: 8 + path: web/modules/permissions_by_term/src/Listener/KernelEventListener.php + + - + message: "#^\\\\Drupal calls should be avoided in classes, use dependency injection instead$#" + count: 8 + path: web/modules/permissions_by_term/src/Service/AccessCheck.php + + - + message: "#^\\\\Drupal calls should be avoided in classes, use dependency injection instead$#" + count: 6 + path: web/modules/permissions_by_term/src/Service/AccessStorage.php + + - + message: "#^Access to an undefined property Drupal\\\\permissions_by_term\\\\Service\\\\NodeAccess\\:\\:\\$nodeAccessRecordFactory\\.$#" + count: 2 + path: web/modules/permissions_by_term/src/Service/NodeAccess.php + + - + message: "#^Access to an undefined property Drupal\\\\permissions_by_term\\\\Service\\\\NodeAccess\\:\\:\\$grants\\.$#" + count: 1 + path: web/modules/permissions_by_term/src/Service/NodeAccess.php + + - + message: "#^\\\\Drupal calls should be avoided in classes, use dependency injection instead$#" + count: 1 + path: web/modules/permissions_by_term/src/Service/NodeAccess.php + + - + message: "#^\\\\Drupal calls should be avoided in classes, use dependency injection instead$#" + count: 10 + path: web/modules/permissions_by_term/tests/src/Behat/Context/PermissionsByTermContext.php + + - + message: "#^Instantiated class Drupal\\\\Tests\\\\permissions_by_term\\\\Behat\\\\Context\\\\ResponseTextException not found\\.$#" + count: 2 + path: web/modules/permissions_by_term/tests/src/Behat/Context/PermissionsByTermContext.php + + - + message: "#^Caught class Drupal\\\\Tests\\\\permissions_by_term\\\\Behat\\\\Context\\\\StaleElementReference not found\\.$#" + count: 1 + path: web/modules/permissions_by_term/tests/src/Behat/Context/PermissionsByTermContext.php + diff --git a/web/modules/contrib/permissions_by_term/tests/phpstan.neon.dist b/web/modules/contrib/permissions_by_term/tests/phpstan.neon.dist new file mode 100644 index 000000000..7b22446f4 --- /dev/null +++ b/web/modules/contrib/permissions_by_term/tests/phpstan.neon.dist @@ -0,0 +1,8 @@ +includes: + - phpstan-baseline.neon +parameters: + level: 1 + paths: + - web/modules/permissions_by_term + excludes_analyse: + - tests/*.php diff --git a/web/modules/contrib/require_login/README.md b/web/modules/contrib/require_login/README.md deleted file mode 100644 index e3c7f873e..000000000 --- a/web/modules/contrib/require_login/README.md +++ /dev/null @@ -1,23 +0,0 @@ -#Require Login - -Require login authentication regardless of user permissions. - -##Features - -* Instantly require login to access any page -* Change default login and destination paths -* Exclude specific paths from login requirement -* Allow 403 (access denied) or 404 (not found) access -* Configure or disable access denied warning - -##Installation - -1. Download and install the module -2. Set "Administer login requirement" permission to appropriate roles -3. Configure the module: Admin > Config > People > Require login - -**403 (access denied) OR 404 (not found) page access:** - -You may want anonymous users to have view access on default or custom 403/404 pages. There's a special configuration -for just that. On the module configuration page open the "Advanced settings" section. Now check the desired exclude -boxes to enable access on that respective 403/404 page. All done! \ No newline at end of file diff --git a/web/modules/contrib/require_login/config/install/require_login.config.yml b/web/modules/contrib/require_login/config/install/require_login.config.yml index ea3d3ef77..24ee71a28 100644 --- a/web/modules/contrib/require_login/config/install/require_login.config.yml +++ b/web/modules/contrib/require_login/config/install/require_login.config.yml @@ -3,4 +3,12 @@ destination_path: '' deny_message: 'You must login to view this page.' excluded_403: true excluded_404: true -excluded_paths: '/user/login' \ No newline at end of file +excluded_paths: '' +excluded_routes: | + simplesamlphp_auth.saml_login + samlauth.saml_controller_login + samlauth.saml_controller_logout + samlauth.saml_controller_metadata + samlauth.saml_controller_acs + samlauth.saml_controller_sls + samlauth.saml_controller_changepw diff --git a/web/modules/contrib/require_login/config/schema/require_login.schema.yml b/web/modules/contrib/require_login/config/schema/require_login.schema.yml index d69728d31..e45f5699c 100644 --- a/web/modules/contrib/require_login/config/schema/require_login.schema.yml +++ b/web/modules/contrib/require_login/config/schema/require_login.schema.yml @@ -1,22 +1,33 @@ require_login.config: type: config_object - label: 'Require login' + label: 'Require Login' mapping: auth_path: type: text - label: 'Login path' + label: 'Login form path' destination_path: type: text - label: 'Destination path' + label: 'Login destination path' deny_message: type: text label: 'Access denied message' excluded_403: type: boolean - label: 'Excluded 403 page' + label: 'Exclude 403 (access denied) page' excluded_404: type: boolean - label: 'Excluded 404 page' + label: 'Exclude 404 (not found) page' excluded_paths: type: text - label: 'Excluded paths' \ No newline at end of file + label: 'Excluded paths' + excluded_node_types: + type: config_object + mapping: + type: require_login.node_type + excluded_routes: + type: text + label: 'Excluded route names' + +require_login.node_type: + type: string + label: 'Content Type' diff --git a/web/modules/contrib/require_login/require_login.api.php b/web/modules/contrib/require_login/require_login.api.php index c55be4a96..83994d354 100644 --- a/web/modules/contrib/require_login/require_login.api.php +++ b/web/modules/contrib/require_login/require_login.api.php @@ -2,20 +2,18 @@ /** * @file - * Documentation for require login API. + * Hooks for the require_login module. */ /** - * Alter login requirement checks. The $checks variable is a non-associative - * array containing only boolean values. Login will be required if $checks - * includes at least one TRUE boolean. + * Alter default authentication checks. * - * @param array &$checks - * Boolean check values. + * @param array &$default_checks + * An array of boolean values indicating authentication status. */ -function hook_require_login_authcheck_alter(&$checks) { - $variable_1 = $variable_2 = 'hello-world'; +function hook_require_login_authcheck_alter(array &$default_checks) { + $var1 = $var2 = 'some-value'; - // Allow access if $variable_1 equals $variable_2. - $checks[] = ($variable_1 == $variable_2); -} \ No newline at end of file + // If $var1 equals $var2 then allow unauthenticated access. + $default_checks[] = ($var1 == $var2); +} diff --git a/web/modules/contrib/require_login/require_login.config_translation.yml b/web/modules/contrib/require_login/require_login.config_translation.yml index 6d2431cbc..8a1765656 100644 --- a/web/modules/contrib/require_login/require_login.config_translation.yml +++ b/web/modules/contrib/require_login/require_login.config_translation.yml @@ -1,5 +1,5 @@ require_login.admin: - title: 'Require login' + title: 'Require Login' base_route_name: require_login.admin names: - require_login.config diff --git a/web/modules/contrib/require_login/require_login.info.yml b/web/modules/contrib/require_login/require_login.info.yml index eda9a60ba..528152e27 100644 --- a/web/modules/contrib/require_login/require_login.info.yml +++ b/web/modules/contrib/require_login/require_login.info.yml @@ -1,11 +1,14 @@ -name: 'Require login' -description: 'Require login authentication regardless of user permissions.' +name: 'Require Login' +description: 'Provides catch-all solution to require user authentication on pages.' type: module -# core: 8.x +core: 8.x +core_version_requirement: ^8 || ^9 configure: require_login.admin +dependencies: + - drupal:user + - drupal:node -# Information added by Drupal.org packaging script on 2019-03-02 -version: '8.x-2.1' -core: '8.x' +# Information added by Drupal.org packaging script on 2021-03-11 +version: '8.x-2.4' project: 'require_login' -datestamp: 1551549491 +datestamp: 1615474750 diff --git a/web/modules/contrib/require_login/require_login.install b/web/modules/contrib/require_login/require_login.install index a10602131..9323bf453 100644 --- a/web/modules/contrib/require_login/require_login.install +++ b/web/modules/contrib/require_login/require_login.install @@ -2,26 +2,43 @@ /** * @file - * require_login.install + * Install, update and uninstall functions for the require_login module. */ /** * Implements hook_install(). */ function require_login_install() { + // Run require_login before other modules. module_set_weight('require_login', -1000); } /** - * Rebuild cache. + * Flush cache. */ function require_login_update_8101() { - // Empty update to cause a cache rebuild. + // Empty update to trigger cache flush. } /** - * Rebuild cache. + * Flush cache. */ function require_login_update_8102() { - // Empty update to cause a cache rebuild. -} \ No newline at end of file + // Empty update to trigger cache flush. +} + +/** + * Add defaults to the excluded routes configuration. + */ +function require_login_update_8103() { + $config_factory = Drupal::configFactory(); + $config = $config_factory->getEditable('require_login.config'); + $config->set('excluded_routes', 'simplesamlphp_auth.saml_login +samlauth.saml_controller_login +samlauth.saml_controller_logout +samlauth.saml_controller_metadata +samlauth.saml_controller_acs +samlauth.saml_controller_sls +samlauth.saml_controller_changepw'); + $config->save(TRUE); +} diff --git a/web/modules/contrib/require_login/require_login.links.menu.yml b/web/modules/contrib/require_login/require_login.links.menu.yml index 8c9656906..fb4252272 100644 --- a/web/modules/contrib/require_login/require_login.links.menu.yml +++ b/web/modules/contrib/require_login/require_login.links.menu.yml @@ -1,5 +1,5 @@ system.require_login: title: 'Require login' - description: 'Configure site-wide login requirement settings.' + description: 'Configure user authentication settings.' parent: user.admin_index route_name: require_login.admin diff --git a/web/modules/contrib/require_login/require_login.links.task.yml b/web/modules/contrib/require_login/require_login.links.task.yml index 46da51098..98128b6b3 100644 --- a/web/modules/contrib/require_login/require_login.links.task.yml +++ b/web/modules/contrib/require_login/require_login.links.task.yml @@ -1,4 +1,4 @@ require_login.admin: route_name: require_login.admin title: 'Settings' - base_route: require_login.admin \ No newline at end of file + base_route: require_login.admin diff --git a/web/modules/contrib/require_login/require_login.module b/web/modules/contrib/require_login/require_login.module index 6424f03ab..58f9290f8 100644 --- a/web/modules/contrib/require_login/require_login.module +++ b/web/modules/contrib/require_login/require_login.module @@ -2,7 +2,7 @@ /** * @file - * This is the Require login module for enforcing authentication. + * Hook implementations for the require_login module. */ use Drupal\Core\Routing\RouteMatchInterface; @@ -13,24 +13,22 @@ function require_login_help($route_name, RouteMatchInterface $route_match) { switch ($route_name) { case 'help.page.require_login': - $output = '<h3>' . t('About') . '</h3>'; - $output .= '<p>' . t('Require login authentication regardless of user permissions.') . '</p>'; + $output = '<p>' . t('Provides catch-all solution to require user authentication on pages.') . '</p>'; $output .= '<h3>' . t('Features') . '</h3>'; $output .= '<dl>'; - $output .= ' <dt>' . t('Instantly require login to access any page') . '</dt>'; - $output .= ' <dt>' . t('Change default login and destination paths') . '</dt>'; - $output .= ' <dt>' . t('Exclude specific paths from login requirement') . '</dt>'; - $output .= ' <dt>' . t('Allow 403 (access denied) or 404 (not found) access') . '</dt>'; - $output .= ' <dt>' . t('Configure or disable access denied warning') . '</dt>'; + $output .= ' <dt>' . t('Enforce user authentication for any or all pages.') . '</dt>'; + $output .= ' <dt>' . t('Change the default user login path (/user/login).') . '</dt>'; + $output .= ' <dt>' . t('Exclude content types, paths, or router names as needed.') . '</dt>'; + $output .= ' <dt>' . t('Configure access to 403 (access denied) and (404) not found pages.') . '</dt>'; + $output .= ' <dt>' . t('Translatable access denied message seen by anonymous users.') . '</dt>'; + $output .= ' <dt>' . t('Fully translatable configuration for per-language exclusions.') . '</dt>'; $output .= '</dl>'; - $output .= '<h3>' . t('Installation') . '</h3>'; + $output .= '<h3>' . t('Usage') . '</h3>'; $output .= '<dl>'; - $output .= ' <dt>' . t('Download and install the module') . '</dt>'; - $output .= ' <dt>' . t('Set "Administer login requirement" permission to appropriate roles') . '</dt>'; - $output .= ' <dt>' . t('Configure the module: Admin > Config > People > Require login') . '</dt>'; + $output .= ' <dt>' . t('Install the module.') . '</dt>'; + $output .= ' <dt>' . t('Set permissions: /admin/people/permissions#module-require_login') . '</dt>'; + $output .= ' <dt>' . t('Configure settings: /admin/config/people/require-login') . '</dt>'; $output .= '</dl>'; - $output .= '<strong>' . t('403 (access denied) OR 404 (not found) page access:') . '</strong>'; - $output .= '<p>' . t('You may want anonymous users to have view access to default or custom 403/404 pages. There\'s a special configuration for just that. On the module configuration page open the "Advanced settings" section. Now check the desired exclude boxes to enable access on that respective 403/404 page. All done!') . '</p>'; return $output; } return NULL; diff --git a/web/modules/contrib/require_login/require_login.permissions.yml b/web/modules/contrib/require_login/require_login.permissions.yml index 3fe405aa3..b8e048c85 100644 --- a/web/modules/contrib/require_login/require_login.permissions.yml +++ b/web/modules/contrib/require_login/require_login.permissions.yml @@ -1,3 +1,3 @@ administer require login: - title: 'Administer login requirement' - description: 'Configure site-wide login requirement settings.' + title: 'Administer user authentication requirements' + restrict access: true diff --git a/web/modules/contrib/require_login/require_login.services.yml b/web/modules/contrib/require_login/require_login.services.yml index 1ed826db0..2e9089ff4 100644 --- a/web/modules/contrib/require_login/require_login.services.yml +++ b/web/modules/contrib/require_login/require_login.services.yml @@ -1,6 +1,6 @@ services: require_login.request_subscriber: class: Drupal\require_login\EventSubscriber\RequireLoginSubscriber - arguments: ['@module_handler', '@config.factory', '@request_stack', '@current_user', '@path.matcher', '@messenger'] + arguments: ['@module_handler', '@config.factory', '@request_stack', '@current_user', '@messenger', '@path.matcher', '@path.current', '@path_alias.manager', '@current_route_match'] tags: - {name: event_subscriber} diff --git a/web/modules/contrib/require_login/src/EventSubscriber/RequireLoginSubscriber.php b/web/modules/contrib/require_login/src/EventSubscriber/RequireLoginSubscriber.php index f91ad8ce9..344a7df80 100644 --- a/web/modules/contrib/require_login/src/EventSubscriber/RequireLoginSubscriber.php +++ b/web/modules/contrib/require_login/src/EventSubscriber/RequireLoginSubscriber.php @@ -2,18 +2,25 @@ namespace Drupal\require_login\EventSubscriber; +use Drupal\Core\Routing\RouteMatchInterface; use Drupal\Core\Url; +use Drupal\Core\Path\CurrentPathStack; use Drupal\Core\Config\ConfigFactoryInterface; +use Drupal\Core\Config\ImmutableConfig; use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\Core\Messenger\MessengerInterface; use Drupal\Core\Path\PathMatcher; use Drupal\Core\Session\AccountProxyInterface; -use Symfony\Component\Debug\Exception\FlattenException; +use Drupal\Component\Utility\UrlHelper; +use Drupal\path_alias\AliasManager; +use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\HttpKernel\Event\GetResponseEvent; +use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Symfony\Component\Routing\Route; /** * Login requirement. @@ -21,9 +28,11 @@ class RequireLoginSubscriber implements EventSubscriberInterface { /** - * The request exception boolean. + * The event exception boolean. + * + * @var bool */ - protected $requestException; + protected $eventException; /** * The module handler. @@ -54,7 +63,7 @@ class RequireLoginSubscriber implements EventSubscriberInterface { protected $accountProxy; /** - * The path matcher under test. + * The path matcher. * * @var \Drupal\Core\Path\PathMatcher */ @@ -67,6 +76,27 @@ class RequireLoginSubscriber implements EventSubscriberInterface { */ protected $messenger; + /** + * The current path stack. + * + * @var \Drupal\Core\Path\CurrentPathStack + */ + protected $currentPath; + + /** + * The path alias manager. + * + * @var \Drupal\path_alias\AliasManager + */ + protected $aliasManager; + + /** + * The route match. + * + * @var \Drupal\Core\Routing\RouteMatchInterface + */ + protected $routeMatch; + /** * Class constructor. * @@ -78,22 +108,32 @@ class RequireLoginSubscriber implements EventSubscriberInterface { * The request stack. * @param \Drupal\Core\Session\AccountProxyInterface $account_proxy * The account proxy. - * @param \Drupal\Core\Path\PathMatcher $path_matcher - * The path matcher. * @param \Drupal\Core\Messenger\MessengerInterface $messenger * The messenger. + * @param \Drupal\Core\Path\PathMatcher $path_matcher + * The path matcher. + * @param \Drupal\Core\Path\CurrentPathStack $current_path + * The current path stack. + * @param \Drupal\path_alias\AliasManager $alias_manager + * The path alias manager. + * @param \Drupal\Core\Routing\RouteMatchInterface $route_match + * The route match. */ - public function __construct(ModuleHandlerInterface $module_handler, ConfigFactoryInterface $config_factory, RequestStack $request_stack, AccountProxyInterface $account_proxy, PathMatcher $path_matcher, MessengerInterface $messenger) { + public function __construct(ModuleHandlerInterface $module_handler, ConfigFactoryInterface $config_factory, RequestStack $request_stack, AccountProxyInterface $account_proxy, MessengerInterface $messenger, PathMatcher $path_matcher, CurrentPathStack $current_path, AliasManager $alias_manager, RouteMatchInterface $route_match) { + $this->eventException = FALSE; $this->moduleHandler = $module_handler; $this->configFactory = $config_factory; $this->requestStack = $request_stack; $this->accountProxy = $account_proxy; - $this->pathMatcher = $path_matcher; $this->messenger = $messenger; + $this->pathMatcher = $path_matcher; + $this->currentPath = $current_path; + $this->aliasManager = $alias_manager; + $this->routeMatch = $route_match; } /** - * Check login requirement for current request. + * Check login authentication enforcement for current request. * * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event * The event response. @@ -102,16 +142,14 @@ public function __construct(ModuleHandlerInterface $module_handler, ConfigFactor * @param \Symfony\Component\HttpFoundation\Request $request * The HTTP request. * - * @return boolean - * Return FALSE if login not required. TRUE otherwise. + * @return bool + * Return FALSE if authentication isn't required. Otherwise TRUE. */ - private function checkLogin($event, $config, $request) { - $route_name = $request->get('_route'); - - // Check 403/404 page exclusions. - if ($event instanceof \Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent) { - $exception = FlattenException::create($event->getException()); - + private function checkLogin(GetResponseEvent $event, ImmutableConfig $config, Request $request) { + // Check event exception status codes. + if ($event instanceof GetResponseForExceptionEvent) { + /** @var \Symfony\Component\HttpKernel\Exception\HttpException $exception */ + $exception = $event->getException(); switch ($exception->getStatusCode()) { case '403': if ($config->get('excluded_403')) { @@ -127,78 +165,114 @@ private function checkLogin($event, $config, $request) { } } - // Check path exclusions. - $excluded_paths = explode(PHP_EOL, $config->get('excluded_paths')); - $excluded_paths[] = $config->get('auth_path'); + /** @var \Symfony\Component\Routing\Route $route */ + $route = $request->get('_route_object'); - if ($this->pathMatcher->matchPath($request->getRequestUri(), implode(PHP_EOL, $excluded_paths))) { + // Default authentication exclusions. + if ($route instanceof Route && $route->hasRequirement('_user_is_logged_in') && $route->getRequirement('_user_is_logged_in') === 'FALSE') { return FALSE; } - - // Standard login requirement checks. - $checks = [ - // Check user session. - ($this->accountProxy->getAccount()->id() > 0), - // Check system.cron (/cron.php). - ($route_name == 'system.cron'), - // Check system.db_update (/update.php). - ($route_name == 'system.db_update'), - // Check user.* (/user/*). - ($route_name == 'user.login' || $route_name == 'user.register' || $route_name == 'user.pass' || substr($route_name, 0, 10) === 'user.reset'), - // Check Drush. - (function_exists('drupal_is_cli') && drupal_is_cli()), - // Check samlauth routes. - (preg_match('/^samlauth./i', $route_name) && $route_name != 'samlauth.samlauth_configure_form'), - // Check simplesamlphp_auth routes. - ($route_name == 'simplesamlphp_auth.saml_login'), + $route_name = $request->get('_route'); + $default_checks = [ + // Check if CLI environment. + (PHP_SAPI === 'cli'), + // Check system.cron route. + ($route_name === 'system.cron'), + // Check system.db_update route (/update.php). + ($route_name === 'system.db_update'), + // Check user.* routes (/user/*). + ($route_name === 'user.register' || $route_name === 'user.pass' || substr($route_name, 0, 10) === 'user.reset'), + // Check image.style_* routes. + ($route_name === 'image.style_public' || $route_name === 'image.style_private'), ]; - // Allow modules to alter $checks variable. - $this->moduleHandler->alter('require_login_authcheck', $checks); + $this->moduleHandler->alter('require_login_authcheck', $default_checks); + if (in_array(TRUE, $default_checks)) { + return FALSE; + } + + // Configurable route name exclusions. + $excluded_routes = array_filter(preg_split('/\r\n|\r|\n/', $config->get('excluded_routes'))); + if (in_array($route_name, $excluded_routes)) { + return FALSE; + } - foreach ($checks as $check) { - if ($check) { + // Configurable node type exclusions. + if ($route_name === 'entity.node.canonical' && ($node_types = $config->get('excluded_node_types'))) { + if (($node = $this->routeMatch->getParameter('node')) && in_array($node->bundle(), $node_types, TRUE)) { return FALSE; } } + + // Configurable path exclusions. + $current_path = $this->currentPath->getPath($request); + $current_path_alias = $this->aliasManager->getAliasByPath($current_path); + $current_path_parameters = $request->query->all(); + $excluded_paths = array_filter(preg_split('/\r\n|\r|\n/', $config->get('excluded_paths'))); + $excluded_paths[] = $config->get('auth_path'); + + foreach ($excluded_paths as $path) { + $path = trim($path); + $path_parts = UrlHelper::parse($path); + $path_parts['path'] = mb_strtolower($path_parts['path']); + $current_checks = [ + ($this->pathMatcher->matchPath($current_path, $path_parts['path'])), + ($this->pathMatcher->matchPath($current_path_alias, $path_parts['path'])), + ]; + if (!empty($path_parts['query'])) { + if (in_array(TRUE, $current_checks)) { + // Path matched an exclusion. Now check for matching query parameters. + if (count(array_intersect($current_path_parameters, $path_parts['query'])) === count($path_parts['query'])) { + return FALSE; + } + } + } + elseif (in_array(TRUE, $current_checks)) { + // Path matched an exclusion. No query parameters to check. + return FALSE; + } + } + return TRUE; } /** - * Prepare redirect response. + * Prepare login redirect response. * * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event * The event response. * * @return string|null - * Redirect URL including query string. + * The redirect URL. */ - private function prepareLoginRedirect($event) { + private function loginRedirect(GetResponseEvent $event) { + if ($this->accountProxy->getAccount()->isAuthenticated()) { + // Stop if user is authenticated. + return NULL; + } $config = $this->configFactory->get('require_login.config'); $request = $this->requestStack->getCurrentRequest(); if ($this->checkLogin($event, $config, $request)) { - - // Access denied warning message. + // Show access denied warning message. if ($message = $config->get('deny_message')) { $messenger = $this->messenger; $messenger->addMessage($message, $messenger::TYPE_WARNING); } - // Login form redirect path. + // Prepare login and destination paths. if ($auth_path = $config->get('auth_path')) { - $redirectPath = "internal:{$auth_path}"; + $redirect_path = "internal:{$auth_path}"; } else { - $redirectPath = 'internal:/user/login'; + $redirect_path = 'internal:/user/login'; } - - // Login destination redirect path. - if (!($destination = $config->get('destination_path'))) { + if (empty($destination = $config->get('destination_path'))) { $destination = $request->getRequestUri(); } - - return Url::fromUri($redirectPath, ['query' => ['destination' => $destination]])->toString(); + return Url::fromUri($redirect_path, ['query' => ['destination' => $destination]]) + ->toString(); } + return NULL; } @@ -209,13 +283,11 @@ private function prepareLoginRedirect($event) { * The event response. */ public function exceptionRedirect(GetResponseEvent $event) { + // Boolean indicating event exception. Prevents potential infinite + // redirect loop on KernelEvents::REQUEST. + $this->eventException = TRUE; - // Boolean to indicate request exception. Prevents additional login - // requirement checks on KernelEvents::REQUEST which could cause - // infinite loop redirects on protected pages. - $this->requestException = TRUE; - - if ($redirect = $this->prepareLoginRedirect($event)) { + if ($redirect = $this->loginRedirect($event)) { $response = new RedirectResponse($redirect); $event->setResponse($response); } @@ -228,7 +300,7 @@ public function exceptionRedirect(GetResponseEvent $event) { * The event response. */ public function requestRedirect(GetResponseEvent $event) { - if (!$this->requestException && ($redirect = $this->prepareLoginRedirect($event))) { + if (!$this->eventException && ($redirect = $this->loginRedirect($event))) { $response = new RedirectResponse($redirect); $event->setResponse($response); } diff --git a/web/modules/contrib/require_login/src/Form/RequireLoginSettingsForm.php b/web/modules/contrib/require_login/src/Form/RequireLoginSettingsForm.php index 14d0fe68a..094723a5b 100644 --- a/web/modules/contrib/require_login/src/Form/RequireLoginSettingsForm.php +++ b/web/modules/contrib/require_login/src/Form/RequireLoginSettingsForm.php @@ -4,12 +4,41 @@ use Drupal\Core\Form\ConfigFormBase; use Drupal\Core\Form\FormStateInterface; +use Drupal\Core\Config\ConfigFactoryInterface; +use Drupal\Core\Routing\RouteProvider; +use Drupal\Component\Utility\UrlHelper; +use Symfony\Component\DependencyInjection\ContainerInterface; /** * Configure Require Login settings for this site. */ class RequireLoginSettingsForm extends ConfigFormBase { + /** + * The routing provider. + * + * @var \Drupal\Core\Routing\RouteProvider + */ + protected $routeProvider; + + /** + * {@inheritdoc} + */ + public function __construct(ConfigFactoryInterface $config_factory, RouteProvider $route_provider) { + parent::__construct($config_factory); + $this->routeProvider = $route_provider; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container) { + return new static( + $container->get('config.factory'), + $container->get('router.route_provider') + ); + } + /** * {@inheritdoc} */ @@ -30,29 +59,52 @@ protected function getEditableConfigNames() { public function buildForm(array $form, FormStateInterface $form_state) { $config = $this->config('require_login.config'); - // Login and destination paths. - $form['require_login_auth_path'] = [ + // Basic settings. + $form['auth_path'] = [ '#type' => 'textfield', - '#title' => $this->t('Login form path'), - '#description' => $this->t('Login path. Default is /user/login.'), - '#default_value' => $config->get('auth_path') ? $config->get('auth_path') : 'user/login', + '#title' => $this->t('Login path'), + '#description' => $this->t('Path to the user login page. Default: /user/login'), + '#default_value' => $config->get('auth_path') ? $config->get('auth_path') : '/user/login', ]; - $form['require_login_destination_path'] = [ + $form['destination_path'] = [ '#type' => 'textfield', - '#title' => $this->t('Login destination path'), - '#description' => $this->t('Login destination path. Leave blank to use default referer path.'), + '#title' => $this->t('Login destination'), + '#description' => $this->t('Predetermined post-login destination path. Leave blank for the default behavior.'), '#default_value' => $config->get('destination_path'), ]; - - // Access denied message. - $form['require_login_deny_message'] = [ + $form['deny_message'] = [ '#type' => 'textarea', '#title' => $this->t('Access denied message'), - '#description' => $this->t('Message shown to anonymous users attempting to access a restricted page. Leave blank to disable.'), + '#description' => $this->t('Show message to user attempting to access a restricted page. Leave blank to disable.'), '#default_value' => $config->get('deny_message'), ]; + $items = [ + '#theme' => 'item_list', + '#prefix' => $this->t('Exclude authentication checks on specific paths. <strong>Limit one path per line.</strong>'), + '#items' => [ + $this->t('Use <front> to exclude the front page.'), + $this->t('Use internal paths to exclude site pages. <em>I.E. /about/contact</em>'), + $this->t('Use URL parameters to further refine path matches. <em>I.E. /blog?year=current</em>'), + $this->t('Use wildcards (*) to match any part of a path. <em>I.E. /shop/*/orders</em>'), + ], + ]; + $form['excluded_paths'] = [ + '#type' => 'textarea', + '#title' => $this->t('Excluded paths'), + '#description' => render($items), + '#default_value' => $config->get('excluded_paths'), + ]; + $node_types = $config->get('excluded_node_types'); + $form['excluded_node_types'] = [ + '#type' => 'checkboxes', + '#title' => $this->t('Excluded content types'), + '#description' => $this->t('Exclude authentication checks on all pages of a specific content type.'), + '#options' => node_type_get_names(), + '#multiple' => TRUE, + '#default_value' => $node_types ? $node_types : [], + ]; - // Excluded exceptions and paths. + // Additional settings. $form['advanced'] = [ '#type' => 'details', '#title' => $this->t('Advanced settings'), @@ -60,91 +112,111 @@ public function buildForm(array $form, FormStateInterface $form_state) { $form['advanced']['excluded_403'] = [ '#type' => 'checkbox', '#title' => $this->t('Exclude 403 (access denied) page'), - '#description' => $this->t('Allow anonymous users to view the 403 (access denied) page.'), + '#description' => $this->t('Allow unauthenticated access to the 403 (access denied) page.'), '#default_value' => $config->get('excluded_403'), ]; $form['advanced']['excluded_404'] = [ '#type' => 'checkbox', '#title' => $this->t('Exclude 404 (not found) page'), - '#description' => $this->t('Allow anonymous users to view the 404 (not found) page.'), + '#description' => $this->t('Allow unauthenticated access to the 404 (not found) page.'), '#default_value' => $config->get('excluded_404'), ]; - $items = [ - '#theme' => 'item_list', - '#prefix' => $this->t('Disable login requirement on specific paths. <strong>Limit one per line.</strong>'), - '#items' => [ - $this->t('Use <front> to exclude the front page.'), - $this->t('Use internal paths to exclude site pages. <em>Examples: /about/contact, /blog?hello=world</em>'), - ], - ]; - $form['advanced']['require_login_excluded_paths'] = [ + $form['advanced']['excluded_routes'] = [ '#type' => 'textarea', - '#title' => $this->t('Path exclusions'), - '#description' => render($items), - '#default_value' => $config->get('excluded_paths'), + '#title' => $this->t('Excluded route names'), + '#description' => $this->t('Exclude authentication checks on specific route names. <strong>Limit one path per line.</strong>'), + '#default_value' => $config->get('excluded_routes'), ]; return parent::buildForm($form, $form_state); } /** - * {@inheritdoc} + * Process user inputted path. + * + * @var string &$path + * The path input. + * @var string $config_key + * The configuration key. + * @var \Drupal\Core\Form\FormStateInterface $form_state + * The form state. */ - public function validateForm(array &$form, FormStateInterface $form_state) { - $absolutes = []; - - // Validate excluded paths formatting. - $exclude_paths = explode(PHP_EOL, $form_state->getValue('require_login_excluded_paths')); - foreach ($exclude_paths as $key => $exclude_path) { - $exclude_path = trim($exclude_path); - if (empty($exclude_path) || $exclude_path == '<front>') { - continue; - } - $url = parse_url($exclude_path); - - // Detect protocol or domain name. - if (isset($url['scheme']) || isset($url['host']) || preg_match('/^www./i', $url['path'])) { - $absolutes[] = trim($exclude_path); - } + private function processPathInput(&$path, $config_key, FormStateInterface $form_state) { + $url_parts = parse_url(trim($path)); + // Verify path is valid. + if (!UrlHelper::isValid($url_parts['path'])) { + $form_state->setErrorByName($config_key, $this->t('Invalid path: %s', ['%s' => $path])); + return; + } + // Use parsed path in case user inputted schema and/or host. + $path = $url_parts['path']; + if (!empty($url_parts['query'])) { + $path .= '?' . $url_parts['query']; + } + // Prepend leading forward slash. + if (substr($path, 0, 1) !== '/') { + $path = '/' . $path; + } + } - // Confirm leading forward slash present. - elseif (substr($exclude_path, 0, 1) != '/') { - $exclude_paths[$key] = '/' . $exclude_path; - } + /** + * Array filter callback to remove empty elements. + * + * @var string $element + * The array element. + * + * @return bool + * TRUE if element should be removed. Otherwise FALSE. + */ + protected function arrayFilterEmpty($element) { + return !empty(trim($element)); + } - // Trim whitespace. - else { - $exclude_paths[$key] = $exclude_path; + /** + * {@inheritdoc} + */ + public function validateForm(array &$form, FormStateInterface $form_state) { + // Validate login and destination paths. + $config_keys = [ + 'require_login_auth_path', + 'require_login_destination_path', + ]; + foreach ($config_keys as $config_key) { + if ($path = $form_state->getValue($config_key)) { + $this->processPathInput($path, $config_key, $form_state); + $form_state->setValue($config_key, $path); } } - $form_state->setValue('require_login_excluded_paths', implode(PHP_EOL, $exclude_paths)); - if ($absolutes) { - $form_state->setErrorByName('require_login_excluded_paths', $this->t("Excluded paths cannot include a protocol or domain name. Invalid paths:<br />!paths", [ - '!paths' => implode('<br />', $absolutes), - ])); + // Validate excluded paths. + $excluded_paths = preg_split('/\r\n|\r|\n/', $form_state->getValue('require_login_excluded_paths')); + $excluded_paths = array_filter($excluded_paths, [ + $this, + 'arrayFilterEmpty', + ]); + foreach ($excluded_paths as $key => $path) { + if (!empty($path) && $path !== '<front>') { + $this->processPathInput($path, 'require_login_excluded_paths', $form_state); + $excluded_paths[$key] = $path; + } } - - // Validate login and destination path formatting. - foreach (['require_login_auth_path', 'require_login_destination_path'] as $form_key) { - $path = trim($form_state->getValue($form_key)); - if (!empty($path)) { - $url = parse_url($path); - - // Detect protocol or domain name. - if (isset($url['scheme']) || isset($url['host']) || preg_match('/^www./i', $url['path'])) { - $form_state->setErrorByName($form_key, $this->t('External URL detected. Must enter a relative path.')); - } - - // Confirm leading forward slash present. - elseif (substr($path, 0, 1) != '/') { - $form_state->setValue($form_key, '/' . $path); - } - - // Trim whitespace. - else { - $form_state->setValue($form_key, $path); - } + $form_state->setValue('require_login_excluded_paths', implode(PHP_EOL, $excluded_paths)); + + // Validate excluded route names. + $excluded_routes = preg_split('/\r\n|\r|\n/', $form_state->getValue('require_login_excluded_routes')); + $excluded_routes = array_filter($excluded_routes, [ + $this, + 'arrayFilterEmpty', + ]); + if (!empty($excluded_routes)) { + $valid_route_names = $this->routeProvider->getRoutesByNames($excluded_routes); + if ($invalid_route_names = array_diff($excluded_routes, array_keys($valid_route_names))) { + $items = [ + '#theme' => 'item_list', + '#prefix' => $this->t('Missing route names detected. You may remove them if the related modules will not be installed.'), + '#items' => $invalid_route_names, + ]; + $this->messenger()->addWarning(render($items)); } } } @@ -154,15 +226,17 @@ public function validateForm(array &$form, FormStateInterface $form_state) { */ public function submitForm(array &$form, FormStateInterface $form_state) { $this->config('require_login.config') - ->set('auth_path', $form_state->getValue('require_login_auth_path')) - ->set('destination_path', $form_state->getValue('require_login_destination_path')) - ->set('deny_message', $form_state->getValue('require_login_deny_message')) + ->set('auth_path', $form_state->getValue('auth_path')) + ->set('destination_path', $form_state->getValue('destination_path')) + ->set('deny_message', $form_state->getValue('deny_message')) ->set('excluded_403', $form_state->getValue('excluded_403')) ->set('excluded_404', $form_state->getValue('excluded_404')) - ->set('excluded_paths', $form_state->getValue('require_login_excluded_paths')) + ->set('excluded_paths', $form_state->getValue('excluded_paths')) + ->set('excluded_node_types', $form_state->getValue('excluded_node_types')) + ->set('excluded_routes', $form_state->getValue('excluded_routes')) ->save(); - // Must rebuild caches for settings to take immediate effect. + // Flush caches so changes take immediate effect. drupal_flush_all_caches(); parent::submitForm($form, $form_state); diff --git a/web/modules/contrib/webform/config/install/webform.webform.contact.yml b/web/modules/contrib/webform/config/install/webform.webform.contact.yml index 884cdf8c7..62ae88f62 100644 --- a/web/modules/contrib/webform/config/install/webform.webform.contact.yml +++ b/web/modules/contrib/webform/config/install/webform.webform.contact.yml @@ -40,7 +40,7 @@ elements: | '#type': webform_actions '#title': 'Submit button(s)' '#submit__label': 'Send message' - + css: '' javascript: '' settings: @@ -231,7 +231,7 @@ handlers: settings: states: - completed - to_mail: '[webform_submission:values:email:raw]' + to_mail: '[current-user:mail]' to_options: { } cc_mail: '' cc_options: { } diff --git a/web/modules/contrib/webform/includes/webform.install.update.inc b/web/modules/contrib/webform/includes/webform.install.update.inc index d1bf53ab0..485062e1e 100644 --- a/web/modules/contrib/webform/includes/webform.install.update.inc +++ b/web/modules/contrib/webform/includes/webform.install.update.inc @@ -3916,3 +3916,29 @@ function webform_update_8209() { function webform_update_8210() { _webform_update_webform_settings(); } + +/** + * Issue #174151 Webform Contact Form - open mail relay. + */ +function webform_update_8211() { + $config_factory = \Drupal::configFactory(); + + $config = $config_factory->getEditable('webform.webform.contact'); + if (!$config) { + return; + } + + $to_mail = $config->get('handlers.email_confirmation.settings.to_mail'); + if ($to_mail === '[webform_submission:values:email:raw]') { + $config->set('handlers.email_confirmation.settings.to_mail', '[current-user:mail]'); + $config->save(); + + /** @var \Drupal\webform\WebformHelpManagerInterface $help_manager */ + $help_manager = \Drupal::service('webform.help_manager'); + $help_manager->addNotification('webform_update_8211', + t("<strong>ATTENTION!!!</strong> The default Contact webform, included with the Webform module, has been updated to send the confirmation email to an authenticated user's email address.") . + ' ' . t('<a href=":href">Learn more</a>', [':href' => 'https://www.drupal.org/project/webform/releases/8.x-5.25']), + 'warning' + ); + } +} diff --git a/web/modules/contrib/webform/modules/webform_access/webform_access.info.yml b/web/modules/contrib/webform/modules/webform_access/webform_access.info.yml index 348127145..67be134be 100644 --- a/web/modules/contrib/webform/modules/webform_access/webform_access.info.yml +++ b/web/modules/contrib/webform/modules/webform_access/webform_access.info.yml @@ -7,7 +7,7 @@ dependencies: - 'webform:webform' - 'webform:webform_node' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_attachment/tests/modules/webform_attachment_test/webform_attachment_test.info.yml b/web/modules/contrib/webform/modules/webform_attachment/tests/modules/webform_attachment_test/webform_attachment_test.info.yml index 62b4362fd..09d779c40 100644 --- a/web/modules/contrib/webform/modules/webform_attachment/tests/modules/webform_attachment_test/webform_attachment_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_attachment/tests/modules/webform_attachment_test/webform_attachment_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_attachment' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_attachment/webform_attachment.info.yml b/web/modules/contrib/webform/modules/webform_attachment/webform_attachment.info.yml index 5014b9ba9..3812ccd4b 100644 --- a/web/modules/contrib/webform/modules/webform_attachment/webform_attachment.info.yml +++ b/web/modules/contrib/webform/modules/webform_attachment/webform_attachment.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_bootstrap/tests/modules/webform_bootstrap_test_module/webform_bootstrap_test_module.info.yml b/web/modules/contrib/webform/modules/webform_bootstrap/tests/modules/webform_bootstrap_test_module/webform_bootstrap_test_module.info.yml index bbdee0f3b..2e0bea0c1 100644 --- a/web/modules/contrib/webform/modules/webform_bootstrap/tests/modules/webform_bootstrap_test_module/webform_bootstrap_test_module.info.yml +++ b/web/modules/contrib/webform/modules/webform_bootstrap/tests/modules/webform_bootstrap_test_module/webform_bootstrap_test_module.info.yml @@ -8,7 +8,7 @@ dependencies: - 'webform:webform' - 'webform:webform_bootstrap' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_bootstrap/tests/themes/webform_bootstrap_test_theme/webform_bootstrap_test_theme.info.yml b/web/modules/contrib/webform/modules/webform_bootstrap/tests/themes/webform_bootstrap_test_theme/webform_bootstrap_test_theme.info.yml index 92cf24421..ccab40979 100644 --- a/web/modules/contrib/webform/modules/webform_bootstrap/tests/themes/webform_bootstrap_test_theme/webform_bootstrap_test_theme.info.yml +++ b/web/modules/contrib/webform/modules/webform_bootstrap/tests/themes/webform_bootstrap_test_theme/webform_bootstrap_test_theme.info.yml @@ -22,7 +22,7 @@ regions: libraries: - 'webform_bootstrap_test_theme/global-styling' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_bootstrap/webform_bootstrap.info.yml b/web/modules/contrib/webform/modules/webform_bootstrap/webform_bootstrap.info.yml index 71130259a..aff0488fd 100644 --- a/web/modules/contrib/webform/modules/webform_bootstrap/webform_bootstrap.info.yml +++ b/web/modules/contrib/webform/modules/webform_bootstrap/webform_bootstrap.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_cards/tests/modules/webform_cards_test/webform_cards_test.info.yml b/web/modules/contrib/webform/modules/webform_cards/tests/modules/webform_cards_test/webform_cards_test.info.yml index 6e94cc4b2..3abf30fc2 100644 --- a/web/modules/contrib/webform/modules/webform_cards/tests/modules/webform_cards_test/webform_cards_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_cards/tests/modules/webform_cards_test/webform_cards_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_cards' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_cards/webform_cards.info.yml b/web/modules/contrib/webform/modules/webform_cards/webform_cards.info.yml index 6444b60e4..d2c105a8f 100644 --- a/web/modules/contrib/webform/modules/webform_cards/webform_cards.info.yml +++ b/web/modules/contrib/webform/modules/webform_cards/webform_cards.info.yml @@ -8,7 +8,7 @@ dependencies: - 'webform:webform_clientside_validation' - 'drupal:inline_form_errors' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/webform_clientside_validation_test.info.yml b/web/modules/contrib/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/webform_clientside_validation_test.info.yml index 7eec94a72..86324868a 100644 --- a/web/modules/contrib/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/webform_clientside_validation_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/webform_clientside_validation_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_clientside_validation' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_clientside_validation/webform_clientside_validation.info.yml b/web/modules/contrib/webform/modules/webform_clientside_validation/webform_clientside_validation.info.yml index 013464817..0da9ff997 100644 --- a/web/modules/contrib/webform/modules/webform_clientside_validation/webform_clientside_validation.info.yml +++ b/web/modules/contrib/webform/modules/webform_clientside_validation/webform_clientside_validation.info.yml @@ -8,7 +8,7 @@ dependencies: - 'clientside_validation:clientside_validation' - 'clientside_validation:clientside_validation_jquery' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_demo/webform_demo_application_evaluation/webform_demo_application_evaluation.info.yml b/web/modules/contrib/webform/modules/webform_demo/webform_demo_application_evaluation/webform_demo_application_evaluation.info.yml index 8ff6f4811..8202296a1 100644 --- a/web/modules/contrib/webform/modules/webform_demo/webform_demo_application_evaluation/webform_demo_application_evaluation.info.yml +++ b/web/modules/contrib/webform/modules/webform_demo/webform_demo_application_evaluation/webform_demo_application_evaluation.info.yml @@ -9,7 +9,7 @@ dependencies: - 'webform:webform' - 'webform:webform_node' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.info.yml b/web/modules/contrib/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.info.yml index b5931ec67..d9d35baec 100644 --- a/web/modules/contrib/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.info.yml +++ b/web/modules/contrib/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.info.yml @@ -13,7 +13,7 @@ dependencies: - 'webform:webform_scheduled_email' - 'webform:webform_share' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_demo/webform_demo_group/webform_demo_group.info.yml b/web/modules/contrib/webform/modules/webform_demo/webform_demo_group/webform_demo_group.info.yml index 22aebb940..ffbc193ee 100644 --- a/web/modules/contrib/webform/modules/webform_demo/webform_demo_group/webform_demo_group.info.yml +++ b/web/modules/contrib/webform/modules/webform_demo/webform_demo_group/webform_demo_group.info.yml @@ -11,7 +11,7 @@ dependencies: - 'webform:webform_node' - 'webform:webform_group' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_demo/webform_demo_region_contact/webform_demo_region_contact.info.yml b/web/modules/contrib/webform/modules/webform_demo/webform_demo_region_contact/webform_demo_region_contact.info.yml index 97c607591..92fc8e87b 100644 --- a/web/modules/contrib/webform/modules/webform_demo/webform_demo_region_contact/webform_demo_region_contact.info.yml +++ b/web/modules/contrib/webform/modules/webform_demo/webform_demo_region_contact/webform_demo_region_contact.info.yml @@ -10,7 +10,7 @@ dependencies: - 'webform:webform_node' - 'webform:webform_access' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_devel/webform_devel.info.yml b/web/modules/contrib/webform/modules/webform_devel/webform_devel.info.yml index eb4113c5f..955743798 100644 --- a/web/modules/contrib/webform/modules/webform_devel/webform_devel.info.yml +++ b/web/modules/contrib/webform/modules/webform_devel/webform_devel.info.yml @@ -7,7 +7,7 @@ dependencies: - 'devel:devel' - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_editorial/webform_editorial.info.yml b/web/modules/contrib/webform/modules/webform_editorial/webform_editorial.info.yml index 504a58ea9..ce5e08901 100644 --- a/web/modules/contrib/webform/modules/webform_editorial/webform_editorial.info.yml +++ b/web/modules/contrib/webform/modules/webform_editorial/webform_editorial.info.yml @@ -8,7 +8,7 @@ hidden: true dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/webform_entity_print_test.info.yml b/web/modules/contrib/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/webform_entity_print_test.info.yml index f1fe5a63b..f89424ef7 100644 --- a/web/modules/contrib/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/webform_entity_print_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/webform_entity_print_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_entity_print' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_entity_print/webform_entity_print.info.yml b/web/modules/contrib/webform/modules/webform_entity_print/webform_entity_print.info.yml index f32f5820e..88ea42540 100644 --- a/web/modules/contrib/webform/modules/webform_entity_print/webform_entity_print.info.yml +++ b/web/modules/contrib/webform/modules/webform_entity_print/webform_entity_print.info.yml @@ -7,7 +7,7 @@ dependencies: - 'webform:webform' - 'entity_print:entity_print' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/webform_entity_print_attachment_test.info.yml b/web/modules/contrib/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/webform_entity_print_attachment_test.info.yml index dc22833e3..7463577df 100644 --- a/web/modules/contrib/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/webform_entity_print_attachment_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/webform_entity_print_attachment_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_entity_print_attachment' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_entity_print_attachment/webform_entity_print_attachment.info.yml b/web/modules/contrib/webform/modules/webform_entity_print_attachment/webform_entity_print_attachment.info.yml index b66d23fbb..0b3d5d85a 100644 --- a/web/modules/contrib/webform/modules/webform_entity_print_attachment/webform_entity_print_attachment.info.yml +++ b/web/modules/contrib/webform/modules/webform_entity_print_attachment/webform_entity_print_attachment.info.yml @@ -7,7 +7,7 @@ dependencies: - 'webform:webform_attachment' - 'webform:webform_entity_print' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_example_composite/webform_example_composite.info.yml b/web/modules/contrib/webform/modules/webform_example_composite/webform_example_composite.info.yml index cba5ed4f0..b3dff1982 100644 --- a/web/modules/contrib/webform/modules/webform_example_composite/webform_example_composite.info.yml +++ b/web/modules/contrib/webform/modules/webform_example_composite/webform_example_composite.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_example_custom_form/webform_example_custom_form.info.yml b/web/modules/contrib/webform/modules/webform_example_custom_form/webform_example_custom_form.info.yml index d0e335257..da979c44a 100644 --- a/web/modules/contrib/webform/modules/webform_example_custom_form/webform_example_custom_form.info.yml +++ b/web/modules/contrib/webform/modules/webform_example_custom_form/webform_example_custom_form.info.yml @@ -8,7 +8,7 @@ dependencies: - 'webform:webform' - 'webform:webform_devel' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_example_element/webform_example_element.info.yml b/web/modules/contrib/webform/modules/webform_example_element/webform_example_element.info.yml index 929dac80e..cde1d7c34 100644 --- a/web/modules/contrib/webform/modules/webform_example_element/webform_example_element.info.yml +++ b/web/modules/contrib/webform/modules/webform_example_element/webform_example_element.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_example_element_properties/webform_example_element_properties.info.yml b/web/modules/contrib/webform/modules/webform_example_element_properties/webform_example_element_properties.info.yml index 862503cca..b65881ea2 100644 --- a/web/modules/contrib/webform/modules/webform_example_element_properties/webform_example_element_properties.info.yml +++ b/web/modules/contrib/webform/modules/webform_example_element_properties/webform_example_element_properties.info.yml @@ -7,7 +7,7 @@ dependencies: - 'webform:webform' - 'webform:webform_ui' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_example_handler/webform_example_handler.info.yml b/web/modules/contrib/webform/modules/webform_example_handler/webform_example_handler.info.yml index 365b50790..e14c3828d 100644 --- a/web/modules/contrib/webform/modules/webform_example_handler/webform_example_handler.info.yml +++ b/web/modules/contrib/webform/modules/webform_example_handler/webform_example_handler.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_example_remote_post/webform_example_remote_post.info.yml b/web/modules/contrib/webform/modules/webform_example_remote_post/webform_example_remote_post.info.yml index de8f19387..641ee73ce 100644 --- a/web/modules/contrib/webform/modules/webform_example_remote_post/webform_example_remote_post.info.yml +++ b/web/modules/contrib/webform/modules/webform_example_remote_post/webform_example_remote_post.info.yml @@ -7,7 +7,7 @@ dependencies: - 'token:token' - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_example_variant/webform_example_variant.info.yml b/web/modules/contrib/webform/modules/webform_example_variant/webform_example_variant.info.yml index 353a12242..aa48078fd 100644 --- a/web/modules/contrib/webform/modules/webform_example_variant/webform_example_variant.info.yml +++ b/web/modules/contrib/webform/modules/webform_example_variant/webform_example_variant.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_examples/webform_examples.info.yml b/web/modules/contrib/webform/modules/webform_examples/webform_examples.info.yml index 6403fdd19..53cfba9d7 100644 --- a/web/modules/contrib/webform/modules/webform_examples/webform_examples.info.yml +++ b/web/modules/contrib/webform/modules/webform_examples/webform_examples.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_examples_accessibility/webform_examples_accessibility.info.yml b/web/modules/contrib/webform/modules/webform_examples_accessibility/webform_examples_accessibility.info.yml index d6c62d0c1..812fa5270 100644 --- a/web/modules/contrib/webform/modules/webform_examples_accessibility/webform_examples_accessibility.info.yml +++ b/web/modules/contrib/webform/modules/webform_examples_accessibility/webform_examples_accessibility.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'drupal:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_group/tests/modules/webform_group_test/webform_group_test.info.yml b/web/modules/contrib/webform/modules/webform_group/tests/modules/webform_group_test/webform_group_test.info.yml index 5320bf7f1..fa5de27ff 100644 --- a/web/modules/contrib/webform/modules/webform_group/tests/modules/webform_group_test/webform_group_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_group/tests/modules/webform_group_test/webform_group_test.info.yml @@ -7,7 +7,7 @@ dependencies: - 'webform:webform_group' - 'group:group_test_config' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_group/webform_group.info.yml b/web/modules/contrib/webform/modules/webform_group/webform_group.info.yml index 2fbf03ba0..c21dec23c 100644 --- a/web/modules/contrib/webform/modules/webform_group/webform_group.info.yml +++ b/web/modules/contrib/webform/modules/webform_group/webform_group.info.yml @@ -9,7 +9,7 @@ dependencies: - 'group:group' - 'group:gnode' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_icheck/tests/modules/webform_icheck_test/webform_icheck_test.info.yml b/web/modules/contrib/webform/modules/webform_icheck/tests/modules/webform_icheck_test/webform_icheck_test.info.yml index 29e32560a..fa0c4d0c0 100644 --- a/web/modules/contrib/webform/modules/webform_icheck/tests/modules/webform_icheck_test/webform_icheck_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_icheck/tests/modules/webform_icheck_test/webform_icheck_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_icheck' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_icheck/webform_icheck.info.yml b/web/modules/contrib/webform/modules/webform_icheck/webform_icheck.info.yml index f9db8d77a..947099718 100644 --- a/web/modules/contrib/webform/modules/webform_icheck/webform_icheck.info.yml +++ b/web/modules/contrib/webform/modules/webform_icheck/webform_icheck.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_image_select/tests/modules/webform_image_select_test/webform_image_select_test.info.yml b/web/modules/contrib/webform/modules/webform_image_select/tests/modules/webform_image_select_test/webform_image_select_test.info.yml index 741861c23..94cb13b11 100644 --- a/web/modules/contrib/webform/modules/webform_image_select/tests/modules/webform_image_select_test/webform_image_select_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_image_select/tests/modules/webform_image_select_test/webform_image_select_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_image_select' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_image_select/webform_image_select.info.yml b/web/modules/contrib/webform/modules/webform_image_select/webform_image_select.info.yml index 0dbad3408..d3e8948e5 100644 --- a/web/modules/contrib/webform/modules/webform_image_select/webform_image_select.info.yml +++ b/web/modules/contrib/webform/modules/webform_image_select/webform_image_select.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/webform_jqueryui_buttons_test.info.yml b/web/modules/contrib/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/webform_jqueryui_buttons_test.info.yml index 1353391b7..ef49a487c 100644 --- a/web/modules/contrib/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/webform_jqueryui_buttons_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/webform_jqueryui_buttons_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_jqueryui_buttons' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_jqueryui_buttons/webform_jqueryui_buttons.info.yml b/web/modules/contrib/webform/modules/webform_jqueryui_buttons/webform_jqueryui_buttons.info.yml index 7dbe5cbf9..c45307a9e 100644 --- a/web/modules/contrib/webform/modules/webform_jqueryui_buttons/webform_jqueryui_buttons.info.yml +++ b/web/modules/contrib/webform/modules/webform_jqueryui_buttons/webform_jqueryui_buttons.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/webform_location_geocomplete_test.info.yml b/web/modules/contrib/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/webform_location_geocomplete_test.info.yml index dc0d4c92f..169351694 100644 --- a/web/modules/contrib/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/webform_location_geocomplete_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/webform_location_geocomplete_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_location_geocomplete' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_location_geocomplete/webform_location_geocomplete.info.yml b/web/modules/contrib/webform/modules/webform_location_geocomplete/webform_location_geocomplete.info.yml index 6cbd4e88c..5e4b92185 100644 --- a/web/modules/contrib/webform/modules/webform_location_geocomplete/webform_location_geocomplete.info.yml +++ b/web/modules/contrib/webform/modules/webform_location_geocomplete/webform_location_geocomplete.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_node/tests/modules/webform_node_test_multiple/webform_node_test_multiple.info.yml b/web/modules/contrib/webform/modules/webform_node/tests/modules/webform_node_test_multiple/webform_node_test_multiple.info.yml index 8e8b205ee..1efaf0493 100644 --- a/web/modules/contrib/webform/modules/webform_node/tests/modules/webform_node_test_multiple/webform_node_test_multiple.info.yml +++ b/web/modules/contrib/webform/modules/webform_node/tests/modules/webform_node_test_multiple/webform_node_test_multiple.info.yml @@ -13,7 +13,7 @@ dependencies: - 'webform:webform' - 'webform:webform_node' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_node/tests/modules/webform_node_test_translation/webform_node_test_translation.info.yml b/web/modules/contrib/webform/modules/webform_node/tests/modules/webform_node_test_translation/webform_node_test_translation.info.yml index 649770a4a..e44e91f8f 100644 --- a/web/modules/contrib/webform/modules/webform_node/tests/modules/webform_node_test_translation/webform_node_test_translation.info.yml +++ b/web/modules/contrib/webform/modules/webform_node/tests/modules/webform_node_test_translation/webform_node_test_translation.info.yml @@ -9,7 +9,7 @@ dependencies: - 'webform:webform_test_translation' - 'drupal:content_translation' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_node/webform_node.info.yml b/web/modules/contrib/webform/modules/webform_node/webform_node.info.yml index f458dc488..01833dd94 100644 --- a/web/modules/contrib/webform/modules/webform_node/webform_node.info.yml +++ b/web/modules/contrib/webform/modules/webform_node/webform_node.info.yml @@ -11,7 +11,7 @@ dependencies: - 'drupal:user' - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/webform_options_custom_entity_test.info.yml b/web/modules/contrib/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/webform_options_custom_entity_test.info.yml index 0498e7510..569542215 100644 --- a/web/modules/contrib/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/webform_options_custom_entity_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/webform_options_custom_entity_test.info.yml @@ -8,7 +8,7 @@ dependencies: - 'webform:webform_options_limit' - 'webform:webform_options_custom' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/webform_options_custom_test.info.yml b/web/modules/contrib/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/webform_options_custom_test.info.yml index 3c76e7b7a..ce8dddd61 100644 --- a/web/modules/contrib/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/webform_options_custom_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/webform_options_custom_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_options_custom' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_options_custom/webform_options_custom.info.yml b/web/modules/contrib/webform/modules/webform_options_custom/webform_options_custom.info.yml index 511427bc9..c92b7c852 100644 --- a/web/modules/contrib/webform/modules/webform_options_custom/webform_options_custom.info.yml +++ b/web/modules/contrib/webform/modules/webform_options_custom/webform_options_custom.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/webform_options_limit_test.info.yml b/web/modules/contrib/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/webform_options_limit_test.info.yml index 0dad085f8..1174a64fb 100644 --- a/web/modules/contrib/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/webform_options_limit_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/webform_options_limit_test.info.yml @@ -7,7 +7,7 @@ dependencies: - 'webform:webform' - 'webform:webform_options_limit' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_options_limit/webform_options_limit.info.yml b/web/modules/contrib/webform/modules/webform_options_limit/webform_options_limit.info.yml index e71242e03..b062a5500 100644 --- a/web/modules/contrib/webform/modules/webform_options_limit/webform_options_limit.info.yml +++ b/web/modules/contrib/webform/modules/webform_options_limit/webform_options_limit.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/webform_scheduled_email_test.info.yml b/web/modules/contrib/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/webform_scheduled_email_test.info.yml index f5e97a8b6..1d0e663cb 100644 --- a/web/modules/contrib/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/webform_scheduled_email_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/webform_scheduled_email_test.info.yml @@ -7,7 +7,7 @@ dependencies: - 'webform:webform' - 'webform:webform_scheduled_email' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/webform_scheduled_email_test_translation.info.yml b/web/modules/contrib/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/webform_scheduled_email_test_translation.info.yml index 29a43f434..1c8d55b3d 100644 --- a/web/modules/contrib/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/webform_scheduled_email_test_translation.info.yml +++ b/web/modules/contrib/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/webform_scheduled_email_test_translation.info.yml @@ -10,7 +10,7 @@ dependencies: - 'webform:webform' - 'webform:webform_scheduled_email' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_scheduled_email/webform_scheduled_email.info.yml b/web/modules/contrib/webform/modules/webform_scheduled_email/webform_scheduled_email.info.yml index 414438a89..88f33bd0b 100644 --- a/web/modules/contrib/webform/modules/webform_scheduled_email/webform_scheduled_email.info.yml +++ b/web/modules/contrib/webform/modules/webform_scheduled_email/webform_scheduled_email.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_share/webform_share.info.yml b/web/modules/contrib/webform/modules/webform_share/webform_share.info.yml index b604fa4da..afc91607b 100644 --- a/web/modules/contrib/webform/modules/webform_share/webform_share.info.yml +++ b/web/modules/contrib/webform/modules/webform_share/webform_share.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_shortcuts/webform_shortcuts.info.yml b/web/modules/contrib/webform/modules/webform_shortcuts/webform_shortcuts.info.yml index 4cf84fce9..c6f284f40 100644 --- a/web/modules/contrib/webform/modules/webform_shortcuts/webform_shortcuts.info.yml +++ b/web/modules/contrib/webform/modules/webform_shortcuts/webform_shortcuts.info.yml @@ -7,7 +7,7 @@ dependencies: - 'webform:webform' - 'webform:webform_ui' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/webform_submission_export_import_test.info.yml b/web/modules/contrib/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/webform_submission_export_import_test.info.yml index e1a9f07ed..cda45c6b3 100644 --- a/web/modules/contrib/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/webform_submission_export_import_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/webform_submission_export_import_test.info.yml @@ -7,7 +7,7 @@ dependencies: - 'webform:webform_submission_export_import' - 'webform:webform_image_select' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_submission_export_import/webform_submission_export_import.info.yml b/web/modules/contrib/webform/modules/webform_submission_export_import/webform_submission_export_import.info.yml index 73d8b5e1e..a8899fec8 100644 --- a/web/modules/contrib/webform/modules/webform_submission_export_import/webform_submission_export_import.info.yml +++ b/web/modules/contrib/webform/modules/webform_submission_export_import/webform_submission_export_import.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_submission_log/webform_submission_log.info.yml b/web/modules/contrib/webform/modules/webform_submission_log/webform_submission_log.info.yml index 87d75166c..a1e687888 100644 --- a/web/modules/contrib/webform/modules/webform_submission_log/webform_submission_log.info.yml +++ b/web/modules/contrib/webform/modules/webform_submission_log/webform_submission_log.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_templates/webform_templates.info.yml b/web/modules/contrib/webform/modules/webform_templates/webform_templates.info.yml index 9d907c694..27d3a3509 100644 --- a/web/modules/contrib/webform/modules/webform_templates/webform_templates.info.yml +++ b/web/modules/contrib/webform/modules/webform_templates/webform_templates.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_toggles/tests/modules/webform_toggles_test/webform_toggles_test.info.yml b/web/modules/contrib/webform/modules/webform_toggles/tests/modules/webform_toggles_test/webform_toggles_test.info.yml index fde10032a..4f09f5984 100644 --- a/web/modules/contrib/webform/modules/webform_toggles/tests/modules/webform_toggles_test/webform_toggles_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_toggles/tests/modules/webform_toggles_test/webform_toggles_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_toggles' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_toggles/webform_toggles.info.yml b/web/modules/contrib/webform/modules/webform_toggles/webform_toggles.info.yml index d36927e48..454481352 100644 --- a/web/modules/contrib/webform/modules/webform_toggles/webform_toggles.info.yml +++ b/web/modules/contrib/webform/modules/webform_toggles/webform_toggles.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_ui/webform_ui.info.yml b/web/modules/contrib/webform/modules/webform_ui/webform_ui.info.yml index 7acb38f7b..8574bc9a8 100644 --- a/web/modules/contrib/webform/modules/webform_ui/webform_ui.info.yml +++ b/web/modules/contrib/webform/modules/webform_ui/webform_ui.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test/webform_test.info.yml b/web/modules/contrib/webform/tests/modules/webform_test/webform_test.info.yml index 3f7714f0d..f20935069 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test/webform_test.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test/webform_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_ajax/webform_test_ajax.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_ajax/webform_test_ajax.info.yml index 3c023030f..ab46714ee 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_ajax/webform_test_ajax.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_ajax/webform_test_ajax.info.yml @@ -7,7 +7,7 @@ dependencies: - 'drupal:block' - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_alter_hooks/webform_test_alter_hooks.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_alter_hooks/webform_test_alter_hooks.info.yml index 95717aa08..eb6870da2 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_alter_hooks/webform_test_alter_hooks.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_alter_hooks/webform_test_alter_hooks.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_block_context/webform_test_block_context.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_block_context/webform_test_block_context.info.yml index a657efe00..d24ec3d93 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_block_context/webform_test_block_context.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_block_context/webform_test_block_context.info.yml @@ -7,7 +7,7 @@ dependencies: - 'drupal:block' - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_block_custom/webform_test_block_custom.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_block_custom/webform_test_block_custom.info.yml index 7b33c5415..d8ec39f00 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_block_custom/webform_test_block_custom.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_block_custom/webform_test_block_custom.info.yml @@ -8,7 +8,7 @@ dependencies: - 'drupal:block_content' - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_block_submission_limit/webform_test_block_submission_limit.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_block_submission_limit/webform_test_block_submission_limit.info.yml index 68d6bd3b4..0c1dbb000 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_block_submission_limit/webform_test_block_submission_limit.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_block_submission_limit/webform_test_block_submission_limit.info.yml @@ -7,7 +7,7 @@ dependencies: - 'drupal:block' - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_config_performance/webform_test_config_performance.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_config_performance/webform_test_config_performance.info.yml index bcede73e9..95693121f 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_config_performance/webform_test_config_performance.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_config_performance/webform_test_config_performance.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_element/webform_test_element.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_element/webform_test_element.info.yml index 81c447312..eec466520 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_element/webform_test_element.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_element/webform_test_element.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_element_input_masks/webform_test_element_input_masks.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_element_input_masks/webform_test_element_input_masks.info.yml index df25a23e2..b3cde9dea 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_element_input_masks/webform_test_element_input_masks.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_element_input_masks/webform_test_element_input_masks.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_entity_reference_views/webform_test_entity_reference_views.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_entity_reference_views/webform_test_entity_reference_views.info.yml index d38be2850..195b36c36 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_entity_reference_views/webform_test_entity_reference_views.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_entity_reference_views/webform_test_entity_reference_views.info.yml @@ -9,7 +9,7 @@ dependencies: - 'drupal:views' - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_exporter/webform_test_exporter.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_exporter/webform_test_exporter.info.yml index dda53dcb9..9f5c90280 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_exporter/webform_test_exporter.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_exporter/webform_test_exporter.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_handler/webform_test_handler.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_handler/webform_test_handler.info.yml index e0bddfa5f..91487d1b5 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_handler/webform_test_handler.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_handler/webform_test_handler.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_handler_invoke_alter/webform_test_handler_invoke_alter.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_handler_invoke_alter/webform_test_handler_invoke_alter.info.yml index 19124b858..8688e45a7 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_handler_invoke_alter/webform_test_handler_invoke_alter.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_handler_invoke_alter/webform_test_handler_invoke_alter.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_handler_remote_post/webform_test_handler_remote_post.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_handler_remote_post/webform_test_handler_remote_post.info.yml index 03e82600a..d2d582fd8 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_handler_remote_post/webform_test_handler_remote_post.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_handler_remote_post/webform_test_handler_remote_post.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_markup/webform_test_markup.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_markup/webform_test_markup.info.yml index da7a5c902..c429c93c1 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_markup/webform_test_markup.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_markup/webform_test_markup.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_message_custom/webform_test_message_custom.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_message_custom/webform_test_message_custom.info.yml index 8065973ef..deecacd2e 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_message_custom/webform_test_message_custom.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_message_custom/webform_test_message_custom.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_options/webform_test_options.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_options/webform_test_options.info.yml index fbb538104..badf605eb 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_options/webform_test_options.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_options/webform_test_options.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_paragraphs/webform_test_paragraphs.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_paragraphs/webform_test_paragraphs.info.yml index 51a75befa..c1ce647e2 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_paragraphs/webform_test_paragraphs.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_paragraphs/webform_test_paragraphs.info.yml @@ -7,7 +7,7 @@ dependencies: - 'paragraphs:paragraphs' - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_rest/webform_test_rest.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_rest/webform_test_rest.info.yml index 8fe01a267..bb8a98526 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_rest/webform_test_rest.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_rest/webform_test_rest.info.yml @@ -9,7 +9,7 @@ dependencies: - 'drupal:serialization' - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_states/webform_test_states.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_states/webform_test_states.info.yml index bfd09d165..1a0d23dfd 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_states/webform_test_states.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_states/webform_test_states.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_submissions/webform_test_submissions.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_submissions/webform_test_submissions.info.yml index ec5dbb0e8..01dc11c90 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_submissions/webform_test_submissions.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_submissions/webform_test_submissions.info.yml @@ -7,7 +7,7 @@ dependencies: - 'drupal:node' - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_third_party_settings/webform_test_third_party_settings.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_third_party_settings/webform_test_third_party_settings.info.yml index ee52060c1..d04ec722e 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_third_party_settings/webform_test_third_party_settings.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_third_party_settings/webform_test_third_party_settings.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_translation/webform_test_translation.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_translation/webform_test_translation.info.yml index a48349668..aed93b4bc 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_translation/webform_test_translation.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_translation/webform_test_translation.info.yml @@ -9,7 +9,7 @@ dependencies: - 'drupal:locale' - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_translation_lingotek/webform_test_translation_lingotek.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_translation_lingotek/webform_test_translation_lingotek.info.yml index e6ac9f7c3..8fb6b62ec 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_translation_lingotek/webform_test_translation_lingotek.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_translation_lingotek/webform_test_translation_lingotek.info.yml @@ -10,7 +10,7 @@ dependencies: - 'lingotek:lingotek' - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_validate/webform_test_validate.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_validate/webform_test_validate.info.yml index 53d7d871a..0fae9b928 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_validate/webform_test_validate.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_validate/webform_test_validate.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_variant/webform_test_variant.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_variant/webform_test_variant.info.yml index dafa50a0b..df13737da 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_variant/webform_test_variant.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_variant/webform_test_variant.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_views/webform_test_views.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_views/webform_test_views.info.yml index e967a1fbd..424379b59 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_views/webform_test_views.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_views/webform_test_views.info.yml @@ -9,7 +9,7 @@ dependencies: - 'drupal:views' - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_wizard_custom/webform_test_wizard_custom.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_wizard_custom/webform_test_wizard_custom.info.yml index 5bf58e01b..3f9292b5b 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_wizard_custom/webform_test_wizard_custom.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_wizard_custom/webform_test_wizard_custom.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/themes/webform_test_bartik/webform_test_bartik.info.yml b/web/modules/contrib/webform/tests/themes/webform_test_bartik/webform_test_bartik.info.yml index 532e9dc3a..61dc4c4c9 100644 --- a/web/modules/contrib/webform/tests/themes/webform_test_bartik/webform_test_bartik.info.yml +++ b/web/modules/contrib/webform/tests/themes/webform_test_bartik/webform_test_bartik.info.yml @@ -5,7 +5,7 @@ name: 'Webform Bartik test' description: 'Support theme for webform Bartik integration testing.' package: 'Webform Testing' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/webform.info.yml b/web/modules/contrib/webform/webform.info.yml index e30e4798d..141195600 100644 --- a/web/modules/contrib/webform/webform.info.yml +++ b/web/modules/contrib/webform/webform.info.yml @@ -8,7 +8,7 @@ dependencies: - 'drupal:field' - 'drupal:user' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 -- GitLab