$[(approve sites)]"); $HTMLStylesFmt['urlapprove'] = '.apprlink { font-size:smaller; }'; SDV($ApproveUrlPattern, "\\bhttps?:[^\\s$UrlExcludeChars]*[^\\s.,?!$UrlExcludeChars]"); $WhiteUrlPatterns = (array)$WhiteUrlPatterns; SDV($HandleActions['approveurls'], 'HandleApprove'); SDV($HandleAuth['approveurls'], 'edit'); SDV($HandleActions['approvesites'], 'HandleApprove'); SDV($HandleAuth['approvesites'], 'edit'); SDV($UnapprovedLinkCountMax, 1000000); array_splice($EditFunctions, array_search('PostPage', $EditFunctions), 0, 'BlockUnapprovedPosts'); function LinkHTTP($pagename,$imap,$path,$alt,$txt,$fmt=NULL) { global $EnableUrlApprovalRequired, $IMap, $WhiteUrlPatterns, $FmtV, $UnapprovedLink, $UnapprovedLinkCount, $UnapprovedLinkFmt; if (!IsEnabled($EnableUrlApprovalRequired,1)) return LinkIMap($pagename,$imap,$path,$alt,$txt,$fmt); static $havereadpages; if (!$havereadpages) { ReadApprovedUrls($pagename); $havereadpages=true; } $p = str_replace(' ','%20',$path); $url = str_replace('$1',$p,$IMap[$imap]); if (!isset($UnapprovedLink)) $UnapprovedLink = array(); foreach((array)$WhiteUrlPatterns as $pat) { if (preg_match("!^$pat(/|$)!i",$url)) return LinkIMap($pagename,$imap,$path,$alt,$txt,$fmt); } $FmtV['$LinkUrl'] = PUE(str_replace('$1',$path,$IMap[$imap])); $FmtV['$LinkText'] = $txt; $FmtV['$LinkAlt'] = str_replace(array('"',"'"),array('"','''),$alt); $UnapprovedLink[] = $url; @$UnapprovedLinkCount++; return FmtPageName($UnapprovedLinkFmt,$pagename); } function ReadApprovedUrls($pagename) { global $ApprovedUrlPagesFmt,$ApproveUrlPattern,$WhiteUrlPatterns; foreach((array)$ApprovedUrlPagesFmt as $p) { $pn = FmtPageName($p, $pagename); StopWatch("ReadApprovedUrls $pn begin"); $apage = ReadPage($pn, READPAGE_CURRENT); preg_match_all("/$ApproveUrlPattern/",@$apage['text'],$match); foreach($match[0] as $a) $WhiteUrlPatterns[] = preg_quote($a,'!'); StopWatch("ReadApprovedUrls $pn end"); } } function HandleApprove($pagename, $auth='edit') { global $ApproveUrlPattern,$WhiteUrlPatterns,$ApprovedUrlPagesFmt,$action; Lock(2); $page = ReadPage($pagename); $text = preg_replace('/[()]/','',$page['text']); preg_match_all("/$ApproveUrlPattern/",$text,$match); ReadApprovedUrls($pagename); $addpat = array(); foreach($match[0] as $a) { if ($action=='approvesites') $a=preg_replace("!^([^:]+://[^/]+).*$!",'$1',$a); $addpat[] = $a; } if (count($addpat)>0) { $aname = FmtPageName($ApprovedUrlPagesFmt[0],$pagename); $apage = RetrieveAuthPage($aname, $auth); if (!$apage) Abort("?cannot edit $aname"); $new = $apage; if (substr($new['text'],-1,1)!="\n") $new['text'].="\n"; foreach($addpat as $a) { foreach((array)$WhiteUrlPatterns as $pat) if (preg_match("!^$pat(/|$)!i",$a)) continue 2; $urlp = preg_quote($a,'!'); $WhiteUrlPatterns[] = $urlp; $new['text'].=" $a\n"; } $_POST['post'] = 'y'; PostPage($aname,$apage,$new); } Redirect($pagename); } function BlockUnapprovedPosts($pagename, &$page, &$new) { global $EnableUrlApprovalRequired, $UnapprovedLinkCount, $UnapprovedLinkCountMax, $EnablePost, $MessagesFmt, $BlockMessageFmt; if (!IsEnabled($EnableUrlApprovalRequired, 1)) return; if ($UnapprovedLinkCount <= $UnapprovedLinkCountMax) return; if ($page['=auth']['admin']) return; $EnablePost = 0; $MessagesFmt[] = $BlockMessageFmt; }