]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - lib/rssaction.php
add a print_r for the yadis doc returned
[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
72                 $channel = $this->get_channel();
73                 $image = $this->get_image();
74                 
75                 common_element_start('channel', array('rdf:about' => $channel['url']));
76                 common_element('title', NULL, $channel['title']);
77                 common_element('link', NULL, $channel['link']);
78                 common_element('description', NULL, $channel['description']);
79
80                 if ($image) {
81                         common_element('image', array('rdf:resource' => $image));
82                 }
83
84                 common_element_start('items');
85                 common_element_start('rdf:Seq');
86                 
87                 foreach ($notices as $notice) {
88                         common_element('rdf:li', array('rdf:resource' => $notice->uri));
89                 }
90                 
91                 common_element_end('rdf:Seq');
92                 common_element_end('items');
93                 
94                 common_element_end('channel');
95         }
96
97         function show_image() {
98                 $image = $this->get_image();
99                 if ($image) {
100                         $channel = $this->get_channel();
101                         common_element_start('image', array('rdf:about' => $image));
102                         common_element('title', NULL, $channel['title']);
103                         common_element('link', NULL, $channel['link']);
104                         common_element('url', NULL, $image);
105                         common_element_end('image');
106                 }
107         }
108         
109         function show_item($notice) {
110                 $nurl = common_local_url('shownotice', array('notice' => $notice->id));
111                 common_element_start('item', array('rdf:about' => $notice->uri));
112                 common_element('title', NULL, $notice->created);
113                 common_element('link', NULL, $nurl);
114                 common_element('description', NULL, $notice->content);
115                 common_element('dc:date', NULL, common_date_w3dtf($notice->created));
116                 common_element_end('item');
117         }
118         
119         function init_rss() {
120                 header('Content-Type: application/rdf+xml');
121
122                 common_start_xml();
123                 common_element_start('rdf:RDF', array('xmlns:rdf' =>
124                                                                                           'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
125                                                                                           'xmlns:dc' =>
126                                                                                           'http://purl.org/dc/elements/1.1/',
127                                                                                           'xmlns' => 'http://purl.org/rss/1.0/'));
128         }
129         
130         function end_rss() {            
131                 common_element_end('rdf:RDF');
132         }
133 }