‪TYPO3CMS  11.5
ExtensionStatus.php
Go to the documentation of this file.
1 <?php
2 
3 /*
4  * This file is part of the TYPO3 CMS project.
5  *
6  * It is free software; you can redistribute it and/or modify it under
7  * the terms of the GNU General Public License, either version 2
8  * of the License, or any later version.
9  *
10  * For the full copyright and license information, please read the
11  * LICENSE.txt file that was distributed with this source code.
12  *
13  * The TYPO3 project - inspiring people to share!
14  */
15 
17 
27 
33 {
37  protected ‪$ok = '';
38 
42  protected ‪$upToDate = '';
43 
47  protected ‪$error = '';
48 
52  protected ‪$remoteRegistry;
53 
57  protected ‪$listUtility;
58 
62  protected ‪$languageService;
63 
68  {
69  $this->remoteRegistry = ‪$remoteRegistry ?? GeneralUtility::makeInstance(RemoteRegistry::class);
70  $this->listUtility = GeneralUtility::makeInstance(ListUtility::class);
71 
72  $this->languageService = GeneralUtility::makeInstance(LanguageServiceFactory::class)->createFromUserPreferences(‪$GLOBALS['BE_USER'] ?? null);
73  $this->languageService->includeLLFile('EXT:extensionmanager/Resources/Private/Language/locallang.xlf');
74  }
75 
81  public function ‪getStatus()
82  {
83  ‪$status = [];
84 
86  ‪$status['mainRepositoryStatus'] = $this->‪getMainRepositoryStatus();
87  }
88 
90  ‪$status['extensionsSecurityStatusInstalled'] = ‪$extensionStatus->loaded ?? [];
91  ‪$status['extensionsSecurityStatusNotInstalled'] = ‪$extensionStatus->existing ?? [];
92  ‪$status['extensionsOutdatedStatusInstalled'] = ‪$extensionStatus->loadedoutdated ?? [];
93  ‪$status['extensionsOutdatedStatusNotInstalled'] = ‪$extensionStatus->existingoutdated ?? [];
94 
95  return ‪$status;
96  }
97 
103  protected function ‪getMainRepositoryStatus()
104  {
105  if (!$this->remoteRegistry->hasDefaultRemote()) {
106  $value = $this->languageService->getLL('report.status.mainRepository.notFound.value');
107  $message = $this->languageService->getLL('report.status.mainRepository.notFound.message');
108  $severity = ‪Status::ERROR;
109  } elseif ($this->remoteRegistry->getDefaultRemote()->needsUpdate()) {
110  $value = $this->languageService->getLL('report.status.mainRepository.notUpToDate.value');
111  $message = $this->languageService->getLL('report.status.mainRepository.notUpToDate.message');
112  $severity = ‪Status::NOTICE;
113  } else {
114  $value = $this->languageService->getLL('report.status.mainRepository.upToDate.value');
115  $message = '';
116  $severity = ‪Status::OK;
117  }
118 
119  ‪$status = GeneralUtility::makeInstance(
120  Status::class,
121  $this->languageService->getLL('report.status.mainRepository.title'),
122  $value,
123  $message,
124  $severity
125  );
126 
127  return ‪$status;
128  }
129 
135  protected function ‪getSecurityStatusOfExtensions()
136  {
137  $extensionInformation = $this->listUtility->getAvailableAndInstalledExtensionsWithAdditionalInformation();
138  $loadedInsecure = [];
139  $existingInsecure = [];
140  $loadedOutdated = [];
141  $existingOutdated = [];
142  foreach ($extensionInformation as $extensionKey => $information) {
143  if (
144  array_key_exists('terObject', $information)
145  && $information['terObject'] instanceof ‪Extension
146  ) {
147  $terObject = $information['terObject'];
148  $insecureStatus = $terObject->getReviewState();
149  if ($insecureStatus === -1) {
150  if (
151  array_key_exists('installed', $information)
152  && $information['installed'] === true
153  ) {
154  $loadedInsecure[] = [
155  'extensionKey' => $extensionKey,
156  'version' => $terObject->getVersion(),
157  ];
158  } else {
159  $existingInsecure[] = [
160  'extensionKey' => $extensionKey,
161  'version' => $terObject->getVersion(),
162  ];
163  }
164  } elseif ($insecureStatus === -2) {
165  if (
166  array_key_exists('installed', $information)
167  && $information['installed'] === true
168  ) {
169  $loadedOutdated[] = [
170  'extensionKey' => $extensionKey,
171  'version' => $terObject->getVersion(),
172  ];
173  } else {
174  $existingOutdated[] = [
175  'extensionKey' => $extensionKey,
176  'version' => $terObject->getVersion(),
177  ];
178  }
179  }
180  }
181  }
182 
183  $result = new \stdClass();
184 
185  if (empty($loadedInsecure)) {
186  $value = $this->languageService->getLL('report.status.loadedExtensions.noInsecureExtensionLoaded.value');
187  $message = '';
188  $severity = ‪Status::OK;
189  } else {
190  $value = sprintf(
191  $this->languageService->getLL('report.status.loadedExtensions.insecureExtensionLoaded.value'),
192  count($loadedInsecure)
193  );
194  $extensionList = [];
195  foreach ($loadedInsecure as $insecureExtension) {
196  $extensionList[] = sprintf(
197  $this->languageService->getLL('report.status.loadedExtensions.insecureExtensionLoaded.message.extension'),
198  $insecureExtension['extensionKey'],
199  $insecureExtension['version']
200  );
201  }
202  $message = sprintf(
203  $this->languageService->getLL('report.status.loadedExtensions.insecureExtensionLoaded.message'),
204  implode('', $extensionList)
205  );
206  $severity = ‪Status::ERROR;
207  }
208  $result->loaded = GeneralUtility::makeInstance(
209  Status::class,
210  $this->languageService->getLL('report.status.loadedExtensions.title'),
211  $value,
212  $message,
213  $severity
214  );
215 
216  if (empty($existingInsecure)) {
217  $value = $this->languageService->getLL('report.status.existingExtensions.noInsecureExtensionExists.value');
218  $message = '';
219  $severity = ‪Status::OK;
220  } else {
221  $value = sprintf(
222  $this->languageService->getLL('report.status.existingExtensions.insecureExtensionExists.value'),
223  count($existingInsecure)
224  );
225  $extensionList = [];
226  foreach ($existingInsecure as $insecureExtension) {
227  $extensionList[] = sprintf(
228  $this->languageService->getLL('report.status.existingExtensions.insecureExtensionExists.message.extension'),
229  $insecureExtension['extensionKey'],
230  $insecureExtension['version']
231  );
232  }
233  $message = sprintf(
234  $this->languageService->getLL('report.status.existingExtensions.insecureExtensionExists.message'),
235  implode('', $extensionList)
236  );
237  $severity = ‪Status::WARNING;
238  }
239  $result->existing = GeneralUtility::makeInstance(
240  Status::class,
241  $this->languageService->getLL('report.status.existingExtensions.title'),
242  $value,
243  $message,
244  $severity
245  );
246 
247  if (empty($loadedOutdated)) {
248  $value = $this->languageService->getLL('report.status.loadedOutdatedExtensions.noOutdatedExtensionLoaded.value');
249  $message = '';
250  $severity = ‪Status::OK;
251  } else {
252  $value = sprintf(
253  $this->languageService->getLL('report.status.loadedOutdatedExtensions.outdatedExtensionLoaded.value'),
254  count($loadedOutdated)
255  );
256  $extensionList = [];
257  foreach ($loadedOutdated as $outdatedExtension) {
258  $extensionList[] = sprintf(
259  $this->languageService->getLL('report.status.loadedOutdatedExtensions.outdatedExtensionLoaded.message.extension'),
260  $outdatedExtension['extensionKey'],
261  $outdatedExtension['version']
262  );
263  }
264  $message = sprintf(
265  $this->languageService->getLL('report.status.loadedOutdatedExtensions.outdatedExtensionLoaded.message'),
266  implode('', $extensionList)
267  );
268  $severity = ‪Status::WARNING;
269  }
270  $result->loadedoutdated = GeneralUtility::makeInstance(
271  Status::class,
272  $this->languageService->getLL('report.status.loadedOutdatedExtensions.title'),
273  $value,
274  $message,
275  $severity
276  );
277 
278  if (empty($existingOutdated)) {
279  $value = $this->languageService->getLL('report.status.existingOutdatedExtensions.noOutdatedExtensionExists.value');
280  $message = '';
281  $severity = ‪Status::OK;
282  } else {
283  $value = sprintf(
284  $this->languageService->getLL('report.status.existingOutdatedExtensions.outdatedExtensionExists.value'),
285  count($existingOutdated)
286  );
287  $extensionList = [];
288  foreach ($existingOutdated as $outdatedExtension) {
289  $extensionList[] = sprintf(
290  $this->languageService->getLL('report.status.existingOutdatedExtensions.outdatedExtensionExists.message.extension'),
291  $outdatedExtension['extensionKey'],
292  $outdatedExtension['version']
293  );
294  }
295  $message = sprintf(
296  $this->languageService->getLL('report.status.existingOutdatedExtensions.outdatedExtensionExists.message'),
297  implode('', $extensionList)
298  );
299  $severity = ‪Status::WARNING;
300  }
301  $result->existingoutdated = GeneralUtility::makeInstance(
302  Status::class,
303  $this->languageService->getLL('report.status.existingOutdatedExtensions.title'),
304  $value,
305  $message,
306  $severity
307  );
308 
309  return $result;
310  }
311 }
‪TYPO3\CMS\Core\Localization\LanguageServiceFactory
Definition: LanguageServiceFactory.php:25
‪TYPO3\CMS\Reports\StatusProviderInterface
Definition: StatusProviderInterface.php:22
‪TYPO3\CMS\Extensionmanager\Report\ExtensionStatus\__construct
‪__construct(RemoteRegistry $remoteRegistry=null)
Definition: ExtensionStatus.php:61
‪TYPO3\CMS\Extensionmanager\Report
Definition: ExtensionComposerStatus.php:18
‪TYPO3\CMS\Extensionmanager\Report\ExtensionStatus\$extensionStatus
‪$extensionStatus
Definition: ExtensionStatus.php:83
‪TYPO3\CMS\Extensionmanager\Report\ExtensionStatus\$status
‪$status['extensionsSecurityStatusInstalled']
Definition: ExtensionStatus.php:84
‪TYPO3\CMS\Extensionmanager\Domain\Model\Extension
Definition: Extension.php:28
‪TYPO3\CMS\Extensionmanager\Report\ExtensionStatus\$status
‪return $status
Definition: ExtensionStatus.php:89
‪TYPO3\CMS\Reports\Status\NOTICE
‪const NOTICE
Definition: Status.php:25
‪TYPO3\CMS\Reports\Status\ERROR
‪const ERROR
Definition: Status.php:29
‪TYPO3\CMS\Extensionmanager\Report\ExtensionStatus\$languageService
‪LanguageService $languageService
Definition: ExtensionStatus.php:56
‪TYPO3\CMS\Extensionmanager\Report\ExtensionStatus\$ok
‪string $ok
Definition: ExtensionStatus.php:36
‪TYPO3\CMS\Reports\StatusProviderInterface\getStatus
‪TYPO3 CMS Reports Status[] getStatus()
‪TYPO3\CMS\Extensionmanager\Utility\ListUtility
Definition: ListUtility.php:40
‪TYPO3\CMS\Reports\Status\OK
‪const OK
Definition: Status.php:27
‪TYPO3\CMS\Reports\Status
Definition: Status.php:24
‪TYPO3\CMS\Extensionmanager\Report\ExtensionStatus\$listUtility
‪ListUtility $listUtility
Definition: ExtensionStatus.php:52
‪TYPO3\CMS\Extensionmanager\Report\ExtensionStatus\$error
‪string $error
Definition: ExtensionStatus.php:44
‪TYPO3\CMS\Reports\Status\WARNING
‪const WARNING
Definition: Status.php:28
‪TYPO3\CMS\Core\Core\Environment\isComposerMode
‪static bool isComposerMode()
Definition: Environment.php:152
‪TYPO3\CMS\Extensionmanager\Report\ExtensionStatus\$remoteRegistry
‪RemoteRegistry $remoteRegistry
Definition: ExtensionStatus.php:48
‪TYPO3\CMS\Extensionmanager\Report\ExtensionStatus\getSecurityStatusOfExtensions
‪stdClass getSecurityStatusOfExtensions()
Definition: ExtensionStatus.php:129
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Extensionmanager\Report\ExtensionStatus\getMainRepositoryStatus
‪array< string, getStatus() { $status=[];if(!Environment::isComposerMode()) { $status[ 'mainRepositoryStatus']=$this-> getMainRepositoryStatus()
‪TYPO3\CMS\Core\Core\Environment
Definition: Environment.php:43
‪TYPO3\CMS\Extensionmanager\Report\ExtensionStatus\getMainRepositoryStatus
‪Status getMainRepositoryStatus()
Definition: ExtensionStatus.php:97
‪TYPO3\CMS\Core\Localization\LanguageService
Definition: LanguageService.php:42
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:50
‪TYPO3\CMS\Extensionmanager\Report\ExtensionStatus\$upToDate
‪string $upToDate
Definition: ExtensionStatus.php:40
‪TYPO3\CMS\Extensionmanager\Remote\RemoteRegistry
Definition: RemoteRegistry.php:26
‪TYPO3\CMS\Extensionmanager\Report\ExtensionStatus
Definition: ExtensionStatus.php:33