📄 ewiki.php
字号:
}#-------------------------------------------------------------------- util ---/* retrieves "$id/$action" string from URL / QueryString / PathInfo, change this in conjunction with ewiki_script() to customize your URLs further whenever desired*/function ewiki_id() { ($id = @$_REQUEST["id"]) or ($id = @$_REQUEST["name"]) or ($id = @$_REQUEST["page"]) or ($id = @$_REQUEST["file"]) or (EWIKI_USE_PATH_INFO) and ($id = ltrim(@$_SERVER["PATH_INFO"], "/")) or (!isset($_REQUEST["id"])) and ($id = trim(strtok($_SERVER["QUERY_STRING"], "&"))); if (!strlen($id) || ($id=="id=")) { $id = EWIKI_PAGE_INDEX; } (EWIKI_URLDECODE) && ($id = urldecode($id)); return($id);}/* replaces EWIKI_SCRIPT, works more sophisticated, and bypasses various design flaws - if only the first parameter is used (old style), it can contain a complete "action/WikiPage" - but this is ambigutious - else $asid is the action, and $id contains the WikiPageName - $ewiki_config["script"] will now be used in favour of the constant - needs more work on _BINARY, should be a separate function*/## MOODLE-CHANGE: $asid="", Knows the devil why....function ewiki_script($asid="", $id=false, $params="", $bin=0, $html=1, $script=NULL) { global $ewiki_config, $ewiki_plugins; #-- get base script url from config vars if (empty($script)) { $script = &$ewiki_config[!$bin?"script":"script_binary"]; } #-- separate $action and $id for old style requests if ($id === false) { if (strpos($asid, EWIKI_ACTION_SEP_CHAR) !== false) { $asid = strtok($asid, EWIKI_ACTION_SEP_CHAR); $id = strtok("\000"); } else { $id = $asid; $asid = ""; } } #-- prepare params if (is_array($params)) { $uu = $params; $params = ""; if ($uu) foreach ($uu as $k=>$v) { $params .= (strlen($params)?"&":"") . rawurlencode($k) . "=" . rawurlencode($v); } } #-- action= parameter if (EWIKI_USE_ACTION_PARAM >= 2) { $params = "action=$asid" . (strlen($params)?"&":"") . $params; $asid = ""; } #-- workaround slashes in $id if (empty($asid) && (strpos($id, EWIKI_ACTION_SEP_CHAR) !== false) && !$bin) { $asid = "view"; } /*paranoia*/ $asid = trim($asid, EWIKI_ACTION_SEP_CHAR); #-- make url if (EWIKI_URLENCODE) { $id = urlencode($id); $asid = urlencode($asid); } else { # only urlencode &, %, ? for example } $url = $script; if ($asid) { $id = $asid . EWIKI_ACTION_SEP_CHAR . $id; #= "action/PageName" } if (strpos($url, "%s") !== false) { $url = str_replace("%s", $id, $url); } else { $url .= $id; } #-- add url params if (strlen($params)) { $url .= (strpos($url,"?")!==false ? "&":"?") . $params; }
#-- fin if ($html) { //Don't replace & if it's part of encoded character (bug 2209) $url = preg_replace("/&(?![A-Za-z]{0,4}\w{2,3};|#[0-9]{2,5};)/","&", $url); } else { //This is going to be used in some header or meta redirect, so It cannot use & (bug 2620) $url = preg_replace('/&/', '&', $url); } return($url);}/* this ewiki_script() wrapper is used to generate URLs to binary content in the ewiki database*/function ewiki_script_binary($asid, $id=false, $params=array(), $upload=0) { $upload |= is_string($params) && strlen($params) || count($params); #-- generate URL directly to the plainly saved data file, # see also plugins/binary_store if (defined("EWIKI_DB_STORE_URL") && !$upload) { $url = EWIKI_DB_STORE_URL . rawurlencode($id); } #-- else get standard URL (thru ewiki.php) from ewiki_script() else { $url = ewiki_script($asid, $id, $params, "_BINARY=1"); } return($url);}/* this function returns the absolute ewiki_script url, if EWIKI_SCRIPT_URL is set, else it guesses the value*/function ewiki_script_url() { global $ewiki_action, $ewiki_id, $ewiki_config; $scr_template = $ewiki_config["script"]; $scr_current = ewiki_script($ewiki_action, $ewiki_id); $req_uri = $_SERVER["REQUEST_URI"]; if ($url = $ewiki_config["script_url"]) { return($url); } elseif (strpos($req_uri, $scr_current) !== false) { $url = str_replace($req_uri, $scr_current, $scr_template); } elseif (strpos($req_uri, "?") && (strpos($scr_template, "?") !== false)) { $url = substr($req_uri, 0, strpos($req_uri, "?")) . substr($scr_template, strpos($scr_template, "?")); } elseif (strpos($req_uri, $sn = $_SERVER["SCRIPT_NAME"])) { $url = $sn . "?id="; } else { return(NULL); #-- could not guess it } #$url = "http://" . $_SERVER["SERVER_NAME"] . $url; return($url);}#------------------------------------------------------------ page plugins ---function ewiki_page_links($id, &$data, $action) { $o = ewiki_make_title($id, ewiki_t("PAGESLINKINGTO", array("title"=>$id)), 1, $action, "", "_MAY_SPLIT=1"); if ($pages = ewiki_get_backlinks($id)) { $o .= ewiki_list_pages($pages); } else { $o .= ewiki_t("This page isn't linked from anywhere else."); } return($o);}function ewiki_get_backlinks($id) { $result = ewiki_database("SEARCH", array("refs" => $id)); $pages = array(); while ($row = $result->get(0, 0x0020)) { if ( strpos($row["refs"], "\n$id\n") !== false) { $pages[] = $row["id"]; } } return($pages);}function ewiki_get_links($id) { if ($data = ewiki_database("GET", array("id"=>$id))) { $refs = explode("\n", trim($data["refs"])); $r = array(); foreach (ewiki_database("FIND", $refs) as $id=>$exists) { if ($exists) { $r[] = $id; } } return($r); }}function ewiki_list_pages($pages=array(), $limit=EWIKI_LIST_LIMIT, $value_as_title=0, $pf_list=false){ global $ewiki_plugins; $o = ""; $is_num = !empty($pages[0]); $lines = array(); $n = 0; foreach ($pages as $id=>$add_text) { $title = $id; $params = ""; if (is_array($add_text)) { list($id, $params, $title, $add_text) = $add_text; } elseif ($is_num) { $id = $title = $add_text; $add_text = ""; } elseif ($value_as_title) { $title = $add_text; $add_text = ""; } $lines[] = '<a href="' . ewiki_script("", $id, $params) . '">' . s($title) . '</a> ' . $add_text; if (($limit > 0) && ($n++ >= $limit)) { break; } } if ($pf_a = @$ewiki_plugins["list_transform"]) foreach ($pf_a as $pf_transform) { $pf_transform($lines); } if (($pf_list) || ($pf_list = @$ewiki_plugins["list_pages"][0])) { $o = $pf_list($lines); } elseif($lines) { $o = "· " . implode("<br />\n· ", $lines) . "<br />\n"; } return($o);}function ewiki_page_ordered_list($orderby="created", $asc=0, $print, $title) { $o = ewiki_make_title("", $title, 2, ".list", "links", 0); $sorted = array(); $result = ewiki_database("GETALL", array($orderby)); while ($row = $result->get()) { $row = ewiki_database("GET", array( "id" => $row["id"], ($asc >= 0 ? "version" : "uu") => 1 // version 1 is most accurate for {hits} )); #-- text page? if (EWIKI_DB_F_TEXT == ($row["flags"] & EWIKI_DB_F_TYPE)) { #-- viewing allowed? if (!EWIKI_PROTECTED_MODE || !EWIKI_PROTECTED_MODE_HIDING || ewiki_auth($row["id"], $row, "view")) { $sorted[$row["id"]] = $row[$orderby]; } } } if ($asc != 0) { arsort($sorted); } else { asort($sorted); } foreach ($sorted as $name => $value) { if (empty($value)) { $value = "0"; } ##### BEGIN MOODLE ADDITION ##### #$sorted[$name] = strftime(str_replace('%n', $value, $print), $value); if($print=="LASTCHANGED") { $value=strftime("%c",$value); } $sorted[$name] = get_string(strtolower($print),"wiki",$value); ##### BEGIN MOODLE ADDITION ##### } $o .= ewiki_list_pages($sorted); return($o);}function ewiki_page_newest($id=0, $data=0) { return( ewiki_page_ordered_list("created", 1, "LASTCHANGED", ewiki_t("NEWESTPAGES")) );}function ewiki_page_updates($id=0, $data=0) { return( ewiki_page_ordered_list("lastmodified", -1, "LASTCHANGED", EWIKI_PAGE_UPDATES) );}function ewiki_page_hits($id=0, $data=0) { ##### BEGIN MOODLE ADDITION ##### return( ewiki_page_ordered_list("hits", 1, "hits", EWIKI_PAGE_HITS) );}function ewiki_page_versions($id=0, $data=0) { return( ewiki_page_ordered_list("version", -1, "changes", EWIKI_PAGE_VERSIONS) ); ##### END MOODLE ADDITION #####}function ewiki_page_search($id, &$data, $action) { global $CFG; $o = ewiki_make_title($id, $id, 2, $action); if (! ($q = @$_REQUEST["q"])) { $o .= '<form action="' . ewiki_script("", $id) . '" method="post">'; $o .= '<fieldset class="invisiblefieldset">'; $o .= '<input name="q" size="30" /><br /><br />'; $o .= '<input type="submit" value="'.$id.'" />'; $o .= '</fieldset>'; $o .= '</form>'; } else { $found = array(); if ($CFG->unicodedb) { $q = preg_replace('/\s*[\W]+\s*/u', ' ', $q); } else { $q = preg_replace('/\s*[^\w]+\s*/', ' ', $q); } foreach (explode(" ", $q) as $search) { if (empty($search)) { continue; } $result = ewiki_database("SEARCH", array("content" => $search)); while ($row = $result->get()) { #-- show this entry in page listings? if (EWIKI_PROTECTED_MODE && EWIKI_PROTECTED_MODE_HIDING && !ewiki_auth($row["id"], $row, "view")) { continue; } $found[] = $row["id"]; } } $o .= ewiki_list_pages($found); } return($o);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -