diff --git a/application/controllers/system/extensions/CLI_Manager.php b/application/controllers/system/extensions/CLI_Manager.php index ed8a5f7a5..110fad9e8 100644 --- a/application/controllers/system/extensions/CLI_Manager.php +++ b/application/controllers/system/extensions/CLI_Manager.php @@ -28,9 +28,10 @@ class CLI_Manager extends CLI_Controller * die Commandline ohne Upload durchzufuehren. * @param $extensioName string Name der Extension * @param $filename Url Encoded Pfad zum tgz File der Extension + * @param $perform_sql boolean ob die SQL Befehle ausgeführt werden */ - public function uploadExtension($extensionName = null, $filename = null) + public function uploadExtension($extensionName = null, $filename = null, $perform_sql = true) { - $this->extensionslib->installExtension($extensionName, urldecode($filename)); + $this->extensionslib->installExtension($extensionName, urldecode($filename), $perform_sql); } } diff --git a/application/controllers/system/extensions/Manager.php b/application/controllers/system/extensions/Manager.php index aa4e76e9c..429c967ae 100644 --- a/application/controllers/system/extensions/Manager.php +++ b/application/controllers/system/extensions/Manager.php @@ -87,9 +87,13 @@ class Manager extends Auth_Controller * die Commandline ohne Upload durchzufuehren. * @param $extensioName string Name der Extension * @param $filename Url Encoded Pfad zum tgz File der Extension + * @param $perform_sql boolean ob die SQL Befehle ausgeführt werden */ - public function uploadExtension($extensionName = null, $filename = null) + public function uploadExtension($extensionName = null, $filename = null, $perform_sql = true) { - $this->extensionslib->installExtension($extensionName, urldecode($filename)); + $perform_sql = $this->input->post('databasechange'); + $perform_sql = isset($perform_sql) ? false : true; + + $this->extensionslib->installExtension($extensionName, urldecode($filename), $perform_sql); } } diff --git a/application/libraries/ExtensionsLib.php b/application/libraries/ExtensionsLib.php index cec40a753..6598ec2e8 100644 --- a/application/libraries/ExtensionsLib.php +++ b/application/libraries/ExtensionsLib.php @@ -64,7 +64,7 @@ class ExtensionsLib * @param $extensionName string Name of Extension (optional) * @param $filename Path to tgz Extension File (optional) */ - public function installExtension($extensionName = null, $filename = null) + public function installExtension($extensionName = null, $filename = null, $perform_sql = true) { $extensionDB = null; // contains data from DB about an extension $extensionJson = null; // contains the extension.json data @@ -114,7 +114,7 @@ class ExtensionsLib $this->_installExtension($extensionJson); // records extension data in DB - if (!$this->_errorOccurred) // if no error occurred + if (!$this->_errorOccurred && $perform_sql === true) // if no error occurred { // Loads and executes neede SQL scripts $this->_loadSQLs( @@ -173,6 +173,9 @@ class ExtensionsLib $result = $this->_ci->ExtensionsModel->load($extensionId); if (hasData($result)) // if something was found { + $extensionServer = $result->retval[0]->server_kurzbz; + if ($extensionServer !== SERVER_NAME) + return false; $extensionName = $result->retval[0]->name; // extension name $this->_delSoftLinks($extensionName); // not to be checked, could fail if the extension is disabled // remove the extension from the extensions installation directory @@ -180,10 +183,9 @@ class ExtensionsLib // Select all the version of this extension $this->_ci->ExtensionsModel->addSelect('extension_id'); - $result = $this->_ci->ExtensionsModel->loadWhere(array('name' => $extensionName)); + $result = $this->_ci->ExtensionsModel->loadWhere(array('name' => $extensionName, 'server_kurzbz' => SERVER_NAME)); if (hasData($result)) // if something was found { - $extsArray = array(); foreach ($result->retval as $key => $extension) // loops on them { // Remove them all @@ -328,7 +330,7 @@ class ExtensionsLib // Loads the last version of the previous installation of this extension $this->_ci->ExtensionsModel->addOrder('version', 'DESC'); $this->_ci->ExtensionsModel->addLimit(1); - $result = $this->_ci->ExtensionsModel->loadWhere(array('name' => $extensionName)); + $result = $this->_ci->ExtensionsModel->loadWhere(array('name' => $extensionName, 'server_kurzbz' => SERVER_NAME)); if (isError($result)) { $this->_errorOccurred = true; @@ -550,7 +552,8 @@ class ExtensionsLib 'license' => isset($extensionJson->license) ? $extensionJson->license : null, 'url' => isset($extensionJson->url) ? $extensionJson->url : null, 'core_version' => $extensionJson->core_version, - 'dependencies' => isset($extensionJson->dependencies) ? $extensionJson->dependencies : null + 'dependencies' => isset($extensionJson->dependencies) ? $extensionJson->dependencies : null, + 'server_kurzbz' => SERVER_NAME, ) ); if (isSuccess($result)) @@ -738,11 +741,18 @@ class ExtensionsLib mkdir($extensionPath.$targetDirectory); } - // Create the symlink - $_addSoftLinks = symlink( - $extensionPath.$targetDirectory, - $rootPath.$targetDirectory.'/'.ExtensionsLib::EXTENSIONS_DIR_NAME.'/'.$extensionName - ); + if (!file_exists($rootPath.$targetDirectory.'/'.ExtensionsLib::EXTENSIONS_DIR_NAME.'/'.$extensionName)) + { + // Create the symlink + $_addSoftLinks = symlink( + $extensionPath.$targetDirectory, + $rootPath.$targetDirectory.'/'.ExtensionsLib::EXTENSIONS_DIR_NAME.'/'.$extensionName + ); + }else + { + $_addSoftLinks = true; + } + if (!$_addSoftLinks) { log_message('error', 'Failed to create Symlink to '.$extensionPath.$targetDirectory); diff --git a/application/models/system/Extensions_model.php b/application/models/system/Extensions_model.php index 8898ebd50..1beef4d8b 100644 --- a/application/models/system/Extensions_model.php +++ b/application/models/system/Extensions_model.php @@ -31,7 +31,7 @@ class Extensions_model extends DB_Model */ public function getInstalledExtensions() { - $query = 'SELECT extension_id, e1.name, e1.version, description, license, url, core_version, dependencies, enabled + $query = 'SELECT extension_id, e1.name, e1.version, description, license, url, core_version, dependencies, enabled, e1.server_kurzbz FROM system.tbl_extensions e1 INNER JOIN ( SELECT name, MAX(version) AS version diff --git a/application/views/system/extensions/manager.php b/application/views/system/extensions/manager.php index 6c48bc80a..01111f295 100644 --- a/application/views/system/extensions/manager.php +++ b/application/views/system/extensions/manager.php @@ -108,6 +108,7 @@