17ac352787807a860c16edd8a0016e03acee8dd0
[moodle.git] / mod / data / rsslib.php
1 <?php
2     // This file adds support to rss feeds generation
4     // This function is the main entry point to database module
5     // rss feeds generation.
6     function data_rss_get_feed($context, $cm, $instance, $args) {
7         global $CFG, $DB;
9         // Check CFG->data_enablerssfeeds.
10         if (empty($CFG->data_enablerssfeeds)) {
11             debugging("DISABLED (module configuration)");
12             return null;
13         }
15         //check capabilities
16         if (!has_capability('mod/data:managetemplates', $context)) {
17             return null;
18         }
20         $data = $DB->get_record('data', array('id' => $instance), '*', MUST_EXIST);
22         if (!rss_enabled('data', $data, false, true)) {
23             return null;
24         }
26         $sql = data_rss_get_sql($data, $cm);
28         //get the cache file info
29         $filename = rss_get_file_name($data, $sql);
30         $cachedfilepath = rss_get_file_full_name('data', $filename);
32         //Is the cache out of date?
33         $cachedfilelastmodified = 0;
34         if (file_exists($cachedfilepath)) {
35             $cachedfilelastmodified = filemtime($cachedfilepath);
36         }
38         if (data_rss_newstuff($data, $cm, $cachedfilelastmodified)) {
39             require_once($CFG->dirroot . '/mod/data/lib.php');
41             // Get the first field in the list  (a hack for now until we have a selector)
42             if (!$firstfield = $DB->get_record_sql('SELECT id,name FROM {data_fields} WHERE dataid = ? ORDER by id', array($data->id), true)) {
43                 return null;
44             }
46             if (!$records = $DB->get_records_sql($sql, array(), 0, $data->rssarticles)) {
47                 return null;
48             }
49             
50             $firstrecord = array_shift($records);  // Get the first and put it back
51             array_unshift($records, $firstrecord);
53             // Now create all the articles
54             $items = array();
55             foreach ($records as $record) {
56                 $recordarray = array();
57                 array_push($recordarray, $record);
59                 $item = null;
61                 // guess title or not
62                 if (!empty($data->rsstitletemplate)) {
63                     $item->title = data_print_template('rsstitletemplate', $recordarray, $data, '', 0, true);
64                 } else { // else we guess
65                     $item->title   = strip_tags($DB->get_field('data_content', 'content',
66                                                       array('fieldid'=>$firstfield->id, 'recordid'=>$record->id)));
67                 }
68                 $item->description = data_print_template('rsstemplate', $recordarray, $data, '', 0, true);
69                 $item->pubdate = $record->timecreated;
70                 $item->link = $CFG->wwwroot.'/mod/data/view.php?d='.$data->id.'&rid='.$record->id;
72                 array_push($items, $item);
73             }
74             $course = $DB->get_record('course', array('id'=>$data->course));
76             // First all rss feeds common headers.
77             $header = rss_standard_header($course->shortname.': '.format_string($data->name,true),
78                                           $CFG->wwwroot."/mod/data/view.php?d=".$data->id,
79                                           format_string($data->intro,true)); //TODO: fix format
81             if (!empty($header)) {
82                 $articles = rss_add_items($items);
83             }
85             // Now all rss feeds common footers.
86             if (!empty($header) && !empty($articles)) {
87                 $footer = rss_standard_footer();
88             }
89             // Now, if everything is ok, concatenate it.
90             if (!empty($header) && !empty($articles) && !empty($footer)) {
91                 $rss = $header.$articles.$footer;
93                 //Save the XML contents to file.
94                 $status = rss_save_file('data', $filename, $rss);
95             }
96         }
98         return $cachedfilepath;
99     }
101     function data_rss_get_sql($data, $cm, $time=0) {
102         //do we only want new posts?
103         if ($time) {
104             $time = " AND dr.timemodified > '$time'";
105         } else {
106             $time = '';
107         }
109         $approved = ($data->approval) ? ' AND dr.approved = 1 ' : ' ';
111         $sql = "SELECT dr.*, u.firstname, u.lastname
112                   FROM {data_records} dr, {user} u
113                  WHERE dr.dataid = {$data->id} $approved
114                        AND dr.userid = u.id $time
115               ORDER BY dr.timecreated DESC";
117         return $sql;
118     }
120     /**
121      * If there is new stuff in since $time this returns true
122      * Otherwise it returns false.
123      *
124      * @param object $data the data activity object
125      * @param object $cm
126      * @param int $time timestamp
127      * @return bool
128      */
129     function data_rss_newstuff($data, $cm, $time) {
130         global $DB;
132         $sql = data_rss_get_sql($data, $cm, $time);
134         $recs = $DB->get_records_sql($sql, null, 0, 1);//limit of 1. If we get even 1 back we have new stuff
135         return ($recs && !empty($recs));
136     }