function plugin_doc_ini_action() { global $vars, $_doc_ini_msg; if (Auth::check_role('role_contents_admin')) { die_message('NOT AUTHORIZED.'); } if (empty($vars['page'])) { return; } if (!is_pagename($vars['page'])) { return ''; } // Invalid page name; $action = empty($vars['action']) ? '' : $vars['action']; $retval = array(); $msg_title = sprintf($_doc_ini_msg['msg_confirmation'], $vars['page']); if ($action === 'exec') { return plugin_doc_ini_exec($vars['page']); } $script = get_script_uri(); $retval['body'] = <<<EOD <form action="{$script}" method="post" class="doc_ini_form"> \t<input type="hidden" name="cmd" value="doc_ini" /> \t<input type="hidden" name="action" value="exec" /> \t<input type="hidden" name="page" value="{$vars['page']}" /> \t{$msg_title} \t<input class="btn btn-primary" type="submit" value="{$_doc_ini_msg['btn_exec']}" /> </form> EOD; $retval['msg'] = $_doc_ini_msg['title_confirmation']; return $retval; }
function plugin_newpage_action() { global $vars, $_string, $_newpage_messages; // if (PKWK_READONLY) die_message('PKWK_READONLY prohibits editing'); if (Auth::check_role('readonly')) { Utility::dieMessage(sprintf($_string['error_prohibit'], 'PKWK_READONLY'), '', 403); } if (Auth::is_check_role(PKWK_CREATE_PAGE)) { Utility::dieMessage(sprintf($_string['error_prohibit'], 'PKWK_CREATE_PAGE'), '', 403); } if (!isset($vars['page'])) { $retvars['msg'] = $_newpage_messages['title']; $retvars['body'] = plugin_newpage_convert(); return $retvars; } else { $page = Utility::stripNullBytes($vars['page']); if (isset($vars['refer'])) { $r_page = Utility::getPageName($page, $vars['refer']); $r_refer = 'refer=' . $vars['refer']; } else { $r_page = $page; $r_refer = ''; } Utility::redirect(get_page_location_uri($r_page, $r_refer)); exit; } }
function plugin_showrss_action() { global $vars, $cache; // if (PKWK_SAFE_MODE) die_message('PKWK_SAFE_MODE prohibit this'); if (Auth::check_role('safemode')) { Utility::dieMessage('PKWK_SAFE_MODE prohibits this'); } if ($vars['feed']) { // ajaxによる読み込み $target = $vars['feed']; list($data, $time, $reason) = plugin_showrss_get_rss($vars['feed'], 1, true); $header = Header::getHeaders('aplication/xml', $time); if (empty($reason)) { Header::writeResponse($header, Response::STATUS_CODE_200, $data); } else { // とりあえずXMLでエラー Header::writeResponse($header, Response::STATUS_CODE_200, '<?xml version="1.0" encoding="UTF-8"?><response><error>1</error><message>' . Utility::htmlsc($reason) . '</message></response>'); } exit; } $body = ''; foreach (array('xml', 'mbstring') as $extension) { ${$extension} = extension_loaded($extension) ? '&color(green){Found};' : '&color(red){Not found};'; $body .= '| ' . $extension . ' extension | ' . ${$extension} . ' |' . "\n"; } return array('msg' => 'showrss_info', 'body' => convert_html($body)); }
function plugin_insert_convert() { global $vars, $digest; static $numbers = array(); $_btn_insert = T_('add'); // if (PKWK_READONLY) return ''; // Show nothing if (Auth::check_role('readonly')) { return ''; } // Show nothing if (!isset($numbers[$vars['page']])) { $numbers[$vars['page']] = 0; } $insert_no = $numbers[$vars['page']]++; $script = get_script_uri(); $s_page = Utility::htmlsc($vars['page']); $s_digest = Utility::htmlsc($digest); $s_cols = INSERT_COLS; $s_rows = INSERT_ROWS; $string = <<<EOD <form action="{$script}" method="post" class="insert_form"> \t<input type="hidden" name="insert_no" value="{$insert_no}" /> \t<input type="hidden" name="refer" value="{$s_page}" /> \t<input type="hidden" name="cmd" value="insert" /> \t<input type="hidden" name="digest" value="{$s_digest}" /> \t<textarea name="msg" rows="{$s_rows}" cols="{$s_cols}" class="form-control"></textarea><br /> \t<input type="submit" class="btn btn-primary" name="insert" value="{$_btn_insert}" /> </form> EOD; return $string; }
function count_files($no = 0, $pref = '') { // 0:DATA, 1:TB, 2:Referer, 3: DIFF, 4:BKUP, 5:CTR static $dir = array(DATA_DIR, TRACKBACK_DIR, REFERER_DIR, DIFF_DIR, BACKUP_DIR, COUNTER_DIR); static $ext = array('.txt', '.txt', '.ref', '.txt', BACKUP_EXT, '.count'); // コンテンツ管理者以上は、全てのファイルを対象にする if (!Auth::check_role('role_contents_admin')) { $pages = get_existpages($dir[$no], $ext[$no]); } else { // 自分が閲覧できるページ数のみ戻す $pages = Auth::get_existpages($dir[$no], $ext[$no]); } // 条件なし if (empty($pref)) { return count($pages); } // 指定文書のカウント $i = 0; foreach ($pages as $page) { if (strpos($page, $pref) === 0) { $i++; } } return $i; }
function plugin_version_value() { // if (PKWK_SAFE_MODE) return ''; if (Auth::check_role('safemode')) { return ''; } return S_VERSION; }
function plugin_server_convert() { // if (PKWK_SAFE_MODE) return ''; // Show nothing if (Auth::check_role('safemode')) { return ''; } // Show nothing return '<dl>' . "\n" . '<dt>Server Name</dt>' . '<dd>' . SERVER_NAME . '</dd>' . "\n" . '<dt>Server Software</dt>' . '<dd>' . SERVER_SOFTWARE . '</dd>' . "\n" . '<dt>Server Admin</dt>' . '<dd>' . '<a href="mailto:' . SERVER_ADMIN . '">' . SERVER_ADMIN . '</a></dd>' . "\n" . '</dl>' . "\n"; }
function plugin_yetlist_action() { // global $_title_yetlist, $_err_notexist, $_symbol_noexists, $non_list; global $_symbol_noexists, $non_list, $whatsdeleted; $retval = array('msg' => 'yetlist', 'body' => T_('List of pages which have not yet been created.')); // Diff $pages = array_diff(Auth::get_existpages(CACHE_DIR, '.ref'), Auth::get_existpages()); if (empty($pages)) { $retval['body'] = T_('All pages have been created.'); return $retval; } $empty = TRUE; // Load .ref files and Output $refer_regex = '/' . $non_list . '|^' . preg_quote($whatsdeleted, '/') . '$/S'; asort($pages, SORT_STRING); foreach ($pages as $file => $page) { $refer = array(); foreach (file(CACHE_DIR . $file) as $line) { list($_page) = explode("\t", rtrim($line)); $refer[] = $_page; } // Diff $refer = array_diff($refer, preg_grep($refer_regex, $refer)); if (!empty($refer)) { $empty = FALSE; $refer = array_unique($refer); sort($refer, SORT_STRING); $r_refer = ''; $link_refs = array(); foreach ($refer as $_refer) { $r_refer = rawurlencode($_refer); $link_refs[] = '<a href="' . get_page_uri($_refer) . '">' . htmlsc($_refer) . '</a>'; } $link_ref = join(' ', $link_refs); unset($link_refs); $s_page = htmlsc($page); // if (PKWK_READONLY) { if (Auth::check_role('readonly')) { $href = $s_page; } else { // Dangling link $href = '<span class="noexists">' . $s_page . '<a href="' . get_cmd_uri('edit', $page, '', 'refer=' . $r_refer) . '">' . $_symbol_noexists . '</a></span>'; } $retval['body'] .= '<li>' . $href . ' <em>(' . $link_ref . ')</em></li>' . "\n"; } } if ($empty) { $retval['body'] = $_err_notexist; return $retval; } if ($retval['body'] != '') { $retval['body'] = '<ul>' . "\n" . $retval['body'] . '</ul>' . "\n"; } return $retval; }
function plugin_back_convert() { $_msg_back_word = T_('Back'); if (func_num_args() > 4) { return PLUGIN_BACK_USAGE; } list($word, $align, $hr, $href) = array_pad(func_get_args(), 4, ''); $word = trim($word); $word = $word == '' ? $_msg_back_word : htmlsc($word); $align = strtolower(trim($align)); switch ($align) { case '': $align = 'center'; /*FALLTHROUGH*/ /*FALLTHROUGH*/ case 'center': /*FALLTHROUGH*/ /*FALLTHROUGH*/ case 'left': /*FALLTHROUGH*/ /*FALLTHROUGH*/ case 'right': break; default: return PLUGIN_BACK_USAGE; } $hr = trim($hr) != '0' ? '<hr class="full_hr" />' . "\n" : ''; $link = TRUE; $href = trim($href); if (!empty($href)) { if (Auth::check_role('safemode')) { if (is_url($href)) { $href = rawurlencode($href); } else { $wiki = Factory::Wiki($array[0]); $array = Utility::explodeAnchor($href); $array[1] = !empty($array[1]) ? '#' . rawurlencode($array[1]) : ''; $href = $wiki->uri() . $array[1]; $link = $wiki->has(); } } else { $href = rawurlencode($href); } } else { $href = 'javascript:history.go(-1)'; } if ($link) { // Normal link return $hr . '<div style="text-align:' . $align . '">' . '[ <a href="' . $href . '">' . $word . '</a> ]</div>' . "\n"; } else { // Dangling link return $hr . '<div style="text-align:' . $align . '">' . '[ <span class="noexists">' . $word . '<a href="' . $href . '">?</a></span> ]</div>' . "\n"; } }
function plugin_stationary_action() { // See above // if (PKWK_SAFE_MODE || PKWK_READONLY) if (Auth::check_role('safemode') || Auth::check_role('readonly')) { die_message('PKWK_SAFE_MODE or PKWK_READONLY prohibits this'); } $msg = 'Message'; $body = 'Message body'; return array('msg' => htmlsc($msg), 'body' => htmlsc($body)); }
function plugin_unfreeze_action() { global $vars, $function_freeze, $_unfreeze_msg; $page = isset($vars['page']) ? $vars['page'] : ''; $wiki = Factory::Wiki($page); if (!$function_freeze || !$wiki->isEditable(false, true) || !$wiki->isValied($page)) { return array('msg' => $_unfreeze_msg['title_disabled'], 'body' => '<p class="alert alert-danger">You have no permission to unfreeze this page.</p>'); } $pass = isset($vars['pass']) ? $vars['pass'] : NULL; $msg = ''; $body = array(); if (!$wiki->isFreezed()) { // Unfreezed already $msg = str_replace('$1', Utility::htmlsc(Utility::stripBracket($page)), $_unfreeze_msg['title_isunfreezed']); $body[] = '<p class="alert alert-info">' . $msg . '</p>'; } else { if (!Auth::check_role('role_contents_admin') || $pass !== NULL && Auth::login($pass)) { // BugTrack2/255 $wiki->checkReadable(); // Unfreeze $postdata = $wiki->get(); array_shift($postdata); $wiki->set($postdata); // Update if (PLUGIN_UNFREEZE_EDIT) { // BugTrack2/255 $wiki->checkEditable(true); // $vars['cmd'] = 'read'; // To show 'Freeze' link $vars['cmd'] = 'edit'; } else { $vars['cmd'] = 'read'; } $msg = str_replace('$1', Utility::htmlsc(Utility::stripBracket($page)), $_unfreeze_msg['title_unfreezed']); $body[] = !IS_AJAX ? '' : '<p class="alert alert-success">' . $msg . '</p>'; $body[] = '<div class="pull-right"><a href="' . $wiki->uri() . '" class="btn btn-primary">OK</a></div>'; Utility::redirect($wiki->uri()); exit; } else { // Show unfreeze form $msg = $_unfreeze_msg['title_unfreeze']; $body[] = $pass === NULL ? '' : '<p class="alert alert-danger">' . $_unfreeze_msg['msg_invalidpass'] . '</p>' . "\n"; $body[] = '<fieldset>'; $body[] = '<legend>' . $_unfreeze_msg['msg_unfreezing'] . '</legend>'; $body[] = '<form action="' . Router::get_script_uri() . '" method="post" class="form-inline plugin-freeze-form">'; $body[] = '<input type="hidden" name="cmd" value="unfreeze" />'; $body[] = '<input type="hidden" name="page" value="' . Utility::htmlsc($page) . '" />'; $body[] = '<input type="password" name="pass" size="12" class="form-control" />'; $body[] = '<button type="submit" class="btn btn-primary" name="ok"><span class="fa fa-lock"></span>' . $_unfreeze_msg['btn_unfreeze'] . '</button>'; $body[] = '</form>'; $body[] = '</fieldset>'; } } return array('msg' => $msg, 'body' => join("\n", $body)); }
function plugin_add_action() { global $get, $post, $vars, $_string; // if (PKWK_READONLY) die_message('PKWK_READONLY prohibits editing'); if (Auth::check_role('readonly')) { Utility::dieMessage($_string['prohibit']); } $page = isset($vars['page']) ? $vars['page'] : ''; $wiki = Factory::Wiki($page); $wiki->checkEditable(); $get['add'] = $post['add'] = $vars['add'] = TRUE; return array('msg' => _("Add to \$1"), 'body' => '<ul>' . "\n" . ' <li>' . T_('Two and the contents of an input are added for a new-line to the contents of a page of present addition.') . '</li>' . "\n" . '</ul>' . "\n" . edit_form($page, '')); }
function plugin_filelist_action() { global $vars; if (!Auth::check_role('role_contents_admin')) { return do_plugin_action('list'); } if (!isset($vars['pass'])) { return filelist_adm(''); } if (!pkwk_login($vars['pass'])) { return filelist_adm('__nopass__'); } return do_plugin_action('list'); }
function plugin_links_action() { global $post, $vars, $foot_explain; global $_links_messages, $_string; // if (PKWK_READONLY) die_message('PKWK_READONLY prohibits this'); if (Auth::check_role('readonly')) { Utility::dieMessage($_string['error_prohibit']); } $msg = $_links_messages['title_update']; $admin_pass = empty($post['adminpass']) ? null : $post['adminpass']; if (isset($vars['execute']) && $vars['execute'] === 'true') { if (!Auth::check_role('role_contents_admin') || Auth::login($admin_pass)) { // $force = (isset($post['force']) && $post['force'] === 'on') ? true : false; $links = new Relational(''); $links->init(); return array('msg' => $msg, 'body' => $_links_messages['msg_done']); } else { $msg = $_links_messages['msg_error']; } } $body = RendererFactory::factory(sprintf($_links_messages['msg_usage1'])); $script = Router::get_script_uri(); if (Auth::check_role('role_contents_admin')) { $body .= RendererFactory::factory(sprintf($_links_messages['msg_usage2'])); } $body .= <<<EOD <form method="post" action="{$script}" class="form-inline plugin-links-form"> \t<input type="hidden" name="cmd" value="links" /> \t<input type="hidden" name="execute" value="true" /> EOD; if (Auth::check_role('role_contents_admin')) { $body .= <<<EOD \t<div class="form-group"> \t\t<label for="_p_links_adminpass" class="sr-only">{$_links_messages['msg_adminpass']}</label> \t\t<input type="password" name="adminpass" id="_p_links_adminpass" class="form-control" size="20" value="" placeholder="{$_links_messages['msg_adminpass']}" /> \t</div> EOD; } $body .= <<<EOD \t<!--div class="checkbox"> \t\t<input type="checkbox" name="force" id="_c_force" /> \t\t<label for="_c_force">{$_links_messages['btn_force']}</label> \t</div--> \t<input type="submit" class="btn btn-primary" value="{$_links_messages['btn_submit']}" /> </form> EOD; return array('msg' => $msg, 'body' => $body); }
function plugin_nonlist_action() { global $vars; $_title_nonlist = T_('List of non_list pages'); if (Auth::check_role('role_contents_admin')) { return ''; } if (isset($vars['env'])) { $cmd = 2; } elseif (isset($vars['col'])) { $cmd = 1; } else { $cmd = 0; } return array('msg' => $_title_nonlist, 'body' => plugin_nonlist_getlist($cmd)); }
function plugin_htdigest_action() { global $vars, $_htdigest_msg; $msg = 'htdigest'; $body = ''; $func = empty($vars['func']) ? '' : $vars['func']; if (htdigest_is_iis()) { return array('msg' => $msg, 'body' => $_htdigest_msg['msg_iis']); } // 初回起動時 if (empty($func)) { return array('msg' => $msg, 'body' => htdigest_menu()); } // プラグインによる書き込み制限の場合 if (!USE_APACHE_WRITE_FUNC) { return array('msg' => $msg, 'body' => htdigest_menu($_htdigest_msg['err_not_use'])); } switch ($func) { case 'save': // サイト管理者権限が無い場合 if (Auth::check_role('role_adm')) { return array('msg' => $msg, 'body' => htdigest_menu($_htdigest_msg['err_role'])); } // ADM if (USE_APACHE_WRITE_FUNC) { $rc_msg = htdigest_save($vars['username'], $vars['realm'], $vars['hash'], 2); } return array('msg' => $msg, 'body' => htdigest_menu($rc_msg)); case 'update': // サイト管理者未満は、自分のパスワードのみ更新ができる $role_level = Auth::get_role_level(); if ($role_level < 2) { // Guest return array('msg' => $msg, 'body' => htdigest_menu($_htdigest_msg['err_role'])); } // Auth User global $realm; $user = Auth::check_auth(); if (USE_APACHE_WRITE_FUNC) { $rc_msg = htdigest_save($user, $realm, $vars['hash'], $role_level); } return array('msg' => $msg, 'body' => htdigest_menu($rc_msg)); default: $body = $_htdigest_msg['msg_err']; } return array('msg' => $msg, 'body' => $body); }
function plugin_freeze_action() { global $vars, $function_freeze, $_freeze_msg; $page = isset($vars['page']) ? $vars['page'] : null; if (is_null($page)) { return array('msg' => 'Not Found', 'body' => 'Page not found'); } $wiki = Factory::Wiki($page); if (!$function_freeze || !$wiki->isEditable(true) || !$wiki->has()) { return array('msg' => $_freeze_msg['title_disabled'], 'body' => '<p class="alert alert-danger">You have no permission to freeze this page.</p>'); } $pass = isset($vars['pass']) ? $vars['pass'] : NULL; $msg = ''; $body = array(); if ($wiki->isFreezed()) { // Freezed already $msg = str_replace('$1', Utility::htmlsc(Utility::stripBracket($page)), $_freeze_msg['title_isfreezed']); $body[] = '<p class="alert alert-info">' . $msg . '</p>'; } else { if (!Auth::check_role('role_contents_admin') || $pass !== NULL && Auth::login($pass)) { // Freeze $postdata = $wiki->get(); array_unshift($postdata, "#freeze"); //凍結をページに付加 $wiki->set($postdata, true); // Update //$wiki->is_freezed(); $vars['cmd'] = 'read'; $msg = str_replace('$1', Utility::htmlsc(Utility::stripBracket($page)), $_freeze_msg['title_freezed']); $body[] = !IS_AJAX ? '' : '<p class="alert alert-success">' . $msg . '</p><div class="pull-right"><a href="' . $wiki->uri() . '" class="btn btn-primary">OK</a></div>'; } else { // Show a freeze form $msg = $_freeze_msg['title_freeze']; $body[] = $pass === NULL ? '' : '<p class="alert alert-warning">' . $_freeze_msg['msg_invalidpass'] . '</p>'; $body[] = '<fieldset>'; $body[] = '<legend>' . $_freeze_msg['msg_freezing'] . '</legend>'; $body[] = '<form action="' . Router::get_script_uri() . '" method="post" class="form-inline plugin-freeze-form">'; $body[] = '<input type="hidden" name="cmd" value="freeze" />'; $body[] = '<input type="hidden" name="page" value="' . Utility::htmlsc($page) . '" />'; $body[] = '<input type="password" name="pass" size="12" class="form-control" />'; $body[] = '<button type="submit" class="btn btn-primary" name="ok"><span class="fa fa-lock"></span>' . $_freeze_msg['btn_freeze'] . '</button>'; $body[] = '</form>'; $body[] = '</fieldset>'; } } return array('msg' => $msg, 'body' => join("\n", $body)); }
function replace_adm($pass, $search) { global $_replace_msg; global $_button; $body = ''; if (!Auth::check_role('role_contents_admin')) { $msg = $_replace_msg['msg_input_str']; $body_pass = ""; } else { $msg = $_replace_msg['msg_input_pass']; $body_pass = '******' . $_replace_msg['msg_pass'] . '</label><input type="password" name="pass" size="12" id="pass" class="form-control" /></div>'; if ($pass == 'pass') { $body .= '<p class="alert alert-warning">' . $_replace_msg['msg_warn_pass'] . '</p>' . "\n"; } elseif ($pass != '__nopass__') { $body .= '<p class="alert alert-warning">' . $_replace_msg['msg_no_pass'] . '</p>' . "\n"; } } if ($search === '') { $body .= '<p class="alert alert-warning">' . $_replace_msg['msg_no_search'] . "</p>\n"; } $script = get_script_uri(); $body .= <<<EOD <fieldset> \t<legend>{$msg}</legend> \t<form action="{$script}" method="post" class="plugin-replace-form"> \t\t<input type="hidden" name="cmd" value="replace" /> \t\t<div class="form-group"> \t\t\t<label for="replace_search">{$_replace_msg['msg_input_search_word']}</label> \t\t\t<input type="text" name="search" id="replace_search" size="24" class="form-control" /> \t\t</div> \t\t<div class="form-group"> \t\t\t<label for="replace_replace">{$_replace_msg['msg_input_replace_word']}</label> \t\t\t<input type="text" name="replace" id="replace_replace" size="24" class="form-control" /> \t\t</div> \t\t{$body_pass} \t\t<div class="checkbox"> \t\t\t<input type="checkbox" name="notimestamp" id="replace_notimestamp" /> \t\t\t<label for="replace_notimestamp">{$_button['notchangetimestamp']}</label> \t\t</div> \t\t<input type="submit" class="btn btn-warning" name="ok" value="{$_replace_msg['btn_exec']}" /> \t</form> </fieldset> EOD; return array('msg' => $_replace_msg['msg_H0_replace'], 'body' => $body); }
function plugin_source_action() { global $vars; //, $_source_messages; // if (PKWK_SAFE_MODE) die_message('PKWK_SAFE_MODE prohibits this'); if (Auth::check_role('safemode')) { Utility::dieMessage('PKWK_SAFE_MODE prohibits this'); } $page = isset($vars['page']) ? $vars['page'] : ''; $vars['refer'] = $page; $wiki = Factory::Wiki($page); if (!$wiki->isValied() || !$wiki->isReadable()) { return array('msg' => T_(' $1 was not found.'), 'body' => T_('cannot display the page source.')); } $source = $wiki->get(true); Auth::is_role_page($source); return array('msg' => T_('Source of $1'), 'body' => '<pre class="sh sunlight-highlight-plain">' . Utility::htmlsc($source) . '</pre>'); }
function plugin_topicpath_inline() { global $vars, $defaultpage, $topicpath; if (isset($topicpath) && $topicpath == false) { return ''; } $page = isset($vars['page']) ? $vars['page'] : ''; if ($page == '' || $page == $defaultpage) { return ''; } $parts = explode('/', $page); $b_link = TRUE; if (PLUGIN_TOPICPATH_THIS_PAGE_DISPLAY) { $b_link = PLUGIN_TOPICPATH_THIS_PAGE_LINK; } else { array_pop($parts); // Remove the page itself } $topic_path = array(); while (!empty($parts)) { $_landing = join('/', $parts); $element = htmlsc(array_pop($parts)); if (!$b_link) { // This page ($_landing == $page) $b_link = TRUE; $topic_path[] = $element; // } else if (PKWK_READONLY && ! is_page($_landing)) { } else { if (Auth::check_role('readonly') && !is_page($_landing)) { // Page not exists $topic_path[] = $element; } else { // Page exists or not exists $topic_path[] = '<a href="' . get_page_uri($_landing) . '">' . $element . '</a>'; } } } if (PLUGIN_TOPICPATH_TOP_DISPLAY) { $topic_path[] = make_pagelink($defaultpage, PLUGIN_TOPICPATH_TOP_LABEL); } return '<ul><li>' . join('</li><li>', array_reverse($topic_path)) . '</li></ul>'; }
function plugin_dump_action() { global $vars, $auth_users, $realm; // if (PKWK_READONLY) die_message('PKWK_READONLY prohibits this'); if (Auth::check_role('readonly')) { die_message(T_("PKWK_READONLY prohibits this")); } $msg = PLUGIN_DUMP_ALLOW_RESTORE ? T_("dump & restore") : T_("dump"); $body = ''; while (Auth::check_role('role_adm')) { unset($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']); if (!Auth::auth_pw($auth_users)) { $body = "<p><strong>" . T_("The password is different.") . "</strong></p>\n"; return array('msg' => $msg, 'body' => $body, 'http_code' => 401); } } // メニューを表示する必要があるか? if (!isset($vars['menu'])) { // 入力フォームを表示 $body = plugin_dump_disp_form(); return array('msg' => $msg, 'body' => $body); } $act = isset($vars['act']) ? $vars['act'] : NULL; set_time_limit(0); switch ($act) { case PLUGIN_DUMP_DUMP: $body = plugin_dump_download(); break; case PLUGIN_DUMP_RESTORE: $retcode = plugin_dump_upload(); $msg = $retcode['code'] == TRUE ? T_("Up-loading was completed.") : T_("It failed in up-loading."); $body = $retcode['msg']; break; default: // 無効な命令です。 $body = T_("It is an invalid instruction."); } return array('msg' => $msg, 'body' => $body); }
/** * コンストラクタ * @param string $page ページ名 */ public function __construct($page = null) { if (empty($page)) { throw new Exception('BackupFile::__construct(): Page name is missing!'); } if (!is_string($page)) { throw new Exception('BackupFile::__construct(): Page name must be string!'); } global $do_backup, $cycle, $maxage; if (Auth::check_role('readonly') || !$do_backup) { return; } // バックアップのページ名 $this->page = $page; // バックアップの拡張子 if (function_exists('lzf_compress')) { // lzfが使用出来る場合 $this->ext = '.lzf'; } else { if (function_exists('bzcompress')) { // bz2が使用出来る場合 $this->ext = '.bz2'; } else { if (function_exists('gzcompress')) { $this->ext = '.gz'; } } } // バックアップの世代間の区切りの正規表現 $this->splitter_reglex = '/^(' . preg_quote(self::SPLITTER) . '\\s\\d+(\\s(\\d+)|))$/'; // バックアップの名前(拡張子抜き) $this->name = self::$dir . Utility::encode($page); // バックアップの最終更新日時 $this->time = $this->has() ? filemtime($this->filename) : UTIME; // このhasBackup()でファイル名($this->file)も定義 parent::__construct($this->name . $this->ext); }
function plugin_check_role_convert() { global $check_role; if (!$check_role) { return '<p>check_role: The function is invalid.</p>'; } // role - 0:Guest, 2:Webmaster, 3:Contents manager, 4:Authorized // chk_role_str - 0,1,4: Authorized, 2:Webmaster, 3:Contents manager static $chk_role_str = array('role_auth', 'role_auth', 'role_adm', 'role_contents_admin', 'role_auth'); $argv = func_get_args(); $argc = func_num_args(); $field = array('chk_role'); for ($i = 0; $i < $argc; $i++) { ${$field}[$i] = $argv[$i]; } if (empty($chk_role)) { $chk_role = 0; } $role_func = empty($chk_role_str[$chk_role]) ? 'role_auth' : $chk_role_str[$chk_role]; if (!Auth::check_role($role_func)) { return ''; } check_role_die('It is necessary to attest it to inspect this page.'); }
/** * POST action via convert plugin */ function action_convert() { global $vars, $defaultpage, $_string; if (method_exists('auth', 'check_role')) { // Plus! if (Auth::check_role('readonly')) { die_message('PKWK_READONLY prohibits editing'); } } else { if (PKWK_READONLY) { die_message('PKWK_READONLY prohibits editing'); } } $page = isset($vars['refer']) ? $vars['refer'] : $defaultpage; $pcmd = $vars['pcmd']; $vote_id = $vars['vote_id']; $vars['page'] = $page; $choice_id = $this->get_selected_choice_convert(); $addchoice = isset($vars['addchoice']) && $vars['addchoice'] !== '' ? $vars['addchoice'] : null; if ($this->is_continuous_vote($page, $pcmd, $vote_id)) { return array('msg' => T_('Error in vote'), 'body' => T_('Continuation vote cannot be performed.')); } // parse contents of wiki page and get update $wiki = Factory::Wiki($page); $lines = $wiki->get(); list($linenum, $newline, $newtext, $newvotes) = $this->get_update_convert($lines, $vote_id, $choice_id, $addchoice); if ($linenum === false) { die_message(T_('There was no matching vote. ')); } $newlines = $lines; $newlines[$linenum] = $newline; $newcontents = implode('', $newlines); // collision check $contents = implode('', $lines); if ($wiki->digest() !== $vars['digest']) { $msg = $_string['title_collided']; $body = $this->show_preview_form($_string['msg_collided'], $newline); return array('msg' => $msg, 'body' => $body); } $wiki->set($newcontents, TRUE); // notimestamp if (isset($addchoice)) { $choice_id = count($newvotes) - 1; } // to make sure $this->update_recent_voted($page, $pcmd, $vote_id, $choice_id, $newvotes); //static in convert() was somehow wierd if return(msg=>'',body=>''); //$msg = $_string['updated']; //$body = ''; //return array('msg'=>$msg, 'body'=>$body); $anchor = $this->get_anchor($pcmd, $vote_id); Utility::redirect($wiki->uri() . '#' . $anchor); exit; }
function plugin_navibar_convert() { global $do_backup, $trackback, $referer; global $function_freeze; global $vars; global $whatsnew, $whatsdeleted; /* if ($_LINK['reload'] == '') { return '<p class="message_box ui-state-error ui-corner-all">#navibar: plugin called from wikipage. skipped.</p>'; } */ $_page = isset($vars['page']) ? $vars['page'] : null; $is_read = arg_check('read') && is_page($_page); $is_freeze = is_freeze($_page); $is_readonly = Auth::check_role('readonly') || PKWK_READONLY == Auth::ROLE_AUTH && Auth::get_role_level() > Auth::ROLE_AUTH ? true : false; $cmd = isset($vars['cmd']) ? $vars['cmd'] : null; $num = func_num_args(); $args = $num ? func_get_args() : array(); if (IS_MOBILE) { $ret[] = '<ul data-role="listview">'; } else { $ret[] = '<ul>'; } while (!empty($args)) { $name = array_shift($args); switch ($name) { case 'freeze': case 'unfreeze': if ($is_read && $function_freeze && !($_page == $whatsnew || $_page == $whatsdeleted)) { if ($is_freeze) { $name = 'unfreeze'; } else { $name = 'freeze'; } $ret[] = _navibar($name); } break; case 'list': if ($cmd !== 'list') { $ret[] = _navibar($name); } else { $ret[] = _navibar('filelist'); } break; case 'backup': if ($do_backup) { $ret[] = _navibar($name); } break; case 'brokenlink': case 'template': case 'source': case 'diff': case 'reload': case 'copy': if ($is_read || !empty($_page) && !($_page == $whatsnew || $_page == $whatsdeleted)) { $ret[] = _navibar($name); } break; case 'trackback': if ($trackback) { if (!empty($_page) && !($_page == $whatsnew || $_page == $whatsdeleted)) { $ret[] = _navibar($name, 'Trackback(' . tb_count($_page) . ')'); } else { // $ret[] = _navibar($name, 'Trackback list'); } } break; case 'referer': case 'skeylist': case 'linklist': if ($referer && !empty($_page)) { $ret[] = _navibar($name); } break; case 'log': if (!empty($_page)) { $ret[] = _navibar($name); } case '|': if (end($ret) !== '<ul>') { $ret[] = '</ul>'; $ret[] = "\n"; $ret[] = !IS_MOBILE ? '<ul>' : '<ul data-role="listview">'; } break; case 'attach': case 'upload': if ($is_read && (bool) ini_get('file_uploads') && !$is_freeze && !($_page == $whatsnew || $_page == $whatsdeleted) && !$is_readonly) { $ret[] = _navibar($name); } break; case 'new': case 'newsub': case 'edit': case 'guiedit': if (!empty($_page) && $is_read && $function_freeze && !$is_freeze && !($_page == $whatsnew || $_page == $whatsdeleted) && !$is_readonly) { $ret[] = _navibar($name); } break; case 'login': $auth_key = Auth::get_user_info(); if (empty($auth_key['key'])) { $ret[] = _navibar($name); } break; default: $ret[] = _navibar($name); break; } } if (end($ret) === '<ul>') { array_pop($ret); array_pop($ret); } else { $ret[] = '</ul>'; } $body = "\n" . join('', $ret) . "\n"; if (IS_MOBILE) { return $body; } else { return '<nav class="navibar">' . $body . '</nav>' . "\n"; } }
function plugin_guiedit_edit_form($page, $postdata, $digest = FALSE, $b_template = TRUE) { global $vars; global $load_template_func, $whatsnew; global $_button; global $notimeupdate; global $js_tags, $link_tags, $js_blocks; global $guiedit_use_fck; $script = get_script_uri(); // Newly generate $digest or not if ($digest === FALSE) { $digest = md5(get_source($page, TRUE, TRUE)); } $s_id = isset($vars['id']) ? Utility::htmlsc($vars['id']) : ''; if (!$guiedit_use_fck) { $body = edit_form($page, $postdata, $digest, $b_template); $pattern = "/(<input\\s+type=\"hidden\"\\s+name=\"cmd\"\\s+value=\")edit(\"\\s*\\/?>)/"; $replace = "\$1guiedit\$2\n" . ' <input type="hidden" name="id" value="' . $s_id . '" />' . ' <input type="hidden" name="text" value="1" />'; $body = preg_replace($pattern, $replace, $body); return $body; } // require_once(GUIEDIT_CONF_PATH . 'guiedit.ini.php'); // フォームの値の設定 $s_digest = Utility::htmlsc($digest); $s_page = Utility::htmlsc($page); $s_original = Utility::htmlsc($vars['original']); $s_ticket = md5(MUTIME); if (function_exists('pkwk_session_start') && pkwk_session_start() != 0) { // BugTrack/95 fix Problem: browser RSS request with session $_SESSION[$s_ticket] = md5(get_ticket() . $digest); $_SESSION['origin' . $s_ticket] = md5(get_ticket() . str_replace("\r", '', $s_original)); } // テンプレート $template = ''; if ($load_template_func) { global $guiedit_non_list; $pages = array(); foreach (get_existpages() as $_page) { if ($_page == $whatsnew || check_non_list($_page)) { continue; } foreach ($guiedit_non_list as $key) { $pos = strpos($_page . '/', $key . '/'); if ($pos !== FALSE && $pos == 0) { continue 2; } } $_s_page = Utility::htmlsc($_page); $pages[$_page] = ' <option value="' . $_s_page . '">' . $_s_page . '</option>'; } ksort($pages); $s_pages = join("\n", $pages); $template = <<<EOD <select name="template_page"> \t<option value="">-- {$_button['template']} --</option> {$s_pages} </select> <br /> EOD; } // チェックボックス「タイムスタンプを変更しない」 $add_notimestamp = ''; if ($notimeupdate != 0) { $checked_time = isset($vars['notimestamp']) ? ' checked="checked"' : ''; // if ($notimeupdate == 2) { if ($notimeupdate == 2 && Auth::check_role('role_contents_admin')) { $add_notimestamp = ' ' . '<input type="password" name="pass" size="12" />' . "\n"; } $add_notimestamp = '<input type="checkbox" name="notimestamp" ' . 'id="_edit_form_notimestamp" value="true"' . $checked_time . ' />' . "\n" . ' ' . '<label for="_edit_form_notimestamp"><span class="small">' . $_button['notchangetimestamp'] . '</span></label>' . "\n" . $add_notimestamp . ' '; } // フォーム $body = <<<EOD <div id="guiedit"> \t<form id="guiedit_form" action="{$script}" method="post" style="margin-bottom:0px;"> \t{$template} \t\t<input type="hidden" name="cmd" value="guiedit" /> \t\t<input type="hidden" name="page" value="{$s_page}" /> \t\t<input type="hidden" name="digest" value="{$s_digest}" /> \t\t<input type="hidden" name="ticket" value="{$s_ticket}" /> \t\t<input type="hidden" name="id" value="{$s_id}" /> \t\t<textarea name="original" rows="1" cols="1" style="display:none">{$s_original}</textarea> \t\t<textarea name="msg" id="editor"></textarea> \t\t<div class="pull-left"> \t\t<button type="submit" name="write" accesskey="s" class="btn btn-primary">{$_button['update']}</button> \t\t<button type="button" name="preview" accesskey="p" class="btn btn-secondary">{$_button['preview']}</button> \t\t{$add_notimestamp} \t\t</div> \t</form> \t<form action="{$script}" method="post"> \t\t<input type="hidden" name="cmd" value="guiedit" /> \t\t<input type="hidden" name="page" value="{$s_page}" /> \t\t<input type="submit" name="cancel" value="{$_button['cancel']}" class="btn btn-warning" accesskey="c" /> \t</form> </div> EOD; $js_tags[] = array('type' => 'text/javascript', 'src' => COMMON_URI . 'js/ckeditor/ckeditor.js', 'defer' => 'defer'); $js_tags[] = array('type' => 'text/javascript', 'src' => COMMON_URI . 'js/ckeditor/adapters/jquery.js', 'defer' => 'defer'); $js_tags[] = array('type' => 'text/javascript', 'src' => COMMON_URI . 'js/plugin/guiedit/guiedit.js', 'defer' => 'defer'); return $body; }
/** * 編集画面を表示 * @param string $page 編集しようとしているページ名 * @param string $data 入力データー * @param boolean $show_template テンプレートを表示するか */ public static function editForm($page, $data, $show_template = TRUE) { global $vars, $session; global $_button, $_string; global $notimeupdate, $load_template_func, $load_refer_related; if (empty($page)) { return self::dieMessage('Page name was not defined.'); } $postdata = is_array($data) ? join("\n", $data) : $data; $original = isset($vars['original']) ? $vars['original'] : $postdata; // ticketは、PliginRenderer::addHiddenField()で自動挿入されるので、同じアルゴリズムでチケット名を生成 $ticket_name = md5(Utility::getTicket() . REMOTE_ADDR); // BugTrack/95 fix Problem: browser RSS request with session $session->offsetSet('origin-' . $ticket_name, md5(self::getTicket() . str_replace("\r", '', $original))); $ret[] = '<form action="' . Router::get_script_uri() . '" role="form" method="post" class="form-edit" data-collision-check-strict="true">'; $ret[] = '<input type="hidden" name="cmd" value="edit" />'; $ret[] = '<input type="hidden" name="page" value="' . self::htmlsc($page) . '" />'; $ret[] = isset($vars['id']) ? '<input type="hidden" name="id" value="' . self::htmlsc($vars['id']) . '" />' : null; if ($load_template_func && $show_template) { // ひな形を読み込む foreach (Listing::pages() as $_page) { $_w = Factory::Wiki($_page); if (!$_w->isEditable() || $_w->isHidden()) { continue; } $_s_page = self::htmlsc($_page); $_pages[$_page] = '<option value="' . $_s_page . '">' . $_s_page . '</option>' . "\n"; } // ナチュラルソート ksort($_pages, SORT_NATURAL); $ret[] = '<div class="form-inline">'; $ret[] = '<div class="form-group">'; $ret[] = '<select class="form-control" name="template_page" class="template">'; $ret[] = '<option value="" disabled="disabled" selected="selected">-- ' . $_button['template'] . ' --</option>'; $ret[] = join("\n", $_pages); $ret[] = '</select>'; $ret[] = '</div>'; $ret[] = '<button type="submit" class="btn btn-secondary" name="template" accesskey="l">' . $_button['load'] . '</button>'; $ret[] = '</div>'; unset($_s_page, $_w, $_pages); } // 編集フォーム $ret[] = '<textarea name="msg" id="msg" rows="15" class="form-control">' . self::htmlsc(($load_refer_related && isset($vars['refer']) && !empty($vars['refer']) ? '[[' . self::stripBracket($vars['refer']) . ']]' . "\n\n" : '') . $postdata) . '</textarea>'; $ret[] = '<div class="form-inline">'; if (IS_MOBILE) { // モバイル用 $ret[] = '<input type="submit" id="btn_submit" name="write" value="' . $_button['update'] . '" data-icon="check" data-inline="true" data-theme="b" />'; $ret[] = '<input type="submit" id="btn_preview" name="preview" value="' . $_button['preview'] . '" accesskey="p" data-icon="gear" data-inline="true" data-theme="e" />'; $ret[] = '<input type="submit" id="btn_cancel" name="cancel" value="' . $_button['cancel'] . '" accesskey="c" data-icon="delete" data-inline="true" />'; $ret[] = $notimeupdate === 2 && Auth::check_role('role_contents_admin') ? '<div data-role="fieldcontain">' : null; if ($notimeupdate !== 0 && Factory::Wiki($page)->isValied()) { // タイムスタンプを更新しないのチェックボックス $ret[] = '<input type="checkbox" name="notimestamp" id="_edit_form_notimestamp" value="true" ' . (isset($vars['notimestamp']) ? ' checked="checked"' : null) . ' />'; $ret[] = '<label for="_edit_form_notimestamp" data-inline="true">' . $_button['notchangetimestamp'] . '</label>'; } // 管理人のパス入力 $ret[] = $notimeupdate == 2 && Auth::check_role('role_contents_admin') ? '<input type="password" name="pass" size="12" data-inline="true" />' . "\n" . '</div>' : null; $ret[] = isset($vars['add']) ? '<input type="checkbox" name="add_top" value="true"' . (isset($vars['add']) ? ' checked="checked"' : '') . ' /><label for="add_top">' . $_button['addtop'] . '</label>' : null; } else { // 通常用 $ret[] = '<button type="submit" class="btn btn-primary" name="write" accesskey="s"><span class="fa fa-check"></span>' . $_button['update'] . '</button>'; $ret[] = isset($vars['add']) ? '<input type="checkbox" name="add_top" value="true"' . (isset($vars['add']) ? ' checked="checked"' : '') . ' /><label for="add_top">' . $_button['addtop'] . '</label>' : null; $ret[] = '<button type="submit" class="btn btn-secondary" name="preview" accesskey="p"><span class="fa fa-eye"></span>' . $_button['preview'] . '</button>'; if ($notimeupdate !== 0 && Factory::Wiki($page)->isValied()) { // タイムスタンプを更新しないのチェックボックス $ret[] = '<div class="checkbox">'; $ret[] = '<input type="checkbox" name="notimestamp" id="_edit_form_notimestamp" value="true"' . (isset($vars['notimestamp']) ? ' checked="checked"' : null) . ' />'; $ret[] = '<label for="_edit_form_notimestamp">' . $_button['notchangetimestamp'] . '</label>'; $ret[] = '</div>'; // $ret[] = '<div class="checkbox">'; // $ret[] = '<input type="checkbox" name="ping" id="_edit_form_ping" value="true"' . (isset($vars['ping']) ? ' checked="checked"' : null) . ' />'; // $ret[] = '<label for="_edit_form_ping">' . $_button['send_ping'] . '</label>'; // $ret[] = '</div>'; // $ret[] = '<div class="checkbox">'; // $ret[] = '<input type="checkbox" name="tweet" id="_edit_form_tweet" value="true"' . (isset($vars['tweet']) ? ' checked="checked"' : null) . ' />'; // $ret[] = '<label for="_edit_form_tweet"><span class="fa fa-twitter"></span></label>'; // $ret[] = '</div>'; // $ret[] = '<div class="checkbox">'; // $ret[] = '<input type="checkbox" name="ping" id="_edit_form_fb" value="true"' . (isset($vars['facebook']) ? ' checked="checked"' : null) . ' />'; // $ret[] = '<label for="_edit_form_tweet"><span class="fa fa-facebook"></span></label>'; // $ret[] = '</div>'; } // 管理人のパス入力 if ($notimeupdate === 2 && Auth::check_role('role_contents_admin')) { $ret[] = '<div class="form-group">'; $ret[] = '<div class="input-group">'; $ret[] = '<span class="input-group-addon"><span class="fa fa-key"></span></span>'; $ret[] = '<input type="password" name="pass" class="form-control" size="12" placeholder="Password" />'; $ret[] = '</div>'; $ret[] = '</div>'; } $ret[] = '<button type="submit" class="btn btn-warning" name="cancel" accesskey="c"><span class="fa fa-ban"></span>' . $_button['cancel'] . '</button>'; } $ret[] = '</div>'; $ret[] = '</form>'; if (isset($vars['help'])) { // テキストの整形ルールを表示 $rule_wiki = Factory::Wiki(self::RULE_PAGENAME); $ret[] = '<hr />'; $ret[] = $rule_wiki->has() ? $rule_wiki->render() : '<p class="alert alert-warning">Sorry, page \'' . Utility::htmlsc(self::RULE_PAGENAME) . '\' unavailable.</p>'; } else { $ret[] = '<ul><li><a href="' . Factory::Wiki($page)->uri('edit', array('help' => 'true')) . '" id="FormatRule">' . $_string['help'] . '</a></li></ul>'; } return join("\n", $ret); }
function plugin_suckerfish_keyword($name) { global $do_backup, $trackback, $referer; global $function_freeze; global $vars; // $is_read = (arg_check('read') && is_page($vars['page'])); $is_read = isset($vars['page']) && is_page($vars['page']); $is_readonly = Auth::check_role('readonly'); $is_safemode = Auth::check_role('safemode'); $is_createpage = Auth::is_check_role(PKWK_CREATE_PAGE); $num = func_num_args(); $args = $num ? func_get_args() : array(); switch ($name) { case 'freeze': if ($is_readonly) { break; } if (!$is_read) { break; } if ($function_freeze) { if (!is_freeze($vars['page'])) { $name = 'freeze'; } else { $name = 'unfreeze'; } return _suckerfish($name); } break; case 'upload': if ($is_readonly) { break; } if (!$is_read) { break; } if ($function_freeze && is_freeze($vars['page'])) { break; } if ((bool) ini_get('file_uploads')) { return _suckerfish($name); } break; case 'filelist': if (arg_check('list')) { return _suckerfish($name); } break; case 'backup': if ($do_backup) { return _suckerfish($name); } break; case 'referer': if ($referer) { return _suckerfish($name); } break; case 'rss': case 'mixirss': return _suckerfish($name); break; case 'diff': if (!$is_read) { break; } if ($is_safemode) { break; } return _suckerfish($name); break; case 'edit': case 'guiedit': if (!$is_read) { break; } if ($is_readonly) { break; } if ($function_freeze && is_freeze($vars['page'])) { break; } return _suckerfish($name); break; case 'new': case 'newsub': if ($is_createpage) { break; } case 'rename': case 'copy': if ($is_readonly) { break; } case 'reload': case 'print': case 'full': if (!$is_read) { break; } default: return _suckerfish($name); break; } return array(); }
function plugin_edit_write() { global $vars, $trackback, $_string, $_msg_edit; global $notimeupdate; $page = isset($vars['page']) ? $vars['page'] : null; $add = isset($vars['add']) ? $vars['add'] : null; $digest = isset($vars['digest']) ? $vars['digest'] : null; $partid = isset($vars['id']) ? $vars['id'] : null; $notimestamp = isset($vars['notimestamp']) && $vars['notimestamp'] !== null; if (empty($page)) { return array('mgs' => 'Error', 'body' => $_msg_edit['err_empty_page']); } $wiki = Factory::Wiki($page); // Check Validate and Ticket if ($notimestamp && !$wiki->isValied()) { return plugin_edit_honeypot(); } // Validate if (is_spampost(array('msg'))) { return plugin_edit_honeypot(); } // Paragraph edit mode if ($partid) { $source = preg_split('/([^\\n]*\\n)/', $vars['original'], -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); $vars['msg'] = plugin_edit_parts($partid, $source, $vars['msg']) !== FALSE ? join('', $source) : rtrim($vars['original']) . "\n\n" . $vars['msg']; } $retvars = array(); if (isset($vars['msg']) && !empty($vars['msg'])) { // Delete "#freeze" command for form edit. $vars['msg'] = preg_replace('/^#freeze\\s*$/im', '', $vars['msg']); $msg = $vars['msg']; // Reference // Action? if ($add) { // Compat: add plugin and adding contents $postdata = isset($vars['add_top']) && $vars['add_top'] ? $msg . "\n\n" . $oldpagesrc : $oldpagesrc . "\n\n" . $msg; } else { // Edit or Remove $postdata =& $msg; } } else { // CAPTCHAが有効なときで、ページを削除しようとした時、$vars['msg']は空になる。 $wiki->set(''); $retvars['msg'] = sprintf($_msg_edit['title_deleted'], Utility::htmlsc($page)); $retvars['body'] = '<p class="alert alert-success">' . sprintf($_msg_edit['title_deleted'], Utility::htmlsc($page)) . '</p>'; return $retvars; } // $notimeupdate: Checkbox 'Do not change timestamp' // $notimestamp = isset($vars['notimestamp']) && $vars['notimestamp'] != ''; // if ($notimeupdate > 1 && $notimestamp && ! pkwk_login($vars['pass'])) { if ($notimeupdate > 1 && $notimestamp && Auth::check_role('role_contents_admin') && !pkwk_login($vars['pass'])) { // Enable only administrator & password error $retvars['body'] = '<p class="alert alert-danger">' . $_msg_edit['msg_invalidpass'] . '</p>' . "\n"; $retvars['body'] .= Utility::editForm($page, $msg, FALSE); return $retvars; } $wiki->set($postdata, $notimeupdate !== 0 && $notimestamp); if (isset($vars['refpage']) && $vars['refpage'] !== '') { $refwiki = Factory::Wiki($vars['refpage']); $url = $partid ? $refwiki->uri('read', null, rawurlencode($partid)) : $refwiki->uri(); } else { $url = $partid ? $wiki->uri('read', null, rawurlencode($partid)) : $wiki->uri(); } if (isset($vars['ajax'])) { $headers = Header::getHeaders('application/json'); Header::writeResponse($headers, 200, Json::encode(array('msg' => 'Your post has been saved.', 'posted' => true, 'taketime' => Time::getTakeTime()))); } else { Utility::redirect($url); } exit; }
function plugin_article_convert() { global $vars, $digest; // global $_btn_article, $_btn_name, $_btn_subject; global $_article_msg; static $numbers = array(); // if (PKWK_READONLY) return ''; // Show nothing if (Auth::check_role('readonly')) { return ''; } // Show nothing if (!isset($numbers[$vars['page']])) { $numbers[$vars['page']] = 0; } $article_no = $numbers[$vars['page']]++; $s_page = Utility::htmlsc($vars['page']); $s_digest = Utility::htmlsc($digest); $name_cols = PLUGIN_ARTICLE_NAME_COLS; $subject_cols = PLUGIN_ARTICLE_SUBJECT_COLS; $article_rows = PLUGIN_ARTICLE_ROWS; $article_cols = PLUGIN_ARTICLE_COLS; $script = get_script_uri(); $string = <<<EOD <form action="{$script}" method="post" class="form-horizontal row plugin-article-form"> \t<input type="hidden" name="article_no" value="{$article_no}" /> \t<input type="hidden" name="cmd" value="article" /> \t<input type="hidden" name="digest" value="{$s_digest}" /> \t<input type="hidden" name="refer" value="{$s_page}" /> \t<div class="form-group"> \t\t<label for="_p_article_name_{$article_no}" class="col-md-2 control-label">{$_article_msg['form_name']}</label> \t\t<div class="col-md-10"> \t\t\t<input type="text" name="name" class="form-control" id="_p_article_name_{$article_no}" size="{$name_cols}" placeholder="{$_article_msg['form_name']}" /> \t\t</div> \t</div> \t<div class="form-group"> \t\t<label for="_p_article_subject_{$article_no}" class="col-md-2 control-label">{$_article_msg['form_subject']}</label> \t\t<div class="col-md-10"> \t\t\t<input type="text" name="subject" class="form-control" id="_p_article_subject_{$article_no}" size="{$subject_cols}" placeholder="{$_article_msg['form_subject']}" /> \t\t</div> \t</div> \t<div class="form-group"> \t\t<label for="_p_article_msg_{$article_no}" class="col-md-2 control-label">{$_article_msg['form_subject']}</label> \t\t<div class="col-md-10"> \t\t\t<textarea name="msg" id="_p_article_msg_{$article_no}" class="form-control" rows="{$article_rows}" cols="{$article_cols}" placeholder="{$_article_msg['form_subject']}" ></textarea> \t\t</div> \t</div> \t<div class="form-group"> \t\t<div class="col-md-offset-2 col-md-10"> \t\t\t<input type="submit" name="article" class="btn btn-primary" value="{$_article_msg['btn_submit']}" /> \t\t</div> \t</div> </form> EOD; if (IS_MOBILE) { return '<div data-role="collapsible" data-collapsed="true" data-theme="b" data-content-theme="d">' . "\n" . '<h4>' . $_article_msg['btn_article'] . '</h4>' . "\n" . $string . "\n" . '</div>'; } else { return $string; } }