Esempio n. 1
0
function plugin_diff_view($page)
{
    global $script, $hr;
    global $_msg_notfound, $_msg_goto, $_msg_deleted, $_msg_addline, $_msg_delline, $_title_diff;
    global $_title_diff_delete;
    $r_page = rawurlencode($page);
    $s_page = htmlsc($page);
    $menu = array('<li>' . $_msg_addline . '</li>', '<li>' . $_msg_delline . '</li>');
    $is_page = is_page($page);
    if ($is_page) {
        $menu[] = ' <li>' . str_replace('$1', '<a href="' . $script . '?' . $r_page . '">' . $s_page . '</a>', $_msg_goto) . '</li>';
    } else {
        $menu[] = ' <li>' . str_replace('$1', $s_page, $_msg_deleted) . '</li>';
    }
    $filename = DIFF_DIR . encode($page) . '.txt';
    if (file_exists($filename)) {
        if (!PKWK_READONLY) {
            $menu[] = '<li><a href="' . $script . '?cmd=diff&amp;action=delete&amp;page=' . $r_page . '">' . str_replace('$1', $s_page, $_title_diff_delete) . '</a></li>';
        }
        $msg = '<pre>' . diff_style_to_css(htmlsc(join('', file($filename)))) . '</pre>' . "\n";
    } elseif ($is_page) {
        $diffdata = trim(htmlsc(join('', get_source($page))));
        $msg = '<pre><span class="diff_added">' . $diffdata . '</span></pre>' . "\n";
    } else {
        return array('msg' => $_title_diff, 'body' => $_msg_notfound);
    }
    $menu = join("\n", $menu);
    $body = <<<EOD
<ul>
{$menu}
</ul>
{$hr}
EOD;
    return array('msg' => $_title_diff, 'body' => $body . $msg);
}
Esempio n. 2
0
function plugin_qform_view_action()
{
    global $vars;
    $page = $vars['page'];
    $str = '';
    $f = false;
    $lines = get_source($page);
    foreach ($lines as $l) {
        if (trim($l) === '}}') {
            $f = false;
        }
        if ($f) {
            $str .= $l;
        }
        if (preg_match('/^#qform_view(.*)/', $l)) {
            $f = true;
        }
    }
    header("Cache-Control: public");
    header("Pragma: public");
    header("Accept-Ranges: none");
    header("Content-Transfer-Encoding: binary");
    header("Content-Disposition: attachment; filename=qform.csv");
    header("Content-Type: application/octet-stream; name=qform.csv");
    echo mb_convert_encoding($str, 'Shift_JIS');
    exit;
}
Esempio n. 3
0
function plugin_ls_convert()
{
    global $vars;
    $with_title = FALSE;
    if (func_num_args()) {
        $args = func_get_args();
        $with_title = in_array('title', $args);
    }
    $prefix = $vars['page'] . '/';
    $pages = array();
    foreach (get_existpages() as $page) {
        if (strpos($page, $prefix) === 0) {
            $pages[] = $page;
        }
    }
    natcasesort($pages);
    $ls = array();
    foreach ($pages as $page) {
        $comment = '';
        if ($with_title) {
            list($comment) = get_source($page);
            // 見出しの固有ID部を削除
            $comment = preg_replace('/^(\\*{1,3}.*)\\[#[A-Za-z][\\w-]+\\](.*)$/', '$1$2', $comment);
            $comment = '- ' . ereg_replace('^[-*]+', '', $comment);
        }
        $ls[] = "-[[{$page}]] {$comment}";
    }
    return convert_html($ls);
}
Esempio n. 4
0
function plugin_html2_is_edit_auth($page, $user = '')
{
    global $edit_auth, $edit_auth_pages, $auth_method_type;
    if (!$edit_auth) {
        return FALSE;
    }
    // Checked by:
    $target_str = '';
    if ($auth_method_type == 'pagename') {
        $target_str = $page;
        // Page name
    } else {
        if ($auth_method_type == 'contents') {
            $target_str = join('', get_source($page));
            // Its contents
        }
    }
    foreach ($edit_auth_pages as $regexp => $users) {
        if (preg_match($regexp, $target_str)) {
            if ($user == '' || in_array($user, explode(',', $users))) {
                return TRUE;
            }
        }
    }
    return FALSE;
}
 public function write()
 {
     $output = PKWK_YAMLCONFIG_HEAD . yaml_emit($this->getArrayCopy()) . PKWK_YAMLCONFIG_TAIL;
     $source = get_source($this->page, TRUE, TRUE);
     $source = $source != FALSE && preg_match(PKWK_YAMLCONFIG_PATTERN, $source) ? preg_replace(PKWK_YAMLCONFIG_PATTERN, $output, $source) : $output;
     page_write($this->page, $source);
     return $source;
 }
Esempio n. 6
0
function plugin_vote_action()
{
    global $vars, $script, $cols, $rows;
    global $_title_collided, $_msg_collided, $_title_updated;
    global $_vote_plugin_votes;
    if (PKWK_READONLY) {
        die_message('PKWK_READONLY prohibits editing');
    }
    $postdata_old = get_source($vars['refer']);
    $vote_no = 0;
    $title = $body = $postdata = $postdata_input = $vote_str = '';
    $matches = array();
    foreach ($postdata_old as $line) {
        if (!preg_match('/^#vote(?:\\((.*)\\)(.*))?$/i', $line, $matches) || $vote_no++ != $vars['vote_no']) {
            $postdata .= $line;
            continue;
        }
        $args = explode(',', $matches[1]);
        $lefts = isset($matches[2]) ? $matches[2] : '';
        foreach ($args as $arg) {
            $cnt = 0;
            if (preg_match('/^(.+)\\[(\\d+)\\]$/', $arg, $matches)) {
                $arg = $matches[1];
                $cnt = $matches[2];
            }
            $e_arg = encode($arg);
            if (!empty($vars['vote_' . $e_arg]) && $vars['vote_' . $e_arg] == $_vote_plugin_votes) {
                ++$cnt;
            }
            $votes[] = $arg . '[' . $cnt . ']';
        }
        $vote_str = '#vote(' . @join(',', $votes) . ')' . $lefts . "\n";
        $postdata_input = $vote_str;
        $postdata .= $vote_str;
    }
    if (md5(@join('', get_source($vars['refer']))) != $vars['digest']) {
        $title = $_title_collided;
        $s_refer = htmlsc($vars['refer']);
        $s_digest = htmlsc($vars['digest']);
        $s_postdata_input = htmlsc($postdata_input);
        $body = <<<EOD
{$_msg_collided}
<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_input}</textarea><br />
 </div>
</form>

EOD;
    } else {
        page_write($vars['refer'], $postdata);
        $title = $_title_updated;
    }
    $vars['page'] = $vars['refer'];
    return array('msg' => $title, 'body' => $body);
}
Esempio n. 7
0
function plugin_fb_likegate_convert()
{
    global $vars, $script, $nowindow;
    $qm = get_qm();
    $qt = get_qt();
    $editable = edit_auth($page, FALSE, FALSE);
    //本文部分以外のページに設置した場合、無効にする
    if (isset($vars['page_alt']) && is_page($vars['page_alt'])) {
        if ($editable) {
            return 'error: #fb_likegate: 本文に設置してください。';
        } else {
            return '';
        }
    }
    $page = isset($vars['page']) ? $vars['page'] : '';
    //キャッシュ無効
    $qt->enable_cache = false;
    $args = func_get_args();
    if (count($args) === 0) {
        return $qm->replace('fmt_err_cvt', 'fb_likegate', $qm->m['plg_fb_likegate']['err_usage']);
    }
    list($unlike_page) = $args;
    $fb_apps_url = plugin_fb_root_get_apps_url();
    //Facebook からのアクセス
    if ($signed_request = plugin_fb_root_parse_request()) {
        $nowindow = 1;
        $edit_url = $script . '?cmd=edit&page=' . rawurlencode($page);
        plugin_fb_root_set_page();
        $liked = (isset($signed_request->page->liked) and !is_null($signed_request->page->liked)) ? $signed_request->page->liked : $signed_request->page['liked'];
        if ($liked) {
            $src = get_source($page);
            foreach ($src as $i => $line) {
                if (strpos($line, '#fb_likegate') === 0) {
                    unset($src[$i]);
                    break;
                }
            }
            $body = convert_html($src);
        } else {
            $src = get_source($unlike_page);
            foreach ($src as $i => $line) {
                if (strpos($line, '#fb_page') === 0) {
                    unset($src[$i]);
                }
            }
            $body = convert_html($src);
        }
        if ($editable) {
            $add_body = convert_html($qm->replace('plg_fb_likegate.ntc_admin_fb', $edit_url, $unlike_page, $fb_apps_url));
        }
        force_output_message('', '', $add_body . $body);
    } else {
        if ($editable) {
            return convert_html($qm->replace('plg_fb_likegate.ntc_admin', $unlike_page, $fb_apps_url));
        }
        force_output_message($qm->m['plg_fb_likegate']['ntc_title'], '', $qm->m['plg_fb_likegate']['ntc_msg']);
    }
}
Esempio n. 8
0
/**
 *   QHM Nav plugin
 *   -------------------------------------------
 *
 *   Copyright (c) 2014 hokuken
 *   http://hokuken.com/
 *
 *   created  : 2014/06/11
 *   modified :
 *
 *   Switch Nav content and convert
 *
 *   Usage :
 *     #nav(OtherSiteNavigator)
 *
 */
function plugin_nav_convert()
{
    global $vars, $navbar;
    static $nav = NULL;
    $qm = get_qm();
    $qt = get_qt();
    $num = func_num_args();
    if ($num > 0) {
        // Try to change default 'SiteNavigator' page name (only)
        if ($num > 1) {
            return '#nav: 引数が多すぎます。' . "<br />\n";
        }
        if ($nav !== NULL) {
            return '#nav: 既に変更されています:' . h($nav) . "<br />\n";
        }
        if ($qt->getv('plugin_nav_source')) {
            return '#nav: 既にナビの内容を変更しています。' . "<br />\n";
        }
        $args = func_get_args();
        //ナビの内容を受け取る
        if (strpos($args[0], "\r") !== FALSE) {
            if (isset($vars['page_alt'])) {
                return '#nav: 利用できません。';
            }
            $source = str_replace("\r", "\n", $args[0]);
            $qt->setv_once('plugin_nav_source', $source);
            return '';
        }
        if (!is_page($args[0])) {
            return 'ページがみつかりません:' . h($args[0]) . "<br />\n";
        } else {
            $nav = $args[0];
            // Set
            return '';
        }
    } else {
        // Output navbar page data
        $page = $nav === NULL ? $navbar : $nav;
        if ($source = $qt->getv('plugin_nav_source')) {
            // Cut fixed anchors
            $source = preg_replace('/^(\\*{1,3}.*)\\[#[A-Za-z][\\w-]+\\](.*)$/m', '$1$2', $source);
            return convert_html($source);
        }
        if (!is_page($page)) {
            return '';
        } else {
            if (isset($vars['preview']) && $vars['page'] == $page) {
                // Cut fixed anchors
                $navtext = preg_replace('/^(\\*{1,3}.*)\\[#[A-Za-z][\\w-]+\\](.*)$/m', '$1$2', $vars['msg']);
                return convert_html($navtext);
            } else {
                // Cut fixed anchors
                $navtext = preg_replace('/^(\\*{1,3}.*)\\[#[A-Za-z][\\w-]+\\](.*)$/m', '$1$2', get_source($page));
                return convert_html($navtext);
            }
        }
    }
}
Esempio n. 9
0
function plugin_memo_action()
{
    global $script, $vars, $cols, $rows;
    global $_title_collided, $_msg_collided, $_title_updated;
    if (PKWK_READONLY) {
        die_message('PKWK_READONLY prohibits editing');
    }
    if (!isset($vars['msg']) || $vars['msg'] == '') {
        return;
    }
    $memo_body = preg_replace('/' . "\r" . '/', '', $vars['msg']);
    $memo_body = str_replace("\n", '\\n', $memo_body);
    $memo_body = str_replace('"', '&#x22;', $memo_body);
    // Escape double quotes
    $memo_body = str_replace(',', '&#x2c;', $memo_body);
    // Escape commas
    $postdata_old = get_source($vars['refer']);
    $postdata = '';
    $memo_no = 0;
    foreach ($postdata_old as $line) {
        if (preg_match("/^#memo\\(?.*\\)?\$/i", $line)) {
            if ($memo_no == $vars['memo_no']) {
                $postdata .= '#memo(' . $memo_body . ')' . "\n";
                $line = '';
            }
            ++$memo_no;
        }
        $postdata .= $line;
    }
    $postdata_input = $memo_body . "\n";
    $body = '';
    if (md5(@join('', get_source($vars['refer']))) != $vars['digest']) {
        $title = $_title_collided;
        $body = $_msg_collided . "\n";
        $s_refer = htmlspecialchars($vars['refer']);
        $s_digest = htmlspecialchars($vars['digest']);
        $s_postdata_input = htmlspecialchars($postdata_input);
        $body .= <<<EOD
<form action="{$script}?cmd=preview" method="post">
 <div>
 <p>
  <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_input}</textarea>
 </p>
 </div>
</form>
EOD;
    } else {
        page_write($vars['refer'], $postdata);
        $title = $_title_updated;
    }
    $retvars['msg'] =& $title;
    $retvars['body'] =& $body;
    $vars['page'] = $vars['refer'];
    return $retvars;
}
Esempio n. 10
0
function plugin_insert_action()
{
    global $script, $vars, $cols, $rows;
    global $_title_collided, $_msg_collided, $_title_updated;
    if (PKWK_READONLY) {
        die_message('PKWK_READONLY prohibits editing');
    }
    if (!isset($vars['msg']) || $vars['msg'] == '') {
        return;
    }
    $vars['msg'] = preg_replace('/' . "\r" . '/', '', $vars['msg']);
    $insert = $vars['msg'] != '' ? "\n" . $vars['msg'] . "\n" : '';
    $postdata = '';
    $postdata_old = get_source($vars['refer']);
    $insert_no = 0;
    foreach ($postdata_old as $line) {
        if (!INSERT_INS) {
            $postdata .= $line;
        }
        if (preg_match('/^#insert$/i', $line)) {
            if ($insert_no == $vars['insert_no']) {
                $postdata .= $insert;
            }
            $insert_no++;
        }
        if (INSERT_INS) {
            $postdata .= $line;
        }
    }
    $postdata_input = $insert . "\n";
    $body = '';
    if (md5(@join('', get_source($vars['refer']))) != $vars['digest']) {
        $title = $_title_collided;
        $body = $_msg_collided . "\n";
        $s_refer = htmlsc($vars['refer']);
        $s_digest = htmlsc($vars['digest']);
        $s_postdata_input = htmlsc($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_input}</textarea><br />
 </div>
</form>
EOD;
    } else {
        page_write($vars['refer'], $postdata);
        $title = $_title_updated;
    }
    $retvars['msg'] = $title;
    $retvars['body'] = $body;
    $vars['page'] = $vars['refer'];
    return $retvars;
}
Esempio n. 11
0
function plugin_unfreeze_action()
{
    global $script, $vars, $function_freeze;
    global $_title_isunfreezed, $_title_unfreezed, $_title_unfreeze;
    global $_msg_invalidpass, $_msg_unfreezing, $_btn_unfreeze;
    $page = isset($vars['page']) ? $vars['page'] : '';
    if (!$function_freeze || !is_page($page)) {
        return array('msg' => '', 'body' => '');
    }
    $pass = isset($vars['pass']) ? $vars['pass'] : NULL;
    $msg = $body = '';
    if (!is_freeze($page)) {
        // Unfreezed already
        $msg =& $_title_isunfreezed;
        $body = str_replace('$1', htmlspecialchars(strip_bracket($page)), '<p>' . $_title_isunfreezed . '</p>');
    } else {
        if ($pass !== NULL && pkwk_login($pass)) {
            // Unfreeze
            $postdata = get_source($page);
            array_shift($postdata);
            $postdata = join('', $postdata);
            file_write(DATA_DIR, $page, $postdata, TRUE);
            // Update
            is_freeze($page, TRUE);
            if (PLUGIN_UNFREEZE_EDIT) {
                $vars['cmd'] = 'read';
                // To show 'Freeze' link
                $msg =& $_title_unfreezed;
                $body = edit_form($page, $postdata);
            } else {
                $vars['cmd'] = 'read';
                $msg =& $_title_unfreezed;
                $body = '';
            }
        } else {
            // Show unfreeze form
            // kazuwaya
            $msg =& $_title_unfreeze;
            $s_page = htmlspecialchars($page);
            $body = $pass === NULL ? '' : "<p><strong>{$_msg_invalidpass}</strong></p>\n";
            $body .= <<<EOD
<p>{$_msg_unfreezing}</p>
<form action="{$script}" method="post">
 <p>
  <input type="hidden"   name="cmd"  value="unfreeze" />
  <input type="hidden"   name="page" value="{$s_page}" />
  <input type="password" name="pass" size="12" />
  <input type="submit"   name="ok"   value="{$_btn_unfreeze}" />
 </p>
</form>
EOD;
        }
    }
    return array('msg' => $msg, 'body' => $body);
}
Esempio n. 12
0
 function read()
 {
     if (!is_page($this->page)) {
         return FALSE;
     }
     $this->objs = array();
     $obj =& new ConfigTable('');
     $matches = array();
     foreach (get_source($this->page) as $line) {
         if ($line == '') {
             continue;
         }
         $head = $line[0];
         // The first letter
         $level = strspn($line, $head);
         if ($level > 3) {
             $obj->add_line($line);
         } else {
             if ($head == '*') {
                 // Cut fixed-heading anchors
                 $line = preg_replace('/^(\\*{1,3}.*)\\[#[A-Za-z][\\w-]+\\](.*)$/', '$1$2', $line);
                 if ($level == 1) {
                     $this->objs[$obj->title] = $obj;
                     $obj =& new ConfigTable($line);
                 } else {
                     if (!is_a($obj, 'ConfigTable_Direct')) {
                         $obj =& new ConfigTable_Direct('', $obj);
                     }
                     $obj->set_key($line);
                 }
             } else {
                 if ($head == '-' && $level > 1) {
                     if (!is_a($obj, 'ConfigTable_Direct')) {
                         $obj =& new ConfigTable_Direct('', $obj);
                     }
                     $obj->add_value($line);
                 } else {
                     if ($head == '|' && preg_match('/^\\|(.+)\\|\\s*$/', $line, $matches)) {
                         // Table row
                         if (!is_a($obj, 'ConfigTable_Sequential')) {
                             $obj =& new ConfigTable_Sequential('', $obj);
                         }
                         // Trim() each table cell
                         $obj->add_value(array_map('trim', explode('|', $matches[1])));
                     } else {
                         $obj->add_line($line);
                     }
                 }
             }
         }
     }
     $this->objs[$obj->title] = $obj;
     return TRUE;
 }
Esempio n. 13
0
function plugin_diff_view($page)
{
    global $script, $hr;
    //	global $_msg_notfound, $_msg_goto, $_msg_deleted, $_msg_addline, $_msg_delline;
    //	global $_title_diff, $_title_diff_delete;
    if (auth::check_role('safemode')) {
        die_message('PKWK_SAFE_MODE prohibits this');
    }
    $_msg_notfound = _('The page was not found.');
    $_msg_addline = _('The added line is <span class="diff_added">THIS COLOR</span>.');
    $_msg_delline = _('The deleted line is <span class="diff_removed">THIS COLOR</span>.');
    $_msg_goto = _('Go to $1.');
    $_msg_deleted = _(' $1 has been deleted.');
    $_title_diff = _('Diff of $1');
    $_title_diff_delete = _('Deleting diff of $1');
    $r_page = rawurlencode($page);
    $s_page = htmlspecialchars($page);
    $menu = array('<li>' . $_msg_addline . '</li>', '<li>' . $_msg_delline . '</li>');
    $is_page = is_page($page);
    if ($is_page) {
        $menu[] = ' <li>' . str_replace('$1', '<a href="' . get_page_uri($page) . '">' . $s_page . '</a>', $_msg_goto) . '</li>';
    } else {
        $menu[] = ' <li>' . str_replace('$1', $s_page, $_msg_deleted) . '</li>';
    }
    $filename = DIFF_DIR . encode($page) . '.txt';
    if (file_exists($filename)) {
        // if (! PKWK_READONLY) {
        if (!auth::check_role('readonly')) {
            $menu[] = '<li><a href="' . $script . '?cmd=diff&amp;action=delete&amp;page=' . $r_page . '">' . str_replace('$1', $s_page, $_title_diff_delete) . '</a></li>';
        }
        $source = join('', file($filename));
        auth::is_role_page($source);
        $msg = '<pre>' . diff_style_to_css(htmlspecialchars($source)) . '</pre>' . "\n";
    } else {
        if ($is_page) {
            $source = join('', get_source($page));
            auth::is_role_page($source);
            $diffdata = trim(htmlspecialchars($source));
            $msg = '<pre><span class="diff_added">' . $diffdata . '</span></pre>' . "\n";
        } else {
            return array('msg' => $_title_diff, 'body' => $_msg_notfound);
        }
    }
    $menu = join("\n", $menu);
    $body = <<<EOD
<ul>
{$menu}
</ul>
{$hr}
EOD;
    return array('msg' => $_title_diff, 'body' => $body . $msg);
}
Esempio n. 14
0
function convert_html($lines)
{
    global $vars, $digest;
    static $contents_id = 0;
    // Set digest
    $digest = md5(join('', get_source($vars['page'])));
    if (!is_array($lines)) {
        $lines = explode("\n", $lines);
    }
    $body =& new Body(++$contents_id);
    $body->parse($lines);
    return $body->toString();
}
Esempio n. 15
0
function plugin_source_action()
{
    global $vars, $_source_messages;
    if (PKWK_SAFE_MODE) {
        die_message('PKWK_SAFE_MODE prohibits this');
    }
    $page = isset($vars['page']) ? $vars['page'] : '';
    $vars['refer'] = $page;
    if (!is_page($page) || !check_readable($page, false, false)) {
        return array('msg' => $_source_messages['msg_notfound'], 'body' => $_source_messages['err_notfound']);
    }
    return array('msg' => $_source_messages['msg_title'], 'body' => '<pre id="source">' . htmlsc(join('', get_source($page))) . '</pre>');
}
function count_comment($page)
{
    $source = join("\n", get_source($page));
    if (!preg_match("/^#comment\$/m", $source)) {
        return NULL;
    }
    require_once PLUGIN_DIR . 'comment.inc.php';
    $comment_format = PLUGIN_COMMENT_FORMAT_STRING;
    $comment_format = preg_replace("/MSG/", ".*", $comment_format);
    $comment_format = preg_replace("/NAME/", "\\[\\[.*\\]\\]", $comment_format);
    $comment_format = preg_replace("/NOW/", "&new.*", $comment_format);
    return preg_match_all("/^-{$comment_format}/m", $source, $dumy);
}
Esempio n. 17
0
function plugin_gmapfun_action()
{
    global $vars;
    $page = $vars['page'];
    $body = '';
    if (is_page($page)) {
        $body = convert_html(get_source($page));
        $qt = get_qt();
        $before = $qt->getv('beforescript');
    }
    pkwk_common_headers();
    print $before . $body;
    exit;
}
Esempio n. 18
0
function plugin_diff_view($page)
{
    global $script, $hr;
    global $layout_pages;
    $qm = get_qm();
    $r_page = rawurlencode($page);
    $s_page = htmlspecialchars($page);
    $menu = array('<li>' . $qm->m['fmt_msg_addline'] . '</li>', '<li>' . $qm->m['fmt_msg_delline'] . '</li>');
    //レイアウト部品の場合、スタイルを変更する
    $is_layout = FALSE;
    if (isset($layout_pages) && isset($layout_pages[$page])) {
        $is_layout = TRUE;
    }
    $is_page = is_page($page);
    if ($is_page && $is_layout) {
        $menu[] = ' <li><a href="' . h($script) . '?cmd=edit&amp;page=' . $r_page . '">' . h($layout_pages[$page]) . 'を編集する</a></li>';
    } else {
        if ($is_page) {
            $menu[] = ' <li>' . str_replace('$1', '<a href="' . $script . '?' . $r_page . '">' . $s_page . '</a>', $qm->m['fmt_msg_goto']) . '</li>';
        } else {
            $menu[] = ' <li>' . str_replace('$1', $s_page, $qm->m['fmt_msg_deleted']) . '</li>';
        }
    }
    $filename = DIFF_DIR . encode($page) . '.txt';
    if (file_exists($filename)) {
        if (!PKWK_READONLY) {
            $menu[] = '<li><a href="' . $script . '?cmd=diff&amp;action=delete&amp;page=' . $r_page . '">' . $qm->replace('plg_diff.title_delete', $s_page) . '</a></li>';
        }
        $msg = '<pre>' . diff_style_to_css(htmlspecialchars(join('', file($filename)))) . '</pre>' . "\n";
    } else {
        if ($is_page) {
            $diffdata = trim(htmlspecialchars(join('', get_source($page))));
            $msg = '<pre><span class="diff_added">' . $diffdata . '</span></pre>' . "\n";
        } else {
            return array('msg' => $qm->m['plg_diff']['title'], 'body' => $qm->m['fmt_err_notfound']);
        }
    }
    $menu = join("\n", $menu);
    $body = <<<EOD
<ul>
{$menu}
</ul>
{$hr}
EOD;
    $title = $qm->m['plg_diff']['title'];
    if ($is_layout) {
        $title = h($layout_pages[$page]) . 'の変更点';
    }
    return array('msg' => $title, 'body' => $body . $msg);
}
Esempio n. 19
0
function plugin_freeze_action()
{
    global $script, $vars, $function_freeze;
    $_title_isfreezed = _(' $1 has already been frozen');
    $_title_freezed = _(' $1 has been frozen.');
    $_title_freeze = _('Freeze  $1');
    $_msg_invalidpass = _('Invalid password.');
    $_msg_freezing = _('Please input the password for freezing.');
    $_btn_freeze = _('Freeze');
    $page = isset($vars['page']) ? $vars['page'] : '';
    if (!$function_freeze || is_cantedit($page) || !is_page($page)) {
        return array('msg' => '', 'body' => '');
    }
    $pass = isset($vars['pass']) ? $vars['pass'] : NULL;
    $msg = $body = '';
    if (is_freeze($page)) {
        // Freezed already
        $msg =& $_title_isfreezed;
        $body = str_replace('$1', htmlspecialchars(strip_bracket($page)), $_title_isfreezed);
    } else {
        if (!auth::check_role('role_adm_contents') || $pass !== NULL && pkwk_login($pass)) {
            // Freeze
            $postdata = get_source($page);
            array_unshift($postdata, "#freeze\n");
            file_write(DATA_DIR, $page, join('', $postdata), TRUE);
            // Update
            is_freeze($page, TRUE);
            $vars['cmd'] = 'read';
            $msg =& $_title_freezed;
            $body = '';
        } else {
            // Show a freeze form
            $msg =& $_title_freeze;
            $s_page = htmlspecialchars($page);
            $body = $pass === NULL ? '' : "<p><strong>{$_msg_invalidpass}</strong></p>\n";
            $body .= <<<EOD
<p>{$_msg_freezing}</p>
<form action="{$script}" method="post">
 <div>
  <input type="hidden"   name="cmd"  value="freeze" />
  <input type="hidden"   name="page" value="{$s_page}" />
  <input type="password" name="pass" size="12" />
  <input type="submit"   name="ok"   value="{$_btn_freeze}" />
 </div>
</form>
EOD;
        }
    }
    return array('msg' => $msg, 'body' => $body);
}
Esempio n. 20
0
function plugin_code_action()
{
    global $vars;
    global $_source_messages;
    // if (PKWK_SAFE_MODE) die_message('PKWK_SAFE_MODE prohibits this');
    if (auth::check_role('safemode')) {
        die_message('PKWK_SAFE_MODE prohibits this');
    }
    $vars['refer'] = $vars['page'];
    if (!is_page($vars['page']) || !check_readable($vars['page'], false, false)) {
        return array('msg' => $_source_messages['msg_notfound'], 'body' => $_source_messages['err_notfound']);
    }
    return array('msg' => $_source_messages['msg_title'], 'body' => plugin_code_convert('pukiwiki', join('', get_source($vars['page'])) . "\n"));
}
Esempio n. 21
0
function plugin_freeze_action()
{
    global $script, $vars, $function_freeze;
    global $_title_isfreezed, $_title_freezed, $_title_freeze;
    global $_msg_invalidpass, $_msg_freezing, $_btn_freeze;
    $qt = get_qt();
    //キャッシュしない
    $qt->enable_cache = false;
    $page = isset($vars['page']) ? $vars['page'] : '';
    if (!$function_freeze || !is_page($page)) {
        return array('msg' => '', 'body' => '');
    }
    $pass = isset($vars['pass']) ? $vars['pass'] : NULL;
    $msg = $body = '';
    if (is_freeze($page)) {
        // Freezed already
        $msg =& $_title_isfreezed;
        $body = str_replace('$1', htmlspecialchars(strip_bracket($page)), $_title_isfreezed);
    } else {
        if ($pass !== NULL && pkwk_login($pass)) {
            // Freeze
            $postdata = get_source($page);
            array_unshift($postdata, "#freeze\n");
            file_write(DATA_DIR, $page, join('', $postdata), TRUE);
            // Update
            is_freeze($page, TRUE);
            $vars['cmd'] = 'read';
            $msg =& $_title_freezed;
            $body = '';
        } else {
            // Show a freeze form
            $msg =& $_title_freeze;
            $s_page = htmlspecialchars($page);
            $body = $pass === NULL ? '' : "<p><strong>{$_msg_invalidpass}</strong></p>\n";
            $body .= <<<EOD
<p>{$_msg_freezing}</p>
<form action="{$script}" method="post">
 <div>
  <input type="hidden"   name="cmd"  value="freeze" />
  <input type="hidden"   name="page" value="{$s_page}" />
  <input type="password" name="pass" size="12" />
  <input type="submit"   name="ok"   value="{$_btn_freeze}" />
 </div>
</form>
EOD;
        }
    }
    return array('msg' => $msg, 'body' => $body);
}
Esempio n. 22
0
function plugin_menu_convert()
{
    global $vars, $menubar;
    static $menu = NULL;
    $num = func_num_args();
    if ($num > 0) {
        // Try to change default 'MenuBar' page name (only)
        if ($num > 1) {
            return '#menu(): Zero or One argument needed';
        }
        if ($menu !== NULL) {
            return '#menu(): Already set: ' . htmlspecialchars($menu);
        }
        $args = func_get_args();
        if (!is_page($args[0])) {
            return '#menu(): No such page: ' . htmlspecialchars($args[0]);
        } else {
            $menu = $args[0];
            // Set
            return '';
        }
    } else {
        // Output menubar page data
        $page = $menu === NULL ? $menubar : $menu;
        if (MENU_ENABLE_SUBMENU) {
            $path = explode('/', strip_bracket($vars['page']));
            while (!empty($path)) {
                $_page = join('/', $path) . '/' . MENU_SUBMENUBAR;
                if (is_page($_page)) {
                    $page = $_page;
                    break;
                }
                array_pop($path);
            }
        }
        if (!is_page($page)) {
            return '';
        } else {
            if ($vars['page'] == $page) {
                return '<!-- #menu(): You already view ' . htmlspecialchars($page) . ' -->';
            } else {
                // Cut fixed anchors
                $menutext = preg_replace('/^(\\*{1,3}.*)\\[#[A-Za-z][\\w-]+\\](.*)$/m', '$1$2', get_source($page));
                return preg_replace('/<ul[^>]*>/', '<ul>', convert_html($menutext));
            }
        }
    }
}
Esempio n. 23
0
/**
 * ブロック型プラグイン処理
 */
function plugin_toc_convert()
{
    global $vars;
    // global $fixed_heading_anchor;
    // if (!$fixed_heading_anchor) return '';	// 固有アンカーの機能が有効か?
    // パラメータの取得
    $argv = func_get_args();
    $argc = func_num_args();
    //$data = $argv[ --$argc ];
    $field = array('lvl', 'view', 'mode', 'id');
    for ($i = 0; $i < $argc; $i++) {
        ${$field}[$i] = $argv[$i];
    }
    if (empty($lvl)) {
        $lvl = 3;
    }
    // 表示レベル : 3 まで表示
    if (empty($view)) {
        $view = 'toc';
    }
    // 表示形式   : toc, tree
    if (empty($mode)) {
        $mode = 'toc';
    }
    // 処理対象   : full, toc, part
    if (empty($id)) {
        $id = '';
    }
    // #toc 位置識別子
    $src = get_source($vars['page']);
    // ページの取得
    if (count($src) == 0) {
        return '';
    }
    // 該当ページなし
    if ($mode == 'part') {
        $idx = toc_make_index_part($src, $id, $lvl);
    } else {
        // full, toc
        $idx = toc_make_index($src, $mode, $lvl);
    }
    $idx = toc_convert_index($idx, $lvl);
    // 整形処理
    if ($view == 'tree') {
        return toc_mode_contents($idx);
    }
    return toc_mode_toc($idx);
}
Esempio n. 24
0
function plugin_preview_action()
{
    global $vars;
    $page = isset($vars['page']) ? $vars['page'] : '';
    if (is_page($page)) {
        check_readable($page, true, true);
        $source = get_source($page);
        array_splice($source, 10);
        $body = convert_html($source);
        pkwk_common_headers();
        header('Content-type: text/xml');
        print '<' . '?xml version="1.0" encoding="UTF-8"?' . ">\n";
        print $body;
    }
    exit;
}
function plugin_includesubmenu_convert()
{
    global $script, $vars;
    $ShowPageName = FALSE;
    if (func_num_args()) {
        $aryargs = func_get_args();
        if ($aryargs[0] == 'showpagename') {
            $ShowPageName = TRUE;
        }
    }
    $SubMenuPageName = '';
    $tmppage = strip_bracket($vars['page']);
    //下階層のSubMenuページ名
    $SubMenuPageName1 = $tmppage . '/SubMenu';
    //同階層のSubMenuページ名
    $LastSlash = strrpos($tmppage, '/');
    if ($LastSlash === FALSE) {
        $SubMenuPageName2 = 'SubMenu';
    } else {
        $SubMenuPageName2 = substr($tmppage, 0, $LastSlash) . '/SubMenu';
    }
    //echo "$SubMenuPageName1 <br />";
    //echo "$SubMenuPageName2 <br />";
    //下階層にSubMenuがあるかチェック
    //あれば、それを使用
    if (is_page($SubMenuPageName1)) {
        //下階層にSubMenu有り
        $SubMenuPageName = $SubMenuPageName1;
    } else {
        if (is_page($SubMenuPageName2)) {
            //同階層にSubMenu有り
            $SubMenuPageName = $SubMenuPageName2;
        } else {
            //SubMenu無し
            return "";
        }
    }
    $body = convert_html(get_source($SubMenuPageName));
    if ($ShowPageName) {
        $r_page = rawurlencode($SubMenuPageName);
        $s_page = htmlspecialchars($SubMenuPageName);
        $link = "<a href=\"{$script}?cmd=edit&amp;page={$r_page}\">{$s_page}</a>";
        $body = "<h1>{$link}</h1>\n{$body}";
    }
    return $body;
}
Esempio n. 26
0
function plugin_footarea_convert()
{
    global $vars, $footarea, $use_open_uri_in_new_window;
    static $foot = NULL;
    static $foothtml = NULL;
    //miko patched
    // Cached MenuHTML
    if ($foothtml !== NULL) {
        return preg_replace('/<ul class="list[^>]*>/', '<ul class="foot">', $foothtml);
    }
    //miko patched
    if (func_num_args()) {
        $args = func_get_args();
        if (is_page($args[0])) {
            $foot = $args[0];
        }
        return '';
    }
    $page = $foot === NULL ? $footarea : $foot;
    if (FOOT_ENABLE_SUBFOOT) {
        $path = explode('/', strip_bracket($vars['page']));
        while (count($path)) {
            $_page = join('/', $path) . '/' . FOOT_SUBFOOTBAR;
            if (is_page($_page)) {
                $page = $_page;
                break;
            }
            array_pop($path);
        }
    }
    if (!is_page($page)) {
        return '';
        //	} else if ($vars['page'] == $page) {
        //		return '<!-- #footarea(): You already view ' . htmlspecialchars($page) . ' -->';
    }
    $foottext = preg_replace('/^(\\*{1,3}.*)\\[#[A-Za-z][\\w-]+\\](.*)$/m', '$1$2', get_source($page));
    if (function_exists('convert_filter')) {
        $foottext = convert_filter($foottext);
    }
    $save_newwindow = $use_open_uri_in_new_window;
    $use_open_uri_in_new_window = 0;
    $foothtml = convert_html($foottext);
    $use_open_uri_in_new_window = $save_newwindow;
    $foothtml = str_replace("\n", '', $foothtml);
    return preg_replace('/<ul class="list[^>]*>/', '<ul class="foot">', $foothtml);
}
Esempio n. 27
0
function plugin_headarea_convert()
{
    global $vars, $headarea, $use_open_uri_in_new_window;
    static $head = NULL;
    static $headhtml = NULL;
    //miko patched
    // Cached MenuHTML
    if ($headhtml !== NULL) {
        return preg_replace('/<ul class="list[^>]*>/', '<ul class="head">', $headhtml);
    }
    //miko patched
    if (func_num_args()) {
        $args = func_get_args();
        if (is_page($args[0])) {
            $head = $args[0];
        }
        return '';
    }
    $page = $head === NULL ? $headarea : $head;
    if (HEAD_ENABLE_SUBHEAD) {
        $path = explode('/', strip_bracket($vars['page']));
        while (count($path)) {
            $_page = join('/', $path) . '/' . HEAD_SUBHEADBAR;
            if (is_page($_page)) {
                $page = $_page;
                break;
            }
            array_pop($path);
        }
    }
    if (!is_page($page)) {
        return '';
        //	} else if ($vars['page'] == $page) {
        //		return '<!-- #headarea(): You already view ' . htmlsc($page) . ' -->';
    }
    $headtext = preg_replace('/^(\\*{1,3}.*)\\[#[A-Za-z][\\w-]+\\](.*)$/m', '$1$2', get_source($page));
    if (function_exists('convert_filter')) {
        $headtext = convert_filter($headtext);
    }
    $save_newwindow = $use_open_uri_in_new_window;
    $use_open_uri_in_new_window = 0;
    $headhtml = RendererFactory::factory($headtext);
    $use_open_uri_in_new_window = $save_newwindow;
    $headhtml = str_replace("\n", '', $headhtml);
    return preg_replace('/<ul class="list[^>]*>/', '<ul class="head">', $headhtml);
}
Esempio n. 28
0
function plugin_source_action()
{
    global $vars;
    //, $_source_messages;
    // if (PKWK_SAFE_MODE) die_message('PKWK_SAFE_MODE prohibits this');
    if (auth::check_role('safemode')) {
        die_message('PKWK_SAFE_MODE prohibits this');
    }
    $page = isset($vars['page']) ? $vars['page'] : '';
    $vars['refer'] = $page;
    if (!is_page($page) || !check_readable($page, false, false)) {
        return array('msg' => _(' $1 was not found.'), 'body' => _('cannot display the page source.'));
    }
    $source = join('', get_source($page));
    auth::is_role_page($source);
    return array('msg' => _('Source of  $1'), 'body' => '<pre id="source">' . htmlspecialchars($source) . '</pre>');
}
Esempio n. 29
0
function plugin_qhmauth_action()
{
    global $script, $auth_method_type, $auth_users, $edit_auth_pages;
    $qm = get_qm();
    $page = isset($vars['page']) ? $vars['page'] : '';
    $msg = $qm->m['plg_qhmauth']['title'];
    // Checked by:
    $target_str = '';
    if ($auth_method_type == 'pagename') {
        $target_str = $page;
        // Page name
    } else {
        if ($auth_method_type == 'contents') {
            $target_str = join('', get_source($page));
            // Its contents
        }
    }
    $user_list = array();
    foreach ($edit_auth_pages as $key => $val) {
        if (preg_match($key, $target_str)) {
            $user_list = array_merge($user_list, explode(',', $val));
        }
    }
    if (empty($user_list)) {
        return array('msg' => $msg, 'body' => "<p>{$qm->m['plg_qhmauth']['err_pkwk_ini']}</p>");
    }
    //TRUE; // No limit
    //--------------------------------------------
    //Customize from here
    //Session Auth instead of Basic Auth
    //Thanks & Refer SiteDev + AT by AKKO
    if (array_key_exists($_SESSION['usr'], $auth_users)) {
        return array('msg' => $msg, 'body' => "<p>" . $qm->replace('plg_qhmauth.err_has_auth', $_SESSION['usr'], $script) . "</p>");
        //return TRUE;
    }
    $fg = FALSE;
    $fg = ss_chkusr($qm->m['plg_qhmauth']['title'], $auth_users);
    if ($fg) {
        $_SESSION['usr'] = $_POST['username'];
        header('Location: ' . $script);
        exit;
    }
    auth_catbody($msg, $qm->replace('plg_qhmauth.err_deny', $script));
    exit;
}
Esempio n. 30
0
/**
 * make_backup
 * バックアップを作成する
 *
 * @access    public
 * @param     String    $page        ページ名
 * @param     Boolean   $delete      TRUE:バックアップを削除する
 *
 * @return    Void
 */
function make_backup($page, $delete = FALSE)
{
    global $cycle, $maxage;
    global $do_backup, $del_backup;
    // if (PKWK_READONLY || ! $do_backup) return;
    if (auth::check_role('readonly') || !$do_backup) {
        return;
    }
    if ($del_backup && $delete) {
        _backup_delete($page);
        return;
    }
    if (!is_page($page)) {
        return;
    }
    $lastmod = _backup_get_filetime($page);
    if ($lastmod == 0 || UTIME - $lastmod > 60 * 60 * $cycle) {
        $backups = get_backup($page);
        $count = count($backups) + 1;
        // 直後に1件追加するので、(最大件数 - 1)を超える要素を捨てる
        if ($count > $maxage) {
            array_splice($backups, 0, $count - $maxage);
        }
        $strout = '';
        foreach ($backups as $age => $data) {
            // BugTrack/685 by UPK
            //$strout .= PKWK_SPLITTER . ' ' . $data['time'] . "\n"; // Splitter format
            $strout .= PKWK_SPLITTER . ' ' . $data['time'] . ' ' . $data['real'] . "\n";
            // Splitter format
            $strout .= join('', $data['data']);
            unset($backups[$age]);
        }
        $strout = preg_replace("/([^\n])\n*\$/", "\$1\n", $strout);
        // Escape 'lines equal to PKWK_SPLITTER', by inserting a space
        $body = preg_replace('/^(' . preg_quote(PKWK_SPLITTER) . "\\s\\d+(\\s(\\d+)|))\$/", '$1 ', get_source($page));
        // BugTrack/685 by UPK
        // $body = PKWK_SPLITTER . ' ' . get_filetime($page) . "\n" . join('', $body);
        $body = PKWK_SPLITTER . ' ' . get_filetime($page) . ' ' . UTIME . "\n" . join('', $body);
        $body = preg_replace("/\n*\$/", "\n", $body);
        $fp = _backup_fopen($page, 'wb') or die_message('Cannot open ' . htmlspecialchars(_backup_get_filename($page)) . '<br />Maybe permission is not writable or filename is too long');
        _backup_fputs($fp, $strout);
        _backup_fputs($fp, $body);
        _backup_fclose($fp);
    }
}