widget: copy doclist and countdown from lijtweg.nl
authorMischa POSLAWSKY <perl@shiar.org>
Sat, 29 Jun 2019 01:05:03 +0000 (03:05 +0200)
committerMischa POSLAWSKY <perl@shiar.org>
Fri, 12 Jul 2019 02:18:16 +0000 (04:18 +0200)
Sufficiently generic to prove useful in other projects.

widget/countdown.php [new file with mode: 0644]
widget/doclist.php [new file with mode: 0644]

diff --git a/widget/countdown.php b/widget/countdown.php
new file mode 100644 (file)
index 0000000..746e4b6
--- /dev/null
@@ -0,0 +1,45 @@
+<?php
+if (empty($Args)) {
+       return;
+}
+@list ($target, $interval) = explode('+', ltrim($Args, '/'));
+$target = new DateTime($target);
+$now = new DateTime('NOW');
+$next = $target->diff($now);  # age
+
+if ($interval) {
+       # recurring
+       $interval = new DateInterval('P'.$interval);
+       for ($attempt = 0; $attempt < 500; $attempt++) {
+               if ($next->invert) {
+                       break;  # past or today
+               }
+               $target->add($interval);
+               $next = $target->diff($now);
+       }
+}
+$next = $target->setTime(0, 0)->diff($now);  # truncate to midnight
+$eta = $next->invert ? $next->days + 1 : -$next->days;
+
+if ($eta == 0) {
+       print 'vandaag';
+}
+elseif ($eta == 1) {
+       print 'morgen';
+}
+elseif ($eta == 2) {
+       print 'overmorgen';
+}
+elseif ($eta == -1) {
+       print 'gisteren';
+}
+elseif ($eta < 0) {
+       printf('%d dagen geleden', -$eta);
+}
+else {
+       printf('over %d dagen', $eta);
+}
+
+if ($interval) {
+       print ', ' . showdate(explode('-', $target->format('Y-m-d')));
+}
diff --git a/widget/doclist.php b/widget/doclist.php
new file mode 100644 (file)
index 0000000..78b8c49
--- /dev/null
@@ -0,0 +1,31 @@
+<?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);
+}
+
+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);
+       }
+       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
+               );
+       }
+       else {
+               print $title;
+       }
+       print "\n";
+}
+print "</ul>\n\n";
+