From a0d3413e8c1b71798bde6e3167b99e63d7777330 Mon Sep 17 00:00:00 2001 From: bcweaver <brianweaver@gmail.com> Date: Fri, 1 Feb 2019 10:35:20 -0500 Subject: [PATCH] Update 'devel' module to v2.0 - v1.2 is no longer supported --- composer.json | 2 +- composer.lock | 29 +- vendor/composer/installed.json | 29 +- web/modules/devel/README.txt | 99 ++++-- web/modules/devel/composer.json | 13 +- .../config/install/devel.toolbar.settings.yml | 1 - web/modules/devel/devel.info.yml | 6 +- web/modules/devel/devel.links.menu.yml | 4 - web/modules/devel/devel.module | 14 + web/modules/devel/devel.permissions.yml | 5 - web/modules/devel/devel.routing.yml | 10 - web/modules/devel/devel_generate/README.txt | 2 +- .../devel/devel_generate/composer.json | 52 +++ .../devel_generate/devel_generate.info.yml | 8 +- .../devel_generate/devel_generate.module | 2 +- .../src/Form/DevelGenerateForm.php | 6 +- .../devel_generate_example.info.yml | 10 +- .../devel_generate_example.module | 1 - .../DevelGenerate/ExampleDevelGenerate.php | 2 +- web/modules/devel/drush/develDrushTest.php | 38 -- web/modules/devel/kint/kint.info.yml | 6 +- web/modules/devel/run-tests-drush.sh | 21 -- web/modules/devel/src/DevelDumperManager.php | 7 +- .../ThemeInfoRebuildSubscriber.php | 2 +- web/modules/devel/src/Form/ConfigEditor.php | 6 +- web/modules/devel/src/Form/ConfigsList.php | 5 +- web/modules/devel/src/Form/DevelReinstall.php | 6 +- web/modules/devel/src/Form/ExecutePHP.php | 55 --- web/modules/devel/src/Form/SettingsForm.php | 2 +- .../devel/src/Form/SystemStateEdit.php | 10 +- .../src/Plugin/Block/DevelExecutePHP.php | 33 -- .../devel_dumper_test.info.yml | 6 +- .../devel_entity_test.info.yml | 12 +- .../modules/devel_test/devel_test.info.yml | 6 +- .../tests/src/Functional/DevelDumperTest.php | 2 +- .../tests/src/Functional/DevelToolbarTest.php | 2 - .../tests/src/Kernel/DevelQueryDebugTest.php | 4 +- .../src/Kernel/DevelTwigExtensionTest.php | 2 +- .../devel/tests/src/Unish/DevelDrushTest.php | 31 ++ web/modules/devel/tests/src/Unish/README.md | 6 + .../src/Controller/ToolbarController.php | 4 +- .../DataCollector/DatabaseDataCollector.php | 12 +- .../DrupalDataCollectorTrait.php | 9 +- .../src/DataCollector/FormsDataCollector.php | 4 +- .../DataCollector/RequestDataCollector.php | 34 +- .../Config/ImageStyleStorageDecorator.php | 33 ++ .../src/Entity/EntityManagerWrapper.php | 4 + .../TraceableEventDispatcher.php | 33 +- .../EventSubscriber/ProfilerSubscriber.php | 118 +++++++ .../devel/webprofiler/src/Form/ConfigForm.php | 3 +- .../src/Http/HttpClientMiddleware.php | 12 +- .../src/Mail/MailManagerWrapper.php | 10 + .../src/ProxyClass/Command/ListCommand.php | 325 ++++++++++++++++++ .../templates/Collector/database.html.twig | 2 +- .../templates/Collector/events.html.twig | 8 +- .../templates/Collector/request.html.twig | 28 +- .../templates/Collector/views.html.twig | 6 +- .../devel/webprofiler/webprofiler.info.yml | 8 +- .../webprofiler/webprofiler.services.yml | 2 +- 59 files changed, 893 insertions(+), 319 deletions(-) create mode 100644 web/modules/devel/devel_generate/composer.json delete mode 100644 web/modules/devel/devel_generate/tests/modules/devel_generate_example/devel_generate_example.module delete mode 100644 web/modules/devel/drush/develDrushTest.php delete mode 100644 web/modules/devel/run-tests-drush.sh delete mode 100644 web/modules/devel/src/Form/ExecutePHP.php delete mode 100644 web/modules/devel/src/Plugin/Block/DevelExecutePHP.php create mode 100644 web/modules/devel/tests/src/Unish/DevelDrushTest.php create mode 100644 web/modules/devel/tests/src/Unish/README.md create mode 100644 web/modules/devel/webprofiler/src/Entity/Decorators/Config/ImageStyleStorageDecorator.php create mode 100644 web/modules/devel/webprofiler/src/EventSubscriber/ProfilerSubscriber.php create mode 100644 web/modules/devel/webprofiler/src/ProxyClass/Command/ListCommand.php diff --git a/composer.json b/composer.json index d808be0700..b08249dbc4 100644 --- a/composer.json +++ b/composer.json @@ -88,7 +88,7 @@ "drupal/crop": "2.0-rc1", "drupal/ctools": "3.0", "drupal/ctools_views": "3.0", - "drupal/devel": "1.2", + "drupal/devel": "2.0", "drupal/draggableviews": "1.0", "drupal/dropzonejs": "2.0-alpha3", "drupal/editor_advanced_link": "1.4", diff --git a/composer.lock b/composer.lock index 67a83c99d6..7874c5740d 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "c290884be59436699c4bc44490b1ab04", + "content-hash": "43369c4e3000a8ac8d21e8dce1d982eb", "packages": [ { "name": "alchemy/zippy", @@ -2844,36 +2844,39 @@ }, { "name": "drupal/devel", - "version": "1.2.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://git.drupal.org/project/devel", - "reference": "8.x-1.2" + "reference": "8.x-2.0" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/devel-8.x-1.2.zip", - "reference": "8.x-1.2", - "shasum": "01f3349ef75f6e21fceef24be9d3d6506ca29647" + "url": "https://ftp.drupal.org/files/projects/devel-8.x-2.0.zip", + "reference": "8.x-2.0", + "shasum": "cf5fb816f767f3cac4f2e170ab39e982d5e0698b" }, "require": { - "drupal/core": "~8.0" - }, - "suggest": { - "symfony/var-dumper": "Pretty print complex values better with var-dumper available" + "drupal/core": "~8.0", + "symfony/var-dumper": "~2.7|^3" }, "type": "drupal-module", "extra": { "branch-alias": { - "dev-1.x": "1.x-dev" + "dev-2.x": "2.x-dev" }, "drupal": { - "version": "8.x-1.2", - "datestamp": "1507197844", + "version": "8.x-2.0", + "datestamp": "1548799380", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" } + }, + "drush": { + "services": { + "drush.services.yml": "^9" + } } }, "notification-url": "https://packages.drupal.org/8/downloads", diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index cfb96f43e1..b252991343 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -2930,37 +2930,40 @@ }, { "name": "drupal/devel", - "version": "1.2.0", - "version_normalized": "1.2.0.0", + "version": "2.0.0", + "version_normalized": "2.0.0.0", "source": { "type": "git", "url": "https://git.drupal.org/project/devel", - "reference": "8.x-1.2" + "reference": "8.x-2.0" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/devel-8.x-1.2.zip", - "reference": "8.x-1.2", - "shasum": "01f3349ef75f6e21fceef24be9d3d6506ca29647" + "url": "https://ftp.drupal.org/files/projects/devel-8.x-2.0.zip", + "reference": "8.x-2.0", + "shasum": "cf5fb816f767f3cac4f2e170ab39e982d5e0698b" }, "require": { - "drupal/core": "~8.0" - }, - "suggest": { - "symfony/var-dumper": "Pretty print complex values better with var-dumper available" + "drupal/core": "~8.0", + "symfony/var-dumper": "~2.7|^3" }, "type": "drupal-module", "extra": { "branch-alias": { - "dev-1.x": "1.x-dev" + "dev-2.x": "2.x-dev" }, "drupal": { - "version": "8.x-1.2", - "datestamp": "1507197844", + "version": "8.x-2.0", + "datestamp": "1548799380", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" } + }, + "drush": { + "services": { + "drush.services.yml": "^9" + } } }, "installation-source": "dist", diff --git a/web/modules/devel/README.txt b/web/modules/devel/README.txt index 9ac4acf9bf..634f226a19 100644 --- a/web/modules/devel/README.txt +++ b/web/modules/devel/README.txt @@ -1,8 +1,23 @@ -Devel -========== -Devel module contains helper functions and pages for Drupal developers and inquisitive admins: +README.txt for Devel module +--------------------------- + +CONTENTS OF THIS FILE +--------------------- + + * Introduction + * Requirements + * Included Modules and Features + * Recommended Modules + * Installation + * Configuration + * Maintainers + +INTRODUCTION +------------ + +Devel module contains helper functions and pages for Drupal developers and +inquisitive admins: - - A block for running custom PHP on a page - A block for quickly accessing devel pages - A block for masquerading as other users (useful for testing) - A mail-system class which redirects outbound email to files @@ -13,35 +28,61 @@ Devel module contains helper functions and pages for Drupal developers and inqui This module is safe to use on a production site. Just be sure to only grant 'access development information' permission to developers. -Devel Kint -=================== -Provides a dpr() function, which pretty prints variables. + - For a full description of the module visit: + https://www.drupal.org/project/devel + + - To submit bug reports and feature suggestions, or to track changes visit: + https://www.drupal.org/project/issues/devel + + +REQUIREMENTS +------------ + +This module requires no modules outside of Drupal core. + + +INCLUDED MODULES AND FEATURES +----------------------------- + +Devel Kint - Provides a dpr() function, which pretty prints variables. Useful during development. Also see similar helpers like dpm(), dvm(). -Webprofiler -============== -Adds a debug bar at bottom of all pages with tons of useful information like a query list, -cache hit/miss data, memory profiling, page speed, php info, session info, etc. +Webprofiler - Adds a debug bar at bottom of all pages with tons of useful +information like a query list, cache hit/miss data, memory profiling, page +speed, php info, session info, etc. + +Devel Generate - Bulk creates nodes, users, comment, terms for development. Has +Drush integration. + +Drush Unit Testing - See develDrushTest.php for an example of unit testing of +the Drush integration. This uses Drush's own test framework, based on PHPUnit. +To run the tests, use run-tests-drush.sh. You may pass in any arguments that +are valid for `phpunit`. + + +RECOMMENDED MODULE +------------------ -Devel Generate -================= -Bulk creates nodes, users, comment, terms for development. Has Drush integration. +Devel Generate Extensions - Devel Images Provider allows to configure external +providers for images. -Devel Generate Extensions -========================= -Devel Images Provider [http://drupal.org/project/devel_image_provider] allows to configure external providers for images. + - http://drupal.org/project/devel_image_provider + + +INSTALLATION +------------ + + - Install the Devel module as you would normally install a contributed Drupal + module. Visit https://www.drupal.org/node/1897420 for further information. -Drush Unit Testing -================== -See develDrushTest.php for an example of unit testing of the Drush integration. -This uses Drush's own test framework, based on PHPUnit. To run the tests, use -run-tests-drush.sh. You may pass in any arguments that are valid for `phpunit`. Author/Maintainers -====================== -- Moshe Weitzman <weitzman at tejasa DOT com> http://www.acquia.com -- Hans Salvisberg <drupal at salvisberg DOT com> -- Pedro Cambra https://drupal.org/user/122101/contact http://www.ymbra.com/ -- Juan Pablo Novillo https://www.drupal.org/u/juampynr -- lussoluca https://www.drupal.org/u/lussoluca -- willzyx https://www.drupal.org/u/willzyx +------------------ + + - Moshe Weitzman (moshe weitzman) - https://www.drupal.org/u/moshe-weitzman + - Hans Salvisberg (salvis) - https://www.drupal.org/u/salvis + - Pedro Cambra https://drupal.org/user/122101/contact http://www.ymbra.com/ + - Juan Pablo Novillo https://www.drupal.org/u/juampynr + - lussoluca https://www.drupal.org/u/lussoluca + - willzyx https://www.drupal.org/u/willzyx + diff --git a/web/modules/devel/composer.json b/web/modules/devel/composer.json index 6faff22e50..3c27d59eb6 100644 --- a/web/modules/devel/composer.json +++ b/web/modules/devel/composer.json @@ -38,8 +38,15 @@ }, "license": "GPL-2.0+", "minimum-stability": "dev", - "require": {}, - "suggest": { - "symfony/var-dumper": "Pretty print complex values better with var-dumper available" + "require": { + "symfony/var-dumper": "~2.7|^3" + }, + "suggest": {}, + "extra": { + "drush": { + "services": { + "drush.services.yml": "^9" + } + } } } diff --git a/web/modules/devel/config/install/devel.toolbar.settings.yml b/web/modules/devel/config/install/devel.toolbar.settings.yml index a9a40374e8..b12c5bdc92 100644 --- a/web/modules/devel/config/install/devel.toolbar.settings.yml +++ b/web/modules/devel/config/install/devel.toolbar.settings.yml @@ -2,7 +2,6 @@ toolbar_items: - 'devel.admin_settings_link' - 'devel.cache_clear' - 'devel.container_info.service' - - 'devel.execute_php' - 'devel.menu_rebuild' - 'devel.reinstall' - 'devel.route_info' diff --git a/web/modules/devel/devel.info.yml b/web/modules/devel/devel.info.yml index fa7fbf8946..a1dd9b2ca8 100644 --- a/web/modules/devel/devel.info.yml +++ b/web/modules/devel/devel.info.yml @@ -7,8 +7,8 @@ configure: devel.admin_settings tags: - developer -# Information added by Drupal.org packaging script on 2017-10-05 -version: '8.x-1.2' +# Information added by Drupal.org packaging script on 2019-01-29 +version: '8.x-2.0' core: '8.x' project: 'devel' -datestamp: 1507197848 +datestamp: 1548799386 diff --git a/web/modules/devel/devel.links.menu.yml b/web/modules/devel/devel.links.menu.yml index 2a90f86a10..4becee6f1d 100644 --- a/web/modules/devel/devel.links.menu.yml +++ b/web/modules/devel/devel.links.menu.yml @@ -46,10 +46,6 @@ devel.phpinfo: title: 'PHPinfo()' route_name: system.php menu_name: devel -devel.execute_php: - title: 'Execute PHP' - route_name: devel.execute_php - menu_name: devel devel.session: title: 'View Session' route_name: devel.session diff --git a/web/modules/devel/devel.module b/web/modules/devel/devel.module index 08b93e22f3..6364d2ba77 100644 --- a/web/modules/devel/devel.module +++ b/web/modules/devel/devel.module @@ -324,6 +324,9 @@ function dcp() { /** * Wrapper for DevelDumperManager::debug(). * + * @deprecated since Drupal 8.6.0 because symfony now has dd() as a function. + * Use the ddm() function instead. + * * @see \Drupal\devel\DevelDumperManager::debug() */ function dd($data, $label = NULL) { @@ -331,6 +334,17 @@ function dd($data, $label = NULL) { } } +if (!function_exists('ddm')) { + /** + * Wrapper for DevelDumperManager::debug() to replace previous dd function. + * + * @see \Drupal\devel\DevelDumperManager::debug() + */ + function ddm($data, $label = NULL) { + return \Drupal::service('devel.dumper')->debug($data, $label, 'default'); + } +} + /** * Wrapper for DevelDumperManager::message(). * diff --git a/web/modules/devel/devel.permissions.yml b/web/modules/devel/devel.permissions.yml index 256919de9d..e32ad8c110 100644 --- a/web/modules/devel/devel.permissions.yml +++ b/web/modules/devel/devel.permissions.yml @@ -3,11 +3,6 @@ access devel information: title: 'Access developer information' restrict access: TRUE -execute php code: - title: 'Execute PHP code' - description: 'Run arbitrary PHP from a block.' - restrict access: TRUE - switch users: title: 'Switch users' description: 'Become any user on the site with just a click.' diff --git a/web/modules/devel/devel.routing.yml b/web/modules/devel/devel.routing.yml index 8d20e90d1b..e6c6804d89 100644 --- a/web/modules/devel/devel.routing.yml +++ b/web/modules/devel/devel.routing.yml @@ -96,16 +96,6 @@ devel.field_info_page: requirements: _permission: 'access devel information' -devel.execute_php: - path: '/devel/php' - defaults: - _form: '\Drupal\devel\Form\ExecutePHP' - _title: 'Execute PHP code' - options: - _admin_route: TRUE - requirements: - _permission: 'execute php code' - devel.session: path: '/devel/session' defaults: diff --git a/web/modules/devel/devel_generate/README.txt b/web/modules/devel/devel_generate/README.txt index 2d73ba9be3..1f83389636 100644 --- a/web/modules/devel/devel_generate/README.txt +++ b/web/modules/devel/devel_generate/README.txt @@ -38,7 +38,7 @@ will want to directly inherit from Drupal\devel_generate\DevelGenerateBase. To give support for a new field type the field type base class should properly implements \Drupal\Core\Field\FieldItemInterface::generateSampleValue(). -Devel generate automatically use the values returned by this method during the +Devel Generate automatically uses the values returned by this method during the generate process for generate placeholder field values. For more information see: https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Field%21FieldItemInterface.php/function/FieldItemInterface::generateSampleValue diff --git a/web/modules/devel/devel_generate/composer.json b/web/modules/devel/devel_generate/composer.json new file mode 100644 index 0000000000..624589aad6 --- /dev/null +++ b/web/modules/devel/devel_generate/composer.json @@ -0,0 +1,52 @@ +{ + "name": "drupal/devel_generate", + "description": "Generate dummy users, nodes, menus, taxonomy terms...", + "type": "drupal-module", + "homepage": "http://drupal.org/project/devel", + "authors": [ + { + "name": "Moshe Weitzman", + "email": "weitzman@tejasa.com", + "homepage": "https://github.com/weitzman", + "role": "Maintainer" + }, + { + "name": "Hans Salvisberg", + "email": "drupal@salvisberg.com", + "homepage": "https://www.drupal.org/u/salvis", + "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" + } + ], + "support": { + "issues": "http://drupal.org/project/devel", + "irc": "irc://irc.freenode.org/drupal-contribute", + "source": "http://cgit.drupalcode.org/devel" + }, + "license": "GPL-2.0+", + "minimum-stability": "dev", + "require": {}, + "suggest": { + "drupal/realistic_dummy_content": "Generate realistic demo content with Devel's devel_generate module." + }, + "extra": { + "drush": { + "services": { + "drush.services.yml": "^9" + } + } + } +} diff --git a/web/modules/devel/devel_generate/devel_generate.info.yml b/web/modules/devel/devel_generate/devel_generate.info.yml index 890261d985..f90b08c804 100644 --- a/web/modules/devel/devel_generate/devel_generate.info.yml +++ b/web/modules/devel/devel_generate/devel_generate.info.yml @@ -1,13 +1,13 @@ type: module -name: 'Devel generate' +name: 'Devel Generate' description: 'Generate dummy users, nodes, menus, taxonomy terms...' package: Development # core: 8.x tags: - developer -# Information added by Drupal.org packaging script on 2017-10-05 -version: '8.x-1.2' +# Information added by Drupal.org packaging script on 2019-01-29 +version: '8.x-2.0' core: '8.x' project: 'devel' -datestamp: 1507197848 +datestamp: 1548799386 diff --git a/web/modules/devel/devel_generate/devel_generate.module b/web/modules/devel/devel_generate/devel_generate.module index 530a4fbc8c..3affb925b5 100644 --- a/web/modules/devel/devel_generate/devel_generate.module +++ b/web/modules/devel/devel_generate/devel_generate.module @@ -53,7 +53,7 @@ function devel_generate_entity_insert(EntityInterface $entity) { 'source' => '/node/' . $entity->id(), 'alias' => '/node-' . $entity->id() . '-' . $entity->bundle(), ); - \Drupal::service('path.alias_storage')->save($path['source'], $path['alias']); + \Drupal::service('path.alias_storage')->save($path['source'], $path['alias'], $entity->language()->getId()); } // Add node statistics. diff --git a/web/modules/devel/devel_generate/src/Form/DevelGenerateForm.php b/web/modules/devel/devel_generate/src/Form/DevelGenerateForm.php index 63c708b497..72366b8877 100644 --- a/web/modules/devel/devel_generate/src/Form/DevelGenerateForm.php +++ b/web/modules/devel/devel_generate/src/Form/DevelGenerateForm.php @@ -77,12 +77,12 @@ public function buildForm(array $form, FormStateInterface $form_state) { $plugin_id = $this->getPluginIdFromRequest(); $instance = $this->getPluginInstance($plugin_id); $form = $instance->settingsForm($form, $form_state); - $form['actions'] = array('#type' => 'actions'); - $form['actions']['submit'] = array( + $form['actions'] = ['#type' => 'actions']; + $form['actions']['submit'] = [ '#type' => 'submit', '#value' => $this->t('Generate'), '#button_type' => 'primary', - ); + ]; return $form; } diff --git a/web/modules/devel/devel_generate/tests/modules/devel_generate_example/devel_generate_example.info.yml b/web/modules/devel/devel_generate/tests/modules/devel_generate_example/devel_generate_example.info.yml index b4acf0a6d1..4489d46a07 100644 --- a/web/modules/devel/devel_generate/tests/modules/devel_generate_example/devel_generate_example.info.yml +++ b/web/modules/devel/devel_generate/tests/modules/devel_generate_example/devel_generate_example.info.yml @@ -1,14 +1,14 @@ -name: 'Devel generate Example' +name: 'Devel Generate Example' type: module -description: 'Create an example of DevelGenerate plugin type for testing purposing.' +description: 'Create an example of a Devel Generate plugin type for testing purposes.' package: Development # core: 8.x configure: admin/config/development/generate tags: - developer -# Information added by Drupal.org packaging script on 2017-10-05 -version: '8.x-1.2' +# Information added by Drupal.org packaging script on 2019-01-29 +version: '8.x-2.0' core: '8.x' project: 'devel' -datestamp: 1507197848 +datestamp: 1548799386 diff --git a/web/modules/devel/devel_generate/tests/modules/devel_generate_example/devel_generate_example.module b/web/modules/devel/devel_generate/tests/modules/devel_generate_example/devel_generate_example.module deleted file mode 100644 index b3d9bbc7f3..0000000000 --- a/web/modules/devel/devel_generate/tests/modules/devel_generate_example/devel_generate_example.module +++ /dev/null @@ -1 +0,0 @@ -<?php diff --git a/web/modules/devel/devel_generate/tests/modules/devel_generate_example/src/Plugin/DevelGenerate/ExampleDevelGenerate.php b/web/modules/devel/devel_generate/tests/modules/devel_generate_example/src/Plugin/DevelGenerate/ExampleDevelGenerate.php index c80817a13e..b322fb3a8a 100644 --- a/web/modules/devel/devel_generate/tests/modules/devel_generate_example/src/Plugin/DevelGenerate/ExampleDevelGenerate.php +++ b/web/modules/devel/devel_generate/tests/modules/devel_generate_example/src/Plugin/DevelGenerate/ExampleDevelGenerate.php @@ -70,7 +70,7 @@ protected function generateElements(array $values) { } // Populate all fields with sample values. - $this->populateFields($node); + $this->populateFields($account); $account->save(); diff --git a/web/modules/devel/drush/develDrushTest.php b/web/modules/devel/drush/develDrushTest.php deleted file mode 100644 index 54a5cf936e..0000000000 --- a/web/modules/devel/drush/develDrushTest.php +++ /dev/null @@ -1,38 +0,0 @@ -<?php - -namespace Unish; - -if (class_exists('Unish\CommandUnishTestCase')) { - - /** - * PHPUnit Tests for devel. This uses Drush's own test framework, based on PHPUnit. - * To run the tests, use run-tests-drush.sh from the devel directory. - */ - class develCase extends CommandUnishTestCase { - - public function testFnCommands() { - // Specify '8' just in case user has not set UNISH_DRUPAL_MAJOR_VERSION env variable. - $sites = $this->setUpDrupal(1, TRUE, '8'); - - // Symlink this module into the Site Under test so it can be enabled. - $target = dirname(__DIR__); - \symlink($target, $this->webroot() . '/modules/devel'); - $options = array( - 'root' => $this->webroot(), - 'uri' => key($sites), - ); - $this->drush('pm-enable', array('devel'), $options + array('skip' => NULL, 'yes' => NULL)); - - $this->drush('fn-view', array('drush_main'), $options); - $output = $this->getOutput(); - $this->assertContains('@return', $output, 'Output contain @return Doxygen.'); - $this->assertContains('function drush_main() {', $output, 'Output contains function drush_main() declaration'); - - // $this->drush('fn-hook', array('cron'), $options); - // $output = $this->getOutputAsList(); - // $expected = array('dblog', 'file', 'field', 'system', 'update'); - // $this->assertSame($expected, $output); - } - } - -} diff --git a/web/modules/devel/kint/kint.info.yml b/web/modules/devel/kint/kint.info.yml index 0b20df64b7..5a9af5b29e 100644 --- a/web/modules/devel/kint/kint.info.yml +++ b/web/modules/devel/kint/kint.info.yml @@ -6,8 +6,8 @@ package: Development tags: - developer -# Information added by Drupal.org packaging script on 2017-10-05 -version: '8.x-1.2' +# Information added by Drupal.org packaging script on 2019-01-29 +version: '8.x-2.0' core: '8.x' project: 'devel' -datestamp: 1507197848 +datestamp: 1548799386 diff --git a/web/modules/devel/run-tests-drush.sh b/web/modules/devel/run-tests-drush.sh deleted file mode 100644 index 4dcd4fb4b7..0000000000 --- a/web/modules/devel/run-tests-drush.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env sh - -# This script will run phpunit-based test classes using Drush's -# test framework. First, the Drush executable is located, and -# then phpunit is invoked, pointing to Drush's phpunit.xml as -# the configuration. -# -# Any parameters that may be passed to `phpunit` may also be used -# with this script. - -DRUSH_PATH="`which drush`" -DRUSH_DIRNAME="`dirname -- "$DRUSH_PATH"`" -# The following line is needed is you use a `drush` that differs from `which drush` -# export UNISH_DRUSH=$DRUSH_PATH - -if [ $# = 0 ] ; then - phpunit --configuration="$DRUSH_DIRNAME/tests" drush -else - # Pass along any arguments. - phpunit --configuration="$DRUSH_DIRNAME/tests" $@ -fi diff --git a/web/modules/devel/src/DevelDumperManager.php b/web/modules/devel/src/DevelDumperManager.php index b88957e5ab..d97ab6450f 100644 --- a/web/modules/devel/src/DevelDumperManager.php +++ b/web/modules/devel/src/DevelDumperManager.php @@ -4,12 +4,15 @@ use Drupal\Core\Config\ConfigFactoryInterface; use Drupal\Core\Session\AccountProxyInterface; +use Drupal\Core\StringTranslation\StringTranslationTrait; /** - * Class DevelDumperManager + * Class DevelDumperManager. */ class DevelDumperManager implements DevelDumperManagerInterface { + use StringTranslationTrait; + /** * The devel config. * @@ -100,7 +103,7 @@ public function debug($input, $name = NULL, $plugin_id = NULL) { // The temp directory does vary across multiple simpletest instances. $file = file_directory_temp() . '/drupal_debug.txt'; if (file_put_contents($file, $output, FILE_APPEND) === FALSE && $this->hasAccessToDevelInformation()) { - drupal_set_message(t('Devel was unable to write to %file.', ['%file' => $file]), 'error'); + drupal_set_message($this->t('Devel was unable to write to %file.', ['%file' => $file]), 'error'); return FALSE; } } diff --git a/web/modules/devel/src/EventSubscriber/ThemeInfoRebuildSubscriber.php b/web/modules/devel/src/EventSubscriber/ThemeInfoRebuildSubscriber.php index 596e709b4a..32743f597a 100644 --- a/web/modules/devel/src/EventSubscriber/ThemeInfoRebuildSubscriber.php +++ b/web/modules/devel/src/EventSubscriber/ThemeInfoRebuildSubscriber.php @@ -96,7 +96,7 @@ public function rebuildThemeInfo(GetResponseEvent $event) { protected function triggerWarningIfNeeded(Request $request) { if ($this->account && $this->account->hasPermission('access devel information')) { $session = $request->getSession(); - if (!$session->has($this->notificationFlag)) { + if ($session && !$session->has($this->notificationFlag)) { $session->set($this->notificationFlag, TRUE); $message = $this->t('The theme information is being rebuilt on every request. Remember to <a href=":url">turn off</a> this feature on production websites.', [':url' => Url::fromRoute('devel.admin_settings')->toString()]); drupal_set_message($message, 'warning', TRUE); diff --git a/web/modules/devel/src/Form/ConfigEditor.php b/web/modules/devel/src/Form/ConfigEditor.php index e4fe88cc2f..231298aac7 100644 --- a/web/modules/devel/src/Form/ConfigEditor.php +++ b/web/modules/devel/src/Form/ConfigEditor.php @@ -69,11 +69,11 @@ public function buildForm(array $form, FormStateInterface $form_state, $config_n '#required' => TRUE, ); - $form['actions'] = array('#type' => 'actions'); - $form['actions']['submit'] = array( + $form['actions'] = ['#type' => 'actions']; + $form['actions']['submit'] = [ '#type' => 'submit', '#value' => $this->t('Save'), - ); + ]; $form['actions']['cancel'] = array( '#type' => 'link', '#title' => $this->t('Cancel'), diff --git a/web/modules/devel/src/Form/ConfigsList.php b/web/modules/devel/src/Form/ConfigsList.php index f0993e77ba..0c01ca4720 100644 --- a/web/modules/devel/src/Form/ConfigsList.php +++ b/web/modules/devel/src/Form/ConfigsList.php @@ -35,10 +35,11 @@ public function buildForm(array $form, FormStateInterface $form_state, $filter = '#title_display' => 'invisible', '#default_value' => $filter, ); - $form['filter']['show'] = array( + $form['filter']['actions'] = ['#type' => 'actions']; + $form['filter']['actions']['show'] = [ '#type' => 'submit', '#value' => $this->t('Filter'), - ); + ]; $header = array( 'name' => array('data' => $this->t('Name')), diff --git a/web/modules/devel/src/Form/DevelReinstall.php b/web/modules/devel/src/Form/DevelReinstall.php index 109e40b75f..ee85c36ce7 100644 --- a/web/modules/devel/src/Form/DevelReinstall.php +++ b/web/modules/devel/src/Form/DevelReinstall.php @@ -116,11 +116,11 @@ public function buildForm(array $form, FormStateInterface $form_state) { $form['#attached']['library'][] = 'system/drupal.system.modules'; - $form['actions'] = array('#type' => 'actions'); - $form['actions']['submit'] = array( + $form['actions'] = ['#type' => 'actions']; + $form['actions']['submit'] = [ '#type' => 'submit', '#value' => $this->t('Reinstall'), - ); + ]; return $form; } diff --git a/web/modules/devel/src/Form/ExecutePHP.php b/web/modules/devel/src/Form/ExecutePHP.php deleted file mode 100644 index cd66bf4807..0000000000 --- a/web/modules/devel/src/Form/ExecutePHP.php +++ /dev/null @@ -1,55 +0,0 @@ -<?php - -namespace Drupal\devel\Form; - -use Drupal\Core\Form\FormBase; -use Drupal\Core\Form\FormStateInterface; - -/** - * Defines a form that allows privileged users to execute arbitrary PHP code. - */ -class ExecutePHP extends FormBase { - - /** - * {@inheritdoc} - */ - public function getFormId() { - return 'devel_execute_form'; - } - - /** - * {@inheritdoc} - */ - public function buildForm(array $form, FormStateInterface $form_state) { - $form = array( - '#title' => $this->t('Execute PHP Code'), - '#description' => $this->t('Execute some PHP code'), - ); - $form['execute']['code'] = array( - '#type' => 'textarea', - '#title' => t('PHP code to execute'), - '#description' => t('Enter some code. Do not use <code><?php ?></code> tags.'), - '#default_value' => (isset($_SESSION['devel_execute_code']) ? $_SESSION['devel_execute_code'] : ''), - '#rows' => 20, - ); - $form['execute']['op'] = array('#type' => 'submit', '#value' => t('Execute')); - $form['#redirect'] = FALSE; - if (isset($_SESSION['devel_execute_code'])) { - unset($_SESSION['devel_execute_code']); - } - - return $form; - } - - /** - * {@inheritdoc} - */ - public function submitForm(array &$form, FormStateInterface $form_state) { - ob_start(); - $code = $form_state->getValue('code'); - print eval($code); - $_SESSION['devel_execute_code'] = $code; - dpm(ob_get_clean()); - } - -} diff --git a/web/modules/devel/src/Form/SettingsForm.php b/web/modules/devel/src/Form/SettingsForm.php index 9321d796e3..71367be250 100644 --- a/web/modules/devel/src/Form/SettingsForm.php +++ b/web/modules/devel/src/Form/SettingsForm.php @@ -66,7 +66,7 @@ public function buildForm(array $form, FormStateInterface $form_state, Request $ $form['page_alter'] = array('#type' => 'checkbox', '#title' => t('Display $page array'), '#default_value' => $devel_config->get('page_alter'), - '#description' => t('Display $page array from <a href="http://api.drupal.org/api/function/hook_page_alter/7">hook_page_alter()</a> in the messages area of each page.'), + '#description' => t('Display $page array from <a href="https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Render%21theme.api.php/function/hook_page_attachments_alter/8">hook_page_attachments_alter()</a> in the messages area of each page.'), ); $form['raw_names'] = array('#type' => 'checkbox', '#title' => t('Display machine names of permissions and modules'), diff --git a/web/modules/devel/src/Form/SystemStateEdit.php b/web/modules/devel/src/Form/SystemStateEdit.php index d4ba0eda48..e83c26091f 100644 --- a/web/modules/devel/src/Form/SystemStateEdit.php +++ b/web/modules/devel/src/Form/SystemStateEdit.php @@ -108,17 +108,17 @@ public function buildForm(array $form, FormStateInterface $form_state, $state_na '#rows' => 15, ); - $form['actions'] = array('#type' => 'actions'); - $form['actions']['submit'] = array( + $form['actions'] = ['#type' => 'actions']; + $form['actions']['submit'] = [ '#type' => 'submit', '#value' => $this->t('Save'), '#disabled' => $disabled, - ); - $form['actions']['cancel'] = array( + ]; + $form['actions']['cancel'] = [ '#type' => 'link', '#title' => $this->t('Cancel'), '#url' => Url::fromRoute('devel.state_system_page') - ); + ]; return $form; } diff --git a/web/modules/devel/src/Plugin/Block/DevelExecutePHP.php b/web/modules/devel/src/Plugin/Block/DevelExecutePHP.php deleted file mode 100644 index 23076bfa0c..0000000000 --- a/web/modules/devel/src/Plugin/Block/DevelExecutePHP.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php - -namespace Drupal\devel\Plugin\Block; - -use Drupal\Core\Access\AccessResult; -use Drupal\Core\Block\BlockBase; -use Drupal\Core\Session\AccountInterface; - -/** - * Provides a block for executing PHP code. - * - * @Block( - * id = "devel_execute_php", - * admin_label = @Translation("Execute PHP") - * ) - */ -class DevelExecutePHP extends BlockBase { - - /** - * {@inheritdoc} - */ - protected function blockAccess(AccountInterface $account) { - return AccessResult::allowedIfHasPermission($account, 'execute php code'); - } - - /** - * {@inheritdoc} - */ - public function build() { - return \Drupal::formBuilder()->getForm('Drupal\devel\Form\ExecutePHP'); - } - -} diff --git a/web/modules/devel/tests/modules/devel_dumper_test/devel_dumper_test.info.yml b/web/modules/devel/tests/modules/devel_dumper_test/devel_dumper_test.info.yml index 265aeb347f..67a4345b50 100644 --- a/web/modules/devel/tests/modules/devel_dumper_test/devel_dumper_test.info.yml +++ b/web/modules/devel/tests/modules/devel_dumper_test/devel_dumper_test.info.yml @@ -5,8 +5,8 @@ package: Testing # version: VERSION # core: 8.x -# Information added by Drupal.org packaging script on 2017-10-05 -version: '8.x-1.2' +# Information added by Drupal.org packaging script on 2019-01-29 +version: '8.x-2.0' core: '8.x' project: 'devel' -datestamp: 1507197848 +datestamp: 1548799386 diff --git a/web/modules/devel/tests/modules/devel_entity_test/devel_entity_test.info.yml b/web/modules/devel/tests/modules/devel_entity_test/devel_entity_test.info.yml index 4b01554cfb..bf935fa8f1 100644 --- a/web/modules/devel/tests/modules/devel_entity_test/devel_entity_test.info.yml +++ b/web/modules/devel/tests/modules/devel_entity_test/devel_entity_test.info.yml @@ -5,12 +5,12 @@ package: Testing # version: VERSION # core: 8.x dependencies: - - field - - text - - entity_test + - drupal:field + - drupal:text + - drupal:entity_test -# Information added by Drupal.org packaging script on 2017-10-05 -version: '8.x-1.2' +# Information added by Drupal.org packaging script on 2019-01-29 +version: '8.x-2.0' core: '8.x' project: 'devel' -datestamp: 1507197848 +datestamp: 1548799386 diff --git a/web/modules/devel/tests/modules/devel_test/devel_test.info.yml b/web/modules/devel/tests/modules/devel_test/devel_test.info.yml index 191c825557..be642aacd7 100644 --- a/web/modules/devel/tests/modules/devel_test/devel_test.info.yml +++ b/web/modules/devel/tests/modules/devel_test/devel_test.info.yml @@ -5,8 +5,8 @@ package: Testing # version: VERSION # core: 8.x -# Information added by Drupal.org packaging script on 2017-10-05 -version: '8.x-1.2' +# Information added by Drupal.org packaging script on 2019-01-29 +version: '8.x-2.0' core: '8.x' project: 'devel' -datestamp: 1507197848 +datestamp: 1548799386 diff --git a/web/modules/devel/tests/src/Functional/DevelDumperTest.php b/web/modules/devel/tests/src/Functional/DevelDumperTest.php index a4ef9b48fc..d46a95c520 100644 --- a/web/modules/devel/tests/src/Functional/DevelDumperTest.php +++ b/web/modules/devel/tests/src/Functional/DevelDumperTest.php @@ -50,7 +50,7 @@ public function testDumpersConfiguration() { 'chromephp', 'var_dumper', ]; - $available_dumpers = ['default', 'drupal_variable']; + $available_dumpers = ['default', 'drupal_variable', 'var_dumper']; foreach ($dumpers as $dumper) { $this->assertFieldByXPath('//input[@type="radio" and @name="dumper"]', $dumper); diff --git a/web/modules/devel/tests/src/Functional/DevelToolbarTest.php b/web/modules/devel/tests/src/Functional/DevelToolbarTest.php index 26293f896e..e348bc5577 100644 --- a/web/modules/devel/tests/src/Functional/DevelToolbarTest.php +++ b/web/modules/devel/tests/src/Functional/DevelToolbarTest.php @@ -40,7 +40,6 @@ class DevelToolbarTest extends BrowserTestBase { 'devel.cache_clear', 'devel.container_info.service', 'devel.admin_settings_link', - 'devel.execute_php', 'devel.menu_rebuild', 'devel.reinstall', 'devel.route_info', @@ -59,7 +58,6 @@ public function setUp() { $this->develUser = $this->drupalCreateUser([ 'administer site configuration', 'access devel information', - 'execute php code', 'access toolbar', ]); $this->toolbarUser = $this->drupalCreateUser([ diff --git a/web/modules/devel/tests/src/Kernel/DevelQueryDebugTest.php b/web/modules/devel/tests/src/Kernel/DevelQueryDebugTest.php index 3f129258a5..8e83fbc357 100644 --- a/web/modules/devel/tests/src/Kernel/DevelQueryDebugTest.php +++ b/web/modules/devel/tests/src/Kernel/DevelQueryDebugTest.php @@ -69,7 +69,7 @@ public function testSelectQueryDebugTag() { // permissions. We expect only one status message containing the SQL for // the debugged query. \Drupal::currentUser()->setAccount($this->develUser); - $expected_message = "SELECT u.uid AS uid\nFROM \n{users} u"; + $expected_message = "SELECT u.uid AS uid\nFROM\n{users} u"; $query = \Drupal::database()->select('users', 'u'); $query->fields('u', ['uid']); @@ -102,7 +102,7 @@ public function testEntityQueryDebugTag() { // permissions. We expect only one status message containing the SQL for // the debugged entity query. \Drupal::currentUser()->setAccount($this->develUser); - $expected_message = "SELECT base_table.uid AS uid, base_table.uid AS base_table_uid\nFROM \n{users} base_table"; + $expected_message = "SELECT base_table.uid AS uid, base_table.uid AS base_table_uid\nFROM\n{users} base_table"; $query = \Drupal::entityQuery('user'); $query->addTag('debug'); diff --git a/web/modules/devel/tests/src/Kernel/DevelTwigExtensionTest.php b/web/modules/devel/tests/src/Kernel/DevelTwigExtensionTest.php index 3d22d13c1c..349ab09fcd 100644 --- a/web/modules/devel/tests/src/Kernel/DevelTwigExtensionTest.php +++ b/web/modules/devel/tests/src/Kernel/DevelTwigExtensionTest.php @@ -70,7 +70,7 @@ public function register(ContainerBuilder $container) { */ public function testTwigExtensionLoaded() { $twig_service = \Drupal::service('twig'); - $extension = $twig_service->getExtension('devel_debug'); + $extension = $twig_service->getExtension(Debug::class); $this->assertEquals(get_class($extension), Debug::class, 'Debug Extension loaded successfully.'); } diff --git a/web/modules/devel/tests/src/Unish/DevelDrushTest.php b/web/modules/devel/tests/src/Unish/DevelDrushTest.php new file mode 100644 index 0000000000..42981445c1 --- /dev/null +++ b/web/modules/devel/tests/src/Unish/DevelDrushTest.php @@ -0,0 +1,31 @@ +<?php + +namespace Drupal\Tests\devel\Unish; + +use Unish\CommandUnishTestCase; + +/** + * @group devel + * @group commands + */ +class DevelDrushTest extends CommandUnishTestCase { + + /** + * {@inheritdoc} + */ + protected function setUp() { + $this->setUpDrupal(1, true); + $this->drush('pm:enable', ['devel']); + } + + /** + * Test devel:services command. + */ + public function testServices() { + $this->drush('devel:services'); + $output = $this->getOutput(); + $this->assertContains('account_switcher', $output); + } + +} + diff --git a/web/modules/devel/tests/src/Unish/README.md b/web/modules/devel/tests/src/Unish/README.md new file mode 100644 index 0000000000..debe184f11 --- /dev/null +++ b/web/modules/devel/tests/src/Unish/README.md @@ -0,0 +1,6 @@ +Running Unish Tests +=================== + +Follow instructions provided by [Drush test README.md](https://github.com/drush-ops/drush/blob/master/tests/README.md) in order to test Unish test cases provided by contrib modules. + +See: https://github.com/drush-ops/drush/blob/master/tests/README.md \ No newline at end of file diff --git a/web/modules/devel/webprofiler/src/Controller/ToolbarController.php b/web/modules/devel/webprofiler/src/Controller/ToolbarController.php index de0e240e5d..b79a182787 100644 --- a/web/modules/devel/webprofiler/src/Controller/ToolbarController.php +++ b/web/modules/devel/webprofiler/src/Controller/ToolbarController.php @@ -62,7 +62,9 @@ public function __construct(Profiler $profiler, TemplateManager $templateManager * * @param Profile $profile * - * @return array + * @return \Symfony\Component\HttpFoundation\Response + * + * @throws \Exception */ public function toolbarAction(Profile $profile) { $this->profiler->disable(); diff --git a/web/modules/devel/webprofiler/src/DataCollector/DatabaseDataCollector.php b/web/modules/devel/webprofiler/src/DataCollector/DatabaseDataCollector.php index 2c766a4150..ddfbab3c0d 100644 --- a/web/modules/devel/webprofiler/src/DataCollector/DatabaseDataCollector.php +++ b/web/modules/devel/webprofiler/src/DataCollector/DatabaseDataCollector.php @@ -43,8 +43,16 @@ public function __construct(Connection $database, ConfigFactoryInterface $config public function collect(Request $request, Response $response, \Exception $exception = NULL) { $connections = []; foreach (Database::getAllConnectionInfo() as $key => $info) { - $database = Database::getConnection('default', $key); - $connections[$key] = $database->getLogger()->get('webprofiler'); + try { + $database = Database::getConnection('default', $key); + + if ($database->getLogger()) { + $connections[$key] = $database->getLogger()->get('webprofiler'); + } + } catch(\Exception $e) { + // There was some error during database connection, maybe a stale + // configuration in settings.php or wrong values used for a migration. + } } $this->data['connections'] = array_keys($connections); diff --git a/web/modules/devel/webprofiler/src/DataCollector/DrupalDataCollectorTrait.php b/web/modules/devel/webprofiler/src/DataCollector/DrupalDataCollectorTrait.php index 98a3faf462..8fdede4f96 100644 --- a/web/modules/devel/webprofiler/src/DataCollector/DrupalDataCollectorTrait.php +++ b/web/modules/devel/webprofiler/src/DataCollector/DrupalDataCollectorTrait.php @@ -7,6 +7,13 @@ */ trait DrupalDataCollectorTrait { + /** + * {@inheritdoc} + */ + public function reset() { + $this->data = array(); + } + /** * {@inheritdoc} */ @@ -47,8 +54,6 @@ public function getData() { * @param $method * * @return array - * - * @throws \ReflectionException */ public function getMethodData($class, $method) { $class = is_object($class) ? get_class($class) : $class; diff --git a/web/modules/devel/webprofiler/src/DataCollector/FormsDataCollector.php b/web/modules/devel/webprofiler/src/DataCollector/FormsDataCollector.php index 79f6332537..a6a1b40464 100644 --- a/web/modules/devel/webprofiler/src/DataCollector/FormsDataCollector.php +++ b/web/modules/devel/webprofiler/src/DataCollector/FormsDataCollector.php @@ -41,11 +41,11 @@ public function collect(Request $request, Response $response, \Exception $except * @return array */ public function getForms() { - return $this->data['forms']; + return (!empty($this->data['forms']) && is_array($this->data['forms'])) ? $this->data['forms'] : []; } /** - * @return array + * @return int */ public function getFormsCount() { return count($this->getForms()); diff --git a/web/modules/devel/webprofiler/src/DataCollector/RequestDataCollector.php b/web/modules/devel/webprofiler/src/DataCollector/RequestDataCollector.php index 9de8f4942f..a23d540758 100644 --- a/web/modules/devel/webprofiler/src/DataCollector/RequestDataCollector.php +++ b/web/modules/devel/webprofiler/src/DataCollector/RequestDataCollector.php @@ -51,7 +51,8 @@ public function collect(Request $request, Response $response, \Exception $except /** * @param $service_id * @param $callable - * @param $request + * @param \Symfony\Component\HttpFoundation\Request $request + * */ public function addAccessCheck($service_id, $callable, Request $request) { $this->accessCheck[$request->getPathInfo()][] = [ @@ -71,7 +72,7 @@ public function getTitle() { * {@inheritdoc} */ public function getPanelSummary() { - return $this->data['status_code'].' '.$this->data['status_text']; + return $this->data['status_code'] . ' ' . $this->data['status_text']; } /** @@ -80,4 +81,33 @@ public function getPanelSummary() { public function getIcon() { return 'iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAQAAADYBBcfAAACvElEQVR42tVTbUhTYRTerDCnKVoUUr/KCZmypA9Koet0bXNLJ5XazDJ/WFaCUY0pExRZXxYiJgsxWWjkaL+yK+po1gjyR2QfmqWxtBmaBtqWGnabT++c11Fu4l/P4VzOPc95zoHznsNZodIbLDdRcKnc1Bu8DAK45ZsOnykQNMopsNooLxCknb0cDq5vml9FtHiIgpBR0R6iihYyFMTDt2Lg56ObPkI6TMGXSof1EV67IqCwisJSWliFAG/E0CfFIiebdNypcxi/1zgyFiIiZ3sJQr0RQx5frLa6k7SOKRo3oMFNR5t62h2rttKXEOKFqDCxtXNmmBokO2KKTlp3IdWuT2dYRNGKwEXEBCcL172G5FG0aIxC0kR9PBTVH1kkwQn+IqJnCE33EalVzT9GJQS1tAdD3CKicJYFrxqx7W2ejCEdZy1FiC5tZxHhLJKOZaRdQJAyV/YAvDliySALHxmxR4Hqe2iwvaOR/CEuZYJFSgYhVbZRkA8KGdEktrqnqra90NndCdkt77fjIHIhexOrfO6O3bbbOj/rqu5IptgyR3sU93QbOYhquZK4MCDp0Ina/PLsu5JvbCTRaapUdUmIV/RzoMdsk/0hWRNdAvKOmvqlN0drsJbJf1P4YsQ5lGrJeuosiOUgbOC8cto3LfOXTdVd7BqZsQKbse+0jUL6WPcesqs4MNSUTQAxGjwFiC8m3yzmqwHJBWYKBJ9WNqW/dHkpU/osch1Yj5RJfXPfSEe/2UPsN490NPfZG5CKyJmcV5ayHyzy7BMqsXfuHhGK/cjAIeSpR92gehR55D8TcQhDEKJwytBJ4fr4NULvrEM8NszfJPyxDoHYAQ1oPCWmIX4gifmDS/DV2DKeb25FHWr76yEG7/9L4YFPeiQQ4/8LkgJ8Et+NncTCsYqzXAEXa7CWdPZzGWdlyV+vST0JanfPvwAAAABJRU5ErkJggg=='; } + + /** + * @return array|string + */ + public function getData() { + // Drupal 8.5+ uses Symfony 3.4.x that changes the way the Request data are + // collected. Data is altered with \Symfony\Component\HttpKernel\DataCollector\DataCollector::cloneVar. + // The stored data (of type \Symfony\Component\VarDumper\Cloner\Data) is + // suitable to be converted to a string by a Dumper (\Symfony\Component\VarDumper\Dumper\DataDumperInterface). + // In our implementation however we need that data as an array, to be later + // converted in a json response by a REST endpoint. We need to refactor the + // whole way Web Profiler works to allow that. At the moment we just + // retrieve the raw Data value and do some string manipulation to clean the + // output a bit. + + $data = $this->data->getValue(TRUE); + unset($data['request_attributes']['_route_params']); + unset($data['request_attributes']['_access_result']); + + $route_object = []; + foreach($data['request_attributes']['_route_object'] as $key => $result) { + $key = str_replace("\0", '', $key); + $key = str_replace('Symfony\Component\Routing\Route', 'Symfony\Component\Routing\Route::', $key); + $route_object[$key] = $result; + } + $data['request_attributes']['_route_object'] = $route_object; + + return $data; + } } diff --git a/web/modules/devel/webprofiler/src/Entity/Decorators/Config/ImageStyleStorageDecorator.php b/web/modules/devel/webprofiler/src/Entity/Decorators/Config/ImageStyleStorageDecorator.php new file mode 100644 index 0000000000..a075b29eee --- /dev/null +++ b/web/modules/devel/webprofiler/src/Entity/Decorators/Config/ImageStyleStorageDecorator.php @@ -0,0 +1,33 @@ +<?php + +namespace Drupal\webprofiler\Entity\Decorators\Config; + +use Drupal\image\ImageStyleStorageInterface; + +/** + * Class ImageStyleStorageDecorator + */ +class ImageStyleStorageDecorator extends ConfigEntityStorageDecorator implements ImageStyleStorageInterface { + + /** + * {@inheritdoc} + */ + public function setReplacementId($name, $replacement) { + return $this->getOriginalObject()->setReplacementId($name, $replacement); + } + + /** + * {@inheritdoc} + */ + public function getReplacementId($name) { + return $this->getOriginalObject()->getReplacementId($name); + } + + /** + * {@inheritdoc} + */ + public function clearReplacementId($name) { + return $this->getOriginalObject()->clearReplacementId($name); + } + +} diff --git a/web/modules/devel/webprofiler/src/Entity/EntityManagerWrapper.php b/web/modules/devel/webprofiler/src/Entity/EntityManagerWrapper.php index c6381a0d25..3579710215 100644 --- a/web/modules/devel/webprofiler/src/Entity/EntityManagerWrapper.php +++ b/web/modules/devel/webprofiler/src/Entity/EntityManagerWrapper.php @@ -8,6 +8,7 @@ use Drupal\Core\Entity\EntityViewBuilderInterface; use Drupal\Core\Plugin\DefaultPluginManager; use Drupal\webprofiler\Entity\Decorators\Config\ConfigEntityStorageDecorator; +use Drupal\webprofiler\Entity\Decorators\Config\ImageStyleStorageDecorator; use Drupal\webprofiler\Entity\Decorators\Config\RoleStorageDecorator; use Drupal\webprofiler\Entity\Decorators\Config\ShortcutSetStorageDecorator; use Drupal\webprofiler\Entity\Decorators\Config\VocabularyStorageDecorator; @@ -98,6 +99,9 @@ private function getStorageDecorator($entity_type, $handler) { case 'shortcut_set': return new ShortcutSetStorageDecorator($handler); break; + case 'image_style': + return new ImageStyleStorageDecorator($handler); + break; default: return new ConfigEntityStorageDecorator($handler); break; diff --git a/web/modules/devel/webprofiler/src/EventDispatcher/TraceableEventDispatcher.php b/web/modules/devel/webprofiler/src/EventDispatcher/TraceableEventDispatcher.php index b3451fb508..2664f507b8 100644 --- a/web/modules/devel/webprofiler/src/EventDispatcher/TraceableEventDispatcher.php +++ b/web/modules/devel/webprofiler/src/EventDispatcher/TraceableEventDispatcher.php @@ -170,10 +170,18 @@ protected function postDispatch($eventName, Event $event) { * @param $priority */ private function addCalledListener($definition, $event_name, $priority) { - $this->calledListeners[$event_name][$priority][] = [ - 'class' => get_class($definition['callable'][0]), - 'method' => $definition['callable'][1], - ]; + if ($this->isClosure($definition['callable'])) { + $this->calledListeners[$event_name][$priority][] = [ + 'class' => 'Closure', + 'method' => '', + ]; + } + else { + $this->calledListeners[$event_name][$priority][] = [ + 'class' => get_class($definition['callable'][0]), + 'method' => $definition['callable'][1], + ]; + } foreach ($this->notCalledListeners[$event_name][$priority] as $key => $listener) { if (isset($listener['service'])) { @@ -182,12 +190,25 @@ private function addCalledListener($definition, $event_name, $priority) { } } else { - if (get_class($listener['callable'][0]) == get_class($definition['callable'][0]) && $listener['callable'][1] == $definition['callable'][1]) { - unset($this->notCalledListeners[$event_name][$priority][$key]); + if ($this->isClosure($listener['callable'])) { + if (is_callable($listener['callable'], TRUE, $listenerCallableName) && is_callable($definition['callable'], TRUE, $definitionCallableName)) { + if ($listenerCallableName == $definitionCallableName) { + unset($this->notCalledListeners[$event_name][$priority][$key]); + } + } + } + else { + if (get_class($listener['callable'][0]) == get_class($definition['callable'][0]) && $listener['callable'][1] == $definition['callable'][1]) { + unset($this->notCalledListeners[$event_name][$priority][$key]); + } } } } } + private function isClosure($t) { + return is_object($t) && ($t instanceof \Closure); + } + } diff --git a/web/modules/devel/webprofiler/src/EventSubscriber/ProfilerSubscriber.php b/web/modules/devel/webprofiler/src/EventSubscriber/ProfilerSubscriber.php new file mode 100644 index 0000000000..d3f3124fc0 --- /dev/null +++ b/web/modules/devel/webprofiler/src/EventSubscriber/ProfilerSubscriber.php @@ -0,0 +1,118 @@ +<?php + +namespace Drupal\webprofiler\EventSubscriber; + +use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; +use Symfony\Component\HttpKernel\Event\FilterResponseEvent; +use Symfony\Component\HttpKernel\Event\FinishRequestEvent; +use Symfony\Component\HttpKernel\KernelEvents; +use Symfony\Component\HttpKernel\Profiler\Profiler; +use Symfony\Component\HttpFoundation\RequestMatcherInterface; +use Symfony\Component\HttpFoundation\RequestStack; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; + +class ProfilerSubscriber implements EventSubscriberInterface { + + protected $profiler; + + protected $matcher; + + protected $onlyException; + + protected $onlyMasterRequests; + + protected $exception; + + protected $profiles; + + protected $requestStack; + + protected $parents; + + /** + * @param Profiler $profiler A Profiler instance + * @param RequestStack $requestStack A RequestStack instance + * @param RequestMatcherInterface|null $matcher A RequestMatcher instance + * @param bool $onlyException True if the profiler only collects data when an + * exception occurs, false otherwise + * @param bool $onlyMasterRequests True if the profiler only collects data + * when the request is a master request, false otherwise + */ + public function __construct(Profiler $profiler, RequestStack $requestStack, RequestMatcherInterface $matcher = NULL, $onlyException = FALSE, $onlyMasterRequests = FALSE) { + $this->profiler = $profiler; + $this->matcher = $matcher; + $this->onlyException = (bool) $onlyException; + $this->onlyMasterRequests = (bool) $onlyMasterRequests; + $this->profiles = new \SplObjectStorage(); + $this->parents = new \SplObjectStorage(); + $this->requestStack = $requestStack; + } + + /** + * Handles the onKernelException event. + */ + public function onKernelException(GetResponseForExceptionEvent $event) { + if ($this->onlyMasterRequests && !$event->isMasterRequest()) { + return; + } + + $this->exception = $event->getException(); + } + + /** + * Handles the onKernelResponse event. + */ + public function onKernelResponse(FilterResponseEvent $event) { + $master = $event->isMasterRequest(); + if ($this->onlyMasterRequests && !$master) { + return; + } + + if ($this->onlyException && NULL === $this->exception) { + return; + } + + $request = $event->getRequest(); + $exception = $this->exception; + $this->exception = NULL; + + if (NULL !== $this->matcher && !$this->matcher->matches($request)) { + return; + } + + if (!$profile = $this->profiler->collect($request, $event->getResponse(), $exception)) { + return; + } + + $this->profiles[$request] = $profile; + + $this->parents[$request] = $this->requestStack->getParentRequest(); + } + + public function onKernelFinishRequest(FinishRequestEvent $event) { + // attach children to parents + foreach ($this->profiles as $request) { + if (NULL !== $parentRequest = $this->parents[$request]) { + if (isset($this->profiles[$parentRequest])) { + $this->profiles[$parentRequest]->addChild($this->profiles[$request]); + } + } + } + + // save profiles + foreach ($this->profiles as $request) { + $this->profiler->saveProfile($this->profiles[$request]); + } + + $this->profiles = new \SplObjectStorage(); + $this->parents = new \SplObjectStorage(); + } + + public static function getSubscribedEvents() { + return [ + KernelEvents::RESPONSE => ['onKernelResponse', -100], + KernelEvents::EXCEPTION => 'onKernelException', + KernelEvents::FINISH_REQUEST => ['onKernelFinishRequest', -1024], + ]; + } +} diff --git a/web/modules/devel/webprofiler/src/Form/ConfigForm.php b/web/modules/devel/webprofiler/src/Form/ConfigForm.php index e99e2168ca..d95582b7c2 100644 --- a/web/modules/devel/webprofiler/src/Form/ConfigForm.php +++ b/web/modules/devel/webprofiler/src/Form/ConfigForm.php @@ -165,7 +165,8 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#open' => FALSE, ]; - $form['purge']['purge'] = [ + $form['purge']['actions'] = ['#type' => 'actions']; + $form['purge']['actions']['purge'] = [ '#type' => 'submit', '#value' => $this->t('Purge'), '#submit' => [[$this, 'purge']], diff --git a/web/modules/devel/webprofiler/src/Http/HttpClientMiddleware.php b/web/modules/devel/webprofiler/src/Http/HttpClientMiddleware.php index b64a2a6cc5..c37c0ca6f9 100644 --- a/web/modules/devel/webprofiler/src/Http/HttpClientMiddleware.php +++ b/web/modules/devel/webprofiler/src/Http/HttpClientMiddleware.php @@ -36,8 +36,18 @@ public function __invoke() { return function ($handler) { return function (RequestInterface $request, array $options) use ($handler) { - $options['on_stats'] = function (TransferStats $stats) use ($request) { + // If on_stats callback is already set then save it + // and call it after ours. + if (isset($options['on_stats'])) { + $next = $options['on_stats']; + } + else { + $next = function(TransferStats $stats) {}; + } + + $options['on_stats'] = function (TransferStats $stats) use ($request, $next) { $request->stats = $stats; + $next($stats); }; return $handler($request, $options)->then( diff --git a/web/modules/devel/webprofiler/src/Mail/MailManagerWrapper.php b/web/modules/devel/webprofiler/src/Mail/MailManagerWrapper.php index 58ecddcea0..2689510d7d 100644 --- a/web/modules/devel/webprofiler/src/Mail/MailManagerWrapper.php +++ b/web/modules/devel/webprofiler/src/Mail/MailManagerWrapper.php @@ -91,4 +91,14 @@ public function mail($module, $key, $to, $langcode, $params = array(), $reply = return $message; } + + /** + * {@inheritdoc} + * + * Must call getInstance on the decorated MailManager. + * @see https://www.drupal.org/node/2625554 + */ + public function getInstance(array $options) { + return $this->mailManager->getInstance($options); + } } diff --git a/web/modules/devel/webprofiler/src/ProxyClass/Command/ListCommand.php b/web/modules/devel/webprofiler/src/ProxyClass/Command/ListCommand.php new file mode 100644 index 0000000000..e8e22c844c --- /dev/null +++ b/web/modules/devel/webprofiler/src/ProxyClass/Command/ListCommand.php @@ -0,0 +1,325 @@ +<?php +// @codingStandardsIgnoreFile + +/** + * This file was generated via php core/scripts/generate-proxy-class.php + * 'Drupal\webprofiler\Command\ListCommand' + * "modules/contrib/devel/webprofiler/src". + */ + +namespace Drupal\webprofiler\ProxyClass\Command { + + /** + * Provides a proxy class for \Drupal\webprofiler\Command\ListCommand. + * + * @see \Drupal\Component\ProxyBuilder + */ + class ListCommand { + + use \Drupal\Core\DependencyInjection\DependencySerializationTrait; + + /** + * The id of the original proxied service. + * + * @var string + */ + protected $drupalProxyOriginalServiceId; + + /** + * The real proxied service, after it was lazy loaded. + * + * @var \Drupal\webprofiler\Command\ListCommand + */ + protected $service; + + /** + * The service container. + * + * @var \Symfony\Component\DependencyInjection\ContainerInterface + */ + protected $container; + + /** + * Constructs a ProxyClass Drupal proxy object. + * + * @param \Symfony\Component\DependencyInjection\ContainerInterface $container + * The container. + * @param string $drupal_proxy_original_service_id + * The service ID of the original service. + */ + public function __construct(\Symfony\Component\DependencyInjection\ContainerInterface $container, $drupal_proxy_original_service_id) { + $this->container = $container; + $this->drupalProxyOriginalServiceId = $drupal_proxy_original_service_id; + } + + /** + * Lazy loads the real service from the container. + * + * @return object + * Returns the constructed real service. + */ + protected function lazyLoadItself() { + if (!isset($this->service)) { + $this->service = $this->container->get($this->drupalProxyOriginalServiceId); + } + + return $this->service; + } + + /** + * {@inheritdoc} + */ + public function showMessage($output, $message, $type = 'info') { + return $this->lazyLoadItself()->showMessage($output, $message, $type); + } + + /** + * {@inheritdoc} + */ + public function ignoreValidationErrors() { + return $this->lazyLoadItself()->ignoreValidationErrors(); + } + + /** + * {@inheritdoc} + */ + public function setApplication(\Symfony\Component\Console\Application $application = NULL) { + return $this->lazyLoadItself()->setApplication($application); + } + + /** + * {@inheritdoc} + */ + public function setHelperSet(\Symfony\Component\Console\Helper\HelperSet $helperSet) { + return $this->lazyLoadItself()->setHelperSet($helperSet); + } + + /** + * {@inheritdoc} + */ + public function getHelperSet() { + return $this->lazyLoadItself()->getHelperSet(); + } + + /** + * {@inheritdoc} + */ + public function getApplication() { + return $this->lazyLoadItself()->getApplication(); + } + + /** + * {@inheritdoc} + */ + public function isEnabled() { + return $this->lazyLoadItself()->isEnabled(); + } + + /** + * {@inheritdoc} + */ + public function run(\Symfony\Component\Console\Input\InputInterface $input, \Symfony\Component\Console\Output\OutputInterface $output) { + return $this->lazyLoadItself()->run($input, $output); + } + + /** + * {@inheritdoc} + */ + public function setCode(callable $code) { + return $this->lazyLoadItself()->setCode($code); + } + + /** + * {@inheritdoc} + */ + public function mergeApplicationDefinition($mergeArgs = TRUE) { + return $this->lazyLoadItself()->mergeApplicationDefinition($mergeArgs); + } + + /** + * {@inheritdoc} + */ + public function setDefinition($definition) { + return $this->lazyLoadItself()->setDefinition($definition); + } + + /** + * {@inheritdoc} + */ + public function getDefinition() { + return $this->lazyLoadItself()->getDefinition(); + } + + /** + * {@inheritdoc} + */ + public function getNativeDefinition() { + return $this->lazyLoadItself()->getNativeDefinition(); + } + + /** + * {@inheritdoc} + */ + public function addArgument($name, $mode = NULL, $description = '', $default = NULL) { + return $this->lazyLoadItself() + ->addArgument($name, $mode, $description, $default); + } + + /** + * {@inheritdoc} + */ + public function addOption($name, $shortcut = NULL, $mode = NULL, $description = '', $default = NULL) { + return $this->lazyLoadItself() + ->addOption($name, $shortcut, $mode, $description, $default); + } + + /** + * {@inheritdoc} + */ + public function setName($name) { + return $this->lazyLoadItself()->setName($name); + } + + /** + * {@inheritdoc} + */ + public function setProcessTitle($title) { + return $this->lazyLoadItself()->setProcessTitle($title); + } + + /** + * {@inheritdoc} + */ + public function getName() { + return $this->lazyLoadItself()->getName(); + } + + /** + * {@inheritdoc} + */ + public function setHidden($hidden) { + return $this->lazyLoadItself()->setHidden($hidden); + } + + /** + * {@inheritdoc} + */ + public function isHidden() { + return $this->lazyLoadItself()->isHidden(); + } + + /** + * {@inheritdoc} + */ + public function setDescription($description) { + return $this->lazyLoadItself()->setDescription($description); + } + + /** + * {@inheritdoc} + */ + public function getDescription() { + return $this->lazyLoadItself()->getDescription(); + } + + /** + * {@inheritdoc} + */ + public function setHelp($help) { + return $this->lazyLoadItself()->setHelp($help); + } + + /** + * {@inheritdoc} + */ + public function getHelp() { + return $this->lazyLoadItself()->getHelp(); + } + + /** + * {@inheritdoc} + */ + public function getProcessedHelp() { + return $this->lazyLoadItself()->getProcessedHelp(); + } + + /** + * {@inheritdoc} + */ + public function setAliases($aliases) { + return $this->lazyLoadItself()->setAliases($aliases); + } + + /** + * {@inheritdoc} + */ + public function getAliases() { + return $this->lazyLoadItself()->getAliases(); + } + + /** + * {@inheritdoc} + */ + public function getSynopsis($short = FALSE) { + return $this->lazyLoadItself()->getSynopsis($short); + } + + /** + * {@inheritdoc} + */ + public function addUsage($usage) { + return $this->lazyLoadItself()->addUsage($usage); + } + + /** + * {@inheritdoc} + */ + public function getUsages() { + return $this->lazyLoadItself()->getUsages(); + } + + /** + * {@inheritdoc} + */ + public function getHelper($name) { + return $this->lazyLoadItself()->getHelper($name); + } + + /** + * {@inheritdoc} + */ + public function setContainer($container) { + return $this->lazyLoadItself()->setContainer($container); + } + + /** + * {@inheritdoc} + */ + public function has($key) { + return $this->lazyLoadItself()->has($key); + } + + /** + * {@inheritdoc} + */ + public function get($key) { + return $this->lazyLoadItself()->get($key); + } + + /** + * {@inheritdoc} + */ + public function setTranslator($translator) { + return $this->lazyLoadItself()->setTranslator($translator); + } + + /** + * {@inheritdoc} + */ + public function trans($key) { + return $this->lazyLoadItself()->trans($key); + } + + } + +} diff --git a/web/modules/devel/webprofiler/templates/Collector/database.html.twig b/web/modules/devel/webprofiler/templates/Collector/database.html.twig index cbe1551342..f07b7f1fd1 100644 --- a/web/modules/devel/webprofiler/templates/Collector/database.html.twig +++ b/web/modules/devel/webprofiler/templates/Collector/database.html.twig @@ -57,7 +57,7 @@ <option value="1">{{ 'Yes'|t }}</option> <option value="0">{{ 'No'|t }}</option> </select> - <label for="edit-type" class="panel__filter-label">{{ 'Slow queryes'|t }}</label> + <label for="edit-type" class="panel__filter-label">{{ 'Slow queries'|t }}</label> </div> <div class="panel__filter--select"> <select id="edit-database" class="js--live-filter"> diff --git a/web/modules/devel/webprofiler/templates/Collector/events.html.twig b/web/modules/devel/webprofiler/templates/Collector/events.html.twig index 17087e1bff..2794fec989 100644 --- a/web/modules/devel/webprofiler/templates/Collector/events.html.twig +++ b/web/modules/devel/webprofiler/templates/Collector/events.html.twig @@ -44,7 +44,13 @@ <tr> <td><%= event_name %></td> <% if( listener.clazz ) { %> - <td><%= Drupal.webprofiler.helpers.classLink(listener.clazz) %></td> + <td> + <% if( listener.class == "Closure" ) { %> + <%= "Closure" %> + <% } else { %> + <%= Drupal.webprofiler.helpers.classLink(listener.clazz) %> + <% } %> + </td> <% } else { %> <td><%= listener.service[0] %>::<%= listener.service[1] %></td> <% } %> diff --git a/web/modules/devel/webprofiler/templates/Collector/request.html.twig b/web/modules/devel/webprofiler/templates/Collector/request.html.twig index 4a1e1e308f..b57a85419a 100644 --- a/web/modules/devel/webprofiler/templates/Collector/request.html.twig +++ b/web/modules/devel/webprofiler/templates/Collector/request.html.twig @@ -46,9 +46,10 @@ <% if (!_.isEmpty(data.request_query)) { %> <div class="panel__container"> + <h3>GET parameters</h3> <table class="table--duo"> <thead> - <th>{{ 'GET Parameters'|t }}</th> + <th>{{ 'Name'|t }}</th> <th>{{ 'Value'|t }}</th> </thead> <tbody> @@ -65,9 +66,10 @@ <% if (!_.isEmpty(data.request_request)) { %> <div class="panel__container"> + <h3>POST parameters</h3> <table class="table--duo"> <thead> - <th>{{ 'POST Parameters'|t }}</th> + <th>{{ 'Name'|t }}</th> <th>{{ 'Value'|t }}</th> </thead> <tbody> @@ -83,18 +85,20 @@ <% } %> <div class="panel__container"> + <h3>Request attributes</h3> <table class="table--duo"> <thead> - <th>{{ 'Attributes'|t }}</th> + <th>{{ 'Name'|t }}</th> <th>{{ 'Value'|t }}</th> </thead> <tbody> <% _.each( data.request_attributes, function( item, key ){ %> <tr> <td><%- key %></td> - <% if(key == '_controller') { %> <td><%= Drupal.webprofiler.helpers.classLink(data.controller) %></td> + <% } else if(key == '_form') { %> + <td><%= Drupal.webprofiler.helpers.classLink(data.controller) %></td> <% } else { %> <td><%= Drupal.webprofiler.helpers.frm(item) %></td> <% } %> @@ -106,9 +110,10 @@ <% if (!_.isEmpty(data.request_cookies)) { %> <div class="panel__container"> + <h3>Cookies</h3> <table class="table--duo"> <thead> - <th>{{ 'Cookies'|t }}</th> + <th>{{ 'Name'|t }}</th> <th>{{ 'Value'|t }}</th> </thead> <tbody> @@ -124,9 +129,10 @@ <% } %> <div class="panel__container"> + <h3>Request headers</h3> <table class="table--duo"> <thead> - <th>{{ 'Request headers'|t }}</th> + <th>{{ 'Name'|t }}</th> <th>{{ 'Value'|t }}</th> </thead> <tbody> @@ -142,16 +148,18 @@ <% if (!_.isEmpty(data.content)) { %> <div class="panel__container"> + <h3>Raw content</h3> <div class="h--word-broken"><%- data.content %></div> </div> <% } %> <% if (!_.isEmpty(data.access_check)) { %> <div class="panel__container"> + <h3>Access check</h3> <table class="table--duo"> <thead> <th>{{ 'Path'|t }}</th> - <th>{{ 'Access check'|t }}</th> + <th>{{ 'Service'|t }}</th> </thead> <tbody> <% _.each(data.access_check, function(items, key){ %> @@ -170,9 +178,10 @@ <% } %> <div class="panel__container"> + <h3>Server Parameters</h3> <table class="table--duo"> <thead> - <th>{{ 'Server Parameters'|t }}</th> + <th>{{ 'Name'|t }}</th> <th>{{ 'Value'|t }}</th> </thead> <tbody> @@ -187,9 +196,10 @@ </div> <div class="panel__container"> + <h3>Response headers</h3> <table class="table--duo"> <thead> - <th>{{ 'Response headers'|t }}</th> + <th>{{ 'Name'|t }}</th> <th>{{ 'Value'|t }}</th> </thead> <tbody> diff --git a/web/modules/devel/webprofiler/templates/Collector/views.html.twig b/web/modules/devel/webprofiler/templates/Collector/views.html.twig index d4a2e2f5c2..5409cc9b56 100644 --- a/web/modules/devel/webprofiler/templates/Collector/views.html.twig +++ b/web/modules/devel/webprofiler/templates/Collector/views.html.twig @@ -41,9 +41,9 @@ <tr> <td><%- item.id %></td> <td><%- item.current_display %></td> - <td><%- Drupal.webprofiler.helpers.printTime(item.build_time) %></td> - <td><%- Drupal.webprofiler.helpers.printTime(item.execute_time) %></td> - <td><%- Drupal.webprofiler.helpers.printTime(item.render_time) %></td> + <td><%- Drupal.webprofiler.helpers.printTime(item.build_time, 's') %></td> + <td><%- Drupal.webprofiler.helpers.printTime(item.execute_time, 's') %></td> + <td><%- Drupal.webprofiler.helpers.printTime(item.render_time, 's') %></td> <td><a href="<%- item.route %>">{{ 'Edit'|t }}</a></td> </tr> <% }); %> diff --git a/web/modules/devel/webprofiler/webprofiler.info.yml b/web/modules/devel/webprofiler/webprofiler.info.yml index 8aebae2313..1940a74eca 100644 --- a/web/modules/devel/webprofiler/webprofiler.info.yml +++ b/web/modules/devel/webprofiler/webprofiler.info.yml @@ -7,10 +7,10 @@ configure: webprofiler.settings tags: - developer dependencies: - - devel + - devel:devel -# Information added by Drupal.org packaging script on 2017-10-05 -version: '8.x-1.2' +# Information added by Drupal.org packaging script on 2019-01-29 +version: '8.x-2.0' core: '8.x' project: 'devel' -datestamp: 1507197848 +datestamp: 1548799386 diff --git a/web/modules/devel/webprofiler/webprofiler.services.yml b/web/modules/devel/webprofiler/webprofiler.services.yml index 6332fef926..50527926a4 100644 --- a/web/modules/devel/webprofiler/webprofiler.services.yml +++ b/web/modules/devel/webprofiler/webprofiler.services.yml @@ -46,7 +46,7 @@ services: # event subscribers webprofiler.profiler_listener: - class: Symfony\Component\HttpKernel\EventListener\ProfilerListener + class: Drupal\webprofiler\EventSubscriber\ProfilerSubscriber arguments: ['@profiler', '@request_stack', '@?webprofiler.matcher', '%webprofiler.only_exceptions%', '%webprofiler.only_master_requests%'] tags: - { name: event_subscriber } -- GitLab