203 lines
8.3 KiB
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";
|
|
}
|
|
|
|
}
|
|
|
|
?>
|