1d3d9cfa1e6c54f563aaa5c819e60653d765a845
[moodle.git] / rss / file.php
1 <?PHP //$Id$
2     //This file returns the required rss feeds
3     //The URL format MUST include:
4     //    course: the course id
5     //    user:   the user id
6     //    name:   the name of the module (forum...)
7     //    id:     the id (instance) of the module (forumid...)
8     //If the course has a password or it doesn't
9     //allow guest access then the user field is
10     //required to see that the user is enrolled
11     //in the course, else no check is performed.
12     //This allows to limit a bit the rss access
13     //to correct users. It isn't unbreakable,
14     //obviously, but its the best I've thought!!
16     $nomoodlecookie = true;     // Because it interferes with caching
18     require_once('../config.php');
19     require_once($CFG->libdir.'/filelib.php');
20     require_once($CFG->libdir.'/rsslib.php');
22     $lifetime = 3600;  // Seconds for files to remain in caches - 1 hour
24     $relativepath = get_file_argument('file.php');
27     if (!$relativepath) {
28         rss_not_found();
29     }
31     // extract relative path components
32     $args = explode('/', trim($relativepath, '/'));
34     $isblog = ($args[0] == 'blog');
36     $needcourse = !$isblog;
38     if (count($args) < 5 && !$isblog) {
39         rss_not_found();
40     }
42     $courseid   = (int)$args[0];
43     $userid     = (int)$args[1];
44     $modulename = clean_param($args[2], PARAM_FILE);
45     $instance   = (int)$args[3];
46     $filename   = 'rss.xml';
48     if ($needcourse and (!$course = get_record('course', 'id', $courseid))) {
49         rss_not_found();
50     }
52     //Check name of module
53     $mods = get_list_of_plugins("mod");
54     if ($needcourse and !in_array(strtolower($modulename), $mods)) {
55         rss_not_found();
56     }
58     //Get course_module to check it's visible
59     if ($needcourse && (!$cm = get_coursemodule_from_instance($modulename,$instance,$courseid)) ) {
60         rss_not_found();
61     }
63     $isstudent = isstudent($courseid,$userid);
64     $isteacher = isteacher($courseid,$userid);
66     //Check for "security" if !course->guest or course->password
67     if ($course->id != SITEID) {
68         if ($needcourse and ((!$course->guest || $course->password) && (!($isstudent || $isteacher)))) {
69             rss_not_found();
70         }
71     }
73     //Check for "security" if the course is hidden or the activity is hidden
74     if ($needcourse and ((!$course->visible || !$cm->visible) && (!$isteacher))) {
75         rss_not_found();
76     }
78     if ($isblog) {
79         $pathname = $CFG->dataroot.'/rss/'.$relativepath;
80     } else {
81         $pathname = $CFG->dataroot.'/rss/'.$modulename.'/'.$instance.'.xml';
82     }
83     //Check that file exists
84     if (!file_exists($pathname)) {
85         rss_not_found();
86     }
88     //Send it to user!
89     send_file($pathname, $filename, $lifetime);
91     function rss_not_found() {
92         /// error, send some XML with error message
93         global $lifetime, $filename;
94         send_file(rss_geterrorxmlfile(), $filename, $lifetime, false, true);
95     }
96 ?>