root/trackback/files/lib/system/event/listener/ThreadAddFormTrackbackListener.class.php @ 32

Revision 32, 3.7 kB (checked in by d0nut, 6 years ago)

updated trackback to 0.3.
new trackbacks are sent correctly, old trackbacks are not repeated.

  • Property svn:executable set to *
Line 
1<?php
2// WCF include
3require_once(WCF_DIR.'lib/system/event/EventListener.class.php');
4
5// Utils
6require_once(WBB_DIR.'lib/util/TrackbackUtil.class.php');
7
8/**
9 * Handles activation of the trackback in threadcreation
10 *
11 * @author      Torben Brodt
12 * @package     de.easy-coding.wbb.trackback
13 * @license     GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
14 */
15class ThreadAddFormTrackbackListener implements EventListener {
16        protected $eventObj;
17        protected $className;
18
19        protected $hasTrackback = 0;
20        protected $trackbackUrls = "";
21        protected $trackbackUrlsOld = "";
22
23        protected $url, $title, $excerpt, $author;
24
25        /**
26         * @see EventListener::execute()
27         */
28        public function execute($eventObj, $className, $eventName) {           
29                $this->eventObj = $eventObj;
30                $this->className = $className;
31
32                switch ($eventName) {
33                        case 'readData':
34                                $this->readData();
35                                break;
36                        case 'readFormParameters':
37                                $this->readFormParameters();
38                                break;
39                        case 'assignVariables':
40                                $this->assignVariables();
41                                break;
42                        case 'saved':
43                                $this->saved();
44                                break;
45                }
46        }
47
48        /**
49         * @see Form::readData()
50         */
51        protected function readData () {
52                $this->hasTrackback = $this->eventObj->post->hasTrackback;
53                $this->trackbackUrls = $this->eventObj->post->trackbackUrls;
54                $this->trackbackUrlsOld = $this->eventObj->post->trackbackUrls;
55        }
56
57        /**
58         * @see Form::readFormParameters()
59         */
60        protected function readFormParameters () {
61                if (isset($_REQUEST['hasTrackback'])) $this->hasTrackback = intval($_REQUEST['hasTrackback']);
62                if (isset($_REQUEST['trackbackUrls'])) $this->trackbackUrls = $_REQUEST['trackbackUrls'];
63                if (isset($_REQUEST['trackbackUrlsOld'])) $this->trackbackUrlsOld = $_REQUEST['trackbackUrlsOld'];
64        }
65       
66        /**
67         * @see Form::assignVariables()
68         */
69        protected function assignVariables () {
70                WBBCore::getTPL()->assign(array(
71                                'hasTrackback' => $this->hasTrackback,
72                                'trackbackUrls'=> $this->trackbackUrls
73                        ));
74                WBBCore::getTPL()->append('additionalSettings', WBBCore::getTPL()->fetch('postTrackbackSetting'));
75        }
76
77        /**
78         * @see Form::saved()
79         */
80        protected function saved () {
81                $postID = 0;
82               
83                switch ($this->className) {
84                        case 'ThreadAddForm':
85                                $postID = $this->eventObj->newThread->firstPostID;
86                                $this->data = $this->eventObj->newThread->firstPostID;
87                                break;
88                        case 'PostEditForm':
89                                $postID = $this->eventObj->postID;
90                                break;
91                }
92               
93                // fetch data from database
94                $this->readTrackbackData($postID);
95               
96                // send new trackbacks to given urls
97                $this->discoverNewTrackbacks();
98
99                // UPDATE
100                $sql = "UPDATE          wbb".WBB_N."_post
101                        SET             hasTrackback    = {$this->hasTrackback},
102                                        trackbackUrls   = '".escapeString($this->trackbackUrls)."'
103                        WHERE           postID          = {$postID};";
104
105                WBBCore::getDB()->sendQuery($sql);
106        }
107       
108        /**
109         * fetch trackback data from database (maybe an event would be faster)
110         * @param postID
111         */
112        private function readTrackbackData($postID) {
113                // fetch data
114                $row = TrackbackUtil::getPost($postID);
115
116                // assign basic data
117                $this->title = $row['topic'];
118                $this->excerpt = substr($row['firstPostPreview'],0,255);
119                $this->author = $row['username'];
120                $this->url = $row['url'];
121        }
122       
123        /**
124         * discover and ping new trackbacks
125         */
126        private function discoverNewTrackbacks() {
127                $newlist = explode(' ', $this->trackbackUrls);
128                $oldlist = explode(' ', $this->trackbackUrlsOld);
129               
130                // Trackback
131                $trackback = new TrackbackUtil(PAGE_TITLE, $this->author, CHARSET);
132                //$tb_array = $trackback->auto_discovery($this->eventObj->post->message);
133               
134                // Found trackbacks in TEXT. Looping...
135                foreach(array_diff($newlist, $oldlist) as $tb_url) {
136                        // Attempt to ping each new one...
137                        $trackback->ping($tb_url, $this->url, $this->title, $this->excerpt);
138                }
139        }
140}
141?>
Note: See TracBrowser for help on using the browser.