📄 ewiki.php
字号:
function ewiki_page_info($id, &$data, $action) { global $ewiki_plugins, $ewiki_config, $ewiki_links; global $CFG, $course; // MOODLE HACK $o = ewiki_make_title($id, ewiki_t("INFOABOUTPAGE")." '{$id}'", 2, $action,"", "_MAY_SPLIT=1"); $flagnames = array( "TEXT", "BIN", "DISABLED", "HTML", "READONLY", "WRITEABLE", "APPENDONLY", "SYSTEM", ); $show = array( "version", "author", "userid", "created", "lastmodified", "refs", "flags", "meta", "content" ); #-- versions to show $v_start = $data["version"]; if ( ($uu=@$_REQUEST[EWIKI_UP_PAGENUM]) && ($uu<=$v_start) ) { $v_start = $uu; } $v_end = $v_start - $ewiki_config["list_limit"] + 1; if ( ($uu=@$_REQUEST[EWIKI_UP_PAGEEND]) && ($uu<=$v_start) ) { $v_end = $uu; } $v_end = max($v_end, 1); #-- go # the very ($first) entry is rendered more verbosely than the others for ($v=$v_start,$first=1; ($v>=$v_end); $v--,$first=0) { $current = ewiki_database("GET", array("id"=>$id, "version"=>$v)); if (!strlen(trim($current["id"])) || !$current["version"] || !strlen(trim($current["content"]))) { continue; } $o .= '<table class="version-info" cellpadding="2" cellspacing="1">' . "\n"; #-- additional info-actions $commands = ''; foreach ($ewiki_config["action_links"]["info"] as $thisaction=>$title) if (@$ewiki_plugins["action"][$thisaction] || @$ewiki_plugins["action_always"][$thisaction]) { ##### BEGIN MOODLE ADDITION ##### if ($commands) { $commands .= ' '; } $commands .= '<a href="' . ewiki_script($thisaction, $id, array("version"=>$current["version"])) . '">' . get_string($title,"wiki") . '</a>'; ##### END MOODLE ADDITION ##### } #-- print page database entry foreach($show as $i) { $value = @$current[$i]; #-- show database {fields} differently if ($i == "meta") { continue; // MOODLE DOESN'T USE IT $str = ""; if ($first && $value) { foreach ($value as $n=>$d) { $str .= s("$n: $d") . "<br />\n"; } } $value = $str; } elseif ($value >= UNIX_MILLENNIUM) { #-- {lastmodified}, {created} #### BEGIN MOODLE CHANGE $value=userdate($value); #$value = strftime("%c", $value); #### END MOODLE CHANGE } elseif ($i == "content") { continue; // MOODLE DOESN'T CARE $value = strlen(trim($value)) . " bytes"; $i = "content size"; } elseif ($first && ($i == "refs") && !(EWIKI_PROTECTED_MODE && (EWIKI_PROTECTED_MODE_HIDING>=2))) { $a = explode("\n", trim($value)); $ewiki_links = ewiki_database("FIND", $a); ewiki_merge_links($ewiki_links); foreach ($a as $n=>$link) { $a[$n] = ewiki_link_regex_callback(array("$link"), "force_noimg"); } $value = trim(implode(", ", $a)); if (!$value) { continue; } } elseif (strpos($value, "\n") !== false) { #-- also for {refs} $value = str_replace("\n", ", ", trim($value)); if (!$value) { continue; } } elseif ($i == "version") { $value = '<a href="' . ewiki_script("", $id, array("version"=>$value)) . '">' . $value . '</a> '."($commands)"; } elseif ($i == "flags") { continue; // MOODLE DOESN'T USE IT $fstr = ""; for ($n = 0; $n < 32; $n++) { if ($value & (1 << $n)) { if (! ($s=$flagnames[$n])) { $s = "UU$n"; } $fstr .= $s . " "; } } $value = $fstr; } elseif ($i == "author") { continue; $ewiki_links=1; $value = preg_replace_callback("/((\w+:)?([".EWIKI_CHARS_U."]+[".EWIKI_CHARS_L."]+){2,}[\w\d]*)/", "ewiki_link_regex_callback", $value); } elseif ($i == "userid") { $i = 'author'; if ($user = get_record('user', 'id', $value)) { if (!isset($course->id)) { $course->id = 1; } $picture = print_user_picture($user->id, $course->id, $user->picture, false, true, true); $value = $picture." <a href=\"$CFG->wwwroot/user/view.php?id=$user->id&course=$course->id\">".fullname($user)."</a>"; } else { continue; //$value = @$current['author']; } } ##### BEGIN MOODLE ADDITION ##### $o .= '<tr class="page-'.$i.'"><td style="vertical-align:top;text-align:right;white-space: nowrap;"><b>' .ewiki_t($i). ':</b></td>' . '<td>' . $value . "</td></tr>\n"; ##### END MOODLE ADDITION ##### } $o .= "</table><br /><br />\n"; } #-- page result split if ($v >= 1) { $o .= "<br />\n".get_string('showversions','wiki').' '.ewiki_chunked_page($action, $id, -1, $v, 1, 0, 0) . "\n <br />"; } return($o);}function ewiki_chunked_page($action, $id, $dir=-1, $start=10, $end=1, $limit=0, $overlap=0.25, $collapse_last=0.67) { global $ewiki_config; if (empty($limit)) { $limit = $ewiki_config["list_limit"]; } if ($overlap < 1) { $overlap = (int) ($limit * $overlap); } $p = ""; $n = $start; while ($n) { $n -= $dir * $overlap; $e = $n + $dir * ($limit + $overlap) + 1; if ($dir<0) { $e = max(1, $e); if ($e <= $collapse_last * $limit) { $e = 1; } } else { $e = min($end, $e); if ($e >= $collapse_last * $limit) { $e = $end; } } $o .= ($o?" · ":"") . '<a href="'.ewiki_script($action, $id, array(EWIKI_UP_PAGENUM=>$n, EWIKI_UP_PAGEEND=>$e)) . '">'. "$n-$e" . '</a>'; if (($n=$e-1) < $end) { $n = false; } } return('<span class="chunked-result">'. $o .'</span>');}function ewiki_page_edit($id, $data, $action) { global $ewiki_links, $ewiki_author, $ewiki_plugins, $ewiki_ring, $ewiki_errmsg; $hidden_postdata = array(); #-- previous version come back if (@$data["forced_version"]) { $current = ewiki_database("GET", array("id"=>$id)); $data["version"] = $current["version"]; unset($current); unset($_REQUEST["content"]); unset($_REQUEST["version"]); } #-- edit hacks if ($pf_a = @$ewiki_plugins["edit_hook"]) foreach ($pf_a as $pf) { if ($output = $pf($id, $data, $hidden_postdata)) { return($output); } } #-- permission checks if (isset($ewiki_ring)) { $ring = $ewiki_ring; } else { $ring = 3; } $flags = @$data["flags"]; if (!($flags & EWIKI_DB_F_WRITEABLE)) { #-- perform auth $edit_ring = (EWIKI_PROTECTED_MODE>=2) ? (2) : (NULL); if (EWIKI_PROTECTED_MODE && !ewiki_auth($id, $data, $action, $edit_ring, "FORCE")) { return($ewiki_errmsg); } #-- flag checking if (($flags & EWIKI_DB_F_READONLY) and ($ring >= 2)) { return(ewiki_t("CANNOTCHANGEPAGE")); } if (($flags) and (($flags & EWIKI_DB_F_TYPE) != EWIKI_DB_F_TEXT) and ($ring >= 1)) { return(ewiki_t("CANNOTCHANGEPAGE")); } } #-- "Edit Me" $o = ewiki_make_title($id, ewiki_t("EDITTHISPAGE").(" '{$id}'"), 2, $action, "", "_MAY_SPLIT=1"); #-- preview if (isset($_REQUEST["preview"])) { $o .= $ewiki_plugins["edit_preview"][0]($data); } #-- save if (isset($_REQUEST["save"])) { #-- normalize to UNIX newlines $_REQUEST["content"] = str_replace("\015\012", "\012", $_REQUEST["content"]); $_REQUEST["content"] = str_replace("\015", "\012", $_REQUEST["content"]); #-- check for concurrent version saving $error = 0; if ((@$data["version"] >= 1) && ($data["version"] != @$_REQUEST["version"]) || (@$_REQUEST["version"] < 1)) { $pf = $ewiki_plugins["edit_patch"][0]; if (!$pf || !$pf($id, $data)) { $error = 1; $o .= ewiki_t("ERRVERSIONSAVE") . "<br /><br />"; } } if (!$error) { #-- new pages` flags if (! ($set_flags = @$data["flags"] & EWIKI_DB_F_COPYMASK)) { $set_flags = 1; } if (EWIKI_ALLOW_HTML) { $set_flags |= EWIKI_DB_F_HTML; } #-- mk db entry $save = array( "id" => $id, "version" => @$data["version"] + 1, "flags" => $set_flags, "content" => $_REQUEST["content"], "created" => ($uu=@$data["created"]) ? $uu : time(), "meta" => ($uu=@$data["meta"]) ? $uu : "", "hits" => ($uu=@$data["hits"]) ? $uu : "0", ); ewiki_data_update($save); #-- edit storage hooks if ($pf_a = @$ewiki_plugins["edit_save"]) { foreach ($pf_a as $pf) { $pf($save, $data); } } #-- save if (!$save || !ewiki_database("WRITE", $save)) { $o .= $ewiki_errmsg ? $ewiki_errmsg : ewiki_t("ERRORSAVING"); } else { #-- prevent double saving, when ewiki_page() is re-called $_REQUEST = $_GET = $_POST = array(); $o = ewiki_t("THANKSFORCONTRIBUTION") . "<br /><br />"; $o .= ewiki_page($id); if (EWIKI_EDIT_REDIRECT) { $url = ewiki_script("", $id, "thankyou=1", 0, 0, EWIKI_HTTP_HEADERS?ewiki_script_url():0); if (EWIKI_HTTP_HEADERS && !headers_sent()) { header("Status: 303 Redirect for GET"); header("Location: $url"); #header("URI: $url"); #header("Refresh: 0; URL=$url"); } else { $o .= '<meta http-equiv="Refresh" content="0; URL='.s($url).'">'; } } } } //@REWORK // header("Reload-Location: " . ewiki_script("", $id, "", 0, 0, ewiki_script_url()) ); } else { #-- Edit <form> $o .= ewiki_page_edit_form($id, $data, $hidden_postdata); #-- additional forms if ($pf_a = $ewiki_plugins["edit_form_final"]) foreach ($pf_a as $pf) { $pf($o, $id, $data, $action); } } return($o);}function ewiki_data_update(&$data, $author="") { global $USER, $ewiki_links; #-- add backlinks entry ewiki_scan_wikiwords($data["content"], $ewiki_links, "_STRIP_EMAIL=1"); $data["refs"] = "\n\n".implode("\n", array_keys($ewiki_links))."\n\n"; $data["lastmodified"] = time(); $data["author"] = ewiki_author($author); if (isset($USER->id)) { $data["userid"] = $USER->id; }}#-- edit <textarea>function ewiki_page_edit_form(&$id, &$data, &$hidden_postdata) { global $ewiki_plugins, $ewiki_config, $moodle_format; $o=''; #-- previously edited, or db fetched content if (@$_REQUEST["content"] || @$_REQUEST["version"]) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -