MDL-19676 MDL-14408 MDL-8776 Blog improvements
[moodle.git] / blog / rsslib.php
1 <?php
3 require_once($CFG->dirroot.'/lib/rsslib.php');
4 require_once($CFG->dirroot .'/blog/lib.php');
6 // This function returns the icon (from theme) with the link to rss/file.php
7 // needs some hacking to rss/file.php
8 function blog_rss_print_link($filtertype, $filterselect, $tagid=0, $tooltiptext='') {
10     global $CFG, $USER, $OUTPUT;
12     if (empty($USER->id)) {
13         $userid = 1;
14     } else {
15         $userid = $USER->id;
16     }
18     switch ($filtertype) {
19         case 'site':
20             $path = SITEID.'/'.$userid.'/blog/site/'.SITEID;
21         break;
22         case 'course':
23             $path = $filterselect.'/'.$userid.'/blog/course/'.$filterselect;
24         break;
25         case 'group':
26             $path = SITEID.'/'.$userid.'/blog/group/'.$filterselect;
27         break;
28         case 'user':
29             $path = SITEID.'/'.$userid.'/blog/user/'.$filterselect;
30         break;
31     }
33     if ($tagid) {
34         $path .= '/'.$tagid;
35     }
37     $path .= '/rss.xml';
38     $rsspix = $OUTPUT->old_icon_url('i/rss');
40     require_once($CFG->libdir.'/filelib.php');
41     $path = get_file_url($path, null, 'rssfile');
42     print '<div class="mdl-right"><a href="'. $path .'"><img src="'. $rsspix .'" title="'. strip_tags($tooltiptext) .'" alt="'.get_string('rss').'" /></a></div>';
44 }
47 // Generate any blog RSS feed via one function (called by ../rss/file.php)
48 function blog_generate_rss_feed($type, $id, $tagid=0) {
49     global $CFG, $SITE, $DB;
51     if (empty($CFG->enablerssfeeds)) {
52         debugging('Sorry, RSS feeds are disabled on this site');
53         return '';
54     }
56     $filename = blog_rss_file_name($type, $id, $tagid);
58     if (file_exists($filename)) {
59         if (filemtime($filename) + 3600 > time()) {
60             return $filename;   /// It's already done so we return cached version
61         }
62     }
64 /// Get all the entries from the database
66     $blogentries = blog_fetch_entries('', 20, '', $type, $id, $tagid);
68 /// Now generate an array of RSS items
69     if ($blogentries) {
70         $items = array();
71         foreach ($blogentries as $blog_entry) {
72             $item = NULL;
73             $item->author = fullname($DB->get_record('user', array('id'=>$blog_entry->userid))); // TODO: this is slow
74             $item->title = $blog_entry->subject;
75             $item->pubdate = $blog_entry->lastmodified;
76             $item->link = $CFG->wwwroot.'/blog/index.php?entryid='.$blog_entry->id;
77             $item->description = format_text($blog_entry->summary, $blog_entry->format);
78             if ( !empty($CFG->usetags) && ($blogtags = tag_get_tags_array('post', $blog_entry->id)) ) {
79                 if ($blogtags) {
80                     $item->tags = $blogtags;
81                 }
82                 $item->tagscheme = $CFG->wwwroot . '/tag';
83             }
84             $items[] = $item;
85         }
86         $articles = rss_add_items($items);   /// Change structure to XML
87     } else {
88         $articles = '';
89     }
91 /// Get header and footer information
93     switch ($type) {
94         case 'user':
95             $info = fullname($DB->get_record('user', array('id'=>$id), 'firstname,lastname'));
96             break;
97         case 'course':
98             $info = $DB->get_field('course', 'fullname', array('id'=>$id));
99             break;
100         case 'site':
101             $info = $SITE->fullname;
102             break;
103         case 'group':
104             $group = groups_get_group($id, false);
105             $info = $group->name; //TODO: $DB->get_field('groups', 'name', array('id'=>$id))
106             break;
107         default:
108             $info = '';
109             break;
110     }
112     if ($tagid) {
113         $info .= ': '.$DB->get_field('tags', 'text', array('id'=>$tagid));
114     }
116     $header = rss_standard_header(get_string($type.'blog','blog', $info),
117                                   $CFG->wwwroot.'/blog/index.php',
118                                   get_string('intro','blog'));
120     $footer = rss_standard_footer();
123 /// Save the XML contents to file.
125     $rssdata = $header.$articles.$footer;
127     if (blog_rss_save_file($type,$id,$tagid,$rssdata)) {
128         return $filename;
129     } else {
130         return false;   // Couldn't find it or make it
131     }
135 function blog_rss_file_name($type, $id, $tagid=0) {
136     global $CFG;
138     if ($tagid) {
139         return "$CFG->dataroot/rss/blog/$type/$id/$tagid.xml";
140     } else {
141         return "$CFG->dataroot/rss/blog/$type/$id.xml";
142     }
145 //This function saves to file the rss feed specified in the parameters
146 function blog_rss_save_file($type, $id, $tagid=0, $contents='') {
147     global $CFG;
149     if (! $basedir = make_upload_directory("rss/blog/$type/$id")) {
150         return false;
151     }
153     $file = blog_rss_file_name($type, $id, $tagid);
154     $rss_file = fopen($file, 'w');
155     if ($rss_file) {
156         $status = fwrite ($rss_file, $contents);
157         fclose($rss_file);
158     } else {
159         $status = false;
160     }
162     return $status;
165 ?>