623 lines
17 KiB
PHP
623 lines
17 KiB
PHP
<?php
|
|
|
|
// Pandora FMS - http://pandorafms.com
|
|
// ==================================================
|
|
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
|
|
// Please see http://pandorafms.org for full contribution list
|
|
|
|
// This program is free software; you can redistribute it and/or
|
|
// modify it under the terms of the GNU General Public License
|
|
// as published by the Free Software Foundation; version 2
|
|
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
|
|
function update_pandora_check_installation() {
|
|
global $config;
|
|
|
|
$conf_update_pandora = db_get_row('tconfig', 'token', 'update_pandora_conf_url');
|
|
|
|
$dir = $config['attachment_store'] . '/update_pandora/';
|
|
|
|
if (empty($conf_update_pandora) || !is_dir($dir))
|
|
return false;
|
|
else
|
|
return true;
|
|
}
|
|
|
|
function update_pandora_get_conf() {
|
|
global $config;
|
|
|
|
$conf = array();
|
|
$row = db_get_row('tconfig', 'token', 'update_pandora_conf_url');
|
|
$conf['url'] = $row['value'];
|
|
$row = db_get_row('tconfig', 'token', 'update_pandora_conf_last_installed');
|
|
$conf['last_installed'] = $row['value'];
|
|
$row = db_get_row('tconfig', 'token', 'update_pandora_conf_last_contact');
|
|
$conf['last_contact'] = $row['value'];
|
|
$row = db_get_row('tconfig', 'token', 'update_pandora_conf_download_mode');
|
|
$conf['download_mode'] = $row['value'];
|
|
|
|
$conf['dir'] = $config['attachment_store'] . '/update_pandora/';
|
|
|
|
return $conf;
|
|
}
|
|
|
|
function update_pandora_installation() {
|
|
global $config;
|
|
|
|
$return_var = array('return' => true, 'text' => null);
|
|
|
|
$row = db_get_row_filter('tconfig', array('token' => 'update_pandora_conf_url'));
|
|
|
|
if (empty($row)) {
|
|
//The url of update manager.
|
|
$conf_update_pandora = array('url' => '',
|
|
'last_installed' => '',
|
|
'last_contact' => '',
|
|
'download_mode' => 'wget');
|
|
|
|
$values = array('token' => 'update_pandora_conf_url',
|
|
'value' => $conf_update_pandora['url']);
|
|
$return = db_process_sql_insert('tconfig', $values);
|
|
$values = array('token' => 'update_pandora_conf_last_installed',
|
|
'value' => $conf_update_pandora['last_installed']);
|
|
$return = db_process_sql_insert('tconfig', $values);
|
|
$values = array('token' => 'update_pandora_conf_last_contact',
|
|
'value' => $conf_update_pandora['last_contact']);
|
|
$return = db_process_sql_insert('tconfig', $values);
|
|
$values = array('token' => 'update_pandora_conf_download_mode',
|
|
'value' => $conf_update_pandora['download_mode']);
|
|
$return = db_process_sql_insert('tconfig', $values);
|
|
|
|
if (!$return) {
|
|
$return_var['return'] = false;
|
|
$return_var['text'][] = __('Unsuccesful store conf data in DB.');
|
|
}
|
|
}
|
|
|
|
$dir = $config['attachment_store'] . '/update_pandora/';
|
|
|
|
if (!is_dir($dir)) {
|
|
$return = mkdir($dir);
|
|
|
|
if (!$return) {
|
|
$return_var['return'] = false;
|
|
$return_var['text'][] = __('Unsuccesful create a dir to save package in Pandora Console');
|
|
}
|
|
}
|
|
|
|
return $return_var;
|
|
}
|
|
|
|
function update_pandora_update_conf() {
|
|
global $config;
|
|
global $conf_update_pandora;
|
|
|
|
$values = array('value' => $conf_update_pandora['last_installed']);
|
|
$return = db_process_sql_update('tconfig', $values,
|
|
array('token' => 'update_pandora_conf_last_installed'));
|
|
$values = array('value' => $conf_update_pandora['last_contact']);
|
|
$return = db_process_sql_update('tconfig', $values,
|
|
array('token' => 'update_pandora_conf_last_contact'));
|
|
$values = array('value' => $conf_update_pandora['download_mode']);
|
|
$return = db_process_sql_update('tconfig', $values,
|
|
array('token' => 'update_pandora_conf_download_mode'));
|
|
|
|
return $return;
|
|
}
|
|
|
|
function update_pandora_get_list_downloaded_packages($mode = 'operation') {
|
|
global $config;
|
|
global $conf_update_pandora;
|
|
|
|
$dir = dir($conf_update_pandora['dir']);
|
|
if ($dir === false) {
|
|
ui_print_error_message(sprintf(
|
|
__('Error reading the dir of packages in "%s".'), $conf_update_pandora['dir']));
|
|
return;
|
|
}
|
|
|
|
$packages = array();
|
|
while (false !== ($entry = $dir->read())) {
|
|
if (is_file($conf_update_pandora['dir'] . $entry)
|
|
&& is_readable($conf_update_pandora['dir'] . $entry)) {
|
|
if (strstr($entry, '.tar.gz') !== false) {
|
|
if ($mode == 'operation') {
|
|
$packages[] = $entry;
|
|
}
|
|
else {
|
|
$time_file = date($config["date_format"],
|
|
filemtime($conf_update_pandora['dir'] . $entry));
|
|
|
|
if ($conf_update_pandora['last_installed'] == $entry) {
|
|
$packages[] = array('name' => $entry,
|
|
'current' => true,
|
|
'time' => $time_file);
|
|
}
|
|
else {
|
|
$packages[] = array('name' => $entry,
|
|
'current' => false,
|
|
'time' => $time_file);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (empty($packages)) {
|
|
if ($mode == 'operation') {
|
|
$packages[] = array('name' =>
|
|
__('There are not downloaded packages in your Pandora Console.'),
|
|
'time' => '');
|
|
}
|
|
else {
|
|
$packages[] = array('empty' => true, 'name' =>
|
|
__('There are not downloaded packages in your Pandora Console.'),
|
|
'time' => '');
|
|
}
|
|
}
|
|
|
|
return $packages;
|
|
}
|
|
|
|
function update_pandora_print_javascript() {
|
|
$extension_php_file = 'extensions/update_pandora';
|
|
|
|
?>
|
|
<script type="text/javascript">
|
|
var last = 0;
|
|
$(document).ready(function() {
|
|
ajax_get_online_package_list();
|
|
});
|
|
|
|
function ajax_get_online_package_list() {
|
|
var parameters = {};
|
|
parameters['page'] = "<?php echo $extension_php_file;?>";
|
|
parameters['get_packages_online'] = 1;
|
|
parameters['last'] = last;
|
|
|
|
$.ajax({
|
|
type: 'POST',
|
|
url: 'ajax.php',
|
|
data: parameters,
|
|
dataType: "json",
|
|
success: function(data) {
|
|
if (data['correct'] == 1) {
|
|
var row = $("<tr class='package'></tr>")
|
|
.append().html('<td>' + data['package'] + '</td>');
|
|
$("tbody", "#online_packages").append($(row));
|
|
|
|
last = data['last'];
|
|
|
|
if (data['end'] == 1) {
|
|
$(".spinner_row", "#online_packages").remove();
|
|
}
|
|
else {
|
|
ajax_get_online_package_list();
|
|
}
|
|
}
|
|
else {
|
|
$(".spinner_row", "#online_packages").remove();
|
|
}
|
|
}
|
|
});
|
|
}
|
|
</script>
|
|
<?php
|
|
}
|
|
|
|
function update_pandora_print_javascript_admin() {
|
|
$extension_php_file = 'extensions/update_manager/update_pandora';
|
|
|
|
?>
|
|
<script type="text/javascript">
|
|
var disabled_download_package = false;
|
|
var last = 0;
|
|
|
|
$(document).ready(function() {
|
|
ajax_get_online_package_list_admin();
|
|
|
|
$("#submit-hide_download_dialog").click (function () {
|
|
//Better than fill the downloaded packages
|
|
location.reload();
|
|
//$("#dialog_download" ).dialog('close');
|
|
});
|
|
});
|
|
|
|
function delete_package(package) {
|
|
url = window.location + "&delete_package=1"
|
|
+ '&package=' + package;
|
|
|
|
window.location.replace(url);
|
|
}
|
|
|
|
function ajax_start_install_package(package) {
|
|
$(".package_name").html(package);
|
|
|
|
$("#dialog_download").dialog({
|
|
resizable: false,
|
|
draggable: false,
|
|
modal: true,
|
|
height: 400,
|
|
width: 650,
|
|
overlay: {
|
|
opacity: 0.5,
|
|
background: "black"
|
|
}
|
|
});
|
|
$(".ui-dialog-titlebar-close").hide();
|
|
$("#dialog_download").show();
|
|
|
|
$("#title_downloading_update_pandora").hide();
|
|
$("#title_downloaded_update_pandora").show();
|
|
$("#title_installing_update_pandora").show();
|
|
|
|
install_package(package, package);
|
|
}
|
|
|
|
function ajax_start_download_package(package) {
|
|
$(".package_name").html(package);
|
|
|
|
$("#dialog_download").dialog({
|
|
resizable: false,
|
|
draggable: true,
|
|
modal: true,
|
|
height: 400,
|
|
width: 650,
|
|
overlay: {
|
|
opacity: 0.5,
|
|
background: "black"
|
|
}
|
|
});
|
|
$(".ui-dialog-titlebar-close").hide();
|
|
$("#dialog_download").show();
|
|
|
|
var parameters = {};
|
|
parameters['page'] = "<?php echo $extension_php_file;?>";
|
|
parameters['download_package'] = 1;
|
|
parameters['package'] = package;
|
|
|
|
$.ajax({
|
|
type: 'POST',
|
|
url: 'ajax.php',
|
|
data: parameters,
|
|
dataType: "json",
|
|
success: function(data) {
|
|
if (data['correct'] == 1) {
|
|
if (data['mode'] == 'wget') {
|
|
disabled_download_package = true;
|
|
$("#progress_bar_img img").show();
|
|
install_package(package, data['filename']);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
check_download_package(package);
|
|
}
|
|
|
|
function check_download_package(package) {
|
|
var parameters = {};
|
|
parameters['page'] = "<?php echo $extension_php_file;?>";
|
|
parameters['check_download_package'] = 1;
|
|
parameters['package'] = package;
|
|
|
|
$.ajax({
|
|
type: 'POST',
|
|
url: 'ajax.php',
|
|
data: parameters,
|
|
dataType: "json",
|
|
success: function(data) {
|
|
if (disabled_download_package)
|
|
return;
|
|
|
|
if (data['correct'] == 1) {
|
|
if (data['mode'] == 'wget') {
|
|
$("#info_text").show();
|
|
$("#info_text").html(data['info_download']);
|
|
$("#progress_bar_img img").hide();
|
|
}
|
|
else {
|
|
$("#info_text").show();
|
|
$("#info_text").html(data['info_download']);
|
|
|
|
$("#progress_bar_img img").attr('src', data['progres_bar_src']);
|
|
$("#progress_bar_img img").attr('alt', data['progres_bar_alt']);
|
|
$("#progress_bar_img img").attr('title', data['progres_bar_title']);
|
|
|
|
if (data['percent'] < 100) {
|
|
check_download_package(package);
|
|
}
|
|
else {
|
|
install_package(package, data['filename']);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
$("#title_downloading_update_pandora").hide();
|
|
$("#title_error_update_pandora").show();
|
|
$("#progress_bar_img").hide();
|
|
|
|
$("#info_text").html('');
|
|
|
|
$("#button_close_download_disabled").hide();
|
|
$("#button_close_download").show();
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
function install_package(package, filename) {
|
|
var parameters = {};
|
|
parameters['page'] = "<?php echo $extension_php_file;?>";
|
|
parameters['install_package'] = 1;
|
|
parameters['package'] = package;
|
|
parameters['filename'] = filename;
|
|
|
|
$.ajax({
|
|
type: 'POST',
|
|
url: 'ajax.php',
|
|
data: parameters,
|
|
dataType: "json",
|
|
success: function(data) {
|
|
}
|
|
});
|
|
|
|
$("#title_downloading_update_pandora").hide();
|
|
$("#title_downloaded_update_pandora").show();
|
|
$("#title_installing_update_pandora").show();
|
|
|
|
check_install_package(package, filename);
|
|
}
|
|
|
|
function check_install_package(package, filename) {
|
|
var parameters = {};
|
|
parameters['page'] = "<?php echo $extension_php_file;?>";
|
|
parameters['check_install_package'] = 1;
|
|
parameters['package'] = package;
|
|
parameters['filename'] = filename;
|
|
|
|
$.ajax({
|
|
type: 'POST',
|
|
url: 'ajax.php',
|
|
data: parameters,
|
|
dataType: "json",
|
|
success: function(data) {
|
|
if (data['correct'] == 1) {
|
|
$("#info_text").show();
|
|
$("#info_text").html(data['info']);
|
|
$("#list_files_install").scrollTop(
|
|
$("#list_files_install").attr("scrollHeight"));
|
|
|
|
$("#progress_bar_img img").attr('src', data['src']);
|
|
$("#progress_bar_img img").attr('alt', data['alt']);
|
|
$("#progress_bar_img img").attr('title', data['title']);
|
|
|
|
if (data['percent'] < 100) {
|
|
check_install_package(package, filename);
|
|
}
|
|
else {
|
|
$("#title_installing_update_pandora").hide();
|
|
$("#title_installed_update_pandora").show();
|
|
$("#button_close_download_disabled").hide();
|
|
$("#button_close_download").show();
|
|
}
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
function ajax_get_online_package_list_admin() {
|
|
var buttonUpdateTemplate = '<?php
|
|
html_print_button(__('Update'), 'update', false,
|
|
'ajax_start_download_package(\\\'pandoraFMS\\\');', 'class="sub upd"');
|
|
?>';
|
|
|
|
var parameters = {};
|
|
parameters['page'] = "<?php echo $extension_php_file;?>";
|
|
parameters['get_packages_online'] = 1;
|
|
parameters['last'] = last;
|
|
|
|
$.ajax({
|
|
type: 'POST',
|
|
url: 'ajax.php',
|
|
data: parameters,
|
|
dataType: "json",
|
|
success: function(data) {
|
|
if (data['correct'] == 1) {
|
|
buttonUpdate = buttonUpdateTemplate.replace('pandoraFMS', data['package']);
|
|
|
|
$("tbody", "#online_packages").append(
|
|
'<tr class="package_' + data['package'] + '">' +
|
|
'<td style=" text-align:left; width:50%;" valign="top" class="name_package">' +
|
|
'<?php echo '<b>' . __('There is a new version:') . '</b><br><br> '; ?>' +
|
|
data['package'] +
|
|
'</td>' +
|
|
'<td style=" text-align:left; width:30%;" valign="bottom" class="timestamp_package">' +
|
|
data['timestamp'] +
|
|
'</td>' +
|
|
'<td style=" text-align:center; width:50px;" valign="bottom">' +
|
|
buttonUpdate +
|
|
'</td>' +
|
|
'</tr>');
|
|
|
|
last = data['last'];
|
|
|
|
if (data['end'] == 1) {
|
|
$(".spinner_row", "#online_packages").remove();
|
|
}
|
|
else {
|
|
ajax_get_online_package_list_admin();
|
|
}
|
|
}
|
|
else {
|
|
$(".spinner_row", "#online_packages").remove();
|
|
row_html = '<tr class="package_' + data['package'] + '">' +
|
|
'<td style=" text-align:left; width:80%;" class="name_package">' +
|
|
data['package'] +
|
|
'</td>' +
|
|
'<td style=" text-align:center; width:50px;"></td>' +
|
|
'</tr>';
|
|
$("tbody", "#online_packages").append(row_html); return;
|
|
$("tbody", "#online_packages").append(
|
|
);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
</script>
|
|
<?php
|
|
}
|
|
|
|
function install_offline_enterprise_package(&$settings, $user_key) {
|
|
global $config;
|
|
|
|
if (isset($_FILES["fileloaded"]["error"])
|
|
&& !$_FILES["fileloaded"]["error"]) {
|
|
$extension = substr($_FILES["fileloaded"]["name"],
|
|
strlen($_FILES["fileloaded"]["name"])-4, 4);
|
|
|
|
switch ($extension) {
|
|
case '.oum':
|
|
case '.zip':
|
|
$tempDir = sys_get_temp_dir();
|
|
if ($extension == '.oum') {
|
|
$tempDir .= "/tmp_oum/";
|
|
}
|
|
else {
|
|
$tempDir .= "/tmp_zip";
|
|
}
|
|
delete_dir($tempDir);
|
|
|
|
|
|
$zip = new ZipArchive;
|
|
if ($zip->open($_FILES["fileloaded"]['tmp_name']) === TRUE) {
|
|
$zip->extractTo($tempDir);
|
|
$zip->close();
|
|
}
|
|
else {
|
|
$error = ui_print_error_message(__('Update cannot be opened'));
|
|
}
|
|
|
|
|
|
if ($extension == '.oum') {
|
|
////////////////////////////////////////////////////
|
|
$package = um_package_info_from_paths ($tempDir);
|
|
if ($package === false) {
|
|
ui_print_error_message(
|
|
__('Error, the file package is empty or corrupted.'));
|
|
}
|
|
else {
|
|
$settings = um_db_load_settings ();
|
|
|
|
if ($settings->current_update >= $package->id) {
|
|
ui_print_error_message(
|
|
__('Your system version is higher or equal than the loaded package'));
|
|
}
|
|
else {
|
|
$binary_paths = um_client_get_files ($tempDir . "binary/");
|
|
|
|
foreach ($binary_paths as $key => $paths) {
|
|
foreach($paths as $index => $path) {
|
|
$tempDir_scaped = preg_replace('/\//',
|
|
'\/', $tempDir . "binary");
|
|
$binary_paths[$key][$index] = preg_replace(
|
|
'/^' . $tempDir_scaped . '/', ' ', $path);
|
|
}
|
|
}
|
|
|
|
$code_paths = um_client_get_files ($tempDir . "code/");
|
|
|
|
foreach ($code_paths as $key => $paths) {
|
|
foreach($paths as $index => $path) {
|
|
$tempDir_scaped = preg_replace('/\//', '\/', $tempDir . "code");
|
|
$code_paths[$key][$index] = preg_replace(
|
|
'/^' . $tempDir_scaped . '/', ' ', $path);
|
|
}
|
|
}
|
|
|
|
$sql_paths = um_client_get_files ($tempDir);
|
|
foreach ($sql_paths as $key => $paths) {
|
|
foreach ($paths as $index => $path) {
|
|
if ($path != $tempDir || ($key == 'info_package' && $path == $tempDir)) {
|
|
unset($sql_paths[$key]);
|
|
}
|
|
}
|
|
}
|
|
|
|
$updates_binary = array();
|
|
$updates_code = array();
|
|
$updates_sql = array();
|
|
|
|
if (!empty($binary_paths)) {
|
|
$updates_binary = um_client_update_from_paths(
|
|
$binary_paths, $tempDir, $package->id, 'binary');
|
|
}
|
|
if (!empty($code_paths)) {
|
|
$updates_code = um_client_update_from_paths(
|
|
$code_paths, $tempDir, $package->id, 'code');
|
|
}
|
|
if (!empty($sql_paths)) {
|
|
$updates_sql = um_client_update_from_paths(
|
|
$sql_paths, $tempDir, $package->id, 'sql');
|
|
}
|
|
|
|
um_delete_directory($tempDir);
|
|
|
|
$updates= array_merge((array) $updates_binary, (array) $updates_code, (array) $updates_sql);
|
|
|
|
$package->updates = $updates;
|
|
|
|
$settings = um_db_load_settings ();
|
|
|
|
if (um_client_upgrade_to_package($package, $settings, true)) {
|
|
ui_print_success_message(
|
|
__('Successfully upgraded'));
|
|
|
|
//Refresh the settings object.
|
|
$settings = um_db_load_settings ();
|
|
}
|
|
else {
|
|
ui_print_error_message(__('Cannot be upgraded'));
|
|
}
|
|
}
|
|
}
|
|
////////////////////////////////////////////////////
|
|
}
|
|
else {
|
|
$correct = copy_dir($tempDir, $config['homedir']);
|
|
|
|
if ($correct) {
|
|
ui_print_success_message(
|
|
__('Successfully upgraded'));
|
|
}
|
|
else {
|
|
ui_print_error_message(__('Cannot be upgraded'));
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
ui_print_error_message(__('Incorrect file extension'));
|
|
break;
|
|
}
|
|
}
|
|
else {
|
|
//Check if the file is biggest than the limit in PHP
|
|
if ($_FILES["fileloaded"]["error"] === 1) {
|
|
$upload_max_filesize = ini_get('upload_max_filesize');
|
|
|
|
ui_print_error_message(
|
|
sprintf(
|
|
__('File is more biggest than the PHP limit (%s). Please change it in PHP configuration.'),
|
|
$upload_max_filesize));
|
|
}
|
|
else {
|
|
ui_print_error_message(__('File cannot be uploaded'));
|
|
}
|
|
}
|
|
}
|
|
?>
|