User:SQLBot/rfxbot.php

From Wikipedia, the free encyclopedia

<?php
require_once('./rfalib2.php');
require_once('./SxWiki.php');
require_once('./config.php');
#$output = "Wikipedia:Bureaucrats' noticeboard/RfB Report";
$output = "User:SQL/RfX Report";
echo "Processing $argv[1]\n";
function bailout($message) {
    echo "Fatal Error\n";
    echo "$message\n";
    exit;
}
$probedits = 10;
$problems = array();
$problems[RfA] = array();
$problems[RfB] = array();
$numprobs = 0;
function processrfb($cantidate) {
        global $problems;
        global $probedits;
        global $numprobs;
        $rfabasename = "Wikipedia:Requests for bureaucratship/";
        $myRFA = new RFA();
        $buffer = sxGetPage($rfabasename . $cantidate);
        $result = $myRFA->analyze($buffer);
        $d_support = $myRFA->support;
        $d_oppose = $myRFA->oppose;
        $d_neu = $myRFA->neutral;
        $problems[RfB][$cantidate] = array();
        foreach($d_support as $onesupp) {
                #echo "Checking supporter: $onesupp[name]\n";
                $supporter = $onesupp[name];
                $supporter = urlencode($supporter);
                $s_cont = file_get_contents("http://en.wikipedia.org/w/query.php?what=contribcounter&format=php&titles=User:$supporter");
                $s_ncont = unserialize($s_cont);
                $key = array_keys($s_ncont[pages]);
                $key2 = $key[0];
                $s_stat = $s_ncont[pages][$key2][contribcounter][count];
 
                if($s_stat < $probedits && $supporter != "") { 
                        $t_upage = sxGetPage("User:$supporter");
                        $redir = preg_match("/redirect(_| |)\[\[.*\]\]/i", $t_upage);
                        if (!$redir) {
                                echo "PROBLEM!\n";
                                array_push($problems[RfB][$cantidate], $supporter); 
                        }
                }
        }
        foreach($d_oppose as $oneopp) {
                #echo "Checking opposer: $oneopp[name]\n";
                $opposer = $oneopp[name];
                $opposer = urlencode($opposer);
                $o_cont = file_get_contents("http://en.wikipedia.org/w/query.php?what=contribcounter&format=php&titles=User:$opposer");
                $o_ncont = unserialize($o_cont);
                $key = array_keys($o_ncont[pages]);
                $key2 = $key[0];
                $o_stat = $o_ncont[pages][$key2][contribcounter][count];
                if($o_stat < $probedits && $opposer != "") { 
                        $t_upage = sxGetPage("User:$opposer");
                        $redir = preg_match("/redirect(_| |)\[\[.*\]\]/i", $t_upage);
                        if (!$redir) {
                                echo "PROBLEM!\n";
                                array_push($problems[RfB][$cantidate], $opposer); 
                        }
                }
        }
        foreach($d_neu as $oneneu) {
                #echo "Checking opposer: $oneopp[name]\n";
                $neu = $oneneu[name];
                $neu = urlencode($neu);
                $n_cont = file_get_contents("http://en.wikipedia.org/w/query.php?what=contribcounter&format=php&titles=User:$neu");
                $n_ncont = unserialize($n_cont);
                $key = array_keys($n_ncont[pages]);
                $key2 = $key[0];
                $n_stat = $n_ncont[pages][$key2][contribcounter][count];
                if($n_stat < $probedits && $neu != "") { 
                        $t_upage = sxGetPage("User:$neu");
                        $redir = preg_match("/redirect(_| |)\[\[.*\]\]/i", $t_upage);
                        if (!$redir) {
                                echo "PROBLEM!\n";
                                array_push($problems[RfB][$cantidate], $neu); 
                        }
                }
        }
        if ($result !== TRUE) {
                bailout($myRFA->lasterror);
        }
        $enddate = $myRFA->enddate;
        $tally = count($myRFA->support).'/'.count($myRFA->oppose).'/'.count($myRFA->neutral);
        $opposes = count($myRFA->oppose);
        $supports = count($myRFA->support);
        $neutrals = count($myRFA->neutral);
        $n_dup = 0;
                foreach($myRFA->duplicates as $dup) {
                $n_dup++;
        }
        $dups = "no";
        if ($n_dup > 0) {
                $dups = "'''yes'''";
        }
        $enddate2 = strtotime($enddate);
        $now = strtotime(date("F j, Y, g:i a"));
        $now = $now + 18000;
        $newbs = 0;
        foreach ($problems[RfB][$cantidate] as $newb) {
                $newbs++;
        }
        $numprobs = $numprobs + $newbs;
        if ($newbs > 0) { $s2 = "|problems=yes"; }
        if ($now > $enddate2) { echo "EXPIRED!\n"; $s1 = '|expired=yes';} else { echo "NOT EXPIRED!\n"; }
        return "{{Bureaucrat candidate|candidate= $cantidate|support= $supports|oppose= $opposes|neutral= $neutrals|end date= $enddate|dups= $dups$s1$s2}}";
}
function processrfa($cantidate) {
        global $problems;
        global $probedits;
        global $numprobs;
        echo "$cantidate\n";
        $rfabasename = "Wikipedia:Requests for adminship/";
        $myRFA = new RFA();
        $buffer = sxGetPage($rfabasename . $cantidate);
        $result = $myRFA->analyze($buffer);
        $d_support = $myRFA->support;
        $d_oppose = $myRFA->oppose;
        $d_neu = $myRFA->neutral;
        $problems[RfA][$cantidate] = array();
        foreach($d_support as $onesupp) {
                #echo "Checking supporter: $onesupp[name]\n";
                $supporter = $onesupp[name];
                $supporter = urlencode($supporter);
                $s_cont = file_get_contents("http://en.wikipedia.org/w/query.php?what=contribcounter&format=php&titles=User:$supporter");
                $s_ncont = unserialize($s_cont);
                $key = array_keys($s_ncont[pages]);
                $key2 = $key[0];
                $s_stat = $s_ncont[pages][$key2][contribcounter][count];
 
                if($s_stat < $probedits && $supporter != "") { 
                        $t_upage = sxGetPage("User:$supporter");
                        $redir = preg_match("/redirect(_| |)\[\[.*\]\]/i", $t_upage);
                        if (!$redir) {
                                echo "PROBLEM!\n";
                                array_push($problems[RfA][$cantidate], $supporter); 
                        }
                }
        }
        foreach($d_oppose as $oneopp) {
                #echo "Checking opposer: $oneopp[name]\n";
                $opposer = $oneopp[name];
                $opposer = urlencode($opposer);
                $o_cont = file_get_contents("http://en.wikipedia.org/w/query.php?what=contribcounter&format=php&titles=User:$opposer");
                $o_ncont = unserialize($o_cont);
                $key = array_keys($o_ncont[pages]);
                $key2 = $key[0];
                $o_stat = $o_ncont[pages][$key2][contribcounter][count];
                if($o_stat < $probedits && $opposer != "") { 
                        $t_upage = sxGetPage("User:$opposer");
                        $redir = preg_match("/redirect(_| |)\[\[.*\]\]/i", $t_upage);
                        if (!$redir) {
                                echo "PROBLEM!\n";
                                array_push($problems[RfA][$cantidate], $opposer); 
                        }
                }
        }
        foreach($d_neu as $oneneu) {
                #echo "Checking opposer: $oneopp[name]\n";
                $neu = $oneneu[name];
                $neu = urlencode($neu);
                $n_cont = file_get_contents("http://en.wikipedia.org/w/query.php?what=contribcounter&format=php&titles=User:$neu");
                $n_ncont = unserialize($n_cont);
                $key = array_keys($n_ncont[pages]);
                $key2 = $key[0];
                $n_stat = $n_ncont[pages][$key2][contribcounter][count];
                if($n_stat < $probedits && $neu != "") { 
                        $t_upage = sxGetPage("User:$neu");
                        $redir = preg_match("/redirect(_| |)\[\[.*\]\]/i", $t_upage);
                        if (!$redir) {
                                echo "PROBLEM!\n";
                                array_push($problems[RfA][$cantidate], $neu); 
                        }
                }
        }
        if ($result !== TRUE) {
                bailout($myRFA->lasterror);
        }
        $enddate = $myRFA->enddate;
        $tally = count($myRFA->support).'/'.count($myRFA->oppose).'/'.count($myRFA->neutral);
        $opposes = count($myRFA->oppose);
        $supports = count($myRFA->support);
        $neutrals = count($myRFA->neutral);
        $n_dup = 0;
                foreach($myRFA->duplicates as $dup) {
                $n_dup++;
        }
        $dups = "no";
        if ($n_dup > 0) {
                $dups = "'''yes'''";
        }
        $enddate2 = strtotime($enddate);
        $now = strtotime(date("F j, Y, g:i a"));
        $now = $now + 18000;
        foreach ($problems[RfA][$cantidate] as $newb) {
                $newbs++;
        }
        $numprobs = $numprobs + $newbs;
        if ($newbs > 0) { $s2 = "|problems=yes"; }
        if ($now > $enddate2) { echo "EXPIRED!\n"; $s1 = '|expired=yes';} else { echo "NOT EXPIRED!\n"; }
        return "{{Bureaucrat candidate|candidate=$cantidate|support=$supports|oppose=$opposes|neutral=$neutrals|end date=$enddate|dups=$dups|rfa=yes$s1$s2}}";
}
$findrfa = "/\{\{Wikipedia:Requests for adminship\/(.*)\}\}/";
$findrfb = "/\{\{Wikipedia:Requests for bureaucratship\/(.*)\}\}/";
$rfabuffer = sxGetPage("Wikipedia:Requests for adminship");
#$rfabuffer = sxGetPage("User:SQL/RFATest");
preg_match_all($findrfa, $rfabuffer, $matches);
$numrfa = 0;
echo "Processing RfA's!\n";
$out = "<noinclude>{{shortcut|WP:RFXR||WP:BNRX|WP:BN/RfX Report}}</noinclude>\n{| align=\"right\" cellspacing=\"0\" cellpadding=\"0\" style=\"white-space:nowrap; clear: left; margin-top: 0em; margin-bottom: .5em; float: right;padding: .5em 0em 0em 1.4em; background: none;\"\n|\n{| class=\"wikitable\"\n! RfA candidate !! S !! O !! N !! S% !! Ending !! Dups? !! Report" . $out;
foreach ($matches[1] as $rfa) {
        if ($rfa == "Front matter" || $rfa == "bureaucratship") {
                echo "Skipping non-rfa stuff\n";
        } else {
                $result = processrfa($rfa);
                $out = $out . "\n|-\n" . $result;
                $numrfa++;
        }
}
$out = $out . "\n|-\n! RfB candidate !! S !! O !! N !! S% !! Ending !! Dups? !! Report";
echo "Processing RFB's!\n";
preg_match_all($findrfb, $rfabuffer, $matches);
$numrfb = 0;
foreach ($matches[1] as $rfb) {
        $result = processrfb($rfb);
        $out = $out . "\n|-\n" . $result;
        $numrfb++;
}
$out = $out . "\n|}<div align=\"right\">\n''Last updated by '''~~~''' on '''~~~~~'''''\n</div>\n|}\n";
echo $out;
$runme = sxGetPage("User:SQLBot/rfbbot.run");
$runme = ltrim($runme);
$runme = rtrim($runme);
if ($runme == "go") {
        if ($numprobs > 0) {
                sxPutPage($output, "Updating RFB Report, $numrfa RFA's, $numrfb RFB's, $numprobs problems", $out);
                $propage = "==Possible RfX Problems==\nThe following discussions contain Supports, opposes, or neutrals, from users with fewer than $probedits edits.\n===Requests for Adminship===\n";
                foreach ($problems[RfA] as $cname => $ulist) {
                        $propage = $propage . "====$cname====\n";
                        foreach ($problems[RfA][$cname] as $pnewb) {
                                $propage = $propage . "* $pnewb\n";
                        }
                }
                $bpro = 0;
                $bpropage = "===Requests for Bureaucratship===\n";
                foreach ($problems[RfB] as $cname => $ulist) {
                        $bpropage = $bpropage . "====$cname====\n";
                        foreach ($problems[RfB][$cname] as $pnewb) {
                                $bpropage = $bpropage . "* $pnewb\n";
                                $bpro++;
                        }
                }
                if ($bpro > 0) {
                        $propage = $propage . $bpropage;
                }
                sxPutPage("User:SQL/RfX Report/Potential problems", "Updating RfX Problem Report", $propage);
        } else {
                sxPutPage($output, "Updating RFB Report, $numrfa RFA's, $numrfb RFB's, no problems", $out);
                sxPutPage("User:SQL/RfX Report/Potential problems", "Blanking RfX Problem Report, no problems found", "");
        }
} else {
        echo "Could not run, disabled!\n";
}
if ($numprobs > 0) {
        print_r($problems);
}
?>