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);