Blame
Date:
Wed Oct 12 04:00:17 2022 UTC
Message:
Daily backup
001
2021-12-17
jrmu
<?php if (!defined('PmWiki')) exit();
002
2021-12-17
jrmu
/* Copyright 2004-2016 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 provides a URL-approval capability. To enable this
009
2021-12-17
jrmu
script, add the following line to a configuration file:
010
2021-12-17
jrmu
011
2021-12-17
jrmu
include_once('scripts/urlapprove.php');
012
2021-12-17
jrmu
013
2021-12-17
jrmu
The URL prefixes to be allowed are stored as patterns in
014
2021-12-17
jrmu
$WhiteUrlPatterns. This array can be loaded from config.php, or
015
2021-12-17
jrmu
from the wiki pages given by the $ApprovedUrlPagesFmt[] array.
016
2021-12-17
jrmu
Any http: or https: URL that isn't in $WhiteUrlPatterns is rendered
017
2021-12-17
jrmu
using $UnapprovedLinkFmt.
018
2021-12-17
jrmu
019
2021-12-17
jrmu
The script also provides ?action=approveurls and ?action=approvesites,
020
2021-12-17
jrmu
which scan the current page for any new URLs to be automatically added
021
2021-12-17
jrmu
the first page of $UrlApprovalPagesFmt.
022
2021-12-17
jrmu
023
2021-12-17
jrmu
Finally, the script will block any post containing more than
024
2021-12-17
jrmu
$UnapprovedLinkCountMax unapproved urls in it. By default this
025
2021-12-17
jrmu
is set to a very large number, leaving the posting of unapproved
026
2021-12-17
jrmu
urls wide open, but by setting $UnapprovedLinkCountMax to a smaller
027
2021-12-17
jrmu
number you can limit the number of unapproved urls that make it into
028
2021-12-17
jrmu
a page. (Wikispammers seem to like to post long lists of urls, while
029
2021-12-17
jrmu
more "normal" authors tend to only post a few.)
030
2021-12-17
jrmu
031
2021-12-17
jrmu
Script maintained by Petko YOTOV www.pmwiki.org/petko
032
2021-12-17
jrmu
*/
033
2021-12-17
jrmu
034
2021-12-17
jrmu
$LinkFunctions['http:'] = 'LinkHTTP';
035
2021-12-17
jrmu
$LinkFunctions['https:'] = 'LinkHTTP';
036
2021-12-17
jrmu
SDV($ApprovedUrlPagesFmt, array('$SiteAdminGroup.ApprovedUrls'));
037
2021-12-17
jrmu
SDV($UnapprovedLinkFmt,
038
2021-12-17
jrmu
"\$LinkText<a class='apprlink' href='{\$PageUrl}?action=approvesites'>$[(approve sites)]</a>");
039
2021-12-17
jrmu
SDVA($HTMLStylesFmt, array('urlapprove' => '.apprlink { font-size:smaller; }'));
040
2021-12-17
jrmu
SDV($ApproveUrlPattern,
041
2021-12-17
jrmu
"\\bhttps?:[^\\s$UrlExcludeChars]*[^\\s.,?!$UrlExcludeChars]");
042
2021-12-17
jrmu
$WhiteUrlPatterns = (array)$WhiteUrlPatterns;
043
2021-12-17
jrmu
SDV($HandleActions['approveurls'], 'HandleApprove');
044
2021-12-17
jrmu
SDV($HandleAuth['approveurls'], 'edit');
045
2021-12-17
jrmu
SDV($HandleActions['approvesites'], 'HandleApprove');
046
2021-12-17
jrmu
SDV($HandleAuth['approvesites'], 'edit');
047
2021-12-17
jrmu
SDV($UnapprovedLinkCountMax, 1000000);
048
2021-12-17
jrmu
array_splice($EditFunctions, array_search('PostPage', $EditFunctions),
049
2021-12-17
jrmu
0, 'BlockUnapprovedPosts');
050
2021-12-17
jrmu
051
2021-12-17
jrmu
function LinkHTTP($pagename,$imap,$path,$alt,$txt,$fmt=NULL) {
052
2021-12-17
jrmu
global $EnableUrlApprovalRequired, $IMap, $WhiteUrlPatterns, $FmtV,
053
2021-12-17
jrmu
$UnapprovedLink, $UnapprovedLinkCount, $UnapprovedLinkFmt;
054
2021-12-17
jrmu
if (!IsEnabled($EnableUrlApprovalRequired,1))
055
2021-12-17
jrmu
return LinkIMap($pagename,$imap,$path,$alt,$txt,$fmt);
056
2021-12-17
jrmu
static $havereadpages;
057
2021-12-17
jrmu
if (!$havereadpages) { ReadApprovedUrls($pagename); $havereadpages=true; }
058
2021-12-17
jrmu
$p = str_replace(' ','%20',$path);
059
2021-12-17
jrmu
$url = str_replace('$1',$p,$IMap[$imap]);
060
2021-12-17
jrmu
if (!isset($UnapprovedLink)) $UnapprovedLink = array();
061
2021-12-17
jrmu
foreach((array)$WhiteUrlPatterns as $pat) {
062
2021-12-17
jrmu
if (preg_match("!^$pat(/|$)!i",$url))
063
2021-12-17
jrmu
return LinkIMap($pagename,$imap,$path,$alt,$txt,$fmt);
064
2021-12-17
jrmu
}
065
2021-12-17
jrmu
$FmtV['$LinkUrl'] = PUE(str_replace('$1',$path,$IMap[$imap]));
066
2021-12-17
jrmu
$FmtV['$LinkText'] = $txt;
067
2021-12-17
jrmu
$FmtV['$LinkAlt'] = str_replace(array('"',"'"),array('&#34;','&#39;'),$alt);
068
2021-12-17
jrmu
$UnapprovedLink[] = $url;
069
2021-12-17
jrmu
@$UnapprovedLinkCount++;
070
2021-12-17
jrmu
return FmtPageName($UnapprovedLinkFmt,$pagename);
071
2021-12-17
jrmu
}
072
2021-12-17
jrmu
073
2021-12-17
jrmu
function ReadApprovedUrls($pagename) {
074
2021-12-17
jrmu
global $ApprovedUrlPagesFmt,$ApproveUrlPattern,$WhiteUrlPatterns;
075
2021-12-17
jrmu
foreach((array)$ApprovedUrlPagesFmt as $p) {
076
2021-12-17
jrmu
$pn = FmtPageName($p, $pagename);
077
2021-12-17
jrmu
StopWatch("ReadApprovedUrls $pn begin");
078
2021-12-17
jrmu
$apage = ReadPage($pn, READPAGE_CURRENT);
079
2021-12-17
jrmu
preg_match_all("/$ApproveUrlPattern/",@$apage['text'],$match);
080
2021-12-17
jrmu
foreach($match[0] as $a)
081
2021-12-17
jrmu
$WhiteUrlPatterns[] = preg_quote($a,'!');
082
2021-12-17
jrmu
StopWatch("ReadApprovedUrls $pn end");
083
2021-12-17
jrmu
}
084
2021-12-17
jrmu
}
085
2021-12-17
jrmu
086
2021-12-17
jrmu
function HandleApprove($pagename, $auth='edit') {
087
2021-12-17
jrmu
global $ApproveUrlPattern,$WhiteUrlPatterns,$ApprovedUrlPagesFmt,$action;
088
2021-12-17
jrmu
Lock(2);
089
2021-12-17
jrmu
$page = ReadPage($pagename);
090
2021-12-17
jrmu
$text = preg_replace('/[()]/','',$page['text']);
091
2021-12-17
jrmu
preg_match_all("/$ApproveUrlPattern/",$text,$match);
092
2021-12-17
jrmu
ReadApprovedUrls($pagename);
093
2021-12-17
jrmu
$addpat = array();
094
2021-12-17
jrmu
foreach($match[0] as $a) {
095
2021-12-17
jrmu
if ($action=='approvesites')
096
2021-12-17
jrmu
$a=preg_replace("!^([^:]+://[^/]+).*$!",'$1',$a);
097
2021-12-17
jrmu
$addpat[] = $a;
098
2021-12-17
jrmu
}
099
2021-12-17
jrmu
if (count($addpat)>0) {
100
2021-12-17
jrmu
$aname = FmtPageName($ApprovedUrlPagesFmt[0],$pagename);
101
2021-12-17
jrmu
$apage = RetrieveAuthPage($aname, $auth);
102
2021-12-17
jrmu
if (!$apage) Abort("?cannot edit $aname");
103
2021-12-17
jrmu
$new = $apage;
104
2021-12-17
jrmu
if (substr($new['text'],-1,1)!="\n") $new['text'].="\n";
105
2021-12-17
jrmu
foreach($addpat as $a) {
106
2021-12-17
jrmu
foreach((array)$WhiteUrlPatterns as $pat)
107
2021-12-17
jrmu
if (preg_match("!^$pat(/|$)!i",$a)) continue 2;
108
2021-12-17
jrmu
$urlp = preg_quote($a,'!');
109
2021-12-17
jrmu
$WhiteUrlPatterns[] = $urlp;
110
2021-12-17
jrmu
$new['text'].=" $a\n";
111
2021-12-17
jrmu
}
112
2021-12-17
jrmu
$_POST['post'] = 'y';
113
2021-12-17
jrmu
PostPage($aname,$apage,$new);
114
2021-12-17
jrmu
}
115
2021-12-17
jrmu
Redirect($pagename);
116
2021-12-17
jrmu
}
117
2021-12-17
jrmu
118
2021-12-17
jrmu
function BlockUnapprovedPosts($pagename, &$page, &$new) {
119
2021-12-17
jrmu
global $EnableUrlApprovalRequired, $UnapprovedLinkCount,
120
2021-12-17
jrmu
$UnapprovedLinkCountMax, $EnablePost, $MessagesFmt, $BlockMessageFmt;
121
2021-12-17
jrmu
if (!IsEnabled($EnableUrlApprovalRequired, 1)) return;
122
2021-12-17
jrmu
if ($UnapprovedLinkCount <= $UnapprovedLinkCountMax) return;
123
2021-12-17
jrmu
if ($page['=auth']['admin']) return;
124
2021-12-17
jrmu
$EnablePost = 0;
125
2021-12-17
jrmu
$MessagesFmt[] = $BlockMessageFmt;
126
2021-12-17
jrmu
$MessagesFmt[] = XL('Too many unapproved external links.');
127
2021-12-17
jrmu
}
128
2021-12-17
jrmu
IRCNow