コード例 #1
0
ファイル: Color.php プロジェクト: youthweb/bbcode-parser
 public function asHtml(ElementNode $el)
 {
     $content = '';
     foreach ($el->getChildren() as $child) {
         $content .= $child->getAsHTML();
     }
     $param = $el->getAttribute();
     if (is_array($param)) {
         $param = array_shift($param);
     }
     $param = trim($param);
     if ($content == '' and $param == '') {
         return '';
     }
     // Erlaubte Farbnamen
     $allowed_colors = (array) $this->config->get('callbacks.color_param.allowed_colors');
     $color = mb_convert_case($param, MB_CASE_TITLE);
     // Wenn im Parameter keine erlaubte Farbe steht
     if (!in_array($color, $allowed_colors)) {
         // Prüfen, ob eine hexadezimale Farbe angegeben wurde
         if (strlen($param) == 7 && $param[0] == '#' and preg_match('~#[a-f0-9]{6}~i', $param)) {
             $color = $param;
         } else {
             $color = $this->config->get('callbacks.color_param.default_color');
         }
     }
     // Ansonsten ist der Farbnamen gülig
     return Html::span($content, ['style' => 'color:' . $color . ';']);
 }
コード例 #2
0
ファイル: VisitorUrl.php プロジェクト: youthweb/bbcode-parser
 public function visitTextNode(TextNode $text_node)
 {
     $urllinker = new UrlLinker();
     // Email-Adressen sollen nicht verlinkt werden
     $urllinker->setEmailLinkCreator(function ($email, $content) {
         return $email;
     });
     $urllinker->setHtmlLinkCreator(function ($url, $content) {
         // Wir vergeben extra zweimal $url, weil $content durch UrlLinker gekürzt wird
         return Html::anchorFromConfig($url, $url, $this->config);
     });
     $text_node->setValue($urllinker->linkUrlsAndEscapeHtml($text_node->getValue()));
 }
コード例 #3
0
ファイル: Image.php プロジェクト: youthweb/bbcode-parser
 public function asHtml(ElementNode $el)
 {
     // Try to execute the image filter
     try {
         $filter = $this->config->get('filter.image', null);
         if (is_object($filter) and $filter instanceof FilterInterface) {
             $filter->setConfig($this->config);
             return $filter->execute($el);
         }
     } catch (FilterException $e) {
     }
     $content = '';
     // Soll das Bild verlinkt werden?
     $use_anchor = true;
     // Prüfen, ob wir uns innerhalb eines [url] Tags befinden
     if ($el->closestParentOfType('url')) {
         $use_anchor = false;
     }
     foreach ($el->getChildren() as $child) {
         $content .= $child->getAsText();
     }
     // Mögliche Leerzeichen trimmen
     $url = trim($content);
     // URL Schema voranstellen, wenn nichts angegeben wurde
     if ($url !== '' and parse_url($url, PHP_URL_SCHEME) === null) {
         $url = 'http://' . $url;
     }
     // Wenn die URL nicht gültig ist, zeigen wir nur den Text
     if ($url === '' or !$this->config->getValidation()->isValidUrl($url)) {
         return $content;
     }
     // Prüfen, ob die URL wirklich auf ein Bild zeigt
     // Wenn es kein Bild ist, nicht einbetten, sondern nur verlinken
     if ($this->config->get('callbacks.image.force_check') and !$this->config->getValidation()->isValidImageUrl($url)) {
         // Bild nicht verlinken
         if (!$use_anchor) {
             return $content;
         }
         // Bild nur verlinken
         $definition = new UrlOption($this->config);
         return $definition->asHtml($el);
     }
     $attr = array('class' => 'img-responsive', 'border' => '0');
     $img_code = Html::img($url, $attr);
     if (!$use_anchor) {
         return $img_code;
     }
     return Html::anchor($url, $img_code, ['target' => '_blank']);
 }
コード例 #4
0
ファイル: Url.php プロジェクト: youthweb/bbcode-parser
 public function asHtml(ElementNode $el)
 {
     $content = '';
     foreach ($el->getChildren() as $child) {
         $content .= $child->getAsText();
     }
     $param = $el->getAttribute();
     if (is_array($param)) {
         $param = array_shift($param);
     }
     $param = trim($param);
     if ($content == '' and $param == '') {
         return '';
     }
     $short_url = $this->config->get('callbacks.url_content.short_url');
     // Url finden
     if ($param == '') {
         // Die Url steht im Content
         $url = $content;
         // In der anzuzeigenden URL kein & anzeigen
         $content = str_replace('&', '&', $content);
     } else {
         // Die Url steht im Parameter
         $url = $param;
         $short_url = false;
         $content = '';
         foreach ($el->getChildren() as $child) {
             $content .= $child->getAsHTML();
         }
     }
     // http:// voranstellen, wenn nichts angegeben
     if (!preg_match('~^[a-z]+://~i', $url)) {
         $url = "http://" . $url;
     }
     // Wenn die URL nicht gültig ist, zeigen wir nur den Text
     if (!$this->config->getValidation()->isValidUrl($url)) {
         return $content;
     }
     return Html::anchorFromConfig($url, $content, $this->config);
 }
コード例 #5
0
ファイル: Email.php プロジェクト: youthweb/bbcode-parser
 public function asHtml(ElementNode $el)
 {
     $content = '';
     foreach ($el->getChildren() as $child) {
         $content .= $child->getAsText();
     }
     $param = $el->getAttribute();
     if (is_array($param)) {
         $param = array_shift($param);
     }
     $param = trim($param);
     if ($content == '' and $param == '') {
         return '';
     }
     if ($param == '') {
         // Die Email steht im Content
         $email = '';
         foreach ($el->getChildren() as $child) {
             $email .= $child->getAsText();
         }
     } else {
         // Die Email steht im Parameter
         $email = $param;
         $content = '';
         foreach ($el->getChildren() as $child) {
             $content .= $child->getAsHTML();
         }
     }
     // Nur Content anzeigen, wenn keine gültige Email angegeben wurde
     if (!$this->config->getValidation()->isValidEmail($email)) {
         return $content;
     }
     // Mail vor Bots schützen?
     if ($this->config->get('callbacks.email_content.protect_email')) {
         return Html::mail_to_safe($email, $content);
     }
     return Html::mail_to($email, $content);
 }
コード例 #6
0
ファイル: Size.php プロジェクト: youthweb/bbcode-parser
 public function asHtml(ElementNode $el)
 {
     $content = '';
     foreach ($el->getChildren() as $child) {
         $content .= $child->getAsHTML();
     }
     $param = $el->getAttribute();
     if (is_array($param)) {
         $param = array_shift($param);
     }
     $param = trim($param);
     if ($content == '') {
         return '';
     }
     $size = intval($param);
     if ($size == 0) {
         $size = 100;
     }
     // Mindestgröße: 75%
     $size = max($size, $this->config->get('callbacks.size_param.min_size'));
     // Maximale Größe: 150%
     $size = min($size, $this->config->get('callbacks.size_param.max_size'));
     return Html::span($content, ['style' => 'font-size:' . $size . '%;']);
 }