From 46ee66c2c35784e9e8d1d166ed2eb70dc176dc11 Mon Sep 17 00:00:00 2001
From: Esteban Sanchez <esteban.sanchez@gmail.com>
Date: Fri, 29 Aug 2008 07:54:17 +0000
Subject: [PATCH] 2008-08-28  Esteban Sanchez  <estebans@artica.es>

        * extensions/update_manager.php: Added function to update Update
        Manager settings.

        * extensions/update_manager/load_updatemanager.php: Added user key
        generation function. Update manager free extension do not use a keygen
        binary file.

        * extensions/update_manager/main.php: Changes to key generation,
        because free extension do not use keygen.

        * extensions/update_manager/settings.php: Removed configuration of
        keygen and upgrading directory.

        * extensions/update_manager/lib/libupdate_manager.php,
        extensions/update_manager/lib/libupdate_manager_utils.php: Updated to
        latest version of Update Manager.

        * extensions/update_manager/lib/libupdate_manager_client.php: Removed
        debug flag and errors to be less intrusive for the user. Updated to
        latest version of Update Manager.

        * extensions/update_manager/sql/update_manager.sql: Changed default
        settings.



git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1047 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
---
 pandora_console/ChangeLog                     | 26 +++++++++++
 pandora_console/extensions/update_manager.php | 18 ++++++--
 .../update_manager/lib/libupdate_manager.php  | 34 ++++++++++----
 .../lib/libupdate_manager_client.php          | 28 ++++++------
 .../lib/libupdate_manager_utils.php           |  4 +-
 .../update_manager/load_updatemanager.php     |  9 ++++
 .../extensions/update_manager/main.php        | 45 ++-----------------
 .../extensions/update_manager/settings.php    |  6 ---
 .../update_manager/sql/update_manager.sql     |  2 +-
 9 files changed, 94 insertions(+), 78 deletions(-)

diff --git a/pandora_console/ChangeLog b/pandora_console/ChangeLog
index b7f87cd795..752fe155dd 100644
--- a/pandora_console/ChangeLog
+++ b/pandora_console/ChangeLog
@@ -1,3 +1,29 @@
+2008-08-28  Esteban Sanchez  <estebans@artica.es>
+
+	* extensions/update_manager.php: Added function to update Update
+	Manager settings.
+
+	* extensions/update_manager/load_updatemanager.php: Added user key
+	generation function. Update manager free extension do not use a keygen
+	binary file.
+	
+	* extensions/update_manager/main.php: Changes to key generation,
+	because free extension do not use keygen.
+
+	* extensions/update_manager/settings.php: Removed configuration of
+	keygen and upgrading directory.
+
+	* extensions/update_manager/lib/libupdate_manager.php,
+	extensions/update_manager/lib/libupdate_manager_utils.php: Updated to
+	latest version of Update Manager.
+
+	* extensions/update_manager/lib/libupdate_manager_client.php: Removed
+	debug flag and errors to be less intrusive for the user. Updated to
+	latest version of Update Manager.
+
+	* extensions/update_manager/sql/update_manager.sql: Changed default
+	settings.
+
 2008-08-28  Evi Vanoost <vanooste@rcbi.rochester.edu>
 
 	* extensions/update_manager.php: Check for an empty variable so it 
diff --git a/pandora_console/extensions/update_manager.php b/pandora_console/extensions/update_manager.php
index 33f58b8dd5..5eb72deaa4 100644
--- a/pandora_console/extensions/update_manager.php
+++ b/pandora_console/extensions/update_manager.php
@@ -20,6 +20,18 @@ function load_update_manager_lib () {
 	require_once ('update_manager/load_updatemanager.php');
 }
 
+function update_settings_database_connection () {
+	global $config;
+	global $db;
+	
+	$db =& um_db_connect ('mysql', $config['dbhost'], $config['dbuser'],
+			$config['dbpass'], $config['dbname']);
+	um_db_update_setting ('dbname', $config['dbname']);
+	um_db_update_setting ('dbuser', $config['dbuser']);
+	um_db_update_setting ('dbpass', $config['dbpass']);
+	um_db_update_setting ('dbhost', $config['dbhost']);
+}
+
 function pandora_update_manager_install () {
 	global $config;
 	global $db;
@@ -44,10 +56,7 @@ function pandora_update_manager_install () {
 			$config['dbpass'], $config['dbname']);
 	um_db_update_setting ('updating_code_path',
 			dirname ($_SERVER['SCRIPT_FILENAME']));
-	um_db_update_setting ('dbname', $config['dbname']);
-	um_db_update_setting ('dbuser', $config['dbuser']);
-	um_db_update_setting ('dbpass', $config['dbpass']);
-	um_db_update_setting ('dbhost', $config['dbhost']);
+	update_settings_database_connection ();
 }
 
 function pandora_update_manager_uninstall () {
@@ -63,6 +72,7 @@ function pandora_update_manager_main () {
 	global $db;
 	
 	load_update_manager_lib ();
+	update_settings_database_connection ();
 	
 	require_once ('update_manager/main.php');
 }
diff --git a/pandora_console/extensions/update_manager/lib/libupdate_manager.php b/pandora_console/extensions/update_manager/lib/libupdate_manager.php
index b120f5bb99..dd57d15757 100644
--- a/pandora_console/extensions/update_manager/lib/libupdate_manager.php
+++ b/pandora_console/extensions/update_manager/lib/libupdate_manager.php
@@ -197,11 +197,11 @@ function um_db_get_package_updates ($id_package) {
 	return $updates;
 }
 
-function um_db_create_package_log ($id_package, $id_auth, $ip_address = '') {
+function um_db_create_package_log ($id_package, $client_key, $user_package, $result = 'query', $user_subscription = '') {
 	global $db;
 	
-	$values = array ($id_package, $id_auth, $ip_address);
-	$sql =& $db->prepare ('INSERT INTO tupdate_package_log (id_update_package, id_auth, ip_address) VALUES (?, ?, ?)');
+	$values = array ($id_package, $client_key, $_SERVER['REMOTE_ADDR'], $user_package, $user_subscription, $result);
+	$sql =& $db->prepare ('INSERT INTO tupdate_package_log (id_update_package, client_key, ip_address, user_package, user_subscription, result) VALUES (?, ?, ?, ?, ?, ?)');
 	$result =& $db->execute ($sql, $values);
 	if (PEAR::isError ($result)) {
 		return false;
@@ -209,6 +209,22 @@ function um_db_create_package_log ($id_package, $id_auth, $ip_address = '') {
 	return true;
 }
 
+function um_db_get_all_package_logs () {
+	global $db;
+	
+	$result =& $db->query ('SELECT * FROM tupdate_package_log ORDER BY `timestamp` DESC');
+	if (PEAR::isError ($result)) {
+		echo '<strong>Error</strong>: '.$result->getMessage ().'<br />';
+		return array ();
+	}
+	$logs = array ();
+	while ($result->fetchInto ($log)) {
+		$logs[$log->id] = $log;
+	}
+	
+	return $logs;
+}
+
 function um_db_create_component ($type, $name, $path = '') {
 	global $db;
 	
@@ -502,10 +518,10 @@ function um_component_db_connect () {
 function um_get_package_status () {
 	$status = array ();
 	
-	$status['development'] = 'Development';
-	$status['testing'] = 'Testing';
-	$status['public'] = 'Public';
-	$status['disabled'] = 'Disabled';
+	$status['development'] = __('Development');
+	$status['testing'] = __('Testing');
+	$status['public'] = __('Public');
+	$status['disabled'] = __('Disabled');
 	
 	return $status;
 }
@@ -513,8 +529,8 @@ function um_get_package_status () {
 function um_get_component_types () {
 	$types = array ();
 	
-	$types['database'] = 'Database';
-	$types['directory'] = 'Code / binary directory';
+	$types['database'] = __('Database');
+	$types['directory'] = __('Code / binary directory');
 	
 	return $types;
 }
diff --git a/pandora_console/extensions/update_manager/lib/libupdate_manager_client.php b/pandora_console/extensions/update_manager/lib/libupdate_manager_client.php
index 6213f4ec83..eee082f0de 100644
--- a/pandora_console/extensions/update_manager/lib/libupdate_manager_client.php
+++ b/pandora_console/extensions/update_manager/lib/libupdate_manager_client.php
@@ -6,8 +6,6 @@ if ((include_once ('XML/RPC.php')) != 1)
 error_reporting ($prev_level);
 unset ($prev_level);
 
-define ('XMLRPC_DEBUG', 0);
-
 function um_xml_rpc_client_call ($server_host, $server_path, $server_port, $function, $parameters) {
 	$msg = new XML_RPC_Message ($function, $parameters);
 	$client = new XML_RPC_Client ($server_path, $server_host, $server_port);
@@ -15,12 +13,7 @@ function um_xml_rpc_client_call ($server_host, $server_path, $server_port, $func
 		$client->setDebug (XMLRPC_DEBUG);
 	$result = $client->send ($msg);
 	
-	if (! $result) {
-		trigger_error ('<strong>Open Update Manager</strong> Server comunication error. '.$client->errstr);
-		return false;
-	}
-	if ($result->faultCode ()) {
-		trigger_error ('<strong>Open Update Manager</strong> XML-RPC error. '.$result->faultString ());
+	if (! $result || $result->faultCode ()) {
 		return false;
 	}
 	
@@ -153,14 +146,15 @@ function um_client_db_save_update ($update) {
 }
 
 function um_client_apply_update_file ($update, $destiny_filename, $force = false) {
-	if (! is_writable ($destiny_filename)) {
-		return false;
-	}
-
+	@mkdir (dirname ($destiny_filename), 0777, true);
+	
 	if (file_exists ($destiny_filename)) {
+		if (! is_writable ($destiny_filename)) {
+			return false;
+		}
 		$checksum = md5_file ($destiny_filename);
-		if (! $force &&$update->previous_checksum != '') {
-			if ($update->previous_checksum  != $checksum)
+		if (! $force && $update->previous_checksum != '') {
+			if ($update->previous_checksum != $checksum)
 				/* Local changes in the file. Don't update */
 				return false;
 		}
@@ -251,7 +245,11 @@ function um_client_print_update ($update, $settings) {
 	echo '<ul>';
 	echo '<li><em>Type</em>: '.$update->type.'</li>';
 	if ($update->type == 'code' || $update->type == 'binary') {
-		$realpath = realpath ($settings->updating_code_path.'/'.$update->filename);
+		if ($update->type == 'code') {
+			$realpath = realpath ($settings->updating_code_path.'/'.$update->filename);
+		} else {
+			$realpath = realpath ($settings->updating_binary_path.'/'.$update->filename);
+		}
 		echo '<li><em>Filename</em>: '.$update->filename.'</li>';
 		echo '<li><em>Realpath</em>: '.$realpath.'</li>';
 		echo '<li><em>Checksum</em>: '.$update->checksum.'</li>';
diff --git a/pandora_console/extensions/update_manager/lib/libupdate_manager_utils.php b/pandora_console/extensions/update_manager/lib/libupdate_manager_utils.php
index bad99b842e..94bc190783 100644
--- a/pandora_console/extensions/update_manager/lib/libupdate_manager_utils.php
+++ b/pandora_console/extensions/update_manager/lib/libupdate_manager_utils.php
@@ -6,9 +6,9 @@ function add_prefix (&$string, $key, $prefix) {
 
 function is_binary ($filepath) {
 	$output = array ();
-	exec ('file -b -e soft '.$filepath, $output);
+	exec ('file -b -i '.$filepath.' | cut -f1 -d"/"', $output);
 	if (isset ($output[0]))
-		return $output[0] == 'data';
+		return $output[0] != 'text';
 	return false;
 }
 
diff --git a/pandora_console/extensions/update_manager/load_updatemanager.php b/pandora_console/extensions/update_manager/load_updatemanager.php
index 1d3546be4a..8370d75cd0 100644
--- a/pandora_console/extensions/update_manager/load_updatemanager.php
+++ b/pandora_console/extensions/update_manager/load_updatemanager.php
@@ -13,5 +13,14 @@ if (! extension_loaded ('mysql'))
 
 require_once ('lib/libupdate_manager.php');
 
+function get_user_key () {
+	/* We only want to know this for statistics records.
+	   Feel free to disable if you want. We don't want to hide anything.
+	 */
+	$user_key = get_db_value ('COUNT(`id_agente`)', 'tagente', 'disabled', 0);
+	
+	return $user_key;
+}
+
 flush ();
 ?>
diff --git a/pandora_console/extensions/update_manager/main.php b/pandora_console/extensions/update_manager/main.php
index 61ce0bd461..09a5fdbb57 100644
--- a/pandora_console/extensions/update_manager/main.php
+++ b/pandora_console/extensions/update_manager/main.php
@@ -34,29 +34,7 @@ $settings = um_db_load_settings ();
 
 echo '<h3>'.__('Update manager').'</h3>';
 
-if (! file_exists ($settings->keygen_path)) {
-	echo '<h3 class="error">'.__('Keygen file does not exists')."</h3>";
-	return;
-}
-
-if (! is_executable ($settings->keygen_path)) {
-	echo '<h3 class="error">'.__('Keygen is not executable')."</h3>";
-	return;
-}
-
-$user_key = exec ($settings->keygen_path);
-
-$update_package = (bool) get_parameter_post ('update_package');
-
-if ($update_package) {
-	echo 'Updating...';
-	flush ();
-	$force = (bool) get_parameter_post ('force_update');
-	um_client_upgrade_to_latest ($user_key, $force);
-	/* TODO: Meter una noticia en tnews*/
-}
-
-$settings = um_db_load_settings ();
+$user_key = get_user_key ();
 $package = um_client_check_latest_update ($settings, $user_key);
 
 if (is_int ($package) && $package == 1) {
@@ -69,27 +47,12 @@ if (is_int ($package) && $package == 1) {
 	echo '<h5 class="suc">'.__('There\'s a new update for Pandora')."</h5>";
 	
 	$table->width = '50%';
+	$table->head = array ();
 	$table->data = array ();
-	
-	$table->data[0][0] = '<strong>'.__('Id').'</strong>';
-	$table->data[0][1] = $package->id;
-	
-	$table->data[1][0] = '<strong>'.__('Timestamp').'</strong>';
-	$table->data[1][1] = $package->timestamp;
-	
-	$table->data[2][0] = '<strong>'.__('Description').'</strong>';
-	$table->data[2][1] = html_entity_decode ($package->description);
+	$table->head[0] = '<strong>'.__('Description').'</strong>';
+	$table->data[0][0] = html_entity_decode ($package->description);
 	
 	print_table ($table);
-	echo '<div class="action-buttons" style="width: '.$table->width.'">';
-	echo '<form method="post">';
-	echo __('Overwrite local changes');
-	print_checkbox ('force_update', '1', false);
-	echo '<p />';
-	print_input_hidden ('update_package', 1);
-	print_submit_button (__('Update'), 'update_button', false, 'class="sub upd"');
-	echo '</form>';
-	echo '</div>';
 }
 
 echo '<h4>'.__('Your system version number is').': '.$settings->current_update.'</h4>';
diff --git a/pandora_console/extensions/update_manager/settings.php b/pandora_console/extensions/update_manager/settings.php
index 3fa27e4c58..086d6bd6f8 100644
--- a/pandora_console/extensions/update_manager/settings.php
+++ b/pandora_console/extensions/update_manager/settings.php
@@ -58,12 +58,6 @@ $table->data[2][1] = print_input_text ('keys[update_server_path]', $settings->up
 $table->data[3][0] = '<strong>'.__('Update server port').'</strong>';
 $table->data[3][1] = print_input_text ('keys[update_server_port]', $settings->update_server_port, '', 5, 5, true);
 
-$table->data[4][0] = '<strong>'.__('Binary input path').'</strong>';
-$table->data[4][1] = print_input_text ('keys[updating_binary_path]', $settings->updating_binary_path, '', 40, 255, true);
-
-$table->data[5][0] = '<strong>'.__('Keygen path').'</strong>';
-$table->data[5][1] = print_input_text ('keys[keygen_path]', $settings->keygen_path, '', 40, 255, true);
-
 print_table ($table);
 echo '<div class="action-buttons" style="width: '.$table->width.'">';
 print_input_hidden ('update_settings', 1);
diff --git a/pandora_console/extensions/update_manager/sql/update_manager.sql b/pandora_console/extensions/update_manager/sql/update_manager.sql
index 57eb6f1588..dbbe7bf36c 100644
--- a/pandora_console/extensions/update_manager/sql/update_manager.sql
+++ b/pandora_console/extensions/update_manager/sql/update_manager.sql
@@ -1,5 +1,5 @@
 CREATE TABLE `tupdate_settings` ( `key` varchar(255) default '', `value` varchar(255) default '', PRIMARY KEY (`key`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-INSERT INTO `tupdate_settings` VALUES  ('current_update', '0'), ('customer_key', 'Insert your customer key here'), ('keygen_path', ''), ('update_server_host', ''), ('update_server_port', '80'), ('update_server_path', ''), ('updating_binary_path', 'Path where the updated binary files will be stored'), ('updating_code_path', 'Path where the updated code is stored'), ('dbname', ''), ('dbhost', ''), ('dbpass', ''), ('dbuser', '');
+INSERT INTO `tupdate_settings` VALUES  ('current_update', '0'), ('customer_key', 'PANDORA-FREE'), ('keygen_path', ''), ('update_server_host', 'artica.homelinux.com'), ('update_server_port', '80'), ('update_server_path', 'pandoraupdate/server.php'), ('updating_binary_path', 'Path where the updated binary files will be stored'), ('updating_code_path', 'Path where the updated code is stored'), ('dbname', ''), ('dbhost', ''), ('dbpass', ''), ('dbuser', '');
 CREATE TABLE `tupdate_package` (  id int(11) unsigned NOT NULL auto_increment,  timestamp datetime NOT NULL,  description mediumtext NOT NULL default '',  PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 CREATE TABLE `tupdate` (  id int(11) unsigned NOT NULL auto_increment,  type enum('code', 'db_data', 'db_schema', 'binary'),  id_update_package int(11) unsigned NOT NULL default 0,  filename  varchar(250) default '',  checksum  varchar(250) default '',  previous_checksum  varchar(250) default '',  svn_version int(4) unsigned NOT NULL default 0,  data LONGTEXT default '',  data_rollback LONGTEXT default '',  description TEXT default '',  db_table_name varchar(140) default '',  db_field_name varchar(140) default '',  db_field_value varchar(1024) default '',  PRIMARY KEY  (`id`),  FOREIGN KEY (`id_update_package`) REFERENCES tupdate_package(`id`)   ON UPDATE CASCADE ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 CREATE TABLE `tupdate_journal` (  id int(11) unsigned NOT NULL auto_increment,  id_update int(11) unsigned NOT NULL default 0,  PRIMARY KEY  (`id`),  FOREIGN KEY (`id_update`) REFERENCES tupdate(`id`)   ON UPDATE CASCADE ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;