104 if (!$this->
isLoaded($extensionKey)) {
107 if (!empty($extension[
'clearcacheonload']) || !empty($extension[
'clearCacheOnLoad'])) {
108 $this->cacheManager->flushCaches();
110 $this->cacheManager->flushCachesInGroup(
'system');
117 $this->saveDefaultConfiguration($extension[
'key']);
128 $dependentExtensions = $this->dependencyUtility->findInstalledExtensionsThatDependOnMe($extensionKey);
129 if (is_array($dependentExtensions) && count($dependentExtensions) > 0) {
130 throw new \TYPO3\CMS\Extensionmanager\Exception\ExtensionManagerException(
131 \
TYPO3\CMS\Extbase\Utility\LocalizationUtility::translate(
132 'extensionList.uninstall.dependencyError',
134 array($extensionKey, implode(
',', $dependentExtensions))
150 return $this->packageManager->isPackageActive($extensionKey);
160 $this->packageManager->activatePackage($extensionKey);
170 $this->packageManager->deactivatePackage($extensionKey);
171 $this->cacheManager->flushCachesInGroup(
'system');
181 return $this->packageManager->isPackageAvailable($extensionKey);
194 $availableExtensions = $this->listUtility->getAvailableExtensions();
195 if (isset($availableExtensions[$extensionKey])) {
196 $extension = $availableExtensions[$extensionKey];
198 throw new \TYPO3\CMS\Extensionmanager\Exception\ExtensionManagerException(
'Extension ' . $extensionKey .
' is not available', 1342864081);
200 if (!$loadTerInformation) {
201 $availableAndInstalledExtensions = $this->listUtility->enrichExtensionsWithEmConfInformation(array($extensionKey => $extension));
203 $availableAndInstalledExtensions = $this->listUtility->enrichExtensionsWithEmConfAndTerInformation(array($extensionKey => $extension));
206 if (!isset($availableAndInstalledExtensions[$extensionKey])) {
207 throw new \TYPO3\CMS\Extensionmanager\Exception\ExtensionManagerException(
208 'Please check your uploaded extension "' . $extensionKey .
'". The configuration file "ext_emconf.php" seems to be invalid.',
213 return $availableAndInstalledExtensions[$extensionKey];
222 $this->fileHandlingUtility->ensureConfiguredDirectoriesExist($extension);
232 $extTablesSqlFile = PATH_site . $extension[
'siteRelPath'] .
'ext_tables.sql';
233 $extTablesSqlContent =
'';
234 if (file_exists($extTablesSqlFile)) {
237 if ($extTablesSqlContent !==
'') {
242 $this->importT3DFile($extension[
'siteRelPath']);
253 if (!empty($sqlString)) {
266 $signalReturn = $this->signalSlotDispatcher->dispatch(__CLASS__,
'tablesDefinitionIsBeingBuilt', array(array(), $extensionKey));
268 $signalReturn = array_values($signalReturn);
269 $sqlString = $signalReturn[0];
270 if (!is_array($sqlString)) {
271 throw new \TYPO3\CMS\Extensionmanager\Exception\ExtensionManagerException(
273 'The signal %s of class %s returned a value of type %s, but array was expected.',
274 'tablesDefinitionIsBeingBuilt',
293 ->setPackages($this->packageManager->getActivePackages());
294 \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::loadExtLocalconf(FALSE);
304 protected function saveDefaultConfiguration($extensionKey) {
306 $configUtility = $this->objectManager->get(
'TYPO3\\CMS\\Extensionmanager\\Utility\\ConfigurationUtility');
307 $configUtility->saveDefaultConfiguration($extensionKey);
317 $fieldDefinitionsFromFile = $this->installToolSqlParser->getFieldDefinitions_fileContent($rawDefinitions);
318 if (count($fieldDefinitionsFromFile)) {
319 $fieldDefinitionsFromCurrentDatabase = $this->installToolSqlParser->getFieldDefinitions_database();
320 $diff = $this->installToolSqlParser->getDatabaseExtra($fieldDefinitionsFromFile, $fieldDefinitionsFromCurrentDatabase);
321 $updateStatements = $this->installToolSqlParser->getUpdateSuggestions($diff);
323 foreach ((array) $updateStatements[
'add'] as $string) {
324 $db->admin_query($string);
326 foreach ((array) $updateStatements[
'change'] as $string) {
327 $db->admin_query($string);
329 foreach ((array) $updateStatements[
'create_table'] as $string) {
330 $db->admin_query($string);
342 $statements = $this->installToolSqlParser->getStatementarray($rawDefinitions, 1);
343 list($statementsPerTable, $insertCount) = $this->installToolSqlParser->getCreateTables($statements, 1);
346 foreach ($statementsPerTable as $table => $query) {
347 $db->admin_query(
'DROP TABLE IF EXISTS ' . $table);
348 $db->admin_query($query);
349 if ($insertCount[$table]) {
350 $insertStatements = $this->installToolSqlParser->getTableInsertStatements($statements, $table);
351 foreach ($insertStatements as $statement) {
352 $db->admin_query($statement);
366 $absolutePath = $this->fileHandlingUtility->getAbsoluteExtensionPath($extension);
367 if ($this->fileHandlingUtility->isValidExtensionPath($absolutePath)) {
368 if ($this->packageManager->isPackageAvailable($extension)) {
370 $this->packageManager->deletePackage($extension);
373 $this->fileHandlingUtility->removeDirectory($absolutePath);
376 throw new \TYPO3\CMS\Extensionmanager\Exception\ExtensionManagerException(
'No valid extension path given.', 1342875724);
388 $filePrefix = PATH_site . $extension[
'siteRelPath'];
402 if (file_exists($sqlFile)) {
404 $fieldDefinitions = $this->installToolSqlParser->getFieldDefinitions_fileContent($sqlContent);
405 $sqlData = $this->databaseUtility->dumpStaticTables($fieldDefinitions);
419 return (
bool)$this->getUpdateableVersion($extensionData);
430 public function getUpdateableVersion(\
TYPO3\CMS\Extensionmanager\Domain\Model\
Extension $extensionData) {
432 $version = $extensionData->getIntegerVersion();
435 $extensionUpdates = $this->extensionRepository->findByVersionRangeAndExtensionKeyOrderedByVersion(
436 $extensionData->getExtensionKey(),
441 if ($extensionUpdates->count() > 0) {
442 foreach ($extensionUpdates as $extensionUpdate) {
444 $this->dependencyUtility->checkDependencies($extensionUpdate);
445 if (!$this->dependencyUtility->hasDependencyErrors()) {
446 return $extensionUpdate;
462 protected function importT3DFile($extensionSiteRelPath) {
463 $registryKeysToCheck = array(
464 $extensionSiteRelPath .
'Initialisation/data.t3d',
465 $extensionSiteRelPath .
'Initialisation/dataImported',
467 foreach ($registryKeysToCheck as $registryKeyToCheck) {
468 if ($this->registry->get(
'extensionDataImport', $registryKeyToCheck)) {
473 $importFileToUse = NULL;
474 $possibleImportFiles = array(
475 $extensionSiteRelPath .
'Initialisation/data.t3d',
476 $extensionSiteRelPath .
'Initialisation/data.xml' 478 foreach ($possibleImportFiles as $possibleImportFile) {
479 if (!file_exists(PATH_site . $possibleImportFile)) {
482 $importFileToUse = $possibleImportFile;
484 if ($importFileToUse !== NULL) {
486 $importExportUtility = $this->objectManager->get(
'TYPO3\\CMS\\Impexp\\Utility\\ImportExportUtility');
488 $importResult = $importExportUtility->importT3DFile(PATH_site . $importFileToUse, 0);
489 $this->registry->set(
'extensionDataImport', $extensionSiteRelPath .
'Initialisation/dataImported', 1);
491 }
catch (\ErrorException $e) {
493 $logger = $this->objectManager->get(
'TYPO3\\CMS\\Core\\Log\\LogManager')->getLogger(__CLASS__);
494 $logger->log(\
TYPO3\CMS\Core\Log\LogLevel::WARNING, $e->getMessage());
506 $this->signalSlotDispatcher->dispatch(__CLASS__,
'afterExtensionT3DImport', array($importFileToUse, $importResult, $this));
517 $extTablesStaticSqlRelFile = $extensionSiteRelPath .
'ext_tables_static+adt.sql';
518 if (!$this->registry->get(
'extensionDataImport', $extTablesStaticSqlRelFile)) {
519 $extTablesStaticSqlFile = PATH_site . $extTablesStaticSqlRelFile;
520 if (file_exists($extTablesStaticSqlFile)) {
524 $this->registry->set(
'extensionDataImport', $extTablesStaticSqlRelFile, 1);
535 $this->signalSlotDispatcher->dispatch(__CLASS__,
'afterExtensionStaticSqlImport', array($extTablesStaticSqlRelFile, $this));
546 $importRelFolder = $extensionSiteRelPath .
'Initialisation/Files';
547 if (!$this->registry->get(
'extensionDataImport', $importRelFolder)) {
548 $importFolder = PATH_site . $importRelFolder;
549 if (file_exists($importFolder)) {
550 $destinationRelPath =
$GLOBALS[
'TYPO3_CONF_VARS'][
'BE'][
'fileadminDir'] . $extensionKey;
551 $destinationAbsolutePath = PATH_site . $destinationRelPath;
552 if (!file_exists($destinationAbsolutePath) &&
558 $this->registry->set(
'extensionDataImport', $importRelFolder, 1);
570 $this->signalSlotDispatcher->dispatch(__CLASS__,
'afterExtensionFileImport', array($destinationAbsolutePath, $this));
emitAfterExtensionFileImportSignal($destinationAbsolutePath)
processDatabaseUpdates(array $extension)
loadExtension($extensionKey)
static isAllowedAbsPath($path)
processRuntimeDatabaseUpdates($extensionKey)
ensureConfiguredDirectoriesExist(array $extension)
getExtensionSqlDataDump($extension)
static clearAllActive($fileAbsPath=NULL)
updateDbWithExtTablesSql($rawDefinitions)
getSqlDataDumpForFile($sqlFile)
importStaticSqlFile($extensionSiteRelPath)
static copyDirectory($source, $destination)
isUpdateAvailable(\TYPO3\CMS\Extensionmanager\Domain\Model\Extension $extensionData)
emitAfterExtensionStaticSqlImportSignal($extTablesStaticSqlRelFile)
emitTablesDefinitionIsBeingBuiltSignal($extensionKey)
static getUrl($url, $includeHeader=0, $requestHeaders=FALSE, &$report=NULL)
importInitialFiles($extensionSiteRelPath, $extensionKey)
importStaticSql($rawDefinitions)
unloadExtension($extensionKey)
enrichExtensionWithDetails($extensionKey, $loadTerInformation=TRUE)
if(!defined('TYPO3_MODE')) $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_userauth.php']['logoff_pre_processing'][]
emitAfterExtensionT3DImportSignal($importFileToUse, $importResult)
removeExtension($extension)
isAvailable($extensionKey)