include', '/\(:(?:greprc|recentchanges)\s*(.*?):\)/ie', 'greprc($pagename, "$1")'); function greprc($pagename, $args) { global $GrepRCDefaults, $GrepRCPat, $SearchPatterns; SDV($GrepRCPat, '/^\s*\*\s+\[\[(?.*?)(?:\s*\|(?.*?))?\]\][\s.]*(?<date>.*?),?\s+at\s+(?<time>.*?)\s+'.FmtPagename('$[by]', $pagename).'\s+(?:\?|\[\[~(?<authname>.*?)\]\]):\s+\[=(?<chgsum>.*?)=\]\s*$/i'); SDVA($GrepRCDefaults, array( 'source'=>FmtPagename('$SiteGroup.AllRecentChanges', $pagename), 'scanlines' => 1000)); $opt = array_merge($GrepRCDefaults, ParseArgs($args), $_REQUEST); #echo "DEBUG: opt=".print_r($opt,true)."<br>\n"; if (!($rcpage = RetrieveAuthPage($opt['source'], 'read', READPAGE_CURRENT))) return("ERROR: Cannot read $opt[source]<br>\n"); #echo "DEBUG: rcpage=".print_r($rcpage,true)."<br>\n"; $lines = explode("\n", $rcpage['text']); $crlf = $rtn = ''; $scanned = $printed = $errors = 0; if (@$opt['group']) $opt['=pnfilter'][] = FixGlob($opt['group'], '$1$2.*'); if (@$opt['name']) $opt['=pnfilter'][] = FixGlob($opt['name'], '$1*.$2'); if (@$opt['list']) $opt['=pnfilter'] = array_merge((array)@$opt['=pnfilter'], (array)@$SearchPatterns[$opt['list']]); if (@$opt['authname']) $opt['=authorfilter'] = $opt['authname']; if (@$opt['before']) $opt['before'] = strtotime($opt['before']); if (@$opt['after']) $opt['after'] = strtotime($opt['after']); foreach ($lines as $l) { if (@$opt['scanlines'] && ++$scanned >= $opt['scanlines']) break; if (preg_match($GrepRCPat, $l, $m)) { # This is not how MatchPageNames is supposed to be used, but it # works (albeit SLOWLY) if (@$opt['=pnfilter'] && !MatchPageNames($m['pn'], $opt['=pnfilter'])) continue; if (@$opt['before'] || @$opt['after']) { $utime = strtotime($m['date'].' '.$m['time']); if (@$opt['before'] && $utime > $opt['before']) continue; if (@$opt['after'] && $utime < $opt['after']) continue; } if (@$opt['=authorfilter'] && !MatchPageNames($m['authname'], $opt['=authorfilter'])) continue; $printed++; $rtn .= $crlf . $l; #$rtn .= "(pn=$m[pn], date=$m[date], time=$m[time], authname=$m[authname], chgsum=$m[chgsum], title=$m[title]"; $crlf = "\n"; } else { $errors++; #$rtn .= $crlf . "* NOMATCH: " . $l; #$crlf = "\n"; } } $rtn = "Scanned $scanned lines, printed $printed lines, $errors non-standard lines.<br>\n" . $rtn; return($rtn); }