2 namespace TYPO3\CMS\Extensionmanager\Utility;
184 if (!empty($extension[
'clearcacheonload']) || !empty($extension[
'clearCacheOnLoad'])) {
185 $this->cacheManager->flushCaches();
187 $this->cacheManager->flushCachesInGroup(
'system');
204 $this->saveDefaultConfiguration($extensionKey);
216 $dependentExtensions = $this->dependencyUtility->findInstalledExtensionsThatDependOnMe($extensionKey);
217 if (is_array($dependentExtensions) && !empty($dependentExtensions)) {
219 \TYPO3\CMS\Extbase\Utility\LocalizationUtility::translate(
220 'extensionList.uninstall.dependencyError',
222 array($extensionKey, implode(
',', $dependentExtensions))
239 return $this->packageManager->isPackageActive($extensionKey);
246 $this->listUtility->reloadAvailableExtensions();
257 $this->packageManager->activatePackage($extensionKey);
268 $this->packageManager->deactivatePackage($extensionKey);
270 $this->cacheManager->flushCachesInGroup(
'system');
280 $this->signalSlotDispatcher->dispatch(__CLASS__,
'afterExtensionInstall', array($extensionKey, $this));
290 $this->signalSlotDispatcher->dispatch(__CLASS__,
'afterExtensionUninstall', array($extensionKey, $this));
301 return $this->packageManager->isPackageAvailable($extensionKey);
315 if ($this->packageManager->isPackageAvailable($extensionKey)) {
317 $this->packageManager->reloadPackageInformation($extensionKey);
332 $availableAndInstalledExtensions = $this->listUtility->enrichExtensionsWithEmConfAndTerInformation(array($extensionKey => $extension));
334 if (!isset($availableAndInstalledExtensions[$extensionKey])) {
336 'Please check your uploaded extension "' . $extensionKey .
'". The configuration file "ext_emconf.php" seems to be invalid.',
341 return $availableAndInstalledExtensions[$extensionKey];
351 $availableExtensions = $this->listUtility->getAvailableExtensions();
352 if (isset($availableExtensions[$extensionKey])) {
353 return $availableExtensions[$extensionKey];
366 $this->fileHandlingUtility->ensureConfiguredDirectoriesExist($extension);
377 $extTablesSqlFile = PATH_site . $extension[
'siteRelPath'] .
'ext_tables.sql';
378 $extTablesSqlContent =
'';
379 if (file_exists($extTablesSqlFile)) {
382 if ($extTablesSqlContent !==
'') {
387 $this->importT3DFile($extension[
'siteRelPath']);
399 if (!empty($sqlString)) {
413 $signalReturn = $this->signalSlotDispatcher->dispatch(__CLASS__,
'tablesDefinitionIsBeingBuilt', array(array(), $extensionKey));
415 $signalReturn = array_values($signalReturn);
416 $sqlString = $signalReturn[0];
417 if (!is_array($sqlString)) {
420 'The signal %s of class %s returned a value of type %s, but array was expected.',
421 'tablesDefinitionIsBeingBuilt',
439 \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::loadExtLocalconf(
false);
440 \TYPO3\CMS\Core\Core\Bootstrap::getInstance()->loadExtensionTables(
false);
457 protected function saveDefaultConfiguration($extensionKey)
460 $configUtility = $this->objectManager->get(\TYPO3\CMS\Extensionmanager\Utility\ConfigurationUtility::class);
461 $configUtility->saveDefaultConfiguration($extensionKey);
472 $fieldDefinitionsFromFile = $this->installToolSqlParser->getFieldDefinitions_fileContent($rawDefinitions);
473 if (!empty($fieldDefinitionsFromFile)) {
474 $fieldDefinitionsFromCurrentDatabase = $this->installToolSqlParser->getFieldDefinitions_database();
475 $diff = $this->installToolSqlParser->getDatabaseExtra($fieldDefinitionsFromFile, $fieldDefinitionsFromCurrentDatabase);
476 $updateStatements = $this->installToolSqlParser->getUpdateSuggestions($diff);
478 foreach ((array)$updateStatements[
'add'] as $string) {
479 $db->admin_query($string);
481 foreach ((array)$updateStatements[
'change'] as $string) {
482 $db->admin_query($string);
484 foreach ((array)$updateStatements[
'create_table'] as $string) {
485 $db->admin_query($string);
498 $statements = $this->installToolSqlParser->getStatementarray($rawDefinitions, 1);
499 list($statementsPerTable, $insertCount) = $this->installToolSqlParser->getCreateTables($statements, 1);
502 foreach ($statementsPerTable as $table => $query) {
503 $db->admin_query(
'DROP TABLE IF EXISTS ' . $table);
504 $db->admin_query($query);
505 if ($insertCount[$table]) {
506 $insertStatements = $this->installToolSqlParser->getTableInsertStatements($statements, $table);
507 foreach ($insertStatements as $statement) {
508 $db->admin_query($statement);
523 $absolutePath = $this->fileHandlingUtility->getAbsoluteExtensionPath($extension);
524 if ($this->fileHandlingUtility->isValidExtensionPath($absolutePath)) {
525 if ($this->packageManager->isPackageAvailable($extension)) {
527 $this->packageManager->deletePackage($extension);
530 $this->fileHandlingUtility->removeDirectory($absolutePath);
546 $filePrefix = PATH_site . $extension[
'siteRelPath'];
561 if (file_exists($sqlFile)) {
563 $fieldDefinitions = $this->installToolSqlParser->getFieldDefinitions_fileContent($sqlContent);
564 $sqlData = $this->databaseUtility->dumpStaticTables($fieldDefinitions);
579 return (
bool)$this->getUpdateableVersion($extensionData);
589 public function getUpdateableVersion(
Extension $extensionData)
595 $extensionUpdates = $this->extensionRepository->findByVersionRangeAndExtensionKeyOrderedByVersion(
601 if ($extensionUpdates->count() > 0) {
602 foreach ($extensionUpdates as $extensionUpdate) {
604 $this->dependencyUtility->checkDependencies($extensionUpdate);
605 if (!$this->dependencyUtility->hasDependencyErrors()) {
606 return $extensionUpdate;
608 }
catch (ExtensionManagerException $e) {
622 protected function importT3DFile($extensionSiteRelPath)
624 $registryKeysToCheck = array(
625 $extensionSiteRelPath .
'Initialisation/data.t3d',
626 $extensionSiteRelPath .
'Initialisation/dataImported',
628 foreach ($registryKeysToCheck as $registryKeyToCheck) {
629 if ($this->registry->get(
'extensionDataImport', $registryKeyToCheck)) {
634 $importFileToUse = null;
635 $possibleImportFiles = array(
636 $extensionSiteRelPath .
'Initialisation/data.t3d',
637 $extensionSiteRelPath .
'Initialisation/data.xml'
639 foreach ($possibleImportFiles as $possibleImportFile) {
640 if (!file_exists(PATH_site . $possibleImportFile)) {
643 $importFileToUse = $possibleImportFile;
645 if ($importFileToUse !== null) {
647 $importExportUtility = $this->objectManager->get(ImportExportUtility::class);
649 $importResult = $importExportUtility->importT3DFile(PATH_site . $importFileToUse, 0);
650 $this->registry->set(
'extensionDataImport', $extensionSiteRelPath .
'Initialisation/dataImported', 1);
652 }
catch (\ErrorException $e) {
654 $logger = $this->objectManager->get(\TYPO3\CMS\Core\Log\LogManager::class)->getLogger(__CLASS__);
655 $logger->log(\TYPO3\CMS\Core\Log\LogLevel::WARNING, $e->getMessage());
668 $this->signalSlotDispatcher->dispatch(__CLASS__,
'afterExtensionT3DImport', array($importFileToUse, $importResult, $this));
680 $extTablesStaticSqlRelFile = $extensionSiteRelPath .
'ext_tables_static+adt.sql';
681 if (!$this->registry->get(
'extensionDataImport', $extTablesStaticSqlRelFile)) {
682 $extTablesStaticSqlFile = PATH_site . $extTablesStaticSqlRelFile;
683 if (file_exists($extTablesStaticSqlFile)) {
687 $this->registry->set(
'extensionDataImport', $extTablesStaticSqlRelFile, 1);
699 $this->signalSlotDispatcher->dispatch(__CLASS__,
'afterExtensionStaticSqlImport', array($extTablesStaticSqlRelFile, $this));
711 $importRelFolder = $extensionSiteRelPath .
'Initialisation/Files';
712 if (!$this->registry->get(
'extensionDataImport', $importRelFolder)) {
713 $importFolder = PATH_site . $importRelFolder;
714 if (file_exists($importFolder)) {
715 $destinationRelPath =
$GLOBALS[
'TYPO3_CONF_VARS'][
'BE'][
'fileadminDir'] . $extensionKey;
716 $destinationAbsolutePath = PATH_site . $destinationRelPath;
717 if (!file_exists($destinationAbsolutePath) &&
723 $this->registry->set(
'extensionDataImport', $importRelFolder, 1);
736 $this->signalSlotDispatcher->dispatch(__CLASS__,
'afterExtensionFileImport', array($destinationAbsolutePath, $this));