Exemplo n.º 1
0
/**
 * This function return the XML rss contents about the forum
 * It returns false if something is wrong
 *
 * @param stdClass $forum the forum object
 * @param string $sql the SQL used to retrieve the contents from the database
 * @param array $params the SQL parameters used
 * @param object $context the context this forum relates to
 * @return bool|string false if the contents is empty, otherwise the contents of the feed is returned
 *
 * @Todo MDL-31129 implement post attachment handling
 */
function hsuforum_rss_feed_contents($forum, $sql, $params, $context)
{
    global $CFG, $DB, $USER;
    $status = true;
    $recs = $DB->get_recordset_sql($sql, $params, 0, $forum->rssarticles);
    //set a flag. Are we displaying discussions or posts?
    $isdiscussion = true;
    if (!empty($forum->rsstype) && $forum->rsstype != 1) {
        $isdiscussion = false;
    }
    if (!($cm = get_coursemodule_from_instance('hsuforum', $forum->id, $forum->course))) {
        print_error('invalidcoursemodule');
    }
    $formatoptions = new stdClass();
    $items = array();
    foreach ($recs as $rec) {
        $item = new stdClass();
        $discussion = new stdClass();
        $discussion->id = $rec->discussionid;
        $discussion->groupid = $rec->groupid;
        $discussion->timestart = $rec->timestart;
        $discussion->timeend = $rec->timeend;
        $post = null;
        if (!$isdiscussion) {
            $post = new stdClass();
            $post->id = $rec->postid;
            $post->parent = $rec->postparent;
            $post->userid = $rec->userid;
            $post->privatereply = $rec->postprivatereply;
        }
        if ($isdiscussion && !hsuforum_user_can_see_discussion($forum, $discussion, $context)) {
            // This is a discussion which the user has no permission to view
            $item->title = get_string('forumsubjecthidden', 'hsuforum');
            $message = get_string('forumbodyhidden', 'hsuforum');
            $item->author = get_string('forumauthorhidden', 'hsuforum');
        } else {
            if (!$isdiscussion && !hsuforum_user_can_see_post($forum, $discussion, $post, $USER, $cm)) {
                // This is a post which the user has no permission to view
                $item->title = get_string('forumsubjecthidden', 'hsuforum');
                $message = get_string('forumbodyhidden', 'hsuforum');
                $item->author = get_string('forumauthorhidden', 'hsuforum');
            } else {
                // The user must have permission to view
                if ($isdiscussion && !empty($rec->discussionname)) {
                    $item->title = format_string($rec->discussionname);
                } else {
                    if (!empty($rec->postsubject)) {
                        $item->title = format_string($rec->postsubject);
                    } else {
                        //we should have an item title by now but if we dont somehow then substitute something somewhat meaningful
                        $item->title = format_string($forum->name . ' ' . userdate($rec->postcreated, get_string('strftimedatetimeshort', 'langconfig')));
                    }
                }
                $user = hsuforum_anonymize_user($rec, $forum, (object) array('id' => $rec->postid, 'reveal' => $rec->postreveal));
                $item->author = fullname($user);
                $message = file_rewrite_pluginfile_urls($rec->postmessage, 'pluginfile.php', $context->id, 'mod_hsuforum', 'post', $rec->postid);
                $formatoptions->trusted = $rec->posttrust;
            }
        }
        if ($isdiscussion) {
            $item->link = $CFG->wwwroot . "/mod/hsuforum/discuss.php?d=" . $rec->discussionid;
        } else {
            $item->link = $CFG->wwwroot . "/mod/hsuforum/discuss.php?d=" . $rec->discussionid . "&parent=" . $rec->postid;
        }
        $formatoptions->trusted = $rec->posttrust;
        $item->description = format_text($message, $rec->postformat, $formatoptions, $forum->course);
        //TODO: MDL-31129 implement post attachment handling
        /*if (!$isdiscussion) {
                    $post_file_area_name = str_replace('//', '/', "$forum->course/$CFG->moddata/hsuforum/$forum->id/$rec->postid");
                    $post_files = get_directory_list("$CFG->dataroot/$post_file_area_name");
        
                    if (!empty($post_files)) {
                        $item->attachments = array();
                    }
                }*/
        $item->pubdate = $rec->postcreated;
        $items[] = $item;
    }
    $recs->close();
    // Create the RSS header.
    $header = rss_standard_header(strip_tags(format_string($forum->name, true)), $CFG->wwwroot . "/mod/hsuforum/view.php?f=" . $forum->id, format_string($forum->intro, true));
    // TODO: fix format
    // Now all the RSS items, if there are any.
    $articles = '';
    if (!empty($items)) {
        $articles = rss_add_items($items);
    }
    // Create the RSS footer.
    $footer = rss_standard_footer();
    return $header . $articles . $footer;
}
Exemplo n.º 2
0
// If there is a warning message and we are not editing a post we need to handle the warning.
if (!empty($thresholdwarning) && !$edit) {
    // Here we want to throw an exception if they are no longer allowed to post.
    hsuforum_check_blocking_threshold($thresholdwarning);
}
if (!empty($parent)) {
    if (!($discussion = $DB->get_record('hsuforum_discussions', array('id' => $parent->discussion)))) {
        print_error('notpartofdiscussion', 'hsuforum');
    }
    echo $renderer->svg_sprite();
    // We don't have the valid unread status. Set to read so we don't see
    // the unread tag.
    $parent->postread = true;
    echo $renderer->post($cm, $discussion, $parent);
    if (empty($post->edit)) {
        if ($forum->type != 'qanda' || hsuforum_user_can_see_discussion($forum, $discussion, $modcontext)) {
            $posts = hsuforum_get_all_discussion_posts($discussion->id);
        }
    }
} else {
    if (!empty($forum->intro)) {
        echo $OUTPUT->box(format_module_intro('hsuforum', $forum, $cm->id), 'generalbox', 'intro');
        if (!empty($CFG->enableplagiarism)) {
            require_once $CFG->libdir . '/plagiarismlib.php';
            echo plagiarism_print_disclosure($cm->id);
        }
    }
}
if (!empty($formheading)) {
    echo $OUTPUT->heading($formheading, 4);
}
 /**
  * Returns a list of forum discussions as well as a summary of the discussion
  * in a provided list of forums.
  *
  * @param array $forumids the forum ids
  * @param int $limitfrom limit from SQL data
  * @param int $limitnum limit number SQL data
  *
  * @return array the forum discussion details
  * @since Moodle 2.5
  */
 public static function get_forum_discussions($forumids, $limitfrom = 0, $limitnum = 0)
 {
     global $CFG, $DB;
     require_once $CFG->dirroot . "/mod/hsuforum/lib.php";
     // Validate the parameter.
     $params = self::validate_parameters(self::get_forum_discussions_parameters(), array('forumids' => $forumids, 'limitfrom' => $limitfrom, 'limitnum' => $limitnum));
     $forumids = $params['forumids'];
     $limitfrom = $params['limitfrom'];
     $limitnum = $params['limitnum'];
     // Array to store the forum discussions to return.
     $arrdiscussions = array();
     // Keep track of the users we have looked up in the DB.
     $arrusers = array();
     // Loop through them.
     foreach ($forumids as $id) {
         // Get the forum object.
         $forum = $DB->get_record('hsuforum', array('id' => $id), '*', MUST_EXIST);
         $course = get_course($forum->course);
         $modinfo = get_fast_modinfo($course);
         $forums = $modinfo->get_instances_of('hsuforum');
         $cm = $forums[$forum->id];
         // Get the module context.
         $modcontext = context_module::instance($cm->id);
         // Validate the context.
         self::validate_context($modcontext);
         require_capability('mod/hsuforum:viewdiscussion', $modcontext);
         $order = 'timemodified DESC';
         if ($discussions = hsuforum_get_discussions($cm, $order, true, [$limitfrom, $limitnum])) {
             // Check if they can view full names.
             $canviewfullname = has_capability('moodle/site:viewfullnames', $modcontext);
             foreach ($discussions as $discussion) {
                 // This function checks capabilities, timed discussions, groups and qanda forums posting.
                 if (!hsuforum_user_can_see_discussion($forum, $discussion, $modcontext)) {
                     continue;
                 }
                 $usernamefields = user_picture::fields();
                 // If we don't have the users details then perform DB call.
                 if (empty($arrusers[$discussion->userid])) {
                     $arrusers[$discussion->userid] = $DB->get_record('user', array('id' => $discussion->userid), $usernamefields, MUST_EXIST);
                 }
                 // Create object to return.
                 $return = new stdClass();
                 $return->id = (int) $discussion->discussion;
                 $return->course = $cm->course;
                 $return->forum = $forum->id;
                 $return->name = $discussion->name;
                 $return->userid = $discussion->userid;
                 $return->groupid = $discussion->groupid;
                 $return->assessed = $discussion->assessed;
                 $return->timemodified = (int) $discussion->timemodified;
                 $return->usermodified = $discussion->usermodified;
                 $return->timestart = $discussion->timestart;
                 $return->timeend = $discussion->timeend;
                 $return->firstpost = (int) $discussion->id;
                 $return->firstuserfullname = fullname($arrusers[$discussion->userid], $canviewfullname);
                 $return->firstuserimagealt = $arrusers[$discussion->userid]->imagealt;
                 $return->firstuserpicture = $arrusers[$discussion->userid]->picture;
                 $return->firstuseremail = $arrusers[$discussion->userid]->email;
                 $return->subject = $discussion->subject;
                 $return->numunread = '';
                 $return->numunread = (int) $discussion->unread;
                 // Check if there are any replies to this discussion.
                 if (!is_null($discussion->replies)) {
                     $return->numreplies = (int) $discussion->replies;
                     $return->lastpost = (int) $discussion->lastpostid;
                 } else {
                     // No replies, so the last post will be the first post.
                     $return->numreplies = 0;
                     $return->lastpost = (int) $discussion->firstpost;
                 }
                 // Get the last post as well as the user who made it.
                 $lastpost = $DB->get_record('hsuforum_posts', array('id' => $return->lastpost), '*', MUST_EXIST);
                 if (empty($arrusers[$lastpost->userid])) {
                     $arrusers[$lastpost->userid] = $DB->get_record('user', array('id' => $lastpost->userid), $usernamefields, MUST_EXIST);
                 }
                 $return->lastuserid = $lastpost->userid;
                 $return->lastuserfullname = fullname($arrusers[$lastpost->userid], $canviewfullname);
                 $return->lastuserimagealt = $arrusers[$lastpost->userid]->imagealt;
                 $return->lastuserpicture = $arrusers[$lastpost->userid]->picture;
                 $return->lastuseremail = $arrusers[$lastpost->userid]->email;
                 // Add the discussion statistics to the array to return.
                 $arrdiscussions[$return->id] = (array) $return;
             }
             $discussions->close();
         }
     }
     return $arrdiscussions;
 }