]> git.mjollnir.org Git - moodle.git/commitdiff
RSS should be fully working now
authormoodler <moodler>
Mon, 20 Mar 2006 12:45:36 +0000 (12:45 +0000)
committermoodler <moodler>
Mon, 20 Mar 2006 12:45:36 +0000 (12:45 +0000)
but phew, we need to clean up that old simpblog stuff with all the wierd
variable names.  ;-)

blog/class.BlogEntry.php
blog/class.BlogFilter.php
blog/index.php
blog/lib.php
blog/rsslib.php

index 9aba078bb797b834b2a3c7a61f571694effa2951..0e2edb000b4c588aece8c4f36c5c7a9d234b7a62 100755 (executable)
@@ -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;
 
     }
 
index f715f799b50411d10f4366d57c32e8be07a19848..1d3730b311bfa13eb8bacb6a892eae104c086225 100755 (executable)
@@ -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;
             }
index 14940c9291c61918126ba39400546a2d6bd4888e..2da452f7102baf7e732b9c540af28d92448c7b7f 100755 (executable)
@@ -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');
 
index 02691a735d4888c530b062a69190aa4070372477..a91132483377af6f5743fbfb3fd60fc9a055b542 100755 (executable)
@@ -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()) {
index 191c560512c60a14c036e4e5dd9bfffa157e3015..8f3adfb803454479900238928ad2f0d5389b0c87 100755 (executable)
@@ -1,6 +1,7 @@
 <?php
 
     require_once($CFG->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
 
     // 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);
 
             }
         }
 
-        // 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;
     }
+
 ?>