Index: typo3/sysext/em/classes/tools/class.tx_em_tools.php =================================================================== --- typo3/sysext/em/classes/tools/class.tx_em_tools.php (revision 9361) +++ typo3/sysext/em/classes/tools/class.tx_em_tools.php (revision ) @@ -93,6 +93,34 @@ /** + * Refreshes the global extension list + * + * @return void + */ + function refreshGlobalExtList() { + global $TYPO3_LOADED_EXT; + + $TYPO3_LOADED_EXT = t3lib_extMgm::typo3_loadExtensions(); + if ($TYPO3_LOADED_EXT['_CACHEFILE']) { + require(PATH_typo3conf . $TYPO3_LOADED_EXT['_CACHEFILE'] . '_ext_localconf.php'); + } + return; + + $GLOBALS['TYPO3_LOADED_EXT'] = t3lib_extMgm::typo3_loadExtensions(); + if ($TYPO3_LOADED_EXT['_CACHEFILE']) { + require(PATH_typo3conf . $TYPO3_LOADED_EXT['_CACHEFILE'] . '_ext_localconf.php'); + } else { + $temp_TYPO3_LOADED_EXT = $TYPO3_LOADED_EXT; + foreach ($temp_TYPO3_LOADED_EXT as $_EXTKEY => $temp_lEDat) { + if (is_array($temp_lEDat) && $temp_lEDat['ext_localconf.php']) { + $_EXTCONF = $GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf'][$_EXTKEY]; + require($temp_lEDat['ext_localconf.php']); + } + } + } + } + + /** * Set category array entries for extension * * @param array Category index array Index: typo3/sysext/em/classes/extensions/class.tx_em_extensions_list.php =================================================================== --- typo3/sysext/em/classes/extensions/class.tx_em_extensions_list.php (revision 9414) +++ typo3/sysext/em/classes/extensions/class.tx_em_extensions_list.php (revision ) @@ -544,10 +544,11 @@ ''; // Manual download - $fileP = PATH_site . $this->parentObject->typePaths[$extInfo['type']] . $extKey . '/doc/manual.sxw'; + $fileP = PATH_site . tx_em_Tools::typePath($extInfo['type']) . $extKey . '/doc/manual.sxw'; $cells[] = '' . - ($this->parentObject->typePaths[$extInfo['type']] && @is_file($fileP) ? - '' . + (tx_em_Tools::typePath($extInfo['type']) && @is_file($fileP) ? + '' . t3lib_iconWorks::getSpriteIcon('actions-system-extension-documentation') . '' : '') . ''; @@ -781,6 +782,7 @@ // Implode unique list of extensions to load and return: $list = implode(',', array_unique($listArr)); + return $list; } @@ -835,8 +837,9 @@ * @see removeExtFromList(), addExtToList() */ function removeRequiredExtFromListArr($listArr) { + $requiredExtensions = t3lib_div::trimExplode(',', $GLOBALS['TYPO3_CONF_VARS']['EXT']['requiredExt'], 1); foreach ($listArr as $k => $ext) { - if (in_array($ext, $this->parentObject->requiredExt) || !strcmp($ext, '_CACHEFILE')) { + if (in_array($ext, $requiredExtensions) || !strcmp($ext, '_CACHEFILE')) { unset($listArr[$k]); } } Index: typo3/sysext/em/classes/install/class.tx_em_install.php =================================================================== --- typo3/sysext/em/classes/install/class.tx_em_install.php (revision 9449) +++ typo3/sysext/em/classes/install/class.tx_em_install.php (revision ) @@ -1304,6 +1304,107 @@ return $content; } + /** + * Writes the extension list to "localconf.php" file + * Removes the temp_CACHED* files before return. + * + * @param string List of extensions + * @return void + */ + function writeNewExtensionList($newExtList) { + $strippedExtensionList = $this->stripNonFrontendExtensions($newExtList); + + // Instance of install tool + $instObj = new t3lib_install; + $instObj->allowUpdateLocalConf = 1; + $instObj->updateIdentity = 'TYPO3 Extension Manager'; + + // Get lines from localconf file + $lines = $instObj->writeToLocalconf_control(); + $instObj->setValueInLocalconfFile($lines, '$TYPO3_CONF_VARS[\'EXT\'][\'extList\']', $newExtList); + $instObj->setValueInLocalconfFile($lines, '$TYPO3_CONF_VARS[\'EXT\'][\'extList_FE\']', $strippedExtensionList); + $instObj->writeToLocalconf_control($lines); + + $GLOBALS['TYPO3_CONF_VARS']['EXT']['extList'] = $newExtList; + $GLOBALS['TYPO3_CONF_VARS']['EXT']['extList_FE'] = $strippedExtensionList; + t3lib_extMgm::removeCacheFiles(); -} + } + /** + * Removes unneeded extensions from the frontend based on + * EMCONF doNotLoadInFE = 1 + * + * @param string $extList + * @return string + */ + function stripNonFrontendExtensions($extList) { + $fullExtList = $this->parentObject->extensionList->getInstalledExtensions(); + $extListArray = t3lib_div::trimExplode(',', $extList); + foreach ($extListArray as $arrayKey => $extKey) { + if ($fullExtList[0][$extKey]['EM_CONF']['doNotLoadInFE'] == 1) { + unset($extListArray[$arrayKey]); + } + } + $nonFEList = implode(',', $extListArray); + return $nonFEList; + } + + /** + * Updates the database according to extension requirements + * DBAL compliant (based on Install Tool code) + * + * @param string Extension key + * @param array Extension information array + * @return void + */ + function forceDBupdates($extKey, $extInfo) { + $instObj = new t3lib_install; + + // Updating tables and fields? + if (is_array($extInfo['files']) && in_array('ext_tables.sql', $extInfo['files'])) { + $fileContent = t3lib_div::getUrl(tx_em_Tools::getExtPath($extKey, $extInfo['type']) . 'ext_tables.sql'); + + $FDfile = $instObj->getFieldDefinitions_fileContent($fileContent); + if (count($FDfile)) { + $FDdb = $instObj->getFieldDefinitions_database(TYPO3_db); + $diff = $instObj->getDatabaseExtra($FDfile, $FDdb); + $update_statements = $instObj->getUpdateSuggestions($diff); + + foreach ((array) $update_statements['add'] as $string) { + $GLOBALS['TYPO3_DB']->admin_query($string); + } + foreach ((array) $update_statements['change'] as $string) { + $GLOBALS['TYPO3_DB']->admin_query($string); + } + foreach ((array) $update_statements['create_table'] as $string) { + $GLOBALS['TYPO3_DB']->admin_query($string); + } + } + } + + // Importing static tables? + if (is_array($extInfo['files']) && in_array('ext_tables_static+adt.sql', $extInfo['files'])) { + $fileContent = t3lib_div::getUrl(tx_em_Tools::getExtPath($extKey, $extInfo['type']) . 'ext_tables_static+adt.sql'); + + $statements = $instObj->getStatementarray($fileContent, 1); + list($statements_table, $insertCount) = $instObj->getCreateTables($statements, 1); + + // Traverse the tables + foreach ($statements_table as $table => $query) { + $GLOBALS['TYPO3_DB']->admin_query('DROP TABLE IF EXISTS ' . $table); + $GLOBALS['TYPO3_DB']->admin_query($query); + + if ($insertCount[$table]) { + $statements_insert = $instObj->getTableInsertStatements($statements, $table); + + foreach ($statements_insert as $v) { + $GLOBALS['TYPO3_DB']->admin_query($v); + } + } + } + } + } + +} + ?> \ No newline at end of file Index: typo3/sysext/em/classes/index.php =================================================================== --- typo3/sysext/em/classes/index.php (revision 9440) +++ typo3/sysext/em/classes/index.php (revision ) @@ -428,8 +428,12 @@ // temporary unset new modules unset ($this->MOD_MENU['function']['extensionmanager'], $this->MOD_MENU['function']['develop']); + /* + if (!intval($GLOBALS['TYPO3_CONF_VARS']['BE']['debug'])) { + unset ($this->MOD_MENU['function']['develop']); + } + */ - $this->MOD_MENU['singleDetails'] = $this->mergeExternalItems($this->MCONF['name'], 'singleDetails', $this->MOD_MENU['singleDetails']); @@ -466,10 +470,9 @@ * @return void */ function main() { - global $BE_USER, $LANG, $TYPO3_CONF_VARS; if (empty($this->MOD_SETTINGS['mirrorListURL'])) { - $this->MOD_SETTINGS['mirrorListURL'] = $TYPO3_CONF_VARS['EXT']['em_mirrorListURL']; + $this->MOD_SETTINGS['mirrorListURL'] = $GLOBALS['TYPO3_CONF_VARS']['EXT']['em_mirrorListURL']; } // Starting page: @@ -1312,9 +1315,9 @@ break; } if ($newExtList != -1) { - $this->writeNewExtensionList($newExtList); - $this->refreshGlobalExtList(); - $this->forceDBupdates($extKey, $inst_list[$extKey]); + $this->install->writeNewExtensionList($newExtList); + tx_em_Tools::refreshGlobalExtList(); + $this->install->forceDBupdates($extKey, $inst_list[$extKey]); return array(true, $GLOBALS['LANG']->getLL('ext_import_ext_loaded')); } } @@ -1360,9 +1363,9 @@ $this->importExtFromRep($extKey, $version, 'L'); $newExtList = $this->extensionList->addExtToList($extKey, $inst_list); if ($newExtList != -1) { - $this->writeNewExtensionList($newExtList); - $this->refreshGlobalExtList(); - $this->forceDBupdates($extKey, $inst_list[$extKey]); + $this->install->writeNewExtensionList($newExtList); + tx_em_Tools::refreshGlobalExtList(); + $this->install->forceDBupdates($extKey, $inst_list[$extKey]); $this->translations->installTranslationsForExtension($extKey, $this->getMirrorURL()); return array(true, $GLOBALS['LANG']->getLL('ext_import_ext_imported')); } else { @@ -1373,30 +1376,7 @@ } } - function refreshGlobalExtList() { - global $TYPO3_LOADED_EXT; - $TYPO3_LOADED_EXT = t3lib_extMgm::typo3_loadExtensions(); - if ($TYPO3_LOADED_EXT['_CACHEFILE']) { - require(PATH_typo3conf . $TYPO3_LOADED_EXT['_CACHEFILE'] . '_ext_localconf.php'); - } - return; - - $GLOBALS['TYPO3_LOADED_EXT'] = t3lib_extMgm::typo3_loadExtensions(); - if ($TYPO3_LOADED_EXT['_CACHEFILE']) { - require(PATH_typo3conf . $TYPO3_LOADED_EXT['_CACHEFILE'] . '_ext_localconf.php'); - } else { - $temp_TYPO3_LOADED_EXT = $TYPO3_LOADED_EXT; - foreach ($temp_TYPO3_LOADED_EXT as $_EXTKEY => $temp_lEDat) { - if (is_array($temp_lEDat) && $temp_lEDat['ext_localconf.php']) { - $_EXTCONF = $GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf'][$_EXTKEY]; - require($temp_lEDat['ext_localconf.php']); - } - } - } - } - - /** * Imports an extensions from the online repository * NOTICE: in version 4.0 this changed from "importExtFromRep_old($extRepUid,$loc,$uploadFlag=0,$directInput='',$recentTranslations=0,$incManual=0,$dontDelete=0)" @@ -1613,7 +1593,7 @@ } } if (!$updates || t3lib_div::_GP('_do_install')) { - $this->writeNewExtensionList($newExtList); + $this->install->writeNewExtensionList($newExtList); $action = $this->CMD['load'] ? 'installed' : 'removed'; $GLOBALS['BE_USER']->writelog(5, 1, 0, 0, 'Extension list has been changed, extension %s has been %s', array($extKey, $action)); @@ -2418,111 +2398,12 @@ } - /** - * Writes the extension list to "localconf.php" file - * Removes the temp_CACHED* files before return. - * - * @param string List of extensions - * @return void - */ - function writeNewExtensionList($newExtList) { - global $TYPO3_CONF_VARS; - $strippedExtensionList = $this->stripNonFrontendExtensions($newExtList); - // Instance of install tool - $instObj = new t3lib_install; - $instObj->allowUpdateLocalConf = 1; - $instObj->updateIdentity = 'TYPO3 Extension Manager'; - // Get lines from localconf file - $lines = $instObj->writeToLocalconf_control(); - $instObj->setValueInLocalconfFile($lines, '$TYPO3_CONF_VARS[\'EXT\'][\'extList\']', $newExtList); - $instObj->setValueInLocalconfFile($lines, '$TYPO3_CONF_VARS[\'EXT\'][\'extList_FE\']', $strippedExtensionList); - $instObj->writeToLocalconf_control($lines); - $TYPO3_CONF_VARS['EXT']['extList'] = $newExtList; - $TYPO3_CONF_VARS['EXT']['extList_FE'] = $strippedExtensionList; - t3lib_extMgm::removeCacheFiles(); - } - /** - * Removes unneeded extensions from the frontend based on - * EMCONF doNotLoadInFE = 1 - * - * @param string $extList - * @return string - */ - function stripNonFrontendExtensions($extList) { - $fullExtList = $this->extensionList->getInstalledExtensions(); - $extListArray = t3lib_div::trimExplode(',', $extList); - foreach ($extListArray as $arrayKey => $extKey) { - if ($fullExtList[0][$extKey]['EM_CONF']['doNotLoadInFE'] == 1) { - unset($extListArray[$arrayKey]); - } - } - $nonFEList = implode(',', $extListArray); - return $nonFEList; - } - - /** - * Updates the database according to extension requirements - * DBAL compliant (based on Install Tool code) - * - * @param string Extension key - * @param array Extension information array - * @return void - */ - function forceDBupdates($extKey, $extInfo) { - $instObj = new t3lib_install; - - // Updating tables and fields? - if (is_array($extInfo['files']) && in_array('ext_tables.sql', $extInfo['files'])) { - $fileContent = t3lib_div::getUrl(tx_em_Tools::getExtPath($extKey, $extInfo['type']) . 'ext_tables.sql'); - - $FDfile = $instObj->getFieldDefinitions_fileContent($fileContent); - if (count($FDfile)) { - $FDdb = $instObj->getFieldDefinitions_database(TYPO3_db); - $diff = $instObj->getDatabaseExtra($FDfile, $FDdb); - $update_statements = $instObj->getUpdateSuggestions($diff); - - foreach ((array) $update_statements['add'] as $string) { - $GLOBALS['TYPO3_DB']->admin_query($string); - } - foreach ((array) $update_statements['change'] as $string) { - $GLOBALS['TYPO3_DB']->admin_query($string); - } - foreach ((array) $update_statements['create_table'] as $string) { - $GLOBALS['TYPO3_DB']->admin_query($string); - } - } - } - - // Importing static tables? - if (is_array($extInfo['files']) && in_array('ext_tables_static+adt.sql', $extInfo['files'])) { - $fileContent = t3lib_div::getUrl(tx_em_Tools::getExtPath($extKey, $extInfo['type']) . 'ext_tables_static+adt.sql'); - - $statements = $instObj->getStatementarray($fileContent, 1); - list($statements_table, $insertCount) = $instObj->getCreateTables($statements, 1); - - // Traverse the tables - foreach ($statements_table as $table => $query) { - $GLOBALS['TYPO3_DB']->admin_query('DROP TABLE IF EXISTS ' . $table); - $GLOBALS['TYPO3_DB']->admin_query($query); - - if ($insertCount[$table]) { - $statements_insert = $instObj->getTableInsertStatements($statements, $table); - - foreach ($statements_insert as $v) { - $GLOBALS['TYPO3_DB']->admin_query($v); - } - } - } - } - } - - /************************************ * * Various helper functions Index: typo3/sysext/em/classes/connection/class.tx_em_connection_extdirectserver.php =================================================================== --- typo3/sysext/em/classes/connection/class.tx_em_connection_extdirectserver.php (revision 9402) +++ typo3/sysext/em/classes/connection/class.tx_em_connection_extdirectserver.php (revision ) @@ -42,6 +42,20 @@ var $xmlhandler; /** + * Class for printing extension lists + * + * @var tx_em_Extensions_List + */ + public $extensionList; + + /** + * Class for extension details + * + * @var tx_em_Extensions_Details + */ + public $extensionDetails; + + /** * Keeps instance of settings class. * * @var tx_em_Settings @@ -654,11 +668,14 @@ * @return array status */ public function uploadExtension($parameter) { - $uploadedTempFile = t3lib_div::upload_to_tempfile($parameter['extupload-path']['tmp_name']); + $uploadedTempFile = isset($parameter['extfile']) ? $parameter['extfile'] : t3lib_div::upload_to_tempfile($parameter['extupload-path']['tmp_name']); $location = ($parameter['loc'] === 'G' || $parameter['loc'] === 'S') ? $parameter['loc'] : 'L'; $uploadOverwrite = $parameter['uploadOverwrite'] ? TRUE : FALSE; $install = t3lib_div::makeInstance('tx_em_Install', $this); + $this->extensionList = t3lib_div::makeInstance('tx_em_Extensions_List', $this); + $this->extensionDetails = t3lib_div::makeInstance('tx_em_Extensions_Details', $this); + $upload = $install->uploadExtensionFile($uploadedTempFile, $location, $uploadOverwrite); if ($upload[0] === FALSE) { @@ -667,8 +684,11 @@ 'error' => $upload[1] ); } + $extKey = $upload[1][0]['extKey']; - $result = $install->installExtension($upload[1], $location); + $version = ''; + $dontDelete = TRUE; + $result = $install->installExtension($upload[1], $location, $version, $uploadedTempFile, $dontDelete); return array( 'success' => TRUE, 'data' => $result, @@ -676,6 +696,24 @@ ); } + + /** + * Enables an extension + * + * @param $extensionKey + * @return void + */ + public function enableExtension($extensionKey) { + $this->extensionList = t3lib_div::makeInstance('tx_em_Extensions_List', $this); + $install = t3lib_div::makeInstance('tx_em_Install', $this); + + list($installedList,) = $this->extensionList->getInstalledExtensions(); + $newExtensionList = $this->extensionList->addExtToList($extensionKey, $installedList); + + $install->writeNewExtensionList($newExtensionList); + tx_em_Tools::refreshGlobalExtList(); + $install->forceDBupdates($extensionKey, $newExtensionList[$extensionKey]); -} + } +} ?> \ No newline at end of file