First version of RSS System.
[moodle.git] / mod / forum / rsslib.php
1 <?PHP  // $Id$
2     //This file adds support to rss feeds generation
4     //This function is the main entry point to forum
5     //rss feeds generation. Foreach site forum with rss enabled
6     //build one XML rss structure.
7     function forum_rss_feeds() {
9         global $CFG;
11         $status = true;
13         //Check CFG->enablerssfeeds
14         if (empty($CFG->enablerssfeeds)) {
15             //Some debug...
16             if ($CFG->debug > 7) {
17                 echo "DISABLED (admin variables)";
18             }
19         //Check CFG->forum_enablerssfeeds
20         } else if (empty($CFG->forum_enablerssfeeds)) {
21             //Some debug...
22             if ($CFG->debug > 7) {
23                 echo "DISABLED (module configuration)";
24             }
25         //It's working so we start...
26         } else {
27             //Iterate over all forums
28             if ($forums = get_records("forum")) {
29                 foreach ($forums as $forum) {
30                     if (!empty($forum->rsstype) && !empty($forum->rssarticles) && $status) {
31                         //Some debug...
32                         if ($CFG->debug > 7) {
33                             echo "ID: $forum->id->";
34                         }
35                         //Get the XML contents
36                         $result = forum_rss_feed($forum);
37                         //Save the XML contents to file
38                         if (!empty($result)) {
39                             $status = rss_save_file("forum",$forum,$result);
40                         }
41                         //Some debug...
42                         if ($CFG->debug > 7) {
43                             if (empty($result)) {
44                                 echo "(empty) ";
45                             } else {
46                                 if (!empty($status)) {
47                                     echo "OK ";
48                                 } else {
49                                     echo "FAIL ";
50                                 }
51                             }
52                         }
53                     }
54                 }
55             }
56         }
57         return $status;
58     }
60     //This function return the XML rss contents about the forum record passed as parameter
61     //It returns false if something is wrong
62     function forum_rss_feed($forum) {
64         global $CFG;
66         $status = true;
68         //Check CFG->enablerssfeeds
69         if (empty($CFG->enablerssfeeds)) {
70             //Some debug...
71             if ($CFG->debug > 7) {
72                 echo "DISABLED (admin variables)"; 
73             }           
74         //Check CFG->forum_enablerssfeeds
75         } else if (empty($CFG->forum_enablerssfeeds)) {
76             //Some debug... 
77             if ($CFG->debug > 7) {
78                 echo "DISABLED (module configuration)";
79             }           
80         //It's working so we start...
81         } else {
82             //Check the forum has rss activated
83             if (!empty($forum->rsstype) && !empty($forum->rssarticles)) {
84                 //Depending of the forum->rsstype, we are going to execute, different sqls
85                 if ($forum->rsstype == 1) {    //Discussion RSS
86                     $items = forum_rss_feed_discussions($forum);
87                 } else {                //Post RSS
88                     $items = forum_rss_feed_posts($forum);
89      
90                 }
91                 //Now, if items, we begin building the structure
92                 if (!empty($items)) {
93                     //First all rss feeds common headers
94                     $header = rss_standard_header($forum->name,
95                                                   $CFG->wwwroot."/mod/forum/view.php?f=".$forum->id,
96                                                   $forum->intro);
97                     //Now all the rss items
98                     if (!empty($header)) {
99                         $articles = rss_add_items($items);
100                     }
101                     //Now all rss feeds common footers
102                     if (!empty($header) && !empty($articles)) {
103                         $footer = rss_standard_footer();
104                     }
105                     //Now, if everything is ok, concatenate it
106                     if (!empty($header) && !empty($articles) && !empty($footer)) {
107                         $status = $header.$articles.$footer;
108                     } else {
109                         $status = false;
110                     } 
111                 } else {
112                     $status = false;
113                 }
114             }
115         }
116         return $status;
117     }
119     //This function returns "items" record array to be used to build the rss feed
120     //for a Type=discussions forum
121     function forum_rss_feed_discussions($forum) {
123         global $CFG;
125         $items = array();
127         if ($recs = get_records_sql ("SELECT d.id discussionid, 
128                                              d.name discussionname, 
129                                              u.id userid, 
130                                              u.firstname userfirstname,
131                                              u.lastname userlastname,
132                                              p.message postmessage,
133                                              p.created postcreated
134                                       FROM {$CFG->prefix}forum_discussions d,
135                                            {$CFG->prefix}forum_posts p,
136                                            {$CFG->prefix}user u
137                                       WHERE d.forum = '$forum->id' AND
138                                             p.discussion = d.id AND
139                                             p.parent = 0 AND
140                                             u.id = p.userid
141                                       ORDER BY p.created desc")) {
142             //Iterate over each discussion to get forum->rssarticles records
143             $articlesleft = $forum->rssarticles;
144             $item = NULL;
145             $user = NULL;
146             foreach ($recs as $rec) {
147                 unset($item);
148                 unset($user);
149                 $item->title = $rec->discussionname;
150                 $user->firstname = $rec->userfirstname;
151                 $user->lastname = $rec->userlastname;
152                 $item->author = fullname($user);
153                 $item->pubdate = $rec->postcreated;
154                 $item->link = $CFG->wwwroot."/mod/forum/discuss.php?d=".$rec->discussionid;
155                 $item->description = $rec->postmessage;
156                 $items[] = $item;
157                 $articlesleft--;
158                 if ($articlesleft < 1) {
159                     break;
160                 }
161             }
162         }
163         return $items;
164     }
165     
166     //This function returns "items" record array to be used to build the rss feed
167     //for a Type=posts forum
168     function forum_rss_feed_posts($forum) {
170         global $CFG;
172         $items = array();
174         if ($recs = get_records_sql ("SELECT p.id postid,
175                                              d.id discussionid,
176                                              d.name discussionname,
177                                              u.id userid,
178                                              u.firstname userfirstname,
179                                              u.lastname userlastname,
180                                              p.message postmessage,
181                                              p.created postcreated
182                                       FROM {$CFG->prefix}forum_discussions d,
183                                            {$CFG->prefix}forum_posts p,
184                                            {$CFG->prefix}user u
185                                       WHERE d.forum = '$forum->id' AND
186                                             p.discussion = d.id AND
187                                             u.id = p.userid
188                                       ORDER BY p.created desc")) {
189             //Iterate over each discussion to get forum->rssarticles records
190             $articlesleft = $forum->rssarticles;
191             $item = NULL;
192             $user = NULL;
193             foreach ($recs as $rec) {
194                 unset($item);
195                 unset($user);
196                 $item->title = $rec->discussionname;
197                 $user->firstname = $rec->userfirstname;
198                 $user->lastname = $rec->userlastname;
199                 $item->author = fullname($user);
200                 $item->pubdate = $rec->postcreated;
201                 $item->link = $CFG->wwwroot."/mod/forum/discuss.php?d=".$rec->discussionid."&parent=".$rec->postid;
202                 $item->description = $rec->postmessage;
203                 $items[] = $item;
204                 $articlesleft--;
205                 if ($articlesleft < 1) {
206                     break;
207                 }
208             }
209         }
210         return $items;
211     }
212 ?>