diff.php

来自「很棒的在线教学系统」· PHP 代码 · 共 115 行

PHP
115
字号
<?php // $Id: diff.php,v 1.8 2007/06/08 13:45:10 sam_marshall Exp $ # this is the "stupid diff", which shows up changes between two # saved versions of a WikiPage; even if working very unclean it # allows to see what has changed # it is accessible through the "info about page" action $ewiki_plugins["action"]["diff"] = "ewiki_page_stupid_diff"; $ewiki_config["action_links"]["info"]["diff"] = "diff"; function ewiki_page_stupid_diff($id, $data, $action) {    global $wiki, $moodle_format;    if ($uu=$GLOBALS["ewiki_diff_versions"]) {       list($new_ver, $old_ver) = $uu;       $data = ewiki_database("GET", array("id" => $id, "version" => $new_ver));    }    else {       $new_ver = $data["version"];       $old_ver = $new_ver - 1;    }    if ($old_ver > 0) {       $data0 = ewiki_database("GET", array("id" => $id, "version" => $old_ver));    }        $a->new_ver=$new_ver;    $a->old_ver=$old_ver;    $a->pagename=$id;    $o = ewiki_make_title($id, get_string("differences","wiki",$a));    # Different handling for html: closes Bug #1530 - Wiki diffs useless when using HTML editor        if($wiki->htmlmode==2) {        /// first do the formatiing to get normal display format without filters        $options = new object();        $options->smiley = false;        $options->filter = false;        $content0 = format_text($data0['content'], $moodle_format, $options);        $content = format_text($data['content'], $moodle_format, $options);        /// Remove all new line characters. They will be placed at HTML line breaks.        $content0 = preg_replace('/\n|\r/i', ' ', $content0);        $content0 = preg_replace('/(\S)\s+(\S)/', '$1 $2', $content0); // Remove multiple spaces.        $content = preg_replace('/\n|\r/i', ' ', $content);        $content = preg_replace('/(\S)\s+(\S)/', '$1 $2', $content);                /// Replace <p>&nbsp;</p>        $content0 = preg_replace('#(<p( [^>]*)?>(&nbsp;|\s+)</p>)|(<p( [^>]*)?></p>)#i', "\n", $content0);        $content = preg_replace('#(<p( [^>]*)?>(&nbsp;|\s+)</p>)|(<p( [^>]*)?></p>)#i', "\n", $content);                /// Place new line characters at logical HTML positions.        $htmlendings = array('+(<br.*?>)+iU', '+(<p( [^>]*)?>)+iU', '+(</p>)+i', '+(<hr.*?>)+iU', '+(<ol.*?>)+iU',                             '+(</ol>)+i', '+(<ul.*?>)+iU', '+(</ul>)+i', '+(<li.*?>)+iU', '+(</li>)+i',                              '+(</tr>)+i', '+(<div.*?>)+iU', '+(</div>)+i');        $htmlrepl = array("\n\$1\n", "\n\$1\n", "\n\$1\n", "\n\$1\n", "\n\$1\n",                          "\n\$1\n", "\n\$1\n", "\n\$1\n", "\n\$1\n", "\n\$1\n",                          "\n\$1\n", "\n\$1\n", "\n\$1\n");        $content0 = preg_replace($htmlendings, $htmlrepl, $content0);        $content = preg_replace($htmlendings, $htmlrepl, $content);    } else {      $content0=$data0["content"];      $content=$data["content"];    }    $txt0 = preg_split("+\s*\n+", trim($content0));    $txt2 = preg_split("+\s*\n+", trim($content));    $diff0 = array_diff($txt0, $txt2);    $diff2 = array_diff($txt2, $txt0);    foreach ($txt2 as $i => $line) {       $i2 = $i;       while ($rm = $diff0[$i2++]) {                    if($wiki->htmlmode == 2) {            if ($rm == '<br />') { //ugly hack to fix line breaks                $rm = '';            }            $o .= "<b>-</b><font color=\"#990000\">".format_text($rm, $moodle_format, $options)."</font><br />\n";          } else {            $o .= "<b>-</b><font color=\"#990000\"><tt>".s($rm)."</tt></font><br />\n";          }          unset($diff0[$i2-1]);       }       if (in_array($line, $diff2)) {          if($wiki->htmlmode == 2) {            if ($line == '<br />') { //ugly hack to fix line breaks                $line = '';            }            $o .= "<b>+</b><font color=\"#009900\">".format_text($line, $moodle_format, $options)."</font><br />\n";          } else {            $o .= "<b>+</b><font color=\"#009900\"><tt>".s($line)."</tt></font><br />\n";          }       }       else {          if($wiki->htmlmode == 2) {            $o .= format_text($line, $moodle_format, $options)."\n";          } else {            $o .= "&nbsp; ".s($line)."<br />\n";          }       }    }    foreach ($diff0 as $rm) {       $o .= "<b>-</b><font color=\"#990000\"> <tt>".s($rm)."</tt></font><br />\n";    }    return($o); }?>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?