‪TYPO3CMS  11.5
InstallUtility.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 
18 use Psr\EventDispatcher\EventDispatcherInterface;
19 use Psr\Log\LoggerAwareInterface;
20 use Psr\Log\LoggerAwareTrait;
21 use Symfony\Component\Finder\Finder;
33 use TYPO3\CMS\Core\Package\PackageManager;
50 
55 class ‪InstallUtility implements ‪SingletonInterface, LoggerAwareInterface
56 {
57  use LoggerAwareTrait;
58 
62  protected ‪$fileHandlingUtility;
63 
67  protected ‪$listUtility;
68 
72  protected ‪$packageManager;
73 
77  protected ‪$cacheManager;
78 
82  protected ‪$registry;
83 
88 
92  protected ‪$bootService;
93 
94  public function ‪injectEventDispatcher(EventDispatcherInterface ‪$eventDispatcher)
95  {
96  $this->eventDispatcher = ‪$eventDispatcher;
97  }
98 
103  {
104  $this->fileHandlingUtility = ‪$fileHandlingUtility;
105  }
106 
111  {
112  $this->listUtility = ‪$listUtility;
113  }
114 
118  public function ‪injectPackageManager(PackageManager ‪$packageManager)
119  {
120  $this->packageManager = ‪$packageManager;
121  }
122 
127  {
128  $this->cacheManager = ‪$cacheManager;
129  }
130 
135  {
136  $this->registry = ‪$registry;
137  }
138 
143  {
144  $this->bootService = ‪$bootService;
145  }
146 
154  public function ‪install(...$extensionKeys)
155  {
156  $flushCaches = false;
157  foreach ($extensionKeys as $extensionKey) {
158  $this->‪loadExtension($extensionKey);
159  $extension = $this->‪enrichExtensionWithDetails($extensionKey, false);
160  $this->‪saveDefaultConfiguration($extensionKey);
161  if (!empty($extension['clearcacheonload']) || !empty($extension['clearCacheOnLoad'])) {
162  $flushCaches = true;
163  }
164  }
165 
166  if ($flushCaches) {
167  $this->cacheManager->flushCaches();
168  } else {
169  $this->cacheManager->flushCachesInGroup('system');
170  }
171 
172  // Load a new container as reloadCaches will load ext_localconf
173  $container = $this->bootService->getContainer(false);
174  $backup = $this->bootService->makeCurrent($container);
175 
176  $this->‪reloadCaches();
177  $this->‪updateDatabase();
178 
179  foreach ($extensionKeys as $extensionKey) {
180  $this->‪processExtensionSetup($extensionKey);
181  $container->get(EventDispatcherInterface::class)->dispatch(new AfterPackageActivationEvent($extensionKey, 'typo3-cms-extension', $this));
182  }
183 
184  // Reset to the original container instance
185  $this->bootService->makeCurrent(null, $backup);
186  }
187 
191  public function ‪processExtensionSetup(string $extensionKey): void
192  {
193  $packagePath = $this->packageManager->getPackage($extensionKey)->getPackagePath();
194  $this->‪importInitialFiles($packagePath, $extensionKey);
195  $this->‪importStaticSqlFile($extensionKey, $packagePath);
196  $import = $this->‪importT3DFile($extensionKey, $packagePath);
197  $this->‪importSiteConfiguration($extensionKey, $packagePath, $import);
198  }
199 
206  public function ‪uninstall($extensionKey)
207  {
208  $dependentExtensions = $this->‪findInstalledExtensionsThatDependOnExtension((string)$extensionKey);
209  if (!empty($dependentExtensions)) {
212  'extensionList.uninstall.dependencyError',
213  'extensionmanager',
214  [$extensionKey, implode(',', $dependentExtensions)]
215  ) ?? '',
216  1342554622
217  );
218  }
219  $this->‪unloadExtension($extensionKey);
220  }
221 
230  protected function ‪findInstalledExtensionsThatDependOnExtension(string $extensionKey): array
231  {
232  $availableAndInstalledExtensions = $this->listUtility->getAvailableAndInstalledExtensionsWithAdditionalInformation();
233  $dependentExtensions = [];
234  foreach ($availableAndInstalledExtensions as $availableAndInstalledExtensionKey => $availableAndInstalledExtension) {
235  if (isset($availableAndInstalledExtension['installed']) && $availableAndInstalledExtension['installed'] === true) {
236  if (is_array($availableAndInstalledExtension['constraints'] ?? false) && is_array($availableAndInstalledExtension['constraints']['depends']) && array_key_exists($extensionKey, $availableAndInstalledExtension['constraints']['depends'])) {
237  $dependentExtensions[] = $availableAndInstalledExtensionKey;
238  }
239  }
240  }
241  return $dependentExtensions;
242  }
243 
247  public function ‪reloadAvailableExtensions()
248  {
249  $this->listUtility->reloadAvailableExtensions();
250  }
251 
257  protected function ‪loadExtension($extensionKey)
258  {
259  $this->packageManager->activatePackage($extensionKey);
260  }
261 
267  protected function ‪unloadExtension($extensionKey)
268  {
269  $this->packageManager->deactivatePackage($extensionKey);
270  $this->eventDispatcher->dispatch(new ‪AfterPackageDeactivationEvent($extensionKey, 'typo3-cms-extension', $this));
271  $this->cacheManager->flushCachesInGroup('system');
272  }
273 
280  public function ‪isAvailable($extensionKey)
281  {
282  return $this->packageManager->isPackageAvailable($extensionKey);
283  }
284 
294  public function ‪reloadPackageInformation($extensionKey)
295  {
296  if ($this->packageManager->isPackageAvailable($extensionKey)) {
297  $this->‪reloadOpcache();
298  $this->packageManager->reloadPackageInformation($extensionKey);
299  }
300  }
301 
311  public function ‪enrichExtensionWithDetails($extensionKey, $loadTerInformation = true)
312  {
313  $extension = $this->‪getExtensionArray($extensionKey);
314  if (!$loadTerInformation) {
315  $availableAndInstalledExtensions = $this->listUtility->enrichExtensionsWithEmConfInformation([$extensionKey => $extension]);
316  } else {
317  $availableAndInstalledExtensions = $this->listUtility->enrichExtensionsWithEmConfAndTerInformation([$extensionKey => $extension]);
318  }
319 
320  if (!isset($availableAndInstalledExtensions[$extensionKey])) {
321  throw new ExtensionManagerException(
322  'Please check your uploaded extension "' . $extensionKey . '". The configuration file "ext_emconf.php" seems to be invalid.',
323  1391432222
324  );
325  }
326 
327  return $availableAndInstalledExtensions[$extensionKey];
328  }
329 
335  protected function ‪getExtensionArray($extensionKey)
336  {
337  $availableExtensions = $this->listUtility->getAvailableExtensions();
338  if (isset($availableExtensions[$extensionKey])) {
339  return $availableExtensions[$extensionKey];
340  }
341  throw new ‪ExtensionManagerException('Extension ' . $extensionKey . ' is not available', 1342864081);
342  }
343 
347  public function ‪reloadCaches()
348  {
349  $this->‪reloadOpcache();
353  }
354 
358  protected function ‪reloadOpcache()
359  {
360  GeneralUtility::makeInstance(OpcodeCacheService::class)->clearAllActive();
361  }
362 
368  public function ‪updateDatabase()
369  {
370  $sqlReader = GeneralUtility::makeInstance(SqlReader::class);
371  $schemaMigrator = GeneralUtility::makeInstance(SchemaMigrator::class);
372  $sqlStatements = [];
373  $sqlStatements[] = $sqlReader->getTablesDefinitionString();
374  $sqlStatements = $sqlReader->getCreateTableStatementArray(implode(LF . LF, array_filter($sqlStatements)));
375  $updateStatements = $schemaMigrator->getUpdateSuggestions($sqlStatements);
376 
377  $updateStatements = array_merge_recursive(...array_values($updateStatements));
378  $selectedStatements = [];
379  foreach (['add', 'change', 'create_table', 'change_table'] as $action) {
380  if (empty($updateStatements[$action])) {
381  continue;
382  }
383 
384  $statements = array_combine(array_keys($updateStatements[$action]), array_fill(0, count($updateStatements[$action]), true));
385  $statements = is_array($statements) ? $statements : [];
386  $selectedStatements = array_merge(
387  $selectedStatements,
388  $statements
389  );
390  }
391 
392  $schemaMigrator->migrate($sqlStatements, $selectedStatements);
393  }
394 
400  protected function ‪saveDefaultConfiguration($extensionKey)
401  {
402  $extensionConfiguration = GeneralUtility::makeInstance(ExtensionConfiguration::class);
403  $extensionConfiguration->synchronizeExtConfTemplateWithLocalConfiguration($extensionKey);
404  }
405 
411  public function ‪importStaticSql($rawDefinitions)
412  {
413  $sqlReader = GeneralUtility::makeInstance(SqlReader::class);
414  $statements = $sqlReader->getStatementArray($rawDefinitions);
415 
416  $schemaMigrationService = GeneralUtility::makeInstance(SchemaMigrator::class);
417  $schemaMigrationService->importStaticData($statements, true);
418  }
419 
426  public function ‪removeExtension($extension)
427  {
428  $absolutePath = $this->‪enrichExtensionWithDetails($extension)['packagePath'];
429  if ($this->‪isValidExtensionPath($absolutePath)) {
430  if ($this->packageManager->isPackageAvailable($extension)) {
431  // Package manager deletes the extension and removes the entry from PackageStates.php
432  $this->packageManager->deletePackage($extension);
433  } else {
434  // The extension is not listed in PackageStates.php, we can safely remove it
435  $this->fileHandlingUtility->removeDirectory($absolutePath);
436  }
437  } else {
438  throw new ‪ExtensionManagerException('No valid extension path given.', 1342875724);
439  }
440  }
441 
450  protected function ‪importT3DFile($extensionKey, $packagePath): ?‪Import
451  {
452  $extensionSiteRelPath = ‪PathUtility::stripPathSitePrefix($packagePath);
453  $registryKeysToCheck = [
454  $extensionSiteRelPath . 'Initialisation/data.t3d',
455  $extensionSiteRelPath . 'Initialisation/dataImported',
456  ];
457  foreach ($registryKeysToCheck as $registryKeyToCheck) {
458  if ($this->registry->get('extensionDataImport', $registryKeyToCheck)) {
459  // Data was imported before => early return
460  return null;
461  }
462  }
463  $importFileToUse = null;
464  $possibleImportFiles = [
465  $packagePath . 'Initialisation/data.t3d',
466  $packagePath . 'Initialisation/data.xml',
467  ];
468  foreach ($possibleImportFiles as $possibleImportFile) {
469  if (!file_exists($possibleImportFile)) {
470  continue;
471  }
472  $importFileToUse = $possibleImportFile;
473  }
474  if ($importFileToUse !== null) {
475  $importExportUtility = GeneralUtility::makeInstance(ImportExportUtility::class);
476  try {
477  $importResult = $importExportUtility->importT3DFile($importFileToUse, 0);
478  $this->registry->set('extensionDataImport', $extensionSiteRelPath . 'Initialisation/dataImported', 1);
479  $this->eventDispatcher->dispatch(new AfterExtensionDatabaseContentHasBeenImportedEvent($extensionKey, $importFileToUse, $importResult, $this));
480  return $importExportUtility->getImport();
481  } catch (\ErrorException $e) {
482  $this->logger->warning($e->getMessage(), ['exception' => $e]);
483  }
484  }
485  return null;
486  }
487 
495  protected function ‪importStaticSqlFile(string $extensionKey, $packagePath)
496  {
497  $extTablesStaticSqlFile = $packagePath . 'ext_tables_static+adt.sql';
498  $extTablesStaticSqlRelFile = ‪PathUtility::stripPathSitePrefix($extTablesStaticSqlFile);
499  if (!$this->registry->get('extensionDataImport', $extTablesStaticSqlRelFile)) {
500  $shortFileHash = '';
501  if (file_exists($extTablesStaticSqlFile)) {
502  $extTablesStaticSqlContent = (string)file_get_contents($extTablesStaticSqlFile);
503  $shortFileHash = md5($extTablesStaticSqlContent);
504  $this->‪importStaticSql($extTablesStaticSqlContent);
505  }
506  $this->registry->set('extensionDataImport', $extTablesStaticSqlRelFile, $shortFileHash);
507  $this->eventDispatcher->dispatch(new AfterExtensionStaticDatabaseContentHasBeenImportedEvent($extensionKey, $extTablesStaticSqlFile, $this));
508  }
509  }
510 
518  protected function ‪importInitialFiles($packagePath, $extensionKey)
519  {
520  $importFolder = $packagePath . 'Initialisation/Files';
521  $importRelFolder = ‪PathUtility::stripPathSitePrefix($importFolder);
522  if (!$this->registry->get('extensionDataImport', $importRelFolder)) {
523  if (file_exists($importFolder)) {
524  $destinationAbsolutePath = GeneralUtility::getFileAbsFileName(‪$GLOBALS['TYPO3_CONF_VARS']['BE']['fileadminDir'] . $extensionKey);
525  if (!file_exists($destinationAbsolutePath) &&
526  GeneralUtility::isAllowedAbsPath($destinationAbsolutePath)
527  ) {
528  ‪GeneralUtility::mkdir($destinationAbsolutePath);
529  }
530  GeneralUtility::copyDirectory($importFolder, $destinationAbsolutePath);
531  $this->registry->set('extensionDataImport', $importRelFolder, 1);
532  $this->eventDispatcher->dispatch(new AfterExtensionFilesHaveBeenImportedEvent($extensionKey, $destinationAbsolutePath, $this));
533  }
534  }
535  }
536 
542  protected function ‪importSiteConfiguration(string $extensionKey, string $packagePath, ‪Import $import = null): void
543  {
544  $importAbsFolder = $packagePath . 'Initialisation/Site';
545  $destinationFolder = ‪Environment::getConfigPath() . '/sites';
546 
547  if (!is_dir($importAbsFolder)) {
548  return;
549  }
550 
551  $siteConfiguration = GeneralUtility::makeInstance(SiteConfiguration::class);
552  $existingSites = $siteConfiguration->resolveAllExistingSites(false);
553 
554  ‪GeneralUtility::mkdir($destinationFolder);
555  ‪$finder = GeneralUtility::makeInstance(Finder::class);
556  ‪$finder->directories()->in($importAbsFolder);
557  if (‪$finder->hasResults()) {
558  foreach (‪$finder as $siteConfigDirectory) {
559  $siteIdentifier = $siteConfigDirectory->getBasename();
560  if (isset($existingSites[$siteIdentifier])) {
561  $this->logger->warning('Skipped importing site configuration from {key} due to existing site identifier {site}', [
562  'key' => $extensionKey,
563  'site' => $siteIdentifier,
564  ]);
565  continue;
566  }
567  $targetDir = $destinationFolder . '/' . $siteIdentifier;
568  if (!$this->registry->get('siteConfigImport', $siteIdentifier) && !is_dir($targetDir)) {
569  ‪GeneralUtility::mkdir($targetDir);
570  GeneralUtility::copyDirectory($siteConfigDirectory->getPathname(), $targetDir);
571  $this->registry->set('siteConfigImport', $siteIdentifier, 1);
572  }
573  }
574  }
575 
577  $newSites = array_diff_key($siteConfiguration->resolveAllExistingSites(false), $existingSites);
578  $importedPages = [];
579  if ($import instanceof Import) {
580  $importedPages = $import->getImportMapId()['pages'] ?? null;
581  }
582 
583  $newSiteIdentifierList = [];
584  foreach ($newSites as $newSite) {
585  $exportedPageId = $newSite->getRootPageId();
586  $siteIdentifier = $newSite->getIdentifier();
587  $newSiteIdentifierList[] = $siteIdentifier;
588  $importedPageId = $importedPages[$exportedPageId] ?? null;
589  if ($importedPageId === null) {
590  $this->logger->warning('Imported site configuration with identifier {site} could not be mapped to imported page id', [
591  'site' => $siteIdentifier,
592  ]);
593  continue;
594  }
595  $configuration = $siteConfiguration->load($siteIdentifier);
596  $configuration['rootPageId'] = $importedPageId;
597  try {
598  $siteConfiguration->write($siteIdentifier, $configuration);
599  } catch (SiteConfigurationWriteException $e) {
600  $this->logger->warning(
601  sprintf(
602  'Imported site configuration with identifier %s could not be written: %s',
603  $newSite->getIdentifier(),
604  $e->getMessage()
605  )
606  );
607  continue;
608  }
609  }
610  $this->eventDispatcher->dispatch(new AfterExtensionSiteFilesHaveBeenImportedEvent($extensionKey, $newSiteIdentifierList));
611  }
612 
619  protected function ‪isValidExtensionPath($path): bool
620  {
621  $allowedPaths = ‪Extension::returnAllowedInstallPaths();
622  foreach ($allowedPaths as $allowedPath) {
623  if (str_starts_with($path, $allowedPath)) {
624  return true;
625  }
626  }
627  return false;
628  }
629 }
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\injectPackageManager
‪injectPackageManager(PackageManager $packageManager)
Definition: InstallUtility.php:111
‪TYPO3\CMS\Extensionmanager\Domain\Model\Extension\returnAllowedInstallPaths
‪static array returnAllowedInstallPaths()
Definition: Extension.php:457
‪TYPO3\CMS\Core\Utility\PathUtility
Definition: PathUtility.php:25
‪TYPO3\CMS\Core\Configuration\Exception\SiteConfigurationWriteException
Definition: SiteConfigurationWriteException.php:25
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\$packageManager
‪TYPO3 CMS Core Package PackageManager $packageManager
Definition: InstallUtility.php:69
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\reloadOpcache
‪reloadOpcache()
Definition: InstallUtility.php:351
‪TYPO3\CMS\Extensionmanager\Utility
Definition: DependencyUtility.php:16
‪$finder
‪if(PHP_SAPI !=='cli') $finder
Definition: header-comment.php:22
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\enrichExtensionWithDetails
‪array enrichExtensionWithDetails($extensionKey, $loadTerInformation=true)
Definition: InstallUtility.php:304
‪TYPO3\CMS\Extbase\Utility\LocalizationUtility
Definition: LocalizationUtility.php:33
‪TYPO3\CMS\Extensionmanager\Event\AfterExtensionStaticDatabaseContentHasBeenImportedEvent
Definition: AfterExtensionStaticDatabaseContentHasBeenImportedEvent.php:26
‪TYPO3\CMS\Extensionmanager\Domain\Model\Extension
Definition: Extension.php:28
‪TYPO3\CMS\Core\Configuration\ExtensionConfiguration
Definition: ExtensionConfiguration.php:45
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\install
‪install(... $extensionKeys)
Definition: InstallUtility.php:147
‪TYPO3\CMS\Core\Utility\PathUtility\stripPathSitePrefix
‪static string stripPathSitePrefix($path)
Definition: PathUtility.php:445
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\$bootService
‪BootService $bootService
Definition: InstallUtility.php:85
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\injectEventDispatcher
‪injectEventDispatcher(EventDispatcherInterface $eventDispatcher)
Definition: InstallUtility.php:87
‪TYPO3\CMS\Core\Registry
Definition: Registry.php:33
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\unloadExtension
‪unloadExtension($extensionKey)
Definition: InstallUtility.php:260
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\getExtensionArray
‪array getExtensionArray($extensionKey)
Definition: InstallUtility.php:328
‪TYPO3\CMS\Extensionmanager\Event\AfterExtensionSiteFilesHaveBeenImportedEvent
Definition: AfterExtensionSiteFilesHaveBeenImportedEvent.php:24
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\isValidExtensionPath
‪bool isValidExtensionPath($path)
Definition: InstallUtility.php:612
‪TYPO3\CMS\Core\Database\Schema\SqlReader
Definition: SqlReader.php:31
‪TYPO3\CMS\Extensionmanager\Utility\ListUtility
Definition: ListUtility.php:40
‪TYPO3\CMS\Extensionmanager\Event\AfterExtensionDatabaseContentHasBeenImportedEvent
Definition: AfterExtensionDatabaseContentHasBeenImportedEvent.php:26
‪TYPO3\CMS\Core\Core\BootService
Definition: BootService.php:33
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\importT3DFile
‪Import null importT3DFile($extensionKey, $packagePath)
Definition: InstallUtility.php:443
‪TYPO3\CMS\Core\Configuration\SiteConfiguration
Definition: SiteConfiguration.php:43
‪TYPO3\CMS\Extensionmanager\Utility\FileHandlingUtility
Definition: FileHandlingUtility.php:36
‪TYPO3\CMS\Core\Database\Schema\SchemaMigrator
Definition: SchemaMigrator.php:39
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\$cacheManager
‪TYPO3 CMS Core Cache CacheManager $cacheManager
Definition: InstallUtility.php:73
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\injectListUtility
‪injectListUtility(ListUtility $listUtility)
Definition: InstallUtility.php:103
‪TYPO3\CMS\Core\Site\Entity\Site
Definition: Site.php:42
‪TYPO3\CMS\Core\Core\Bootstrap\loadBaseTca
‪static loadBaseTca(bool $allowCaching=true, FrontendInterface $coreCache=null)
Definition: Bootstrap.php:502
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility
Definition: ExtensionManagementUtility.php:43
‪TYPO3\CMS\Impexp\Utility\ImportExportUtility
Definition: ImportExportUtility.php:33
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility
Definition: InstallUtility.php:56
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\removeExtension
‪removeExtension($extension)
Definition: InstallUtility.php:419
‪TYPO3\CMS\Extensionmanager\Event\AfterExtensionFilesHaveBeenImportedEvent
Definition: AfterExtensionFilesHaveBeenImportedEvent.php:26
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\injectFileHandlingUtility
‪injectFileHandlingUtility(FileHandlingUtility $fileHandlingUtility)
Definition: InstallUtility.php:95
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\processExtensionSetup
‪processExtensionSetup(string $extensionKey)
Definition: InstallUtility.php:184
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\$eventDispatcher
‪EventDispatcherInterface $eventDispatcher
Definition: InstallUtility.php:81
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\importStaticSql
‪importStaticSql($rawDefinitions)
Definition: InstallUtility.php:404
‪TYPO3\CMS\Impexp\Import
Definition: Import.php:50
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\$fileHandlingUtility
‪TYPO3 CMS Extensionmanager Utility FileHandlingUtility $fileHandlingUtility
Definition: InstallUtility.php:61
‪TYPO3\CMS\Core\Package\Event\AfterPackageActivationEvent
Definition: AfterPackageActivationEvent.php:24
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\reloadAvailableExtensions
‪reloadAvailableExtensions()
Definition: InstallUtility.php:240
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\loadExtension
‪loadExtension($extensionKey)
Definition: InstallUtility.php:250
‪TYPO3\CMS\Extbase\Utility\LocalizationUtility\translate
‪static string null translate(string $key, ?string $extensionName=null, array $arguments=null, string $languageKey=null, array $alternativeLanguageKeys=null)
Definition: LocalizationUtility.php:67
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\injectCacheManager
‪injectCacheManager(CacheManager $cacheManager)
Definition: InstallUtility.php:119
‪TYPO3\CMS\Core\Cache\CacheManager
Definition: CacheManager.php:36
‪TYPO3\CMS\Extensionmanager\Exception\ExtensionManagerException
Definition: ExtensionManagerException.php:23
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\reloadPackageInformation
‪reloadPackageInformation($extensionKey)
Definition: InstallUtility.php:287
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\isAvailable
‪bool isAvailable($extensionKey)
Definition: InstallUtility.php:273
‪TYPO3\CMS\Core\Service\OpcodeCacheService
Definition: OpcodeCacheService.php:25
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\uninstall
‪uninstall($extensionKey)
Definition: InstallUtility.php:199
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\$listUtility
‪TYPO3 CMS Extensionmanager Utility ListUtility $listUtility
Definition: InstallUtility.php:65
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\importInitialFiles
‪importInitialFiles($packagePath, $extensionKey)
Definition: InstallUtility.php:511
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\importStaticSqlFile
‪importStaticSqlFile(string $extensionKey, $packagePath)
Definition: InstallUtility.php:488
‪TYPO3\CMS\Core\Package\Event\AfterPackageDeactivationEvent
Definition: AfterPackageDeactivationEvent.php:24
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\updateDatabase
‪updateDatabase()
Definition: InstallUtility.php:361
‪TYPO3\CMS\Core\SingletonInterface
Definition: SingletonInterface.php:22
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Core\Core\Environment
Definition: Environment.php:43
‪TYPO3\CMS\Core\Core\Bootstrap
Definition: Bootstrap.php:70
‪TYPO3\CMS\Core\Core\Environment\getConfigPath
‪static string getConfigPath()
Definition: Environment.php:236
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\$registry
‪TYPO3 CMS Core Registry $registry
Definition: InstallUtility.php:77
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\injectBootService
‪injectBootService(BootService $bootService)
Definition: InstallUtility.php:135
‪TYPO3\CMS\Core\Core\Bootstrap\loadExtTables
‪static loadExtTables(bool $allowCaching=true, FrontendInterface $coreCache=null)
Definition: Bootstrap.php:532
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:50
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility\loadExtLocalconf
‪static loadExtLocalconf($allowCaching=true, FrontendInterface $codeCache=null)
Definition: ExtensionManagementUtility.php:1514
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\injectRegistry
‪injectRegistry(Registry $registry)
Definition: InstallUtility.php:127
‪TYPO3\CMS\Core\Utility\GeneralUtility\mkdir
‪static bool mkdir($newFolder)
Definition: GeneralUtility.php:1891
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\findInstalledExtensionsThatDependOnExtension
‪array findInstalledExtensionsThatDependOnExtension(string $extensionKey)
Definition: InstallUtility.php:223
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\reloadCaches
‪reloadCaches()
Definition: InstallUtility.php:340
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\importSiteConfiguration
‪importSiteConfiguration(string $extensionKey, string $packagePath, Import $import=null)
Definition: InstallUtility.php:535
‪TYPO3\CMS\Extensionmanager\Utility\InstallUtility\saveDefaultConfiguration
‪saveDefaultConfiguration($extensionKey)
Definition: InstallUtility.php:393