' . "\n";
$func_vars_array = func_get_args();
// デフォルト値をセット
$pagename = $func_vars_array[0]; // 基準となるページ名
$limit_page = 7; // 表示する件数制限
$date_YM = ""; // 一覧表示する年月
$mode = "past"; // 動作モード
$date_sep = "-"; // 日付のセパレータ calendar2なら"-" calendarなら""
// Check $func_args[1]
if (preg_match("/[0-9]{4}".$date_sep."[0-9]{2}/",$func_vars_array[1])) {
//指定年月の一覧表示
$page_YM = $func_vars_array[1];
$limit_base = 0;
$limit_page = 31; //手抜き。31日分をリミットとする。
}else if (preg_match("/this/si",$func_vars_array[1])) {
//今月の一覧表示
$page_YM = get_date("Y".$date_sep."m");
$limit_base = 0;
$limit_page = 31;
}else if (preg_match("/^[0-9]+$/",$func_vars_array[1])) {
//n日分表示
$limit_pitch = $func_vars_array[1];
$limit_page = $limit_pitch;
$limit_base = 0;
$page_YM = "";
}else if (preg_match("/([0-9]+)\*([0-9]+)/",$func_vars_array[1],$reg_array)) {
$limit_pitch = $reg_array[2];
$limit_page = $reg_array[1] + $limit_pitch;
$limit_base = $reg_array[1];
$page_YM = "";
} else {
return '#calendar_viewer(): ' . $_err_calendar_viewer_param2 . '
' . "\n";
}
// $func_args[2]: Change default delimiter
if (isset($func_vars_array[2]) && preg_match("/^(past|pastex|view|viewex|future|futureex)$/si",$func_vars_array[2])) {
$mode = $func_vars_array[2];
}
// $func_args[3]: Change default delimiter
if (isset($func_vars_array[3])) {
$date_sep = $func_vars_array[3];
}
// Avoid Loop etc.
if (isset($viewed[$pagename])) {
if ($viewed[$pagename] > PLUGIN_MINICALENDAR_MAX_VIEWS) {
$s_page = htmlspecialchars($pagename);
return "#calendar_viewer(): You already view: $s_page
";
}
$viewed[$pagename]++; // Valid
} else {
$viewed[$pagename]=1; // Valid
}
// 一覧表示するページ名とファイル名のパターン ファイル名には年月を含む
if ($pagename == '') {
// pagename無しのyyyy-mm-ddに対応するための処理
$pagepattern = '';
$pagepattern_len = 0;
$filepattern = encode($page_YM);
$filepattern_len = strlen($filepattern);
} else {
$pagepattern = strip_bracket($pagename) . '/';
$pagepattern_len = strlen($pagepattern);
$filepattern = encode($pagepattern . $page_YM);
$filepattern_len = strlen($filepattern);
}
// ページリストの取得
$pagelist = array();
if ($dir = @opendir(DATA_DIR)) {
$_date = get_date('Y' . $date_sep . 'm' . $date_sep . 'd');
$page_date = '';
while($file = readdir($dir)) {
if ($file == '..' || $file == '.') continue;
if (substr($file, 0, $filepattern_len) != $filepattern) continue;
$page = decode(trim(preg_replace("/\.txt$/"," ",$file)));
$page_date = substr($page, $pagepattern_len);
// $pageがカレンダー形式なのかチェック デフォルトでは yyyy-mm-dd
if (plugin_minicalendar_viewer_isValidDate($page_date,$date_sep) == FALSE) continue;
// mode毎に別条件ではじく
// pastex modeでは今日を含む未来のページはNG
// futureex modeでは今日を含む過去のページはNG
// past modeでは未来のページはNG
// future modeでは過去のページはNG
if (($page_date >= $_date) && ($mode=="pastex")) continue;
if (($page_date <= $_date) && ($mode=="futureex")) continue;
if (($page_date > $_date) && ($mode=="past")) continue;
if (($page_date < $_date) && ($mode=="future")) continue;
$pagelist[] = $page;
}
}
closedir($dir);
// まずソート
if ($mode == 'past' || $mode == 'pastex' || $mode =='viewex') {
rsort($pagelist);
} else {
sort($pagelist);
}
// ここからインクルード
$tmppage = $vars["page"];
$return_body = "";
// $limit_pageの件数までインクルード
$tmp = max($limit_base, 0); // Skip minus
while ($tmp < $limit_page){
if (! isset($pagelist[$tmp])) break;
$page = $pagelist[$tmp];
$get['page'] = $post['page'] = $vars['page'] = $page;
// 現状で閲覧許可がある場合だけ表示する
if (check_readable($page, FALSE, FALSE)) {
if (function_exists('convert_filter')) {
$body = convert_html(convert_filter(get_source($page)));
} else {
$body = convert_html(get_source($page));
}
} else {
$body = str_replace('$1', $page, $_msg_calendar_viewer_restrict);
}
$r_page = rawurlencode($page);
$s_page = htmlspecialchars($page);
if (PLUGIN_MINICALENDAR_VIEWER_DATE_FORMAT !== FALSE) {
$time = strtotime(basepagename($page)); // $date_sep must be assumed '-' or ''!
if ($time == -1) {
$s_page = htmlspecialchars($page); // Failed. Why?
} else {
$week = $weeklabels[date('w', $time)];
$s_page = htmlspecialchars(str_replace(
array('$w'),
array($week),
date(PLUGIN_CALENDAR_VIEWER_DATE_FORMAT, $time)
));
}
}
$refpage = rawurlencode($tmppage);
$page_title = basepagename($page);
$s_page_ttile = htmlspecialchars($page_title);
if (PKWK_READONLY) {
$link = $script . '?' . $r_page;
} else {
$link = $script . '?cmd=edit&page=' . $r_page . '&refpage=' . $refpage;
}
$link = '' . $_symbol_paraedit . '';
$head = '
'si","'
'si"), array("",""), $comm ); $tail .= str_replace('>comment','>