<?php
// define these BEFORE including basic_bot.php if you want to override the settings in basic_bot.php:
// define('USERID','2');
// define('USERNAME','RCBot');
// define('PASSWORD','RCBotPassword');
require_once('basic_bot.php'); // the bot framework we use when making "new BasicBot()"
require_once('Snoopy.class.php'); // the bot framework is based on Snoopy
// get a list of languages supported by MediaWiki from the MediaWiki files
require_once('/home/gospeltr/public_html/w/languages/Names.php');
global $wgLanguageNames;
// get a timestamp
$timestamp = date("Ymd");
// this serialize()'d php array contains information about the translations
// and languages that we have on the wiki
$dbFile = '/home/gospeltr/public_html/w/extensions/dabble/cache/db.php';
// ------------------------------------------------------
// Start the action by reading the query string and
// determining what function to execute
// ------------------------------------------------------
// Print a form if no instructions are passed through a query value 'whattodo'
if(!isset($_GET['whattodo'])) {
print <<<EOT
<h2>What language should we process?</h2>
<form action="trans_bot.php" method="GET" name="bot">
<input type="hidden" name="lang" value="Spanish"> <!--//right now "es" is the only valid value, so this is hidden -->
<input type="hidden" name="lc" size="2" value="es"> <!--// the language code, same as above -->
<input type="text" name="page" value="page to scrape"> <!--//what page should this script pull data from? -->
<select name="whattodo">
<option selected value="">Select...</OPTION>
<option>run</option>
<option>print</option>
<option>titles</option>
<option>see db</option>
</select>
<input type="submit" value="submit">
</form>
EOT;
exit;
}
// get the library of translations loaded up
$ldb = unserialize(file_get_contents($dbFile));
$LANGS = $ldb['l'];
$TERMS = $ldb['g'];
$db = $ldb['t'];
$RL = $_GET['lang'];
$allTranslations;
// This is a debugging option to see if this script is building its array correctly
// Use it to find out what titles are getting paired with what translations
if($_GET['whattodo'] === 'print') {
// get the library of translations loaded up
$ldb = unserialize(file_get_contents($dbFile));
// for simplicity, assign unique arrays to different parts of $ldb
// $LANGS for all language info
$LANGS = $ldb['l'];
// $TERMS for some glossary words/translations used in the website interface
$TERMS = $ldb['g'];
// $db for translated resources, in the form $db['Language']['Resource title']['Attribute'] = > 'Value'
// e.g., $db['Spanish']['Gospel Implications']['Publisher'] => 'Ligonier Ministries'
$db = $ldb['t'];
// $RL, short for resource language, as determined by the form input
$RL = $_GET['lang'];
// a blank array that we'll use later to load up title=>translated_title key/value pairs
$allTranslations;
// go grab the list of articles and titles
// this instance of BasicBot uses the function ScrapePage (see basic_bot.php for details)
$fetcher = new BasicBot();
$fetcher->wikiFilter($_GET['page'],'ScrapePage',$summary='');
// show the results of $fetcher
print_r($allTranslations);
exit;
}
if($_GET['whattodo'] === 'see db')
print_r($db);
// go grab the list of articles and titles
$fetcher = new BasicBot();
$fetcher->wikiFilter($_GET['page'],'ScrapePage',$summary='');
$myl = array_keys($allTranslations);
$flip = array_flip($allTranslations);
$copyBot = new BasicBot();
$copyBot->ArrayFilterAll($myl,'PostCode',$summary='Automated: Added transclusion reference and categories to article source',$allTranslations);
function PostCode( $content, $params ){
global $wgLanguageNames;
global $db;
global $TERMS;
global $RL;
$resLang = $RL;
global $passv;
$res = $params[$passv];
/////////////////////
// break the language code off the title
$titleParts = explode('/', $res);
$lastPart = end($titleParts);
// test for any 2-3 letter sequence ending the title after a /
if(isset($wgLanguageNames[$lastPart])) {
$old_res = $res;
$res = str_ireplace('/'.$lastPart, '', $res);
}
else {
print "Error: $res is not a foreign resource";
exit;
}
// Decide whether this belongs to a book or a series
if ($db[$resLang][$res]['Media Type'] == 'Chapter' || $db[$resLang][$res]['Media Type'] == 'Book')
$stext = 'Book';
else
$stext = 'Series';
$flip = array_flip($params);
if ($db[$resLang][$res]['Media Type'] == 'Book'){
$book = $db[$resLang][$res]['Book/series'];
$toc = "===".$TERMS['Table of Contents'][$resLang] . "=== \n";
$chaps = count($db['TOC'][$book]);
for ($i=1; $i<=$chaps; $i++) {
$chapter = $db['TOC'][$book][$i];
//$chapter = str_ireplace($book.'/', '', $chapter);
$chapter = $chapter . '/' . $lastPart;
$tch = $flip[$chapter];
$tch = str_replace('_', ' ', $tch);
$short_tch = explode('/', $tch);
$toc = $toc . "[[$tch|{$short_tch[1]}]] \n\n";
}
// print $allTranslations;
// print "\n\n";
// print $toc;
// exit;
return <<<TOC
<div id="tran-mh">
<div style="float:right">
<table style="border: 1px solid rgb(148, 148, 148); margin: 0 0pt 10px 10px; padding: 3px 4px 5px 4px; background-color: rgb(233, 242, 254); color: rgb(51, 51, 51); font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 10px; line-height: 13px; width: 200px;" cellspacing="0" cellpadding="0">
<tr>
<td colspan="2" style="padding: 10px 0; text-align:center"><font style="font-size: 12px; font-weight: bold;">{$TERMS['About This'][$resLang]} {$TERMS[$db[$resLang][$res]['Media Type']][$resLang]}</font></td>
</tr>
<tr>
<td valign="top" width="85"><strong>{$TERMS['Publisher'][$resLang]}:</strong></td>
<td valign="top">[[:Category:{$db[$resLang][$res]['Publisher']}|{$db[$resLang][$res]['Publisher']}]]</td>
</tr>
<tr>
<td valign="top"><strong>{$TERMS['Author'][$resLang]}:</strong></td>
<td valign="top">[[:Category:{$db[$resLang][$res]['Author']}|{$db[$resLang][$res]['Author']}]] $satext</td>
</tr>
<tr>
<td valign="top"><strong>{$TERMS[$stext][$resLang]}:</strong></td>
<td valign="top">[[:Category:{$db[$resLang][$res]['Book/series']}|{$db[$resLang][$res]['Book/series']}]]</td>
</tr>
<tr>
<td valign="top"><strong>{$TERMS['Topic'][$resLang]}:</strong></td>
<td valign="top">[[:Category:{$TERMS[$db[$resLang][$res]['Topic']][$resLang]}|{$TERMS[$db[$resLang][$res]['Topic']][$resLang]}]]</td>
</tr>
<tr>
<td valign="top"><strong>{$TERMS['Subtopic'][$resLang]}:</strong></td>
<td valign="top">[[:Category:{$TERMS[$db[$resLang][$res]['Subtopic']][$resLang]}|{$TERMS[$db[$resLang][$res]['Subtopic']][$resLang]}]]</td>
</tr>
<tr>
<td valign="top" style="padding-bottom: 4px;"><strong>{$TERMS['Date'][$resLang]}:</strong></td>
<td valign="top" style="padding-bottom: 4px;">[[:Category:{$db[$resLang][$res]['Date']}|{$db[$resLang][$res]['Date']}]]</td>
</tr>
<tr>
<td valign="top" style="border-top: 1px solid #999; padding-top: 4px; margin-top: 4px;"><strong>{$TERMS['Status'][$resLang]}:</strong></td>
<td valign="top" style="border-top: 1px solid #999; padding-top: 4px; margin-top: 4px;">[[:Category:{$db[$resLang][$res]['Review Status']}|{$db[$resLang][$res]['Review Status']}]]</td>
</tr>
<tr>
<td valign="top"><strong>{$TERMS['Translator'][$resLang]}:</strong></td>
<td valign="top">[[:Category:{$db[$resLang][$res]['Translator']}|{$db[$resLang][$res]['Translator']}]]</td>
</tr>
<tr>
<td style="padding-bottom: 4px;"><strong>{$TERMS['Reviewer'][$resLang]}:</strong></td>
<td style="padding-bottom: 4px;">[[:Category:{$db[$resLang][$res]['Reviewer']}|{$db[$resLang][$res]['Reviewer']}]]</td>
</tr>
</table>
</div>
[[Category:{$db[$resLang][$res]['Review Status']}]]
[[Category:{$TERMS[$db[$resLang][$res]['Media Type']][$resLang]}]]
[[Category:{$TERMS[$db[$resLang][$res]['Topic']][$resLang]}]]
[[Category:{$TERMS[$db[$resLang][$res]['Subtopic']][$resLang]}]]
[[Category:{$db[$resLang][$res]['Author']}]]
[[Category:{$db[$resLang][$res]['Publisher']}]]
[[Category:{$db[$resLang][$res]['Book/series']}]]
[[Category:$timestamp]]<!--
###### Needs Review template
{{ #ifeq: {{#language:{{#titleparts:{{PAGENAME}}|{{{levels}}}|{{#expr: {{{levels}}} +1 }}}}}} | English | |{{ #ifeq: {{{reviewed}}} | Final Version | | {{ #ifeq: {{{reviewed}}} | Peer Reviewed | {{PeerReviewed}} | {{NeedsReview}}}}}}}}
--></div>
$toc
TOC;
}
else {
return <<<TRB
<div id="tran-mh">
<div style="float:right">
<table style="border: 1px solid rgb(148, 148, 148); margin: 0 0pt 10px 10px; padding: 3px 4px 5px 4px; background-color: rgb(233, 242, 254); color: rgb(51, 51, 51); font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 10px; line-height: 13px; width: 200px;" cellspacing="0" cellpadding="0">
<tr>
<td colspan="2" style="padding: 10px 0; text-align:center"><font style="font-size: 12px; font-weight: bold;">{$TERMS['About This'][$resLang]} {$TERMS[$db[$resLang][$res]['Media Type']][$resLang]}</font></td>
</tr>
<tr>
<td valign="top" width="85"><strong>{$TERMS['Publisher'][$resLang]}:</strong></td>
<td valign="top">[[:Category:{$db[$resLang][$res]['Publisher']}|{$db[$resLang][$res]['Publisher']}]]</td>
</tr>
<tr>
<td valign="top"><strong>{$TERMS['Author'][$resLang]}:</strong></td>
<td valign="top">[[:Category:{$db[$resLang][$res]['Author']}|{$db[$resLang][$res]['Author']}]] $satext</td>
</tr>
<tr>
<td valign="top"><strong>{$TERMS[$stext][$resLang]}:</strong></td>
<td valign="top">[[:Category:{$db[$resLang][$res]['Book/series']}|{$db[$resLang][$res]['Book/series']}]]</td>
</tr>
<tr>
<td valign="top"><strong>{$TERMS['Topic'][$resLang]}:</strong></td>
<td valign="top">[[:Category:{$TERMS[$db[$resLang][$res]['Topic']][$resLang]}|{$TERMS[$db[$resLang][$res]['Topic']][$resLang]}]]</td>
</tr>
<tr>
<td valign="top"><strong>{$TERMS['Subtopic'][$resLang]}:</strong></td>
<td valign="top">[[:Category:{$TERMS[$db[$resLang][$res]['Subtopic']][$resLang]}|{$TERMS[$db[$resLang][$res]['Subtopic']][$resLang]}]]</td>
</tr>
<tr>
<td valign="top" style="padding-bottom: 4px;"><strong>{$TERMS['Date'][$resLang]}:</strong></td>
<td valign="top" style="padding-bottom: 4px;">[[:Category:{$db[$resLang][$res]['Date']}|{$db[$resLang][$res]['Date']}]]</td>
</tr>
<tr>
<td valign="top" style="border-top: 1px solid #999; padding-top: 4px; margin-top: 4px;"><strong>{$TERMS['Status'][$resLang]}:</strong></td>
<td valign="top" style="border-top: 1px solid #999; padding-top: 4px; margin-top: 4px;">[[:Category:{$db[$resLang][$res]['Review Status']}|{$db[$resLang][$res]['Review Status']}]]</td>
</tr>
<tr>
<td valign="top"><strong>{$TERMS['Translator'][$resLang]}:</strong></td>
<td valign="top">[[:Category:{$db[$resLang][$res]['Translator']}|{$db[$resLang][$res]['Translator']}]]</td>
</tr>
<tr>
<td style="padding-bottom: 4px;"><strong>{$TERMS['Reviewer'][$resLang]}:</strong></td>
<td style="padding-bottom: 4px;">[[:Category:{$db[$resLang][$res]['Reviewer']}|{$db[$resLang][$res]['Reviewer']}]]</td>
</tr>
</table>
</div>
[[Category:{$db[$resLang][$res]['Review Status']}]]
[[Category:{$TERMS[$db[$resLang][$res]['Media Type']][$resLang]}]]
[[Category:{$TERMS[$db[$resLang][$res]['Topic']][$resLang]}]]
[[Category:{$TERMS[$db[$resLang][$res]['Subtopic']][$resLang]}]]
[[Category:{$db[$resLang][$res]['Author']}]]
[[Category:{$db[$resLang][$res]['Publisher']}]]
[[Category:{$db[$resLang][$res]['Book/series']}]]
[[Category:$timestamp]]<!--
###### Needs Review template
{{ #ifeq: {{#language:{{#titleparts:{{PAGENAME}}|{{{levels}}}|{{#expr: {{{levels}}} +1 }}}}}} | English | |{{ #ifeq: {{{reviewed}}} | Final Version | | {{ #ifeq: {{{reviewed}}} | Peer Reviewed | {{PeerReviewed}} | {{NeedsReview}}}}}}}}
--></div>
{{:gt_en:{$params[$passv]}}}
TRB;
}
}
function ScrapePage($content){
global $allTranslations;
global $wgLanguageNames;
global $db;
global $RL;
$data_lines = explode(']]]', $content);
array_pop($data_lines);
foreach ($data_lines as $tvalue){
// $data_line is english_title:::trans_title
$translation = explode(':::', $tvalue);
// load up $allTranslations[foreign] = english
// replace spaces with underscores in foreign title (for wiki compatibility)
$foreign = str_ireplace(" ","_", $translation[1]);
// make $titleParts by splitting up the english title by / marks
$titleParts = explode('/', $translation[0]);
$lastPart = end($titleParts);
$res = str_ireplace('/'.$lastPart, '', $translation[0]);
// set aside the resource temporarily if it is a book part
$short_res = $titleParts[0]."/".$titleParts[1];
if(isset($db[$RL][$short_res]['Media Type'])){
if ($db[$RL][$short_res]['Media Type'] == 'Chapter') {
$temp_array[$translation[0]] = $foreign;
}
}
// ........otherwise just load it up
else
$allTranslations[$foreign] = $translation[0];
}
if($_GET['whattodo'] === 'print')
print_r($temp_array);
// $flip will be $..[eng] => foreign
$flip = array_flip($allTranslations);
foreach ($temp_array as $eng=>$for){
$temp_res_array = explode('/', $eng);
$temp_book = $temp_res_array[0].'/'.$temp_res_array[2];
$for_book = $flip[$temp_book];
$for_full_title = $for_book.'/'.$for;
$allTranslations[$for_full_title] = $eng;
}
//print_r($temp_array);
return $content;
}
echo "Done --" . $passv;
?>