Changeset 29

Show
Ignore:
Timestamp:
09/23/07 20:05:51 (6 years ago)
Author:
d0nut
Message:

many, many updates in trackback mod. bis step to 0.0.2

Location:
trackback
Files:
3 added
13 modified

Legend:

Unmodified
Added
Removed
  • trackback/de.xml

    r1 r29  
    33<language languagecode="de"> 
    44        <category name="wcf.acp.group"> 
    5                 <item name="wcf.acp.group.option.user.board.canThank"><![CDATA[Kann sich bedanken]]></item> 
    6                 <item name="wcf.acp.group.option.user.board.canThank.description"><![CDATA[Mitglieder dieser Benutzergruppe können sich fÃŒr BeitrÀge bedanken.]]></item> 
    7                 <item name="wcf.acp.group.option.user.board.canActivateThank"><![CDATA[Kann Bedankomat aktivieren]]></item> 
    8                 <item name="wcf.acp.group.option.user.board.canActivateThank.description"><![CDATA[Mitglieder dieser Benutzergruppe können den Bedankomat fÃŒr BeitrÀge aktivieren.]]></item> 
     5                <item name="wcf.acp.group.option.user.board.canTrackback"><![CDATA[Kann Trackbacks senden]]></item> 
     6                <item name="wcf.acp.group.option.user.board.canTrackback.description"><![CDATA[Mitglieder dieser Benutzergruppe könnnen Trackbacks zum automatischen Austausch von Nachrichten und Backlinks erstellen.]]></item> 
    97        </category> 
    108         
    119        <category name="wbb.thread"> 
    12                 <item name="wbb.thread.post.button.thank"><![CDATA[Bedanken]]></item> 
    13                 <item name="wbb.thread.post.thank.stats"><![CDATA[Es {if $postThanks[$messageID].users|isset && $postThanks[$messageID].guests|isset}haben{else}{if $postThanks[$messageID].users|isset}{if $postThanks[$messageID].users|count == 1}hat{else}haben{/if}{/if}{if $postThanks[$messageID].guests|isset}{if $postThanks[$messageID].guests == 1}hat{else}haben{/if}{/if}{/if} sich bereits {if $postThanks[$messageID].users|isset}{@$postThanks[$messageID].users|count} registrierte{if $postThanks[$messageID].users|count == 1}r{/if} Benutzer{if $postThanks[$messageID].guests|isset} und{/if}{/if}{if $postThanks[$messageID].guests|isset} {@$postThanks[$messageID].guests} {if $postThanks[$messageID].guests == 1}Gast{else}GÀste{/if}{/if} bedankt.]]></item> 
    14                 <item name="wbb.thread.post.thank.users"><![CDATA[Benutzer die sich bedankten:]]></item> 
     10                <item name="wbb.thread.post.trackbacks"><![CDATA[Trackbacks]]></item> 
     11                <item name="wbb.thread.post.trackback.blog_name"><![CDATA[Blog]]></item> 
     12                <item name="wbb.thread.post.trackback.title"><![CDATA[Titel]]></item> 
     13                <item name="wbb.thread.post.trackback.excerpt"><![CDATA[Ausschnitt]]></item> 
     14                <item name="wbb.thread.post.trackback.url"><![CDATA[URL]]></item> 
    1515        </category> 
    1616         
    1717        <category name="wbb.threadAdd"> 
    18                 <item name="wbb.threadAdd.settings.hastThank"><![CDATA[Bedankomat aktivieren]]></item> 
    19                 <item name="wbb.threadAdd.settings.hastThank.description"><![CDATA[Den Bedankomat fÃŒr diesen Beitrag aktivieren.]]></item> 
     18                <item name="wbb.threadAdd.settings.hasTrackback"><![CDATA[Trackback aktivieren]]></item> 
     19                <item name="wbb.threadAdd.settings.hasTrackback.description"><![CDATA[]]></item> 
     20                <item name="wbb.threadAdd.settings.trackbackUrls"><![CDATA[Trackbacks senden an]]></item> 
     21                <item name="wbb.threadAdd.settings.trackbackUrls.description"><![CDATA[Mehrere URLs trennen Sie bitte mit einem Zeilenumbruch.]]></item> 
    2022        </category> 
    2123</language> 
  • trackback/en.xml

    r1 r29  
    33<language languagecode="en"> 
    44        <category name="wcf.acp.group"> 
    5                 <item name="wcf.acp.group.option.user.board.canThank"><![CDATA[Can thank]]></item> 
    6                 <item name="wcf.acp.group.option.user.board.canThank.description"><![CDATA[Members of this usergroup can thank other users for their posts.]]></item> 
    7                 <item name="wcf.acp.group.option.user.board.canActivateThank"><![CDATA[Can activate thank'o'mat]]></item> 
    8                 <item name="wcf.acp.group.option.user.board.canActivateThank.description"><![CDATA[Members of this usergroup can activate the thank'o'mat for posts.]]></item> 
     5                <item name="wcf.acp.group.option.user.board.canTrackback"><![CDATA[Can send trackbacks]]></item> 
     6                <item name="wcf.acp.group.option.user.board.canTrackback.description"><![CDATA[Members of this group can send trackbacks for an automated exhcange of messages and backlinks.]]></item> 
    97        </category> 
    108         
    119        <category name="wbb.thread"> 
    12                 <item name="wbb.thread.post.button.thank"><![CDATA[Thank]]></item> 
    13                 <item name="wbb.thread.post.thank.stats"><![CDATA[{if $postThanks[$messageID].users|isset}{@$postThanks[$messageID].users|count} registered user{if $postThanks[$messageID].users|count != 1}s{/if} {if $postThanks[$messageID].guests|isset}and {/if}{/if}{if $postThanks[$messageID].guests|isset}{@$postThanks[$messageID].guests} guest{if $postThanks[$messageID].guests != 1}s{/if} {/if}thanked already.]]></item> 
    14                 <item name="wbb.thread.post.thank.users"><![CDATA[Users that thanked:]]></item> 
     10                <item name="wbb.thread.post.trackbacks"><![CDATA[Trackbacks]]></item> 
     11                <item name="wbb.thread.post.trackback.title"><![CDATA[Title]]></item> 
     12                <item name="wbb.thread.post.trackback.excerpt"><![CDATA[Excerpt]]></item> 
     13                <item name="wbb.thread.post.trackback.url"><![CDATA[URL]]></item> 
     14                <item name="wbb.thread.post.trackback.blog_name"><![CDATA[Blog]]></item> 
    1515        </category> 
    1616         
    1717        <category name="wbb.threadAdd"> 
    18                 <item name="wbb.threadAdd.settings.hastThank"><![CDATA[Activate thank'o'mat]]></item> 
    19                 <item name="wbb.threadAdd.settings.hastThank.description"><![CDATA[Activate the thank'o'mat for this post.]]></item> 
     18                <item name="wbb.threadAdd.settings.hasTrackback"><![CDATA[activete trackbacks]]></item> 
     19                <item name="wbb.threadAdd.settings.hasTrackback.description"><![CDATA[]]></item> 
     20                <item name="wbb.threadAdd.settings.trackbackUrls"><![CDATA[send trackbacks to]]></item> 
     21                <item name="wbb.threadAdd.settings.trackbackUrls.description"><![CDATA[Please divide multiple urls with a linebreak.]]></item> 
    2022        </category> 
    2123</language> 
  • trackback/files/lib/action/TrackbackAction.class.php

    r1 r29  
    66require_once(WBB_DIR.'lib/data/thread/Thread.class.php'); 
    77 
     8// Trackback Util 
     9require_once(WBB_DIR.'lib/util/TrackbackUtil.class.php'); 
     10 
    811/** 
    912 * adds new trackback 
     
    1114 * @author      Torben Brodt 
    1215 * @package     de.easy-coding.wbb.trackback 
     16 * @license     GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php> 
    1317 */ 
    1418class TrackbackAction extends AbstractAction { 
     
    8185                        throw new IllegalLinkException(); 
    8286                } 
     87                 
     88                // fetch url data 
     89                $row = TrackbackUtil::getPost($this->postID); 
    8390 
    8491                // check for spam                
     
    8996                        ( 
    9097                                        postID,  
     98                                        postURL, 
    9199                                        title, 
    92100                                        excerpt,  
     
    96104                        ) VALUES ( 
    97105                                        {$this->postID},  
    98                                         {$this->title}, 
    99                                         {$this->excerpt}, 
    100                                         {$this->url}, 
    101                                         {$this->blog_name}, 
    102                                         {$isSpam} 
     106                                        '".escapeString($row['url'])."', 
     107                                        '".escapeString($this->title)."', 
     108                                        '".escapeString($this->excerpt)."', 
     109                                        '".escapeString($this->url)."', 
     110                                        '".escapeString($this->blog_name)."', 
     111                                        $isSpam} 
    103112                        );"; 
    104113 
  • trackback/files/lib/system/cronjob/TrackbackCheckCronjob.class.php

    r1 r29  
    11<?php 
     2// WCF include 
    23require_once(WCF_DIR.'lib/data/cronjobs/Cronjob.class.php'); 
    34 
     
    78 * @author      Torben Brodt 
    89 * @package     de.easy-coding.wcf.trackback 
     10 * @license     GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php> 
    911 */ 
    1012class TrackbackCheckCronjob implements Cronjob { 
     
    6466                        } 
    6567                         
    66                         $sql_update = "UPDATE   wcf".WCF_N."_trackback 
     68                        $sql = "UPDATE  wcf".WCF_N."_trackback 
    6769                                SET  
    6870                                                checked = NOW() 
     
    7173                                AND             url = {$row[url]}; "; 
    7274 
    73                         WCF::getDB()->sendQuery($sql_update); 
     75                        WCF::getDB()->sendQuery($sql); 
    7476                } 
    7577        } 
  • trackback/files/lib/system/event/listener/ThreadAddFormTrackbackListener.class.php

    r1 r29  
    22// WCF include 
    33require_once(WCF_DIR.'lib/system/event/EventListener.class.php'); 
     4 
     5// Utils 
     6require_once(WBB_DIR.'lib/util/TrackbackUtil.class.php'); 
    47 
    58/** 
     
    811 * @author      Torben Brodt 
    912 * @package     de.easy-coding.wbb.trackback 
     13 * @license     GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php> 
    1014 */ 
    1115class ThreadAddFormTrackbackListener implements EventListener { 
    12         protected $rewriter; //public seo rewriter (optional) 
    13  
    1416        protected $eventObj; 
    1517        protected $className; 
     
    2426         * @see EventListener::execute() 
    2527         */ 
    26         public function execute($eventObj, $className, $eventName) { 
    27                 // init rewriter 
    28                 if(((defined('SEO_REWRITE_BOARD') && SEO_REWRITE_BOARD) || (defined('SEO_REWRITE_THREAD') && SEO_REWRITE_THREAD)) && file_exists(WCF_DIR.'lib/page/PublicSEORewriter.class.php')) { 
    29                         require_once(WCF_DIR.'lib/page/PublicSEORewriter.class.php'); 
    30                         $this->rewriter = new PublicSEORewriter(); 
    31                 } 
    32                  
     28        public function execute($eventObj, $className, $eventName) {             
    3329                $this->eventObj = $eventObj; 
    3430                $this->className = $className; 
     
    7571         */ 
    7672        protected function assignVariables () { 
    77                 WBBCore::getTPL()->assign('hasTrackback', $this->hasTrackback); 
    78                 WBBCore::getTPL()->assign('trackbackUrls', $this->trackbackUrls); 
    79  
     73                WBBCore::getTPL()->assign(array( 
     74                                'hasTrackback' => $this->hasTrackback, 
     75                                'trackbackUrls', $this->trackbackUrls 
     76                        )); 
    8077                WBBCore::getTPL()->append('additionalSettings', WBBCore::getTPL()->fetch('postTrackbackSetting')); 
    8178        } 
     
    120117         */ 
    121118        private function readTrackbackData($postID) { 
    122                 // fetch thread data 
    123                 $sql = "SELECT          thread.* 
    124                         FROM            wbb".WBB_N."_post post 
    125                         LEFT JOIN       wbb".WBB_N."_thread thread 
    126                         ON              (thread.threadID=post.threadID) 
    127                         WHERE           postID = {$postID}; "; 
     119                // fetch data 
     120                $row = TrackbackUtil::getPost($postID); 
    128121 
    129                 $result = WCF::getDB()->sendQuery($sql); 
    130                 $row = WCF::getDB()->fetchArray($result)); 
    131                  
    132                 // basic data 
    133                 $this->title = $row['topic']; 
     122                // assign basic data 
     123                $this->title = $row['topic']; 
    134124                $this->excerpt = substr($row['firstPostPreview'],0,255); 
    135125                $this->author = $row['username']; 
    136  
    137                 // build thread url 
    138                 if($this->rewriter === null) { 
    139                         $this->url = sprintf('index.php?page=Thread&threadID=%d', $row['threadID']); 
    140                 } else { 
    141                         // public seo rewriter: cache 
    142                         $this->rewriter->publicCacheThreads($row['threadID'], $row); 
    143                          
    144                         // public seo rewriter use 
    145                         $this->url = $this->rewriter->publicParseThreadURLs($row['threadID'], ''); 
    146                 } 
     126                $this->url = $row['url']; 
    147127        } 
    148128         
     
    152132        private function discoverNewTrackbacks() { 
    153133                $oldlist = explode(' ', $this->trackbackUrlsOld); 
    154          
    155                 // WCF includes 
    156                 require_once(WCF_DIR.'lib/util/TrackbackUtil.class.php'); 
    157134                 
    158135                // Trackback 
  • trackback/files/lib/system/event/listener/ThreadPageTrackbackListener.class.php

    r1 r29  
    22// WCF includes 
    33require_once(WCF_DIR.'lib/system/event/EventListener.class.php'); 
     4 
     5// Utils 
     6require_once(WBB_DIR.'lib/util/TrackbackUtil.class.php'); 
    47 
    58/** 
     
    811 * @author      Torben Brodt 
    912 * @package     de.easy-coding.wbb.trackback 
     13 * @license     GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php> 
    1014 */ 
    1115class ThreadPageTrackbackListener implements EventListener { 
    12         protected $rewriter; //public seo rewriter (optional) 
    13         protected $trackbacks = array(); 
    14  
    15         protected $url, $title, $excerpt, $author, $date; 
    1616 
    1717        /** 
     
    2020         */ 
    2121        public function execute($eventObj, $className, $eventName) { 
     22                $postTrackbacks = array(); 
    2223 
    2324                // foreign trackbacks 
     
    2829                $rows = WBBCore::getDB()->sendQuery($sql); 
    2930                while ($row = WBBCore::getDB()->fetchArray($rows)) { 
    30                         $this->trackbacks[$row['postID']]['trackback'] = $row; 
    31                 } 
    32  
    33                 // fetch thread data 
    34                 $sql = "SELECT          thread.* 
    35                         FROM            wbb".WBB_N."_post post 
    36                         LEFT JOIN       wbb".WBB_N."_thread thread 
    37                         ON              (thread.threadID=post.threadID) 
    38                         WHERE           postID IN (".$eventObj->postList->postIDs."); "; 
    39  
    40                 $result = WCF::getDB()->sendQuery($sql); 
    41                 $row = WCF::getDB()->fetchArray($result)); 
    42                  
    43                 // basic data 
    44                 $this->title = $row['topic']; 
    45                 $this->excerpt = substr($row['firstPostPreview'],0,255); 
    46                 $this->author = $row['username']; 
    47                 $this->date = date("r", $row['time']); 
    48                 $this->trackbackUrl = sprintf('index.php?action=Trackback&threadID=%d', $row['threadID']); 
    49  
    50                 // build thread url 
    51                 if($this->rewriter === null) { 
    52                         $this->url = sprintf('index.php?page=Thread&threadID=%d', $row['threadID']); 
    53                 } else { 
    54                         // public seo rewriter: cache 
    55                         $this->rewriter->publicCacheThreads($row['threadID'], $row); 
    56                          
    57                         // public seo rewriter use 
    58                         $this->url = $this->rewriter->publicParseThreadURLs($row['threadID'], ''); 
     31                        $postTrackbacks[$row['postID']] = $row; 
    5932                } 
    6033                 
    61                 // WCF includes 
    62                 require_once(WCF_DIR.'lib/util/TrackbackUtil.class.php'); 
     34                // fetch data 
     35                $row = TrackbackUtil::getPost($eventObj->postList->postIDs); 
     36 
     37                // assign basic data 
     38                $title = $row['topic']; 
     39                $excerpt = StringUtil::substring($row['firstPostPreview'],0,255); 
     40                $author = $row['username']; 
     41                $date = date("r", $row['time']); 
     42                $trackbackUrl = sprintf('index.php?action=Trackback&threadID=%d', $row['threadID']); 
     43                $url = $row['url']; 
    6344 
    6445                // Trackback 
    6546                $trackback = new TrackbackUtil(PAGE_TITLE, $this->author, CHARSET); 
    66                 $rdf = $trackback->rdf_autodiscover($this->date, $this->title, $this->excerpt, $this->url, $this->trackbackUrl, $this->author); 
     47                $rdf = $trackback->rdf_autodiscover($date, $title, $excerpt, $url, $trackbackUrl, $author); 
    6748 
    6849                WBBCore::getTPL()->assign(array( 
    69                         'trackbacks' => $this->trackbacks, 
     50                        'postTrackbacks' => $postTrackbacks, 
    7051                        'autodiscover'=> $rdf 
    7152                )); 
  • trackback/files/lib/util/TrackbackUtil.class.php

    r1 r29  
    11<?php 
     2// Utils 
     3require_once(WBB_DIR.'lib/util/Trackback.class.php'); 
    24 
    35/** 
    4  * PHP Class to handle TrackBacks (send/ping, receive, retreive, detect, seed, etc...) 
    5  *  
    6  * @license http://opensource.org/licenses/gpl-license.php GNU General Public License (GPL) 
    7  *  
    8  * @param string $blog_name  
    9  * @param string $author  
    10  * @param string $encoding  
     6 * trackback util 
     7 * 
     8 * @author      Torben Brodt 
     9 * @package     de.easy-coding.wbb.trackback 
     10 * @license     GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php> 
    1111 */ 
    12 class TrackbackUtil { 
    13     private $blog_name = ''; // Default blog name used throughout the class (ie. BLOGish) 
    14     private $author = ''; // Default author name used throughout the class (ie. Ran Aroussi) 
    15     private $encoding = ''; // Default encoding used throughout the class (ie. UTF-8) 
    16     private $get_id = ''; // Retreives and holds $_GET['id'] (if not empty) 
    17     private $post_id = ''; // Retreives and holds $_POST['id'] (if not empty) 
    18     private $url = ''; // Retreives and holds $_POST['url'] (if not empty) 
    19     private $title = ''; // Retreives and holds $_POST['title'] (if not empty) 
    20     private $expert = ''; // Retreives and holds $_POST['expert'] (if not empty) 
     12class TrackbackUtil extends Trackback { 
    2113 
    22     /** 
    23      * Class Constructure 
    24      *  
    25      * @param string $blog_name  
    26      * @param string $author  
    27      * @param string $encoding  
    28      * @return  
    29      */ 
    30     public function __construct($blog_name, $author, $encoding = "UTF-8") 
    31     { 
    32         $this->blog_name = $blog_name; 
    33         $this->author = $author; 
    34         $this->encoding = $encoding;  
     14        /** 
     15         * Produces XML response for trackbackers with ok/error message. 
     16         *  
     17         * @param boolean $success  
     18         * @param string $err_response  
     19         * @return boolean  
     20         */ 
     21        public function receive($success = false, $err_response = ""){  
     22                return parent::recieve($cussess, $err_response); 
     23        } 
     24         
     25        /** 
     26         * @param postIDs 
     27         * @return u 
     28         */ 
     29        public getPost($postIDs) { 
     30                if(!is_array($postIDs)) 
     31                        $postIDs = array($postIDs); 
     32         
     33                // fetch thread data 
     34                $sql = "SELECT          thread.* 
     35                        FROM            wbb".WBB_N."_post post 
     36                        LEFT JOIN       wbb".WBB_N."_thread thread 
     37                        ON              (thread.threadID=post.threadID) 
     38                        WHERE           postID IN (".$postIDs."); "; 
     39 
     40                $row = WCF::getDB()->getFirstRow($sql); 
     41                                 
     42                // build thread url 
     43                if($row && defined('SEO_REWRITE_THREAD') && SEO_REWRITE_THREAD && file_exists(WCF_DIR.'lib/page/PublicSEORewriter.class.php')) { 
     44                        require_once(WCF_DIR.'lib/page/PublicSEORewriter.class.php'); 
     45                        $rewriter = new PublicSEORewriter(); 
     46                         
     47                        // public seo rewriter: cache 
     48                        $rewriter->publicCacheThreads($row['threadID'], $row); 
     49                         
     50                        // public seo rewriter use 
     51                        return $rewriter->publicParseThreadURLs($row['threadID'], ''); 
     52                } 
     53                else if($row) { 
     54                        return sprintf('index.php?page=Thread&threadID=%d', $row['threadID']); 
     55                } 
    3556                 
    36         // Gather $_POST information 
    37         if (isset($_GET['id'])) { 
    38             $this->get_id = $HTTP_GET_VARS['id']; 
    39         }  
    40         if (isset($_POST['id'])) { 
    41             $this->post_id = $HTTP_POST_VARS['id']; 
    42         }  
    43         if (isset($_POST['url'])) { 
    44             $this->url = $HTTP_POST_VARS['url']; 
    45         }  
    46         if (isset($_POST['title'])) { 
    47             $this->title = $HTTP_POST_VARS['url']; 
    48         }  
    49         if (isset($_POST['expert'])) { 
    50             $this->expert = $HTTP_POST_VARS['expert']; 
    51         }  
    52     }  
    53  
    54     /** 
    55      * Sends a trackback ping to a specified trackback URL. 
    56      * allowing clients to auto-discover the TrackBack Ping URL.  
    57      *  
    58      * <code><?php 
    59      * include('trackback_cls.php'); 
    60      * $trackback = new Trackback('BLOGish', 'Ran Aroussi', 'UTF-8'); 
    61      * if ($trackback->ping('http://tracked-blog.com', 'http://your-url.com', 'Your entry title')) { 
    62      *  echo "Trackback sent successfully..."; 
    63      * } else { 
    64      *  echo "Error sending trackback...."; 
    65      * } 
    66      * ?></code> 
    67      *  
    68      * @param string $tb  
    69      * @param string $url  
    70      * @param string $title  
    71      * @param string $excerpt  
    72      * @return boolean  
    73      */ 
    74     public function ping($tb, $url, $title = "", $excerpt = "") 
    75     { 
    76         $response = ""; 
    77         $reason = "";  
    78         // Set default values 
    79         if (empty($title)) { 
    80             $title = "Trackbacking your entry..."; 
    81         }  
    82         if (empty($excerpt)) { 
    83             $excerpt = "I found your entry interesting do I've added a Trackback to it on my weblog :)"; 
    84         }  
    85         // Parse the target 
    86         $target = parse_url($tb); 
    87  
    88         if ((isset($target["query"])) && ($target["query"] != "")) { 
    89             $target["query"] = "?" . $target["query"]; 
    90         } else { 
    91             $target["query"] = ""; 
    92         }  
    93  
    94         if ((isset($target["port"]) && !is_numeric($target["port"])) || (!isset($target["port"]))) { 
    95             $target["port"] = 80; 
    96         }  
    97         // Open the socket 
    98         $tb_sock = fsockopen($target["host"], $target["port"]);  
    99         // Something didn't work out, return 
    100         if (!is_resource($tb_sock)) { 
    101             return '$trackback->ping: can\'t connect to: ' . $tb . '.'; 
    102             exit; 
    103         }  
    104         // Put together the things we want to send 
    105         $tb_send = "url=" . rawurlencode($url) . "&title=" . rawurlencode($title) . "&blog_name=" . rawurlencode($this->blog_name) . "&excerpt=" . rawurlencode($excerpt);  
    106         // Send the trackback 
    107         fputs($tb_sock, "POST " . $target["path"] . $target["query"] . " HTTP/1.1\r\n"); 
    108         fputs($tb_sock, "Host: " . $target["host"] . "\r\n"); 
    109         fputs($tb_sock, "Content-type: application/x-www-form-urlencoded\r\n"); 
    110         fputs($tb_sock, "Content-length: " . strlen($tb_send) . "\r\n"); 
    111         fputs($tb_sock, "Connection: close\r\n\r\n"); 
    112         fputs($tb_sock, $tb_send);  
    113         // Gather result 
    114         while (!feof($tb_sock)) { 
    115             $response .= fgets($tb_sock, 128); 
    116         }  
    117         // Close socket 
    118         fclose($tb_sock);  
    119         // Did the trackback ping work 
    120         strpos($response, '<error>0</error>') ? $return = true : $return = false;  
    121         // send result 
    122         return $return; 
    123     }  
    124  
    125     /** 
    126      * Produces XML response for trackbackers with ok/error message. 
    127      *  
    128      * <code><?php 
    129      * // Set page header to XML 
    130      * header('Content-Type: text/xml'); // MUST be the 1st line 
    131      * // 
    132          * // Instantiate the class 
    133          * // 
    134      * include('trackback_cls.php'); 
    135      * $trackback = new Trackback('BLOGish', 'Ran Aroussi', 'UTF-8'); 
    136          * // 
    137      * // Get trackback information 
    138          * // 
    139      * $tb_id = $trackback->post_id; // The id of the item being trackbacked 
    140      * $tb_url = $trackback->url; // The URL from which we got the trackback 
    141      * $tb_title = $trackback->title; // Subject/title send by trackback 
    142      * $tb_expert = $trackback->expert; // Short text send by trackback 
    143          * //   
    144      * // Do whatever to log the trackback (save in DB, flatfile, etc...) 
    145          * // 
    146      * if (TRACKBACK_LOGGED_SUCCESSFULLY) { 
    147      *  // Logged successfully... 
    148      *  echo $trackback->recieve(true); 
    149      * } else { 
    150      *  // Something went wrong... 
    151      *  echo $trackback->recieve(false, 'Explain why you return error'); 
    152      * } 
    153      * ?></code> 
    154      *  
    155      * @param boolean $success  
    156      * @param string $err_response  
    157      * @return boolean  
    158      */ 
    159     public function recieve($success = false, $err_response = "") 
    160     {  
    161         // Default error response in case of problems... 
    162         if (!$success && empty($err_response)) { 
    163             $err_response = "An error occured while tring to log your trackback..."; 
    164         }  
    165         // Start response to trackbacker... 
    166         $return = '<?xml version="1.0" encoding="' . $this->encoding . '"?>' . "\n"; 
    167         $return .= "<response> \n";  
    168         // Send back response... 
    169         if ($success) { 
    170             // Trackback received successfully... 
    171             $return .= "        <error>0</error> \n"; 
    172         } else { 
    173             // Something went wrong... 
    174             $return .= "        <error>1</error> \n"; 
    175             $return .= "        <message>" . $this->xml_safe($err_response) . "</message>\n"; 
    176         }  
    177         // End response to trackbacker... 
    178         $return .= "</response>"; 
    179  
    180         return $return; 
    181     }  
    182  
    183     /** 
    184      * Feteched trackback information and produces an RSS-0.91 feed. 
    185      *  
    186      * <code><?php 
    187      * // 1 
    188      * header('Content-Type: text/xml'); // MUST be the 1st line 
    189      * // 2 
    190      * include('trackback_cls.php'); 
    191      * $trackback = new Trackback('BLOGish', 'Ran Aroussi', 'UTF-8'); 
    192      * // 3 
    193      * $tb_id = $trackback->get_id; 
    194      * // 4 
    195      * Do whatever to get trackback information by ID (search db, etc...) 
    196      * if (GOT_TRACKBACK_INFO) { 
    197      *  // Successful - pass trackback info as array()... 
    198      *  $tb_info = array('title' => string TRACKBACK_TITLE,  
    199      *                  'expert'        => string TRACKBACK_EXPERT, 
    200      *                  'permalink' => string PERMALINK_URL, 
    201      *                  'trackback' => string TRACKBACK_URL 
    202      *          ); 
    203      *  echo $trackback->fetch(true, $tb_info); 
    204      * } else { 
    205      *  // Something went wrong - tell my why... 
    206      *  echo $trackback->fetch(false, string RESPONSE); 
    207      * } 
    208      * ?></code> 
    209      *  
    210      * @param boolean $success  
    211      * @param string $response  
    212      * @return string XML response to the caller 
    213      */ 
    214     public function fetch($success = false, $response = "") 
    215     { 
    216         if (!$success && empty($response)) { 
    217             $response = "An error occured while tring to retreive trackback information..."; 
    218         }  
    219         // Start response to caller 
    220         $return = '<?xml version="1.0" encoding="' . $this->encoding . '"?>' . "\n"; 
    221         $return .= "<response> \n";  
    222         // Send back response... 
    223         if ($success) { 
    224             // Trackback retreived successfully... 
    225             // Sending back an RSS (0.91) - trackback information from $response (array)... 
    226             $return .= "        <error>0</error> \n"; 
    227             $return .= "        <rss version=\"0.91\"> \n"; 
    228             $return .= "        <channel> \n"; 
    229             $return .= "          <title>" . $this->xml_safe($response['title']) . "</title> \n"; 
    230             $return .= "          <link>" . $this->xml_safe($response['trackback']) . "</link> \n"; 
    231             $return .= "          <description>" . $this->xml_safe($response['expert']) . "</description> \n"; 
    232             $return .= "          <item> \n"; 
    233             $return .= "                <title>" . $this->xml_safe($response['title']) . "</title> \n"; 
    234             $return .= "                <link>" . $this->xml_safe($response['permalink']) . "</link> \n"; 
    235             $return .= "                <description>" . $this->xml_safe($response['expert']) . "</description> \n"; 
    236             $return .= "          </item> \n"; 
    237             $return .= "        </channel> \n"; 
    238             $return .= "        </rss> \n"; 
    239         } else { 
    240             // Something went wrong - provide reason from $response (string)... 
    241             $return .= "        <error>1</error> \n"; 
    242             $return .= "        <message>" . $this->xml_safe($response) . "</message>\n"; 
    243         }  
    244         // End response to trackbacker 
    245         $return .= "</response>"; 
    246  
    247         return $return; 
    248     }  
    249  
    250     /** 
    251      * Produces embedded RDF representing metadata about the entry, 
    252      * allowing clients to auto-discover the TrackBack Ping URL. 
    253      *  
    254      * NOTE: DATE should be string in RFC822 Format - Use RFC822_from_datetime(). 
    255      *  
    256      * <code><?php 
    257      * include('trackback_cls.php'); 
    258      * $trackback = new Trackback('BLOGish', 'Ran Aroussi', 'UTF-8'); 
    259      *  
    260      * echo $trackback->rdf_autodiscover(string DATE, string TITLE, string EXPERT, string PERMALINK, string TRACKBACK [, string AUTHOR]); 
    261      * ?></code> 
    262      *  
    263      * @param string $RFC822_date  
    264      * @param string $title  
    265      * @param string $expert  
    266      * @param string $permalink  
    267      * @param string $trackback  
    268      * @param string $author  
    269      * @return string  
    270      */ 
    271     public function rdf_autodiscover($RFC822_date, $title, $expert, $permalink, $trackback, $author = "") 
    272     { 
    273         if (!$author) { 
    274             $author = $this->author; 
    275         }  
    276  
    277         $return = "<!-- \n"; 
    278         $return .= "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" \n"; 
    279         $return .= "    xmlns:dc=\"http://purl.org/dc/elements/1.1/\" \n"; 
    280         $return .= "    xmlns:trackback=\"http://madskills.com/public/xml/rss/module/trackback/\"> \n"; 
    281         $return .= "<rdf:Description \n"; 
    282         $return .= "    rdf:about=\"" . $this->xml_safe($permalink) . "\" \n"; 
    283         $return .= "    dc:identifier=\"" . $this->xml_safe($permalink) . "\" \n"; 
    284         $return .= "    trackback:ping=\"" . $this->xml_safe($trackback) . "\" \n"; 
    285         $return .= "    dc:title=\"" . $this->xml_safe($title) . "\" \n"; 
    286         $return .= "    dc:subject=\"TrackBack\" \n"; 
    287         $return .= "    dc:description=\"" . $this->xml_safe($this->cut_short($expert)) . "\" \n"; 
    288         $return .= "    dc:creator=\"" . $this->xml_safe($author) . "\" \n"; 
    289         $return .= "    dc:date=\"" . $RFC822_date . "\" /> \n"; 
    290         $return .= "</rdf:RDF> \n"; 
    291         $return .= "-->  \n"; 
    292  
    293         return $return; 
    294     }  
    295  
    296     /** 
    297      * Search text for links, and searches links for trackback URLs. 
    298      *  
    299      * <code><?php 
    300      *  
    301      * include('trackback_cls.php'); 
    302      * $trackback = new Trackback('BLOGish', 'Ran Aroussi', 'UTF-8'); 
    303      *  
    304      * if ($tb_array = $trackback->auto_discovery(string TEXT)) { 
    305      *  // Found trackbacks in TEXT. Looping... 
    306      *  foreach($tb_array as $tb_key => $tb_url) { 
    307      *  // Attempt to ping each one... 
    308      *          if ($trackback->ping($tb_url, string URL, [string TITLE], [string EXPERT])) { 
    309      *                  // Successful ping... 
    310      *                  echo "Trackback sent to <i>$tb_url</i>...\n"; 
    311      *          } else { 
    312      *                  // Error pinging... 
    313      *                  echo "Trackback to <i>$tb_url</i> failed....\n"; 
    314      *          } 
    315      *  } 
    316      * } else { 
    317      *  // No trackbacks in TEXT... 
    318      *  echo "No trackbacks were auto-discover...\n" 
    319      * } 
    320      * ?></code> 
    321      *  
    322      * @param string $text  
    323      * @return array Trackback URLs. 
    324      */ 
    325     public function auto_discovery($text) 
    326     {  
    327         // Get a list of UNIQUE links from text... 
    328         // --------------------------------------- 
    329         // RegExp to look for (0=>link, 4=>host in 'replace') 
    330         $reg_exp = "/(http)+(s)?:(\\/\\/)((\\w|\\.)+)(\\/)?(\\S+)?/i";  
    331         // Make sure each link ends with [sapce] 
    332         $text = eregi_replace("www.", "http://www.", $text); 
    333         $text = eregi_replace("http://http://", "http://", $text); 
    334         $text = eregi_replace("\"", " \"", $text); 
    335         $text = eregi_replace("'", " '", $text); 
    336         $text = eregi_replace(">", " >", $text);  
    337         // Create an array with unique links 
    338         $uri_array = array(); 
    339         if (preg_match_all($reg_exp, strip_tags($text, "<a>"), $array, PREG_PATTERN_ORDER)) { 
    340             foreach($array[0] as $key => $link) { 
    341                 foreach((array(",", ".", ":", ";")) as $t_key => $t_value) { 
    342                     $link = trim($link, $t_value); 
    343                 }  
    344                 $uri_array[] = ($link); 
    345             }  
    346             $uri_array = array_unique($uri_array); 
    347         }  
    348         // Get the trackback URIs from those links... 
    349         // ------------------------------------------ 
    350         // Loop through the URIs array and extract RDF segments 
    351         $rdf_array = array(); // <- holds list of RDF segments 
    352         foreach($uri_array as $key => $link) { 
    353             if ($link_content = implode("", @file($link))) { 
    354                 preg_match_all('/(<rdf:RDF.*?<\/rdf:RDF>)/sm', $link_content, $link_rdf, PREG_SET_ORDER); 
    355                 for ($i = 0; $i < count($link_rdf); $i++) { 
    356                     if (preg_match('|dc:identifier="' . preg_quote($link) . '"|ms', $link_rdf[$i][1])) { 
    357                         $rdf_array[] = trim($link_rdf[$i][1]); 
    358                     }  
    359                 }  
    360             }  
    361         }  
    362         // Loop through the RDFs array and extract trackback URIs 
    363         $tb_array = array(); // <- holds list of trackback URIs 
    364         if (!empty($rdf_array)) { 
    365             for ($i = 0; $i < count($rdf_array); $i++) { 
    366                 if (preg_match('/trackback:ping="([^"]+)"/', $rdf_array[$i], $array)) { 
    367                     $tb_array[] = trim($array[1]); 
    368                 }  
    369             }  
    370         }  
    371         // Return Trackbacks 
    372         return $tb_array; 
    373     }  
    374  
    375     /** 
    376      * Other Useful functions used in this class 
    377      */ 
    378  
    379     /** 
    380      * Converts MySQL datetime to a standart RFC 822 date format 
    381      *  
    382      * @param string $datetime  
    383      * @return string RFC 822 date 
    384      */ 
    385     public function RFC822_from_datetime($datetime) 
    386     { 
    387         $timestamp = mktime( 
    388             substr($datetime, 8, 2), substr($datetime, 10, 2), substr($datetime, 12, 2), 
    389             substr($datetime, 4, 2), substr($datetime, 6, 2), substr($datetime, 0, 4) 
    390             ); 
    391         return date("r", $timestamp); 
    392     }  
    393  
    394     /** 
    395      * Converts a string into an XML-safe string (replaces &, <, >, " and ') 
    396      *  
    397      * @param string $string  
    398      * @return string  
    399      */ 
    400     public function xml_safe($string) 
    401     { 
    402         return htmlspecialchars($string, ENT_QUOTES); 
    403     }  
    404  
    405     /** 
    406      * Cuts a string short (with "...") accroding to $max_length... 
    407      *  
    408      * @param string $string  
    409      * @param integer $max_length  
    410      * @return string  
    411      */ 
    412     public public function cut_short($string, $max_length = 255) 
    413     { 
    414         if (strlen($string) > $max_length) { 
    415             $string = substr($string, 0, $max_length) . '...'; 
    416         }  
    417  
    418         return $string; 
    419     }  
     57                return $row; 
     58        } 
    42059}  
    42160 
  • trackback/groupoptions.xml

    r1 r29  
    44        <import> 
    55                <options>                        
    6                         <!-- user.board.write --> 
    76                        <option name="user.board.canTrackback"> 
    87                                <categoryname>user.board.write</categoryname> 
     
    109                                <defaultvalue>1</defaultvalue> 
    1110                        </option> 
    12                         <!-- /user.board.write --> 
    1311                </options> 
    1412        </import> 
  • trackback/install.sql

    r1 r29  
    44CREATE TABLE wbb1_1_trackback ( 
    55  postID int(10) unsigned NOT NULL, 
     6  postURL varchar(255) NOT NULL DEFAULT '', 
    67  title varchar(255) NOT NULL DEFAULT '', 
    78  excerpt varchar(255) NOT NULL DEFAULT '', 
  • trackback/package.xml

    r5 r29  
    55                <packagename>Trackback</packagename> 
    66                <packagedescription>Allow trackback for posts</packagedescription> 
    7                 <version>0.0.1</version> 
     7                <version>0.0.2</version> 
    88                <date>DATE</date> 
    99                <plugin>com.woltlab.wbb</plugin> 
     
    2020        </requiredpackages> 
    2121         
     22        <optionalpackages> 
     23                <optionalpackage file="optionals/de.easy-coding.wcf.data.page.publicseorewriter.tar.gz">de.easy-coding.wcf.data.page.publicseorewriter</optionalpackage> 
     24        </optionalpackages> 
     25         
    2226        <instructions type="install"> 
    2327                <files>files.tar</files> 
  • trackback/templates.diff

    r1 r29  
    1 --- K:/Development/wBB3Mods/original/templates/wbb/thread.tpl   Fri Jun 15 15:44:09 2007 
    2 +++ K:/Development/wBB3Mods/Checkout/wbb3/dev/wbb3mods.wbb.thanksbot/templates_patched/thread.tpl       Sun Jun 17 19:29:35 2007 
    3 @@ -65,6 +65,18 @@ 
    4         {/if} 
    5         <link rel="alternate" type="application/rss+xml" href="index.php?page=Feed&amp;type=RSS2&amp;threadID={@$threadID}" title="RSS2" /> 
    6         <link rel="alternate" type="application/atom+xml" href="index.php?page=Feed&amp;type=Atom&amp;threadID={@$threadID}" title="Atom" /> 
    7 +       <script type="text/javascript"> 
    8 +       //<![CDATA[ 
    9 +               function showHideThankUser (postID) { 
    10 +                       var userDiv = document.getElementById('thankUser-'+postID); 
    11 +                       if (userDiv.className == 'hidden') { 
    12 +                               userDiv.className = ''; 
    13 +                       } else { 
    14 +                               userDiv.className = 'hidden'; 
    15 +                       } 
    16 +               } 
    17 +       //]]> 
    18 +       </script> 
    19  </head> 
    20  <body> 
    21  {* --- quick search controls --- *} 
    22 @@ -320,6 +332,10 @@ 
    23                                                                                         {if $this->user->userID} 
    24                                                                                                 <li><a href="index.php?form=PostReport&amp;postID={@$post->postID}{@SID_ARG_2ND}"><img src="icon/postReportS.png" alt="" /> <span>{lang}wbb.thread.post.button.report{/lang}</span></a></li> 
    25                                                                                         {/if} 
    26 +                                                                                       {assign var=userID value=$this->user->userID} 
    27 +                                                                                       {if $this->user->getPermission('user.board.canThank') && $post->hasThank && !$postThanks[$messageID].users[$userID]|isset && $authorID != $this->user->userID} 
    28 +                                                                                               <li><a href="index.php?action=Thank&amp;postID={@$post->postID}{@SID_ARG_2ND}"><img src="icon/thankS.png" alt="" /> <span>{lang}wbb.thread.post.button.thank{/lang}</span></a></li> 
    29 +                                                                                       {/if} 
    30                                                                                         {if $post->canEditPost($board, $thread)} 
    31                                                                                                 <li><a href="index.php?form=PostEdit&amp;postID={@$post->postID}{@SID_ARG_2ND}"><img src="{@RELATIVE_WCF_DIR}icon/editS.png" alt="" /> <span>{lang}wbb.thread.post.button.edit{/lang}</span></a></li> 
    32                                                                                         {/if} 
     1--- thread.tpl  Fri Jun 15 15:44:09 2007 
     2+++ thread_patched.tpl  Sun Jun 17 19:29:35 2007 
    333@@ -327,6 +343,7 @@ 
    344                                                                        </ul> 
    355                                                                </div> 
    366                                                        </div> 
    37 +                                                       {include file="postThankStats"} 
     7+                                                       {include file="postTrackback" sandbox=false} 
    388                                                        <hr /> 
    399                                                </div> 
  • trackback/templates/postTrackback.tpl

    r1 r29  
    1 {if $thread->hasTrackback}<!-- 
    2 <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"> 
    3 <rdf:Description rdf:about="http://www.foo.com/archive.html#foo" dc:identifier="http://www.foo.com/archive.html#foo" dc:title="Foo Bar" trackback:ping="http://www.easy-coding.de/index.php?action=Trackback&threadID={@$threadID}" /> 
    4 </rdf:RDF> 
    5 -->{/if} 
    6  
    7 {if $postThanks[$messageID]|isset} 
    8         <div class="thankStats" style="background-color: {@$this->style->getVariable('messages.boxes.background.color')}; color: {@$this->style->getVariable('messages.boxes.font.color')}; border: {@$this->style->getVariable('container.border.outer.width')} {@$this->style->getVariable('container.border.outer.style')} {@$this->style->getVariable('container.border.outer.color')}; clear: both; display: block; margin: 7px 0pt; padding: 7px 15px; positon: relative;"> 
    9                 {if $postThanks[$messageID].users|isset}<a href="javascript:void(0);" onclick="showHideThankUser({@$messageID});">{/if}{lang}wbb.thread.post.thank.stats{/lang}{if $postThanks[$messageID].users|isset}</a>{/if}<br /> 
    10                 {if $postThanks[$messageID].users|isset} 
    11                         <div id="thankUser-{@$messageID}"> 
    12                                 <p class="smallFont">{lang}wbb.thread.post.thank.users{/lang}</p> 
    13                                 <p class="smallFont">{implode from=$postThanks[$messageID].users item=postThankUsers}<a href="index.php?page=User&amp;userID={@$postThankUsers.userID}{@SID_ARG_2ND}">{@$postThankUsers.username}</a>{/implode}</p> 
    14                         </div> 
    15                         <script type="text/javascript"> 
    16                         //<[CDATA[ 
    17                                 showHideThankUser({@$messageID}); 
    18                         //]]> 
    19                         </script> 
    20                 {/if} 
    21         </div> 
     1{if $postTrackbacks[$messageID]|isset} 
     2        {foreach from=$postTrackbacks[$messageID] item=trackback} 
     3                {lang}wbb.thread.post.trackback.blog_name{/lang}: {$trackback.blog_name} 
     4                {lang}wbb.thread.post.trackback.title{/lang}: {$trackback.title}<br /> 
     5                {lang}wbb.thread.post.trackback.excerpt{/lang}: {$trackback.excerpt}<br /> 
     6                {lang}wbb.thread.post.trackback.url{/lang}: {$trackback.url}<br /> 
     7        {/foreach} 
    228{/if} 
  • trackback/templates/postTrackbackSetting.tpl

    r1 r29  
    11{if $this->user->getPermission('user.board.canTrackback')} 
    2         <div class="formField"> 
    3                 <label><input type="checkbox" name="hasTrackback" value="1" {if $hasTrackback == 1}checked="checked" {/if}/> {lang}wbb.threadAdd.settings.hastTrackback{/lang}</label> 
     2        <div class="formCheckBox"> 
     3                <div class="formField"> 
     4                        <label><input type="checkbox" name="hasTrackback" value="1" {if $hasTrackback == 1}checked="checked" {/if}/> {lang}wbb.threadAdd.settings.hasTrackback{/lang}</label> 
     5                </div> 
     6                <div class="formFieldDesc"> 
     7                        {lang}wbb.threadAdd.settings.hasTrackback.description{/lang} 
     8                </div> 
    49        </div> 
    5         <div class="formFieldDesc"> 
    6                 {lang}wbb.threadAdd.settings.hasTrackback.description{/lang} 
    7         </div> 
    8          
    9         <div class="formFieldDesc"> 
    10                 <label><input type="text" name="trackbackUrls" value="@$trackbackUrls"/> {lang}wbb.threadAdd.settings.hastThank{/lang}<br /> 
    11                 {lang}wbb.threadAdd.settings.trackbackUrls.description{/lang}</label> 
     10 
     11        <div class="formElement"> 
     12                <div class="formFieldLabel"> 
     13                        <label for="trackbackUrls">{lang}wbb.threadAdd.settings.trackbackUrls{/lang}</label> 
     14                </div> 
     15 
     16                <div class="formField"> 
     17                        <textarea name="trackbackUrls" id="trackbackUrls" rows="3" cols="20">{@$trackbackUrls}</textarea> 
     18                </div> 
     19                <div class="formFieldDesc"> 
     20                        <p>{lang}wbb.threadAdd.settings.trackbackUrls.description{/lang}</p> 
     21                </div> 
    1222        </div> 
    1323{/if}