//* This is only allowed for administrators
if (!$app->auth->is_admin()) {
    die('only allowed for administrators.');
}
$package_name = $app->db->quote($_REQUEST['package']);
$install_server_id = $app->functions->intval($_REQUEST['server_id']);
$install_key = $app->db->quote(trim($_REQUEST['install_key']));
$package = $app->db->queryOneRecord("SELECT * FROM software_package WHERE package_name = '{$package_name}'");
$install_key_verified = false;
$message_err = '';
$message_ok = '';
//* verify the key
if ($package['package_installable'] == 'key' && $install_key != '') {
    $repo = $app->db->queryOneRecord("SELECT * FROM software_repo WHERE software_repo_id = " . $package['software_repo_id']);
    $client = new SoapClient(null, array('location' => $repo['repo_url'], 'uri' => $repo['repo_url']));
    $install_key_verified = $client->check_installable($package_name, $install_key, $repo['repo_username'], $repo['repo_password']);
    if ($install_key_verified == false) {
        //$install_key = '';
        $message_err = 'Verification of the key failed.';
    } else {
        // Store the verified key into the database
        $app->db->datalogUpdate('software_package', "package_key = '{$install_key}'", 'package_id', $package['package_id']);
    }
} else {
    $message_ok = 'Please enter the software key for the package.';
}
//* Install packages, if all requirements are fullfilled.
if ($install_server_id > 0 && $package_name != '' && ($package['package_installable'] == 'yes' || $install_key_verified == true)) {
    $sql = "SELECT software_update_id, package_name, update_title FROM software_update WHERE type = 'full' AND package_name = '{$package_name}' ORDER BY v1 DESC, v2 DESC, v3 DESC, v4 DESC LIMIT 0,1";
    $tmp = $app->db->queryOneRecord($sql);
    $software_update_id = $tmp['software_update_id'];