function plugin_headarea_convert() { global $vars, $headarea, $use_open_uri_in_new_window; static $head = NULL; static $headhtml = NULL; //miko patched // Cached MenuHTML if ($headhtml !== NULL) { return preg_replace('/<ul class="list[^>]*>/', '<ul class="head">', $headhtml); } //miko patched if (func_num_args()) { $args = func_get_args(); if (is_page($args[0])) { $head = $args[0]; } return ''; } $page = $head === NULL ? $headarea : $head; if (HEAD_ENABLE_SUBHEAD) { $path = explode('/', strip_bracket($vars['page'])); while (count($path)) { $_page = join('/', $path) . '/' . HEAD_SUBHEADBAR; if (is_page($_page)) { $page = $_page; break; } array_pop($path); } } if (!is_page($page)) { return ''; // } else if ($vars['page'] == $page) { // return '<!-- #headarea(): You already view ' . htmlsc($page) . ' -->'; } $headtext = preg_replace('/^(\\*{1,3}.*)\\[#[A-Za-z][\\w-]+\\](.*)$/m', '$1$2', get_source($page)); if (function_exists('convert_filter')) { $headtext = convert_filter($headtext); } $save_newwindow = $use_open_uri_in_new_window; $use_open_uri_in_new_window = 0; $headhtml = RendererFactory::factory($headtext); $use_open_uri_in_new_window = $save_newwindow; $headhtml = str_replace("\n", '', $headhtml); return preg_replace('/<ul class="list[^>]*>/', '<ul class="head">', $headhtml); }
function plugin_footarea_convert() { global $vars, $footarea, $use_open_uri_in_new_window; static $foot = NULL; static $foothtml = NULL; //miko patched // Cached MenuHTML if ($foothtml !== NULL) { return preg_replace('/<ul class="list[^>]*>/', '<ul class="foot">', $foothtml); } //miko patched if (func_num_args()) { $args = func_get_args(); if (is_page($args[0])) { $foot = $args[0]; } return ''; } $page = $foot === NULL ? $footarea : $foot; if (FOOT_ENABLE_SUBFOOT) { $path = explode('/', strip_bracket($vars['page'])); while (count($path)) { $_page = join('/', $path) . '/' . FOOT_SUBFOOTBAR; if (is_page($_page)) { $page = $_page; break; } array_pop($path); } } if (!is_page($page)) { return ''; // } else if ($vars['page'] == $page) { // return '<!-- #footarea(): You already view ' . htmlspecialchars($page) . ' -->'; } $foottext = preg_replace('/^(\\*{1,3}.*)\\[#[A-Za-z][\\w-]+\\](.*)$/m', '$1$2', get_source($page)); if (function_exists('convert_filter')) { $foottext = convert_filter($foottext); } $save_newwindow = $use_open_uri_in_new_window; $use_open_uri_in_new_window = 0; $foothtml = convert_html($foottext); $use_open_uri_in_new_window = $save_newwindow; $foothtml = str_replace("\n", '', $foothtml); return preg_replace('/<ul class="list[^>]*>/', '<ul class="foot">', $foothtml); }
function plugin_splitinclude_convert() { global $script, $vars, $get, $post; global $_msg_splitinclude_restrict; static $splitinclude_list = array(); //処理済ページ名の配列 if (func_num_args() == 0) { return; } $splitinclude_list[$vars['page']] = TRUE; $func_vars_num = func_num_args(); $func_vars_array = func_get_args(); $incbody = ""; foreach ($func_vars_array as $page) { $page = strip_bracket($page); if (!is_page($page) or isset($splitinclude_list[$page])) { return ''; } $splitinclude_list[$page] = TRUE; $_page = $vars['page']; $get['page'] = $post['page'] = $vars['page'] = $page; // splitincludeのときは、認証画面をいちいち出さず、後始末もこちらでつける 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_splitinclude_restrict); } $get['page'] = $post['page'] = $vars['page'] = $_page; $incbody .= "<div style=\"width:" . intval(96 / $func_vars_num) . "%;margin:0px 2px;vartical-align:top;float:left;\">{$body}</div>\n"; } $incbody = "<div style=\"width:100%\">\n{$incbody}</div>\n<div style=\"display:block;\"></div>\n"; return $incbody; }
function frontend() { global $vars, $get, $post; $titlestr = PluginIncludex::get_titlestr($this->inclpage, $this->options['titlestr'][1]); $title = PluginIncludex::get_title($this->inclpage, $titlestr, $this->options['title'][1]); if ($this->error != "") { return; } // because included page would use these variables. $tmp = $vars['page']; $get['page'] = $post['page'] = $vars['page'] = $this->inclpage; if (function_exists('convert_filter')) { $this->lines = convert_filter($this->lines); // plus } $body = convert_html($this->lines); $get['page'] = $post['page'] = $vars['page'] = $tmp; if ($this->error != "") { return; } $footer = ''; if ($this->options['permalink'][1] !== false) { $linkstr = $this->make_inline($this->options['permalink'][1]); $footer = '<p class="permalink">' . make_pagelink($this->inclpage, $linkstr) . '</p>'; } return $title . "\n" . $body . $footer; }
/** * Get result html of convert_html * * PukiWiki API Extension * * @access public * @static * @param string $page pagename * @param array $lines contents to be converted * @return string html * @version $Id: v 1.0 2008-06-05 11:14:46 sonots $ */ function get_convert_html($page, $lines) { global $vars, $get, $post; $tmp = $vars['page']; $get['page'] = $post['page'] = $vars['page'] = $page; if (function_exists('convert_filter')) { // plus $lines = convert_filter($lines); } $html = convert_html($lines); $get['page'] = $post['page'] = $vars['page'] = $tmp; return $html; }
function plugin_minicalendar_viewer_convert() { global $vars, $get, $post, $script, $weeklabels; global $_err_calendar_viewer_param, $_err_calendar_viewer_param2; global $_msg_calendar_viewer_right, $_msg_calendar_viewer_left; global $_msg_calendar_viewer_restrict; global $_symbol_paraedit, $trackback; static $viewed = array(); if (func_num_args() < 2) { return PLUGIN_MINICALENDAR_VIEWER_USAGE . '<br />' . "\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 . '<br />' . "\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 . '<br />'; } $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 || $time == FALSE) { $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_title = htmlspecialchars($page_title); // if (PKWK_READONLY) { if (auth::check_role('readonly')) { $link = get_page_uri($page); } else { $link = get_cmd_uri('edit', $page, '', 'refpage=' . $refpage); } $link = '<a class="anchor_super" href="' . $link . '">' . $_symbol_paraedit . '</a>'; $head = '<h3 class="minicalendar">' . $s_page_title . ' ' . $link . '</h3>' . "\n"; $tail = ''; if (PLUGIN_MINICALENDAR_VIEWER_HOLIDAYVIEW === TRUE) { $time = strtotime($page_title); if ($time != -1) { $yy = intval(date('Y', $time)); $mm = intval(date('n', $time)); $dd = intval(date('d', $time)); $monthlabel = array(1 => 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); $mmstr = $monthlabel[$mm]; $h_today = public_holiday($yy, $mm, $dd); if ($h_today['rc'] != 0) { $classname = 'date_holiday'; } else { if ($h_today['w'] == 0) { $classname = 'date_holiday'; } else { if ($h_today['w'] == 6) { $classname = 'date_weekend'; } else { $classname = 'date_weekday'; } } } $head = '<h3 class="' . $classname . '"><span class="day">' . sprintf('%02d', $dd) . '</span> <br />' . '<b>' . $mmstr . '</b>, <b>' . $yy . '</b>' . $link . '</h3>' . "\n"; } } if (PLUGIN_MINICALENDAR_VIEWER_COMMENT === TRUE) { if (is_page(':config/plugin/addline/comment') && exist_plugin_inline('addline')) { $comm = convert_html(array('&addline(comment,above){comment};')); $comm = preg_replace(array("'<p>'si", "'</p>'si"), array("", ""), $comm); $tail .= str_replace('>comment', '><img src="' . IMAGE_URI . 'plus/comment.png" width="15" height="15" alt="Comment" title="Comment" />Comment', $comm); } } if (PLUGIN_MINICALENDAR_VIEWER_TRACKBACK === TRUE) { if ($trackback) { $tb_id = tb_get_id($page); $tail .= '<a href="' . $script . '?plugin=tb&__mode=view&tb_id=' . $tb_id . '">' . '<img src="' . IMAGE_URI . 'plus/trackback.png" width="15" height="15" alt="" title="" />Trackback(' . tb_count($page) . ')' . '</a>' . "\n"; } } if ($tail != '') { $tail = '<div class="trackback">' . $tail . '</div>'; } $return_body .= $head . '<div class="minicalendar_viewer">' . $body . '</div>' . $tail; ++$tmp; } //ここで、前後のリンクを表示 //?plugin=minicalendar_viewer&file=ページ名&date=yyyy-mm $enc_pagename = rawurlencode(substr($pagepattern, 0, $pagepattern_len - 1)); if ($page_YM != '') { // 年月表示時 $date_sep_len = strlen($date_sep); $this_year = substr($page_YM, 0, 4); $this_month = substr($page_YM, 4 + $date_sep_len, 2); // 次月 $next_year = $this_year; $next_month = $this_month + 1; if ($next_month > 12) { $next_year++; $next_month = 1; } $next_YM = sprintf('%04d%s%02d', $next_year, $date_sep, $next_month); $next_YMX = sprintf('%04d%02d', $next_year, $next_month); // 前月 $prev_year = $this_year; $prev_month = $this_month - 1; if ($prev_month < 1) { $prev_year--; $prev_month = 12; } $prev_YM = sprintf('%04d%s%02d', $prev_year, $date_sep, $prev_month); $prev_YMX = sprintf('%04d%02d', $prev_year, $prev_month); // if ($mode == "past" || $mode == "pastex") { // $right_YM = $prev_YM; // $right_YMX = $prev_YMX; // $right_text = $prev_YM.">>"; // $left_YM = $next_YM; // $left_YMX = $next_YMX; // $left_text = "<<".$next_YM; // } else { $left_YM = $prev_YM; $left_YMX = $prev_YMX; $left_text = '<<' . $prev_YM; $right_YM = $next_YM; $right_YMX = $next_YMX; $right_text = $next_YM . '>>'; // } } else { // n件表示時 if ($limit_base >= count($pagelist)) { $right_YM = ''; } else { $right_base = $limit_base + $limit_pitch; $right_YM = $right_base . '*' . $limit_pitch; $right_text = sprintf($_msg_calendar_viewer_right, $limit_pitch); } $left_base = $limit_base - $limit_pitch; if ($left_base >= 0) { $left_YM = $left_base . '*' . $limit_pitch; $left_text = sprintf($_msg_calendar_viewer_left, $limit_pitch); } else { $left_YM = ''; } $prev_YMX = ''; $next_YMX = ''; } // ナビゲート用のリンクを末尾に追加 $s_date_sep = htmlspecialchars($date_sep); if ($left_YM != '') { if ($left_YMX != '') { $left_link = '<a href="' . $script . '?plugin=minicalendar&file=' . $enc_pagename . '&date=' . $left_YMX . '">' . $left_text . '</a>'; } else { $left_link = '<a href="' . $script . '?plugin=minicalendar_viewer&file=' . $enc_pagename . '&date=' . $left_YM . '&date_sep=' . $s_date_sep . '&mode=' . $mode . '">' . $left_text . '</a>'; } } else { $left_link = ''; } if ($right_YM != '') { if ($right_YMX != '') { $right_link = '<a href="' . $script . '?plugin=minicalendar&file=' . $enc_pagename . '&date=' . $right_YMX . '">' . $right_text . '</a>'; } else { $right_link = '<a href="' . $script . '?plugin=minicalendar_viewer&file=' . $enc_pagename . '&date=' . $right_YM . '&date_sep=' . $s_date_sep . '&mode=' . $mode . '">' . $right_text . '</a>'; } } else { $right_link = ''; } //past modeは<<新 旧>> 他は<<旧 新>> $return_body .= '<div class="prevnext">'; $return_body .= '<div class="prevnext_r">' . $right_link . '</div>'; $return_body .= '<div class="prevnext_l">' . $left_link . '</div>'; $return_body .= '</div><br style="display:block;clear:both" />'; $get['page'] = $post['page'] = $vars['page'] = $tmppage; return $return_body; }
function plugin_side_convert() { global $vars, $sidebar; static $side = NULL; static $sidehtml = NULL; //miko patched // Cached MenuHTML if ($sidehtml !== NULL) { return preg_replace('/<ul class="list[^>]*>/', '<ul class="menu">', $sidehtml); } //miko patched $num = func_num_args(); if ($num > 0) { // Try to change default 'sideBar' page name (only) if ($num > 1) { return '#side(): Zero or One argument needed'; } if ($side !== NULL) { return '#side(): Already set: ' . htmlspecialchars($side); } $args = func_get_args(); if (!is_page($args[0])) { return '#side(): No such page: ' . htmlspecialchars($args[0]); } else { $side = $args[0]; // Set return ''; } } else { // Output sidebar page data $page = $side === NULL ? $sidebar : $side; if (SIDE_ENABLE_SUBMENU) { $path = explode('/', strip_bracket($vars['page'])); while (count($path)) { $_page = join('/', $path) . '/' . SIDE_SUBMENUBAR; if (is_page($_page)) { $page = $_page; break; } array_pop($path); } } if (!is_page($page)) { return ''; } else { if ($vars['page'] == $page) { return '<!-- #side(): You already view ' . htmlspecialchars($page) . ' -->'; } else { // Cut fixed anchors $sidetext = preg_replace('/^(\\*{1,3}.*)\\[#[A-Za-z][\\w-]+\\](.*)$/m', '$1$2', get_source($page)); //miko patched if (function_exists('convert_filter')) { $sidetext = convert_filter($sidetext); } global $top, $use_open_uri_in_new_window; $tmptop = $top; $top = ''; $save_newwindow = $use_open_uri_in_new_window; $use_open_uri_in_new_window = 0; $sidehtml = convert_html($sidetext); $top = $tmptop; $use_open_uri_in_new_window = $save_newwindow; $sidehtml = str_replace("\n", '', $sidehtml); return preg_replace('/<ul class="list[^>]*>/', '<ul class="menu">', $sidehtml); //miko patched } } } }
function plugin_menu_convert() { global $vars, $menubar, $menuhtml; static $menu = NULL; //miko patched // Cached MenuHTML // if ($menuhtml !== NULL) // return preg_replace('/<ul class="list[^>]*>/','<ul class="menu">', $menuhtml); //miko patched $num = func_num_args(); if ($num > 0) { // Try to change default 'MenuBar' page name (only) if ($num > 1) { return '<p class="alert alert-warning">#menu(): Zero or One argument needed</p>'; } if ($menu !== NULL) { return '<p class="alert alert-warning">#menu(): Already set: ' . Utility::htmlsc($menu) . '</p>'; } $args = func_get_args(); if (!is_page($args[0])) { return '<p class="alert alert-warning">#menu(): No such page: ' . Utility::htmlsc($args[0]) . '</p>'; } else { $menu = $args[0]; // Set return ''; } } else { // Output menubar page data $page = $menu === NULL ? $menubar : $menu; if (MENU_ENABLE_SUBMENU) { $path = explode('/', strip_bracket($vars['page'])); while (!empty($path)) { $_page = join('/', $path) . '/' . MENU_SUBMENUBAR; if (is_page($_page)) { $page = $_page; break; } array_pop($path); } } $wiki = Factory::Wiki($page); if (!$wiki->has()) { return ''; } else { if ($vars['page'] === $page) { return '<!-- #menu(): You already view ' . htmlsc($page) . ' -->'; } else { // Cut fixed anchors $menutext = preg_replace('/^(\\*{1,3}.*)\\[#[A-Za-z][\\w-]+\\](.*)$/m', '$1$2', $wiki->get(true)); //miko patched if (function_exists('convert_filter')) { $menutext = convert_filter($menutext); } global $top; $tmptop = $top; $top = ''; $menuhtml = RendererFactory::factory($menutext); $top = $tmptop; $menuhtml = str_replace("\n", '', $menuhtml); return $menuhtml; //return preg_replace('/<ul class="list[^>]*>/','<ul class="menu">',$menuhtml); //miko patched } } } }
function plugin_calendar_viewer_convert() { global $vars, $get, $post, $_labels; // global $_msg_calendar_viewer_right, $_msg_calendar_viewer_left; // global $_msg_calendar_viewer_restrict, $_err_calendar_viewer_param2; global $_symbol_paraedit, $trackback; $_calendar_viewer_msg = array('_err_param2' => T_('Wrong second parameter.'), '_msg_right' => T_('Next %d >>'), '_msg_left' => T_('<< Prev %d'), '_msg_restrict' => T_('Due to the blocking, the calendar_viewer cannot refer to $1.'), '_title_format' => T_('%1s, %2s %3s %4s')); if (!isset($vars['page'])) { return ''; } static $viewed = array(); if (func_num_args() < 2) { return PLUGIN_CALENDAR_VIEWER_USAGE . '<br />' . "\n"; } $func_args = func_get_args(); // Default values $pagename = $func_args[0]; // 基準となるページ名 $page_YM = ''; // 一覧表示する年月 $limit_base = 0; // 先頭から数えて何ページ目から表示するか (先頭) $limit_pitch = 0; // 何件づつ表示するか $limit_page = 0; // サーチするページ数 $mode = 'past'; // 動作モード $date_sep = '-'; // 日付のセパレータ calendar2なら '-', calendarなら '' // Check $func_args[1] $matches = array(); if (preg_match('/[0-9]{4}' . $date_sep . '[0-9]{2}/', $func_args[1])) { // 指定年月の一覧表示 $page_YM = $func_args[1]; $limit_page = 31; } else { if (preg_match('/this/si', $func_args[1])) { // 今月の一覧表示 $page_YM = get_date('Y' . $date_sep . 'm'); $limit_page = 31; } else { if (preg_match('/^[0-9]+$/', $func_args[1])) { // n日分表示 $limit_pitch = $func_args[1]; $limit_page = $func_args[1]; } else { if (preg_match('/(-?[0-9]+)\\*([0-9]+)/', $func_args[1], $matches)) { // 先頭より数えて x ページ目から、y件づつ表示 $limit_base = $matches[1]; $limit_pitch = $matches[2]; $limit_page = $matches[1] + $matches[2]; // 読み飛ばす + 表示する } else { return '#calendar_viewer(): ' . $_calendar_viewer_msg['_err_param2'] . '<br />' . "\n"; } } } } // $func_args[2]: Mode setting if (isset($func_args[2]) && preg_match('/^(past|pastex|view|viewex|future|futureex)$/si', $func_args[2])) { $mode = $func_args[2]; } // $func_args[3]: Change default delimiter if (isset($func_args[3])) { $date_sep = $func_args[3]; } // Avoid Loop etc. if (isset($viewed[$pagename])) { if ($viewed[$pagename] > PLUGIN_CALENDAR_MAX_VIEWS) { $s_page = htmlsc($pagename); return '#calendar_viewer(): You already view: ' . $s_page . '<br />'; } $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); // Verify the $page_date pattern (Default: yyyy-mm-dd). // Past-mode hates the future, and // Future-mode hates the past. if (plugin_calendar_viewer_isValidDate($page_date, $date_sep) == FALSE || $page_date > $_date && $mode == 'past' || $page_date < $_date && $mode == 'future' || $page_date >= $_date && $mode == 'pastex' || $page_date <= $_date && $mode == 'futureex') { continue; } $pagelist[] = $page; } } closedir($dir); if ($mode == 'past' || $mode == 'pastex' || $mode == 'viewex') { rsort($pagelist, SORT_STRING); // New => Old } else { sort($pagelist, SORT_STRING); // Old => New } // Include start $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; $wiki = Factory::Wiki($page); // 現状で閲覧許可がある場合だけ表示する if ($wiki->isReadable()) { if (function_exists('convert_filter')) { $body = RendererFactory::factory(convert_filter($wiki->get())); } else { $body = $wiki->render(); } } else { $body = str_replace('$1', $page, $_calendar_viewer_msg['_msg_restrict']); } if (PLUGIN_CALENDAR_VIEWER_DATE_FORMAT !== FALSE) { $time = strtotime(basename($page)); // $date_sep must be assumed '-' or ''! if ($time == -1) { $s_page = htmlsc($page); // Failed. Why? } else { $week = $_labels['week'][date('w', $time)][0]; $month = $_labels['month'][preg_replace('/^0/', '', date('m', $time))][0]; $s_page = htmlsc(str_replace(array('$w', '$m'), array($week, $month), date(PLUGIN_CALENDAR_VIEWER_DATE_FORMAT, $time))); } } else { $s_page = htmlsc($page); } // if (PKWK_READONLY) { if (Auth::check_role('readonly')) { $link = get_page_uri($page); } else { $link = get_cmd_uri('edit', $page, '', array('page' => $page)); } $link = '<a class="anchor_super" href="' . $link . '">' . $_symbol_paraedit . '</a>'; $head = '<h1>' . $s_page . $link . '</h1>' . "\n"; $page_title = basepagename($page); $tail = ''; if (PLUGIN_CALENDAR_VIEWER_HOLIDAYVIEW === TRUE) { $time = strtotime($page_title); if ($time != -1) { $yy = intval(date('Y', $time)); $mm = intval(date('n', $time)); $dd = intval(date('d', $time)); $h_today = PublicHolidayFactory::factory('JP', $yy, $mm, $dd); if ($h_today['rc'] != 0) { $classname = 'date_holiday'; $weekclass = 'week_sun'; } else { switch ($h_today['w']) { case 0: $classname = 'date_holiday'; $weekclass = 'week_sun'; break; case 6: $classname = 'date_weekend'; $weekclass = 'week_sat'; default: $classname = 'date_weekday'; $weekclass = 'week_day'; break; } } } } if (PLUGIN_CALENDAR_VIEWER_COMMENT === TRUE) { if (is_page(':config/plugin/addline/comment') && exist_plugin_inline('addline')) { $comm = RendererFactory::factory(array('&addline(comment,above){comment};')); $comm = preg_replace(array("'<p>'si", "'</p>'si"), array("", ""), $comm); $tail .= str_replace('>comment', '><img src="' . IMAGE_URI . 'plus/comment.png" width="15" height="15" alt="Comment" title="Comment" />Comment', $comm); } } if (PLUGIN_CALENDAR_VIEWER_TRACKBACK === TRUE && $trackback) { $tb_link = get_cmd_uri('tb', '', '', array('__mode' => 'view', 'tb_id' => tb_get_id($page))); $tail .= '<a class="pkwk-icon_linktext cmd-trackback" href="' . $tb_link . '">' . 'Trackback(' . tb_count($page) . ')' . '</a>' . "\n"; } $page_id = str_replace('/', '_', $page); $return_body .= '<article id="' . $page_id . '">' . "\n"; $return_body .= $head . $body; $return_body .= '</article>' . "\n"; ++$tmp; } // ここで、前後のリンクを表示 // ?plugin=calendar_viewer&file=ページ名&date=yyyy-mm $page = substr($pagepattern, 0, $pagepattern_len - 1); $r_page = rawurlencode($page); if ($page_YM != '') { // 年月表示時 $date_sep_len = strlen($date_sep); $this_year = substr($page_YM, 0, 4); $this_month = substr($page_YM, 4 + $date_sep_len, 2); // 次月 $next_year = $this_year; $next_month = $this_month + 1; if ($next_month > 12) { ++$next_year; $next_month = 1; } $next_YM = sprintf('%04d%s%02d', $next_year, $date_sep, $next_month); // 前月 $prev_year = $this_year; $prev_month = $this_month - 1; if ($prev_month < 1) { --$prev_year; $prev_month = 12; } $prev_YM = sprintf('%04d%s%02d', $prev_year, $date_sep, $prev_month); if ($mode == 'past') { $right_YM = $prev_YM; $right_text = $prev_YM . '>>'; // >> $left_YM = $next_YM; $left_text = '<<' . $next_YM; // << } else { $left_YM = $prev_YM; $left_text = '<<' . $prev_YM; // << $right_YM = $next_YM; $right_text = $next_YM . '>>'; // >> } } else { // n件表示時 if ($limit_base <= 0) { $left_YM = ''; // 表示しない (それより前の項目はない) } else { $left_YM = $limit_base - $limit_pitch . '*' . $limit_pitch; $left_text = sprintf($_calendar_viewer_msg['_msg_left'], $limit_pitch); } if ($limit_base + $limit_pitch >= count($pagelist)) { $right_YM = ''; // 表示しない (それより後の項目はない) } else { $right_YM = $limit_base + $limit_pitch . '*' . $limit_pitch; $right_text = sprintf($_calendar_viewer_msg['_msg_right'], $limit_pitch); } } // ナビゲート用のリンクを末尾に追加 if ($left_YM != '' || $right_YM != '') { $s_date_sep = htmlsc($date_sep); $left_link = $right_link = ''; if ($left_YM != '') { $left_link = '<a href="' . get_cmd_uri('calendar_viewer', '', '', array('mode' => $mode, 'file' => $page, 'date_sep' => $date_sep, 'date' => $left_YM)) . '">' . $left_text . '</a>'; } if ($right_YM != '') { $right_link = '<a href="' . get_cmd_uri('calendar_viewer', '', '', array('mode' => $mode, 'file' => $page, 'date_sep' => $date_sep, 'date' => $right_YM)) . '">' . $right_text . '</a>'; } $center_link = '<a href="' . get_page_uri($page) . '">' . $page . '</a>'; // past modeは<<新 旧>> 他は<<旧 新>> $nav = '<nav class="calendar_viewer_navi">' . "\n"; $nav .= <<<EOD <ul class="navi"> \t<li class="navi_left">{$left_link}</li> \t<li class="navi_none">{$center_link}</li> \t<li class="navi_right">{$right_link}</li> </ul> <hr /> EOD; $nav .= '</nav>' . "\n"; } $get['page'] = $post['page'] = $vars['page'] = $tmppage; return $nav . $return_body; }