コード例 #1
0
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';
}
コード例 #2
0
/**
 * 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);
}
コード例 #3
0
 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";
 }
コード例 #4
0
ファイル: index.php プロジェクト: rustyx/Serendipity
             }
             $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();