Archive Extension Patch

--- /tmp/archive.pl     2007-07-04 17:25:57.219459076 +0200
+++ archive.pl  2007-07-04 19:14:01.883782862 +0200
@@ -25,21 +25,36 @@
 sub NewArchiveGetHeader {
   my ($id) = @_;
   print OldArchiveGetHeader(@_);
-  my %dates = ();
+  my %years = ();
+  my %months = ();
+  my $year_now = (localtime($Now))[5]+1900;
   for (AllPagesList()) {
-    $dates{$1} = 1 if /^(\d\d\d\d-\d\d)-\d\d/;
+    $months{$1}++  if /^$year_now-(\d\d)-\d\d/;
+    $years{$1}++ if /^(\d\d\d\d)-\d\d-\d\d/;
   }
+
   print $q->div({-class=>'archive'},
                $q->p($q->span(T('Archive:')),
-                     map {
-                       my ($year, $month) = split(/-/, $_);
-                       if (defined(&month_name)) {
-                         ScriptLink('action=collect;match=' . UrlEncode("^$year-$month"),
-                                    month_name($month) . ' ' . $year);
-                       } else {
-                         ScriptLink('action=index;match=' . UrlEncode("^$year-$month"),
-                                    "$year-$month");
-                       }
-                     } sort keys %dates));
+                       $q->ul(
+                               map {
+                                       $year = $_;
+                                       $html = "";
+                                       $html .= $q->li(ScriptLink('action=collect;match=' . UrlEncode("^$year"), $year));
+                                       if ($year == $year_now) {
+                                               $html .= $q->ul(
+                                                       map {
+                                                               $month = $_;
+                                                               if (defined(&month_name)) {
+                                                                       $q->li(ScriptLink('action=collect;match=' . UrlEncode("^$year-$month"),
+                                                                              month_name($month)));
+                                                               } else {
+                                                                       $q->li(ScriptLink('action=index;match=' . UrlEncode("^$year-$month"),
+                                                                              "$month"));
+                                                               }
+
+                                                       } reverse sort keys %months);
+                                       }
+                                       $html;
+                               } reverse sort keys %years)));
   return '';
 }