OSDN Git Service

2.0.3 jp10
authorhsur <hsur@1ca29b6e-896d-4ea0-84a5-967f57386b96>
Fri, 29 Jun 2007 15:29:45 +0000 (15:29 +0000)
committerhsur <hsur@1ca29b6e-896d-4ea0-84a5-967f57386b96>
Fri, 29 Jun 2007 15:29:45 +0000 (15:29 +0000)
git-svn-id: https://svn.sourceforge.jp/svnroot/nucleus-jp/plugin@581 1ca29b6e-896d-4ea0-84a5-967f57386b96

trunk/NP_TrackBack/NP_TrackBack.php
trunk/NP_TrackBack/trackback/images/sort_asc.gif [deleted file]
trunk/NP_TrackBack/trackback/images/sort_desc.gif [deleted file]
trunk/NP_TrackBack/trackback/index.php
trunk/NP_TrackBack/trackback/japanese-euc.help.html
trunk/NP_TrackBack/trackback/japanese-euc.templates/all_ajax.html
trunk/NP_TrackBack/trackback/japanese-euc.templates/blocked_ajax.html
trunk/NP_TrackBack/trackback/japanese-utf8.help.html
trunk/NP_TrackBack/trackback/japanese-utf8.templates/all_ajax.html
trunk/NP_TrackBack/trackback/japanese-utf8.templates/blocked_ajax.html

index 252d615..c21c6c8 100644 (file)
        * ==========================================================================================
        */
 
+       class NP_TrackBack_XMLParser {
+               function NP_TrackBack_XMLParser(){
+                       $this->parser = xml_parser_create();
+                       xml_set_object($this->parser, $this);
+                       xml_set_element_handler($this->parser, "_open", "_close");
+                       xml_set_character_data_handler($this->parser, "_cdata");
+                       
+                       $this->isError = false;
+                       $this->inTarget = false;
+               }
+       
+               function parse($data){
+                       $this->words = array();
+                       xml_parse($this->parser, $data);
+                       $errcode = xml_get_error_code($this->parser);
+                   if ( $errcode != XML_ERROR_NONE ) {
+                       $this->isError = true;
+                               $this->message = 'XML Parse Error: ' . xml_error_string($errcode) . ' in '. xml_get_current_line_number($this->parser);
+                   }
+                       return $this->message;
+               }
+       
+               function free(){
+                       xml_parser_free($this->parser);
+               }
+       
+               function _open($parser, $name, $attribute){
+                       switch( $name ){
+                               case 'MESSAGE':
+                                       $this->inTarget = 'MESSAGE';
+                                       break;
+                               case 'ERROR':
+                                       $this->inTarget = 'ERROR';
+                                       break;
+                       }
+               }
+       
+               function _close($parser, $name){
+                       if( $name == $this->inTarget ) $this->inTarget = null;
+               }
+       
+               function _cdata($parser, $data){
+                       switch( $this->inTarget ){
+                               case 'MESSAGE':
+                                       $this->message = trim($data);
+                                       break;
+                               case 'ERROR':
+                                       $this->isError = ($data ? true : false);
+                                       break;
+                       }
+               }
+       }   
+   
        class NP_TrackBack extends NucleusPlugin {
                var $useCurl = 1; // use curl? 2:precheck+read by curl, 1: read by curl 0: fread
 
                        $this->doSkinVar('template', $what, $item->itemid);
                }
                
+               function doTemplateCommentsVar(&$item, &$comment, $what = ''){
+                       $this->doSkinVar('templatecomments', $what, $item->itemid);
+               }
+               
                /*
                * A trackback ping is to be received on the URL
                * http://yourdomain.com/item/1234.trackback
                        $content .= '&excerpt=' .       urlencode( $excerpt );
                        $content .= '&blog_name=' . urlencode( $blog_name );
        
-#                      $user_agent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)';
-                       $user_agent = 'NP_TrackBack/'. $this->getVersion();
-       
                        // 4. Prepare HTTP request
                        $request  = 'POST ' . $parsed_url['path'];
 
                                
                        $request .= " HTTP/1.1\r\n";
                        $request .= "Accept: */*\r\n";
-                       $request .= "User-Agent: " . $user_agent . "\r\n";
+                       $request .= "User-Agent: " . $this->userAgent . "\r\n";
                        $request .= ( $port == 80 )?
                                                                        "Host: " . $parsed_url['host'] . "\r\n":
                                                                        "Host: " . $parsed_url['host'] . ":" . $port . "\r\n";
-                       $request .= "Connection: Keep-Alive\r\n";
                        $request .= "Cache-Control: no-cache\r\n";
                        $request .= "Connection: Close\r\n";
                        $request .= "Content-Length: " . strlen( $content ) . "\r\n";
                        
                        fclose($socket);
        
-                       // instead of parsing the XML, just check for the error string
-                       // [TODO] extract real error message and return that
 //modify start+++++++++
-
-                       $DATA = split("\r\n\r\n", $result, 2);
-                       preg_match("/HTTP\/1\.[0-1] ([0-9]+) ([^\r\n]*)\r?\n/",$DATA[0],$httpresp);
+                       list($header, $body) = split("\r\n\r\n", $result, 2);
+                       preg_match("/HTTP\/1\.[0-1] ([0-9]+) ([^\r\n]*)\r?\n/", $header, $httpresp);
                        $respCd = $httpresp[1];
                        $respMsg = $httpresp[2];
 
                        if( $respCd != 200 ){
                                return 'An error occurred: HTTP Error: [' . $respCd . '] ' . $respMsg;
                        }
-                       if ( strstr($DATA[1],'<error>0</error>') === false ){
-                               preg_match("/<message>(.*?)<\/message>/",$DATA[1],$error_message);
-                               if( $error_message[1] )
-                                       return 'An error occurred: '.htmlspecialchars($error_message[1], ENT_QUOTES);
-                               else
-                                       return 'An error occurred: fatal error.';
+                       
+                       if( function_exists('xml_parser_create') ){
+                               $p = new NP_TrackBack_XMLParser();
+                               $p->parse($body);
+                               $p->free();
+                               if( $p->isError ){
+                                       return 'An error occurred: ' . htmlspecialchars($p->message, ENT_QUOTES);
+                               }
+                       } else {
+                               if ( strstr($DATA[1],'<error>0</error>') === false ){
+                                       preg_match("/<message>(.*?)<\/message>/",$DATA[1],$error_message);
+                                       if( $error_message[1] )
+                                               return 'An error occurred: '.htmlspecialchars($error_message[1], ENT_QUOTES);
+                                       else
+                                               return 'An error occurred: fatal error.';
+                               }
                        }
+                       
+                       return '';
                } 
 //modify end+++++++++
 
                        } 
                        else 
                        {
+//mod by cles
+                               // spam block
+                               $res = @sql_query('SELECT id FROM '.sql_table('plugin_tb').' WHERE block = 1 and url = \''.mysql_real_escape_string($url).'\'' );
+                               if (mysql_num_rows($res) != 0) {
+                                       // NP_Trackback has blocked tb !
+                                       ACTIONLOG :: add(INFO, "Trackback: Duplicated Blocked Trackback [ignore] (itemid:$tb_id from: $url)");
+                                       return 'Sorry, trackback ping is not accepted.';
+                               }
+//mod by cles end
+                                                       
                                // 4. SPAM check (for SpamCheck API 2 /w compat. API 1)
                                $spamcheck = array (
                                        'type'          => 'trackback',
                        {
                                for ($i = 0; $i < count($array); $i++)
                                {
-                                       //if( preg_match('/s?https?:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:@&=+$,%#]+/', $array[$i][1], $matches) )
-                                       if( preg_match('/s?https?:\/\/[-_.!~*\'()a-zA-Z0-9;\/:@&=+$,%]+/', $array[$i][1], $matches) )
+                                       if( preg_match('/s?https?:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:@&=+$,%#]+/', $array[$i][1], $matches) )
                                                $links[$matches[0]] = 1;
                                }
                        }
                                @curl_setopt($ch, CURLOPT_MAXREDIRS, 5);
                                @curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                                @curl_setopt($ch, CURLOPT_TIMEOUT, 20);
-                               @curl_setopt($ch, CURLOPT_USERAGENT, 'NP_TrackBack/'. $this->getVersion());
+                               @curl_setopt($ch, CURLOPT_USERAGENT, $this->userAgent);
 
                                $headers = curl_exec($ch);
                                curl_close($ch);
        
                function retrieveUrl ($url) {
 //mod by cles
-                       $ua = ini_set('user_agent', 'NP_TrackBack/'. $this->getVersion());
+                       $ua = ini_set('user_agent', $this->userAgent);
 //mod by cles end
                        if (function_exists('curl_init') && $this->useCurl > 0)
                        {
                                @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
                                @curl_setopt($ch, CURLOPT_MAXREDIRS, 5);
                                @curl_setopt($ch, CURLOPT_TIMEOUT, 20);
-                               @curl_setopt($ch, CURLOPT_USERAGENT, 'NP_TrackBack/'. $this->getVersion());
+                               @curl_setopt($ch, CURLOPT_USERAGENT, $this->userAgent);
                
                                // Retrieve response
                                $raw  = curl_exec($ch);
@@ -2230,8 +2301,7 @@ function _cut_string($string, $dl = 0) {
        return $string;
 }
 
-function _strip_controlchar($string){
-       $string = preg_replace("/[\x01-\x08\x0b\x0c\x0e-\x1f\x7f]+/","",$string);
+function _strip_controlchar($string){\r $string = preg_replace("/[\x01-\x08\x0b\x0c\x0e-\x1f\x7f]+/","",$string);
        $string = str_replace("\0","",$string);
        return $string;
 }
@@ -2478,13 +2548,15 @@ function _strip_controlchar($string){
                }
 
                function init() {
-      // include language file for this plugin 
-      $language = ereg_replace( '[\\|/]', '', getLanguageName()); 
-      if (file_exists($this->getDirectory().'language/'.$language.'.php')) 
-         include_once($this->getDirectory().'language/'.$language.'.php'); 
+                       // include language file for this plugin 
+                       $language = ereg_replace( '[\\|/]', '', getLanguageName()); 
+                       if (file_exists($this->getDirectory().'language/'.$language.'.php')) 
+                               include_once($this->getDirectory().'language/'.$language.'.php'); 
       else 
-         include_once($this->getDirectory().'language/'.'english.php'); 
-               $this->notificationMail = _TB_NORTIFICATION_MAIL_BODY;
-               $this->notificationMailTitle = _TB_NORTIFICATION_MAIL_TITLE;
-         }
+                               include_once($this->getDirectory().'language/'.'english.php'); 
+                       $this->notificationMail = _TB_NORTIFICATION_MAIL_BODY;
+                       $this->notificationMailTitle = _TB_NORTIFICATION_MAIL_TITLE;
+                       
+                       $this->userAgent = 'NucleusCMS NP_TrackBack plugin ( '.$this->getVersion().' )';
+               }
        }
diff --git a/trunk/NP_TrackBack/trackback/images/sort_asc.gif b/trunk/NP_TrackBack/trackback/images/sort_asc.gif
deleted file mode 100644 (file)
index 53a6dcf..0000000
Binary files a/trunk/NP_TrackBack/trackback/images/sort_asc.gif and /dev/null differ
diff --git a/trunk/NP_TrackBack/trackback/images/sort_desc.gif b/trunk/NP_TrackBack/trackback/images/sort_desc.gif
deleted file mode 100644 (file)
index 4fd1346..0000000
Binary files a/trunk/NP_TrackBack/trackback/images/sort_desc.gif and /dev/null differ
index b1752e3..ae07874 100644 (file)
@@ -28,8 +28,8 @@
                if (!$manager->checkTicket()) doError(_ERROR_BADTICKET);
        }
 
-       //$oPluginAdmin->start();
-       $oPluginAdmin->admin->pagehead();
+       $oPluginAdmin->start();
+       //$oPluginAdmin->admin->pagehead();
        
 //modify start+++++++++
                $plug =& $oPluginAdmin->plugin;
@@ -54,7 +54,7 @@
        $oTemplate->set ('CONF', $CONF);
        $oTemplate->set ('plugindirurl', $oPluginAdmin->plugin->getAdminURL());
        $oTemplate->set ('ticket', $manager->_generateTicket());
-       \r       $ajaxEnabled = ($oPluginAdmin->plugin->getOption('ajaxEnabled') == 'yes') ? true : false;
+       $ajaxEnabled = ($oPluginAdmin->plugin->getOption('ajaxEnabled') == 'yes') ? true : false;
        $oTemplate->set ('ajaxEnabled', $ajaxEnabled);
 
        switch($action) {
index 4c2d3dd..ce8e290 100644 (file)
@@ -150,12 +150,17 @@ div.tb div.info {
 <h3>ÆüËܸìÈǹ¹¿·ÍúÎò</h3>
 
 <ul>
-       <li>Version 2.0.3jp10 : (2007/**/**)</li>
+       <li>Version 2.0.3jp10 : (2007/06/30)</li>
        <li>¡¡[Fixed] mysql_query()¤òsql_query()¤ËÊѹ¹</li>
        <li>¡¡[Changed] ¼ÂÂλ²¾È¥Æ¡¼¥Ö¥ë¤Ë¤Ä¤¤¤ÆNucleusɸ½à¤â¤Î¤ò»È¤¦¤è¤¦¤Ë¤·¤¿</li>
        <li>¡¡[Changed] ¥¤¥ó¥¹¥È¡¼¥ë¤Ç¤­¤ë¥Ð¡¼¥¸¥ç¥ó¤ò3.3°Ê¹ß¤·¤¿</li>
        <li>¡¡[Changed] Rico¤ò2.0¤Ë¥¢¥Ã¥×¥Ç¡¼¥È¤·¤¿¤Î¤Ëȼ¤¤¡¢´ÉÍý²èÌ̤ε¡Ç½¤òÁý¶¯</li>
-       
+       <li>¡¡[Added] ¥³¥á¥ó¥ÈÉôʬ¤Ç¤â¥Æ¥ó¥×¥ì¡¼¥ÈÊÑ¿ô¤¬»È¤¨¤ë¤è¤¦¤Ë¤·¤¿</li>
+       <li>¡¡[Fixed] ¥È¥é¥Ã¥¯¥Ð¥Ã¥¯Á÷¿®Éôʬ¤ÎÉÔ¶ñ¹ç¤ò½¤Àµ(FC2Âкö)</li>
+       <li>¡¡[Changed] UserAgent¤ò¥ª¥ê¥¸¥Ê¥ëÈǤˤ¢¤ï¤»¤ÆÊѹ¹</li>
+       <li>¡¡[Changed] TrackBack¤Î¥ì¥¹¥Ý¥ó¥¹¤Î²òÀϤËXML¥Ñ¡¼¥µ¡¼¤ò»È¤¦¤è¤¦¤Ë¤·¤¿</li>
+       <li>¡¡[Fixed] ¸ÀµÚ¥ê¥ó¥¯¥Á¥§¥Ã¥¯¤ÎÉÔ¶ñ¹ç¤ò½¤Àµ</li>
+               
        <li>Version 2.0.3jp9 : (2007/05/04)</li>
        <li>¡¡[Added] doIf()¤òÄɲÃ(Nucleus 3.3¸þ¤±)</li>
        <li>¡¡[Added] URL¤¬Ìµ¸ú¤Ê¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤ò̵»ë¤¹¤ë¤è¤¦¤Ë¤·¤¿</li>
index 727e1d2..2a3659d 100644 (file)
@@ -30,8 +30,8 @@
 </table>
 
 ¾åµ­¤ÇÁªÂò¤·¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤ò°ì³ç¤·¤Æ½èÍý¤·¤Þ¤¹
-<a href="#" onclick="javascript: doDelete()"><img alt="Delete" border="0" src="<?php echo $plugindirurl?>silk/cross.png" /></a>
-<a href="#" onclick="javascript: doBlock()"><img alt="Block" border="0" src="<?php echo $plugindirurl?>silk/delete.png" /></a>
+<a href="javascript:doDelete()" onclick=""><img alt="Delete" border="0" src="<?php echo $plugindirurl?>silk/cross.png" /></a>
+<a href="javascript:doBlock()" onclick=""><img alt="Block" border="0" src="<?php echo $plugindirurl?>silk/delete.png" /></a>
 </div>
 
 <!--
@@ -66,7 +66,7 @@
                        saveColumnInfo   : {width:true, filter:false, sort:false}, 
                        menuEvent       : 'none',
                        frozenColumns   : 2,
-                       canSortDefault  : true,
+                       canSortDefault  : false,
                        canHideDefault  : true,
                        allowColResize  : true,
                        canFilterDefault: false,
index 08eff9f..2ad8d2a 100644 (file)
@@ -34,8 +34,8 @@
        </thead>
 </table>
 ¾åµ­¤ÇÁªÂò¤·¤¿¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤ò°ì³ç¤·¤Æ½èÍý¤·¤Þ¤¹
-<a href="#" onclick="javascript: doUnblock()"><img alt="Unblock" border="0" src="<?php echo $plugindirurl;?>silk/accept.png" /></a>
-<a href="#" onclick="javascript: doDelete()"><img alt="Delete" border="0" src="<?php echo $plugindirurl?>silk/cross.png" /></a>
+<a href="javascript:doUnBlock()" onclick=""><img alt="Unblock" border="0" src="<?php echo $plugindirurl;?>silk/accept.png" /></a>
+<a href="javascript:doDelete()" onclick=""><img alt="Delete" border="0" src="<?php echo $plugindirurl?>silk/cross.png" /></a>
 </div>
 
 <!--
@@ -70,7 +70,7 @@
                        saveColumnInfo   : {width:true, filter:false, sort:false}, 
                        menuEvent       : 'none',
                        frozenColumns   : 2,
-                       canSortDefault  : true,
+                       canSortDefault  : false,
                        canHideDefault  : true,
                        allowColResize  : true,
                        canFilterDefault: false,
index 80af01a..171c608 100644 (file)
@@ -150,12 +150,17 @@ div.tb div.info {
 <h3>日本語版更新履歴</h3>
 
 <ul>
-       <li>Version 2.0.3jp10 : (2007/**/**)</li>
+       <li>Version 2.0.3jp10 : (2007/06/30)</li>
        <li> [Fixed] mysql_query()をsql_query()に変更</li>
        <li> [Changed] 実体参照テーブルについてNucleus標準ものを使うようにした</li>
        <li> [Changed] インストールできるバージョンを3.3以降した</li>
        <li> [Changed] Ricoを2.0にアップデートしたのに伴い、管理画面の機能を増強</li>
-       
+       <li> [Added] コメント部分でもテンプレート変数が使えるようにした</li>
+       <li> [Fixed] トラックバック送信部分の不具合を修正(FC2対策)</li>
+       <li> [Changed] UserAgentをオリジナル版にあわせて変更</li>
+       <li> [Changed] TrackBackのレスポンスの解析にXMLパーサーを使うようにした</li>
+       <li> [Fixed] 言及リンクチェックの不具合を修正</li>
+               
        <li>Version 2.0.3jp9 : (2007/05/04)</li>
        <li> [Added] doIf()を追加(Nucleus 3.3向け)</li>
        <li> [Added] URLが無効なトラックバックを無視するようにした</li>
index 3e97be9..c1cbe43 100644 (file)
@@ -30,8 +30,8 @@
 </table>
 
 上記で選択したトラックバックを一括して処理します
-<a href="#" onclick="javascript: doDelete()"><img alt="Delete" border="0" src="<?php echo $plugindirurl?>silk/cross.png" /></a>
-<a href="#" onclick="javascript: doBlock()"><img alt="Block" border="0" src="<?php echo $plugindirurl?>silk/delete.png" /></a>
+<a href="javascript:doDelete()" onclick=""><img alt="Delete" border="0" src="<?php echo $plugindirurl?>silk/cross.png" /></a>
+<a href="javascript:doBlock()" onclick=""><img alt="Block" border="0" src="<?php echo $plugindirurl?>silk/delete.png" /></a>
 </div>
 
 <!--
@@ -66,7 +66,7 @@
                        saveColumnInfo   : {width:true, filter:false, sort:false}, 
                        menuEvent       : 'none',
                        frozenColumns   : 2,
-                       canSortDefault  : true,
+                       canSortDefault  : false,
                        canHideDefault  : true,
                        allowColResize  : true,
                        canFilterDefault: false,
index 344a9db..5ae2f1b 100644 (file)
@@ -34,8 +34,8 @@
        </thead>
 </table>
 上記で選択したトラックバックを一括して処理します
-<a href="#" onclick="javascript: doUnblock()"><img alt="Unblock" border="0" src="<?php echo $plugindirurl;?>silk/accept.png" /></a>
-<a href="#" onclick="javascript: doDelete()"><img alt="Delete" border="0" src="<?php echo $plugindirurl?>silk/cross.png" /></a>
+<a href="javascript:doUnBlock()" onclick=""><img alt="Unblock" border="0" src="<?php echo $plugindirurl;?>silk/accept.png" /></a>
+<a href="javascript:doDelete()" onclick=""><img alt="Delete" border="0" src="<?php echo $plugindirurl?>silk/cross.png" /></a>
 </div>
 
 <!--
@@ -70,7 +70,7 @@
                        saveColumnInfo   : {width:true, filter:false, sort:false}, 
                        menuEvent       : 'none',
                        frozenColumns   : 2,
-                       canSortDefault  : true,
+                       canSortDefault  : false,
                        canHideDefault  : true,
                        allowColResize  : true,
                        canFilterDefault: false,