Skip to content

Commit

Permalink
RSS for forums now checks the new posts against the file modification…
Browse files Browse the repository at this point in the history
… date,

and doesn't regenerate the RSS file if it doesn't need to.

Much faster now.   :-)
  • Loading branch information
moodler committed Aug 5, 2004
1 parent b65a50e commit 6069e20
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 5 deletions.
65 changes: 61 additions & 4 deletions mod/forum/rsslib.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,28 @@ function forum_rss_feeds() {
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->";
Expand Down Expand Up @@ -57,6 +79,17 @@ function forum_rss_feeds() {
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) {
Expand Down Expand Up @@ -118,12 +151,18 @@ 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,
Expand All @@ -138,8 +177,14 @@ function forum_rss_feed_discussions($forum) {
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;
Expand All @@ -166,12 +211,18 @@ function forum_rss_feed_discussions($forum) {

//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,
Expand All @@ -186,8 +237,14 @@ function forum_rss_feed_posts($forum) {
{$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;
Expand Down
9 changes: 8 additions & 1 deletion rss/rsslib.php
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ function rss_save_file ($modname,$mod,$result) {
}

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);
Expand All @@ -110,6 +110,13 @@ function rss_save_file ($modname,$mod,$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) {

Expand Down

0 comments on commit 6069e20

Please sign in to comment.