rendered paste body<?phpif (!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 wikiuser_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 wikipage, wikicategorylinks WHERE wikipage.page_id = wikicategorylinks.cl_from AND wikicategorylinks.cl_to = 'Sprachtexte' AND wikipage.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 wikiuser_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/LangpackCreator/langpack_german_". date("m_s"). ".txt"; $file = fopen($filename, "a"); $sql = "SELECT old_text FROM wikipage, wikitext, wikirevision WHERE wikipage.page_title = 'Kopfzeile' AND wikirevision.rev_id=wikipage.page_latest AND wikirevision.rev_text_id=wikitext.old_id AND wikipage.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 wikipage, wikitext, wikirevision WHERE wikipage.page_title IN ('".$Title."') AND wikirevision.rev_id=wikipage.page_latest AND wikirevision.rev_text_id=wikitext.old_id AND wikipage.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 wikipage, wikitext, wikirevision WHERE wikipage.page_title IN ('".$Title."') AND wikirevision.rev_id=wikipage.page_latest AND wikirevision.rev_text_id=wikitext.old_id AND wikipage.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 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" && $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 herunterladen"));} //end function wfExtensionCreateMirandaLanguagepack?>