diff --git a/html/inc/host.inc b/html/inc/host.inc
index af6937d99f..9d7b2060c1 100644
--- a/html/inc/host.inc
+++ b/html/inc/host.inc
@@ -152,29 +152,6 @@ function show_host($host, $private, $ipprivate) {
}
-// The following is used to show a user's hosts
-//
-function user_host_table_start($private) {
- start_table();
- echo "
";
- echo "Computer ID Click for more info | \n";
- if ($private) {
- echo "Name | \n
- ";
- } else {
- echo "Rank | ";
- }
- echo "
- Recent average credit |
- Total credit |
- CPU type |
- Operating system |
- ";
- $config = get_config();
- if (parse_bool($config, "show_results")) echo "Results | ";
- echo "Last contact |
";
-}
-
// the following is used for list of top hosts
//
function top_host_table_start($sort_by) {
diff --git a/html/inc/util.inc b/html/inc/util.inc
index b5209597e0..b4e8a7f5d5 100644
--- a/html/inc/util.inc
+++ b/html/inc/util.inc
@@ -536,4 +536,40 @@ function is_ascii($str) {
}
return true;
}
+
+// This function takes as input a GET variable name X and value Y.
+// It returns the corresponding text GET variable string, appended with
+// any existing GET variable names and values, with &X=Y.
+//
+// This is useful for constructing urls for sorting a table by different
+// columns.
+//
+function make_GET_list($variable_name, $variable_value) {
+ $retval="";
+ $sepchar='?';
+ $modified=false;
+ foreach ($_GET as $key => $value) {
+ $retval .= "$sepchar"."$key=";
+ $sepchar='&';
+ if ($key==$variable_name) {
+ $modified=true;
+ if ($value!=$variable_value) {
+ $retval .= "$variable_value";
+ } else {
+ $retval .= "$variable_value"."_reversed";
+ }
+ }
+ else {
+ $retval .= "$value";
+ }
+ }
+ if (!$modified) $retval .= "$sepchar$variable_name=$variable_value";
+ return $retval;
+}
+
+function link_with_GET_variables($text, $baseurl, $variable_name, $variable_value) {
+ $list=make_GET_list($variable_name, $variable_value);
+ return "$text";
+}
+
?>
diff --git a/html/user/hosts_user.php b/html/user/hosts_user.php
index 15ff32da11..d411dd0f3c 100644
--- a/html/user/hosts_user.php
+++ b/html/user/hosts_user.php
@@ -7,6 +7,38 @@ require_once("../inc/util.inc");
require_once("../inc/host.inc");
require_once("../inc/cache.inc");
+function more_or_less($show_all) {
+ if ($show_all) {
+ echo "Show: All hosts | ".link_with_GET_variables("Only hosts active in past 30 days
", "hosts_user.php", 'show_all', '0');
+ } else {
+ echo "
Show: ".link_with_GET_variables("All hosts", "hosts_user.php", 'show_all', '1')." | Only hosts active in past 30 days
";;
+ }
+}
+
+// The following is used to show a user's hosts
+//
+function user_host_table_start($private) {
+ start_table();
+ echo "
";
+ echo "".link_with_GET_variables("Computer ID", "hosts_user.php", 'sort', 'id')." Click for more info | \n";
+ if ($private) {
+ echo "".link_with_GET_variables("Name", "hosts_user.php", 'sort', 'name')." | \n
+ ";
+ } else {
+ echo "Rank | ";
+ }
+ echo "
+ ".link_with_GET_variables("Recent average credit", "hosts_user.php", 'sort', 'expavg_credit')." |
+ ".link_with_GET_variables("Total credit", "hosts_user.php", 'sort', 'total_credit')." |
+ ".link_with_GET_variables("CPU type", "hosts_user.php", 'sort', 'cpu')." |
+ ".link_with_GET_variables("Operating system", "hosts_user.php", 'sort', 'os')." |
+ ";
+ $config = get_config();
+ if (parse_bool($config, "show_results")) echo "Results | ";
+ echo "".link_with_GET_variables("Last contact", "hosts_user.php", 'sort', 'rpc_time')." | ";
+}
+
+
db_init();
$userid = get_int("userid", true);
$show_all = get_int("show_all", true);
@@ -21,11 +53,18 @@ if ($userid) {
if (!$user) {
error_page("No such user");
}
- $cache_args = "userid=$userid&show_all=$show_all";
$caching=true;
+ $list=make_GET_list("", "");
+ if (!strncmp($list, "?", 1)) {
+ $cache_args=substr($list, 1);
+ } else {
+ // should never happen
+ $cache_args="userid=$userid&show_all=$show_all";
+ }
start_cache(USER_PAGE_TTL, $cache_args);
if ($user->show_hosts) {
page_head("Computers belonging to $user->name");
+ more_or_less($show_all);
user_host_table_start(false);
} else {
page_head("Computers hidden");
@@ -40,36 +79,49 @@ if ($userid) {
$caching=false;
$userid = $user->id;
page_head("Your computers");
+ more_or_less($show_all);
user_host_table_start(true);
$private = true;
}
-$i = 1;
$sort_clause = "rpc_time desc";
$sort = get_str("sort", true);
if ($sort == "total_credit") $sort_clause = "total_credit desc";
+if ($sort == "total_credit_reversed") $sort_clause = "total_credit";
if ($sort == "expavg_credit") $sort_clause = "expavg_credit desc";
+if ($sort == "expavg_credit_reversed") $sort_clause = "expavg_credit";
+if ($sort == "name") $sort_clause = "domain_name";
+if ($sort == "name_reversed") $sort_clause = "domain_name desc";
+if ($sort == "id") $sort_clause = "id";
+if ($sort == "id_reversed") $sort_clause = "id desc";
+if ($sort == "expavg_credit") $sort_clause = "expavg_credit desc";
+if ($sort == "expavg_credit_reversed") $sort_clause = "expavg_credit ";
+if ($sort == "cpu") $sort_clause = "p_model";
+if ($sort == "cpu_reversed") $sort_clause = "p_model desc";
+if ($sort == "os") $sort_clause = "os_name, os_version";
+if ($sort == "os_reversed") $sort_clause = "os_name desc, os_version";
+if ($sort == "rpc_time") $sort_clause = "rpc_time desc";
+if ($sort == "rpc_time_reversed") $sort_clause = "rpc_time";
$now = time();
-$more_hosts = false;
-
+$old_hosts=0;
+$i = 1;
$result = mysql_query("select * from host where userid=$userid order by $sort_clause");
while ($host = mysql_fetch_object($result)) {
- if (!$show_all && (($now - $host->rpc_time) > 30*86400)) {
- $more_hosts = true;
- continue;
+ $is_old=false;
+ if (($now - $host->rpc_time) > 30*86400) {
+ $is_old=true;
+ $old_hosts++;
}
+ if (!$show_all && $is_old) continue;
show_host_row($host, $i, $private, false);
$i++;
}
mysql_free_result($result);
echo "\n";
-if ($more_hosts) {
- echo "
- Hosts older than 30 days not shown.
- Show all hosts.
- ";
-}
+
+if ($old_hosts>0) more_or_less($show_all);
+
if ($caching) {
page_tail(true);
end_cache(USER_PAGE_TTL, $cache_args);