root/1.2.1/common/feed_fetcher.php @ 148

Revision 148, 4.1 KB (checked in by exi, 16 years ago)

Reverted the changes in 1.2.1 tag, tags may not be changed.
Removed the admin menus for the syndication feeds as they don't meet the core-requirements and put them into a separate mod.
However, the modified feed engine itself remains core.

Line 
1<?php
2@set_time_limit(0);
3// liq's feed syndication mod v1.0
4require_once("class.page.php");
5require_once("class.kill.php");
6require_once("class.parser.php");
7
8$insideitem = false;
9$tag = "";
10$title = "";
11$description = "";
12$link = "";
13$x = 0;
14
15class Fetcher
16{
17    function generate($url, $lastkllid = 0)
18    {
19        global $x;
20
21        $xml_parser = xml_parser_create();
22        xml_set_object($xml_parser, $this);
23        xml_set_element_handler($xml_parser, "startElement", "endElement");
24        xml_set_character_data_handler ($xml_parser, 'characterData');
25
26        $fp = @fopen($url, "r");
27        $file = '';
28        while ($data = fread($fp, 4096))
29        {
30            $file .= $data;
31        }
32        fclose($fp);
33
34        if (!$file && file_exists('class.http.php'))
35        {
36            include_once('class.http.php');
37            $file = new http($url);
38            $file = $file->get_content();
39        }
40        if (!xml_parse($xml_parser, $file))
41            return "<i>Error getting XML data from ".$url."</i><br><br>";
42        xml_parser_free($xml_parser);
43
44        if ($x)
45        {
46            $html = "<div class=block-header2>".$x." kills added from feed: ".$url."</div>";
47        }
48        else
49        {
50            $html = "<div class=block-header2>No kills added from feed: ".$url."</div>";
51        }
52
53        return $html;
54    }
55
56    function startElement($parser, $name, $attrs)
57    {
58        global $insideitem, $tag, $title, $description, $link;
59        if ($insideitem)
60        {
61            $tag = $name;
62        }
63        elseif ($name == "ITEM")
64        {
65            $insideitem = true;
66        }
67    }
68
69    function endElement($parser, $name)
70    {
71        global $insideitem, $tag, $title, $description, $link, $html, $x, $lastkllid;
72
73        if ($name == "ITEM")
74        {
75            if (isset($description))
76            {
77                $parser = new Parser($description);
78                $killid = $parser->parse(true);
79                if ($killid == 0 || $killid == -1 || $killid == -2 || $killid == -3)
80                {
81                    $page = new Page("Error");
82                    if ($killid == 0)
83                        $html .= "Killmail is malformed.<br>";
84                    if ($killid == -3)
85                        $html .= "Killmail does not have a final blow! <p><br>To prevent the corruption of the database please just fake a <i>(laid the final blow)</i> behind one of the involved players on the killmail.<br><br><b>Example:</b><i><br>Name: liquidism (laid the final blow)</i></p>";
86                    if ($killid == -2)
87                        $html .= "Killmail is not related to ".KB_TITLE.".<br>";
88                    if ($killid == -1)
89                        $html .= "Killmail already posted <a href=\"?a=kill_detail&kll_id=".$parser->dupeid_."\">here</a>.<br>";
90                }
91                else
92                {
93                    $qry = new DBQuery();
94                    $qry->execute("insert into kb3_log  values( ".$killid.", '".KB_SITE."','".$_SERVER['REMOTE_ADDR']."',now() )");
95                    $html .= "Killmail has succsessfully been posted <a href=\"?a=kill_detail&kll_id=".$killid."\">here</a>.<br>";
96                    $x++;
97                }
98            }
99            if (trim($title) > $lastkllid || $lastkllid == 0)
100            {
101                $lastkllid = trim($title);
102            }
103            $title = "";
104            $description = "";
105            $link = "";
106            $insideitem = false;
107        }
108    }
109
110    function characterData($parser, $data)
111    {
112        global $insideitem, $tag, $title, $description, $link;
113        if ($insideitem)
114        {
115            switch ($tag)
116            {
117                case "TITLE":
118                    $title .= $data;
119                    break;
120                case "DESCRIPTION":
121                    $description .= $data;
122                    break;
123                case "LINK":
124                    $link .= $data;
125                    break;
126            }
127        }
128    }
129}
130?>
Note: See TracBrowser for help on using the browser.