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("#
(.*)
#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("#
(.*)
#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 = '
  • %s Zeile erwartet in Zeile %d: %s
  • '; $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("#
    (.*)
    #Us", $row->old_text, $arrTextBlocks); foreach($arrTextBlocks[1] as $value) { $print="kein Fehler gefunden!
    "; $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

    "; } } //End foreach zeile $counter = $counter + $errCount; $textx.= $print; } // End foreach block if ($counter > 0) { return "".$counter." Fehler gefunden
    ".$textx; } else { return "kein Fehler gefunden
    "; } } } function ShowLanguagepackSelection() { global $wgOut, $wgRequest, $wgUser; $fname = "MirandaLanguagepack::ShowLanguagepackSelect"; $titleObj = Title::makeTitle(NS_SPECIAL, 'MirandaLanguagepack'); $wgOut->addWikiText("{{Sprachdatei erstellen}}"); $text = '
    '; $text.= '

    '; $text.= ''; $text.= '
    '; $text.= '
    '; $text.= ' '; $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.="
    "; } $text.='

    Plugin-Auswahl für '.$wgUser->getName().'

    '; $text.= '
    '; $wgOut->addHTML($text); foreach(array_reverse($this->ArrayLanguageArticles, false) as $Title => $select) { if($Title != "Kopfzeile" && $Title != "Core") { $wgOut->addHTML('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("
    "); } } } //end foreach $wgOut->addHTML('

    © Lastwebpage, FREAK_THEMIGHTY, Armageddon'); }//end function ShowLanguagepackSelection } //end defination class MirandaLanguagepack SpecialPage::addPage(new MirandaLanguagepack); $wgMessageCache->addMessages( array("mirandalanguagepack" => "Sprachdatei erstellen und herunterladen")); } //end function wfExtensionCreateMirandaLanguagepack ?>