Advertisement
Guest User

mod_bbcode for PMC Custom +youtube support

a guest
May 2nd, 2010
567
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 10.55 KB | None | 0 0
  1. <?php
  2. class mod_bbcode{
  3.     var $ImgTagTagMode, $URLTagMode, $MaxURLCount, $URLTrapLog;
  4.     var $myPage, $urlcount;
  5.  
  6.     function mod_bbcode(){
  7.         global $PMS;
  8.  
  9.         $PMS->hookModuleMethod('ModulePage', 'mod_bbcode'); // 向系統登記模組專屬獨立頁面
  10.         $this->myPage = $PMS->getModulePageURL('mod_bbcode'); // 基底位置
  11.  
  12.         $this->ImgTagTagMode = 1; // [img]標籤行為 (0:不轉換 1:無貼圖時轉換 2:常時轉換)
  13.         $this->URLTagMode = 1; // [url]標籤行為 (0:不轉換 1:正常)
  14.         $this->MaxURLCount = 2; // [url]標籤上限 (超過上限時標籤為陷阱標籤[寫入至$URLTrapLog])
  15.         $this->URLTrapLog = './URLTrap.log'; // [url]陷阱標籤記錄檔
  16.     }
  17.  
  18.     function getModuleName(){
  19.         return 'mod_bbcode : 內文BBCode轉換';
  20.     }
  21.  
  22.     function getModuleVersionInfo(){
  23.         return '4th.Release.2 (v071109)';
  24.     }
  25.  
  26.     function autoHookPostInfo(&$postinfo){
  27.         $postinfo .= "<li>可使用 <a href='".$this->myPage."' rel='_blank'>BBCode</a></li>\n";
  28.     }
  29.  
  30.     function autoHookRegistBeforeCommit(&$name, &$email, &$sub, &$com, &$category, &$age, $dest, $resto, $imgWH){
  31.         $com = $this->_bb2html($com,$dest);
  32.     }
  33.  
  34.     function _bb2html($string, $dest){
  35.         $this->urlcount=0; // Reset counter
  36.         $string = preg_replace('#\[b\](.*?)\[/b\]#si', '<b>\1</b>', $string);
  37.         $string = preg_replace('#\[i\](.*?)\[/i\]#si', '<i>\1</i>', $string);
  38.         $string = preg_replace('#\[u\](.*?)\[/u\]#si', '<u>\1</u>', $string);
  39.         $string = preg_replace('#\[p\](.*?)\[/p\]#si', '<p>\1</p>', $string);
  40.  
  41.         $string = preg_replace('#\[color=(\S+?)\](.*?)\[/color\]#si', '<font color="\1">\2</font>', $string);
  42.  
  43.         $string = preg_replace('#\[s([1-7])\](.*?)\[/s([1-7])\]#si', '<font size="\1">\2</font>', $string);
  44.  
  45.         $string = preg_replace('#\[pre\](.*?)\[/pre\]#si', '<pre>\1</pre>', $string);
  46.         $string = preg_replace('#\[quote\](.*?)\[/quote\]#si', '<blockquote>\1</blockquote>', $string);
  47.  
  48.         if($this->URLTagMode){
  49.             $string=preg_replace_callback('#\[url\](https?|ftp)(://\S+?)\[/url\]#si', array(&$this, '_URLConv1'), $string);
  50.             $string=preg_replace_callback('#\[url\](\S+?)\[/url\]#si', array(&$this, '_URLConv2'), $string);
  51.             $string=preg_replace_callback('#\[url=(https?|ftp)(://\S+?)\](.*?)\[/url\]#si', array(&$this, '_URLConv3'), $string);
  52.             $string=preg_replace_callback('#\[url=(\S+?)\](.*?)\[/url\]#si', array(&$this, '_URLConv4'), $string);
  53.             $this->_URLExcced();
  54.         }
  55.  
  56.         $string = preg_replace('#\[email\](\S+?@\S+?\\.\S+?)\[/email\]#si', '<a href="mailto:\1">\1</a>', $string);
  57.  
  58.         $string = preg_replace('#\[email=(\S+?@\S+?\\.\S+?)\](.*?)\[/email\]#si', '<a href="mailto:\1">\2</a>', $string);
  59.         if (($this->ImgTagTagMode == 2) || ($this->ImgTagTagMode && !$dest)){
  60.             $string = preg_replace('#\[img\](([a-z]+?)://([^ \n\r]+?))\[\/img\]#si', '<img src="\1" border="0" alt="\1" />', $string);
  61.         }
  62.  
  63.         $string = preg_replace('#\[youtube\](.*?)\[/youtube\]#si', '<object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/\1"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/\1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object>', $string);
  64.  
  65.         return $string;
  66.     }
  67.  
  68.     function _URLConv1($m){
  69.         ++$this->urlcount;
  70.         return "<a href=\"$m[1]$m[2]\" rel=\"_blank\">$m[1]$m[2]</a>";
  71.     }
  72.  
  73.     function _URLConv2($m){
  74.         ++$this->urlcount;
  75.         return "<a href=\"http://$m[1]\" rel=\"_blank\">$m[1]</a>";
  76.     }
  77.  
  78.     function _URLConv3($m){
  79.         ++$this->urlcount;
  80.         return "<a href=\"$m[1]$m[2]\" rel=\"_blank\">$m[3]</a>";
  81.     }
  82.  
  83.     function _URLConv4($m){
  84.         ++$this->urlcount;
  85.         return "<a href=\"http://$m[1]\" rel=\"_blank\">$m[2]</a>";
  86.     }
  87.  
  88.     function _URLRevConv($m){
  89.         if($m[1]=='http' && $m[2]=='://'.$m[3]) {
  90.             return '[url]'.$m[3].'[/url]';
  91.         } elseif(($m[1].$m[2])==$m[3]) {
  92.             return '[url]'.$m[1].$m[2].'[/url]';
  93.         } else {
  94.             if($m[1]=='http')
  95.                 return '[url='.substr($m[2],3).']'.$m[3].'[/url]';
  96.             else
  97.                 return '[url='.$m[1].$m[2].']'.$m[3].'[/url]';
  98.         }
  99.     }
  100.  
  101.     function _EMailRevConv($m){
  102.         if($m[1]==$m[2]) return '[email]'.$m[1].'[/email]';
  103.         else return '[email='.$m[1].']'.$m[2].'[/email]';
  104.     }
  105.  
  106.     function _html2bb(&$string){
  107.         $string = preg_replace('#<b>(.*?)</b>#si', '[b]\1[/b]', $string);
  108.         $string = preg_replace('#<i>(.*?)</i>#si', '[i]\1[/i]', $string);
  109.         $string = preg_replace('#<u>(.*?)</u>#si', '[u]\1[/u]', $string);
  110.         $string = preg_replace('#<p>(.*?)</p>#si', '[p]\1[/p]', $string);
  111.  
  112.         $string = preg_replace('#<font color="(\S+?)">(.*?)</font>#si', '[color=\1]\2[/color]', $string);
  113.  
  114.         $string = preg_replace('#<font size="([1-7])">(.*?)</font>#si', '[s\1]\2[/s\1]', $string);
  115.  
  116.         $string = preg_replace('#<pre>(.*?)</pre>#si', '[pre]\1[/pre]', $string);
  117.         $string = preg_replace('#<blockquote>(.*?)</blockquote>#si', '[quote]\1[/quote]', $string);
  118.  
  119.         $string = preg_replace_callback('#<a href="(https?|ftp)(://\S+?)" rel="_blank">(.*?)</a>#si', array(&$this, '_URLRevConv'), $string);
  120.         $string = preg_replace_callback('#<a href="mailto:(\S+?@\S+?\\.\S+?)">(.*?)</a>#si', array(&$this, '_EMailRevConv'), $string);
  121.  
  122.         $string = preg_replace('#<img src="(([a-z]+?)://([^ \n\r]+?))" border="0" alt=".*?" />#si', '[img]\1[/img]', $string);
  123.  
  124.         $string = preg_replace('#<object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/(.*?)"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/(.*?)" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object>#si', '[youtube]\1[/youtube]', $string);
  125.     }
  126.  
  127.  
  128.     function _URLExcced(){
  129.         if($this->urlcount > $this->MaxURLCount) {
  130.               $fh = fopen($this->URLTrapLog, 'a+b');
  131.               fwrite($fh, time()."\t$_SERVER[REMOTE_ADDR]\t$cnt\n");
  132.               fclose($fh);
  133.               error("[url]標籤超過上限");
  134.         }
  135.     }
  136.  
  137.     function ModulePage(){
  138.         $dat='';$status='現時BBCode設定:<ul><li>[url]標籤行為 (0:不轉換 1:正常) - '.$this->URLTagMode.'</li><li>[url]標籤上限 (超過上限時標籤為陷阱標籤並寫入至記錄檔中) - '.$this->MaxURLCount.'</li><li>'._T('info_basic_urllinking').' '._T('info_0no1yes').' - '.AUTO_LINK.'</li><li>[img]標籤行為 (0:不轉換 1:無貼圖時轉換 2:常時轉換) - '.$this->ImgTagTagMode.'</li></ul>';
  139.         head($dat);
  140.         $dat.=<<<EOH
  141. $status
  142. BBCode 代碼包含一些標籤方便您快速的更改文字的基本形式. 這些可以分述如下:
  143. <ul><li>要製作一份粗體文字可使用 <b>[b][/b]</b>, 例如: <br/><br/><b>[b]</b>哈囉<b>[/b]</b><br/><br/>會變成<b>哈囉</b><br/><br/></li>
  144. <li>要使用底線時, 可使用<b>[u][/u]</b>, 例如:<br/><br/><b>[u]</b>早安<b>[/u]</b><br/><br/>會變成<u>早安</u><br/><br/></li>
  145. <li>要斜體顯示時, 可使用 <b>[i][/i]</b>, 例如:<br/><br/>這個真是 <b>[i]</b>棒呆了!<b>[/i]</b><br/><br/>將會變成 這個真是 <i>棒呆了!</i></li></ul>
  146.  
  147. 要在您的文章中修改文字顏色及大小需要使用以下的標籤. 請注意, 顯示的效果視您的瀏覽器和系統而定:
  148. <ul><li>更改文字色彩時, 可使用 <b>[color=][/color]</b>. 您可以指定一個可被辨識的顏色名稱(例如. red, blue, yellow, 等等.) 或是使用顏色編碼, 例如: #FFFFFF, #000000. 舉例來說, 要製作一份紅色文字您必須使用:<br/><br/><b>[color=red]</b>哈囉!<b>[/color]</b><br/><br/>或是<br/><br/><b>[color=#FF0000]</b>哈囉!<b>[/color]</b><br/><br/>都將顯示:<font color="red">哈囉!</font><br/><br/></li>
  149. <li>改變文字的大小也是使用類似的設定, 標籤為 <b>[s?][/s?]</b>. 起始值為 1 (細小) 到 7 為止 (巨大). 舉例說明:<br/><br/><b>[s1]</b>小不拉嘰<b>[/s1]</b><br/><br/>將會產生 <font size="1">小不拉嘰</font><br/><br/>當情形改變時:<br/><br/><b>[s7]</b>有夠大顆!<b>[/s7]</b><br/><br/>將會顯示 <font size="7">有夠大顆!</font></li></ul>
  150.  
  151. 可以結合不同的標籤功能: <br/>
  152. <ul><li>例如要吸引大家的注意時, 您可以使用:<br/><br/><b>[s5][color=red][b]</b>看我這兒!<b>[/b][/color][/s5]</b><br/><br/> 將會顯示出 <font size="5"><font color="red"><b>看我這兒!</b></font></font><br/>&nbsp;</li>
  153. <li>我們並不建議您顯示太多這類的文字! 但是這些還是由您自行決定. 在使用 BBCode 代碼時, 請記得要正確的關閉標籤, 以下就是錯誤的使用方式:<br/><br/><b>[b][u]</b>這是錯誤的示範<b>[/b][/u]</b></li></ul>
  154.  
  155. 如果您想要顯示一段程式代碼或是任何需要固定寬度的文字, 您必須使用 <b>[pre][/pre]</b> 標籤來包含這些文字, 例如:<br/><br/><b>[pre]</b>echo "這是代碼";<b>[/pre]</b><br/><br/>當您瀏覽時, 所有被 <b>[pre][/pre]</b> 標籤包含的文字格式都將保持不變.
  156.  
  157. 若一個完整的URL遵照此方式寫入至討論板,將會自動產生一個超連結連往該URL
  158. <ul><li>http://開頭的會自動成為超連結 (如果自動連結有啟用的話)</li>
  159.     <li>[url]可以做成一個超連結,請參考下例:<br/>
  160.                   <b>[url=http://php.s3.to]</b>按這裡<b>[/url]</b></li>
  161.     <li>下一個方式也有類似效果<br/>
  162.            <b>[url]</b>php.s3.to<b>[/url]</b>
  163.         <p>以上舉例說明中,自動產生了連結以刊登URL。使用者按下該連結將跳出一視窗。沒有"http://"是不能自動產生連結的。<br/>第二個方法裡可以省略"http://"。避免於URL中置入「"」記號,那可能會截斷網址。</p>
  164.     </li></ul>
  165. 為了加上Email的連結,請按照以下方式刊登郵址:
  166. <ul><li><b>[email]</b>php@php.4all.cc<b>[/email]</b></li>
  167. <li>下一個方式也可以做成一個Email連結<br/>
  168. <b>[email=php@php.4all.cc]</b>我的Email<b>[/email]</b></li>
  169. </ul>
  170.  
  171. BBCode 代碼提供標籤在您的文章中顯示圖像. 使用前, 請記住兩件重要的事;  第一, 許多使用者並不樂於見到文章中有太多的圖片, 第二, 您的圖片必須是能在網路上顯示的 (例如: 不能是您電腦上的檔案, 除非您的電腦是台網路伺服器). 若要顯示圖像, 可以使用 <b>[img][/img]</b> 標籤並指定圖像連結網址,  例如:<br/><br/><b>[img]</b>http://www.google.com/intl/en_com/images/logo_plain.png<b>[/img]</b><br/><br/>如同在先前網址連結的說明一樣, 您也可以使用圖片網址超連結 <b>[url][/url]</b> 的標籤, 例如:<br/><br/><b>[url=http://www.google.com/][img]</b>http://www.google.com/intl/en_com/images/logo_plain.png<b>[/img][/url]</b><br/><br/>將產生:<br/><br/><a href="http://www.google.com/" rel="_blank"><img src="http://www.google.com/intl/en_com/images/logo_plain.png" alt="http://www.google.com/intl/en_com/images/logo_plain.png" border="0" /></a>
  172. <hr/>
  173. EOH;
  174.         foot($dat);
  175.         echo $dat;
  176.     }
  177. }
  178. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement