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