installation von extensions auf mehreren servern ermoeglicht

This commit is contained in:
ma0048
2021-05-05 13:37:19 +02:00
parent d29d80fc59
commit 43ff675b5e
6 changed files with 66 additions and 20 deletions
@@ -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);
}
}
@@ -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);
}
}
+21 -11
View File
@@ -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);
@@ -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
@@ -108,6 +108,7 @@
<th>URL</th>
<th>Minimum required Core version</th>
<th>Dependes on (extensions)</th>
<th>Server</th>
<th>Enabled</th>
<th>&nbsp;</th>
</tr>
@@ -124,6 +125,7 @@
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>
<input type="checkbox" class="chkbox" name="%s" %s>
</td>
@@ -143,6 +145,7 @@
$extension->url,
$extension->core_version,
count($extension->dependencies) == 0 ? 'None' : json_encode($extension->dependencies),
$extension->server_kurzbz,
$extension->extension_id,
$extension->enabled === true ? 'checked' : '',
$extension->extension_id
@@ -160,7 +163,9 @@
<?php echo form_open_multipart(current_url().'/uploadExtension'); ?>
<input type="file" name="extension" />
<input type="submit" value="Install/Update extension" />
<input type="submit" value="Install/Update extension" /> <br/>
<input type="checkbox" class="checkbox" id="databasechange" name="databasechange"/>
<label for="databasechange">Don´t perform SQL</label>
</form>
</body>
+29 -3
View File
@@ -956,13 +956,39 @@ if ($result = @$db->db_query("SELECT conname FROM pg_constraint WHERE conname =
// UNIQUE INDEX uidx_extensions_name_version
if ($result = $db->db_query("SELECT 0 FROM pg_class WHERE relname = 'uidx_extensions_name_version'"))
{
if ($db->db_num_rows($result) == 0)
if ($db->db_num_rows($result) == 1)
{
$qry = 'CREATE UNIQUE INDEX uidx_extensions_name_version ON system.tbl_extensions USING btree (name, version);';
$qry = 'DROP INDEX system.uidx_extensions_name_version';
if (!$db->db_query($qry))
echo '<strong>uidx_extensions_name_version '.$db->db_last_error().'</strong><br>';
else
echo '<br>Created unique uidx_extensions_name_version';
echo '<br>Dropped unique uidx_extensions_name_version';
}
}
// stud_selfservice boolean fuer public.tbl_vorlage
if(!@$db->db_query("SELECT server_kurzbz FROM system.tbl_extensions LIMIT 1"))
{
$qry = "ALTER TABLE system.tbl_extensions ADD COLUMN server_kurzbz varchar(64);
ALTER TABLE system.tbl_extensions ADD CONSTRAINT fk_extensios_server_kurzbz FOREIGN KEY (server_kurzbz) REFERENCES system.tbl_server(server_kurzbz) ON UPDATE CASCADE ON DELETE RESTRICT;";
if(!$db->db_query($qry))
echo '<strong>App: '.$db->db_last_error().'</strong><br>';
else
echo '<br>Neue Spalte server_kurzbz in system.tbl_extensions hinzugefügt';
}
// UNIQUE INDEX uidx_extensions_name_version_server
if ($result = $db->db_query("SELECT 0 FROM pg_class WHERE relname = 'uidx_extensions_name_version_server'"))
{
if ($db->db_num_rows($result) == 0)
{
$qry = 'CREATE UNIQUE INDEX uidx_extensions_name_version_server ON system.tbl_extensions USING btree (name, version, server_kurzbz);';
if (!$db->db_query($qry))
echo '<strong>uidx_extensions_name_version_server '.$db->db_last_error().'</strong><br>';
else
echo '<br>Created unique uidx_extensions_name_version_server';
}
}