View file system/functions/bbcode.php

File size: 11.18Kb
<?php
  
function bb_show() {
  
  ?>    
  <div id='bb' class='bb-show' style='display: none'>    
  <a class='bb-show-ob ssop2' id='bbs_back' data-factor='-1' ajax='no' style='left: 0;'>  
  <?=icons('chevron-left', 25)?>
  </a>    
  <a class='bb-show-ob ssop2' id='bbs_for' data-factor='1' ajax='no' style='right: 50px;'>  
  <?=icons('chevron-right', 25)?>
  </a>    
  <a class='bb-show-ob ssop2' ajax='no' style='right: 0;' onclick="open_or_close('bb')">  
  <?=icons('times', 28)?>
  </a>    
  <div class='bbs_op bb-show-ob-op'>    
  <a class='bbs bb-show-ob' ajax='no' alt='[b]<?=lg('текст')?>[/b]' title='<?=lg('жирный текст')?>'>  
  <?=icons('bold', 21)?>
  </a> 
  <a class='bbs bb-show-ob' ajax='no' alt='[i]<?=lg('текст')?>[/i]' title='<?=lg('курсив')?>'>  
  <?=icons('italic', 21)?>
  </a>
  <a class='bbs bb-show-ob' ajax='no' alt='[u]<?=lg('текст')?>[/u]' title='<?=lg('подчеркнутый текст')?>'>  
  <?=icons('underline', 21)?>
  </a>
  <a class='bbs bb-show-ob' ajax='no' alt='[s]<?=lg('текст')?>[/s]' title='<?=lg('зачеркнутый текст')?>'>  
  <?=icons('strikethrough', 21)?>
  </a>
  <a class='bbs bb-show-ob' ajax='no' alt='[quote]<?=lg('текст')?>[/quote]' title='<?=lg('цитата')?>'>  
  <?=icons('comment', 21)?>
  </a>
  <a class='bbs bb-show-ob' ajax='no' alt='[url=<?=lg('ссылка')?>]<?=lg('имя ссылки')?>[/url]' title='<?=lg('ссылка')?>'>  
  <?=icons('link', 21)?>
  </a>
  <a class='bbs bb-show-ob' ajax='no' alt='[marquee]<?=lg('бегущий текст')?>[/marquee]' title='<?=lg('бегущий текст')?>'>  
  <?=icons('undo', 21)?>
  </a>
  <a class='bbs bb-show-ob' ajax='no' alt='[center]<?=lg('текст по центру')?>[/center]' title='<?=lg('текст по центру')?>'>  
  <?=icons('align-center', 21)?>
  </a>
  <a class='bbs bb-show-ob' ajax='no' alt='[right]<?=lg('текст справа')?>[/right]' title='<?=lg('текст справа')?>'>  
  <?=icons('align-right', 21)?>
  </a>
  <a class='bbs bb-show-ob' ajax='no' alt='[left]<?=lg('текст слева')?>[/left]' title='<?=lg('текст слева')?>'>  
  <?=icons('align-left', 21)?>
  </a>
  <a class='bbs bb-show-ob' ajax='no' alt='[justify]<?=lg('текст по краям')?>[/justify]' title='<?=lg('текст по краям')?>'>  
  <?=icons('align-justify', 21)?>
  </a>
  <a class='bbs bb-show-ob' ajax='no' alt='[ftext]<?=lg('мигающий текст')?>[/ftext]' title='<?=lg('мигающий текст')?>'>  
  <?=icons('magic', 21)?>
  </a>
  <a class='bbs bb-show-ob' ajax='no' alt='[youtube]<?=lg('идентификатор видео (Пример: qTBKohDwLvY)')?>[/youtube]' title='<?=lg('видео с YouTube')?>'>  
  <?=icons('youtube', 21)?>
  </a>
  <a class='bbs bb-show-ob' ajax='no' alt='[img]<?=lg('ссылка на изображение')?>[/img]' title='<?=lg('изображение')?>'>  
  <?=icons('image', 21)?>
  </a>
  <a class='bbs bb-show-ob' ajax='no' alt='[audio]<?=lg('ссылка на аудио')?>[/audio]' title='<?=lg('аудио')?>'> 
  <?=icons('music', 21)?>
  </a>
  <a class='bb-show-ob' ajax='no' onclick="open_or_close('bbcolor')" title='<?=lg('цвет текста')?>'>  
  <?=icons('paint-brush', 21)?>
  </a>
  <a class='bb-show-ob' ajax='no' onclick="open_or_close('bbbcolor')" title='<?=lg('фон текста')?>'>  
  <?=icons('th', 21)?>
  </a>
  <a class='bb-show-ob' ajax='no' onclick="open_or_close('bbsize')" title='<?=lg('размер текста')?>'>  
  <?=icons('object-ungroup', 21)?>
  </a>
  <a class='bb-show-ob' ajax='no' onclick="open_or_close('bbacode')" title='<?=lg('код')?>'>  
  <?=icons('code', 21)?>
  </a>
  </div> 
  </div>    
  <div id='bbcolor' style='display: none; padding-left: 5px; padding-right: 5px; padding-bottom: 12px'>
  <b onclick="open_or_close('bbcolor', 'close')"><?=icons('times', 25, 'fa-fw')?> <?=lg('Выберите цвет текста:')?></b><br /><br />
  <?php require_once (ROOT.'/system/connections/color.php');?>
  </div>    
  <div id='bbbcolor' style='display: none; padding-left: 5px; padding-right: 5px; padding-bottom: 12px'>
  <b onclick="open_or_close('bbbcolor', 'close')"><?=icons('times', 25, 'fa-fw')?> <?=lg('Выберите фон текста:')?></b><br /><br />
  <?php require_once (ROOT.'/system/connections/bcolor.php');?>
  </div>    
  <div id='bbsize' style='display: none; padding-left: 5px; padding-right: 5px; padding-bottom: 12px'>
  <b onclick="open_or_close('bbsize', 'close')"><?=icons('times', 25, 'fa-fw')?> <?=lg('Выберите размер текста:')?></b><br /><br />
  <span class="bbs btn-o" alt="[size10]<?=lg('текст')?>[/size10]">10px</span>
  <span class="bbs btn-o" alt="[size12]<?=lg('текст')?>[/size12]">12px</span>
  <span class="bbs btn-o" alt="[size14]<?=lg('текст')?>[/size14]">14px</span>
  <span class="bbs btn-o" alt="[size16]<?=lg('текст')?>[/size16]">16px</span>
  <span class="bbs btn-o" alt="[size18]<?=lg('текст')?>[/size18]">18px</span>
  <span class="bbs btn-o" alt="[size20]<?=lg('текст')?>[/size20]">20px</span>
  <span class="bbs btn-o" alt="[size24]<?=lg('текст')?>[/size24]">24px</span>
  <span class="bbs btn-o" alt="[size30]<?=lg('текст')?>[/size30]">30px</span>
  </div>    
  <div id='bbacode' style='display: none; padding-left: 5px; padding-right: 5px; padding-bottom: 12px'>
  <b onclick="open_or_close('bbacode', 'close')"><?=icons('times', 25, 'fa-fw')?> <?=lg('Выберите язык программирования:')?></b><br /><br />
  <span class="bbs btn-o" alt="[code=js][/code]" style="cursor: pointer">JavaScript</span>
  <span class="bbs btn-o" alt="[code=php][/code]" style="cursor: pointer">PHP</span> 
  <span class="bbs btn-o" alt="[code=java][/code]" style="cursor: pointer">Java</span>
  <span class="bbs btn-o" alt="[code=html][/code]" style="cursor: pointer">HTML</span>
  <span class="bbs btn-o" alt="[code=css][/code]" style="cursor: pointer">CSS</span>
  <span class="bbs btn-o" alt="[code=python][/code]" style="cursor: pointer">Python</span>
  <span class="bbs btn-o" alt="[code=ruby][/code]" style="cursor: pointer">Ruby</span>
  <span class="bbs btn-o" alt="[code=c++][/code]" style="cursor: pointer">C++</span>
  <span class="bbs btn-o" alt="[code=c#][/code]" style="cursor: pointer">C#</span>
  <span class="bbs btn-o" alt="[code=c][/code]" style="cursor: pointer">C</span>
  </div>  
  <?php
  hooks::challenge('bb', 'bb');  
  hooks::run('bb');
  
}

function color($color) {
  
  if (preg_match('/^#([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?$/i', $color[1])){
    
    return '<span style="color: '.$color[1].';">'.$color[2].'</span>';
    
  }else{
    
    return '<span style="color: #000000;">'.$color[2].'</span>';
    
  }

}

function code($color) {
  
  if ($color[1] == 'js' || $color[1] == 'php' || $color[1] == 'java' || $color[1] == 'html' || $color[1] == 'css' || $color[1] == 'python' || $color[1] == 'ruby' || $color[1] == 'c' || $color[1] == 'c++' || $color[1] == 'c#'){
    
    return '<pre style="background-color: #24292B; padding: 10px; margin: -1px; color: white"><code class="'.$color[1].'">'.$color[2].'</code></pre>';
    
  }else{
    
    return $color[2];
    
  }

}

function bcolor($bcolor) {
  
  if (preg_match('/^#([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?$/i', $bcolor[1])){
    
    return '<div style="background-color: '.$bcolor[1].'; padding: 5px;">'.$bcolor[2].'</div>';
    
  }else{
    
    return '<span style="color: #000000;">'.$bcolor[2].'</span>';
    
  }

}

function img($arr) {
  
  if (@imagecreatefromstring(file_get_contents($arr[1])) && filter_var($arr[1], FILTER_VALIDATE_URL) !== false){
    
    return '<img style="max-width: 100%" src="'.html_entity_decode($arr[1]).'">';		
  
  }else{
    
    return '<img style="max-width: 100%" src="/files/upload/no_photo.jpg?id=1">';	
  
  }

}

function audio($arr){
  
  return '<audio preload="none" style="width: 280px" src="'.html_entity_decode($arr[1]).'" controls></audio>';

}

function bb_code($msg, $param = 1) {

  $msg = preg_replace(array('/alert/', '/document/', '/cookie/', '/script/'), '', $msg);    
  
  if ($param == 1) {
    
    $msg = preg_replace_callback('/\[code=(.+)\](.+)\[\/code\]/isU', 'code', $msg);
    $msg = preg_replace_callback('/\[color=(.+)\](.+)\[\/color\]/isU', 'color', $msg);    
    $msg = preg_replace_callback('/\[bcolor=(.+)\](.+)\[\/bcolor\]/isU', 'bcolor', $msg);  
    $msg = preg_replace_callback('/\[img\](.+)\[\/img\]/isU', 'img', $msg);
    $msg = preg_replace_callback('/\[audio\](.+)\[\/audio\]/isU', 'audio', $msg);
    
  }else{
    
    $msg = preg_replace('/\[code=(.+?)\]/i', '', $msg);
    $msg = preg_replace('/\[\/code]/i', '', $msg);
    $msg = preg_replace('/\[color=(.+?)\]/i', '', $msg);
    $msg = preg_replace('/\[\/color]/i', '', $msg);
    $msg = preg_replace('/\[bcolor=(.+?)\]/i', '', $msg);
    $msg = preg_replace('/\[\/bcolor]/i', '', $msg);
    $msg = preg_replace('/\[img\]/i', '', $msg);
    $msg = preg_replace('/\[\/img]/i', '', $msg);
    $msg = preg_replace('/\[audio\]/i', '', $msg);
    $msg = preg_replace('/\[\/audio]/i', '', $msg);
    
  }
  
  $bbcode = array(
    
    '/\[b\](.+)\[\/b\]/isU' => '<b>$1</b>',
    '/\[u\](.+)\[\/u\]/isU' => '<u>$1</u>',
    '/\[i\](.+)\[\/i\]/isU' => '<i>$1</i>',
    '/\[s\](.+)\[\/s\]/isU' => '<s>$1</s>',
    '/\[quote\](.+)\[\/quote\]/isU' => '<div style="padding: 7px; border-radius: 4px; background-color: #DBE7EC; color: #6C7275;">$1</div>',   
    '/\[center\](.+)\[\/center\]/isU' => '<center>$1</center>',
    '/\[justify\](.+)\[\/justify\]/isU' => '<div style="text-align: justify">$1</div>',
    '/\[right\](.+)\[\/right\]/isU' => '<div style="float: right;">$1</div><br />',
    '/\[left\](.+)\[\/left\]/isU' => '<div style="float: left;">$1</div><br />',
    '/\[marquee\](.+)\[\/marquee\]/isU' => '<marquee>$1</marquee>',
    '/\[ftext\](.+)\[\/ftext\]/isU' => '<style>#blink2 {-webkit-animation: blink2 1s linear infinite;animation: blink2 1s linear infinite;}@-webkit-keyframes blink2 {100% { color: rgba(34, 34, 34, 0); }}@keyframes blink2 {100% { color: rgba(34, 34, 34, 0); }}</style><span id="blink2">$1</span>',    
    '/\[size10\](.+)\[\/size10\]/isU' => '<span style="font-size: 10px;">$1</span>',
    '/\[size12\](.+)\[\/size12\]/isU' => '<span style="font-size: 12px;">$1</span>',
    '/\[size14\](.+)\[\/size14\]/isU' => '<span style="font-size: 14px;">$1</span>',
    '/\[size16\](.+)\[\/size16\]/isU' => '<span style="font-size: 16px;">$1</span>',
    '/\[size18\](.+)\[\/size18\]/isU' => '<span style="font-size: 18px;">$1</span>',
    '/\[size20\](.+)\[\/size20\]/isU' => '<span style="font-size: 20px;">$1</span>',
    '/\[size24\](.+)\[\/size24\]/isU' => '<span style="font-size: 24px;">$1</span>',
    '/\[size30\](.+)\[\/size30\]/isU' => '<span style="font-size: 30px;">$1</span>',    
    '/\[youtube\](.+)\[\/youtube\]/isU' => '<center><iframe width="95%" height="180" src="https://www.youtube.com/embed/$1" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe><center>'
  
  );
  
  hooks::challenge('bb_set', 'bb_set');  
  hooks::run('bb_set');
  
  $msg = preg_replace(array_keys($bbcode), ($param == 1 ? array_values($bbcode) : '$1'), $msg);
  
  return $msg;

}