]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - lib/rssaction.php
catch errors in debug log
[quix0rs-gnu-social.git] / lib / rssaction.php
1 <?php
2 /*
3  * Laconica - a distributed open-source microblogging tool
4  * Copyright (C) 2008, Controlez-Vous, Inc.
5  *
6  * This program is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU Affero General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU Affero General Public License for more details.
15  *
16  * You should have received a copy of the GNU Affero General Public License
17  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18  */
19
20 if (!defined('LACONICA')) { exit(1); }
21
22 class Rss10Action extends Action {
23
24         function handle($args) {
25                 parent::handle($args);
26                 
27                 $limit = (int) $this->trimmed('limit');
28                 
29                 $this->show_rss($limit);
30         }
31
32         function init() {
33                 return true;
34         }
35         
36         function get_notices() {
37                 return array();
38         }
39
40         function get_channel() {
41                 return array('url' => '',
42                                          'title' => '',
43                                          'link' => '',
44                                          'description' => '');
45         }
46         
47         function get_image() {
48                 return NULL;
49         }
50         
51         function show_rss($limit=0) {
52                 
53                 if (!$this->init()) {
54                         return;
55                 }
56                 
57                 $notices = $this->get_notices($limit);
58                 
59                 $this->init_rss();
60                 $this->show_channel($notices);
61                 $this->show_image();
62                 
63                 foreach ($notices as $n) {
64                         $this->show_item($n);
65                 }
66                 
67                 $this->end_rss();
68         }
69
70         function show_channel($notices) {
71                 global $config;
72
73                 $channel = $this->get_channel();
74                 $image = $this->get_image();
75                 
76                 common_element_start('channel', array('rdf:about' => $channel['url']));
77                 common_element('title', NULL, $channel['title']);
78                 common_element('link', NULL, $channel['link']);
79                 common_element('description', NULL, $channel['description']);
80                 common_element('cc:licence', array('rdf:resource' => $config['license']['url']));
81
82                 if ($image) {
83                         common_element('image', array('rdf:resource' => $image));
84                 }
85
86                 common_element_start('items');
87                 common_element_start('rdf:Seq');
88                 
89                 foreach ($notices as $notice) {
90                         common_element('rdf:li', array('rdf:resource' => $notice->uri));
91                 }
92                 
93                 common_element_end('rdf:Seq');
94                 common_element_end('items');
95                 
96                 common_element_end('channel');
97         }
98
99         function show_image() {
100                 $image = $this->get_image();
101                 if ($image) {
102                         $channel = $this->get_channel();
103                         common_element_start('image', array('rdf:about' => $image));
104                         common_element('title', NULL, $channel['title']);
105                         common_element('link', NULL, $channel['link']);
106                         common_element('url', NULL, $image);
107                         common_element_end('image');
108                 }
109         }
110         
111         function show_item($notice) {
112                 global $config;
113                 $nurl = common_local_url('shownotice', array('notice' => $notice->id));
114                 common_element_start('item', array('rdf:about' => $notice->uri));
115                 common_element('title', NULL, $notice->created);
116                 common_element('link', NULL, $nurl);
117                 common_element('description', NULL, $notice->content);
118                 common_element('dc:date', NULL, common_date_w3dtf($notice->created));
119                 common_element('cc:licence', array('rdf:resource' => $config['license']['url']));
120                 common_element_end('item');
121         }
122         
123         function init_rss() {
124                 header('Content-Type: application/rdf+xml');
125
126                 common_start_xml();
127                 common_element_start('rdf:RDF', array('xmlns:rdf' =>
128                                                                                           'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
129                                                                                           'xmlns:dc' =>
130                                                                                           'http://purl.org/dc/elements/1.1/',
131                                                                                           'xmlns:cc' =>
132                                                                                           'http://web.resource.org/cc/',
133                                                                                           'xmlns' => 'http://purl.org/rss/1.0/'));
134         }
135         
136         function end_rss() {            
137                 common_element_end('rdf:RDF');
138         }
139 }