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&config={$conf_name}&content={$with_content}&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 . ">>"; $left_YM = $next_YM; $left_text = "<<" . $next_YM_T; } else { $left_YM = $prev_YM; $left_text = "<<" . $prev_YM_T; $right_YM = $next_YM; $right_text = $next_YM_T . ">>"; } } 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 . "件>>"; } $left_base = $limit_base - $limit_pitch; if ($left_base >= 0) { $left_YM = $left_base . "*" . $limit_pitch; $left_text = "<<前の" . $limit_pitch . "件"; } else { $left_YM = ""; } } //リンク作成 $_conf = rawurlencode($conf_name); if ($left_YM != "") { $left_link = "<a href=\"" . $script . "?plugin=weblog_viewer&conf=" . $_conf . "&date=" . $left_YM . "&mode=" . $mode . "\">" . $left_text . "</a>"; } else { $left_link = ""; } if ($right_YM != "") { $right_link = "<a href=\"" . $script . "?plugin=weblog_viewer&conf=" . $_conf . "&date=" . $right_YM . "&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; }