LuckyCoinkydink/plugins/serendipity_plugin_archives/serendipity_plugin_archives.php

203 lines
8.3 KiB
PHP

<?php
if (IN_serendipity !== true) {
die ("Don't hack!");
}
class serendipity_plugin_archives extends serendipity_plugin
{
var $title = ARCHIVES;
function introspect(&$propbag)
{
$propbag->add('name', ARCHIVES);
$propbag->add('description', BROWSE_ARCHIVES);
$propbag->add('stackable', true);
$propbag->add('author', 'Serendipity Team');
$propbag->add('version', '1.1');
$propbag->add('configuration', array('title', 'frequency', 'count', 'show_count', 'hide_zero_count'));
$propbag->add('groups', array('FRONTEND_VIEWS'));
}
function introspect_config_item($name, &$propbag)
{
switch($name) {
case 'title':
$propbag->add('type', 'string');
$propbag->add('name', TITLE);
$propbag->add('description', TITLE_FOR_NUGGET);
$propbag->add('default', ARCHIVES);
break;
case 'count' :
$propbag->add('type', 'string');
$propbag->add('name', ARCHIVE_COUNT);
$propbag->add('description', ARCHIVE_COUNT_DESC);
$propbag->add('default', 3);
break;
case 'frequency' :
$propbag->add('type', 'select');
$propbag->add('name', ARCHIVE_FREQUENCY);
$propbag->add('select_values', array('months' => MONTHS, 'weeks' => WEEKS, 'days' => DAYS));
$propbag->add('description', ARCHIVE_FREQUENCY_DESC);
$propbag->add('default', 'months');
break;
case 'show_count':
$propbag->add('type', 'boolean');
$propbag->add('name', CATEGORY_PLUGIN_SHOWCOUNT);
$propbag->add('description', '');
$propbag->add('default', false);
break;
case 'hide_zero_count':
$propbag->add('type', 'boolean');
$propbag->add('name', CATEGORY_PLUGIN_HIDEZEROCOUNT);
$propbag->add('description', '');
$propbag->add('default', false);
break;
default:
return false;
}
return true;
}
function generate_content(&$title)
{
global $serendipity;
$title = $this->get_config('title', $this->title);
$ts = mktime(0, 0, 0, date('m'), 1);
$add_query = '';
$category_set = isset($serendipity['GET']['category']);
if ($category_set) {
$base_query = 'C' . (int)$serendipity['GET']['category'];
$add_query = '/' . $base_query;
}
$max_x = $this->get_config('count', 3);
$show_count = serendipity_db_bool($this->get_config('show_count', 'false'));
$hide_zero_count = serendipity_db_bool($this->get_config('hide_zero_count', 'false'));
$freq = $this->get_config('frequency', 'months');
echo '<ul class="plainList">' . "\n";
if ($serendipity['dbType'] == 'sqlite' || $serendipity['dbType'] == 'sqlite3' || $serendipity['dbType'] == 'sqlite3oo') {
$dist_sql = 'count(e.id) AS orderkey';
} else {
$dist_sql = 'count(DISTINCT e.id) AS orderkey';
}
for($x = 0; $x < $max_x; $x++) {
$current_ts = $ts;
switch($freq) {
case 'months' :
switch($serendipity['calendar']) {
default:
case 'gregorian':
$linkStamp = date('Y/m', $ts);
$ts_title = serendipity_formatTime("%B %Y", $ts, false);
$ts = mktime(0, 0, 0, date('m', $ts)-1, 1, date('Y', $ts)); // Must be last in 'case' statement
break;
case 'persian-utf8':
require_once S9Y_INCLUDE_PATH . 'include/functions_calendars.inc.php';
$linkStamp = persian_date_utf('Y/m', $ts);
$ts_title = serendipity_formatTime("%B %Y", $ts, false);
$ts = persian_mktime(0, 0, 0, persian_date_utf('m', $ts)-1, 1, persian_date_utf('Y', $ts)); // Must be last in 'case' statement
break;
}
break;
case 'weeks' :
switch($serendipity['calendar']) {
default:
case 'gregorian':
$linkStamp = date('Y/\WW', $ts);
$ts_title = WEEK . ' '. date('W, Y', $ts);
$ts = mktime(0, 0, 0, date('m', $ts), date('d', $ts)-7, date('Y', $ts));
break;
case 'persian-utf8':
require_once S9Y_INCLUDE_PATH . 'include/functions_calendars.inc.php';
$linkStamp = persian_date_utf('Y/\WW', $ts);
$ts_title = WEEK . ' '. persian_date_utf('W، Y', $ts);
$ts = persian_mktime(0, 0, 0, persian_date_utf('m', $ts), persian_date_utf('d', $ts)-7, persian_date_utf('Y', $ts));
break;
}
break;
case 'days' :
switch($serendipity['calendar']) {
default:
case 'gregorian':
$linkStamp = date('Y/m/d', $ts);
$ts_title = serendipity_formatTime("%B %e. %Y", $ts, false);
$ts = mktime(0, 0, 0, date('m', $ts), date('d', $ts)-1, date('Y', $ts)); // Must be last in 'case' statement
break;
case 'persian-utf8':
require_once S9Y_INCLUDE_PATH . 'include/functions_calendars.inc.php';
$linkStamp = persian_date_utf('Y/m/d', $ts);
$ts_title = serendipity_formatTime("%e %B %Y", $ts, false);
$ts = persian_mktime(0, 0, 0, persian_date_utf('m', $ts), persian_date_utf('d', $ts)-1, persian_date_utf('Y', $ts)); // Must be last in 'case' statement
break;
}
break;
}
$link = serendipity_rewriteURL(PATH_ARCHIVES . '/' . $linkStamp . $add_query . '.html', 'serendipityHTTPPath');
$html_count = '';
$hidden_by_zero_count = false;
if ($show_count) {
switch($freq) {
case 'months':
$end_ts = $current_ts + (date('t', $current_ts) * 24 * 60 * 60) - 1;
break;
case 'weeks':
$end_ts = $current_ts + (7 * 24 * 60 * 60) - 1;
break;
case 'days':
$end_ts = $current_ts + (24 * 60 * 60) - 1;
break;
}
$ec = serendipity_fetchEntries(
array($current_ts, $end_ts),
false,
'',
false,
false,
null,
'',
false,
true,
$dist_sql,
'',
'single',
false, $category_set // the joins used
);
if (is_array($ec)) {
if (empty($ec['orderkey'])) {
$ec['orderkey'] = '0';
}
$hidden_by_zero_count = $hide_zero_count && ( $ec['orderkey'] == '0');
$html_count .= ' (' . $ec['orderkey'] . ')';
}
}
if (!$hidden_by_zero_count) {
echo ' <li><a href="' . $link . '" title="' . $ts_title . '">' . $ts_title . $html_count . '</a></li>' . "\n";
}
}
echo ' <li><a href="'. $serendipity['serendipityHTTPPath'] . $serendipity['indexFile'] . '?frontpage">' . RECENT . '</a></li>' . "\n";
echo ' <li><a href="'. serendipity_rewriteURL(PATH_ARCHIVE . $add_query) .'">' . OLDER . '</a></li>'. "\n";
echo '</ul>' . "\n";
}
}
?>