root/trackback/files/lib/system/cronjob/TrackbackCheckCronjob.class.php @ 78

Revision 78, 1.7 kB (checked in by d0nut, 6 years ago)

license updates to version 3 of GPL and LGPL

  • Property svn:executable set to *
Line 
1<?php
2// WCF include
3require_once(WCF_DIR.'lib/data/cronjobs/Cronjob.class.php');
4
5/**
6 * checks if incoming trackback links are still present
7 *
8 * @author      Torben Brodt
9 * @package     de.easy-coding.wcf.trackback
10 * @license     GNU General Public License <http://opensource.org/licenses/gpl-3.0.html>
11 */
12class TrackbackCheckCronjob implements Cronjob {
13        private $check_interval_days = 7;
14       
15        /**
16         * checks if trackback is placed
17         */
18        private function check($host, $path) {
19                if (($io = @fsockopen($host, 80, $errno, $errstr, 5 )) !== false) {
20                        $send  = "GET {$path} HTTP/1.1\r\n";
21                        $send .= "Host: {$host}\r\n";
22                        $send .= "Connection: Close\r\n\r\n";
23                        fputs($io, $send);
24                        while (!feof($io)) {
25                                $send = fgets($io, 4096);
26                                if (preg_match($pattern, $send)) {
27                                        return true;
28                                }
29                        }
30                        fclose($io);
31                }
32
33                return false;
34        }
35       
36        /**
37         *
38         */
39        private function getValidationPattern() {
40                $urls = array();
41                $urls[] = PAGE_URL;
42                if(defined('PAGE_URLS')) {
43                        foreach(explode(PAGE_URLS) as $url) {
44                                $urls[] = $url;
45                        }
46                }
47                return sprintf('/href\="(%s)"/', implode("|",$urls));
48        }
49
50        /**
51         * @see Cronjob::execute()
52         */
53        public function execute($data) {
54                $pattern = $this->getValidationPattern();
55
56                $sql = "SELECT          permalink
57                        FROM            wbb".WBB_N."_trackback
58                        WHERE           checked < NOW()-7
59                        OR              errorCount > 0;";
60                $result = WBBCore::getDB()->sendQuery($sql);
61                while ($row = WCF::getDB()->fetchArray($result)) {
62                        if($this->check($host, $path, $pattern)) {
63                                $errorCount = "0";
64                        } else {
65                                $errorCount = "errorcount+1";
66                        }
67                       
68                        $sql = "UPDATE  wcf".WCF_N."_trackback
69                                SET
70                                                checked = NOW()
71                                                AND errorCount = {$errorCount}
72                                WHERE           threadID = {$row[threadID]}
73                                AND             url = {$row[url]}; ";
74
75                        WCF::getDB()->sendQuery($sql);
76                }
77        }
78}
79?>
Note: See TracBrowser for help on using the browser.