function serveArchives() { global $serendipity; $serendipity['view'] = 'archives'; $_args = locateHiddenVariables($serendipity['uriArguments']); /* We must always *assume* that Year, Month and Day are the first 3 arguments */ list(, $year, $month, $day) = $_args; if ($year == "archives") { unset($year); } $serendipity['GET']['action'] = 'read'; $serendipity['GET']['hidefooter'] = true; if (!isset($year)) { $year = date('Y'); $month = date('m'); $day = date('j'); $serendipity['GET']['action'] = null; $serendipity['GET']['hidefooter'] = null; } if (isset($year) && !is_numeric($year)) { $year = date('Y'); } if (isset($month) && !is_numeric($month)) { $month = date('m'); } if (isset($day) && !is_numeric($day)) { $day = date('d'); } switch ($serendipity['calendar']) { case 'gregorian': default: $gday = 1; if ($week) { $tm = strtotime('+ ' . ($week - 2) . ' WEEKS monday', mktime(0, 0, 0, 1, 1, $year)); $ts = mktime(0, 0, 0, date('m', $tm), date('j', $tm), $year); $te = mktime(23, 59, 59, date('m', $tm), date('j', $tm) + 7, $year); $date = serendipity_formatTime(WEEK . ' ' . $week . ', %Y', $ts, false); } else { if ($day) { $ts = mktime(0, 0, 0, $month, $day, $year); $te = mktime(23, 59, 59, $month, $day, $year); $date = serendipity_formatTime(DATE_FORMAT_ENTRY, $ts, false); } else { $ts = mktime(0, 0, 0, $month, $gday, $year); if (!isset($gday2)) { $gday2 = date('t', $ts); } $te = mktime(23, 59, 59, $month, $gday2, $year); $date = serendipity_formatTime('%B %Y', $ts, false); } } break; case 'persian-utf8': require_once S9Y_INCLUDE_PATH . 'include/functions_calendars.inc.php'; $gday = 1; if ($week) { --$week; $week *= 7; ++$week; $day = $week; // convert day number of year to day number of month AND month number of year $j_days_in_month = array(0, 31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29); if ($g_y % 4 == 3) { $j_days_in_month[12]++; } for ($i = 1; isset($j_days_in_month[$i]); ++$i) { if ($day - $j_days_in_month[$i] > 0) { $day -= $j_days_in_month[$i]; } else { break; } } $tm = persian_mktime(0, 0, 0, $i, $day, $year); $ts = persian_mktime(0, 0, 0, persian_date_utf('m', $tm), persian_date_utf('j', $tm), $year); $te = persian_mktime(23, 59, 59, persian_date_utf('m', $tm), persian_date_utf('j', $tm) + 7, $year); $date = serendipity_formatTime(WEEK . ' ' . $week . '، %Y', $ts, false); } else { if ($day) { $ts = persian_mktime(0, 0, 0, $month, $day, $year); $te = persian_mktime(23, 59, 59, $month, $day, $year); $date = serendipity_formatTime(DATE_FORMAT_ENTRY, $ts, false); } else { $ts = persian_mktime(0, 0, 0, $month, $gday, $year); if (!isset($gday2)) { $gday2 = persian_date_utf('t', $ts); } $te = persian_mktime(23, 59, 59, $month, $gday2, $year); $date = serendipity_formatTime('%B %Y', $ts, false); } } list($year, $month, $day) = p2g($year, $month, $day); break; } $serendipity['range'] = array($ts, $te); if ($serendipity['GET']['action'] == 'read') { if ($serendipity['GET']['category']) { $cInfo = serendipity_fetchCategoryInfo($serendipity['GET']['category']); $serendipity['head_title'] = $cInfo['category_name']; } $serendipity['head_subtitle'] .= sprintf(ENTRIES_FOR, $date); } include S9Y_INCLUDE_PATH . 'include/genpage.inc.php'; }
/** * Gather an archive listing of older entries and passes it to Smarty * * The archives are created according to the current timestamp and show the current year. * $serendipity['GET']['category'] is honoured like in serendipity_fetchEntries() * $serendipity['GET']['viewAuthor'] is honoured like in serendipity_fetchEntries() * * @access public * @return null */ function serendipity_printArchives() { global $serendipity; $f = serendipity_db_query("SELECT timestamp FROM {$serendipity['dbPrefix']}entries ORDER BY timestamp ASC LIMIT 1"); switch ($serendipity['calendar']) { case 'gregorian': default: $lastYear = date('Y', serendipity_serverOffsetHour($f[0][0])); $lastMonth = date('m', serendipity_serverOffsetHour($f[0][0])); $thisYear = date('Y', serendipity_serverOffsetHour()); $thisMonth = date('m', serendipity_serverOffsetHour()); break; case 'persian-utf8': require_once S9Y_INCLUDE_PATH . 'include/functions_calendars.inc.php'; $lastYear = persian_date_utf('Y', serendipity_serverOffsetHour($f[0][0])); $lastMonth = persian_date_utf('m', serendipity_serverOffsetHour($f[0][0])); $thisYear = persian_date_utf('Y', serendipity_serverOffsetHour()); $thisMonth = persian_date_utf('m', serendipity_serverOffsetHour()); break; } $max = 1; if (isset($serendipity['GET']['category'])) { $cat_sql = serendipity_getMultiCategoriesSQL($serendipity['GET']['category']); $cat_get = '/C' . (int) $serendipity['GET']['category']; } else { $cat_sql = ''; $cat_get = ''; } if (isset($serendipity['GET']['viewAuthor'])) { $author_get = '/A' . (int) $serendipity['GET']['viewAuthor']; } else { $author_get = ''; } if ($serendipity['dbType'] == 'postgres' || $serendipity['dbType'] == 'pdo-postgres') { $distinct = 'DISTINCT e.id,'; } else { $distinct = ''; } $q = "SELECT {$distinct} e.timestamp\n FROM {$serendipity['dbPrefix']}entries e\n " . (!empty($cat_sql) ? "\n LEFT JOIN {$serendipity['dbPrefix']}entrycat ec\n ON e.id = ec.entryid\n LEFT JOIN {$serendipity['dbPrefix']}category c\n ON ec.categoryid = c.categoryid" : "") . "\n WHERE isdraft = 'false'" . (!serendipity_db_bool($serendipity['showFutureEntries']) ? " AND timestamp <= " . serendipity_db_time() : '') . (!empty($cat_sql) ? ' AND ' . $cat_sql : '') . (!empty($serendipity['GET']['viewAuthor']) ? ' AND e.authorid = ' . (int) $serendipity['GET']['viewAuthor'] : '') . (!empty($cat_sql) ? " GROUP BY e.id, e.timestamp" : ''); $entries =& serendipity_db_query($q, false, 'assoc'); $group = array(); if (is_array($entries)) { foreach ($entries as $entry) { $group[date('Ym', $entry['timestamp'])]++; } } $output = array(); for ($y = $thisYear; $y >= $lastYear; $y--) { $output[$y]['year'] = $y; for ($m = 12; $m >= 1; $m--) { /* If the month we are checking are in the future, we drop it */ if ($m > $thisMonth && $y == $thisYear) { continue; } /* If the month is lower than the lowest month containing entries, we're done */ if ($m < $lastMonth && $y <= $lastYear) { break; } switch ($serendipity['calendar']) { case 'gregorian': default: $s = serendipity_serverOffsetHour(mktime(0, 0, 0, $m, 1, $y), true); $e = serendipity_serverOffsetHour(mktime(23, 59, 59, $m, date('t', $s), $y), true); break; case 'persian-utf8': require_once S9Y_INCLUDE_PATH . 'include/functions_calendars.inc.php'; $s = serendipity_serverOffsetHour(persian_mktime(0, 0, 0, $m, 1, $y), true); $e = serendipity_serverOffsetHour(persian_mktime(23, 59, 59, $m, date('t', $s), $y), true); break; } $entry_count = (int) $group[$y . (strlen($m) == 1 ? '0' : '') . $m]; /* A silly hack to get the maximum amount of entries per month */ if ($entry_count > $max) { $max = $entry_count; } $data = array(); $data['entry_count'] = $entry_count; $data['link'] = serendipity_archiveDateUrl($y . '/' . sprintf('%02s', $m) . $cat_get . $author_get); $data['link_summary'] = serendipity_archiveDateUrl($y . '/' . sprintf('%02s', $m) . $cat_get . $author_get, true); $data['date'] = $s; $output[$y]['months'][] = $data; } } $serendipity['smarty']->assign_by_ref('archives', $output); $serendipity['smarty']->assign_by_ref('max_entries', $max); serendipity_smarty_fetch('ARCHIVES', 'entries_archives.tpl', 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); 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"; }
} $tm = persian_mktime(0, 0, 0, $i, $day, $year); $ts = persian_mktime(0, 0, 0, persian_date_utf('m', $tm), persian_date_utf('j', $tm), $year); $te = persian_mktime(23, 59, 59, persian_date_utf('m', $tm), persian_date_utf('j', $tm) + 7, $year); $date = serendipity_formatTime(WEEK . ' ' . $week . '، %Y', $ts, false); } else { if ($day) { $ts = persian_mktime(0, 0, 0, $month, $day, $year); $te = persian_mktime(23, 59, 59, $month, $day, $year); $date = serendipity_formatTime(DATE_FORMAT_ENTRY, $ts, false); } else { $ts = persian_mktime(0, 0, 0, $month, $gday, $year); if (!isset($gday2)) { $gday2 = persian_date_utf('t', $ts); } $te = persian_mktime(23, 59, 59, $month, $gday2, $year); $date = serendipity_formatTime('%B %Y', $ts, false); } } list($year, $month, $day) = p2g($year, $month, $day); break; } $serendipity['range'] = array($ts, $te); if ($serendipity['GET']['action'] == 'read') { if ($serendipity['GET']['category']) { $cInfo = serendipity_fetchCategoryInfo($serendipity['GET']['category']); $serendipity['head_title'] = $cInfo['category_name']; } $serendipity['head_subtitle'] .= sprintf(ENTRIES_FOR, $date); } ob_start();