]> git.wh0rd.org Git - tt-rss.git/blob - plugins/af_redditimgur/init.php
af_redditimgur: do not process content multiple times
[tt-rss.git] / plugins / af_redditimgur / init.php
1 <?php
2 class Af_RedditImgur extends Plugin {
3
4         private $link;
5         private $host;
6
7         function about() {
8                 return array(1.0,
9                         "Inline image links in Reddit RSS feeds",
10                         "fox");
11         }
12
13         function init($host) {
14                 $this->link = $host->get_link();
15                 $this->host = $host;
16
17                 $host->add_hook($host::HOOK_ARTICLE_FILTER, $this);
18         }
19
20         function hook_article_filter($article) {
21                 $owner_uid = $article["owner_uid"];
22
23                 if (strpos($article["link"], "reddit.com/r/") !== FALSE) {
24                         if (strpos($article["plugin_data"], "redditimgur,$owner_uid:") === FALSE) {
25                                 $doc = new DOMDocument();
26                                 @$doc->loadHTML($article["content"]);
27
28                                 if ($doc) {
29                                         $xpath = new DOMXPath($doc);
30                                         $entries = $xpath->query('(//a[@href]|//img[@src])');
31
32                                         foreach ($entries as $entry) {
33                                                 if ($entry->hasAttribute("href")) {
34                                                         if (preg_match("/\.(jpg|jpeg|gif|png)$/i", $entry->getAttribute("href"))) {
35
36                                                                 $img = $doc->createElement('img');
37                                                                 $img->setAttribute("src", $entry->getAttribute("href"));
38
39                                                                 $entry->parentNode->replaceChild($img, $entry);
40                                                         }
41                                                 }
42
43                                                 // remove tiny thumbnails
44                                                 if ($entry->hasAttribute("src")) {
45                                                         if ($entry->parentNode && $entry->parentNode->parentNode) {
46                                                                 $entry->parentNode->parentNode->removeChild($entry->parentNode);
47                                                         }
48                                                 }
49                                         }
50
51                                         $node = $doc->getElementsByTagName('body')->item(0);
52
53                                         if ($node) {
54                                                 $article["content"] = $doc->saveXML($node, LIBXML_NOEMPTYTAG);
55                                                 $article["plugin_data"] = "redditimgur,$owner_uid:" . $article["plugin_data"];
56                                         }
57                                 }
58                         }
59                 } else if (isset($article["stored"]["content"])) {
60                         $article["content"] = $article["stored"]["content"];
61                 }
62
63                 return $article;
64         }
65 }
66 ?>