Die Änderung ist eigentlich sehr einfach. Dieses als "rumplagen" zu bezeichen ist wohl etwas übertrieben. Das sind grundlegend nur 4 Änderungen.
Es gibt aber schon eine inoffiziell geänderte Version mit ein paar Erweiterungen, welche ich noch von Mairu abgesegnet haben möchte.
Hier die Datei mit den 4 Änderungen:
<?php
# Copyright by Thomas Bowe [Funjoy]
# Support bbcode@phpline.de
# link www.phpline.de
/* Module - Information
* -------------------------------------------------------
* Hier könnt ihr eure Module includieren lassen.
* Wenn Ihr selber Module zum Highlight programmiert
* denkt daran das ihr auch noch das Parsen hier definieren müsst.
* und in der bbcode_config.php Datei müsstet ihr die Option auch noch einstellen.
* um ein Beispiel zu haben schaut euch die Funktion _htmlblock() am besten mal an.
* und in Zeile 308 und Zeile 490 habt ihr ein Beispiel wie ihr die Parsebefehle schreiben könnt.
*/
//> Bitte denkt daran das, dass Modul html.php immer unter dem Modul css.php sein muss.
//> Modul [css.php]
if(file_exists("include/includes/class/highlight/css.php")) {
require_once("include/includes/class/highlight/css.php");
}
//> Modul [html.php]
if(file_exists("include/includes/class/highlight/html.php")) {
require_once("include/includes/class/highlight/html.php");
}
class bbcode {
//> Tags die geparsed werden dürfen.
var $permitted = array();
//> Verschlüsselte codeblocks.
var $codecblocks = array();
//> Badwords!
var $badwords = array();
//> Informationen für die Klasse!
var $info = array();
//> Patter befehle!
var $pattern = array();
//> Replace strings!
var $replace = array();
//> Smilies die in Grafik umgewandelt werden sollen.
var $smileys = array();
//> Cache für Quotes Header!
var $ayCacheQuoteOpen = array();
//> Cache fürQuotes Footer!
var $ayCacheQuoteClose = array();
//> Cache für Quotes Header!
var $ayCacheKtextOpen = array();
//> Cache fürQuotes Footer!
var $ayCacheKtextClose = array();
//> Codeblock verschlüsseln und wieder ausgeben.
function encode_codec($string,$tag,$file=NULL) {
$string = str_replace('\"', '"', $string);
$file = ($file == NULL) ? "":"=".$file;
$crypt = md5(count($this->codecblocks));
$this->codecblocks[$crypt.":".$tag] = $string;
return "[".$tag.$file."]".$crypt."[/".$tag."]";
}
//> Codeblock entschlüsseln und parsen!
function _codeblock($codecid,$file=NULL,$firstline=1) {
$string = $this->codecblocks[$codecid.':code'];
$string = htmlentities($string, ILCH_ENTITIES_FLAGS, ILCH_CHARSET);
$string = str_replace("\t", ' ', $string);
$string = str_replace(' ', ' ', $string);
$string = str_replace(' ', ' ', $string);
$string = nl2br($string);
return $this->_addcodecontainer($string, 'Code', $file, $firstline);
}
//> htmlblock entschlüsseln und parsen!
function _htmlblock($codecid,$file=NULL,$firstline=1) {
$string = $this->codecblocks[$codecid.':html'];
$string = htmlentities($string, ILCH_ENTITIES_FLAGS, ILCH_CHARSET);
//> Highlight Modul Funktion checken ob sie existerit.
if(function_exists("highlight_html")) {
$string = highlight_html($string,$this->info['BlockCodeFarbe']);
}
$string = str_replace("\t", ' ', $string);
$string = str_replace(' ', ' ', $string);
$string = str_replace(' ', ' ', $string);
$string = nl2br($string);
return $this->_addcodecontainer($string, 'HTML', $file, $firstline);
}
//> cssblock entschlüsseln und parsen!
function _cssblock($codecid,$file=NULL,$firstline=1) {
$string = $this->codecblocks[$codecid.':css'];
$string = htmlentities($string, ILCH_ENTITIES_FLAGS, ILCH_CHARSET);
//> Highlight Modul Funktion checken ob sie existerit.
if(function_exists("highlight_css")) {
$string = highlight_css($string);
}
$string = str_replace("\t", ' ', $string);
$string = str_replace(' ', ' ', $string);
$string = str_replace(' ', ' ', $string);
$string = nl2br($string);
return $this->_addcodecontainer($string, 'CSS', $file, $firstline);
}
//> phpblock entschlüsseln und parsen!
function _phpblock($codecid, $file = null, $firstline = 1) {
$string = $this->codecblocks[$codecid . ':php'];
if (strpos($string, '<?php') === false) {
$string = "<?php\n{$string}\n?>";
$remove = true;
} else {
$remove = false;
}
ob_start();
highlight_string($string);
$php = ob_get_contents();
ob_end_clean();
if ($remove) {
$php = str_replace(array('<?php<br />', '<br /></span><span style="color: #0000BB">?></span>'), '', $php);
}
return $this->_addcodecontainer($php, 'Php', $file, $firstline);
}
function _addcodecontainer($code, $type, $file=null, $firstline=1) {
//> Datei pfad mit angegeben?
$file = ($file == NULL) ? "":" von Datei <em>".$this->_shortwords($file)."</em>";
//> Zeilen zählen.
$linescount = substr_count($code, "\n") + $firstline + 1;
if ($type == 'Php') {
$linescount = substr_count($code, "\r") + $firstline + 1;
}
$line = '';
for($no=$firstline;$no < $linescount;$no++) {
$line .= $no.":<br />";
}
//> Hier könnt ihr den Header und Footer für HTML editieren.
$breite = trim($this->info['BlockTabelleBreite']);
$breite = (strpos($breite, '%') !== false) ? '450px' : $breite.'px';
$header = "<div style=\"overflow: auto; width: {$breite};\">"
."<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" style=\"BORDER: 1px SOLID ".$this->info['BlockRandFarbe'].";\" width=\"100%\">"
."<tr><td colspan=\"3\" style=\"font-family:Arial, Helvetica, sans-serif;font-size:12px; font-weight:bold; color:".$this->info['BlockSchriftfarbe'].";background-color:".$this->info['BlockHintergrundfarbe'].";\"> ".$type.$file."</td></tr>"
."<tr bgcolor=\"".$this->info['BlockHintergrundfarbeIT']."\"><td style=\"width:20px; color:".$this->info['BlockSchriftfarbe'].";padding-left:2px;padding-right:2px;border-right:1px solid ".$this->info['BlockHintergrundfarbe'].";font-family:Arial, Helvetica, sans-serif;\" align=\"right\" valign=\"top\"><code style=\"width:20px;\">"
.$line
."</code></td><td width=\"5\"> </td><td valign=\"top\" style=\"background-color:".$this->info['BlockHintergrundfarbe']."; color:".$this->info['BlockSchriftfarbe'].";\" nowrap width=\"95%\"><code>";
$footer = "</code></td></tr></table></div>";
return $header.$code.$footer;
}
//> Smilies aus dem Array auslesen.
function _smileys($string) {
if(!is_null($this->smileys) && is_array($this->smileys)) {
if($this->permitted['smileys'] == true) {
$smileystart = '#@'.uniqid('').'@#';
$smileymid = '|#@|'.uniqid('').'|@#|';
$smileyend = '#@'.uniqid('').'@#';
foreach ($this->smileys as $icon => $info) {
list($emo, $url) = explode('#@#-_-_-#@#', $info);
$string = str_replace($icon, $smileystart.$icon.$smileyend, $string);
}
$string = str_replace($smileyend.$smileystart, $smileymid, $string);
$string = preg_replace('%(\S)' . $smileystart . '(.*)' . $smileyend . '%iU', '$1$2', $string);
$string = preg_replace('%(^|\s)(' . $smileystart . ')(.*)(' . $smileyend . ')%iUe', '\'$1\'.\'$2\'.str_replace(\''.$smileymid.'\',\''.$smileyend.$smileystart.'\',\'$3\').\'$4\'', $string);
$string = str_replace($smileymid, '', $string);
foreach ($this->smileys as $icon => $info) {
list($emo, $url) = explode('#@#-_-_-#@#', $info);
$string = str_replace($smileystart.$icon.$smileyend, '<img src="include/images/smiles/'.$url.'" border="0" alt="'.$icon.'" title="'.$emo.'" />', $string);
}
$string = str_replace(array($smileyend, $smileystart), '', $string);
}
return $string;
} else {
return $string;
}
}
// //> Smilies aus dem Array auslesen.
// function _smileys($string) {
// if(!is_null($this->smileys) && is_array($this->smileys)) {
// if($this->permitted['smileys'] == true) {
// foreach ($this->smileys as $icon => $info) {
// list($emo, $url) = explode('#@#-_-_-#@#', $info);
// $string = str_replace($icon,'<img src="include/images/smiles/'.$url.'" border="0" alt="'.$emo.'" title="'.$emo.'" />',$string);
// }
// }
// return $string;
// } else {
// return $string;
// }
// }
//> Badwords Filtern.
function _badwords($string) {
//> Badwords aus der Datenbank laden!
$cfgBBCodeSql = db_query("SELECT fcBadPatter, fcBadReplace FROM prefix_bbcode_badword");
while ($row = db_fetch_object($cfgBBCodeSql) ) {
$pattern[] = '%' . preg_quote($row->fcBadPatter,'%') . '%iU';
$replace[] = $row->fcBadReplace;
}
if(isset($pattern)) {
$string = preg_replace($pattern,$replace,$string);
}
return $string;
}
//> Liste formatieren.
function _list($codecid) {
$string = $this->codecblocks[$codecid.':list'];
$array = explode("[*]",$string);
for($no=1;$no<=(count($array)-1);$no++) {
$li .= "<li>".$this->parse($array[$no])."</li>";
}
return "<ul>".$li."</ul>";
}
//> Auf Maximale Schriftgröße überprüfen.
function _size($size, $string) {
$max = $this->info['SizeMax'];
return '<span style="font-size:' . ($size > $max ? $max : $size) . 'px">' . stripcslashes($string) . '</span>';
}
//> Bilder auf Verkleinern via Javascript überprüfen.
function _img($string, $float='') {
if ($float == 'none' OR $float == 'left' OR $float == 'right') {
$float = 'style="float:'.$float.'; margin: 5px;" ';
} else {
$float = '';
}
$image = '<img src="'.$string.'" alt="" title="" border="0" class="bbcode_image" '.$float.'/>';
return $image;
}
//> Screenshots darstellen.
function _screenshot($string,$float='none') {
if ($float == 'none' OR $float == 'left' OR $float == 'right') {
$float = 'style="float:'.$float.'; margin: 5px;" ';
} else {
$float = '';
}
$image = '<a href="'.$string.'" target="_blank"><img src="'.$string.'" alt="" title="" border="0" width="'.$this->info['ScreenMaxBreite'].'" height="'.$this->info['ScreenMaxHoehe'].'" '.$float.'/></a>';
return $image;
}
//> Urls Filtern um XSS vorzubeugen
function _filterurl($url) {
return str_replace(
array('<','>','(',')','#'),
array('<','>','(',')','#'),
$url
);
}
//> Links darstellen und ggf. kürzen
function _shorturl($string,$caption=null) {
if ($caption == null) { $caption = $string; }
$string = trim($string);
$caption = trim($this->_smileys($caption));
$server = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME'];
if (preg_match('%^((http|ftp|https)://)|^/%i',$string) == 0) { $string = 'http://'.$string; }
if (substr($string,0,1) == '/' OR strpos($string,$server) !== false) {
$target = '_self';
} else {
$target = '_blank';
}
$count = strlen($caption);
if($count >= $this->info['UrlMaxLaenge']) {
$string = "<a href=\"".$string."\" target=\"".$target."\">".$this->_shortcaptions($caption)."</a>";
} else {
$string = "<a href=\"".$string."\" target=\"".$target."\">".$caption."</a>";
}
return $string;
}
//> Linkbeschreibung kürzen
function _shortcaptions($string) {
$words = explode(" ",$string);
foreach($words as $word)
if(strlen($word) > $this->info['WortMaxLaenge'] && !preg_match('%(\[(img|shot)\](.*)\[/(img|shot)\])%i',$word)) {
$maxd2 = sprintf("%00d",($this->info['WortMaxLaenge']/2));
$string = str_replace($word,substr($word,0,$maxd2)."...".substr($word,-$maxd2),$string);
}
return $string;
}
//> Hilfsfunktion für _shortwords
function _checkpatterns($patterns, $word) {
if (!is_array($patterns)) {
return true;
}
foreach ($patterns as $p) {
if (preg_match($p, $word) == 1) {
return false;
}
}
return true;
}
//> Zu lange Wörter kürzen.
function _shortwords($string) {
//> Zeichenkette in einzelne Array elemente zerlegen.
$lines = explode("\n",$string);
//> Patter Befehle die nicht gekürzt werden dürfen !!!
$pattern = array("%^(www)(.[-a-zA-Z0-9@:;\%_\+.~#?&//=]+?)%i",
"%^(http|https|ftp)://{1}[-a-zA-Z0-9@:;\%_\+.~#?&//=]+?%i",
"%(\[(url|img(=(left|right))?|shot(=(left|right))?)\](.*)\[/(url|img|shot)\])|(\[url=(.*)\])%i",
"%\[(code|html|css|php|countdown)(=[^]]+)].*\[/(code|html|css|php|countdown)]%i",
"%(\[flash)?]((http|https|ftp)://[a-z-0-9@:\%_\+.~#\?&/=,;]+)\[/flash]%i",
"%\[list].*\[/list]%");
foreach($lines as $line) {
$words = explode(" ",$line);
foreach($words as $word)
if(strlen($word) > $this->info['WortMaxLaenge'] && $this->_checkpatterns($pattern, $word)) {
//Auskommentiert also Variante mit 'zulanges...Wort' zu gunsten von 'zulanges allesdazwischen Wort' (ohne ...)
//$maxd2 = sprintf("%00d",($this->info['WortMaxLaenge']/2));
$string = wordwrap($string, $this->info['WortMaxLaenge']);
}
}
return $string;
}
//> Geöffnete Ktext- Tags Nummerieren.
function _addKtextOpen($Titel=Null) {
$this->ayCacheKtextOpen[count($this->ayCacheKtextOpen)+1] = true;
$intCountKtext = count($this->ayCacheKtextOpen);
$string = "[ktext:".$intCountKtext."=".$Titel."]";
return $string;
}
//> Geschlossene Ktext- Tags Nummerieren.
function _addKtextClose() {
$this->ayCacheKtextClose[count($this->ayCacheKtextClose)+1] = true;
$intCountKtext = count($this->ayCacheKtextClose);
return "[/ktext:".$intCountKtext."]";
}
//> Ktext- Tags umwandeln..
function _ktext($string) {
$Random = rand(1,10000000);
//> Html- Muster für geöffnete Tags mit Titel.
$HeaderTitel = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"".$this->info['KtextTabelleBreite']."\" align=\"center\">"
."<tr><td><a href=\"javascript:Klapptext('__ID__')\">"
."<img src=\"include/images/icons/plus.gif\" id=\"image___ID__\" border=0 alt=\"Aus/Ein-klappen\" title=\"Aus/Ein-klappen\"> ";
$FooterTitel = "</a></td></tr>"
."<tr><td><div id=\"layer___ID__\" style=\"display:none;border:1px ".$this->info['KtextRandFormat']." ".$this->info['KtextRandFarbe'].";\">";
//> Html- Muster für geschlossene Tags.
$KtextClose = "</div></td></tr></table>\n";
//> Geöffnete Tags umwandeln.
for($c=1;$c <= count($this->ayCacheKtextOpen);$c++) {
if(count($this->ayCacheKtextClose) == count($this->ayCacheKtextOpen)) {
//> Format: [ktext=xxx]
$this->ktext_pattern[] = "%\[ktext:".$c."=([^]]*)\]%siU";
$this->ktext_replace[] = str_replace("__ID__",$c."@".$Random,$HeaderTitel)."\$1".str_replace("__ID__",$c."@".$Random,$FooterTitel);
//> Format: [/ktext]
$this->ktext_pattern[] = "%\[/ktext:".$c."\]%siU";
$this->ktext_replace[] = $KtextClose;
} else {
//> Format: [ktext=xxx]xxx[/ktext]
$this->ktext_pattern[] = "%\[ktext:([0-9]*)=([^]](.*)\[/ktext:([0-9]*)\]%siU";
$this->ktext_replace[] = str_replace("__ID__","\$1@".$Random,$HeaderTitel)."\$2".str_replace("__ID__","\$1@".$Random,$FooterTitel)."\$3".$KtextClose;
}
}
//> Nicht gefundene Paare wieder darstellen.
//> Format: [ktext=xxx]
$this->ktext_pattern[] = "%\[ktext:([0-9]*)=([^[/]*)\]%siU";
$this->ktext_replace[] = "[ktext=\$1]";
//> Format: [/ktext]
$this->ktext_pattern[] = "%\[/ktext:([0-9]*)\]%siU";
$this->ktext_replace[] = "[/ktext]";
//> String parsen
$string = preg_replace($this->ktext_pattern,$this->ktext_replace,$string);
return $string;
}
//> Geöffnete Quote- Tags Nummerieren.
function _addQuoteOpen($User=Null) {
$this->ayCacheQuoteOpen[count($this->ayCacheQuoteOpen)+1] = $User;
$intCountQuote = count($this->ayCacheQuoteOpen);
if($User != NULL) {
$string = "[quote:".$intCountQuote."=".$User."]";
} else {
$string = "[quote:".$intCountQuote."]";
}
return $string;
}
//> Geschlossene Quote- Tags Nummerieren.
function _addQuoteClose() {
$this->ayCacheQuoteClose[count($this->ayCacheQuoteClose)+1] = true;
$intCountQuote = count($this->ayCacheQuoteClose);
return "[/quote:".$intCountQuote."]";
}
//> Quote- Tags umwandeln.
function _quote($string) {
//> überprüfen ob Bod gesetzt ist.
if(strtolower($this->info['QuoteSchriftformatIT']) == "bold") {
$Schriftformat = "font-weight:bold;";
} else {
$Schriftformat = "font-style:".$this->info['QuoteSchriftformatIT'].";";
}
//> Html- Muster für geöffnete Quote- Tags.
$Header = "<table cellspacing=\"0\" cellpadding=\"2\" border=\"0\" style=\"BORDER: 1px SOLID ".$this->info['QuoteRandFarbe'].";\" width=\"".$this->info['QuoteTabelleBreite']."\" align=\"center\">"
."<tr><td style=\"font-family:Arial, Helvetica, sans-serif;FONT-SIZE:13px;FONT-WEIGHT:BOLD;COLOR:".$this->info['QuoteSchriftfarbe'].";BACKGROUND-COLOR:".$this->info['QuoteHintergrundfarbe'].";\"> Zitat</td></tr>"
."<tr bgcolor=\"".$this->info['QuoteHintergrundfarbeIT']."\"><td><table align=\"center\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"98%\"><tr><td style=\"".$Schriftformat."FONT-SIZE:10px;COLOR:".$this->info['QuoteSchriftfarbeIT'].";\">";
//> Html- Muster für geöffnete Quote- Tags mit User.
$HeaderUser = "<table cellspacing=\"0\" cellpadding=\"2\" border=\"0\" style=\"BORDER: 1px SOLID ".$this->info['QuoteRandFarbe'].";\" width=\"".$this->info['QuoteTabelleBreite']."\" align=\"center\">"
."<tr><td style=\"font-family:Arial, Helvetica, sans-serif;FONT-SIZE:13px;FONT-WEIGHT:BOLD;COLOR:".$this->info['QuoteSchriftfarbe'].";BACKGROUND-COLOR:".$this->info['QuoteHintergrundfarbe'].";\"> Zitat von ";
$FooterUser = "</td></tr><tr bgcolor=\"".$this->info['QuoteHintergrundfarbeIT']."\"><td><table align=\"center\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"98%\"><tr><td style=\"".$Schriftformat."FONT-SIZE:10px;COLOR:".$this->info['QuoteSchriftfarbeIT'].";\">";
//> Html- Muster für geschlossene Quote- Tags.
$QuoteClose = "</td></tr></table></td></tr></table>";
//> Geöffnete Tags umwandeln.
for($c=1;$c <= count($this->ayCacheQuoteOpen);$c++) {
if(count($this->ayCacheQuoteClose) == count($this->ayCacheQuoteOpen)) {
//> Format: [quote=xxx]
$this->quote_pattern[] = "%\[quote:".$c."=([^[/]*)\]%siU";
$this->quote_replace[] = $HeaderUser."\$1".$FooterUser;
//> Format: [quote]
$this->quote_pattern[] = "%\[quote:".$c."\]%siU";
$this->quote_replace[] = $Header;
//> Format: [/quote]
$this->quote_pattern[] = "%\[/quote:".$c."\]%siU";
$this->quote_replace[] = $QuoteClose;
} else {
//> Format: [quote=xxx]xxx[/quote]
$this->quote_pattern[] = "%\[quote:([0-9]*)=([^[/]*)\[/quote:([0-9]*)\]%siU";
$this->quote_replace[] = $HeaderUser."\$2".$FooterUser."\$3".$QuoteClose;
//> Format: [quote]xxx[/quote]
$this->quote_pattern[] = "%\[quote:([0-9]*)\](.*)\[/quote:\\1\]%siU";
$this->quote_replace[] = $Header."\$2".$QuoteClose;
}
}
//> Nicht gefundene Paare wieder darstellen.
//> Format: [quote=xxx]
$this->quote_pattern[] = "%\[quote:([0-9]*)=([^[/]*)\]%siU";
$this->quote_replace[] = "[quote=\$2]";
//> Format: [quote]
$this->quote_pattern[] = "%\[quote:([0-9])\]%siU";
$this->quote_replace[] = "[quote]";
//> Format: [/quote]
$this->quote_pattern[] = "%\[/quote:([0-9])\]%siU";
$this->quote_replace[] = "[/quote]";
//> String parsen
$string = preg_replace($this->quote_pattern,$this->quote_replace,$string);
return $string;
}
//> Video intergration.
function _video($typ,$id) {
$typ = strtolower($typ);
if($typ == "google") {
$str = "<embed style=\"width:".$this->info['GoogleBreite']."px; height:".$this->info['GoogleHoehe']."px;\" id=\"VideoPlayback\" align=\"middle\" type=\"application/x-shockwave-flash\" src=\"http://video.google.com/googleplayer.swf?docId=".$id."\" allowScriptAccess=\"sameDomain\" quality=\"best\" bgcolor=\"".$this->info['GoogleHintergrundfarbe']."\" scale=\"noScale\" salign=\"TL\" FlashVars=\"playerMode=embedded\"/>";
}
if($typ == "youtube") {
$str = "<object width=\"".$this->info['YoutubeBreite']."\" height=\"".$this->info['YoutubeHoehe']."\"><param name=\"movie\" value=\"http://www.youtube.com/v/".$id."\"></param><embed src=\"http://www.youtube.com/v/".$id."\" type=\"application/x-shockwave-flash\" width=\"".$this->info['YoutubeBreite']."\" height=\"".$this->info['YoutubeHoehe']."\" bgcolor=\"".$this->info['YoutubeHintergrundfarbe']."\"></embed></object>";
}
if($typ == "myvideo") {
$str = "<object classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" width=\"".$this->info['MyvideoBreite']."\" height=\"".$this->info['MyvideoHoehe']."\"><param name=\"movie\" value=\"http://www.myvideo.de/movie/".$id."\"></param><embed src=\"http://www.myvideo.de/movie/".$id."\" width=\"".$this->info['MyvideoBreite']."\" height=\"".$this->info['MyvideoHoehe']."\" type=\"application/x-shockwave-flash\"></embed></object>";
}
if($typ == "gametrailers") {
$str = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" id="gtembed" width="'.$this->info['YoutubeBreite'].'" height="'.$this->info['YoutubeHoehe'].'"> <param name="allowScriptAccess" value="sameDomain" /> <param name="allowFullScreen" value="true" /> <param name="movie" value="http://www.gametrailers.com/remote_wrap.php?mid='.$id.'"/> <param name="quality" value="high" /> <embed src="http://www.gametrailers.com/remote_wrap.php?mid='.$id.'" swLiveConnect="true" name="gtembed" align="middle" allowScriptAccess="sameDomain" allowFullScreen="true" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="'.$this->info['YoutubeBreite'].'" height="'.$this->info['YoutubeHoehe'].'"></embed> </object>';
}
return $str;
}
//> Countdown berechnen.
function _countdown($date,$time=NULL) {
$date = explode(".",$date);
if ($time != NULL) {
$timechk = explode(':',$time);
if ($timechk[0] <= 23 && $timechk[1] <= 59 && $timechk[2] <= 59) $timechk = TRUE;
else $timechk = FALSE;
}
else $timechk = TRUE;
//> Html Design.
$Header = "<div style=\"width:".$this->info['CountdownTabelleBreite'].";padding:5px;font-family:Verdana;font-size:".$this->info['CountdownSchriftsize']."px;".$Font."color:".$this->info['CountdownSchriftfarbe'].";border:2px dotted ".$this->info['CountdownRandFarbe'].";text-align:center\">";
$Footer = "</div>";
//> Überprüfen ob die angaben stimmen.
if($date[0] <= 31 && $date[1] <= 12 && $date[2] /*>= date("Y")*/ && checkdate($date[1],$date[0],$date[2]) && $timechk) {
if(isset($time)) {
$time = explode(":",$time);
$intStd = $time[0];
$intMin = $time[1];
$intSek = $time[2];
} else {
$intStd = 0;
$intMin = 0;
$intSek = 0;
}
$Timestamp = @mktime($intStd, $intMin, $intSek, $date[1], $date[0], $date[2]);
$Diff = $Timestamp - time();
$Font =($this->info['CountdownSchriftformat'] == "bold") ? "font-wight:bold;":"font-style:".$this->info['CountdownSchriftformat'].";";
if($Diff > 1) {
$Tage = sprintf("%00d",($Diff / 86400));
$Stunden = sprintf("%00d",(($Diff - ($Tage * 86400)) / 3600));
$Minuten = sprintf("%00d",(($Diff - (($Tage * 86400)+($Stunden*3600))) / 60));
$Sekunden = ($Diff - (($Tage * 86400)+($Stunden*3600)+($Minuten*60)));
//> Bei höheren Wert wie 1 als Mehrzahl ausgeben.
$mzTg = ($Tage == 1) ? "":"e";
$mzStd = ($Stunden == 1) ? "":"n";
$mzMin = ($Minuten == 1) ? "":"n";
$mzSek = ($Sekunden == 1) ? "":"n";
//> Datum zusamstellen.
$str = $Header.$Tage." Tag".$mzTg.", ".$Stunden." Stunde".$mzStd.", ".$Minuten." Minute".$mzMin." und ".$Sekunden." Sekunde".$mzSek.$Footer;
} else {
//> Datum zusamstellen wenn Datum unmittelbar bevor steht.
$str = $Header.(is_array($time) ? implode(':',$time) : $time).' '.implode('.',$date)." !!!".$Footer;
}
} else {
/*if($time == NULL) {
$str = "[countdown]".implode('.',$date)."[/countdown]";
} else {
$str = "[countdown=".$time."]".implode('.',$date)."[/countdown]";
}*/
$str = $Header."Der Countdown ist falsch definiert".$Footer;
}
return $str;
}
function _ws($ws) {
return $ws;
}
//> Flash verwerten
function _flash($url, $options){
$width = $this->info['FlashBreite'];
$height = $this->info['FlashHoehe'];
if (!empty($options)) {
$options = explode(' ', $options);
foreach ($options as $option){
$tmp = 0;
list($name, $value) = explode('=', $option);
if ($name == 'width') {
$tmp = substr($value, 2, -2);
if ($tmp < $width) {
$width = $tmp;
}
} elseif ($name == 'height') {
$tmp = substr($value, 2, -2);
if ($tmp < $height) {
$height = $tmp;
}
}
}
}
return '<object classid="CLSID:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'.$width.'" height="'.$height.'"'.
'codebase="http://active.macromedia.com/flash2/cabs/swflash.cab#version=7,0,0,0" class="bbcode_flash">'.
'<param name="movie" value="' . $url . '">'.
'<param name="quality" value="high">'.
'<param name="scale" value="exactfit">'.
'<param name="menu" value="true">'.
'<param name="bgcolor" value="'.$this->info['FlashHintergrundfarbe'].'"> '.
'<embed src="' . $url . '" quality="high" scale="exactfit" menu="false" '.
'bgcolor="'.$this->info['FlashHintergrundfarbe'].'" width="'.$width.'" height="'.$height.'" swLiveConnect="false" '.
'type="application/x-shockwave-flash" '.
'pluginspage="http://www.macromedia.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash">'.
'</embed>'.
'</object>';
}
function parse($string) {
//> Die Blocks werden codiert um sie vor dem restlichen parsen zu schützen.
if($this->permitted['php'] == true) {
$string = preg_replace("%\[php\](.+)\[\/php\]%esiU","\$this->encode_codec('\$1','php')",$string);
$string = preg_replace("%\[php=(.*)\](.+)\[\/php\]%esiU","\$this->encode_codec('\$2','php','\$1')",$string);
}
if($this->permitted['html'] == true) {
$string = preg_replace("%\[html\](.+)\[\/html\]%esiU","\$this->encode_codec('\$1','html')",$string);
$string = preg_replace("%\[html=(.*)\](.+)\[\/html\]%esiU","\$this->encode_codec('\$2','html','\$1')",$string);
}
if($this->permitted['css'] == true) {
$string = preg_replace("%\[css\](.+)\[\/css\]%esiU","\$this->encode_codec('\$1','css')",$string);
$string = preg_replace("%\[css=(.*)\](.+)\[\/css\]%esiU","\$this->encode_codec('\$2','css','\$1')",$string);
}
if($this->permitted['code'] == true) {
$string = preg_replace("%\[code\](.+)\[\/code\]%esiU","\$this->encode_codec('\$1','code')",$string);
$string = preg_replace("%\[code=(.*)\](.+)\[\/code\]%esiU","\$this->encode_codec('\$2','code','\$1')",$string);
}
if($this->permitted['list'] == true) {
$string = preg_replace("%\[list\](.+)\[\/list\]%esiU","\$this->encode_codec('\$1','list')",$string);
}
//> Badwors Filtern.
$string = $this->_badwords($string);
//> BB Code der den Codeblock nicht betrifft.
//> Überprüfen ob die wörter nicht die maximal länge überschrieten.
$string = $this->_shortwords($string);
$string = htmlentities($string, ILCH_ENTITIES_FLAGS, ILCH_CHARSET);
$string = nl2br($string);
if($this->permitted['url'] == true) {
if($this->permitted['autourl'] == true) {
//> Format: www.xxx.de
$this->pattern[] = "%(( |\n|^)(www.[a-zA-Z\-0-9@:\%_\+.~#?&//=,;]+?))%eUi";
$this->replace[] = "\$this->_ws('\$2').\$this->_shorturl('\$3')";
//> Format: http://www.xxx.de
$this->pattern[] = "%(( |\n|^)((http|https|ftp)://{1}[a-zA-Z\-0-9@:\%_\+.~#?&//=,;]+?))%eUi";
$this->replace[] = "\$this->_ws('\$2').\$this->_shorturl('\$3')";
//> Format xxx@xxx.de
$this->pattern[] = "%(\s|^)([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})%i";
$this->replace[] = "<a href=\"mailto:$2\">$2</a>";
}
//> Format: [url=xxx]xxx[/url]
$this->pattern[] = "%\[url=([^\]]*)\](.+)\[\/url\]%eUis";
$this->replace[] = "\$this->_shorturl('\$1','\$2')";
//> Format: [url]xxx[/url]
$this->pattern[] = "%\[url\](.+)\[\/url\]%esiU";
$this->replace[] = "\$this->_shorturl('\$1')";
}
//> Darf BB Code [MAIL] dekodiert werden?
if($this->permitted['email'] == true) {
//> Format: [mail]xxx@xxx.de[/mail]
$this->pattern[] = "%\[mail\]([_\.0-9a-z-]+\@([0-9a-z\-]+)\.[a-z]{2,3})\[\/mail\]%Uis";
$this->replace[] = "<a href=\"mailto:$1\">$1</a>";
//> Format: [mail=xxx@xxx.de]xxx[/mail]
$this->pattern[] = "%\[mail=([_\.0-9a-z-]+\@([0-9a-z\-]+)\.[a-z]{2,3})\](.+)\[\/mail\]%Uis";
$this->replace[] = "<a href=\"mailto:$1\">$3</a>";
}
//> Darf BB Code [B] dekodiert werden?
if($this->permitted['b'] == true) {
//> Format: [b]xxx[/b]
$this->pattern[] = "%\[b\](.+)\[\/b\]%Uis";
$this->replace[] = "<b>\$1</b>";
}
//> Darf BB Code [I] dekodiert werden?
if($this->permitted['i'] == true) {
//> Format: [i]xxx[/i]
$this->pattern[] = "%\[i\](.+)\[\/i\]%Uis";
$this->replace[] = "<i>\$1</i>";
}
//> Darf BB Code [U] dekodiert werden?
if($this->permitted['u'] == true) {
//> Format: [u]xxx[/u]
$this->pattern[] = "%\[u\](.+)\[\/u\]%Uis";
$this->replace[] = "<u>\$1</u>";
}
//> Darf BB Code [S] dekodiert werden?
if($this->permitted['s'] == true) {
//> Format: [s]xxx[/s]
$this->pattern[] = "%\[s\](.+)\[\/s\]%Uis";
$this->replace[] = "<strike>\$1</strike>";
}
###############################################
//> Darf BB Code [LEFT] dekodiert werden?
if($this->permitted['left'] == true) {
//> Format: [left]xxx[/left]
$this->pattern[] = "%\[left\](.+)\[\/left\]%Uis";
$this->replace[] = "<div align=\"left\">\$1</div>";
}
//> Darf BB Code [CENTER] dekodiert werden?
if($this->permitted['center'] == true) {
//> Format: [center]xxx[/center]
$this->pattern[] = "%\[center\](.+)\[\/center\]%Uis";
$this->replace[] = "<div align=\"center\">\$1</div>";
}
//> Darf BB Code [RIGHT] dekodiert werden?
if($this->permitted['right'] == true) {
//> Format: [right]xxx[/right]
$this->pattern[] = "%\[right\](.+)\[\/right\]%Uis";
$this->replace[] = "<div align=\"right\">\$1</div>";
}
###############################################
//> Darf BB Code [EMPH] dekodiert werden?
if($this->permitted['emph'] == true) {
//> Format: [emph]xxx[/emph]
$this->pattern[] = "%\[emph\](.+)\[\/emph\]%Uis";
$this->replace[] = "<span style=\"background-color:".$this->info['EmphHintergrundfarbe'].";color:".$this->info['EmphSchriftfarbe'].";\">$1</span>";
}
//> Darf BB Code [COLOR] dekodiert werden?
if($this->permitted['color'] == true) {
//> Format: [color=#xxxxxx]xxx[/color]
$this->pattern[] = "%\[color=(#{1}[0-9a-zA-Z]+?)\](.+)\[\/color\]%Uis";
$this->replace[] = "<font color=\"$1\">$2</font>";
}
//> Darf BB Code [SIZE] dekodiert werden?
if($this->permitted['size'] == true) {
//> Format: [size=xx]xxx[/size]
$this->pattern[] = "%\[size=([0-9]+?)\](.+)\[\/size\]%eUis";
$this->replace[] = "\$this->_size('\$1','\$2')";
}
//> Darf BB Code [KTEXT] decodiert werden?
if($this->permitted['ktext'] == true) {
//> Format: [ktext=xxx]
$this->pattern[] = "%\[ktext=([^[/]*)\]%esiU";
$this->replace[] = "\$this->_addKtextOpen('\\1')";
//> Format: [/ktext]
$this->pattern[] = "%\[/ktext\]%esiU";
$this->replace[] = "\$this->_addKtextClose()";
}
//> Darf BB Code [IMG] dekodiert werden?
if($this->permitted['img'] == true) {
//> Format: [img]xxx.de[/img]
$this->pattern[] = "%\[img\]([-a-zA-Z0-9@:\%_\+,.~#?&//=]+?)\[\/img\]%eUi";
$this->replace[] = "\$this->_img('\$1')";
//> Format: [img=left|right]xxx.de[/img]
$this->pattern[] = "%\[img=(left|right)\]([-a-zA-Z0-9@:\%_\+,.~#?&//=]+?)\[\/img\]%eUi";
$this->replace[] = "\$this->_img('\$2','\$1')";
}
//> Darf BB Code [SCREENSHOT] dekodiert werden?
if($this->permitted['screenshot'] == true) {
//> Format: [shot]xxx.de[/screenshot]
$this->pattern[] = "%\[shot\]([-a-zA-Z0-9@:\%_\+.~#?&//=]+?)\[\/shot\]%eUi";
$this->replace[] = "\$this->_screenshot('\$1')";
//> Format: [shot=left|right]xxx.de[/screenshot]
$this->pattern[] = "%\[shot=(left|right)\]([-a-zA-Z0-9@:\%_\+.~#?&//=]+?)\[\/shot\]%eUi";
$this->replace[] = "\$this->_screenshot('\$2','\$1')";
}
//> Farf BB Code [VIDEO] dekodiert werden?
if($this->permitted['video'] == true) {
//> Format: [video=xxx]xxx[/video]
$this->pattern[] = "%\[video=(google|youtube|myvideo|gametrailers)\](.+)\[\/video\]%eUis";
$this->replace[] = "\$this->_video('\$1','\$2')";
}
//> Darf BB Code [COUNTDOWN] dekodiert werden?
if($this->permitted['countdown'] == true) {
//> Format: [countdown=Std:Min:Sek]TT.MM.JJJJ[/countdown]
$this->pattern[] = "%\[countdown=(([0-9]{2}):([0-9]{2}):([0-9]{2}))\](([0-9]{2})\.([0-9]{2})\.([0-9]{4}))\[\/countdown\]%eUis";
$this->replace[] = "\$this->_countdown('\$5','\$1')";
//> Format: [countdown]TT.MM.JJJJ[/countdown]
$this->pattern[] = "%\[countdown\](([0-9]{2})\.([0-9]{2})\.([0-9]{4}))\[\/countdown\]%eUis";
$this->replace[] = "\$this->_countdown('\$1')";
}
###############################################
//> Darf BB Code [QUOTE] dekodiert werden?
if($this->permitted['quote'] == true) {
//> Format: [quote]
$this->pattern[] = "%\[quote\]%esiU";
$this->replace[] = "\$this->_addQuoteOpen()";
//> Format: [quote=xxx]
$this->pattern[] = "%\[quote=([^[/]*)\]%esiU";
$this->replace[] = "\$this->_addQuoteOpen('\\1')";
//> Format: [/quote]
$this->pattern[] = "%\[/quote\]%esiU";
$this->replace[] = "\$this->_addQuoteClose()";
}
//> Darf BB Code [FLASH] dekodiert werden?
if($this->permitted['flash'] == true) {
//> Format: [flash]*[/flash]
$this->pattern[] = "%\[flash(( \w+=\'\d+\')*)]((http|https|ftp)://[a-z-0-9@:\%_\+.~#\?&/=,;]+)\[/flash]%ie";
$this->replace[] = '$this->_flash("$3", trim("$1"));';
}
//> String parsen
$string = preg_replace($this->pattern,$this->replace,$string);
//> Darf BB Code [QUOTE] dekodiert werden?
if($this->permitted['quote'] == true) {
$string = $this->_quote($string);
}
//> Darf BB Code [KTEXT] decodiert werden?
if($this->permitted['ktext'] == true) {
$string = $this->_ktext($string);
}
//> Smilies Filtern.
$string = $this->_smileys($string);
//> Zum schluss die blöcke die verschlüsselt wurden wieder entschlüsseln und Parsen.
if($this->permitted['php'] == true) {
$string = preg_replace("%\[php\](.+)\[\/php\]%esiU", '$this->_phpblock("$1")', $string);
$string = preg_replace("%\[php=([^;]*);(\d+)\](.+)\[\/php\]%esiU", 'this->_phpblock("$3","$1","$2")', $string);
$string = preg_replace("%\[php=(.*)\](.+)\[\/php\]%esiU", '$this->_phpblock("$2","$1")', $string);
}
if($this->permitted['html'] == true) {
$string = preg_replace("%\[html\](.+)\[\/html\]%esiU","\$this->_htmlblock('\$1')",$string);
$string = preg_replace("%\[html=([^;]*);(\d+)\](.+)\[\/html\]%esiU","\$this->_htmlblock('\$3','\$1','\$2')",$string);
$string = preg_replace("%\[html=(.*)\](.+)\[\/html\]%esiU","\$this->_htmlblock('\$2','\$1')",$string);
}
if($this->permitted['css'] == true) {
$string = preg_replace("%\[css\](.+)\[\/css\]%esiU","\$this->_cssblock('\$1')",$string);
$string = preg_replace("%\[css=([^;]*);(\d+)\](.+)\[\/css\]%esiU","\$this->_cssblock('\$3','\$1','\$2')",$string);
$string = preg_replace("%\[css=(.*)\](.+)\[\/css\]%esiU","\$this->_cssblock('\$2','\$1')",$string);
}
if($this->permitted['code'] == true) {
$string = preg_replace("%\[code\](.+)\[\/code\]%esiU","\$this->_codeblock('\$1')",$string);
$string = preg_replace("%\[code=([^;]*);(\d+)\](.+)\[\/code\]%esiU","\$this->_codeblock('\$3','\$1','\$2')",$string);
$string = preg_replace("%\[code=(.*)\](.+)\[\/code\]%esiU","\$this->_codeblock('\$2','\$1')",$string);
}
if($this->permitted['list'] == true) {
$string = preg_replace("%\[list\](.+)\[\/list\]%esiU","\$this->_list('\$1')",$string);
}
unset($this->pattern);
unset($this->replace);
unset($this->ayCacheQuoteOpen);
unset($this->ayCacheQuoteClose);
unset($this->ayCacheKtextOpen);
unset($this->ayCacheKtextClose);
return $string;
}
}
?>
Zuletzt modifiziert von Lord|Schirmer am 26.12.2013 - 11:19:32