Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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;
}
Esempio n. 4
0
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
}
Esempio n. 5
0
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;
}
Esempio n. 6
0
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) . '&amp;nohead&amp;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;
}
Esempio n. 7
0
 /**
  * 削除する
  */
 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;
 }
Esempio n. 8
0
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;
}
Esempio n. 9
0
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;
}
Esempio n. 10
0
 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']);
 }