3 namespace Drupal\webprofiler\DataCollector;
5 use Drupal\Core\Extension\ModuleHandlerInterface;
6 use Drupal\Core\Extension\ThemeHandlerInterface;
7 use Drupal\Core\StringTranslation\StringTranslationTrait;
8 use Drupal\webprofiler\DrupalDataCollectorInterface;
9 use Symfony\Component\HttpFoundation\Request;
10 use Symfony\Component\HttpFoundation\Response;
11 use Symfony\Component\HttpKernel\DataCollector\DataCollector;
14 * Defines a data collector for the extension system.
16 class ExtensionDataCollector extends DataCollector implements DrupalDataCollectorInterface {
18 use StringTranslationTrait, DrupalDataCollectorTrait;
23 * @var \Drupal\Core\Extension\ModuleHandlerInterface
25 protected $moduleHandler;
30 * @var \Drupal\Core\Extension\ThemeHandlerInterface
32 protected $themeHandler;
42 * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
44 * @param \Drupal\Core\Extension\ThemeHandlerInterface $theme_handler
49 public function __construct(ModuleHandlerInterface $module_handler, ThemeHandlerInterface $theme_handler, $root) {
50 $this->moduleHandler = $module_handler;
51 $this->themeHandler = $theme_handler;
54 $this->data['drupal_extension']['modules'] = [];
55 $this->data['drupal_extension']['themes'] = [];
61 public function collect(Request $request, Response $response, \Exception $exception = NULL) {
62 $modules = $this->moduleHandler->getModuleList();
63 $themes = $this->themeHandler->listInfo();
65 $this->data['drupal_extension']['count'] = count($modules) + count($themes);
66 $this->data['drupal_extension']['modules'] = $modules;
67 $this->data['drupal_extension']['themes'] = $themes;
68 $this->data['drupal_extension']['installation_path'] = $this->root . '/';
72 * Returns the total number of active extensions.
76 public function getExtensionsCount() {
77 return isset($this->data['drupal_extension']['count']) ? $this->data['drupal_extension']['count'] : 0;
81 * Returns the total number of active modules.
85 public function getModulesCount() {
86 return count($this->data['drupal_extension']['modules']);
90 * Returns the total number of active themes.
94 public function getThemesCount() {
95 return count($this->data['drupal_extension']['themes']);
101 public function getName() {
102 return 'drupal_extension';
108 public function getTitle() {
109 return $this->t('Extensions');
115 public function getPanelSummary() {
116 return $this->t('Total: @extensions', ['@extensions' => $this->getExtensionsCount()]);
122 public function getIcon() {
123 return 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAcCAYAAABh2p9gAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0RkE1QUM1RjkxNkMxMUUzQjA3OUEzQTNEMUVGMjVDOCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo0RkE1QUM2MDkxNkMxMUUzQjA3OUEzQTNEMUVGMjVDOCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjRGQTVBQzVEOTE2QzExRTNCMDc5QTNBM0QxRUYyNUM4IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjRGQTVBQzVFOTE2QzExRTNCMDc5QTNBM0QxRUYyNUM4Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+7LqYtwAAAUBJREFUeNpi/P//PwM1ARMDlcGogYPQQBYQ4eDgQIza/SClQNwIxA3okgcOHCDZhRVAfA6I64F4EjW8fBLqwn1AnAvE8aQaqAc1QAZJ7DMQRwPxayDuAGIBYgwUAeL1QHwWGm6XgLgUSf4FEPcAsQQQ+xBjICh8AmARBgSCQNwFxEFIatYCMagQcEHXzGhvb09s6bAdiL2gbHYg/oEm/x8Y00ykRAofEvsvzlgGmsoIpIWBWBaIlYD4Bg61B5DY/ED8HRrjIH2yINchh+E7IH4CxPeBuAAam8jgBBD3IfEtgZgTiPdC9T1BySloYCcQ20DTmTg0tuegWVICjZSNWLMeFgBKKsU45EDi9kA8H4ivEmsgNsAKxEXQBH0TiMtwFg5EgvnQXHIFmibfUGrgeaghTdBIxAoYR2u9EWAgQIABAKKeRzEX0gXIAAAAAElFTkSuQmCC';
129 public function getData() {
132 // Copy protected properties over public ones to
133 // let json_encode to find them.
134 $this->copyToPublic($data['drupal_extension']['modules']);
135 $this->copyToPublic($data['drupal_extension']['themes']);
141 * Copies protected properties to public ones.
143 * @param \Drupal\Core\Extension\Extension[] $extensions
145 private function copyToPublic($extensions) {
146 foreach ($extensions as &$extension) {
147 $extension->public_type = $extension->getType();
148 $extension->public_name = $extension->getName();
149 $extension->public_path = $extension->getPath();
150 $extension->public_pathname = $extension->getPathname();
151 $extension->public_filename = $extension->getFilename();
152 $extension->public_extension_pathname = $extension->getExtensionPathname();
153 $extension->public_extension_filename = $extension->getExtensionFilename();