if ($forums = get_records("forum")) {
foreach ($forums as $forum) {
if (!empty($forum->rsstype) && !empty($forum->rssarticles) && $status) {
+
+ $filename = rss_file_name('forum', $forum); // RSS file
+
+ //First let's make sure there is work to do by checking existing files
+ if (file_exists($filename)) {
+ if ($lastmodified = filemtime($filename)) {
+ if (!forum_rss_newstuff($forum, $lastmodified)) {
+ continue;
+ }
+ }
+ }
+
+ //Ignore hidden forums
+ if (!instance_is_visible('forum',$forum)) {
+ if (file_exists($filename)) {
+ @unlink($filename);
+ }
+ continue;
+ }
+
+ mtrace("Updating RSS feed for $forum->name, ID: $forum->id");
+
//Some debug...
if ($CFG->debug > 7) {
echo "ID: $forum->id->";
return $status;
}
+ function forum_rss_newstuff($forum, $time) {
+ // If there is new stuff in the forum since $time then this returns
+ // true. Otherwise it returns false.
+ if ($forum->rsstype == 1) {
+ $items = forum_rss_feed_discussions($forum, $time);
+ } else {
+ $items = forum_rss_feed_posts($forum, $time);
+ }
+ return (!empty($items));
+ }
+
//This function return the XML rss contents about the forum record passed as parameter
//It returns false if something is wrong
function forum_rss_feed($forum) {
//This function returns "items" record array to be used to build the rss feed
//for a Type=discussions forum
- function forum_rss_feed_discussions($forum) {
+ function forum_rss_feed_discussions($forum, $newsince=0) {
global $CFG;
$items = array();
+ if ($newsince) {
+ $newsince = " AND p.created > '$newsince'";
+ } else {
+ $newsince = "";
+ }
+
if ($recs = get_records_sql ("SELECT d.id discussionid,
d.name discussionname,
u.id userid,
WHERE d.forum = '$forum->id' AND
p.discussion = d.id AND
p.parent = 0 AND
- u.id = p.userid
+ u.id = p.userid $newsince
ORDER BY p.created desc")) {
+
+ //Are we just looking for new ones? If so, then return now.
+ if ($newsince) {
+ return true;
+ }
+
//Iterate over each discussion to get forum->rssarticles records
$articlesleft = $forum->rssarticles;
$item = NULL;
//This function returns "items" record array to be used to build the rss feed
//for a Type=posts forum
- function forum_rss_feed_posts($forum) {
+ function forum_rss_feed_posts($forum, $newsince=0) {
global $CFG;
$items = array();
+ if ($newsince) {
+ $newsince = " AND p.created > '$newsince'";
+ } else {
+ $newsince = "";
+ }
+
if ($recs = get_records_sql ("SELECT p.id postid,
d.id discussionid,
u.id userid,
{$CFG->prefix}user u
WHERE d.forum = '$forum->id' AND
p.discussion = d.id AND
- u.id = p.userid
+ u.id = p.userid $newsince
ORDER BY p.created desc")) {
+
+ //Are we just looking for new ones? If so, then return now.
+ if ($newsince) {
+ return true;
+ }
+
//Iterate over each discussion to get forum->rssarticles records
$articlesleft = $forum->rssarticles;
$item = NULL;
}
if ($status) {
- $file = $basedir .= "/".$mod->id.".xml";
+ $file = rss_file_name($modname, $mod);
$rss_file = fopen($file,"w");
if ($rss_file) {
$status = fwrite ($rss_file,$result);
return $status;
}
+
+function rss_file_name($modname, $mod) {
+ global $CFG;
+
+ return "$CFG->dataroot/rss/$modname/$mod->id.xml";
+}
+
//This function return all the common headers for every rss feed in the site
function rss_standard_header($title = NULL, $link = NULL, $description = NULL) {