All pastes #160545 Raw Edit

LanguagepackCreator

public php v1 · immutable
·published 2006-09-04 13:31 UTC
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 &uuml;berpr&uuml;fen" style="width:300px" /><br />';			$text.= '<input type="submit" name="CheckIt" value="nur ausgew&auml;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&uuml;r <span style="font-weight:bold">'.$wgUser->getName().'</span></p>';			$text.= '<input type="submit" name="SelectAll" value="Alle ausw&auml;hlen" style="font-size:small;width:150px" /><input type="submit" name="SelectNone" value="Alle abw&auml;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">&copy; 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?>