function plugin_weblog_rss_action()
{
    global $rss_max, $page_title, $WikiName, $BracketName, $script, $whatsnew, $trackback, $use_static_url, $anon_writable;
    global $vars;
    global $options, $_weblog_msgs;
    //コンフィグの読み込み(指定weblog固有)
    $conf_name = $vars['config'];
    $options = weblog_get_options($conf_name, $options);
    $page = strip_bracket($options['PREFIX']);
    $with_content = $vars['content'];
    $list_count = $vars['count'];
    if ($list_count == 0) {
        $list_count = $rss_max;
    }
    $lines = get_existpages(false, $page, $list_count, " ORDER BY editedtime DESC", true);
    header("Content-type: application/xml");
    if (is_page($page)) {
        $linkpage = $page;
    } else {
        if (strrchr($page, "/")) {
            $_p = substr($page, 0, -strlen(strrchr($page, "/")));
            if (is_page($_p)) {
                $linkpage = $_p;
            }
        } else {
            $linkpage = $whatsnew;
        }
    }
    if ($use_static_url) {
        $linkpage_url = XOOPS_WIKI_URL . "/" . get_pgid_by_name($linkpage) . ".html";
    } else {
        $linkpage_url = $script . "?" . rawurlencode($linkpage);
    }
    $page_title_utf8 = $page_title;
    if (function_exists("mb_convert_encoding")) {
        $page_title_utf8 = mb_convert_encoding($page_title_utf8, "UTF-8", "auto");
        //		$page_utf8 = mb_convert_encoding($linkpage,"UTF-8","auto");
        $page_utf8 = mb_convert_encoding($options['NAME'], "UTF-8", "auto");
        $page_add_utf8 = $linkpage ? "-" . $page_utf8 : "";
    }
    $item = "";
    $rdf_li = "";
    foreach ($lines as $line) {
        $vars['page'] = $line;
        $page_name = strip_bracket($line);
        if (!preg_match("/^(.*\\/)?[0-9\\-]+\$/", $page_name)) {
            continue;
        }
        $src = @join("", get_source($page_name));
        $sources = $src;
        if (preg_match("/\\&weblog_field\\(__SUBJECT\\)\\{([^}]+)\\}\\;/m", $sources, $match)) {
            $subject = $match[1];
        }
        if (preg_match("/\\&weblog_field\\(__AUTHOR\\)\\{([^}]+)\\}\\;/m", $sources, $match)) {
            $author = $match[1];
        }
        if (preg_match("/\\&weblog_field\\(__CATEGORY,:([^\\)]+)\\)\\{([^}]+)\\}\\;((\\[ )?\\[\\[.*\\]\\]( \\])?)+/m", $sources, $match)) {
            $catpath = $match[1];
            $category = $match[2];
        }
        if (preg_match("/#weblog_field\\(__BODY\\,Start\\)\\s*\n(.*\n)#weblog_field\\(__BODY\\,End\\)\n/ms", $sources, $match)) {
            $body = $match[1];
            $body = preg_replace("/\\s*((\r\n)|(\r)|(\n))/", "\n", $body);
        }
        $title = mb_convert_encoding($subject, "UTF-8", "auto");
        $url = strip_bracket($line);
        //		if ($page) $title = preg_replace("/^".preg_quote($page_utf8,"/")."\//","",$title);
        $title = htmlspecialchars($title);
        $desc = date("D, d M Y H:i:s T", filemtime(get_filename(encode($line))));
        $dcdate = substr_replace(date("Y-m-d\\TH:i:sO", filemtime(get_filename(encode($line)))), ':', -2, 0);
        if ($use_static_url) {
            $link_url = XOOPS_WIKI_URL . "/" . get_pgid_by_name($line) . ".html";
        } else {
            $link_url = $script . "?" . rawurlencode($url);
        }
        $items .= "<item rdf:about=\"" . $link_url . "\">\n";
        $items .= " <title>{$title}</title>\n";
        $items .= " <link>" . $link_url . "</link>\n";
        $items .= " <dc:date>{$dcdate}</dc:date>\n";
        $_anon_writable = $anon_writable;
        $anon_writable = 0;
        $desc = convert_html($body, false, false);
        $desc = mb_convert_encoding(mb_substr(strip_htmltag($desc), 0, 250, "EUC-JP"), "UTF-8", "auto");
        $desc = htmlspecialchars($desc);
        $desc = mb_ereg_replace("\n", "", $desc);
        $items .= " <description>{$desc}</description>\n";
        if ($with_content == "true") {
            $src = preg_replace("/\\&weblog_field\\(__EDIT\\,[^\\)]+\\);/m", "", $src);
            $content = convert_html($src, false, false);
            $content = mb_convert_encoding($content, "UTF-8", "auto");
            $content = preg_replace("/\\<input [^\\>]+\\/>(\n)?/ms", "", $content);
            $content = preg_replace("/^(\\s*\n)+/mS", "\n", $content);
            $content = preg_replace("/\\s*\\<br \\/\\>\\s*/mS", "<br />", $content);
            $content = preg_replace("/class\\=\"p\\_right\"/", 'style="text-align:right;"', $content);
            $items .= "<content:encoded>\n<![CDATA[\n";
            $items .= "{$content}\n";
            $items .= "]]>\n</content:encoded>\n";
        }
        $anon_writable = $anon_writable = 0;
        //trackback
        if ($trackback) {
            $dc_identifier = $trackback_ping = '';
            $r_page = rawurlencode($url);
            $tb_id = tb_get_id($url);
            $dc_identifier = " <dc:identifer>{$link_url}</dc:identifer>\n";
            $trackback_ping = " <trackback:ping>{$script}?pwm_ping={$tb_id}</trackback:ping>\n";
            $items .= $dc_identifier . $trackback_ping;
        }
        if ($category != "") {
            $cats = explode(",", $category);
            foreach ($cats as $cat_item) {
                //				$subject = $catpath."/".$cat_item;
                $subject = $cat_item;
                $subject = mb_convert_encoding($subject, "UTF-8", "auto");
                $items .= "<dc:subject>{$subject}</dc:subject>\n";
            }
        }
        $items .= "</item>\n\n";
        $rdf_li .= "<rdf:li rdf:resource=\"" . $link_url . "\" />\n";
    }
    //	header('Content-type: text');
    $r_page = rawurlencode($page);
    echo <<<EOD
<?xml version="1.0" encoding="utf-8"?>

<rdf:RDF 
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
EOD;
    if ($with_content == "true") {
        echo "  xmlns:content=\"http://purl.org/rss/1.0/modules/content/\"\n";
    }
    if ($trackback) {
        echo "  xmlns:trackback=\"http://madskills.com/public/xml/rss/module/trackback/\"\n";
    }
    echo <<<EOD
  xml:lang="ja">
  <channel rdf:about="{$script}?plugin=weblog_rss&amp;config={$conf_name}&amp;content={$with_content}&amp;count={$list_count}">
  <title>{$page_title_utf8}.{$page_add_utf8}</title>
  <link>{$linkpage_url}</link>
  <description>PukiWiki Weblog RecentChanges</description>
  <items>
   <rdf:Seq>
      {$rdf_li}
   </rdf:Seq>
  </items>
 </channel>
 {$items}
</rdf:RDF>
EOD;
    exit;
}
function plugin_weblog_list_convert()
{
    global $script, $vars;
    global $options, $_weblog_msgs;
    if (func_num_args() >= 2) {
        $args = func_get_args();
        $conf_name = array_shift($args);
        $mode = array_shift($args);
    } else {
        $args = array();
    }
    $conf_name = $conf_name;
    $options = weblog_get_options($conf_name, $options);
    if (count($options) == 0) {
        return "[weblog_list]:" . sprintf($_weblog_msgs['err_msg_noconf'], $conf_name);
    }
    // 他のパラメータチェック
    $params = array('count' => FALSE, 'limit' => FALSE, 'reverse' => FALSE, 'month' => FALSE, 'day' => FALSE, 'nonew' => FALSE, '_args' => array(), '_done' => FALSE, 'depth' => FALSE, 'weblog' => FALSE, 'c_prefix' => FALSE, 'relatedcount' => FALSE);
    array_walk($args, 'weblog_viewer_check_arg', &$params);
    if ($params['month']) {
        if (preg_match("/([0-9]{4})-([0-9]{2})/", $params['month'], $m)) {
            if (!checkdate($m[2], 1, $m[1])) {
                return $_weblog_msgs['msg_invalid_param'];
            }
        } else {
            return $_weblog_msgs['msg_invalid_param'];
        }
    }
    if ($params['day']) {
        if (preg_match("/([0-9]{4})-([0-9]{2})-([0-9]{2})/", $params['day'], $m)) {
            if (!checkdate($m[2], $m[3], $m[1])) {
                return $_weblog_msgs['msg_invalid_param'];
            }
        } else {
            return $_weblog_msgs['msg_invalid_param'];
        }
    }
    $prefix = strip_bracket($options['PREFIX']);
    switch (strtolower($mode)) {
        case 'recent':
            $pattern = "{$prefix}/";
            $params['depth'] = 1;
            $params['weblog'] = TRUE;
            $params['reverse'] = TRUE;
            if (!$params['limit']) {
                $params['limit'] = 15;
            }
            break;
        case 'monthlylist':
            $pattern = "{$prefix}/{$params['month']}-";
            $params['depth'] = 1;
            $params['weblog'] = TRUE;
            break;
        case 'dailylist':
            $pattern = "{$prefix}/{$params['day']}-";
            $params['depth'] = 1;
            $params['weblog'] = 'time';
            break;
        case 'monthlyindex':
            $pattern = sprintf(strip_bracket($options['MONTHLY_PREFIX']), $prefix) . "/";
            if ($params['count']) {
                $params['c_prefix'] = "{$prefix}/";
            }
            $params['depth'] = 1;
            break;
        case 'dailyindex':
            if (!$params['month']) {
                $pattern = sprintf(strip_bracket($options['DAILY_PREFIX']), $prefix) . "/";
            } else {
                $pattern = sprintf(strip_bracket($options['DAILY_PREFIX']), $prefix) . "/{$params['month']}";
            }
            if ($params['count']) {
                $params['c_prefix'] = "{$prefix}/";
            }
            $params['depth'] = 1;
            break;
        case 'category':
            $pattern = sprintf(strip_bracket($options['CATEGORY_PREFIX']), $prefix) . "/";
            if ($params['count']) {
                $params['relatedcount'] = TRUE;
            }
            break;
        case 'dailycalendar':
            $pattern = sprintf(strip_bracket($options['DAILY_PREFIX']), $prefix) . "/";
            if (!$params['month']) {
                $params['month'] = date("Y-m");
            }
            if ($params['count']) {
                $params['c_prefix'] = "{$prefix}/";
            }
            return weblog_viewer_show_calendar($pattern, $params);
            break;
        default:
            return $_weblog_msgs['msg_invalid_param'];
    }
    return weblog_viewer_show_lists($pattern, $params);
}
function plugin_weblog_convert()
{
    global $options;
    if (func_num_args() > 0) {
        $args = func_get_args();
    }
    if ($args[0] != "") {
        //コンフィグの読み込み(指定weblog固有)
        $conf_name = $args[0];
        $options = weblog_get_options($conf_name, $options);
    }
    $prefix = strip_bracket($options['PREFIX']);
    if (!edit_auth($prefix, FALSE, FALSE)) {
        return "";
    }
    return plugin_weblog_make_form($conf_name, "new", "", "", "", "");
}
function plugin_weblog_viewer_convert()
{
    global $WikiName, $BracketName, $vars, $get, $post, $hr, $script, $trackback;
    global $anon_writable, $wiki_user_dir;
    global $comment_no, $h_excerpt, $digest;
    global $options, $_weblog_msgs, $_msg_week;
    //*引数の確認
    if (func_num_args() >= 2) {
        $func_vars_array = func_get_args();
        $params = call_user_func_array("plugin_weblog_viewer_check_args", $func_vars_array);
        if (count($params) <= 1) {
            return "[weblog_viewer]:{$_weblog_msgs['err_msg_arg2']}";
        }
    } else {
        return "[weblog_viewer]:{$_weblog_msgs['err_msg_noargs']}";
    }
    foreach ($params as $param_key => $param_val) {
        ${$param_key} = $param_val;
    }
    $conf_name = $params['conf_name'];
    $options = weblog_get_options($conf_name, $options);
    if (count($options) == 0) {
        return "[weblog_viewer]:" . sprintf($_weblog_msgs['err_msg_noconf'], $conf_name);
    }
    $pagename = strip_bracket($options['PREFIX']);
    //*一覧表示するページ名とファイル名のパターン ファイル名には年月を含む
    if ($pagename == "") {
        //pagename無しのyyyy-mm-ddに対応するための処理
        $pagepattern = "";
        $pagepattern_len = 0;
        $filepattern = $page_YM;
        $filepattern_len = strlen($filepattern);
    } else {
        $pagepattern = strip_bracket($pagename) . '/';
        $pagepattern_len = strlen($pagepattern);
        $filepattern = $pagepattern . $page_YM;
        $filepattern_len = strlen($filepattern);
    }
    //*ページリストの取得
    $pagelist = array();
    $datelength = 10;
    foreach (get_existpages_db(false, $filepattern) as $page) {
        //$pageがカレンダー形式なのかチェック デフォルトでは、 yyyy-mm-dd-HHMMSS-([1-9])?
        $page = strip_bracket($page);
        if (plugin_weblog_viewer_isValidDate(substr($page, $pagepattern_len)) == false) {
            continue;
        }
        //*mode毎に別条件ではじく
        //past modeでは未来のページはNG
        if (substr($page, $pagepattern_len, $datelength) > date("Y-m-d") && $mode == "past") {
            continue;
        }
        //future modeでは過去のページはNG
        if (substr($page, $pagepattern_len, $datelength) < date("Y-m-d") && $mode == "future") {
            continue;
        }
        //view modeならall OK
        if (strlen(substr($page, $pagepattern_len)) == $datelength) {
            $pagelist[] = $page . "--";
        } else {
            $pagelist[] = $page;
        }
    }
    //ナビバー作成ここから
    $enc_pagename = rawurlencode(substr($pagepattern, 0, $pagepattern_len - 1));
    if ($page_YM != "") {
        //年月表示時
        $this_year = substr($page_YM, 0, 4);
        $this_month = substr($page_YM, 5, 2);
        //次月
        $next_year = $this_year;
        $next_month = $this_month + 1;
        if ($next_month > 12) {
            $next_year++;
            $next_month = 1;
        }
        $next_YM_T = $next_YM = 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_T = $prev_YM = sprintf("%04d-%02d", $prev_year, $prev_month);
        if ($cal2 == 1) {
            $prev_YM = sprintf("%04d%02d", $prev_year, $prev_month);
        }
        if ($mode == "past") {
            $right_YM = $prev_YM;
            $right_text = $prev_YM_T . "&gt;&gt;";
            $left_YM = $next_YM;
            $left_text = "&lt;&lt;" . $next_YM_T;
        } else {
            $left_YM = $prev_YM;
            $left_text = "&lt;&lt;" . $prev_YM_T;
            $right_YM = $next_YM;
            $right_text = $next_YM_T . "&gt;&gt;";
        }
    } else {
        //n件表示時
        if ($limit_base + $limit_pitch >= count($pagelist)) {
            $right_YM = "";
        } else {
            $right_base = $limit_base + $limit_pitch;
            $right_YM = $right_base . "*" . $limit_pitch;
            $right_text = "次の" . $limit_pitch . "件&gt;&gt;";
        }
        $left_base = $limit_base - $limit_pitch;
        if ($left_base >= 0) {
            $left_YM = $left_base . "*" . $limit_pitch;
            $left_text = "&lt;&lt;前の" . $limit_pitch . "件";
        } else {
            $left_YM = "";
        }
    }
    //リンク作成
    $_conf = rawurlencode($conf_name);
    if ($left_YM != "") {
        $left_link = "<a href=\"" . $script . "?plugin=weblog_viewer&amp;conf=" . $_conf . "&amp;date=" . $left_YM . "&amp;mode=" . $mode . "\">" . $left_text . "</a>";
    } else {
        $left_link = "";
    }
    if ($right_YM != "") {
        $right_link = "<a href=\"" . $script . "?plugin=weblog_viewer&amp;conf=" . $_conf . "&amp;date=" . $right_YM . "&amp;mode=" . $mode . "\">" . $right_text . "</a>";
    } else {
        $right_link = "";
    }
    //past modeは<<新 旧>> 他は<<旧 新>>
    $pageurl = $script . "?" . rawurlencode("[[" . strip_bracket($pagename) . "]]");
    $navi_bar .= "<table width =\"100%\" class=\"style_calendar_navi\"><tr><td align=\"left\" width=\"33%\">";
    $navi_bar .= $left_link;
    $navi_bar .= "</td><td align=\"center\" width=\"34%\">";
    $navi_bar .= make_pagelink($pagename, $options['NAME']);
    $navi_bar .= "</td><td align=\"right\" width=\"33%\">";
    $navi_bar .= $right_link;
    $navi_bar .= "</td></tr></table>";
    //ナビバー作成ここまで
    //*ここからインクルード開始
    //変数値退避
    $tmppage = $vars["page"];
    $_comment_no = $comment_no;
    $_h_excerpt = $h_excerpt;
    $_digest = $digest;
    //$tmp_related = $related;
    $return_body = "";
    //ナビバー
    $return_body .= $navi_bar;
    //まずソート
    if ($mode == "past") {
        //past modeでは新→旧
        rsort($pagelist);
    } else {
        //view mode と future mode では、旧→新
        sort($pagelist);
    }
    //$limit_pageの件数までインクルード
    $template_sources = weblog_load_template($conf_name, "list");
    if ($template_sources == FALSE) {
        return "[weblog_viewer]:" . sprintf($_weblog_msgs['err_msg_notemplate'], "{$conf_name}/list");
    }
    $tmp = $limit_base;
    $kensu = 0;
    $date_str = "";
    while ($tmp < $limit_page) {
        if (!isset($pagelist[$tmp])) {
            break;
        }
        $pagelist[$tmp] = preg_replace("/{-}-\$/", "", $pagelist[$tmp]);
        $page = "[[" . $pagelist[$tmp] . "]]";
        $vars["page"] = $post["page"] = $get["page"] = $page;
        //comment_no 初期化
        $comment_no = 0;
        $weblog_content = '';
        $content_flg = FALSE;
        $sources = get_source($page);
        $src = "";
        foreach ($sources as $source) {
            $src .= "{$source}";
        }
        $sources = $src;
        $w_author = "";
        if (preg_match("/(\\&weblog_field\\(__AUTHOR\\)\\{[^}]*\\}\\;)/mS", $sources, $match)) {
            $w_author = $match[1];
        }
        $w_timestamp = "";
        if (preg_match("/(\\&weblog_field\\(__TIMESTAMP\\)\\{[0-9]+\\}\\;)/m", $sources, $match)) {
            $w_timestamp = $match[1];
        }
        $w_subject = "";
        if (preg_match("/(\\&weblog_field\\(__SUBJECT\\)\\{[^}]+\\}\\;)/m", $sources, $match)) {
            $w_subject = $match[1];
        }
        $w_category = "";
        if (preg_match("/(\\&weblog_field\\(__CATEGORY,[^\\)]+\\)\\{[^}]+\\}\\;((\\[ )?\\[\\[.*\\]\\]( \\])?)+)/m", $sources, $match)) {
            $w_category = $match[1];
        }
        $w_edit = "";
        if (preg_match("/(\\&weblog_field\\(__EDIT\\)\\{[^}]+\\}\\;)/m", $sources, $match)) {
            $w_edit = $match[1];
        }
        $w_body = "";
        if (preg_match("/(#weblog_field\\(__BODY\\,Start\\)\\s*\n.*\n#weblog_field\\(__BODY\\,End\\)\n)/ms", $sources, $match)) {
            $w_body = $match[1];
        }
        $cmt_page = sprintf(strip_bracket($options['COMMENT_PREFIX']), strip_bracket($page));
        $count_of_page = plugin_weblog_viewer_comment_count($cmt_page);
        if (!$count_of_page) {
            $w_comment = "[ [[" . $_weblog_msgs['lbl_comment'] . "(0)>" . $page . "]] ]";
        } else {
            $w_comment = "[ [[" . $_weblog_msgs['lbl_comment'] . "({$count_of_page})>" . $cmt_page . "]] ]";
        }
        $w_trackback = "";
        if ($trackback) {
            //[[name>URL]]って使い方は正しいのかなぁ?本来は[[name:URL]]だけどこの場合は別Window表示になるし・・・
            //とりあえず、結果オーライで使ってみよう。
            $w_trackback = "[ [[TracBack(" . tb_count($page) . ")>{$script}?plugin=tb&__mode=view&tb_id=" . tb_get_id($page) . "]] ]";
        }
        $w_sources = $template_sources;
        $w_sources = preg_replace("/\\[__SUBJECT\\]/", $w_subject, $w_sources);
        $w_sources = preg_replace("/\\[__AUTHOR\\]/", $w_author, $w_sources);
        $w_sources = preg_replace("/\\[__TIMESTAMP\\]/", $w_timestamp, $w_sources);
        $w_sources = preg_replace("/\\[__BODY\\]/", $w_body, $w_sources);
        $w_sources = preg_replace("/\\[__CATEGORY\\]/", $w_category, $w_sources);
        $w_sources = preg_replace("/\\[__COMMENTCOUNT\\]/", $w_comment, $w_sources);
        $w_sources = preg_replace("/\\[__TRACKBACKCOUNT\\]/", $w_trackback, $w_sources);
        $weblog_content = convert_html($w_sources, false, false);
        if (!is_freeze($page, FALSE)) {
            $_page = preg_replace("/(.*\\/)?([0-9\\-]+)\$/", "\\2", strip_bracket($vars['page']));
            $edit_tag = "<a href=\"{$script}?plugin=weblog&mode=edit&conf={$conf_name}&page_name={$_page}\">";
            $edit_tag .= "<img src=\"image/edit.png\" alt=\"Edit\" title=\"Edit\" /></a>";
            $weblog_content = preg_replace("/\\[__EDIT\\]/", $edit_tag, $weblog_content);
        } else {
            $weblog_content = preg_replace("/\\[__EDIT\\]/", "", $weblog_content);
        }
        $body = "<div class=\"style_calendar_body\">" . $weblog_content . "</div>";
        if (ereg("([0-9]{4})-([0-9]{2})-([0-9]{2})-([0-9]{3})", $page, $match)) {
            $date0 = mktime(0, 0, 0, $match[2], $match[3], $match[1]);
            $date_str0 = date($_weblog_msgs['fmt_fullday'], $date0);
        }
        $date_str0 .= "(" . $_msg_week[date("w", $date0)] . ")";
        if ($date_str != $date_str0) {
            $date_str = $date_str0;
            if (ereg("(.*[0-9]{4}-[0-9]{2}-[0-9]{2})", strip_bracket($page), $match)) {
                $day_page = ":Weblog/Daily/" . $match[1];
            }
            $head = "<div class = \"style_calendar_date\">" . make_pagelink($day_page, $date_str) . "</div>\n";
        } else {
            $head = "";
        }
        $return_body .= $head . $body;
        $tmp++;
        $kensu++;
    }
    //表示データがあったらナビバー表示
    if ($kensu) {
        $return_body .= $navi_bar;
    }
    $vars["page"] = $post["page"] = $get["page"] = $tmppage;
    $comment_no = $_comment_no;
    $h_excerpt = $_h_excerpt;
    $digest = $_digest;
    return $return_body;
}