login/pass: error messages below page title
[minimedit.git] / widget / doclist.php
index 78b8c4941817c74e5a973e95f4be22e5bfdb5f98..e0751b0df77b1c593189c860ba4c824cfca64911 100644 (file)
@@ -1,31 +1,69 @@
 <?php
-$cal = [];
-foreach (glob("$Page$Args/2*") as $url) {
-       $parts = pathinfo($url);
-       @list ($date, $suffix) = explode('.', $parts['filename'], 2);
-       $cal[$date][ $suffix ? '' : @$parts['extension'] ] =
-               preg_replace('/\.html$/', '', $url);
+global $User;
+if (isset($Page->place[0])) {
+       $Page->link .= '/'.$Page->place[0];
 }
 
-print '<ul';
-if (count($cal) > 5) print ' class="cols"';
-print ">\n";
-foreach (array_reverse($cal) as $title => $versions) {
-       print '<li>';
-       if ($url = @$versions['html']) {
-               printf('<a href="/%s">%s</a>', $url, $title);
+$cal = [];
+foreach (glob("{$Page->link}/2*") as $url) {
+       $link = preg_replace('/\.html$/', '', $url);
+       $name = pathinfo($link, PATHINFO_BASENAME);
+       @list ($date, $suffix) = explode('.', $name, 2);
+       $group = substr($date, 0, 4);
+       if (!isset($cal[$group][$date])) {
+               $cal[$group][$date] = [];
+       }
+       if (is_dir($url) ? file_exists("$url/index.html") : filesize($url)) {
+               $cal[$group][$date][$suffix] = $link;
        }
-       elseif (implode('', array_keys($versions))) {
-               list ($format, $url) = each($versions);
-               include_once('format.inc.php');
-               printf('%s (<a href="/%s">%sB %s</a>)',
-                       $title, $url, showsize(filesize($url)), $format
+}
+if (!$cal) {
+       return;
+}
+
+$year = 3600 * 24 * 365;  # seconds per year
+$scale = 7;  # em width per year
+$mindate = max(time(), strtotime($date) + ($year / $scale * 3));  # at least last entry plus 3em for centered text
+$length = ($mindate - strtotime(key(current($cal)))) / $year * $scale;  # earliest entry position
+
+printf('<ul class="timeline" style="background-size:%.1fem">'."\n", $length);
+foreach (array_reverse($cal, TRUE) as $group => $rows) {
+       if (count($rows) > 1) {
+               $time = ($mindate - strtotime("$group-12-31T23:59")) / $year * $scale;
+               printf('<li class="range" style="left:%.1fem; width:%.1fem">',
+                       $time, $time + $scale > $length ? $length - $time + 2 : $scale
                );
+               print "<strong>$group</strong><ul>\n";
        }
        else {
-               print $title;
+               $time = 0;
+       }
+
+       foreach ($rows as $title => $versions) {
+               $subtime = ($mindate - strtotime($title)) / $year * $scale - $time;
+               printf('<li style="left:%.1fem">', $subtime);
+               if ($url = @$versions['']) {
+                       printf('<a href="/%s">%s</a>', $url, $title);
+               }
+               else {
+                       print '<span>';
+                       print $title;
+                       if ($versions and $User->admin("edit {$Page->link}")) {
+                               printf(' (%s)', implode(', ', array_map(
+                                       function ($format, $url) {
+                                               return sprintf('<a href="/%s">%s</a>', $url, $format);
+                                       },
+                                       array_keys($versions), $versions
+                               )));
+                       }
+                       print '</span>';
+               }
+               print "</li>\n";
+       }
+
+       if (count($rows) > 1) {
+               print "</ul></li>\n";
        }
-       print "\n";
 }
 print "</ul>\n\n";