From: moodler Date: Mon, 20 Mar 2006 12:45:36 +0000 (+0000) Subject: RSS should be fully working now X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=ebb73f49b81e86b468af7b811879f9e30f9dd8b8;p=moodle.git RSS should be fully working now but phew, we need to clean up that old simpblog stuff with all the wierd variable names. ;-) --- diff --git a/blog/class.BlogEntry.php b/blog/class.BlogEntry.php index 9aba078bb7..0e2edb000b 100755 --- a/blog/class.BlogEntry.php +++ b/blog/class.BlogEntry.php @@ -96,15 +96,8 @@ class BlogEntry { } else { $this->entryPublishState = 'draft'; } - - // need to get the email address of the author. - if (! $rs = get_record('user', 'id', $this->entryuserid)) { - error('Could not find user '. $this->entryuserid ."\n"); //Daryl Hawes note: needs localization - die; - } - $this->entryAuthorName = $rs->firstname .' '. $rs->lastname; - //need to make sure that email is actually just a link to our email sending page. - $this->entryAuthorEmail = $rs->email; + $this->entryAuthorName = fullname($entrydetails); // firstname and lastname defined + $this->entryAuthorEmail = $entrydetails->email; } diff --git a/blog/class.BlogFilter.php b/blog/class.BlogFilter.php index f715f799b5..1d3730b311 100755 --- a/blog/class.BlogFilter.php +++ b/blog/class.BlogFilter.php @@ -207,13 +207,16 @@ class BlogFilter { * depending on the type, there are 4 * * different possible sqls * ****************************************/ + + $requiredfields = 'p.*, u.firstname,u.lastname,u.email'; + switch ($this->filtertype) { case 'site': if (!isguest() && isloggedin()) { - $SQL = 'SELECT p.* FROM '.$CFG->prefix.'post p, '.$tagtablesql + $SQL = 'SELECT '.$requiredfields.' FROM '.$CFG->prefix.'post p, '.$tagtablesql .$CFG->prefix.'user u WHERE p.userid = u.id '.$tagquerysql.' AND (p.publishstate = \'site\' OR p.publishstate = \'public\' OR p.userid = '.$USER->id.') @@ -221,7 +224,7 @@ class BlogFilter { } else { - $SQL = 'SELECT p.* FROM '.$CFG->prefix.'post p, '.$tagtablesql + $SQL = 'SELECT '.$requiredfields.' FROM '.$CFG->prefix.'post p, '.$tagtablesql .$CFG->prefix.'user u WHERE p.userid = u.id '.$tagquerysql.' AND p.publishstate = \'public\' @@ -232,24 +235,26 @@ class BlogFilter { case 'course': if ($this->filterselect != SITEID) { - $SQL = '(SELECT p.* FROM '.$CFG->prefix.'post p, '.$tagtablesql - .$CFG->prefix.'user_students u - WHERE p.userid = u.userid '.$tagquerysql.' - AND u.course = '.$this->filterselect.' + $SQL = '(SELECT '.$requiredfields.' FROM '.$CFG->prefix.'post p, '.$tagtablesql + .$CFG->prefix.'user_students s, '.$CFG->prefix.'user u + WHERE p.userid = s.userid '.$tagquerysql.' + AND s.course = '.$this->filterselect.' + AND u.id = p.userid AND (p.publishstate = \'site\' OR p.publishstate = \'public\' OR p.userid = '.$USER->id.')) UNION - (SELECT p.* FROM '.$CFG->prefix.'post p, '.$tagtablesql - .$CFG->prefix.'user_teachers u - WHERE p.userid = u.userid '.$tagquerysql.' - AND u.course = '.$this->filterselect.' + (SELECT '.$requiredfields.' FROM '.$CFG->prefix.'post p, '.$tagtablesql + .$CFG->prefix.'user_teachers t, '.$CFG->prefix.'user u + WHERE p.userid = t.userid '.$tagquerysql.' + AND t.course = '.$this->filterselect.' + AND u.id = p.userid AND (p.publishstate = \'site\' OR p.publishstate = \'public\' OR p.userid = '.$USER->id.'))'; //this will break for postgres, i think } else { if (isloggedin()) { - $SQL = 'SELECT p.* FROM '.$CFG->prefix.'post p, '.$tagtablesql + $SQL = 'SELECT '.$requiredfields.' FROM '.$CFG->prefix.'post p, '.$tagtablesql .$CFG->prefix.'user u WHERE p.userid = u.id '.$tagquerysql.' AND (p.publishstate = \'site\' OR p.publishstate = \'public\' OR p.userid = '.$USER->id.') @@ -257,7 +262,7 @@ class BlogFilter { } else { - $SQL = 'SELECT p.* FROM '.$CFG->prefix.'post p, '.$tagtablesql + $SQL = 'SELECT '.$requiredfields.' FROM '.$CFG->prefix.'post p, '.$tagtablesql .$CFG->prefix.'user u WHERE p.userid = u.id '.$tagquerysql.' AND p.publishstate = \'public\' @@ -270,9 +275,10 @@ class BlogFilter { case 'group': - $SQL = 'SELECT p.* FROM '.$CFG->prefix.'post p, '.$tagtablesql - .$CFG->prefix.'groups_members m + $SQL = 'SELECT '.$requiredfields.' FROM '.$CFG->prefix.'post p, '.$tagtablesql + .$CFG->prefix.'groups_members m, '.$CFG->prefix.'user u WHERE p.userid = m.userid '.$tagquerysql.' + AND u.id = p.userid AND m.groupid = '.$this->filterselect.' AND (p.publishstate = \'site\' OR p.publishstate = \'public\' OR p.userid = '.$USER->id.')'; @@ -280,7 +286,7 @@ class BlogFilter { case 'user': - $SQL = 'SELECT p.* FROM '.$CFG->prefix.'post p, '.$tagtablesql + $SQL = 'SELECT '.$requiredfields.' FROM '.$CFG->prefix.'post p, '.$tagtablesql .$CFG->prefix.'user u WHERE p.userid = u.id '.$tagquerysql.' AND u.id = '.$this->filterselect.' @@ -309,7 +315,7 @@ class BlogFilter { return array(); } else { $blogEntries = array(); - foreach($records as $record) { + foreach ($records as $record) { $blogEntry = new BlogEntry($record); $blogEntries[] = $blogEntry; } diff --git a/blog/index.php b/blog/index.php index 14940c9291..2da452f710 100755 --- a/blog/index.php +++ b/blog/index.php @@ -139,7 +139,6 @@ if ($limit == 'none') { } $blogFilter =& new BlogFilter($userid, $postid, $limit, $start,$filtertype, $filterselect, $tagid, $tag); -//print_object($blogFilter); //debug include($CFG->dirroot .'/blog/header.php'); diff --git a/blog/lib.php b/blog/lib.php index 02691a735d..a911324833 100755 --- a/blog/lib.php +++ b/blog/lib.php @@ -341,6 +341,8 @@ function blog_applicable_publish_states($courseid='') { /// or spg group, but same group member function blog_user_can_view_user_post($targetuserid) { + global $CFG; + $canview = 0; //bad start if (isadmin()) { diff --git a/blog/rsslib.php b/blog/rsslib.php index 191c560512..8f3adfb803 100755 --- a/blog/rsslib.php +++ b/blog/rsslib.php @@ -1,6 +1,7 @@ dirroot.'/lib/rsslib.php'); + require_once($CFG->dirroot .'/blog/lib.php'); // This function returns the icon (from theme) with the link to rss/file.php @@ -49,6 +50,14 @@ // Generate any blog RSS feed via one function (called by ../rss/file.php) function blog_generate_rss_feed($type, $id, $tagid=0) { + global $CFG, $SITE; + + if (empty($CFG->enablerssfeeds)) { + if ($CFG->debug > 7) { + notify('Sorry, RSS feeds are disabled on this site'); + } + return ''; + } $filename = blog_rss_file_name($type, $id, $tagid); @@ -58,408 +67,92 @@ } } - // Proceed to generate it - - switch ($type) { - case 'site': - if (blog_site_feeds($tagid)) { - return $filename; - } - break; - case 'course': - if ( blog_course_feed($id,$tagid)) { - return $filename; - } - break; - case 'group': - if ( blog_group_feed($id,$tagid)) { - return $filename; - } - break; - case 'user': - if ( blog_user_feed($id,$tagid)) { - return $filename; - } - break; - } - - return false; // Couldn't find it or make it - } + /// Get all the posts from the database + $blogFilter =& new BlogFilter(0, 0, 20, 0, $type, $id, $tagid); + $blogposts = $blogFilter->fetch_entries(); - /* Rss files for blogs - * 4 different ways to store feeds. - * site - $CFG->dataroot/rss/blog/site/SITEID.xml - * course - $CFG->dataroot/rss/blog/course/courseid.xml - * group - $CFG->dataroot/rss/blog/group/groupid.xml - * user - $CFG->dataroot/rss/blog/user/userid.xml - */ - function blog_rss_file_name($type, $id, $tagid=0) { - global $CFG; - - if ($tagid) { - return "$CFG->dataroot/rss/blog/$type/$id/$tagid.xml"; + /// Now generate an array of RSS items + if ($blogposts) { + $items = array(); + foreach ($blogposts as $blogpost) { + $item = NULL; + $item->author = $blogpost->entryAuthorName; + $item->title = $blogpost->entryTitle; + $item->pubdate = $blogpost->entryLastModified; + $item->link = $CFG->wwwroot.'/blog/index.php?postid='.$blogpost->entryId; + $item->description = format_text($blogpost->entryBody, $blogpost->entryFormat); + $items[] = $item; + } + $articles = rss_add_items($items); /// Change structure to XML } else { - return "$CFG->dataroot/rss/blog/$type/$id.xml"; - } - } - - //This function saves to file the rss feed specified in the parameters - function blog_rss_save_file($type, $id, $result) { - global $CFG; - - $status = true; - - if (! $basedir = make_upload_directory ('rss/blogs/'. $type.'/'.$id)) { - //Cannot be created, so error - $status = false; + $articles = ''; } - if ($status) { - $file = blog_rss_file_name($type, $id, $tagid); - $rss_file = fopen($file, "w"); - if ($rss_file) { - $status = fwrite ($rss_file, $result); - fclose($rss_file); - } else { - $status = false; - } - } - return $status; - } + /// Get header and footer information - - // Only 1 view, site level feeds - function blog_site_feeds($tagid=0) { - - global $CFG; - $status = true; - - //////$CFG->debug = true; - - // Check CFG->enablerssfeeds. - if (empty($CFG->enablerssfeeds)) { - //Some debug... - if ($CFG->debug > 7) { - echo "DISABLED (admin variables)"; - } + switch ($type) { + case 'user': + $info = fullname(get_record('user', 'id', $id, '','','','','firstname,lastname')); + break; + case 'course': + $info = get_field('course', 'fullname', 'id', $id); + break; + case 'site': + $info = $SITE->fullname; + break; + case 'group': + $info = get_field('groups', 'name', 'id', $id); + break; } - // It's working so we start... - else { - // Iterate over all data. - $filename = blog_rss_file_name('site', SITEID, $tagid); // RSS file - // Get the most recent 20 posts - $sql = 'SELECT p.* FROM '.$CFG->prefix.'post p, - '.$CFG->prefix.'user u - WHERE p.userid = u.id - AND (p.publishstate = \'site\' OR p.publishstate = \'public\') - AND u.deleted = 0 ORDER BY lastmodified DESC LIMIT 0,20'; - - $blogposts = get_records_sql($sql); - - // Now all the rss items. - $items = array(); - - foreach ($blogposts as $blogpost) { - $item = null; - $temp = array(); - array_push($temp, $blogpost); - - $user = get_record('user','id',$blogpost->userid); - $item->author = fullname($user); - $item->title = $blogpost->subject; - $item->pubdate = $blogpost->lastmodified; - $item->link = $CFG->wwwroot.'/blog/index.php?postid='.$blogpost->id; - $item->description = format_text($blogpost->summary, $blogpost->format); - array_push($items, $item); - } - - // First all rss feeds common headers. - $header = rss_standard_header(format_string('siteblog',true), - $CFG->wwwroot.'/blog/index.php', - format_string('intro',true)); - - if (!empty($header)) { - $articles = rss_add_items($items); - } - - // Now all rss feeds common footers. - if (!empty($header) && !empty($articles)) { - $footer = rss_standard_footer(); - } - // Now, if everything is ok, concatenate it. - if (!empty($header) && !empty($articles) && !empty($footer)) { - $rss = $header.$articles.$footer; + $header = rss_standard_header(get_string($type.'blog','blog', $info), + $CFG->wwwroot.'/blog/index.php', + get_string('intro','blog')); + + $footer = rss_standard_footer(); - //Save the XML contents to file. - $status = blog_rss_save_file('site', SITEID, $rss); - } - else { - $status = false; - } - } - return $status; - } + /// Save the XML contents to file. - /// Generate the feeds for all courses - function blog_course_feeds() { + $rssdata = $header.$articles.$footer; - $courses = get_records('course'); - foreach ($courses as $course) { - if ($course->id != SITEID) { - blog_course_feed($course); - } + if (blog_rss_save_file($type,$id,$tagid,$rssdata)) { + return $filename; + } else { + return false; // Couldn't find it or make it } } - // takes in course object from db - function blog_course_feed($course, $tagid=0) { + function blog_rss_file_name($type, $id, $tagid=0) { global $CFG; - $status = true; - - ////$CFG->debug = true; - // Check CFG->enablerssfeeds. - if (empty($CFG->enablerssfeeds)) { - //Some debug... - if ($CFG->debug > 7) { - echo "DISABLED (admin variables)"; - } - } - - // It's working so we start... - else { - // Iterate over all data. - $filename = blog_rss_file_name('course', $course->id, $tagid); // RSS file - // Get the most recent 20 posts - - $sql = '(SELECT p.* FROM '.$CFG->prefix.'post p, ' - .$CFG->prefix.'user_students u - WHERE p.userid = u.userid - AND u.course = '.$course->id.' - AND (p.publishstate = \'site\' OR p.publishstate = \'public\')) - - UNION - - (SELECT p.* FROM '.$CFG->prefix.'post p, ' - .$CFG->prefix.'user_teachers u - WHERE p.userid = u.userid - AND u.course = '.$course->id.' - AND (p.publishstate = \'site\' OR p.publishstate = \'public\')) ORDER BY lastmodified DESC LIMIT 0,20'; - - $blogposts = get_records_sql($sql); - - // Now all the rss items. - $items = array(); - - foreach ($blogposts as $blogpost) { - $item = null; - $temp = array(); - array_push($temp, $blogpost); - - $user = get_record('user','id',$blogpost->userid); - $item->author = fullname($user); - $item->title = $blogpost->subject; - $item->pubdate = $blogpost->lastmodified; - $item->link = $CFG->wwwroot.'/blog/index.php?postid='.$blogpost->id; - $item->description = format_text($blogpost->summary, $blogpost->format); - array_push($items, $item); - } - - // First all rss feeds common headers. - $header = rss_standard_header(format_string('courseblog',true), - $CFG->wwwroot.'/blog/index.php', - format_string('intro',true)); - - if (!empty($header)) { - $articles = rss_add_items($items); - } - - // Now all rss feeds common footers. - if (!empty($header) && !empty($articles)) { - $footer = rss_standard_footer(); - } - // Now, if everything is ok, concatenate it. - if (!empty($header) && !empty($articles) && !empty($footer)) { - $rss = $header.$articles.$footer; - - //Save the XML contents to file. - $status = blog_rss_save_file('course',$course->id, $rss); - } - else { - $status = false; - } + if ($tagid) { + return "$CFG->dataroot/rss/blog/$type/$id/$tagid.xml"; + } else { + return "$CFG->dataroot/rss/blog/$type/$id.xml"; } - return $status; } - - function blog_group_feeds() { - - $groups = get_records('groups'); - foreach ($groups as $group) { - blog_group_feed($group); - } - } - - // takes in course object from db - function blog_group_feed($group, $tagid=0) { - + //This function saves to file the rss feed specified in the parameters + function blog_rss_save_file($type, $id, $tagid=0, $contents='') { global $CFG; - $status = true; - //$CFG->debug = true; - - // Check CFG->enablerssfeeds. - if (empty($CFG->enablerssfeeds)) { - //Some debug... - if ($CFG->debug > 7) { - echo "DISABLED (admin variables)"; - } + if (! $basedir = make_upload_directory("rss/blog/$type/$id")) { + return false; } - // It's working so we start... - else { - // Iterate over all data. - $filename = blog_rss_file_name('group', $group->id, $tagid); // RSS file - // Get the most recent 20 posts - - $sql= 'SELECT p.* FROM '.$CFG->prefix.'post p, ' - .$CFG->prefix.'groups_members m - WHERE p.userid = m.userid - AND m.groupid = '.$group->id.' - AND (p.publishstate = \'site\' OR p.publishstate = \'public\') ORDER BY lastmodified DESC LIMIT 0,20'; - - - - // Now all the rss items. - $items = array(); - if ($blogposts = get_records_sql($sql)) { - foreach ($blogposts as $blogpost) { - $item = null; - $temp = array(); - array_push($temp, $blogpost); - - $user = get_record('user','id',$blogpost->userid); - $item->author = fullname($user); - $item->title = $blogpost->subject; - $item->pubdate = $blogpost->lastmodified; - $item->link = $CFG->wwwroot.'/blog/index.php?postid='.$blogpost->id; - $item->description = format_text($blogpost->summary, $blogpost->format); - array_push($items, $item); - } - } - - // First all rss feeds common headers. - $header = rss_standard_header(format_string('groupblog',true), - $CFG->wwwroot.'/blog/index.php', - format_string('intro',true)); - - if (!empty($header)) { - $articles = rss_add_items($items); - } - - // Now all rss feeds common footers. - if (!empty($header) && !empty($articles)) { - $footer = rss_standard_footer(); - } - // Now, if everything is ok, concatenate it. - if (!empty($header) && !empty($articles) && !empty($footer)) { - $rss = $header.$articles.$footer; - - //Save the XML contents to file. - $status = blog_rss_save_file('group',$group->id, $rss); - } - else { - $status = false; - } - } - return $status; - } - - - function blog_user_feeds() { - - $users = get_records('user'); - foreach ($users as $user) { - blog_user_feed($user); - } - } - - // takes in course object from db - function blog_user_feed($user, $tagid=0) { - - global $CFG; - $status = true; - - ////$CFG->debug = true; - - // Check CFG->enablerssfeeds. - if (empty($CFG->enablerssfeeds)) { - //Some debug... - if ($CFG->debug > 7) { - echo "DISABLED (admin variables)"; - } + $file = blog_rss_file_name($type, $id, $tagid); + $rss_file = fopen($file, 'w'); + if ($rss_file) { + $status = fwrite ($rss_file, $contents); + fclose($rss_file); + } else { + $status = false; } - // It's working so we start... - else { - // Iterate over all data. - $filename = blog_rss_file_name('user', $user->id, $tagid); // RSS file - // Get the most recent 20 posts - - $sql = 'SELECT p.* FROM '.$CFG->prefix.'post p, ' - .$CFG->prefix.'user u - WHERE p.userid = u.id - AND u.id = '.$user->id.' - AND (p.publishstate = \'site\' OR p.publishstate = \'public\') ORDER BY lastmodified DESC LIMIT 0,20'; - - - - // Now all the rss items. - $items = array(); - if ($blogposts = get_records_sql($sql)) { - foreach ($blogposts as $blogpost) { - $item = null; - $temp = array(); - array_push($temp, $blogpost); - - $user = get_record('user','id',$blogpost->userid); - $item->author = fullname($user); - $item->title = $blogpost->subject; - $item->pubdate = $blogpost->lastmodified; - $item->link = $CFG->wwwroot.'/blog/index.php?postid='.$blogpost->id; - $item->description = format_text($blogpost->summary, $blogpost->format); - array_push($items, $item); - } - } - // First all rss feeds common headers. - $header = rss_standard_header(format_string('userblog',true), - $CFG->wwwroot.'/blog/index.php', - format_string('intro',true)); - - if (!empty($header)) { - $articles = rss_add_items($items); - } - - // Now all rss feeds common footers. - if (!empty($header) && !empty($articles)) { - $footer = rss_standard_footer(); - } - // Now, if everything is ok, concatenate it. - if (!empty($header) && !empty($articles) && !empty($footer)) { - $rss = $header.$articles.$footer; - - //Save the XML contents to file. - $status = blog_rss_save_file('user',$user->id, $rss); - } - else { - $status = false; - } - } return $status; } + ?>