place[0])) {
$Page->link .= '/'.$Page->place[0];
}
$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;
}
}
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('
'."\n", $length);
foreach (array_reverse($cal, TRUE) as $group => $rows) {
if (count($rows) > 1) {
$time = ($mindate - strtotime("$group-12-31T23:59")) / $year * $scale;
printf('- ',
$time, $time + $scale > $length ? $length - $time + 2 : $scale
);
print "$group
\n";
}
else {
$time = 0;
}
foreach ($rows as $title => $versions) {
$subtime = ($mindate - strtotime($title)) / $year * $scale - $time;
printf('- ', $subtime);
if ($url = @$versions['']) {
printf('%s', $url, $title);
}
else {
print '';
print $title;
if ($versions and $User->admin("edit {$Page->link}")) {
printf(' (%s)', implode(', ', array_map(
function ($format, $url) {
return sprintf('%s', $url, $format);
},
array_keys($versions), $versions
)));
}
print '';
}
print "
\n";
}
if (count($rows) > 1) {
print "
\n";
}
}
print "
\n\n";