make summaryattrs sortable [zobel]
[mirror/userdir-ldap-cgi.git] / machines.cgi
index 383f7cd..166c2ca 100755 (executable)
@@ -4,6 +4,7 @@
 # (c) 1999 Randolph Chung. Licensed under the GPL. <tausq@debian.org>
 # (c) 2004 Martin Schulze. Licensed under the GPL. <joey@debian.org>
 # (c) 2006 Ryan Murray. Licensed under the GPL. <rmurray@debian.org>
+# (c) 2008 Martin Zobel-Helas. Licensed under the GPL. <zobel@debian.org>
 
 use lib '.';
 use strict vars;
@@ -36,6 +37,7 @@ my (%attrs, @attrorder, %summaryattrs, @summaryorder);
          'sshrsahostkey' => 'SSH host key',
          'sshrsahostfprint' => 'SSH host fingerprint',
          'description' => 'Description',
+         'purpose' => 'purposes of this server',
 #        'createtimestamp' => 'Entry created',
 #        'modifytimestamp' => 'Entry modified'
         );
@@ -44,7 +46,7 @@ my (%attrs, @attrorder, %summaryattrs, @summaryorder);
 @attrorder = qw(hostname admin architecture distribution access
                 sponsor sponsor-admin location machine memory
                disk bandwidth status notes sshrsahostkey sshrsahostfprint
-               description);
+               description purpose);
 
 # ditto for summary
 %summaryattrs = ('hostname' => 'Host name',
@@ -85,6 +87,8 @@ $SIG{__DIE__} = \&DieHandler;
 
 my $query = new CGI;
 my $host = lc($query->param('host'));
+my $sortby = lc($query->param('sortby')) || "host";
+my $sortorder = lc($query->param('sortorder')) || "asc";
 
 &Util::HTMLSendHeader;
 $ldap = Net::LDAP->new($config{ldaphost}) || &Util::HTMLError($!);
@@ -144,6 +148,9 @@ foreach $dn (sort {$entries->{$a}->{host}->[0] cmp $entries->{$b}->{host}->[0]}
         $output{sponsor} .= $sponsor;
       }
     }
+
+       #Reformat purposes to be pleasing for the human eye:
+       $output{purpose} = join(",", @{$data->{purpose}});
     
     $selected = " selected ";    
   }
@@ -176,11 +183,25 @@ if ($output{havehostdata}) {
   $hostdetails = "<h1>Summary</h1>\n";
   $hostdetails .= "<table border=\"1\" width=\"90%\">\n<tr>";
   foreach $key (@summaryorder) {
-    $hostdetails .= "<th>$summaryattrs{$key}</th>";
+    if ($sortby ne $key) {
+      $hostdetails .= "<th><a href=\"machines.cgi?sortby=$key&sortorder=asc\">$summaryattrs{$key}</a></th>";
+    } else {
+      if ($sortorder ne "dsc") {
+        $hostdetails .= "<th><a href=\"machines.cgi?sortby=$key&sortorder=dsc\">$summaryattrs{$key}</a></th>";
+      } else {
+        $hostdetails .= "<th><a href=\"machines.cgi?sortby=$key&sortorder=asc\">$summaryattrs{$key}</a></th>";
+      }
+    }
   }
   $hostdetails .= "</tr>\n";
   
-  foreach $host (sort(keys(%summary))) {
+  my @sorted;
+  if ($sortorder eq "asc") {
+     @sorted = sort {($summary{$a}->{$sortby} cmp $summary{$b}->{$sortby}) || ($summary{$a}->{'host'} cmp $summary{$b}->{'host'})} keys(%summary)
+  } else {
+     @sorted = sort {($summary{$b}->{$sortby} cmp $summary{$a}->{$sortby}) || ($summary{$a}->{'host'} cmp $summary{$b}->{'host'})} keys(%summary)
+  }
+  foreach $host (@sorted) {
     $hostdetails .= "<tr>";
     foreach $key (@summaryorder) {
       $hostdetails .= "<td>$summary{$host}{$key}&nbsp;</td>";