function sbm_make($cmd, &$info) { global $vars, $_sbm_msg; $title = rawurlencode($vars['page']); $link = get_page_absuri($vars['page']); $rlink = rawurlencode($link); $rtlink = rawurlencode(get_script_absuri() . '?') . $title; // url switch ($cmd) { case 'twitter': if (exist_plugin_inline('bitly')) { $val = bitly_convert('shorten', $link); $rlink = !$val['rc'] ? 'N/A' : $val['msg']; $url = str_replace('$link', $rlink, $info['url']); } else { $url = $info['url']; } break; default: $url = $info['url']; } $width = empty($info['width']) ? '16' : $info['width']; $height = empty($info['height']) ? '16' : $info['height']; $msg_alt = isset($info['msg']) ? $info['msg'] : 'msg_alt'; $alt = sprintf($_sbm_msg[$msg_alt], $info['name']); // img switch ($cmd) { case 'yahoo_jp_entry': $img = str_replace('$rlink', $link, $info['img']); break; case 'livedoor_entry': $img = str_replace('$link', $link, $info['img']); $alt = ''; break; default: $img = $info['img']; } // Conversion processing $url = str_replace('$title', $title, $url); $url = str_replace('$link', $link, $url); $url = str_replace('$rlink', $rlink, $url); $url = str_replace('$rtlink', $rtlink, $url); $retval = <<<EOD <a href="{$url}"> <img src="{$img}" width="{$width}" height="{$height}" style="border: none;" alt="{$alt}" title="{$alt}" /> </a> EOD; switch ($cmd) { case 'hatena_entry': $retval .= '<img src="http://b.hatena.ne.jp/entry/image/' . $link . '" alt="counter"/>'; } return $retval; }
function plugin_rss_generate_item($version, $time, $page) { $r_page = rawurlencode($page); $url = get_page_absuri($page); $title = mb_convert_encoding($page, 'UTF-8', SOURCE_ENCODING); switch ($version) { default: case '0.91': /* FALLTHROUGH */ /* FALLTHROUGH */ case '2.0': $date = get_date('D, d M Y H:i:s T', $time); $date = $version == '0.91' ? '<description>' . $date . '</description>' : '<pubDate>' . $date . '</pubDate>'; $ret = <<<EOD \t\t<item> \t\t\t<title>{$title}</title> \t\t\t<link>{$url}</link> \t\t\t{$date} \t\t</item> EOD; break; case '1.0': // Add <item> into <items> $rdf_li .= ' <rdf:li rdf:resource="' . $url . '" />' . "\n"; $date = substr_replace(get_date('Y-m-d\\TH:i:sO', $time), ':', -2, 0); $trackback_ping = ''; if ($trackback) { $tb_id = md5($r_page); $trackback_ping = '<trackback:ping rdf:resource="' . "{$self}?tb_id={$tb_id}" . '"/>'; } $ret = <<<EOD \t\t<item rdf:about="{$url}"> \t\t\t<title>{$title}</title> \t\t\t<link>{$url}</link> \t\t\t<dc:date>{$date}</dc:date> \t\t\t<dc:identifier>{$url}</dc:identifier> \t\t\t{$trackback_ping} \t\t</item> EOD; break; } return $ret; }
function plugin_article_action() { global $vars, $cols, $rows, $now; global $_plugin_article_mailto, $_no_subject, $_no_name; global $_article_msg, $_string; // if (PKWK_READONLY) die_message('PKWK_READONLY prohibits editing'); if (Auth::check_role('readonly')) { die_message($_string['error_prohibit']); } if (!isset($vars['msg']) || !isset($vars['refer'])) { return array('msg' => null, 'body' => null); } $name = !isset($vars['name']) ? $_no_name : $vars['name']; $name = empty($name) ? '' : str_replace('$name', $name, PLUGIN_ARTICLE_NAME_FORMAT); $subject = !isset($vars['subject']) ? $_no_subject : $vars['subject']; $subject = empty($subject) ? '' : str_replace('$subject', $subject, PLUGIN_ARTICLE_SUBJECT_FORMAT); $ret[] = $subject; $ret[] = '>' . $name . ' (&epoch(' . UTIME . ');)~'; $ret[] = '~'; $msg = rtrim($vars['msg']); if (PLUGIN_ARTICLE_AUTO_BR) { //改行の取り扱いはけっこう厄介。特にURLが絡んだときは… //コメント行、整形済み行には~をつけないように arino $msg = join("\n", preg_replace('/^(?!\\/\\/)(?!\\s)(.*)$/', '$1~', explode("\n", $msg))); } $ret[] = $msg . "\n\n" . '//'; if (PLUGIN_ARTICLE_COMMENT) { $ret[] = ''; $ret[] = '#comment'; } $postdata = array(); $wiki = Factory::Wiki($vars['refer']); $vars['page'] = $vars['refer']; $article_no = 0; foreach ($wiki->get() as $line) { if (!PLUGIN_ARTICLE_INS) { $postdata[] = $line; } if (preg_match('/^#article/i', $line)) { if ($article_no === $vars['article_no'] && !empty($vars['msg'])) { $postdata[] = join("\n", $ret); } ++$article_no; } if (PLUGIN_ARTICLE_INS) { $postdata[] = $line; } } $postdata[] = join("\n", $ret); $body = ''; $wiki->set($postdata); // 投稿内容のメール自動送信 if (PLUGIN_ARTICLE_MAIL_AUTO_SEND) { $mailaddress = implode(',', $_plugin_article_mailto); $mailsubject = PLUGIN_ARTICLE_MAIL_SUBJECT_PREFIX . ' ' . str_replace('**', '', $subject); if ($post['name']) { $mailsubject .= '/' . $post['name']; } $mailsubject = mb_encode_mimeheader($mailsubject); $mailbody = array(); $mailbody[] = $post['msg']; $mailbody[] = "\n" . '---'; $mailbody[] = $_article_msg['msg_article_mail_sender'] . $post['name'] . ' (' . $now . ')'; $mailbody[] = $_article_msg['msg_article_mail_page'] . $post['refer']; $mailbody[] = 'URL: ' . get_page_absuri($post['refer']); $output = mb_convert_encoding(join("\n", $mailbody), 'JIS'); $mailaddheader = 'From: ' . PLUGIN_ARTICLE_MAIL_FROM; mail($mailaddress, $mailsubject, $mailbody, $mailaddheader); } $retvars['msg'] = $_article_msg['title_updated']; $retvars['body'] = $body; return $retvars; }
function file_write($dir, $page, $str, $notimestamp = FALSE) { global $update_exec; global $notify, $notify_diff_only, $notify_subject; global $notify_exclude; global $whatsdeleted, $maxshow_deleted; global $_string; // if (PKWK_READONLY) return; // Do nothing if (auth::check_role('readonly')) { return; } // Do nothing if ($dir != DATA_DIR && $dir != DIFF_DIR) { die('file_write(): Invalid directory'); } $page = strip_bracket($page); $file = $dir . encode($page) . '.txt'; $file_exists = file_exists($file); // ---- // Delete? if ($dir == DATA_DIR && $str === '') { // Page deletion if (!$file_exists) { return; } // Ignore null posting for DATA_DIR // Update RecentDeleted (Add the $page) add_recent($page, $whatsdeleted, '', $maxshow_deleted); // Remove the page unlink($file); // Update RecentDeleted, and remove the page from RecentChanges lastmodified_add($whatsdeleted, $page); // Clear is_page() cache is_page($page, TRUE); return; } else { if ($dir == DIFF_DIR && $str === " \n") { return; // Ignore null posting for DIFF_DIR } } // ---- // File replacement (Edit) if (!is_pagename($page)) { die_message(str_replace('$1', htmlspecialchars($page), str_replace('$2', 'WikiName', $_msg_invalidiwn))); } $str = rtrim(preg_replace('/' . "\r" . '/', '', $str)) . "\n"; $timestamp = $file_exists && $notimestamp ? filemtime($file) : FALSE; $fp = fopen($file, 'a') or die('fopen() failed: ' . htmlspecialchars(basename($dir) . '/' . encode($page) . '.txt') . '<br />' . "\n" . 'Maybe permission is not writable or filename is too long'); set_file_buffer($fp, 0); @flock($fp, LOCK_EX); $last = ignore_user_abort(1); ftruncate($fp, 0); rewind($fp); fputs($fp, $str); ignore_user_abort($last); @flock($fp, LOCK_UN); fclose($fp); if ($timestamp) { pkwk_touch_file($file, $timestamp); } // Optional actions if ($dir == DATA_DIR) { if ($timestamp === FALSE) { lastmodified_add($page); } // Command execution per update if (defined('PKWK_UPDATE_EXEC') && PKWK_UPDATE_EXEC) { system(PKWK_UPDATE_EXEC . ' > /dev/null &'); } elseif ($update_exec) { system($update_exec . ' > /dev/null &'); } } else { if ($dir == DIFF_DIR && $notify) { $notify_exec = TRUE; foreach ($notify_exclude as $exclude) { $exclude = preg_quote($exclude); if (substr($exclude, -1) == '.') { $exclude = $exclude . '*'; } if (preg_match('/^' . $exclude . '/', $_SERVER["REMOTE_ADDR"])) { $notify_exec = FALSE; break; } } if ($notify_exec !== FALSE) { if ($notify_diff_only) { $str = preg_replace('/^[^-+].*\\n/m', '', $str); } $summary['ACTION'] = 'Page update'; $summary['PAGE'] =& $page; $summary['URI'] = get_page_absuri($page); $summary['USER_AGENT'] = TRUE; $summary['REMOTE_ADDR'] = TRUE; pkwk_mail_notify($notify_subject, $str, $summary); // pkwk_mail_notify($notify_subject, $str, $summary) or // die('pkwk_mail_notify(): Failed'); } } } is_page($page, TRUE); // Clear is_page() cache }
function plugin_rss_action() { global $vars, $rss_max, $rss_description, $page_title, $whatsnew, $trackback; $version = isset($vars['ver']) ? $vars['ver'] : ''; switch ($version) { case '': $version = '0.91'; break; // Default // Default case '1': $version = '1.0'; break; // Sugar // Sugar case '2': $version = '2.0'; break; // Sugar // Sugar case '0.91': /* FALLTHROUGH */ /* FALLTHROUGH */ case '1.0': /* FALLTHROUGH */ /* FALLTHROUGH */ case '2.0': break; default: die('Invalid RSS version!!'); } $recent = CACHE_DIR . PKWK_MAXSHOW_CACHE; if (!file_exists($recent)) { die('PKWK_MAXSHOW_CACHE is not found'); } $lang = LANG; $page_title_utf8 = mb_convert_encoding($page_title, 'UTF-8', SOURCE_ENCODING); $self = get_script_absuri(); $rss_description_utf8 = mb_convert_encoding(htmlspecialchars($rss_description), 'UTF-8', SOURCE_ENCODING); // Creating <item> $items = $rdf_li = ''; foreach (file_head($recent, $rss_max) as $line) { list($time, $page) = explode("\t", rtrim($line)); $r_page = rawurlencode($page); $url = get_page_absuri($page); $title = mb_convert_encoding($page, 'UTF-8', SOURCE_ENCODING); switch ($version) { case '0.91': /* FALLTHROUGH */ /* FALLTHROUGH */ case '2.0': $date = get_date('D, d M Y H:i:s T', $time); $date = $version == '0.91' ? ' <description>' . $date . '</description>' : ' <pubDate>' . $date . '</pubDate>'; $items .= <<<EOD <item> <title>{$title}</title> <link>{$url}</link> {$date} </item> EOD; break; case '1.0': // Add <item> into <items> $rdf_li .= ' <rdf:li rdf:resource="' . $url . '" />' . "\n"; $date = substr_replace(get_date('Y-m-d\\TH:i:sO', $time), ':', -2, 0); $trackback_ping = ''; if ($trackback) { $tb_id = md5($r_page); $trackback_ping = ' <trackback:ping rdf:resource="' . "{$self}?tb_id={$tb_id}" . '"/>'; } $items .= <<<EOD <item rdf:about="{$url}"> <title>{$title}</title> <link>{$url}</link> <dc:date>{$date}</dc:date> <dc:identifier>{$url}</dc:identifier> {$trackback_ping} </item> EOD; break; } } // Feeding start pkwk_common_headers(); header('Content-type: application/xml'); print '<?xml version="1.0" encoding="UTF-8"?>' . "\n\n"; $url_whatsnew = get_page_absuri($whatsnew); switch ($version) { case '0.91': print '<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN"' . ' "http://my.netscape.com/publish/formats/rss-0.91.dtd">' . "\n"; /* FALLTHROUGH */ /* FALLTHROUGH */ case '2.0': print <<<EOD <rss version="{$version}"> <channel> <title><![CDATA[{$page_title_utf8}]]></title> <link>{$url_whatsnew}</link> <description><![CDATA[{$rss_description_utf8}]]></description> <language>{$lang}</language> {$items} </channel> </rss> EOD; break; case '1.0': $xmlns_trackback = $trackback ? ' xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"' : ''; print <<<EOD <rdf:RDF xmlns:dc="http://purl.org/dc/elements/1.1/" {$xmlns_trackback} xmlns="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xml:lang="{$lang}"> <channel rdf:about="{$url_whatsnew}"> <title><![CDATA[{$page_title_utf8}]]></title> <link>{$url_whatsnew}</link> <description><![CDATA[{$rss_description_utf8}]]></description> <items> <rdf:Seq> {$rdf_li} </rdf:Seq> </items> </channel> {$items} </rdf:RDF> EOD; break; } exit; }
function catbody($title, $page, $body) { global $script; // MUST BE SKIN.FILE. Do not delete line. global $vars, $arg, $defaultpage, $whatsnew, $help_page, $hr; global $attach_link, $related_link, $function_freeze; global $search_word_color, $foot_explain, $note_hr, $head_tags, $foot_tags; global $trackback, $referer, $javascript; global $newtitle, $newbase, $language, $use_local_time; // Plus! skin extension global $nofollow; global $_LANG, $_LINK, $_IMAGE; global $pkwk_dtd; // XHTML 1.1, XHTML1.0, HTML 4.01 Transitional... global $page_title; // Title of this site global $do_backup; // Do backup or not global $modifier; // Site administrator's web page global $modifierlink; // Site administrator's name global $skin_file, $menubar, $sidebar; global $_string; if (!defined('SKIN_FILE') || !file_exists(SKIN_FILE) || !is_readable(SKIN_FILE)) { if (!file_exists($skin_file) || !is_readable($skin_file)) { die_message(SKIN_FILE . '(skin file) is not found.'); } else { define('SKIN_FILE', $skin_file); } } $_LINK = $_IMAGE = array(); // Add JavaScript header when ... if (!PKWK_ALLOW_JAVASCRIPT) { unset($javascript); } $_page = isset($vars['page']) ? $vars['page'] : ''; $r_page = rawurlencode($_page); // Set $_LINK for skin $_LINK['add'] = get_cmd_uri('add', $_page); $_LINK['backup'] = get_cmd_uri('backup', $_page); $_LINK['brokenlink'] = get_cmd_uri('brokenlink', $_page); $_LINK['copy'] = get_cmd_uri('template', '', '', 'refer=' . $r_page); $_LINK['diff'] = get_cmd_uri('diff', $_page); $_LINK['edit'] = get_cmd_uri('edit', $_page); $_LINK['guiedit'] = get_cmd_uri('guiedit', $_page); $_LINK['filelist'] = get_cmd_uri('filelist'); $_LINK['freeze'] = get_cmd_uri('freeze', $_page); $_LINK['help'] = get_cmd_uri('help'); $_LINK['linklist'] = get_cmd_uri('linklist', $_page); $_LINK['list'] = get_cmd_uri('list'); $_LINK['log_login'] = get_cmd_uri('logview', '', '', 'kind=login'); $_LINK['log_browse'] = get_cmd_uri('logview', $_page, '', 'kind=browse'); $_LINK['log_update'] = get_cmd_uri('logview', $_page); $_LINK['log_down'] = get_cmd_uri('logview', $_page, '', 'kind=download'); $_LINK['log_check'] = get_cmd_uri('logview', $_page, '', 'kind=check'); $_LINK['menu'] = get_page_uri($menubar); $_LINK['new'] = get_cmd_uri('newpage', '', '', 'refer=' . $r_page); $_LINK['newsub'] = get_cmd_uri('newpage_subdir', '', '', 'directory=' . $r_page); $_LINK['print'] = get_cmd_uri('print', $_page); $_LINK['full'] = get_cmd_uri('print', $_page) . '&nohead&nofoot'; $_LINK['read'] = get_page_uri($_page); $_LINK['recent'] = get_page_uri($whatsnew); $_LINK['refer'] = get_cmd_uri('referer', $_page); $_LINK['reload'] = get_page_absuri($_page); // 本当は、get_script_uri でいいけど、絶対パスでないと、スキンに影響が出る $_LINK['reload_rel'] = get_page_uri($_page); $_LINK['rename'] = get_cmd_uri('rename', '', '', 'refer=' . $r_page); $_LINK['skeylist'] = get_cmd_uri('skeylist', $_page); $_LINK['search'] = get_cmd_uri('search'); $_LINK['side'] = get_page_uri($sidebar); $_LINK['source'] = get_cmd_uri('source', $_page); $_LINK['template'] = get_cmd_uri('template', '', '', 'refer=' . $r_page); $_LINK['top'] = get_page_uri($defaultpage); if ($trackback) { $tb_id = tb_get_id($_page); $_LINK['trackback'] = get_cmd_uri('tb', '', '', '__mode=view&tb_id=' . $tb_id); } $_LINK['unfreeze'] = get_cmd_uri('unfreeze', $_page); $_LINK['upload'] = get_cmd_uri('attach', $_page, '', 'pcmd=upload'); // link rel="alternate" にも利用するため absuri にしておく $_LINK['rdf'] = get_cmd_absuri('rss', '', 'ver=1.0'); $_LINK['rss'] = get_cmd_absuri('rss'); $_LINK['rss10'] = get_cmd_absuri('rss', '', 'ver=1.0'); // Same as 'rdf' $_LINK['rss20'] = get_cmd_absuri('rss', '', 'ver=2.0'); $_LINK['mixirss'] = get_cmd_absuri('mixirss'); // Same as 'rdf' for mixi // Compat: Skins for 1.4.4 and before $link_add =& $_LINK['add']; $link_backup =& $_LINK['backup']; $link_brokenlink =& $_LINK['brokenlink']; $link_template =& $_LINK['copy']; $link_diff =& $_LINK['diff']; $link_edit =& $_LINK['edit']; $link_guiedit =& $_LINK['guiedit']; $link_filelist =& $_LINK['filelist']; $link_freeze =& $_LINK['freeze']; $link_help =& $_LINK['help']; $link_linklist =& $_LINK['linklist']; $link_list =& $_LINK['list']; $link_log_login =& $_LINK['log_login']; $link_log_browse =& $_LINK['log_browse']; $link_log_update =& $_LINK['log_update']; $link_log_down =& $_LINK['log_down']; $link_log_check =& $_LINK['log_check']; $link_menu =& $_LINK['menu']; $link_new =& $_LINK['new']; $link_newsub =& $_LINK['newsub']; $link_print =& $_LINK['print']; $link_full =& $_LINK['full']; $link_read =& $_LINK['read']; $link_whatsnew =& $_LINK['recent']; $link_refer =& $_LINK['refer']; $link_reload =& $_LINK['reload']; $link_reload_rel =& $_LINK['reload_rel']; $link_rename =& $_LINK['rename']; $link_skeylist =& $_LINK['skeylist']; $link_search =& $_LINK['search']; $link_side =& $_LINK['side']; $link_source =& $_LINK['source']; $link_top =& $_LINK['top']; if ($trackback) { $link_trackback =& $_LINK['trackback']; } $link_unfreeze =& $_LINK['unfreeze']; $link_upload =& $_LINK['upload']; // $link_rdf =& $_LINK['rdf']; $link_rss =& $_LINK['rss']; $link_rss10 =& $_LINK['rss10']; $link_rss20 =& $_LINK['rss20']; $link_mixirss =& $_LINK['mixirss']; // Init flags $is_page = is_pagename($_page) && !arg_check('backup') && !is_cantedit($_page); $is_read = arg_check('read') && is_page($_page); $is_freeze = is_freeze($_page); // Last modification date (string) of the page $lastmodified = $is_read ? get_date('D, d M Y H:i:s T', get_filetime($_page)) . ' ' . get_pg_passage($_page, FALSE) : ''; // List of attached files to the page $attaches = ''; if ($attach_link && $is_read && exist_plugin_action('attach')) { if (do_plugin_init('attach') !== FALSE) { $attaches = attach_filelist(); } } // List of related pages $related = $related_link && $is_read ? make_related($_page) : ''; // List of footnotes ksort($foot_explain, SORT_NUMERIC); $notes = !empty($foot_explain) ? $note_hr . join("\n", $foot_explain) : ''; // Tags will be inserted into <head></head> $head_tag = !empty($head_tags) ? join("\n", $head_tags) . "\n" : ''; $foot_tag = !empty($foot_tags) ? join("\n", $foot_tags) . "\n" : ''; // 1.3.x compat // Last modification date (UNIX timestamp) of the page $fmt = $is_read ? get_filetime($_page) : 0; // Search words if ($search_word_color && isset($vars['word'])) { $body = '<div class="small">' . $_string['word'] . htmlspecialchars($vars['word']) . '</div>' . $hr . "\n" . $body; // BugTrack2/106: Only variables can be passed by reference from PHP 5.0.5 $words = preg_split('/\\s+/', $vars['word'], -1, PREG_SPLIT_NO_EMPTY); $words = array_splice($words, 0, 10); // Max: 10 words $words = array_flip($words); $keys = array(); foreach ($words as $word => $id) { $keys[$word] = strlen($word); } arsort($keys, SORT_NUMERIC); $keys = get_search_words(array_keys($keys), TRUE); $id = 0; foreach ($keys as $key => $pattern) { $s_key = htmlspecialchars($key); $pattern = '/' . '<textarea[^>]*>.*?<\\/textarea>' . '|' . '<[^>]*>' . '|' . '&[^;]+;' . '|' . '(' . $pattern . ')' . '/sS'; $decorate_Nth_word = create_function('$matches', 'return (isset($matches[1])) ? ' . '\'<strong class="word' . $id . '">\' . $matches[1] . \'</strong>\' : ' . '$matches[0];'); $body = preg_replace_callback($pattern, $decorate_Nth_word, $body); $notes = preg_replace_callback($pattern, $decorate_Nth_word, $notes); ++$id; } } // Compat: 'HTML convert time' without time about MenuBar and skin $taketime = elapsedtime(); require SKIN_FILE; }
/** * 削除する */ public function delete($pass) { global $notify, $notify_subject; if ($this->status['freeze']) { // ここではチェックしない return false; } // TODO if (Auth::check_role('role_contents_admin') && !Auth::login($pass)) { if (self::DELETE_ADMIN_ONLY || $this->age) { return attach_info('err_adminpass'); } else { if (self::PASSWORD_REQUIRE && md5($pass) !== $this->status['pass']) { return attach_info('err_password'); } } } if ($this->age !== 0) { // 世代が指定されている場合は削除する unlink($this->basename . '.' . $this->age); } else { // バックアップ do { $age = ++$this->status['age']; } while (file_exists($this->basename . '.' . $this->age)); // 世代を加算してリネーム if (!rename($this->basename, $this->basename . '.' . $this->age)) { // リネーム失敗? return false; } } $this->status['count'][$this->age] = $this->status['count'][0]; $this->status['count'][0] = 0; $this->updateStatus(); // ページのタイムスタンプを更新 $wiki = Factory::Wiki($this->page); if ($wiki->has()) { $wiki->touch(); } if ($notify) { $footer['ACTION'] = 'File deleted'; $footer['FILENAME'] =& $this->file; $footer['PAGE'] =& $this->page; $footer['URI'] = get_page_absuri($this->page); $footer['USER_AGENT'] = TRUE; $footer['REMOTE_ADDR'] = TRUE; pkwk_mail_notify($notify_subject, "\n", $footer) or Utility::dieMessage('pkwk_mail_notify(): Failed'); } return true; }
function plugin_tb_mode_rss($tb_id) { global $vars, $entity_pattern, $language; $page = tb_id2page($tb_id); if ($page === FALSE) { return FALSE; } $items = ''; foreach (tb_get(tb_get_filename($page)) as $arr) { // _utime_, title, excerpt, _blog_name_ array_shift($arr); // Cut utime list($url, $title, $excerpt) = array_map(create_function('$a', 'return htmlspecialchars($a);'), $arr); $items .= <<<EOD <item> <title>{$title}</title> <link>{$url}</link> <description>{$excerpt}</description> </item> EOD; } $title = htmlspecialchars($page); $link = get_page_absuri($page); $vars['page'] = $page; $excerpt = strip_htmltag(convert_html(get_source($page))); $excerpt = preg_replace("/&{$entity_pattern};/", '', $excerpt); $excerpt = mb_strimwidth(preg_replace("/[\r\n]/", ' ', $excerpt), 0, 255, '...'); $lang = $language; $rc = <<<EOD <?xml version="1.0" encoding="utf-8" ?> <response> <error>0</error> <rss version="0.91"> <channel> <title>{$title}</title> <link>{$link}</link> <description>{$excerpt}</description> <language>{$lang}</language>{$items} </channel> </rss> </response> EOD; // ToDo: response encoding must equal request encoding.(from trackback reference.) pkwk_common_headers(); header('Content-Type: text/xml'); echo mb_convert_encoding($rc, 'UTF-8', SOURCE_ENCODING); exit; }
function plugin_article_action() { global $script, $post, $vars, $cols, $rows, $now; // global $_title_collided, $_msg_collided, $_title_updated; global $_plugin_article_mailto, $_no_subject, $_no_name; // global $_msg_article_mail_sender, $_msg_article_mail_page; $_title_collided = _('On updating $1, a collision has occurred.'); $_title_updated = _('$1 was updated'); $_msg_collided = _('It seems that someone has already updated this page while you were editing it.<br /> + is placed at the beginning of a line that was newly added.<br /> ! is placed at the beginning of a line that has possibly been updated.<br /> Edit those lines, and submit again.'); $_msg_article_mail_sender = _('Author: '); $_msg_article_mail_page = _('Page: '); // if (PKWK_READONLY) die_message('PKWK_READONLY prohibits editing'); if (auth::check_role('readonly')) { die_message('PKWK_READONLY prohibits editing'); } if ($post['msg'] == '') { return array('msg' => '', 'body' => ''); } $name = $post['name'] == '' ? $_no_name : $post['name']; $name = $name == '' ? '' : str_replace('$name', $name, PLUGIN_ARTICLE_NAME_FORMAT); $subject = $post['subject'] == '' ? $_no_subject : $post['subject']; $subject = $subject == '' ? '' : str_replace('$subject', $subject, PLUGIN_ARTICLE_SUBJECT_FORMAT); $article = $subject . "\n" . '>' . $name . ' (' . $now . ')~' . "\n" . '~' . "\n"; $msg = rtrim($post['msg']); if (PLUGIN_ARTICLE_AUTO_BR) { //改行の取り扱いはけっこう厄介。特にURLが絡んだときは… //コメント行、整形済み行には~をつけないように arino $msg = join("\n", preg_replace('/^(?!\\/\\/)(?!\\s)(.*)$/', '$1~', explode("\n", $msg))); } $article .= $msg . "\n\n" . '//'; if (PLUGIN_ARTICLE_COMMENT) { $article .= "\n\n" . '#comment' . "\n"; } $postdata = ''; $postdata_old = get_source($post['refer']); $article_no = 0; foreach ($postdata_old as $line) { if (!PLUGIN_ARTICLE_INS) { $postdata .= $line; } if (preg_match('/^#article/i', $line)) { if ($article_no == $post['article_no'] && $post['msg'] != '') { $postdata .= $article . "\n"; } ++$article_no; } if (PLUGIN_ARTICLE_INS) { $postdata .= $line; } } $postdata_input = $article . "\n"; $body = ''; if (md5(@join('', get_source($post['refer']))) != $post['digest']) { $title = $_title_collided; $body = $_msg_collided . "\n"; $s_refer = htmlspecialchars($post['refer']); $s_digest = htmlspecialchars($post['digest']); $s_postdata = htmlspecialchars($postdata_input); $body .= <<<EOD <form action="{$script}?cmd=preview" method="post"> <div> <input type="hidden" name="refer" value="{$s_refer}" /> <input type="hidden" name="digest" value="{$s_digest}" /> <textarea name="msg" rows="{$rows}" cols="{$cols}" id="textarea">{$s_postdata}</textarea><br /> </div> </form> EOD; } else { page_write($post['refer'], trim($postdata)); // 投稿内容のメール自動送信 if (PLUGIN_ARTICLE_MAIL_AUTO_SEND) { $mailaddress = implode(',', $_plugin_article_mailto); $mailsubject = PLUGIN_ARTICLE_MAIL_SUBJECT_PREFIX . ' ' . str_replace('**', '', $subject); if ($post['name']) { $mailsubject .= '/' . $post['name']; } $mailsubject = mb_encode_mimeheader($mailsubject); $mailbody = $post['msg']; $mailbody .= "\n\n" . '---' . "\n"; $mailbody .= _('Author: ') . $post['name'] . ' (' . $now . ')' . "\n"; $mailbody .= _('Page: ') . $post['refer'] . "\n"; $mailbody .= ' URL: ' . get_page_absuri($post['refer']) . "\n"; $mailbody = mb_convert_encoding($mailbody, 'JIS'); $mailaddheader = 'From: ' . PLUGIN_ARTICLE_MAIL_FROM; mail($mailaddress, $mailsubject, $mailbody, $mailaddheader); } $title = $_title_updated; } $retvars['msg'] = $title; $retvars['body'] = $body; $post['page'] = $post['refer']; $vars['page'] = $post['refer']; return $retvars; }
function delete($pass) { global $_attach_messages, $notify, $notify_subject; if ($this->status['freeze']) { return attach_info('msg_isfreeze'); } // if (! pkwk_login($pass)) { if (auth::check_role('role_adm_contents') && !pkwk_login($pass)) { if (PLUGIN_ATTACH_DELETE_ADMIN_ONLY || $this->age) { return attach_info('err_adminpass'); } else { if (PLUGIN_ATTACH_PASSWORD_REQUIRE && md5($pass) != $this->status['pass']) { return attach_info('err_password'); } } } // バックアップ if ($this->age || PLUGIN_ATTACH_DELETE_ADMIN_ONLY && PLUGIN_ATTACH_DELETE_ADMIN_NOBACKUP) { @unlink($this->filename); } else { do { $age = ++$this->status['age']; } while (file_exists($this->basename . '.' . $age)); if (!rename($this->basename, $this->basename . '.' . $age)) { // 削除失敗 why? return array('msg' => $_attach_messages['err_delete']); } $this->status['count'][$age] = $this->status['count'][0]; $this->status['count'][0] = 0; $this->putstatus(); } if (is_page($this->page)) { touch(get_filename($this->page)); } if ($notify) { $footer['ACTION'] = 'File deleted'; $footer['FILENAME'] =& $this->file; $footer['PAGE'] =& $this->page; $footer['URI'] = get_page_absuri($this->page); $footer['USER_AGENT'] = TRUE; $footer['REMOTE_ADDR'] = TRUE; pkwk_mail_notify($notify_subject, "\n", $footer) or die('pkwk_mail_notify(): Failed'); } return array('msg' => $_attach_messages['msg_deleted']); }