Blame
Date:
Mon Jan 23 05:00:25 2023 UTC
Message:
Daily backup
001
2021-12-17
jrmu
<?php if (!defined('PmWiki')) exit();
002
2021-12-17
jrmu
/* Copyright 2004-2019 Patrick R. Michaud (pmichaud@pobox.com)
003
2021-12-17
jrmu
This file is part of PmWiki; you can redistribute it and/or modify
004
2021-12-17
jrmu
it under the terms of the GNU General Public License as published
005
2021-12-17
jrmu
by the Free Software Foundation; either version 2 of the License, or
006
2021-12-17
jrmu
(at your option) any later version. See pmwiki.php for full details.
007
2021-12-17
jrmu
008
2021-12-17
jrmu
This script defines routines for displaying page revisions. It
009
2021-12-17
jrmu
is included by default from the stdconfig.php script.
010
2021-12-17
jrmu
011
2021-12-17
jrmu
Script maintained by Petko YOTOV www.pmwiki.org/petko
012
2021-12-17
jrmu
*/
013
2021-12-17
jrmu
014
2021-12-17
jrmu
function LinkSuppress($pagename,$imap,$path,$title,$txt,$fmt=NULL)
015
2021-12-17
jrmu
{ return $txt; }
016
2021-12-17
jrmu
017
2021-12-17
jrmu
SDV($DiffShow['minor'],(@$_REQUEST['minor']!='n')?'y':'n');
018
2021-12-17
jrmu
SDV($DiffShow['source'],(@$_REQUEST['source']!='n')?'y':'n');
019
2021-12-17
jrmu
SDV($DiffMinorFmt, ($DiffShow['minor']=='y') ?
020
2021-12-17
jrmu
"<a href='{\$PageUrl}?action=diff&amp;source=".$DiffShow['source']."&amp;minor=n'>$[Hide minor edits]</a>" :
021
2021-12-17
jrmu
"<a href='{\$PageUrl}?action=diff&amp;source=".$DiffShow['source']."&amp;minor=y'>$[Show minor edits]</a>" );
022
2021-12-17
jrmu
SDV($DiffSourceFmt, ($DiffShow['source']=='y') ?
023
2021-12-17
jrmu
"<a href='{\$PageUrl}?action=diff&amp;source=n&amp;minor=".$DiffShow['minor']."'>$[Show changes to output]</a>" :
024
2021-12-17
jrmu
"<a href='{\$PageUrl}?action=diff&amp;source=y&amp;minor=".$DiffShow['minor']."'>$[Show changes to markup]</a>");
025
2021-12-17
jrmu
SDV($PageDiffFmt,"<h2 class='wikiaction'>$[{\$FullName} History]</h2>
026
2021-12-17
jrmu
<p>$DiffMinorFmt - $DiffSourceFmt</p>
027
2021-12-17
jrmu
");
028
2021-12-17
jrmu
SDV($DiffStartFmt,"
029
2021-12-17
jrmu
<div class='diffbox'><div class='difftime'><a name='diff\$DiffGMT' href='#diff\$DiffGMT'>\$DiffTime</a>
030
2021-12-17
jrmu
\$[by] <span class='diffauthor' title='\$DiffHost'>\$DiffAuthor</span> - \$DiffChangeSum</div>");
031
2021-12-17
jrmu
SDV($DiffDelFmt['a'],"
032
2021-12-17
jrmu
<div class='difftype'>\$[Deleted line \$DiffLines:]</div>
033
2021-12-17
jrmu
<div class='diffdel'>");
034
2021-12-17
jrmu
SDV($DiffDelFmt['c'],"
035
2021-12-17
jrmu
<div class='difftype'>\$[Changed line \$DiffLines from:]</div>
036
2021-12-17
jrmu
<div class='diffdel'>");
037
2021-12-17
jrmu
SDV($DiffAddFmt['d'],"
038
2021-12-17
jrmu
<div class='difftype'>\$[Added line \$DiffLines:]</div>
039
2021-12-17
jrmu
<div class='diffadd'>");
040
2021-12-17
jrmu
SDV($DiffAddFmt['c'],"</div>
041
2021-12-17
jrmu
<div class='difftype'>$[to:]</div>
042
2021-12-17
jrmu
<div class='diffadd'>");
043
2021-12-17
jrmu
SDV($DiffEndDelAddFmt,"</div>");
044
2021-12-17
jrmu
SDV($DiffEndFmt,"</div>");
045
2021-12-17
jrmu
SDV($DiffRestoreFmt,"
046
2021-12-17
jrmu
<div class='diffrestore'><a href='{\$PageUrl}?action=edit&amp;restore=\$DiffId&amp;preview=y'>$[Restore]</a></div>");
047
2021-12-17
jrmu
048
2021-12-17
jrmu
SDV($HandleActions['diff'], 'HandleDiff');
049
2021-12-17
jrmu
SDV($HandleAuth['diff'], 'read');
050
2021-12-17
jrmu
SDV($ActionTitleFmt['diff'], '| $[History]');
051
2021-12-17
jrmu
SDV($HTMLStylesFmt['diff'], "
052
2021-12-17
jrmu
.diffbox { width:570px; border-left:1px #999999 solid; margin-top:1.33em; }
053
2021-12-17
jrmu
.diffauthor { font-weight:bold; }
054
2021-12-17
jrmu
.diffchangesum { font-weight:bold; }
055
2021-12-17
jrmu
.difftime { font-family:verdana,sans-serif; font-size:66%;
056
2021-12-17
jrmu
background-color:#dddddd; }
057
2021-12-17
jrmu
.difftype { clear:both; font-family:verdana,sans-serif;
058
2021-12-17
jrmu
font-size:66%; font-weight:bold; }
059
2021-12-17
jrmu
.diffadd { border-left:5px #99ff99 solid; padding-left:5px; }
060
2021-12-17
jrmu
.diffdel { border-left:5px #ffff99 solid; padding-left:5px; }
061
2021-12-17
jrmu
.diffrestore { clear:both; font-family:verdana,sans-serif;
062
2021-12-17
jrmu
font-size:66%; margin:1.5em 0px; }
063
2021-12-17
jrmu
.diffmarkup { font-family:monospace; }
064
2021-12-17
jrmu
.diffmarkup del { background:#ffff99; text-decoration: none; }
065
2021-12-17
jrmu
.diffmarkup ins { background:#99ff99; text-decoration: none; }");
066
2021-12-17
jrmu
067
2021-12-17
jrmu
function PrintDiff($pagename) {
068
2021-12-17
jrmu
global $DiffHTMLFunction,$DiffShow,$DiffStartFmt,$TimeFmt,
069
2021-12-17
jrmu
$DiffEndFmt,$DiffRestoreFmt,$FmtV, $LinkFunctions;
070
2021-12-17
jrmu
$page = ReadPage($pagename);
071
2021-12-17
jrmu
if (!$page) return;
072
2021-12-17
jrmu
krsort($page); reset($page);
073
2021-12-17
jrmu
$lf = $LinkFunctions;
074
2021-12-17
jrmu
$LinkFunctions['http:'] = 'LinkSuppress';
075
2021-12-17
jrmu
$LinkFunctions['https:'] = 'LinkSuppress';
076
2021-12-17
jrmu
SDV($DiffHTMLFunction, 'DiffHTML');
077
2021-12-17
jrmu
foreach($page as $k=>$v) {
078
2021-12-17
jrmu
if (!preg_match("/^diff:(\d+):(\d+):?([^:]*)/",$k,$match)) continue;
079
2021-12-17
jrmu
$diffclass = $match[3];
080
2021-12-17
jrmu
if ($diffclass=='minor' && $DiffShow['minor']!='y') continue;
081
2021-12-17
jrmu
$diffgmt = $FmtV['$DiffGMT'] = $match[1];
082
2021-12-17
jrmu
$FmtV['$DiffTime'] = strftime($TimeFmt,$diffgmt);
083
2021-12-17
jrmu
$diffauthor = @$page["author:$diffgmt"];
084
2021-12-17
jrmu
if (!$diffauthor) @$diffauthor=$page["host:$diffgmt"];
085
2021-12-17
jrmu
if (!$diffauthor) $diffauthor="unknown";
086
2021-12-17
jrmu
$FmtV['$DiffChangeSum'] = PHSC(@$page["csum:$diffgmt"]);
087
2021-12-17
jrmu
$FmtV['$DiffHost'] = @$page["host:$diffgmt"];
088
2021-12-17
jrmu
$FmtV['$DiffUserAgent'] = PHSC(@$page["agent:$diffgmt"], ENT_QUOTES);
089
2021-12-17
jrmu
$FmtV['$DiffAuthor'] = $diffauthor;
090
2021-12-17
jrmu
$FmtV['$DiffId'] = $k;
091
2021-12-17
jrmu
$html = $DiffHTMLFunction($pagename, $v);
092
2021-12-17
jrmu
if ($html===false) continue;
093
2021-12-17
jrmu
echo FmtPageName($DiffStartFmt,$pagename);
094
2021-12-17
jrmu
echo $html;
095
2021-12-17
jrmu
echo FmtPageName($DiffEndFmt,$pagename);
096
2021-12-17
jrmu
echo FmtPageName($DiffRestoreFmt,$pagename);
097
2021-12-17
jrmu
}
098
2021-12-17
jrmu
$LinkFunctions = $lf;
099
2021-12-17
jrmu
}
100
2021-12-17
jrmu
101
2021-12-17
jrmu
# This function converts a single diff entry from the wikipage file
102
2021-12-17
jrmu
# into HTML, ready for display.
103
2021-12-17
jrmu
function DiffHTML($pagename, $diff) {
104
2021-12-17
jrmu
if (@$_REQUEST['nodiff']>'') return '';
105
2021-12-17
jrmu
global $FmtV, $DiffShow, $DiffAddFmt, $DiffDelFmt, $DiffEndDelAddFmt,
106
2021-12-17
jrmu
$DiffRenderSourceFunction;
107
2021-12-17
jrmu
SDV($DiffRenderSourceFunction, 'DiffRenderSource');
108
2021-12-17
jrmu
$difflines = explode("\n",$diff."\n");
109
2021-12-17
jrmu
$in=array(); $out=array(); $dtype=''; $html = '';
110
2021-12-17
jrmu
foreach($difflines as $d) {
111
2021-12-17
jrmu
if ($d>'') {
112
2021-12-17
jrmu
if ($d[0]=='-' || $d[0]=='\\') continue;
113
2021-12-17
jrmu
if ($d[0]=='<') { $out[]=substr($d,2); continue; }
114
2021-12-17
jrmu
if ($d[0]=='>') { $in[]=substr($d,2); continue; }
115
2021-12-17
jrmu
}
116
2021-12-17
jrmu
if (preg_match("/^(\\d+)(,(\\d+))?([adc])(\\d+)(,(\\d+))?/",
117
2021-12-17
jrmu
$dtype,$match)) {
118
2021-12-17
jrmu
if (@$match[7]>'') {
119
2021-12-17
jrmu
$lines='lines';
120
2021-12-17
jrmu
$count=$match[1].'-'.($match[1]+$match[7]-$match[5]);
121
2021-12-17
jrmu
} elseif ($match[3]>'') {
122
2021-12-17
jrmu
$lines='lines'; $count=$match[1].'-'.$match[3];
123
2021-12-17
jrmu
} else { $lines='line'; $count=$match[1]; }
124
2021-12-17
jrmu
if ($match[4]=='a' || $match[4]=='c') {
125
2021-12-17
jrmu
$txt = str_replace('line',$lines,$DiffDelFmt[$match[4]]);
126
2021-12-17
jrmu
$FmtV['$DiffLines'] = $count;
127
2021-12-17
jrmu
$html .= FmtPageName($txt,$pagename);
128
2021-12-17
jrmu
if ($DiffShow['source']=='y')
129
2021-12-17
jrmu
$html .= "<div class='diffmarkup'>"
130
2021-12-17
jrmu
.$DiffRenderSourceFunction($in, $out, 0)
131
2021-12-17
jrmu
."</div>";
132
2021-12-17
jrmu
else $html .= MarkupToHTML($pagename,
133
2021-12-17
jrmu
preg_replace_callback('/\\(:.*?:\\)/',"cb_diffhtml", join("\n",$in)));
134
2021-12-17
jrmu
}
135
2021-12-17
jrmu
if ($match[4]=='d' || $match[4]=='c') {
136
2021-12-17
jrmu
$txt = str_replace('line',$lines,$DiffAddFmt[$match[4]]);
137
2021-12-17
jrmu
$FmtV['$DiffLines'] = $count;
138
2021-12-17
jrmu
$html .= FmtPageName($txt,$pagename);
139
2021-12-17
jrmu
if ($DiffShow['source']=='y')
140
2021-12-17
jrmu
$html .= "<div class='diffmarkup'>"
141
2021-12-17
jrmu
.$DiffRenderSourceFunction($in, $out, 1)
142
2021-12-17
jrmu
."</div>";
143
2021-12-17
jrmu
else $html .= MarkupToHTML($pagename,
144
2021-12-17
jrmu
preg_replace_callback('/\\(:.*?:\\)/',"cb_diffhtml",join("\n",$out)));
145
2021-12-17
jrmu
}
146
2021-12-17
jrmu
$html .= FmtPageName($DiffEndDelAddFmt,$pagename);
147
2021-12-17
jrmu
}
148
2021-12-17
jrmu
$in=array(); $out=array(); $dtype=$d;
149
2021-12-17
jrmu
}
150
2021-12-17
jrmu
return $html;
151
2021-12-17
jrmu
}
152
2021-12-17
jrmu
function cb_diffhtml($m) { return Keep(PHSC($m[0])); }
153
2021-12-17
jrmu
154
2021-12-17
jrmu
function HandleDiff($pagename, $auth='read') {
155
2021-12-17
jrmu
global $HandleDiffFmt, $PageStartFmt, $PageDiffFmt, $PageEndFmt;
156
2021-12-17
jrmu
$page = RetrieveAuthPage($pagename, $auth, true, READPAGE_CURRENT);
157
2021-12-17
jrmu
if (!$page) { Abort("?cannot diff $pagename"); }
158
2021-12-17
jrmu
PCache($pagename, $page);
159
2021-12-17
jrmu
SDV($HandleDiffFmt,array(&$PageStartFmt,
160
2021-12-17
jrmu
&$PageDiffFmt,"<div id='wikidiff'>", 'function:PrintDiff', '</div>',
161
2021-12-17
jrmu
&$PageEndFmt));
162
2021-12-17
jrmu
PrintFmt($pagename,$HandleDiffFmt);
163
2021-12-17
jrmu
}
164
2021-12-17
jrmu
## Functions for simple word-diff (written by Petko Yotov)
165
2021-12-17
jrmu
function DiffRenderSource($in, $out, $which) {
166
2021-12-17
jrmu
global $WordDiffFunction, $EnableDiffInline;
167
2021-12-17
jrmu
if (!IsEnabled($EnableDiffInline, 1)) {
168
2021-12-17
jrmu
$a = $which? $out : $in;
169
2021-12-17
jrmu
return str_replace("\n","<br />",PHSC(join("\n",$a)));
170
2021-12-17
jrmu
}
171
2021-12-17
jrmu
$countdifflines = abs(count($in)-count($out));
172
2021-12-17
jrmu
$lines = $cnt = $x2 = $y2 = array();
173
2021-12-17
jrmu
foreach($in as $line) {
174
2021-12-17
jrmu
$tmp = $countdifflines>20 ? array($line) : DiffPrepareInline($line);
175
2021-12-17
jrmu
if (!$which) $cnt[] = array(count($x2), count($tmp));
176
2021-12-17
jrmu
$x2 = array_merge($x2, $tmp);
177
2021-12-17
jrmu
}
178
2021-12-17
jrmu
foreach($out as $line) {
179
2021-12-17
jrmu
$tmp = $countdifflines>20 ? array($line) : DiffPrepareInline($line);
180
2021-12-17
jrmu
if ($which) $cnt[] = array(count($y2), count($tmp));
181
2021-12-17
jrmu
$y2 = array_merge($y2, $tmp);
182
2021-12-17
jrmu
}
183
2021-12-17
jrmu
$z = $WordDiffFunction(implode("\n", $x2), implode("\n", $y2));
184
2021-12-17
jrmu
185
2021-12-17
jrmu
$z2 = array_map('PHSC', ($which? $y2 : $x2));
186
2021-12-17
jrmu
array_unshift($z2, '');
187
2021-12-17
jrmu
foreach (explode("\n", $z) as $zz) {
188
2021-12-17
jrmu
if (preg_match('/^(\\d+)(,(\\d+))?([adc])(\\d+)(,(\\d+))?/',$zz,$m)) {
189
2021-12-17
jrmu
$a1 = $a2 = $m[1];
190
2021-12-17
jrmu
if (@$m[3]) $a2=$m[3];
191
2021-12-17
jrmu
$b1 = $b2 = $m[5];
192
2021-12-17
jrmu
if (@$m[7]) $b2=$m[7];
193
2021-12-17
jrmu
194
2021-12-17
jrmu
if (!$which && ($m[4]=='c'||$m[4]=='d')) {
195
2021-12-17
jrmu
$z2[$a1] = '<del>'. $z2[$a1];
196
2021-12-17
jrmu
$z2[$a2] .= '</del>';
197
2021-12-17
jrmu
}
198
2021-12-17
jrmu
if ($which && ($m[4]=='c'||$m[4]=='a')) {
199
2021-12-17
jrmu
$z2[$b1] = '<ins>'.$z2[$b1];
200
2021-12-17
jrmu
$z2[$b2] .= '</ins>';
201
2021-12-17
jrmu
}
202
2021-12-17
jrmu
}
203
2021-12-17
jrmu
}
204
2021-12-17
jrmu
$line = array_shift($z2);
205
2021-12-17
jrmu
$z2[0] = $line.$z2[0];
206
2021-12-17
jrmu
foreach ($cnt as $a) $lines[] = implode('', array_slice($z2, $a[0], $a[1]));
207
2021-12-17
jrmu
$ret = implode("\n", $lines);
208
2021-12-17
jrmu
$ret = str_replace(array('</del> <del>', '</ins> <ins>'), ' ', $ret);
209
2021-12-17
jrmu
$ret = preg_replace('/(<(ins|del)>|^) /', '$1&nbsp;', $ret);
210
2021-12-17
jrmu
return str_replace(array(" ", "\n ", "\n"),array("&nbsp; ", "<br />&nbsp;", "<br />"),$ret);
211
2021-12-17
jrmu
}
212
2021-12-17
jrmu
## Split a line into pieces before passing it through `diff`
213
2021-12-17
jrmu
function DiffPrepareInline($x) {
214
2021-12-17
jrmu
global $DiffSplitInlineDelims;
215
2021-12-17
jrmu
SDV($DiffSplitInlineDelims, "-@!?#$%^&*()=+[]{}.'\"\\:|,<>_/;~");
216
2021-12-17
jrmu
return preg_split("/([".preg_quote($DiffSplitInlineDelims, '/')."\\s])/",
217
2021-12-17
jrmu
$x, -1, PREG_SPLIT_DELIM_CAPTURE);
218
2021-12-17
jrmu
}
219
2021-12-17
jrmu
220
2021-12-17
jrmu
SDV($WordDiffFunction, 'PHPDiff'); # faster than sysdiff for many calls
221
2021-12-17
jrmu
if (IsEnabled($EnableDiffInline, 1) && $DiffShow['source'] == 'y'
222
2021-12-17
jrmu
&& $WordDiffFunction == 'PHPDiff' && !function_exists('PHPDiff'))
223
2021-12-17
jrmu
include_once("$FarmD/scripts/phpdiff.php");
224
2021-12-17
jrmu
225
2021-12-17
jrmu
## Show diff before the preview Cookbook:PreviewChanges
226
2021-12-17
jrmu
function PreviewDiff($pagename,&$page,&$new) {
227
2021-12-17
jrmu
global $FmtV, $DiffFunction, $DiffHTMLFunction, $EnableDiffInline, $DiffShow;
228
2021-12-17
jrmu
if (@$_REQUEST['preview']>'' && @$page['text']>'' && $page['text']!=$new['text']) {
229
2021-12-17
jrmu
$d = IsEnabled($DiffShow['source'], 'y');
230
2021-12-17
jrmu
$e = IsEnabled($EnableDiffInline, 1);
231
2021-12-17
jrmu
$DiffShow['source'] = 'y';
232
2021-12-17
jrmu
$EnableDiffInline = 1;
233
2021-12-17
jrmu
SDV($DiffHTMLFunction, 'DiffHTML');
234
2021-12-17
jrmu
$diff = $DiffFunction($new['text'], $page['text']);# reverse the diff
235
2021-12-17
jrmu
$FmtV['$PreviewText'] = $DiffHTMLFunction($pagename, $diff).'<hr/>'.@$FmtV['$PreviewText'];
236
2021-12-17
jrmu
$DiffShow['source'] = $d;
237
2021-12-17
jrmu
$EnableDiffInline = $e;
238
2021-12-17
jrmu
}
239
2021-12-17
jrmu
}
240
2021-12-17
jrmu
if (IsEnabled($EnablePreviewChanges, 0) && @$_REQUEST['preview']>'') {
241
2021-12-17
jrmu
$EditFunctions[] = 'PreviewDiff';
242
2021-12-17
jrmu
}
IRCNow