rendered paste body<?php
if (!defined('MEDIAWIKI'))
die("Skriptausfuehrung beendet, Mediawiki nicht definiert!");
$wgExtensionFunctions[] = "wfExtensionCreateMirandaLanguagepack";
//====================================================
//Sämtliche Hinweise /Funktionen zur Versionsinfo wurden entfernt!!!
//specialpage to select the language files
//used NEW Table in DB:
//Name: user_miranda_lang
//Field 1: user_id, Typ: INT,Länge: 5, Attribute: Usigned, Null:not Null, standard 0; Primärschlüssel, Typ Primär
//Field 2: user_not_selected_langfiles, Typ:MEDIUMBLOB,Null:Null,Standard:Null
//CREATE TABLE `user_miranda_lang` ( `user_id` int(5) unsigned NOT NULL default '0', `user_not_selected_langfiles` mediumblob, PRIMARY KEY (`user_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='stored the not selected languagefiles per User';
//
function wfExtensionCreateMirandaLanguagepack()
{
global $IP, $wgMessageCache;
require_once( "$IP/includes/SpecialPage.php" );
class MirandaLanguagepack extends SpecialPage
{
var $mAction, $mPosted;
var $ArrayLanguageArticles = Array();
function MirandaLanguagepack()
{
SpecialPage::SpecialPage( "MirandaLanguagepack" );
}
function execute( $par )
{
global $wgRequest, $wgUser;
$fname = "MirandaLanguagepack::execute";
$this->setHeaders();
$this->mPosted = $wgRequest->wasPosted();
$this->mAction = $wgRequest->getText( "action" );
$UserID = $wgUser->idForName();
$dbr = &wfGetDB( DB_SLAVE );
//read, if available, the not selected titles from the user, and deselect it
if (isset($_POST['Auswahl']))
{
$SelectedTitleArray = $_POST['Auswahl'];
unset($SelectedTitleArray[0]);
}
else if($UserID > 0)
{
$sql = "SELECT user_not_selected_langfiles FROM user_miranda_lang WHERE user_id = $UserID";
$res = $dbr->query($sql, $fname);
$row = $dbr->fetchRow($res);
if($row) {
$arrNotSelected = unserialize($row[0]); }
$dbr->freeResult($res);
}
// get language packs
$sql = "SELECT page_title FROM page, categorylinks WHERE page.page_id = categorylinks.cl_from AND categorylinks.cl_to = 'Sprachtexte' AND page.page_namespace = 100 ORDER BY page_title DESC";
$res = $dbr->query($sql, $fname);
while($row = $dbr->fetchObject($res))
{
$page_title = $row->page_title;
// check Select available
if (isset($_POST['SelectAll']))
$this->ArrayLanguageArticles[$page_title] = true;
else if (isset($_POST['SelectNone']))
$this->ArrayLanguageArticles[$page_title] = false;
else if (is_array($SelectedTitleArray))
{ // set actually selected
if(in_array($page_title, $SelectedTitleArray))
$this->ArrayLanguageArticles[$page_title] = true;
else
$this->ArrayLanguageArticles[$page_title] = false;
}
else if (count($arrNotSelected) > 0 && is_array($arrNotSelected))
{ // set db selected
if(in_array($page_title, $arrNotSelected))
$this->ArrayLanguageArticles[$page_title] = false;
else
$this->ArrayLanguageArticles[$page_title] = true;
}
else
$this->ArrayLanguageArticles[$page_title] = true;
}
$dbr->freeResult($res);
if (is_array($SelectedTitleArray))
$this->save_choise($SelectedTitleArray);
if (isset($_POST['CreateFile']))
$this->DownloadLanguagepack($SelectedTitleArray);
$this->ShowLanguagepackSelection();
}
function save_choise($SelectedTitleArray)
{
global $wgUser;
$dbrw = &wfGetDB( DB_MASTER );
$UserID = $wgUser->idForName();
if($UserID > 0)
{
$arrNotSelected = array();
foreach($this->ArrayLanguageArticles as $title => $selected)
{
if(!$selected) {
$arrNotSelected[] = $title; }
}
$serNotSelected = "'". mysql_escape_string(serialize($arrNotSelected)). "'";
$sql = "REPLACE INTO user_miranda_lang (user_id, user_not_selected_langfiles) VALUES ($UserID, $serNotSelected)";
$res = $dbrw->query($sql,$fname);
}
}
//Create a textfile from all selected languagearticles
function DownloadLanguagepack($SelectedTitleArray)
{
global $wgOut, $wgRequest, $wgUser, $wgLang;
$dbrw = &wfGetDB( DB_MASTER );
$fname = "MirandaLanguagepack::DownloadLanguagepack";
//Without that the mediwiki software add the web site itself to the the output file
$wgOut->disable();
//save the NOT selected titles in the db per user, save the selected titles could make some problems for new translated files.
$dbr = &wfGetDB( DB_SLAVE );
$filename = "extensions/langpack_german_". date("m_s"). ".txt";
$file = fopen($filename, "a");
$sql = "SELECT old_text FROM page, text, revision WHERE page.page_title = 'Kopfzeile_Languagepack' AND revision.rev_id=page.page_latest AND revision.rev_text_id=text.old_id AND page.page_namespace=100";
$res = $dbrw->query($sql, $fname);
while ($row = $dbrw->fetchObject($res))
{
//only use text within pre-Tags; wiki is utf-8 langugepack use ANSI, windows-1252 not work correctly
preg_match_all("#<pre>(.*)</pre>#Us",iconv("UTF-8","cp1252",str_replace("\n","\r\n",$row->old_text)),$arrTextBlocks);
foreach($arrTextBlocks[1] as $TextBlock) {
fwrite($file, $TextBlock); }
}
$dbrw->freeResult($res);
fwrite($file, "X-Langpack-creation-date: ". date("d M Y H:m:s"). "\r\n");
fwrite($file, "; FLID: Deutsche Sprachdatei-GermanLanguagePack ". date("0.y.m.d"). "\r\n"); //Updater support
fwrite($file, "Plugins included: ". implode(",", $SelectedTitleArray). "\r\n\r\n"); //list included Plugins
foreach ($SelectedTitleArray as $Title)
{
$sql = "SELECT old_text, rev_timestamp FROM page, text, revision WHERE page.page_title IN ('".$Title."') AND revision.rev_id=page.page_latest AND revision.rev_text_id=text.old_id AND page.page_namespace=100";
$res = $dbrw->query($sql, $fname);
while ($row = $dbrw->fetchObject($res))
{
preg_match_all("#<pre>(.*)</pre>#Us", iconv("UTF-8","cp1252", str_replace("\n", "\r\n", $row->old_text)), $arrTextBlocks); //only use text within pre-Tags; wiki is utf-8 langugepack use ANSI, windows-1252 not work correctly
fwrite($file, "; Start of langpack ". $Title. " (Letzte Änderung: ".$wgLang->timeanddate($row->rev_timestamp, true, MW_DATE_DMY)." )\r\n");
foreach($arrTextBlocks[1] as $TextBlock)
{
fwrite($file, $TextBlock);
}
fwrite($file, " \r\n; ##############################################\r\n; end of langpack: ".$Title."\r\n; ############################################## \r\n");
}
$dbrw->freeResult($res);
}
fwrite($file, "\r\n; End of langpack_german");
fclose($file);
header('Content-Description: File Transfer');
header("Content-type: text; charset=CP1252" );
header("Content-length: ".filesize($filename));
header("Content-Disposition: attachment; filename=\"langpack_german.txt\"");
readfile($filename);
unlink($filename);
}
//Display the Buttons, the list with languagearticles and selection, selection is loaded from a special user DB Table
function check_lngpack ($Title)
{
$errMessageTPL = '<li><span style="font-weight:bold">%s</span> Zeile erwartet in Zeile %d: %s</li>';
$fname = "MirandaLanguagepack::DownloadLanguagepack";
$dbrw = & wfGetDB( DB_MASTER );
$sql = "SELECT old_text FROM page, text, revision WHERE page.page_title IN ('".$Title."') AND revision.rev_id=page.page_latest AND revision.rev_text_id=text.old_id AND page.page_namespace=100";
$res = $dbrw->query($sql, $fname);
$flg_en = true;
$counter = 0;
while ($row = $dbrw->fetchObject($res))
{
$textx = '';
preg_match_all("#<pre>(.*)</pre>#Us", $row->old_text, $arrTextBlocks);
foreach($arrTextBlocks[1] as $value)
{
$print="kein Fehler gefunden!<hr />";
$flg_en = true;
$errCount = 0;
$errText = '';
foreach(preg_split("*\n*", $value, -1) as $number => $zeile)
{
$line = trim($zeile);
$number++;
if ($line != '' && $line{0} != ';')
{
if ($flg_en)
{//check: ist englische zeile?
if (!preg_match('~^\[.{2,}\]$~', $line))
{
$errText.= sprintf($errMessageTPL, 'englische', $number, $line);
$errCount++;
}
else
{
$flg_en = false;
}
} //check: ist deutsche Zeile?
else
{
if (preg_match('~^\[.{2,}\]$~', $line))
{
$errText.= sprintf($errMessageTPL, 'deutsche', $number, $line);
$errCount++;
}
else
{
$flg_en = true;
}
}
}
else if (!$flg_en)
{
$errText.= sprintf($errMessageTPL, 'deutsche', $number, $line);
$errCount++;
$flg_en = true;
}
if ($errText !='')
{
$print = $errCount. " Fehler gefunden<br /><ul>". $errText. "</ul><hr />";
}
} //End foreach zeile
$counter = $counter + $errCount;
$textx.= $print;
} // End foreach block
if ($counter > 0)
{
return "<span style=\"color:#FF0000;font-weight:bold\">".$counter." Fehler gefunden</span><hr />".$textx;
}
else
{
return "<span style=\"color:#00D900;font-weight:bold\">kein Fehler gefunden</span><br />"; }
}
}
function ShowLanguagepackSelection()
{
global $wgOut, $wgRequest, $wgUser;
$fname = "MirandaLanguagepack::ShowLanguagepackSelect";
$titleObj = Title::makeTitle(NS_SPECIAL, 'MirandaLanguagepack');
$wgOut->addWikiText("[[Sprachdatei:Quellcode MirandaLanguagepack.php]]");
$wgOut->addWikiText("{{Sprachdatei erstellen}}");
$text = '<hr /><form name="SelectedTitles" method="post" action="index.php?title=Spezial:MirandaLanguagepack" enctype="multipart/form-data">';
$text.= '<input type="submit" name="CreateFile" value="Sprachdatei erstellen und herunterladen" style="width:300px;" /><br /><hr />';
$text.= '<input type="hidden" name="Auswahl[0]" value="submit" />';
$text.= '<input type="submit" name="CheckItAll" value="auf Fehler überprüfen" style="width:300px" /><br />';
$text.= '<input type="submit" name="CheckIt" value="nur ausgewählte Plugins" style="width:300px" /><br />';
$text.= '<input type="radio" name="Auswahl[]" value="Core" checked="checked" /> ';
$text.= $wgOut->parse("[[Sprachdatei:Core|Miranda IM 0.5 (Kern)]]", false)."\r\n";
if (isset($_POST['CheckItAll']) || (isset($_POST['CheckIt'])))
{
$text.=$this->check_lngpack("Core");
}
else
{
$text.="<br />";
}
$text.='<p style="font-size:large">Plugin-Auswahl für <span style="font-weight:bold">'.$wgUser->getName().'</span></p>';
$text.= '<input type="submit" name="SelectAll" value="Alle auswählen" style="font-size:small;width:150px" /><input type="submit" name="SelectNone" value="Alle abwählen" style="width:150px" /><br />';
$wgOut->addHTML($text);
foreach(array_reverse($this->ArrayLanguageArticles, false) as $Title => $select)
{
if($Title != "Kopfzeile_Languagepack" && $Title != "Core")
{
$wgOut->addHTML('<input type="checkbox" name="Auswahl[]" value="'. $Title. '" ');
$wgOut->addHTML($select ? ' checked="checked" />' : ' />');
$wgOut->addHTML($wgOut->parse("[[Sprachdatei:$Title|$Title]]", false)."\r\n");
// languagepack check
if(isset($_POST['CheckItAll']) || (isset($_POST['CheckIt']) && $select === true))
{
$wgOut->addHTML($this->check_lngpack($Title));
}
else
{
$wgOut->addHTML("<br />");
}
}
} //end foreach
$wgOut->addHTML('</form><hr style="color:#696969;height:1px" /><span style="color:#696969">© Lastwebpage, FREAK_THEMIGHTY, Armageddon</span>');
}//end function ShowLanguagepackSelection
} //end defination class MirandaLanguagepack
SpecialPage::addPage(new MirandaLanguagepack);
$wgMessageCache->addMessages( array("mirandalanguagepack" => "Sprachdatei erstellen und downloaden"));
} //end function wfExtensionCreateMirandaLanguagepack
?>