function plugin_read_action() { global $vars, $_title_invalidwn, $_msg_invalidiwn; $page = isset($vars['page']) ? $vars['page'] : ''; if (is_page($page)) { // ページを表示 check_readable($page, true, true); header_lastmod($page); return array('msg' => '', 'body' => ''); } else { if (!PKWK_SAFE_MODE && is_interwiki($page)) { return do_plugin_action('interwiki'); // InterWikiNameを処理 } else { if (is_pagename($page)) { $vars['cmd'] = 'edit'; return do_plugin_action('edit'); // 存在しないので、編集フォームを表示 } else { // 無効なページ名 return array('msg' => $_title_invalidwn, 'body' => str_replace('$1', htmlsc($page), str_replace('$2', 'WikiName', $_msg_invalidiwn))); } } } }
function plugin_doc_ini_action() { global $script, $vars, $_doc_ini_msg; if (auth::check_role('role_adm_contents')) { 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']); } $retval['body'] = <<<EOD <form action="{$script}" method="post"> <div> \t{$msg_title} <input type="hidden" name="plugin" value="doc_ini" /> <input type="hidden" name="action" value="exec" /> <input type="hidden" name="page" value="{$vars['page']}" /> <input type="submit" value="{$_doc_ini_msg['btn_exec']}" /> </div> </form> EOD; $retval['msg'] = $_doc_ini_msg['title_confirmation']; return $retval; }
function is_editable($page) { static $is_editable = array(); if (!isset($is_editable[$page])) { $is_editable[$page] = is_pagename($page) && !is_freeze($page) && !is_cantedit($page); } return $is_editable[$page]; }
function plugin_read_action() { global $vars, $_title_invalidwn, $_msg_invalidiwn; $page = isset($vars['page']) ? $vars['page'] : ''; if (is_page($page)) { // ページを表示 check_readable($page, true, true); header_lastmod($page); return array('msg' => '', 'body' => ''); // } else if (! PKWK_SAFE_MODE && is_interwiki($page)) { } else { if (!auth::check_role('safemode') && is_interwiki($page)) { return do_plugin_action('interwiki'); // InterWikiNameを処理 } else { if (is_pagename($page)) { $realpages = get_autoaliases($page); if (count($realpages) == 1) { $realpage = $realpages[0]; if (is_page($realpage)) { header('HTTP/1.0 301 Moved Permanently'); header('Location: ' . get_page_location_uri($realpage)); return; } elseif (is_url($realpage)) { header('HTTP/1.0 301 Moved Permanently'); header('Location: ' . $realpage); return; } elseif (is_interwiki($realpage)) { header('HTTP/1.0 301 Moved Permanently'); $vars['page'] = $realpage; return do_plugin_action('interwiki'); // header('Location'); } else { // 存在しない場合、直接編集フォームに飛ばす // To avoid infinite loop header('Location: ' . get_location_uri('edit', $realpage)); return; } } elseif (count($realpages) >= 2) { $body = '<p>'; $body .= _('This pagename is an alias to') . '<br />'; $link = ''; foreach ($realpages as $realpage) { $link .= '[[' . $realpage . '>' . $realpage . ']]&br;'; } $body .= make_link($link); $body .= '</p>'; return array('msg' => _('Redirect'), 'body' => $body); } $vars['cmd'] = 'edit'; return do_plugin_action('edit'); // 存在しないので、編集フォームを表示 } else { // 無効なページ名 return array('msg' => $_title_invalidwn, 'body' => str_replace('$1', htmlspecialchars($page), str_replace('$2', 'WikiName', $_msg_invalidiwn))); } } } }
function is_editable($page) { global $cantedit; static $is_editable = array(); if (!isset($is_editable[$page])) { $is_editable[$page] = is_pagename($page) && !is_freeze($page) && !in_array($page, $cantedit); } return $is_editable[$page]; }
function plugin_rename_action() { global $whatsnew; // if (PKWK_READONLY) die_message('PKWK_READONLY prohibits this'); if (auth::check_role('readonly')) { die_message('PKWK_READONLY prohibits this'); } $method = plugin_rename_getvar('method'); if ($method == 'regex') { $src = plugin_rename_getvar('src'); if ($src == '') { return plugin_rename_phase1(); } $src_pattern = '/' . preg_quote($src, '/') . '/'; $arr0 = preg_grep($src_pattern, auth::get_existpages()); if (!is_array($arr0) || empty($arr0)) { return plugin_rename_phase1('nomatch'); } $dst = plugin_rename_getvar('dst'); $arr1 = preg_replace($src_pattern, $dst, $arr0); foreach ($arr1 as $page) { if (!is_pagename($page)) { return plugin_rename_phase1('notvalid'); } } return plugin_rename_regex($arr0, $arr1); } else { // $method == 'page' $page = plugin_rename_getvar('page'); $refer = plugin_rename_getvar('refer'); if ($refer === '') { return plugin_rename_phase1(); } else { if (!is_page($refer)) { return plugin_rename_phase1('notpage', $refer); } else { if ($refer === $whatsnew) { return plugin_rename_phase1('norename', $refer); } else { if ($page === '' || $page === $refer) { return plugin_rename_phase2(); } else { if (!is_pagename($page)) { return plugin_rename_phase2('notvalid'); } else { return plugin_rename_refer(); } } } } } } }
function plugin_read_action() { global $vars, $script; global $post; $qm = get_qm(); $qt = get_qt(); $page = isset($vars['page']) ? $vars['page'] : ''; //キャッシュを無効化 if (isset($vars['word'])) { $qt->enable_cache = false; } if (is_page($page)) { // ページを表示 check_readable($page, true, true); header_lastmod($page); return array('msg' => '', 'body' => ''); } else { if (!PKWK_SAFE_MODE && is_interwiki($page)) { return do_plugin_action('interwiki'); // InterWikiNameを処理 } else { if (is_pagename($page)) { $vars['cmd'] = 'edit'; // 編集権限があれば、編集モードへ。なければ、メッセージを表示 $editable = edit_auth($page, FALSE, FALSE); if ($editable) { return do_plugin_action('edit'); // 存在しないので、編集フォームを表示 } else { //404 NOT FOUND header('HTTP/1.1 404 Not Found'); return array('msg' => $qm->m['fmt_err_notfoundpage_title'], 'body' => $qm->replace('fmt_err_notfoundpage', $script)); } } else { //EUCエンコーディングかチェック if (mb_detect_encoding($post['page'], 'UTF-8,EUC-JP') == 'EUC-JP') { $u_page = mb_convert_encoding($post['page'], 'UTF-8', 'EUC-JP'); $enc_page = rawurlencode($u_page); //redirect header("HTTP/1.1 301 Moved Permanently"); header('Location: ' . $script . '?' . $enc_page); exit; } // 無効なページ名 return array('msg' => $qm->m['fmt_title_invalidiwn'], 'body' => $qm->replace('fmt_err_invalidiwn', h($page), 'WikiName')); } } } }
function is_editable($page) { global $cantedit; static $is_editable = array(); if (!array_key_exists($page,$is_editable)) { $is_editable[$page] = ( is_pagename($page) and !is_freeze($page) and !in_array($page,$cantedit) ); } return $is_editable[$page]; }
function plugin_diff_delete($page) { global $script, $vars; global $_title_diff_delete, $_msg_diff_deleted; global $_msg_diff_adminpass, $_btn_delete, $_msg_invalidpass; $filename = DIFF_DIR . encode($page) . '.txt'; $body = ''; if (!is_pagename($page)) { $body = 'Invalid page name'; } if (!file_exists($filename)) { $body = make_pagelink($page) . '\'s diff seems not found'; } if ($body) { return array('msg' => $_title_diff_delete, 'body' => $body); } if (isset($vars['pass'])) { if (pkwk_login($vars['pass'])) { unlink($filename); return array('msg' => $_title_diff_delete, 'body' => str_replace('$1', make_pagelink($page), $_msg_diff_deleted)); } else { $body .= '<p><strong>' . $_msg_invalidpass . '</strong></p>' . "\n"; } } $s_page = htmlsc($page); $body .= <<<EOD <p>{$_msg_diff_adminpass}</p> <form action="{$script}" method="post"> <div> <input type="hidden" name="cmd" value="diff" /> <input type="hidden" name="page" value="{$s_page}" /> <input type="hidden" name="action" value="delete" /> <input type="password" name="pass" size="12" /> <input type="submit" name="ok" value="{$_btn_delete}" /> </div> </form> EOD; return array('msg' => $_title_diff_delete, 'body' => $body); }
function attach_upload($file, $page, $pass = NULL) { global $_attach_messages, $notify, $notify_subject; if (PKWK_READONLY) { die_message('PKWK_READONLY prohibits editing'); } // Check query-string $query = 'plugin=attach&pcmd=info&refer=' . rawurlencode($page) . '&file=' . rawurlencode($file['name']); if (PKWK_QUERY_STRING_MAX && strlen($query) > PKWK_QUERY_STRING_MAX) { pkwk_common_headers(); echo 'Query string (page name and/or file name) too long'; exit; } else { if (!is_page($page)) { die_message('No such page'); } else { if ($file['tmp_name'] == '' || !is_uploaded_file($file['tmp_name'])) { return array('result' => FALSE); } else { if ($file['size'] > PLUGIN_ATTACH_MAX_FILESIZE) { return array('result' => FALSE, 'msg' => $_attach_messages['err_exceed']); } else { if (!is_pagename($page) || $pass !== TRUE && !is_editable($page)) { return array('result' => FALSE, ' msg' => $_attach_messages['err_noparm']); } else { if (PLUGIN_ATTACH_UPLOAD_ADMIN_ONLY && $pass !== TRUE && ($pass === NULL || !pkwk_login($pass))) { return array('result' => FALSE, 'msg' => $_attach_messages['err_adminpass']); } } } } } } $obj =& new AttachFile($page, $file['name']); if ($obj->exist) { return array('result' => FALSE, 'msg' => $_attach_messages['err_exists']); } if (move_uploaded_file($file['tmp_name'], $obj->filename)) { chmod($obj->filename, PLUGIN_ATTACH_FILE_MODE); } if (is_page($page)) { touch(get_filename($page)); } $obj->getstatus(); $obj->status['pass'] = $pass !== TRUE && $pass !== NULL ? md5($pass) : ''; $obj->putstatus(); if ($notify) { $footer['ACTION'] = 'File attached'; $footer['FILENAME'] =& $file['name']; $footer['FILESIZE'] =& $file['size']; $footer['PAGE'] =& $page; $footer['URI'] = get_script_uri() . '?plugin=attach' . '&refer=' . rawurlencode($page) . '&file=' . rawurlencode($file['name']) . '&pcmd=info'; $footer['USER_AGENT'] = TRUE; $footer['REMOTE_ADDR'] = TRUE; pkwk_mail_notify($notify_subject, "\n", $footer) or die('pkwk_mail_notify(): Failed'); } return array('result' => TRUE, 'msg' => $_attach_messages['msg_uploaded']); }
function format_value($value) { global $WikiName; $value = strip_bracket($value); if (is_pagename($value)) { $value = "[[{$value}]]"; } return parent::format_value($value); }
function catbody($title, $page, $body) { global $script, $vars, $arg, $defaultpage, $whatsnew, $help_page, $hr; global $attach_link, $related_link, $cantedit, $function_freeze; global $search_word_color, $_msg_word, $foot_explain, $note_hr, $head_tags; global $trackback, $trackback_javascript, $referer, $javascript; 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 if (!file_exists(SKIN_FILE) || !is_readable(SKIN_FILE)) { die_message('SKIN_FILE is not found'); } $_LINK = $_IMAGE = array(); // Add JavaScript header when ... if ($trackback && $trackback_javascript) { $javascript = 1; } // Set something If you want if (!PKWK_ALLOW_JAVASCRIPT) { unset($javascript); } $_page = isset($vars['page']) ? $vars['page'] : ''; $r_page = rawurlencode($_page); // Set $_LINK for skin $_LINK['add'] = "{$script}?cmd=add&page={$r_page}"; $_LINK['backup'] = "{$script}?cmd=backup&page={$r_page}"; $_LINK['copy'] = "{$script}?plugin=template&refer={$r_page}"; $_LINK['diff'] = "{$script}?cmd=diff&page={$r_page}"; $_LINK['edit'] = "{$script}?cmd=edit&page={$r_page}"; $_LINK['filelist'] = "{$script}?cmd=filelist"; $_LINK['freeze'] = "{$script}?cmd=freeze&page={$r_page}"; $_LINK['help'] = "{$script}?" . rawurlencode($help_page); $_LINK['list'] = "{$script}?cmd=list"; $_LINK['new'] = "{$script}?plugin=newpage&refer={$r_page}"; $_LINK['rdf'] = "{$script}?cmd=rss&ver=1.0"; $_LINK['recent'] = "{$script}?" . rawurlencode($whatsnew); $_LINK['refer'] = "{$script}?plugin=referer&page={$r_page}"; $_LINK['reload'] = "{$script}?{$r_page}"; $_LINK['rename'] = "{$script}?plugin=rename&refer={$r_page}"; $_LINK['rss'] = "{$script}?cmd=rss"; $_LINK['rss10'] = "{$script}?cmd=rss&ver=1.0"; // Same as 'rdf' $_LINK['rss20'] = "{$script}?cmd=rss&ver=2.0"; $_LINK['search'] = "{$script}?cmd=search"; $_LINK['top'] = "{$script}?" . rawurlencode($defaultpage); if ($trackback) { $tb_id = tb_get_id($_page); $_LINK['trackback'] = "{$script}?plugin=tb&__mode=view&tb_id={$tb_id}"; } $_LINK['unfreeze'] = "{$script}?cmd=unfreeze&page={$r_page}"; $_LINK['upload'] = "{$script}?plugin=attach&pcmd=upload&page={$r_page}"; // Compat: Skins for 1.4.4 and before $link_add =& $_LINK['add']; $link_new =& $_LINK['new']; // New! $link_edit =& $_LINK['edit']; $link_diff =& $_LINK['diff']; $link_top =& $_LINK['top']; $link_list =& $_LINK['list']; $link_filelist =& $_LINK['filelist']; $link_search =& $_LINK['search']; $link_whatsnew =& $_LINK['recent']; $link_backup =& $_LINK['backup']; $link_help =& $_LINK['help']; $link_trackback =& $_LINK['trackback']; // New! $link_rdf =& $_LINK['rdf']; // New! $link_rss =& $_LINK['rss']; $link_rss10 =& $_LINK['rss10']; // New! $link_rss20 =& $_LINK['rss20']; // New! $link_freeze =& $_LINK['freeze']; $link_unfreeze =& $_LINK['unfreeze']; $link_upload =& $_LINK['upload']; $link_template =& $_LINK['copy']; $link_refer =& $_LINK['refer']; // New! $link_rename =& $_LINK['rename']; // Init flags $is_page = is_pagename($_page) && !arg_check('backup') && $_page != $whatsnew; $is_read = arg_check('read') && is_page($_page); $is_freeze = is_freeze($_page); // Last modification date (string) of the page $lastmodified = $is_read ? format_date(get_filetime($_page)) . ' ' . get_pg_passage($_page, FALSE) : ''; // List of attached files to the page $attaches = $attach_link && $is_read && exist_plugin_action('attach') ? 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" : ''; // 1.3.x compat // Last modification date (UNIX timestamp) of the page $fmt = $is_read ? get_filetime($_page) + LOCALZONE : 0; // Search words if ($search_word_color && isset($vars['word'])) { $body = '<div class="small">' . $_msg_word . htmlsc($vars['word']) . '</div>' . $hr . "\n" . $body; // BugTrack2/106: Only variables can be passed by reference from PHP 5.0.5 // with array_splice(), array_flip() $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 = htmlsc($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; } } $longtaketime = getmicrotime() - MUTIME; $taketime = sprintf('%01.03f', $longtaketime); require SKIN_FILE; }
function plugin_csv2newpage_write($ary, $base, $postdata, $config) { global $vars, $now, $num; $name = empty($ary['_name']) ? '' : $ary['_name']; if (!empty($ary['_page'])) { $page = $real = $ary['_page']; $page = $base . '/' . $page; } else { $real = is_pagename($name) ? $name : ++$num; $page = get_fullname('./' . $real, $base); } if (!Factory::Wiki($page)->isValied()) { $page = $base; } while (Factory::Wiki($page)->isValied()) { $real = ++$num; $page = $base . '/' . $real; } // 規定のデータ $_post = array_merge($ary, $vars, $_FILES); $_post['_date'] = $now; $_post['_page'] = $page; $_post['_name'] = $name; $_post['_real'] = $real; // $_post['_refer'] = $_post['refer']; if (!exist_plugin('tracker')) { return array('msg' => 'plugin not found', 'body' => 'The tracker plugin is not found.'); } $fields = plugin_tracker_get_fields($base, $page, $config); foreach ($fields as $key => $class) { if (array_key_exists($key, $_post)) { $val = $class->format_value($_post[$key]); } else { $val = $class->default_value; } $postdata = str_replace('[' . $key . ']', $val, $postdata); } // 書き込み Factory::Wiki($page)->set($postdata); return $page; }
function file_write($dir, $page, $str, $notimestamp = FALSE) { global $update_exec; global $notify, $notify_diff_only, $notify_subject; global $notify_exclude; global $whatsdeleted, $maxshow_deleted; global $_string; // if (PKWK_READONLY) return; // Do nothing if (auth::check_role('readonly')) { return; } // Do nothing if ($dir != DATA_DIR && $dir != DIFF_DIR) { die('file_write(): Invalid directory'); } $page = strip_bracket($page); $file = $dir . encode($page) . '.txt'; $file_exists = file_exists($file); // ---- // Delete? if ($dir == DATA_DIR && $str === '') { // Page deletion if (!$file_exists) { return; } // Ignore null posting for DATA_DIR // Update RecentDeleted (Add the $page) add_recent($page, $whatsdeleted, '', $maxshow_deleted); // Remove the page unlink($file); // Update RecentDeleted, and remove the page from RecentChanges lastmodified_add($whatsdeleted, $page); // Clear is_page() cache is_page($page, TRUE); return; } else { if ($dir == DIFF_DIR && $str === " \n") { return; // Ignore null posting for DIFF_DIR } } // ---- // File replacement (Edit) if (!is_pagename($page)) { die_message(str_replace('$1', htmlspecialchars($page), str_replace('$2', 'WikiName', $_msg_invalidiwn))); } $str = rtrim(preg_replace('/' . "\r" . '/', '', $str)) . "\n"; $timestamp = $file_exists && $notimestamp ? filemtime($file) : FALSE; $fp = fopen($file, 'a') or die('fopen() failed: ' . htmlspecialchars(basename($dir) . '/' . encode($page) . '.txt') . '<br />' . "\n" . 'Maybe permission is not writable or filename is too long'); set_file_buffer($fp, 0); @flock($fp, LOCK_EX); $last = ignore_user_abort(1); ftruncate($fp, 0); rewind($fp); fputs($fp, $str); ignore_user_abort($last); @flock($fp, LOCK_UN); fclose($fp); if ($timestamp) { pkwk_touch_file($file, $timestamp); } // Optional actions if ($dir == DATA_DIR) { if ($timestamp === FALSE) { lastmodified_add($page); } // Command execution per update if (defined('PKWK_UPDATE_EXEC') && PKWK_UPDATE_EXEC) { system(PKWK_UPDATE_EXEC . ' > /dev/null &'); } elseif ($update_exec) { system($update_exec . ' > /dev/null &'); } } else { if ($dir == DIFF_DIR && $notify) { $notify_exec = TRUE; foreach ($notify_exclude as $exclude) { $exclude = preg_quote($exclude); if (substr($exclude, -1) == '.') { $exclude = $exclude . '*'; } if (preg_match('/^' . $exclude . '/', $_SERVER["REMOTE_ADDR"])) { $notify_exec = FALSE; break; } } if ($notify_exec !== FALSE) { if ($notify_diff_only) { $str = preg_replace('/^[^-+].*\\n/m', '', $str); } $summary['ACTION'] = 'Page update'; $summary['PAGE'] =& $page; $summary['URI'] = get_page_absuri($page); $summary['USER_AGENT'] = TRUE; $summary['REMOTE_ADDR'] = TRUE; pkwk_mail_notify($notify_subject, $str, $summary); // pkwk_mail_notify($notify_subject, $str, $summary) or // die('pkwk_mail_notify(): Failed'); } } } is_page($page, TRUE); // Clear is_page() cache }
function catbody($title, $page, $body) { global $script, $script_ssl, $vars, $arg, $defaultpage, $whatsnew, $help_page, $hr; global $attach_link, $related_link, $cantedit, $function_freeze; global $search_word_color, $_msg_word, $foot_explain, $note_hr, $head_tags; global $trackback, $trackback_javascript, $referer, $javascript; global $nofollow, $non_list; 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 $owneraddr; // Site owner address global $ownertel; // Site owner tel global $headcopy; // Site headcopy global $menuadmin; // Menu Administrate Page global $style_type, $style_name, $logo_image, $logo_header; global $keywords, $description, $accesstag, $ga_tracking_id, $killer_fg, $killer_bg, $noindex, $accesstag_moved; //for skin by hokuken global $qhm_adminmenu; // Site administration menu 20 JUN 2007 global $custom_meta; // Insert meta tag for specific meta tag global $adcode; // AD code (exp. Google Adwords, Analytics ... ) 25 JLY 2007 by hokuken.com global $nowindow; // Disable including external_link.js global $killer_page2; // for Killer page Design 2 global $no_qhm_licence; // qhm licence global $include_skin_file_path; //orignal skin setting global $qhm_access_key; global $reg_exp_host; global $unload_confirm, $check_login; global $enable_wp_theme, $enable_wp_theme_name, $wp_add_css; //WordPress用のテーマ global $mobile_redirect, $googlemaps_apikey; global $other_plugins, $other_plugin_categories; global $default_script, $init_scripts; global $enable_smart_style, $smart_name; // smart phone global $is_update; global $enable_fitvids; // body部分以外は、元々の$script を使う(通常のリンク設定)を使う // 結果、$body内は、script_sslを使ったリンクになるが、ナビ、メニューなどは、元の$scriptを必ず使う $script = $init_scripts['normal']; $script_ssl = $init_scripts['ssl']; if (!file_exists(SKIN_FILE) || !is_readable(SKIN_FILE)) { die_message('SKIN_FILE is not found'); } $_LINK = $_IMAGE = array(); // Add JavaScript header when ... if ($trackback && $trackback_javascript) { $javascript = 1; } // Set something If you want if (!PKWK_ALLOW_JAVASCRIPT) { unset($javascript); } $_page = isset($vars['page']) ? $vars['page'] : ''; $r_page = rawurlencode($_page); //QHM Template $qt = get_qt(); if (!$qt->set_page) { $qt->set_page($_page); } //QHM Messages $qm = get_qm(); // Set $_LINK for skin $_LINK['add'] = "{$script}?cmd=add&page={$r_page}"; $_LINK['backup'] = "{$script}?cmd=backup&page={$r_page}"; $_LINK['copy'] = "{$script}?plugin=template&refer={$r_page}"; $_LINK['diff'] = "{$script}?cmd=diff&page={$r_page}"; $_LINK['edit'] = "{$script}?cmd=edit&page={$r_page}"; $_LINK['filelist'] = "{$script}?cmd=filelist"; $_LINK['freeze'] = "{$script}?cmd=freeze&page={$r_page}"; $_LINK['help'] = "{$script}?" . rawurlencode($help_page); $_LINK['list'] = "{$script}?cmd=list"; $_LINK['new'] = "{$script}?plugin=newpage&refer={$r_page}"; $_LINK['rdf'] = "{$script}?cmd=rss&ver=1.0"; $_LINK['recent'] = "{$script}?" . rawurlencode($whatsnew); $_LINK['refer'] = "{$script}?plugin=referer&page={$r_page}"; $_LINK['reload'] = "{$script}?{$r_page}"; $_LINK['rename'] = "{$script}?plugin=rename&refer={$r_page}"; $_LINK['delete'] = "{$script}?plugin=delete&page={$r_page}"; $_LINK['rss'] = "{$script}?cmd=rss"; $_LINK['rss10'] = "{$script}?cmd=rss&ver=1.0"; // Same as 'rdf' $_LINK['rss20'] = "{$script}?cmd=rss&ver=2.0"; $_LINK['search'] = "{$script}?cmd=search"; $_LINK['top'] = dirname($script . 'dummy.php') . '/'; if ($trackback) { $tb_id = tb_get_id($_page); $_LINK['trackback'] = "{$script}?plugin=tb&__mode=view&tb_id={$tb_id}"; } $_LINK['unfreeze'] = "{$script}?cmd=unfreeze&page={$r_page}"; $_LINK['upload'] = "{$script}?plugin=attach&pcmd=upload&page={$r_page}"; $_LINK['menuadmin'] = "{$script}?" . rawurlencode($menuadmin); //Hokuken.com original $_LINK['qhm_adminmenu'] = qhm_get_script_path() . "?cmd=qhmauth"; $_LINK['qhm_logout'] = "{$script}?cmd=qhmlogout"; $_LINK['qhm_setting'] = "{$script}?cmd=qhmsetting"; $_LINK['edit_menu'] = "{$script}?cmd=edit&page=MenuBar"; $_LINK['edit_menu2'] = "{$script}?cmd=edit&page=MenuBar2"; $_LINK['edit_navi'] = "{$script}?cmd=edit&page=SiteNavigator"; $_LINK['edit_navi2'] = "{$script}?cmd=edit&page=SiteNavigator2"; $_LINK['edit_header'] = "{$script}?cmd=edit&page=SiteHeader"; $_LINK['yetlist'] = "{$script}?cmd=yetlist"; // Compat: Skins for 1.4.4 and before $link_add =& $_LINK['add']; $link_new =& $_LINK['new']; // New! $link_edit =& $_LINK['edit']; $link_diff =& $_LINK['diff']; $link_top =& $_LINK['top']; $link_list =& $_LINK['list']; $link_filelist =& $_LINK['filelist']; $link_search =& $_LINK['search']; $link_whatsnew =& $_LINK['recent']; $link_backup =& $_LINK['backup']; $link_help =& $_LINK['help']; $link_trackback =& $_LINK['trackback']; // New! $link_rdf =& $_LINK['rdf']; // New! $link_rss =& $_LINK['rss']; $link_rss10 =& $_LINK['rss10']; // New! $link_rss20 =& $_LINK['rss20']; // New! $link_freeze =& $_LINK['freeze']; $link_unfreeze =& $_LINK['unfreeze']; $link_upload =& $_LINK['upload']; $link_template =& $_LINK['copy']; $link_refer =& $_LINK['refer']; // New! $link_rename =& $_LINK['rename']; $link_delete =& $_LINK['delete']; $link_menuadmin =& $_LINK['menuadmin']; //Hokuken.com original $link_copy =& $_LINK['copy']; $link_qhm_adminmenu =& $_LINK['qhm_adminmenu']; //Hokuken.com original $link_qhm_logout =& $_LINK['qhm_logout']; //Hokuken.com original $link_qhm_setting =& $_LINK['qhm_setting']; //Hokuken.com original $link_edit_menu =& $_LINK['edit_menu']; //Hokuken.com original $link_edit_menu2 =& $_LINK['edit_menu2']; $link_edit_navi =& $_LINK['edit_navi']; //Hokuken.com original $link_edit_navi2 =& $_LINK['edit_navi2']; //Hokuken.com original $link_edit_header =& $_LINK['edit_header']; //Hokuken.com original $link_yetlist =& $_LINK['yetlist']; //Hokuken.com original // Init flags $is_page = is_pagename($_page) && $_page != $whatsnew; $is_read = arg_check('read') && is_page($_page); $is_freeze = is_freeze($_page); // Last modification date (string) of the page $lastmodified = $is_read ? format_date(get_filetime($_page)) . ' ' . get_pg_passage($_page, FALSE) : ''; // List of attached files to the page $attaches = $attach_link && $is_read && exist_plugin_action('attach') ? 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" : ''; // 1.3.x compat // Last modification date (UNIX timestamp) of the page $fmt = $is_read ? get_filetime($_page) + LOCALZONE : 0; // Search words if ($search_word_color && isset($vars['word'])) { $body = '<div class="small">' . $_msg_word . htmlspecialchars($vars['word']) . '</div>' . $hr . "\n" . $body; // BugTrack2/106: Only variables can be passed by reference from PHP 5.0.5 // with array_splice(), array_flip() $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; } } //----------------------------------------------------------------------- // // customized by hokuken for QHM (2009/1/28) // //----------------------------------------------------------------------- //----------------- 携帯の場合の処理 -------------------------------------- if (preg_match('/keitai.skin.php$/', SKIN_FILE)) { require LIB_DIR . 'qhm_init.php'; require LIB_DIR . 'qhm_init_main.php'; require SKIN_FILE; return; } //------------------- IF UA is mobile, end here ----------------------- //---------- KILLERPAGE: でもKILLERPAGE2:に統合 いつか消したい -------------- if ($killer_fg != '') { //load common setting and output header require LIB_DIR . 'qhm_init.php'; $killer_page2['fg'] = $killer_fg; $killer_page2['bg'] = $killer_bg; $killer_page2['width'] = 700; $killer_page2['padding'] = 60; $killer_page2['bg_body'] = '#fff'; $killer_page2['fg_body'] = '#000'; require LIB_DIR . 'qhm_init_killer.php'; $longtaketime = getmicrotime() - MUTIME; $taketime = sprintf('%01.03f', $longtaketime); $qt->setv('taketime', $taketime); } //--------------------------- いつか消したい end here ---------------- /////////////////////////////////////////////////////////////////// // // Main // //common setting require LIB_DIR . 'qhm_init.php'; $qt->enable_cache = $qt->getv('editable') ? false : $qt->enable_cache; $qt->set_encode($shiftjis || $eucjp ? true : false); if ($shiftjis) { $output_encode = 'Shift_JIS'; } else { if ($eucjp) { $output_encode = 'EUC-JP'; } else { $output_encode = CONTENT_CHARSET; } } define('WORDPRESS_CHARSET', $output_encode); //output common header (available change encode) $qt->setv('meta_content_type', qhm_output_dtd($pkwk_dtd, CONTENT_CHARSET, $output_encode)); //------- KILLERPAGE2: セールスレター型デザイン ------------------- if (isset($killer_page2['fg']) != '') { require LIB_DIR . 'qhm_init_killer.php'; //JQuery Include $jquery_script = ''; $jquery_cookie_script = ''; if ($qt->getv('jquery_include')) { $jquery_script = '<script type="text/javascript" src="js/jquery.js"></script>'; $jquery_cookie_script = '<script type="text/javascript" src="js/jquery.cookie.js"></script>'; } $bootstrap_style = $bootstrap_script = ''; if ($qt->getv('bootstrap_script')) { $bootstrap_style = $qt->getv('bootstrap_style'); $bootstrap_script = $qt->getv('bootstrap_script'); } $qt->setv('jquery_script', $bootstrap_style . $jquery_script . $bootstrap_script); $qt->setv('jquery_cookie_script', $jquery_cookie_script); $longtaketime = getmicrotime() - MUTIME; $taketime = sprintf('%01.03f', $longtaketime); $qt->setv('taketime', $taketime); $qt->read('skin/killerpage2/pukiwiki.skin.php'); return; } //------------------------------------------------------------- // ---- include main design skin file ---- if (isset($_SESSION['temp_skin']) && strlen($_SESSION['temp_skin']) > 0) { $style_type = $_SESSION['temp_style_type']; } //pluginでデザインが指定されている場合 if ($include_skin_file_path != '') { $style_name = $include_skin_file_path; } require LIB_DIR . 'qhm_init_main.php'; // meta:GENERATOR $generator_tag = '<meta name="GENERATOR" content="Quick Homepage Maker; version=' . QHM_VERSION . '; haik=' . (is_bootstrap_skin() ? 'true' : 'false') . '" />' . "\n"; $qt->prependv_once('generator_tag', 'beforescript', $generator_tag); //------------------------------------------------- // ogp タグを挿入 //------------------------------------------------- if (exist_plugin('ogp')) { plugin_ogp_set_template($body); } //独自のテンプレートファイルをチェック $skin_file = SKIN_DIR . "{$style_name}/pukiwiki.skin.php"; if ($qt->getv('layout_name')) { $layout_file = $qt->getv('layout_name') . '.skin.php'; $layout_path = SKIN_DIR . "{$style_name}/{$layout_file}"; if (file_exists($layout_path)) { $skin_file = $layout_path; } } else { $layout_prefix = 'content'; if ($_page === $defaultpage) { $layout_prefix = 'default'; } else { if (is_qblog()) { $layout_prefix = 'article'; } } $layout_name = isset($style_config["{$layout_prefix}_layout"]) ? $style_config["{$layout_prefix}_layout"] : ""; $layout_path = SKIN_DIR . "{$style_name}/{$layout_name}.skin.php"; if (file_exists($layout_path)) { $skin_file = $layout_path; } } if (!file_exists($skin_file)) { $skin_file = SKIN_FILE; //デフォルトの位置 } // Read design config for customize $style_config = read_skin_config($style_name); $skin_custom_vars = get_skin_custom_vars($style_name); $custom_css = make_custom_css($style_name); $qt->prependv('beforescript', $custom_css); if (isset($style_config['bootstrap']) && $style_config['bootstrap'] !== false) { $qt->setv('jquery_include', true); } // Default Eyecatch if (isset($skin_custom_vars['default_eyecatch']) && $skin_custom_vars['default_eyecatch'] && $qt->getv('main_visual') === '' && exist_plugin('eyecatch')) { $bg_image = $color = ''; if (isset($skin_custom_vars['eyecatch_bgimage'])) { $bg_image = $skin_custom_vars['eyecatch_bgimage']; $bg_image = is_url($bg_image, TRUE, TRUE) || file_exists(get_file_path($bg_image)) ? $bg_image : ''; } if (isset($skin_custom_vars['enable_eyecatch_bgimage']) && !$skin_custom_vars['enable_eyecatch_bgimage']) { $bg_image = ''; } if (isset($skin_custom_vars['eyecatch_color'])) { $color = 'color=' . $skin_custom_vars['eyecatch_color']; } if (is_qblog()) { $title_copy = $qblog_title; } else { if (isset($skin_custom_vars['eyecatch_title_type']) && trim($skin_custom_vars['eyecatch_title_type']) == 'site') { $title_copy = $page_title; } else { if ($_page === $defaultpage) { $title_copy = $page_title; } else { $title_copy = get_page_title($_page); } } } $content = <<<EOD ! {$title_copy} EOD; plugin_eyecatch_convert($bg_image, $color, '__default', $content); } if ($qt->getv('no_eyecatch')) { $qt->setv('main_visual', "<!-- no eyecatch -->"); } // Determine emptiness of eyecatch $qt->setv('eyecatch_is_empty', $qt->getv('no_eyecatch') || $qt->getv('main_visual') === ''); if (isset($skin_custom_vars['palette_color']) && trim($skin_custom_vars['palette_color'])) { $qt->setv('palette_color', trim($skin_custom_vars['palette_color'])); $qt->setv('palette_color_class', 'haik-palette-' . trim($skin_custom_vars['palette_color'])); } //JQuery Include $jquery_script = ''; $jquery_cookie_script = ''; if ($qt->getv('jquery_include')) { $jquery_script = '<script type="text/javascript" src="js/jquery.js"></script>'; $jquery_cookie_script = '<script type="text/javascript" src="js/jquery.cookie.js"></script>'; } if ($qt->getv('bootstrap_script')) { $bootstrap_script = $qt->getv('bootstrap_script'); } $qt->setv('jquery_script', $jquery_script . $bootstrap_script); $qt->setv('jquery_cookie_script', $jquery_cookie_script); $longtaketime = getmicrotime() - MUTIME; $taketime = sprintf('%01.03f', $longtaketime); $qt->setv('taketime', $taketime); //UniversalAnalytics Tracking Code if ($code = $qt->getv('ga_universal_analytics')) { $qt->appendv('beforescript', $code); } //------------------------------------------------------------------ // WordPressデザイン if ($enable_wp_theme && ($vars['cmd'] != 'qhmsetting' && $vars['plugin'] != 'qhmsetting')) { define('TEMPLATEPATH', 'skin/wordpress/' . $enable_wp_theme_name); include LIB_DIR . 'wp_adapter.php'; wp_load_functions(); $skin_file = get_wp_skin_file(); } //------------------------------------------------------------------- //------------------------------------------------------------------- // プレビュー用のskinファイルを表示 $tmpfilename = ''; if (isset($_SESSION['temp_skin']) && strlen($_SESSION['temp_skin']) > 0) { $tmpfilename = $skin_file = tempnam(realpath(CACHEQHM_DIR), 'qhmdesign'); file_put_contents($skin_file, $_SESSION['temp_skin']); $qt->setv('default_css', $bootstrap_css . $_SESSION['temp_css']); $qt->setv('style_path', $_SESSION['temp_style_path']); } //------------------------------------------------------------------- //skinファイルを読み込んで、表示 $qt->read($skin_file, $_page); // 一時ファイルの削除 if (file_exists($tmpfilename) && strpos(basename($tmpfilename), 'qhmdesign') === 0) { unlink($tmpfilename); } }
function plugin_calendar_convert() { global $script, $weeklabels, $vars, $command; $args = func_get_args(); $date_str = get_date('Ym'); $page = ''; if (func_num_args() == 1) { if (is_numeric($args[0]) && strlen($args[0]) == 6) { $date_str = $args[0]; } else { $page = $args[0]; } } else { if (func_num_args() == 2) { if (is_numeric($args[0]) && strlen($args[0]) == 6) { $date_str = $args[0]; $page = $args[1]; } else { if (is_numeric($args[1]) && strlen($args[1]) == 6) { $date_str = $args[1]; $page = $args[0]; } } } } if ($page == '') { $page = $vars['page']; } else { if (!is_pagename($page)) { return FALSE; } } $pre = $page; $prefix = $page . '/'; if (!$command) { $cmd = 'read'; } else { $cmd = $command; } $prefix = strip_tags($prefix); $yr = substr($date_str, 0, 4); $mon = substr($date_str, 4, 2); if ($yr != get_date('Y') || $mon != get_date('m')) { $now_day = 1; $other_month = 1; } else { $now_day = get_date('d'); $other_month = 0; } $today = getdate(mktime(0, 0, 0, $mon, $now_day, $yr) - LOCALZONE + ZONETIME); $m_num = $today['mon']; $d_num = $today['mday']; $year = $today['year']; $f_today = getdate(mktime(0, 0, 0, $m_num, 1, $year) - LOCALZONE + ZONETIME); $wday = $f_today['wday']; $day = 1; $m_name = $year . '.' . $m_num . ' (' . $cmd . ')'; $prefix_url = rawurlencode(is_pagename($pre) ? $pre : '[[' . $pre . ']]'); $pre = strip_bracket($pre); $ret = <<<EOD <table class="style_calendar" cellspacing="1" width="150" border="0"> <tr> <td class="style_td_caltop" colspan="7"> <strong>{$m_name}</strong><br /> [<a href="{$script}?{$prefix_url}">{$pre}</a>] </td> </tr> <tr> EOD; foreach ($weeklabels as $label) { $ret .= ' <td class="style_td_week"><strong>' . $label . '</strong></td>' . "\n"; } $ret .= ' </tr>' . "\n" . ' <tr>' . "\n"; // Blank for ($i = 0; $i < $wday; $i++) { $ret .= ' <td class="style_td_blank"> </td>' . "\n"; } while (checkdate($m_num, $day, $year)) { $dt = sprintf('%04d%02d%02d', $year, $m_num, $day); $name = $prefix . $dt; $r_page = rawurlencode($name); $s_page = htmlsc($name); $refer = $cmd == 'edit' ? '&refer=' . rawurlencode($page) : ''; if ($cmd == 'read' && !is_page($name)) { $link = '<strong>' . $day . '</strong>'; } else { $link = '<a href="' . $script . '?cmd=' . $cmd . '&page=' . $r_page . $refer . '" title="' . $s_page . '"><strong>' . $day . '</strong></a>'; } if ($wday == 0 && $day > 1) { $ret .= ' </tr><tr>' . "\n"; } if (!$other_month && $day == $today['mday'] && $m_num == $today['mon'] && $year == $today['year']) { // Today $ret .= ' <td class="style_td_today"><span class="small">' . $link . '</span></td>' . "\n"; } else { if ($wday == 0) { // Sunday $ret .= ' <td class="style_td_sun"><span class="small">' . $link . '</span></td>' . "\n"; } else { if ($wday == 6) { // Saturday $ret .= ' <td class="style_td_sat"><span class="small">' . $link . '</span></td>' . "\n"; } else { // Weekday $ret .= ' <td class="style_td_day"><span class="small">' . $link . '</span></td>' . "\n"; } } } ++$day; ++$wday; $wday = $wday % 7; } if ($wday > 0) { while ($wday < 7) { // Blank $ret .= ' <td class="style_td_blank"> </td>' . "\n"; ++$wday; } } $ret .= ' </tr>' . "\n" . '</table>' . "\n"; return $ret; }
function plugin_button_body($args, $text) { global $script, $vars; $type = ' btn-default'; $size = ''; $block = ''; $class = ''; if (count($args) > 0) { $href = array_shift($args); if (is_page($href)) { $href = $script . '?' . rawurlencode($href); } else { if (!is_url($href) && is_pagename($href)) { $href = $script . '?cmd=edit&page=' . rawurlencode($href); } } $target = FALSE; foreach ($args as $arg) { $arg = trim($arg); switch ($arg) { case 'primary': case 'info': case 'success': case 'warning': case 'danger': case 'link': case 'default': $type = ' btn-' . $arg; break; case 'large': case 'lg': $size = ' btn-lg'; break; case 'small': case 'sm': $size = ' btn-sm'; break; case 'mini': case 'xs': $size = ' btn-xs'; break; case 'block': $block = ' btn-' . $arg; break; case 'round': case 'rounded': $class .= ' btn-round'; break; case 'gradient': case 'ghost': case 'ghost-w': $class .= ' btn-' . $arg; break; default: if (preg_match('/\\Awindow=(.+)\\z/', $arg, $mts)) { $target = $mts[1]; } else { $class .= ' ' . $arg; } } } } else { $href = "#"; } $target = $target !== FALSE ? ' target="' . h($target) . '"' : ''; $html = '<a class="btn' . $type . $block . $size . $class . '" href="' . h($href) . '"' . $target . '>' . $text . '</a>'; return $html; }
function file_write($dir, $page, $str, $notimestamp = FALSE) { global $notify, $notify_diff_only, $notify_subject; global $whatsdeleted, $maxshow_deleted; global $qblog_page_re; $qm = get_qm(); if (PKWK_READONLY) { return; } // Do nothing if ($dir != DATA_DIR && $dir != DIFF_DIR) { die($qm->m['file']['err_invalid_dir']); } $page = strip_bracket($page); $file = $dir . encode($page) . '.txt'; $file_exists = file_exists($file); // ---- // Record last modified date for QHM cache func. $lm_file = CACHE_DIR . QHM_LASTMOD; file_put_contents($lm_file, date('Y-m-d H:i:s')); // ---- // 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); //QBlog 記事 であれば、削除処理を呼び出す if (preg_match($qblog_page_re, $page)) { qblog_remove_post($page); } // 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', $qm->m['fmt_err_invalidiwn']))); } $str = rtrim(preg_replace('/' . "\r" . '/', '', $str)) . "\n"; $timestamp = $file_exists && $notimestamp ? filemtime($file) : FALSE; $fp = fopen($file, 'a') or die($qm->replace('file.err_not_writable', h(basename($dir)), encode($page))); set_file_buffer($fp, 0); flock($fp, LOCK_EX); ftruncate($fp, 0); rewind($fp); fputs($fp, $str); flock($fp, LOCK_UN); fclose($fp); if ($timestamp) { pkwk_touch_file($file, $timestamp); } // Optional actions if ($dir == DATA_DIR) { // Update RecentChanges (Add or renew the $page) if ($timestamp === FALSE) { lastmodified_add($page); } add_tinycode($page); // Command execution per update if (defined('PKWK_UPDATE_EXEC') && PKWK_UPDATE_EXEC) { system(PKWK_UPDATE_EXEC . ' > /dev/null &'); } } else { if ($dir == DIFF_DIR && $notify) { if ($notify_diff_only) { $str = preg_replace('/^[^-+].*\\n/m', '', $str); } $footer['ACTION'] = 'Page update'; $footer['PAGE'] =& $page; $footer['URI'] = get_script_uri() . '?' . rawurlencode($page); $footer['USER_AGENT'] = TRUE; $footer['REMOTE_ADDR'] = TRUE; if (isset($_SESSION['usr'])) { $str .= "\n\n " . $qm->replace('file.lbl_editor', $_SESSION['usr']) . "\n"; } pkwk_mail_notify($notify_subject, $str, $footer) or die($qm->m['file']['err_mail_failed']); } } is_page($page, TRUE); // Clear is_page() cache }
function _format($page) { $page = strip_bracket($page); if (is_pagename($page)) { $page = '[[' . $page . ']]'; } return $page; }
function plugin_template_action() { global $script, $vars; global $_title_edit; global $_msg_template_start, $_msg_template_end, $_msg_template_page, $_msg_template_refer; global $_btn_template_create, $_title_template; global $_err_template_already, $_err_template_invalid, $_msg_template_force; if (PKWK_READONLY) { die_message('PKWK_READONLY prohibits editing'); } if (!isset($vars['refer']) || !is_page($vars['refer'])) { return false; } $lines = get_source($vars['refer']); // Remove '#freeze' if (!empty($lines) && strtolower(rtrim($lines[0])) == '#freeze') { array_shift($lines); } $begin = isset($vars['begin']) && is_numeric($vars['begin']) ? $vars['begin'] : 0; $end = isset($vars['end']) && is_numeric($vars['end']) ? $vars['end'] : count($lines) - 1; if ($begin > $end) { $temp = $begin; $begin = $end; $end = $temp; } $page = isset($vars['page']) ? $vars['page'] : ''; $is_page = is_page($page); // edit if ($is_pagename = is_pagename($page) && (!$is_page || !empty($vars['force']))) { $postdata = join('', array_splice($lines, $begin, $end - $begin + 1)); $retvar['msg'] = $_title_edit; $retvar['body'] = edit_form($vars['page'], $postdata); $vars['refer'] = $vars['page']; return $retvar; } $begin_select = $end_select = ''; for ($i = 0; $i < count($lines); $i++) { $line = htmlsc(mb_strimwidth($lines[$i], 0, MAX_LEN, '...')); $tag = $i == $begin ? ' selected="selected"' : ''; $begin_select .= "<option value=\"{$i}\"{$tag}>{$line}</option>\n"; $tag = $i == $end ? ' selected="selected"' : ''; $end_select .= "<option value=\"{$i}\"{$tag}>{$line}</option>\n"; } $_page = htmlsc($page); $msg = $tag = ''; if ($is_page) { $msg = $_err_template_already; $tag = '<input type="checkbox" name="force" value="1" />' . $_msg_template_force; } elseif ($page != '' && !$is_pagename) { $msg = str_replace('$1', $_page, $_err_template_invalid); } $s_refer = htmlsc($vars['refer']); $s_page = $page == '' ? str_replace('$1', $s_refer, $_msg_template_page) : $_page; $ret = <<<EOD <form action="{$script}" method="post"> <div> <input type="hidden" name="plugin" value="template" /> <input type="hidden" name="refer" value="{$s_refer}" /> {$_msg_template_start} <select name="begin" size="10">{$begin_select}</select><br /><br /> {$_msg_template_end} <select name="end" size="10">{$end_select}</select><br /><br /> <label for="_p_template_refer">{$_msg_template_refer}</label> <input type="text" name="page" id="_p_template_refer" value="{$s_page}" /> <input type="submit" name="submit" value="{$_btn_template_create}" /> {$tag} </div> </form> EOD; $retvar['msg'] = $msg == '' ? $_title_template : $msg; $retvar['body'] = $ret; return $retvar; }
/** * @author lunt * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GPL 2 * @version $Id: monobook_getlink.inc.php 267 2007-08-03 11:25:16Z lunt $ */ function plugin_monobook_getlink($tab, $message, $check_selected = FALSE) { global $vars, $plugin, $_LINK; global $do_backup, $function_freeze, $referer, $trackback; global $defaultpage, $whatsnew, $help_page, $cantedit; static $page, $is_page, $is_pagename, $is_editable, $is_freeze; if (is_null($page)) { $page = empty($vars['page']) ? '' : $vars['page']; $is_page = is_page($page); $is_pagename = is_pagename($page); $is_editable = is_editable($page); $is_freeze = is_freeze($page); } if ($tab === 'nowplugin') { $tab = $plugin; if ($plugin === 'attach') { if (isset($vars['pcmd']) && $vars['pcmd'] === 'info') { $tab = 'attachinfo'; } elseif (isset($vars['pcmd']) && $vars['pcmd'] === 'list') { $tab = empty($vars['refer']) ? 'attachlistall' : 'attachlist'; } else { $tab = 'upload'; } } } $link = $title = ''; $selected = 0; switch ($tab) { case 'add': case 'edit': if (auth::check_role('readonly') || !$is_editable) { break; } $link = $_LINK[$tab]; $title = $message[$tab]; break; case 'attach': case 'upload': if (auth::check_role('readonly') || !ini_get('file_uploads') || !$is_page || !$is_editable) { break; } $link = $_LINK['upload']; $title = $message['upload']; if ($plugin === 'attach' && isset($vars['pcmd']) && $vars['pcmd'] === 'upload') { $selected = 1; } break; case 'attachinfo': $link = get_script_uri() . strrchr($_SERVER['REQUEST_URI'], '?'); $title = $message['attachinfo']; $selected = 1; break; case 'attachlist': if ($is_pagename) { $link = get_script_uri() . '?plugin=attach&pcmd=list&refer=' . rawurlencode($page); } elseif ($plugin === 'attach' && isset($vars['pcmd']) && $vars['pcmd'] === 'list' && !empty($vars['refer'])) { $link = get_script_uri() . strrchr($_SERVER['REQUEST_URI'], '?'); $selected = 1; } $title = $message['attachlist']; break; case 'attachlistall': $link = get_script_uri() . '?plugin=attach&pcmd=list'; $title = $message['attachlistall']; if ($plugin === 'attach' && isset($vars['pcmd']) && $vars['pcmd'] === 'list' && empty($vars['refer'])) { $selected = 1; } break; case 'backlink': case 'related': if (!$is_pagename) { break; } $link = get_script_uri() . '?plugin=related&page=' . rawurlencode($page); $title = $message['related']; $tab = 'related'; break; case 'backup': if (!$do_backup || !$is_pagename) { break; } $link = $_LINK['backup']; $title = $message['backup']; break; case 'copy': case 'template': if (auth::check_role('readonly')) { break; } if ($is_page) { $link = $_LINK['copy']; } elseif ($plugin === 'template') { $link = get_script_uri() . strrchr($_SERVER['REQUEST_URI'], '?'); } $title = $message['copy']; $tab = 'template'; break; case 'diff': if (!$is_pagename) { break; } $link = $_LINK['diff']; $title = $message['diff']; break; case 'filelist': case 'help': case 'list': case 'rdf': case 'recent': case 'rss': case 'rss10': case 'rss20': case 'search': case 'top': $link = $_LINK[$tab]; $title = $message[$tab]; break; case 'freeze': case 'unfreeze': if (auth::check_role('readonly') || !$function_freeze || !$is_page || in_array($page, $cantedit)) { break; } $tab = $is_freeze ? 'unfreeze' : 'freeze'; $link = $_LINK[$tab]; $title = $message[$tab]; break; case 'new': case 'newpage': if (auth::check_role('readonly')) { break; } $link = $_LINK['new']; $title = $message['new']; $tab = 'newpage'; break; case 'paraedit': $link = get_script_uri() . strrchr($_SERVER['REQUEST_URI'], '?'); $title = $message['edit']; break; case 'read': $link = $_LINK['reload']; $title = $message['article']; break; case 'refer': case 'referer': if (!$referer || !$is_pagename) { break; } $link = $_LINK['refer']; $title = $message['refer']; $tab = 'referer'; break; case 'reload': if (!$page) { break; } $link = $_LINK['reload']; $title = $message['reload']; break; case 'rename': if (auth::check_role('readonly')) { break; } if ($is_page && $is_editable) { $link = $_LINK['rename']; } elseif ($plugin === 'rename') { $link = get_script_uri() . strrchr($_SERVER['REQUEST_URI'], '?'); } $title = $message['rename']; break; case 'revert': $link = plugin_revert_getlink(); $link = $link ? $link : get_script_uri() . strrchr($_SERVER['REQUEST_URI'], '?'); $title = $message['revert']; break; case 'source': if (!$is_page || PKWK_SAFE_MODE) { break; } $link = get_script_uri() . '?cmd=source&page=' . rawurlencode($page); $title = $message['source']; break; case 'trackback': if (!$trackback || !$is_pagename) { break; } $link = $_LINK['trackback']; $title = $message['trackback'] . ' (' . tb_count($page) . ')'; break; case 'yetlist': if (auth::check_role('readonly')) { break; } $link = get_script_uri() . '?plugin=yetlist'; $title = $message['yetlist']; break; } if ($link) { $link = '<a href="' . $link . '">' . $title . '</a>'; } if (!$check_selected) { return $link; } if ($plugin !== 'attach' && $plugin === $tab || $page === $defaultpage && $tab === 'top' || $page === $whatsnew && $tab === 'recent' || $page === $help_page && $tab === 'help') { $selected = 1; } return array($link, $selected); }
function links_init() { global $whatsnew; // if (PKWK_READONLY) return; // Do nothing if (auth::check_role('readonly')) { return; } // Do nothing if (ini_get('safe_mode') == '0') { set_time_limit(0); } // Init database foreach (get_existfiles(CACHE_DIR, '.ref') as $cache) { unlink($cache); } foreach (get_existfiles(CACHE_DIR, '.rel') as $cache) { unlink($cache); } $ref = array(); // 参照元 foreach (get_existpages() as $page) { if ($page == $whatsnew) { continue; } $rel = array(); // 参照先 $links = links_get_objects($page); foreach ($links as $_obj) { if (!isset($_obj->type) || $_obj->type != 'pagename' || $_obj->name == $page || $_obj->name == '') { continue; } if (is_a($_obj, 'Link_autoalias')) { $_aliases = get_autoaliases($_obj->name); foreach ($_aliases as $_alias) { if (is_pagename($_alias)) { $rel[] = $_alias; } } } else { $rel[] = $_obj->name; } } $rel = array_unique($rel); foreach ($rel as $_name) { if (!isset($ref[$_name][$page])) { $ref[$_name][$page] = 1; } if (!is_a($_obj, 'Link_autolink')) { $ref[$_name][$page] = 0; } } if (!empty($rel)) { $fp = fopen(CACHE_DIR . encode($page) . '.rel', 'w') or die_message('cannot write ' . htmlspecialchars(CACHE_DIR . encode($page) . '.rel')); fputs($fp, join("\t", $rel)); fclose($fp); } } foreach ($ref as $page => $arr) { $fp = fopen(CACHE_DIR . encode($page) . '.ref', 'w') or die_message('cannot write ' . htmlspecialchars(CACHE_DIR . encode($page) . '.ref')); foreach ($arr as $ref_page => $ref_auto) { fputs($fp, $ref_page . "\t" . $ref_auto . "\n"); } fclose($fp); } }
function catbody($title,$page,$body) { global $script,$vars,$arg,$defaultpage,$whatsnew,$help_page,$hr; global $related_link,$cantedit,$function_freeze,$search_word_color,$_msg_word; global $foot_explain,$note_hr,$head_tags; global $html_transitional; // FALSE:XHTML1.1 TRUE:XHTML1.0 Transitional global $page_title; // ホームページのタイトル global $do_backup; // バックアップを行うかどうか global $modifier; // 編集者のホームページ global $modifierlink; // 編集者の名前 $_page = $vars['page']; $r_page = rawurlencode($_page); $link_add = "$script?cmd=add&page=$r_page"; $link_edit = "$script?cmd=edit&page=$r_page"; $link_diff = "$script?cmd=diff&page=$r_page"; $link_top = "$script?".rawurlencode($defaultpage); $link_list = "$script?cmd=list"; $link_filelist = "$script?cmd=filelist"; $link_search = "$script?cmd=search"; $link_whatsnew = "$script?".rawurlencode($whatsnew); $link_backup = "$script?cmd=backup&page=$r_page"; $link_help = "$script?".rawurlencode($help_page); $link_rss = "$script?cmd=rss10"; $link_freeze = "$script?cmd=freeze&page=$r_page"; $link_unfreeze = "$script?cmd=unfreeze&page=$r_page"; $link_upload = "$script?plugin=attach&pcmd=upload&page=$r_page"; $link_template = "$script?plugin=template&refer=$r_page"; $link_rename = "$script?plugin=rename&refer=$r_page"; // ページの表示時TRUE(バックアップの表示、RecentChangesの表示を除く) $is_page = (is_pagename($_page) and !arg_check('backup') and $_page != $whatsnew); // ページの読み出し時TRUE $is_read = (arg_check('read') and is_page($_page)); // ページが凍結されているときTRUE $is_freeze = is_freeze($_page); // ページの最終更新時刻(文字列) $lastmodified = $is_read ? get_date('D, d M Y H:i:s T',get_filetime($_page)).' '.get_pg_passage($_page,FALSE) : ''; // 関連するページのリスト $related = ($is_read and $related_link) ? make_related($_page) : ''; // 添付ファイルのリスト $attaches = ($is_read and exist_plugin_action('attach')) ? attach_filelist() : ''; // 注釈のリスト ksort($foot_explain,SORT_NUMERIC); $notes = count($foot_explain) ? $note_hr.join("\n",$foot_explain) : ''; // <head>内に追加するタグ $head_tag = count($head_tags) ? join("\n",$head_tags)."\n" : ''; // 1.3.x compat // ページの最終更新時刻(UNIX timestamp) $fmt = $is_read ? get_filetime($_page) + LOCALZONE : 0; //単語検索 if ($search_word_color and array_key_exists('word',$vars)) { $body = '<div class="small">'.$_msg_word.htmlspecialchars($vars['word'])."</div>$hr\n$body"; $words = array_flip(array_splice(preg_split('/\s+/',$vars['word'],-1,PREG_SPLIT_NO_EMPTY),0,10)); $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 = "/(<[^>]*>)|($pattern)/"; $callback = create_function( '$arr', 'return $arr[1] ? $arr[1] : "<strong class=\"word'.$id++.'\">{$arr[2]}</strong>";' ); $body = preg_replace_callback($pattern,$callback,$body); $notes = preg_replace_callback($pattern,$callback,$notes); } } $longtaketime = getmicrotime() - MUTIME; $taketime = sprintf('%01.03f',$longtaketime); if (!file_exists(SKIN_FILE)||!is_readable(SKIN_FILE)) { die_message(SKIN_FILE.'(skin file) is not found.'); } require(SKIN_FILE); }
function plugin_bugtrack_list_convert() { global $script, $vars, $_plugin_bugtrack; $page = $vars['page']; if (func_num_args()) { list($_page) = func_get_args(); $_page = get_fullname(strip_bracket($_page), $page); if (is_pagename($_page)) { $page = $_page; } } $data = array(); $pattern = $page . '/'; $pattern_len = strlen($pattern); foreach (get_existpages() as $page) { if (strpos($page, $pattern) === 0 && is_numeric(substr($page, $pattern_len))) { array_push($data, plugin_bugtrack_list_pageinfo($page)); } } $count_list = count($_plugin_bugtrack['state_list']); $table = array(); for ($i = 0; $i <= $count_list + 1; ++$i) { $table[$i] = array(); } foreach ($data as $line) { list($page, $no, $summary, $name, $priority, $state, $category) = $line; foreach (array('summary', 'name', 'priority', 'state', 'category') as $item) { ${$item} = htmlsc(${$item}); } $page_link = make_pagelink($page); $state_no = array_search($state, $_plugin_bugtrack['state_sort']); if ($state_no === NULL || $state_no === FALSE) { $state_no = $count_list; } $bgcolor = htmlsc($_plugin_bugtrack['state_bgcolor'][$state_no]); $row = <<<EOD <tr> <td style="background-color:{$bgcolor}">{$page_link}</td> <td style="background-color:{$bgcolor}">{$state}</td> <td style="background-color:{$bgcolor}">{$priority}</td> <td style="background-color:{$bgcolor}">{$category}</td> <td style="background-color:{$bgcolor}">{$name}</td> <td style="background-color:{$bgcolor}">{$summary}</td> </tr> EOD; $table[$state_no][$no] = $row; } $table_html = ' <tr>' . "\n"; $bgcolor = htmlsc($_plugin_bugtrack['header_bgcolor']); foreach (array('pagename', 'state', 'priority', 'category', 'name', 'summary') as $item) { $table_html .= ' <th style="background-color:' . $bgcolor . '">' . htmlsc($_plugin_bugtrack[$item]) . '</th>' . "\n"; } $table_html .= ' </tr>' . "\n"; for ($i = 0; $i <= $count_list; ++$i) { ksort($table[$i], SORT_NUMERIC); $table_html .= join("\n", $table[$i]); } return '<table border="1" width="100%">' . "\n" . $table_html . "\n" . '</table>'; }
function plugin_template_action() { global $script, $vars; // global $_title_edit; // global $_msg_template_start, $_msg_template_end, $_msg_template_page, $_msg_template_refer; // global $_btn_template_create, $_title_template; // global $_err_template_already, $_err_template_invalid, $_msg_template_force; $_title_edit = _('Edit of $1'); $_msg_template_start = _('Start:<br />'); $_msg_template_end = _('End:<br />'); $_msg_template_page = _('$1/copy'); $_msg_template_refer = _('Page:'); $_msg_template_force = _('Edit with a page name which already exists'); $_err_template_already = _(' $1 already exists.'); $_err_template_invalid = _(' $1 is not a valid page name.'); $_btn_template_create = _('Create'); $_title_template = _('create a new page, using $1 as a template.'); // if (PKWK_READONLY) die_message('PKWK_READONLY prohibits editing'); // if (auth::check_role('readonly')) die_message('PKWK_READONLY prohibits editing'); if (auth::check_role('safemode') || auth::check_role('readonly')) { die_message(_('Prohibited')); } if (!isset($vars['refer']) || !is_page($vars['refer'])) { return FALSE; } if (!is_page($vars['refer']) || !check_readable($vars['refer'], false, false)) { return array('msg' => _(' $1 was not found.'), 'body' => _('cannot display the page source.')); } $lines = get_source($vars['refer']); auth::is_role_page($lines); // Remove '#freeze' if (!empty($lines) && strtolower(rtrim($lines[0])) == '#freeze') { array_shift($lines); } $begin = isset($vars['begin']) && is_numeric($vars['begin']) ? $vars['begin'] : 0; $end = isset($vars['end']) && is_numeric($vars['end']) ? $vars['end'] : count($lines) - 1; if ($begin > $end) { $temp = $begin; $begin = $end; $end = $temp; } $page = isset($vars['page']) ? $vars['page'] : ''; $is_page = is_page($page); // edit if ($is_pagename = is_pagename($page) && (!$is_page || !empty($vars['force']))) { $postdata = join('', array_splice($lines, $begin, $end - $begin + 1)); $retvar['msg'] = $_title_edit; $retvar['body'] = edit_form($vars['page'], $postdata); $vars['refer'] = $vars['page']; return $retvar; } $begin_select = $end_select = ''; for ($i = 0; $i < count($lines); $i++) { $line = htmlspecialchars(mb_strimwidth($lines[$i], 0, MAX_LEN, '...')); $tag = $i == $begin ? ' selected="selected"' : ''; $begin_select .= "<option value=\"{$i}\"{$tag}>{$line}</option>\n"; $tag = $i == $end ? ' selected="selected"' : ''; $end_select .= "<option value=\"{$i}\"{$tag}>{$line}</option>\n"; } $_page = htmlspecialchars($page); $msg = $tag = ''; if ($is_page) { $msg = $_err_template_already; $tag = '<input type="checkbox" name="force" value="1" />' . $_msg_template_force; } else { if ($page != '' && !$is_pagename) { $msg = str_replace('$1', $_page, $_err_template_invalid); } } $s_refer = htmlspecialchars($vars['refer']); $s_page = $page == '' ? str_replace('$1', $s_refer, $_msg_template_page) : $_page; $ret = <<<EOD <form action="{$script}" method="post"> <div> <input type="hidden" name="plugin" value="template" /> <input type="hidden" name="refer" value="{$s_refer}" /> {$_msg_template_start} <select name="begin" size="10">{$begin_select}</select><br /><br /> {$_msg_template_end} <select name="end" size="10">{$end_select}</select><br /><br /> <label for="_p_template_refer">{$_msg_template_refer}</label> <input type="text" name="page" id="_p_template_refer" value="{$s_page}" /> <input type="submit" name="submit" value="{$_btn_template_create}" /> {$tag} </div> </form> EOD; $retvar['msg'] = $msg == '' ? $_title_template : $msg; $retvar['body'] = $ret; return $retvar; }
function plugin_rename_action() { global $_string; // if (PKWK_READONLY) die_message('PKWK_READONLY prohibits this'); if (Auth::check_role('readonly')) { die_message($_string['prohibit']); } $method = plugin_rename_getvar('method'); if ($method == 'regex') { $src = plugin_rename_getvar('src'); if ($src == '') { return plugin_rename_phase1(); } $src_pattern = '/' . preg_quote($src, '/') . '/'; $arr0 = preg_grep($src_pattern, Auth::get_existpages()); if (!is_array($arr0) || empty($arr0)) { return plugin_rename_phase1('nomatch'); } $dst = plugin_rename_getvar('dst'); $arr1 = preg_replace($src_pattern, $dst, $arr0); foreach ($arr1 as $page) { if (!is_pagename($page)) { return plugin_rename_phase1('notvalid'); } else { if (preg_match(Wiki::INVALIED_PAGENAME_PATTERN, $page)) { die_message($_string['illegal_chars']); } } } // Phase one or three return plugin_rename_regex($arr0, $arr1); } else { // $method == 'page' $page = plugin_rename_getvar('page'); $refer = plugin_rename_getvar('refer'); // Check Illigal Chars if (preg_match(Wiki::INVALIED_PAGENAME_PATTERN, $page)) { die_message($_string['illegal_chars']); } if (empty($refer)) { return plugin_rename_phase1(); } else { if (!is_page($refer)) { return plugin_rename_phase1('notpage', $refer); } else { if (is_cantedit($refer)) { return plugin_rename_phase1('norename', $refer); } else { if (empty($page) && is_page($refer)) { return plugin_rename_phase2(); } else { if (!is_pagename($page)) { return plugin_rename_phase2('notvalid'); } else { // Phase three return plugin_rename_refer(); } } } } } } }
function catbody($title, $page, $body) { global $script; // MUST BE SKIN.FILE. Do not delete line. global $vars, $arg, $defaultpage, $whatsnew, $help_page, $hr; global $attach_link, $related_link, $function_freeze; global $search_word_color, $foot_explain, $note_hr, $head_tags, $foot_tags; global $trackback, $referer, $javascript; global $newtitle, $newbase, $language, $use_local_time; // Plus! skin extension global $nofollow; global $_LANG, $_LINK, $_IMAGE; global $pkwk_dtd; // XHTML 1.1, XHTML1.0, HTML 4.01 Transitional... global $page_title; // Title of this site global $do_backup; // Do backup or not global $modifier; // Site administrator's web page global $modifierlink; // Site administrator's name global $skin_file, $menubar, $sidebar; global $_string; if (!defined('SKIN_FILE') || !file_exists(SKIN_FILE) || !is_readable(SKIN_FILE)) { if (!file_exists($skin_file) || !is_readable($skin_file)) { die_message(SKIN_FILE . '(skin file) is not found.'); } else { define('SKIN_FILE', $skin_file); } } $_LINK = $_IMAGE = array(); // Add JavaScript header when ... if (!PKWK_ALLOW_JAVASCRIPT) { unset($javascript); } $_page = isset($vars['page']) ? $vars['page'] : ''; $r_page = rawurlencode($_page); // Set $_LINK for skin $_LINK['add'] = get_cmd_uri('add', $_page); $_LINK['backup'] = get_cmd_uri('backup', $_page); $_LINK['brokenlink'] = get_cmd_uri('brokenlink', $_page); $_LINK['copy'] = get_cmd_uri('template', '', '', 'refer=' . $r_page); $_LINK['diff'] = get_cmd_uri('diff', $_page); $_LINK['edit'] = get_cmd_uri('edit', $_page); $_LINK['guiedit'] = get_cmd_uri('guiedit', $_page); $_LINK['filelist'] = get_cmd_uri('filelist'); $_LINK['freeze'] = get_cmd_uri('freeze', $_page); $_LINK['help'] = get_cmd_uri('help'); $_LINK['linklist'] = get_cmd_uri('linklist', $_page); $_LINK['list'] = get_cmd_uri('list'); $_LINK['log_login'] = get_cmd_uri('logview', '', '', 'kind=login'); $_LINK['log_browse'] = get_cmd_uri('logview', $_page, '', 'kind=browse'); $_LINK['log_update'] = get_cmd_uri('logview', $_page); $_LINK['log_down'] = get_cmd_uri('logview', $_page, '', 'kind=download'); $_LINK['log_check'] = get_cmd_uri('logview', $_page, '', 'kind=check'); $_LINK['menu'] = get_page_uri($menubar); $_LINK['new'] = get_cmd_uri('newpage', '', '', 'refer=' . $r_page); $_LINK['newsub'] = get_cmd_uri('newpage_subdir', '', '', 'directory=' . $r_page); $_LINK['print'] = get_cmd_uri('print', $_page); $_LINK['full'] = get_cmd_uri('print', $_page) . '&nohead&nofoot'; $_LINK['read'] = get_page_uri($_page); $_LINK['recent'] = get_page_uri($whatsnew); $_LINK['refer'] = get_cmd_uri('referer', $_page); $_LINK['reload'] = get_page_absuri($_page); // 本当は、get_script_uri でいいけど、絶対パスでないと、スキンに影響が出る $_LINK['reload_rel'] = get_page_uri($_page); $_LINK['rename'] = get_cmd_uri('rename', '', '', 'refer=' . $r_page); $_LINK['skeylist'] = get_cmd_uri('skeylist', $_page); $_LINK['search'] = get_cmd_uri('search'); $_LINK['side'] = get_page_uri($sidebar); $_LINK['source'] = get_cmd_uri('source', $_page); $_LINK['template'] = get_cmd_uri('template', '', '', 'refer=' . $r_page); $_LINK['top'] = get_page_uri($defaultpage); if ($trackback) { $tb_id = tb_get_id($_page); $_LINK['trackback'] = get_cmd_uri('tb', '', '', '__mode=view&tb_id=' . $tb_id); } $_LINK['unfreeze'] = get_cmd_uri('unfreeze', $_page); $_LINK['upload'] = get_cmd_uri('attach', $_page, '', 'pcmd=upload'); // link rel="alternate" にも利用するため absuri にしておく $_LINK['rdf'] = get_cmd_absuri('rss', '', 'ver=1.0'); $_LINK['rss'] = get_cmd_absuri('rss'); $_LINK['rss10'] = get_cmd_absuri('rss', '', 'ver=1.0'); // Same as 'rdf' $_LINK['rss20'] = get_cmd_absuri('rss', '', 'ver=2.0'); $_LINK['mixirss'] = get_cmd_absuri('mixirss'); // Same as 'rdf' for mixi // Compat: Skins for 1.4.4 and before $link_add =& $_LINK['add']; $link_backup =& $_LINK['backup']; $link_brokenlink =& $_LINK['brokenlink']; $link_template =& $_LINK['copy']; $link_diff =& $_LINK['diff']; $link_edit =& $_LINK['edit']; $link_guiedit =& $_LINK['guiedit']; $link_filelist =& $_LINK['filelist']; $link_freeze =& $_LINK['freeze']; $link_help =& $_LINK['help']; $link_linklist =& $_LINK['linklist']; $link_list =& $_LINK['list']; $link_log_login =& $_LINK['log_login']; $link_log_browse =& $_LINK['log_browse']; $link_log_update =& $_LINK['log_update']; $link_log_down =& $_LINK['log_down']; $link_log_check =& $_LINK['log_check']; $link_menu =& $_LINK['menu']; $link_new =& $_LINK['new']; $link_newsub =& $_LINK['newsub']; $link_print =& $_LINK['print']; $link_full =& $_LINK['full']; $link_read =& $_LINK['read']; $link_whatsnew =& $_LINK['recent']; $link_refer =& $_LINK['refer']; $link_reload =& $_LINK['reload']; $link_reload_rel =& $_LINK['reload_rel']; $link_rename =& $_LINK['rename']; $link_skeylist =& $_LINK['skeylist']; $link_search =& $_LINK['search']; $link_side =& $_LINK['side']; $link_source =& $_LINK['source']; $link_top =& $_LINK['top']; if ($trackback) { $link_trackback =& $_LINK['trackback']; } $link_unfreeze =& $_LINK['unfreeze']; $link_upload =& $_LINK['upload']; // $link_rdf =& $_LINK['rdf']; $link_rss =& $_LINK['rss']; $link_rss10 =& $_LINK['rss10']; $link_rss20 =& $_LINK['rss20']; $link_mixirss =& $_LINK['mixirss']; // Init flags $is_page = is_pagename($_page) && !arg_check('backup') && !is_cantedit($_page); $is_read = arg_check('read') && is_page($_page); $is_freeze = is_freeze($_page); // Last modification date (string) of the page $lastmodified = $is_read ? get_date('D, d M Y H:i:s T', get_filetime($_page)) . ' ' . get_pg_passage($_page, FALSE) : ''; // List of attached files to the page $attaches = ''; if ($attach_link && $is_read && exist_plugin_action('attach')) { if (do_plugin_init('attach') !== FALSE) { $attaches = attach_filelist(); } } // List of related pages $related = $related_link && $is_read ? make_related($_page) : ''; // List of footnotes ksort($foot_explain, SORT_NUMERIC); $notes = !empty($foot_explain) ? $note_hr . join("\n", $foot_explain) : ''; // Tags will be inserted into <head></head> $head_tag = !empty($head_tags) ? join("\n", $head_tags) . "\n" : ''; $foot_tag = !empty($foot_tags) ? join("\n", $foot_tags) . "\n" : ''; // 1.3.x compat // Last modification date (UNIX timestamp) of the page $fmt = $is_read ? get_filetime($_page) : 0; // Search words if ($search_word_color && isset($vars['word'])) { $body = '<div class="small">' . $_string['word'] . htmlspecialchars($vars['word']) . '</div>' . $hr . "\n" . $body; // BugTrack2/106: Only variables can be passed by reference from PHP 5.0.5 $words = preg_split('/\\s+/', $vars['word'], -1, PREG_SPLIT_NO_EMPTY); $words = array_splice($words, 0, 10); // Max: 10 words $words = array_flip($words); $keys = array(); foreach ($words as $word => $id) { $keys[$word] = strlen($word); } arsort($keys, SORT_NUMERIC); $keys = get_search_words(array_keys($keys), TRUE); $id = 0; foreach ($keys as $key => $pattern) { $s_key = htmlspecialchars($key); $pattern = '/' . '<textarea[^>]*>.*?<\\/textarea>' . '|' . '<[^>]*>' . '|' . '&[^;]+;' . '|' . '(' . $pattern . ')' . '/sS'; $decorate_Nth_word = create_function('$matches', 'return (isset($matches[1])) ? ' . '\'<strong class="word' . $id . '">\' . $matches[1] . \'</strong>\' : ' . '$matches[0];'); $body = preg_replace_callback($pattern, $decorate_Nth_word, $body); $notes = preg_replace_callback($pattern, $decorate_Nth_word, $notes); ++$id; } } // Compat: 'HTML convert time' without time about MenuBar and skin $taketime = elapsedtime(); require SKIN_FILE; }
function pkwk_spamnotify($action, $page, $target = array('title' => ''), $progress = array(), $method = array()) { global $notify, $notify_subject; if (!$notify) { return; } $asap = isset($method['asap']); $summary['ACTION'] = 'Blocked by: ' . summarize_spam_progress($progress, TRUE); if (!$asap) { $summary['METRICS'] = summarize_spam_progress($progress); } $tmp = summarize_detail_badhost($progress); if ($tmp != '') { $summary['DETAIL_BADHOST'] = $tmp; } $tmp = summarize_detail_newtral($progress); if (!$asap && $tmp != '') { $summary['DETAIL_NEUTRAL_HOST'] = $tmp; } $summary['COMMENT'] = $action; $summary['PAGE'] = '[blocked] ' . (is_pagename($page) ? $page : ''); $summary['URI'] = get_script_uri() . '?' . rawurlencode($page); $summary['USER_AGENT'] = TRUE; $summary['REMOTE_ADDR'] = TRUE; pkwk_mail_notify($notify_subject, var_export($target, TRUE), $summary, TRUE); }
function set($arr, $page) { global $WikiName; list(, $alias, , $name, $this->anchor) = $this->splice($arr); if ($name == '' && $this->anchor == '') { return FALSE; } if ($name == '' || !preg_match('/^' . $WikiName . '$/', $name)) { if ($alias == '') { $alias = $name . $this->anchor; } if ($name != '') { $name = get_fullname($name, $page); if (!is_pagename($name)) { return FALSE; } } } return parent::setParam($page, $name, '', 'pagename', $alias); }
function plugin_pcomment_insert() { global $vars, $now, $_title_updated, $_no_name, $_pcmt_messages; $refer = isset($vars['refer']) ? $vars['refer'] : ''; $page = isset($vars['page']) ? $vars['page'] : ''; $page = get_fullname($page, $refer); if (!is_pagename($page)) { return array('msg' => 'Invalid page name', 'body' => 'Cannot add comment', 'collided' => TRUE); } check_editable($page, true, true); $ret = array('msg' => $_title_updated, 'collided' => FALSE); $msg = str_replace('$msg', rtrim($vars['msg']), PLUGIN_PCOMMENT_FORMAT_MSG); $name = !isset($vars['name']) || $vars['name'] == '' ? $_no_name : $vars['name']; $name = $name == '' ? '' : str_replace('$name', $name, PLUGIN_PCOMMENT_FORMAT_NAME); $date = !isset($vars['nodate']) || $vars['nodate'] != '1' ? str_replace('$now', $now, PLUGIN_PCOMMENT_FORMAT_NOW) : ''; if ($date != '' || $name != '') { $msg = str_replace("" . 'MSG' . "", $msg, PLUGIN_PCOMMENT_FORMAT_STRING); $msg = str_replace("" . 'NAME' . "", $name, $msg); $msg = str_replace("" . 'DATE' . "", $date, $msg); } $reply_hash = isset($vars['reply']) ? $vars['reply'] : ''; if ($reply_hash || !is_page($page)) { $msg = preg_replace('/^\\-+/', '', $msg); } $msg = rtrim($msg); if (!is_page($page)) { $postdata = '[[' . htmlsc(strip_bracket($refer)) . ']]' . "\n\n" . '-' . $msg . "\n"; } else { $postdata = get_source($page); $count = count($postdata); $digest = isset($vars['digest']) ? $vars['digest'] : ''; if (md5(join('', $postdata)) != $digest) { $ret['msg'] = $_pcmt_messages['title_collided']; $ret['body'] = $_pcmt_messages['msg_collided']; } $start_position = 0; while ($start_position < $count) { if (preg_match('/^\\-/', $postdata[$start_position])) { break; } ++$start_position; } $end_position = $start_position; $dir = isset($vars['dir']) ? $vars['dir'] : ''; // Find the comment to reply $level = 1; $b_reply = FALSE; if ($reply_hash != '') { while ($end_position < $count) { $matches = array(); if (preg_match('/^(\\-{1,2})(?!\\-)(.*)$/', $postdata[$end_position++], $matches) && md5($matches[2]) == $reply_hash) { $b_reply = TRUE; $level = strlen($matches[1]) + 1; while ($end_position < $count) { if (preg_match('/^(\\-{1,3})(?!\\-)/', $postdata[$end_position], $matches) && strlen($matches[1]) < $level) { break; } ++$end_position; } break; } } } if ($b_reply == FALSE) { $end_position = $dir == '0' ? $start_position : $count; } // Insert new comment array_splice($postdata, $end_position, 0, str_repeat('-', $level) . $msg . "\n"); if (PLUGIN_PCOMMENT_AUTO_LOG) { $_count = isset($vars['count']) ? $vars['count'] : ''; plugin_pcomment_auto_log($page, $dir, $_count, $postdata); } $postdata = join('', $postdata); } page_write($page, $postdata, PLUGIN_PCOMMENT_TIMESTAMP); if (PLUGIN_PCOMMENT_TIMESTAMP) { if ($refer != '') { pkwk_touch_file(get_filename($refer)); } put_lastmodified(); } return $ret; }