mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-20 00:12:15 +00:00
installation von extensions auf mehreren servern ermoeglicht
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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> </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
@@ -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';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user