post-event bugfixing - list of previous keylists
authorTroy Sankey <sankeytms@gmail.com>
Sun, 9 Feb 2014 10:31:43 +0000 (02:31 -0800)
committerTroy Sankey <sankeytms@gmail.com>
Sun, 9 Feb 2014 10:31:43 +0000 (02:31 -0800)
index.pl

index 631db7a..cf3cb1d 100755 (executable)
--- a/index.pl
+++ b/index.pl
@@ -222,17 +222,17 @@ sub get_previous_parties {
 }
 
 ###############################################################################
-# Function: get_party
+# Function: get_party_from_datestr
 # Parameters: date string in ISO format (e.g. '2014-02-08')
 # Return: tuple contianing the party index and datetime.
 # Description:
 #   Get the index and date of any party.
 ###############################################################################
-sub get_party {
-  my $date = $_[0];
+sub get_party_from_datestr {
+  my $datestr = $_[0];
   my $sth = $dbh->prepare("SELECT idx,EXTRACT(EPOCH FROM datetime) FROM party WHERE date_trunc('day', datetime) = ?")
     or die "Couldn't prepare statement: " . $dbh->errstr;
-  $sth->execute("$date 00:00:00")
+  $sth->execute($datestr)
     or die "Couldn't execute statement: " . $dbh->errstr;
   my @row = $sth->fetchrow_array(); # should just be one row
   if (!@row) {
@@ -261,9 +261,9 @@ sub render_keylist {
   my $party_idx = $_[0];
 
   my $keylist_string = "";
-  my $sth = $dbh->prepare("SELECT EXTRACT(EPOCH FROM datetime) FROM party WHERE idx = $party_idx")
+  my $sth = $dbh->prepare("SELECT EXTRACT(EPOCH FROM datetime) FROM party WHERE idx = ?")
     or die "Couldn't prepare statement: " . $dbh->errstr;
-  $sth->execute()
+  $sth->execute($party_idx)
     or die "Couldn't execute statement: " . $dbh->errstr;
   my $party_epoch = ($sth->fetchrow_array())[0];
   return 1 if ( not defined $party_epoch );
@@ -519,22 +519,39 @@ sub print_body_keylists {
     if ($rel_url =~ /^keylist\.txt$/) {
       print get_keylist($next_party_idx);
     } else {
-      my ($party_idx,$party_datetime) = get_party($keylist_date_str);
+      my ($party_idx,$party_datetime) = get_party_from_datestr($keylist_date_str);
       print get_keylist($party_idx);
     }
   } elsif ($rel_url =~ /^keylist(_.*)?\.txt\.sha(1|224|256|384|512)$/) {
     my $keylist_date_str = substr($1, 1);
     my $shanum = $2;
     print $q->header(-type => 'text/plain');
-    print get_sha(get_keylist($next_party_idx), $shanum);
-    print "  keylist.txt";
+    if ($rel_url =~ /^keylist\.txt\./) {
+      print get_sha(get_keylist($next_party_idx), $shanum);
+      print "  keylist.txt";
+    } else {
+      my ($party_idx,$party_datetime) = get_party_from_datestr($keylist_date_str);
+      print get_sha(get_keylist($party_idx), $shanum);
+      print "  keylist_$keylist_date_str.txt";
+    }
   } elsif ($rel_url =~ /^keylist(_.*)?\.pdf$/) {
+    my $keylist_date_str = substr($1, 1);
+    my $party_idx;
+    my $party_datetime;
+    my $filename;
+    if ($rel_url =~ /^keylist\.pdf/) {
+      $party_idx = $next_party_idx;
+      $filename = "keylist.pdf";
+    } else {
+      ($party_idx,$party_datetime) = get_party_from_datestr($keylist_date_str);
+      $filename = "keylist_$keylist_date_str.pdf";
+    }
     binmode STDOUT, ':raw';  # this is binary PDF output, so don't use utf-8
     print $q->header(-expires=>'now',
                      -type=>'application/pdf',
-                     -content_disposition=>"inline; filename=keylist.pdf",
+                     -content_disposition=>"inline; filename=$filename",
                      -charset=>"utf-8");
-    print get_pdf($next_party_idx);
+    print get_pdf($party_idx);
   } elsif ($rel_url =~ /^(....-..-..)$/) {
     print $q->header(-type=>"text/html", -charset=>"utf-8");
     print $q->start_html(-title=>$page_title, -encoding=>"UTF-8");
@@ -554,6 +571,10 @@ sub print_body_keylists {
     }
     if (@previous_parties) {
       print "<p>keylists from previous parties:</p>";
+      my $partydate;
+      foreach $partydate (@previous_parties) {
+        print_keylist_links("keylist_" . $partydate->ymd());
+      }
     }
     print_tail();
     print $q->end_html;