Skip to content

Commit 84b8c17

Browse files
committed
Implemented: FS#2061 - App installer
Implemented: FS#560 - Add support for APS (Application Packaging Standard)
1 parent e63545f commit 84b8c17

File tree

6 files changed

+59
-24
lines changed

6 files changed

+59
-24
lines changed

interface/lib/classes/aps_guicontroller.inc.php

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ private function secureLocation($location_unfiltered)
8787
*/
8888
private function getCustomerIDFromDomain($domain)
8989
{
90-
$customerid = '';
90+
$customerid = 0;
9191

9292
$customerdata = $this->db->queryOneRecord("SELECT client_id FROM sys_group, web_domain
9393
WHERE web_domain.sys_groupid = sys_group.groupid
@@ -206,7 +206,7 @@ public function createPackageInstance($settings, $packageid)
206206
if(!empty($websrv)) $webserver_id = $websrv['server_id'];
207207
$customerid = $this->getCustomerIDFromDomain($settings['main_domain']);
208208

209-
if(empty($settings) || empty($customerid) || empty($webserver_id)) return false;
209+
if(empty($settings) || empty($webserver_id)) return false;
210210

211211
//* Get server config of the web server
212212
$this->app->uses("getconf");
@@ -306,6 +306,11 @@ public function deleteInstance($instanceid)
306306
$datalog = array('Instance_id' => $instanceid, 'server_id' => $webserver_id);
307307
$this->db->datalogSave('aps', 'DELETE', 'id', $instanceid, array(), $datalog);
308308
*/
309+
310+
$sql = "SELECT web_database.database_id as database_id FROM aps_instances_settings, web_database WHERE aps_instances_settings.value = web_database.database_name AND aps_instances_settings.value = aps_instances_settings.name = 'main_database_name' AND aps_instances_settings.instance_id = ".$instanceid." LIMIT 0,1";
311+
$tmp = $this->db->queryOneRecord($sql);
312+
if($tmp['database_id'] > 0) $this->db->datalogDelete('web_database', 'database_id', $tmp['database_id']);
313+
309314
$this->db->datalogUpdate('aps_instances', "instance_status = ".INSTANCE_REMOVE, 'id', $instanceid);
310315
}
311316

@@ -327,6 +332,11 @@ public function reinstallInstance($instanceid)
327332
$datalog = array('instance_id' => $instanceid, 'server_id' => $webserver_id);
328333
$this->db->datalogSave('aps', 'INSERT', 'id', $instanceid, array(), $datalog);
329334
*/
335+
336+
$sql = "SELECT web_database.database_id as database_id FROM aps_instances_settings, web_database WHERE aps_instances_settings.value = web_database.database_name AND aps_instances_settings.value = aps_instances_settings.name = 'main_database_name' AND aps_instances_settings.instance_id = ".$instanceid." LIMIT 0,1";
337+
$tmp = $this->db->queryOneRecord($sql);
338+
if($tmp['database_id'] > 0) $this->db->datalogDelete('web_database', 'database_id', $tmp['database_id']);
339+
330340
$this->db->datalogUpdate('aps_instances', "instance_status = ".INSTANCE_INSTALL, 'id', $instanceid);
331341
}
332342

interface/web/sites/aps_cron_apscrawler_if.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@
3232
//require_once('classes/class.crawler.php');
3333
$app->load('aps_crawler');
3434

35-
if(!@ini_get('allow_url_fopen')) $app->error('allow_url_fopen is not enabled');
36-
if(!function_exists('curl_version')) $app->error('cURL is not available');
35+
if(!@ini_get('allow_url_fopen')) $app->error('allow_url_fopen is not enabled.');
36+
if(!function_exists('curl_version')) $app->error('The PHP CURL extension is not available.');
3737

3838
$log_prefix = 'APS crawler cron: ';
3939

interface/web/sites/aps_do_operation.php

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -30,35 +30,35 @@
3030

3131
require_once('../../lib/config.inc.php');
3232
require_once('../../lib/app.inc.php');
33-
require_once('classes/class.guicontroller.php');
33+
$app->load('aps_guicontroller');
3434

3535
// Check the module permissions
36-
$app->auth->check_module_permissions('aps');
36+
$app->auth->check_module_permissions('sites');
3737

3838
$gui = new ApsGUIController($app);
3939

4040
// An action and ID are required in any case
41-
if(!isset($_GET['action'])) die;
41+
if(!isset($_GET['action'])) die('No action');
4242

4343
// List of operations which can be performed
4444
if($_GET['action'] == 'change_status')
4545
{
4646
// Only admins can perform this operation
47-
if($_SESSION['s']['user']['typ'] != 'admin') die;
47+
if($_SESSION['s']['user']['typ'] != 'admin') die('For admin use only.');
4848

4949
// Make sure a valid package ID is given
5050
if(!$gui->isValidPackageID($_GET['id'], true)) die($app->lng('Invalid ID'));
5151

5252
// Change the existing status to the opposite
53-
$get_status = $app->db->queryOneRecord("SELECT PackageStatus FROM aps_packages WHERE ID = '".intval($_GET['id'])."';");
54-
if($get_status['PackageStatus'] == strval(PACKAGE_LOCKED))
53+
$get_status = $app->db->queryOneRecord("SELECT package_status FROM aps_packages WHERE id = '".intval($_GET['id'])."';");
54+
if($get_status['package_status'] == strval(PACKAGE_LOCKED))
5555
{
56-
$app->db->query("UPDATE aps_packages SET PackageStatus = ".PACKAGE_ENABLED." WHERE ID = '".intval($_GET['id'])."';");
56+
$app->db->query("UPDATE aps_packages SET package_status = ".PACKAGE_ENABLED." WHERE id = '".intval($_GET['id'])."';");
5757
echo '<div class="swap" id="ir-Yes"><span>'.$app->lng('Yes').'</span></div>';
5858
}
5959
else
6060
{
61-
$app->db->query("UPDATE aps_packages SET PackageStatus = ".PACKAGE_LOCKED." WHERE ID = '".intval($_GET['id'])."';");
61+
$app->db->query("UPDATE aps_packages SET Package_status = ".PACKAGE_LOCKED." WHERE id = '".intval($_GET['id'])."';");
6262
echo '<div class="swap" id="ir-No"><span>'.$app->lng('No').'</span></div>';
6363
}
6464
}
@@ -76,9 +76,9 @@
7676
if(!$gui->isValidInstanceID($_GET['id'], $client_id, $is_admin)) die($app->lng('Invalid ID'));
7777

7878
// Only delete the instance if the status is "installed" or "flawed"
79-
$check = $app->db->queryOneRecord("SELECT ID FROM aps_instances
80-
WHERE ID = ".$app->db->quote($_GET['id'])." AND
81-
(InstanceStatus = ".INSTANCE_SUCCESS." OR InstanceStatus = ".INSTANCE_ERROR.");");
79+
$check = $app->db->queryOneRecord("SELECT id FROM aps_instances
80+
WHERE id = ".$app->db->quote($_GET['id'])." AND
81+
(instance_status = ".INSTANCE_SUCCESS." OR instance_status = ".INSTANCE_ERROR.");");
8282
if(!empty($check)) $gui->deleteInstance($_GET['id']);
8383

8484
echo $app->lng('Installation_remove');
@@ -96,13 +96,13 @@
9696
// Assume that the given instance belongs to the currently calling client_id. Unimportant if status is admin
9797
if(!$gui->isValidInstanceID($_GET['id'], $client_id, $is_admin)) die($app->lng('Invalid ID'));
9898

99-
// We've an InstanceID, so make sure the package is no enabled and InstanceStatus is still "installed"
100-
$check = $app->db->queryOneRecord("SELECT aps_instances.ID FROM aps_instances, aps_packages
101-
WHERE aps_instances.PackageID = aps_packages.ID
102-
AND aps_instances.InstanceStatus = ".INSTANCE_SUCCESS."
103-
AND aps_packages.PackageStatus = ".PACKAGE_ENABLED."
104-
AND aps_instances.ID = ".$app->db->quote($_GET['id']).";");
105-
if(!$check) die; // normally this might not happen at all, so just die
99+
// We've an InstanceID, so make sure the package is not enabled and InstanceStatus is still "installed"
100+
$check = $app->db->queryOneRecord("SELECT aps_instances.id FROM aps_instances, aps_packages
101+
WHERE aps_instances.package_id = aps_packages.id
102+
AND aps_instances.instance_status = ".INSTANCE_SUCCESS."
103+
AND aps_packages.package_status = ".PACKAGE_ENABLED."
104+
AND aps_instances.id = ".$app->db->quote($_GET['id']).";");
105+
if(!$check) die('Check failed'); // normally this might not happen at all, so just die
106106

107107
$gui->reinstallInstance($_GET['id']);
108108
echo $app->lng('Installation_task');

interface/web/sites/aps_installedpackages_list.php

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@
8282
$limit_sql = $app->listform->getPagingSQL($sql_where);
8383
$app->tpl->setVar('paging', $app->listform->pagingHTML);
8484

85+
if(!$is_admin) {
8586
// Our query over multiple tables
8687
$query = "SELECT aps_instances.id AS id, aps_instances.package_id AS package_id,
8788
aps_instances.customer_id AS customer_id, client.username AS customer_name,
@@ -92,7 +93,20 @@
9293
'/', (SELECT value FROM aps_instances_settings WHERE name='main_location' AND instance_id = aps_instances.id))
9394
AS install_location
9495
FROM aps_instances, aps_packages, client
95-
WHERE client.client_id = aps_instances.Customer_id AND ".$sql_where." ".$app->listform_actions->SQLOrderBy." ".$limit_sql;
96+
WHERE client.client_id = aps_instances.customer_id AND ".$sql_where." ".$app->listform_actions->SQLOrderBy." ".$limit_sql;
97+
} else {
98+
$query = "SELECT aps_instances.id AS id, aps_instances.package_id AS package_id,
99+
aps_instances.customer_id AS customer_id, sys_group.name AS customer_name,
100+
aps_instances.instance_status AS instance_status, aps_packages.name AS package_name,
101+
aps_packages.version AS package_version, aps_packages.release AS package_release,
102+
aps_packages.package_status AS package_status,
103+
CONCAT ((SELECT value FROM aps_instances_settings WHERE name='main_domain' AND instance_id = aps_instances.id),
104+
'/', (SELECT value FROM aps_instances_settings WHERE name='main_location' AND instance_id = aps_instances.id))
105+
AS install_location
106+
FROM aps_instances, aps_packages, sys_group
107+
WHERE sys_group.client_id = aps_instances.customer_id AND ".$sql_where." ".$app->listform_actions->SQLOrderBy." ".$limit_sql;
108+
109+
}
96110

97111
$records = $app->db->queryAllRecords($query);
98112
$app->listform_actions->DataRowColor = '#FFFFFF';

server/lib/classes/aps_installer.inc.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -586,9 +586,14 @@ public function installHandler($instanceid, $type)
586586
else return false;
587587

588588
// Get all instance metadata
589+
/*
589590
$task = $this->app->db->queryOneRecord("SELECT * FROM aps_instances AS i
590591
INNER JOIN aps_packages AS p ON i.package_id = p.id
591592
INNER JOIN client AS c ON i.customer_id = c.client_id
593+
WHERE i.id = ".$instanceid.";");
594+
*/
595+
$task = $this->app->db->queryOneRecord("SELECT * FROM aps_instances AS i
596+
INNER JOIN aps_packages AS p ON i.package_id = p.id
592597
WHERE i.id = ".$instanceid.";");
593598
if(!$task) return false; // formerly: throw new Exception('The InstanceID doesn\'t exist.');
594599
if(!isset($task['instance_id'])) $task['instance_id'] = $instanceid;

server/plugins-available/aps_plugin.inc.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public function onLoad()
5757
global $app;
5858

5959
// Register the available events
60-
$app->plugins->registerEvent('aps_instance_install', $this->plugin_name, 'install');
60+
$app->plugins->registerEvent('aps_instance_insert', $this->plugin_name, 'install');
6161
$app->plugins->registerEvent('aps_instance_update', $this->plugin_name, 'install');
6262
$app->plugins->registerEvent('aps_instance_delete', $this->plugin_name, 'delete');
6363
}
@@ -78,6 +78,12 @@ public function install($event_name, $data)
7878
$app->log("Running installHandler",LOGLEVEL_DEBUG);
7979
$aps->installHandler($instanceid, 'install');
8080
}
81+
82+
if($data['new']['instance_status'] == INSTANCE_REMOVE) {
83+
$aps = new ApsInstaller($app);
84+
$app->log("Running installHandler",LOGLEVEL_DEBUG);
85+
$aps->installHandler($instanceid, 'delete');
86+
}
8187
}
8288

8389
/**

0 commit comments

Comments
 (0)