Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / web / modules / contrib / devel / webprofiler / src / DataCollector / ExtensionDataCollector.php
1 <?php
2
3 namespace Drupal\webprofiler\DataCollector;
4
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;
12
13 /**
14  * Defines a data collector for the extension system.
15  */
16 class ExtensionDataCollector extends DataCollector implements DrupalDataCollectorInterface {
17
18   use StringTranslationTrait, DrupalDataCollectorTrait;
19
20   /**
21    * The module handler.
22    *
23    * @var \Drupal\Core\Extension\ModuleHandlerInterface
24    */
25   protected $moduleHandler;
26
27   /**
28    * The theme handler.
29    *
30    * @var \Drupal\Core\Extension\ThemeHandlerInterface
31    */
32   protected $themeHandler;
33
34   /**
35    * The app root.
36    *
37    * @var string
38    */
39   protected $root;
40
41   /**
42    * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
43    *   The module handler.
44    * @param \Drupal\Core\Extension\ThemeHandlerInterface $theme_handler
45    *   The theme handler.
46    * @param string $root
47    *   The app root.
48    */
49   public function __construct(ModuleHandlerInterface $module_handler, ThemeHandlerInterface $theme_handler, $root) {
50     $this->moduleHandler = $module_handler;
51     $this->themeHandler = $theme_handler;
52     $this->root = $root;
53
54     $this->data['drupal_extension']['modules'] = [];
55     $this->data['drupal_extension']['themes'] = [];
56   }
57
58   /**
59    * {@inheritdoc}
60    */
61   public function collect(Request $request, Response $response, \Exception $exception = NULL) {
62     $modules = $this->moduleHandler->getModuleList();
63     $themes = $this->themeHandler->listInfo();
64
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 . '/';
69   }
70
71   /**
72    * Returns the total number of active extensions.
73    *
74    * @return int
75    */
76   public function getExtensionsCount() {
77     return isset($this->data['drupal_extension']['count']) ? $this->data['drupal_extension']['count'] : 0;
78   }
79
80   /**
81    * Returns the total number of active modules.
82    *
83    * @return int
84    */
85   public function getModulesCount() {
86     return count($this->data['drupal_extension']['modules']);
87   }
88
89   /**
90    * Returns the total number of active themes.
91    *
92    * @return int
93    */
94   public function getThemesCount() {
95     return count($this->data['drupal_extension']['themes']);
96   }
97
98   /**
99    * {@inheritdoc}
100    */
101   public function getName() {
102     return 'drupal_extension';
103   }
104
105   /**
106    * {@inheritdoc}
107    */
108   public function getTitle() {
109     return $this->t('Extensions');
110   }
111
112   /**
113    * {@inheritdoc}
114    */
115   public function getPanelSummary() {
116     return $this->t('Total: @extensions', ['@extensions' => $this->getExtensionsCount()]);
117   }
118
119   /**
120    * {@inheritdoc}
121    */
122   public function getIcon() {
123     return 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAcCAYAAABh2p9gAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0RkE1QUM1RjkxNkMxMUUzQjA3OUEzQTNEMUVGMjVDOCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo0RkE1QUM2MDkxNkMxMUUzQjA3OUEzQTNEMUVGMjVDOCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjRGQTVBQzVEOTE2QzExRTNCMDc5QTNBM0QxRUYyNUM4IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjRGQTVBQzVFOTE2QzExRTNCMDc5QTNBM0QxRUYyNUM4Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+7LqYtwAAAUBJREFUeNpi/P//PwM1ARMDlcGogYPQQBYQ4eDgQIza/SClQNwIxA3okgcOHCDZhRVAfA6I64F4EjW8fBLqwn1AnAvE8aQaqAc1QAZJ7DMQRwPxayDuAGIBYgwUAeL1QHwWGm6XgLgUSf4FEPcAsQQQ+xBjICh8AmARBgSCQNwFxEFIatYCMagQcEHXzGhvb09s6bAdiL2gbHYg/oEm/x8Y00ykRAofEvsvzlgGmsoIpIWBWBaIlYD4Bg61B5DY/ED8HRrjIH2yINchh+E7IH4CxPeBuAAam8jgBBD3IfEtgZgTiPdC9T1BySloYCcQ20DTmTg0tuegWVICjZSNWLMeFgBKKsU45EDi9kA8H4ivEmsgNsAKxEXQBH0TiMtwFg5EgvnQXHIFmibfUGrgeaghTdBIxAoYR2u9EWAgQIABAKKeRzEX0gXIAAAAAElFTkSuQmCC';
124   }
125
126   /**
127    * {@inheritdoc}
128    */
129   public function getData() {
130     $data = $this->data;
131
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']);
136
137     return $data;
138   }
139
140   /**
141    * Copies protected properties to public ones.
142    *
143    * @param \Drupal\Core\Extension\Extension[] $extensions
144    */
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();
154     }
155   }
156 }