function get_content() { global $CFG, $USER, $PAGE, $DB, $OUTPUT; if (empty($this->config->recentbloginterval)) { $this->config->recentbloginterval = 8400; } if (empty($this->config->numberofrecentblogentries)) { $this->config->numberofrecentblogentries = 4; } if (empty($CFG->bloglevel) || $CFG->bloglevel < BLOG_GLOBAL_LEVEL && !(isloggedin() && !isguestuser())) { $this->content->text = ''; if ($this->page->user_is_editing()) { $this->content->text = get_string('blogdisable', 'blog'); } return $this->content; } $this->content = new stdClass(); $this->content->footer = ''; $context = $this->page->context; $filter = array(); if ($context->contextlevel == CONTEXT_MODULE) { $filter['module'] = $context->instanceid; $a = new stdClass(); $a->type = get_string('modulename', $this->page->cm->modname); $strview = get_string('viewallmodentries', 'blog', $a); } else { if ($context->contextlevel == CONTEXT_COURSE) { $filter['course'] = $context->instanceid; $a = new stdClass(); $a->type = get_string('course'); $strview = get_string('viewblogentries', 'blog', $a); } else { $strview = get_string('viewsiteentries', 'blog'); } } $filter['since'] = $this->config->recentbloginterval; $bloglisting = new blog_listing($filter); $entries = $bloglisting->get_entries(0, $this->config->numberofrecentblogentries, 4); $url = new moodle_url('/blog/index.php', $filter); if (!empty($entries)) { $entrieslist = array(); $viewblogurl = new moodle_url('/blog/index.php'); foreach ($entries as $entryid => $entry) { $viewblogurl->param('entryid', $entryid); $entrylink = html_writer::link($viewblogurl, shorten_text($entry->subject)); $entrieslist[] = $entrylink; } $this->content->text .= html_writer::alist($entrieslist, array('class' => 'list')); $viewallentrieslink = html_writer::link($url, $strview); $this->content->text .= $viewallentrieslink; } else { $this->content->text .= get_string('norecentblogentries', 'block_blog_recent'); } }
/** * Generate any blog RSS feed via one function * * @param stdClass $context The context of the blog for which the feed it being generated * @param array $args An array of arguements needed to build the feed (contextid, token, componentname, type, id, tagid) */ function blog_rss_get_feed($context, $args) { global $CFG, $SITE, $DB; if (empty($CFG->bloglevel)) { debugging('Blogging disabled on this site, RSS feeds are not available'); return null; } if (empty($CFG->enablerssfeeds)) { debugging('Sorry, RSS feeds are disabled on this site'); return ''; } if ($CFG->bloglevel == BLOG_SITE_LEVEL) { if (isguestuser()) { debugging(get_string('nopermissiontoshow', 'error')); return ''; } } $sitecontext = get_context_instance(CONTEXT_SYSTEM); if (!has_capability('moodle/blog:view', $sitecontext)) { return null; } $type = clean_param($args[3], PARAM_ALPHA); $id = clean_param($args[4], PARAM_INT); // could be groupid / courseid / userid depending on $type $tagid = 0; if ($args[5] != 'rss.xml') { $tagid = clean_param($args[5], PARAM_INT); } else { $tagid = 0; } $filename = blog_rss_file_name($type, $id, $tagid); if (file_exists($filename)) { if (filemtime($filename) + 3600 > time()) { return $filename; // It's already done so we return cached version } } $courseid = $groupid = $userid = null; switch ($type) { case 'site': //$siteid = $id; break; case 'course': $courseid = $id; break; case 'group': $groupid = $id; break; case 'user': $userid = $id; break; } // Get all the entries from the database require_once $CFG->dirroot . '/blog/locallib.php'; $blogheaders = blog_get_headers($courseid, $groupid, $userid, $tagid); $bloglisting = new blog_listing($blogheaders['filters']); $blogentries = $bloglisting->get_entries(); // Now generate an array of RSS items if ($blogentries) { $items = array(); foreach ($blogentries as $blog_entry) { $item = NULL; $item->author = fullname($DB->get_record('user', array('id' => $blog_entry->userid))); // TODO: this is slow $item->title = $blog_entry->subject; $item->pubdate = $blog_entry->lastmodified; $item->link = $CFG->wwwroot . '/blog/index.php?entryid=' . $blog_entry->id; $summary = file_rewrite_pluginfile_urls($blog_entry->summary, 'pluginfile.php', $sitecontext->id, 'blog', 'post', $blog_entry->id); $item->description = format_text($summary, $blog_entry->format); if (!empty($CFG->usetags) && ($blogtags = tag_get_tags_array('post', $blog_entry->id))) { if ($blogtags) { $item->tags = $blogtags; } $item->tagscheme = $CFG->wwwroot . '/tag'; } $items[] = $item; } $articles = rss_add_items($items); /// Change structure to XML } else { $articles = ''; } /// Get header and footer information switch ($type) { case 'user': $info = fullname($DB->get_record('user', array('id' => $id), 'firstname,lastname')); break; case 'course': $info = $DB->get_field('course', 'fullname', array('id' => $id)); $info = format_string($info, true, array('context' => get_context_instance(CONTEXT_COURSE, $id))); break; case 'site': $info = format_string($SITE->fullname, true, array('context' => get_context_instance(CONTEXT_COURSE, SITEID))); break; case 'group': $group = groups_get_group($id); $info = $group->name; //TODO: $DB->get_field('groups', 'name', array('id'=>$id)) break; default: $info = ''; break; } if ($tagid) { $info .= ': ' . $DB->get_field('tags', 'text', array('id' => $tagid)); } $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. $rssdata = $header . $articles . $footer; if (blog_rss_save_file($type, $id, $tagid, $rssdata)) { return $filename; } else { return false; // Couldn't find it or make it } }
if ($tag->flag > 0 && has_capability('moodle/tag:manage', $systemcontext)) { $tagname = '<span class="flagged-tag">' . $tagname . '</span>'; } echo $OUTPUT->heading($tagname, 2, 'headingblock header tag-heading'); tag_print_management_box($tag); tag_print_description_box($tag); // Check what type of results are avaialable require_once $CFG->dirroot . '/tag/coursetagslib.php'; $courses = coursetag_get_tagged_courses($tag->id); if (has_capability('moodle/blog:view', $systemcontext)) { require_once $CFG->dirroot . '/blog/lib.php'; require_once $CFG->dirroot . '/blog/locallib.php'; $bloglisting = new blog_listing(array('tag' => $tag->id)); $limit = 10; $start = 0; $blogs = $bloglisting->get_entries($start, $limit); } $usercount = tag_record_count('user', $tag->id); // Only include <a href />'s to those anchors that actually will be shown $relatedpageslink = ""; $countanchors = 0; if (!empty($courses)) { $relatedpageslink = '<a href="#course">' . get_string('courses') . '</a>'; $countanchors++; } if (!empty($blogs)) { if ($countanchors > 0) { $relatedpageslink .= ' | '; } $relatedpageslink .= '<a href="#blog">' . get_string('relatedblogs', 'tag') . '</a>'; $countanchors++;
public function test_blog_get_listing_module() { $this->setAdminUser(); $coursecontext = context_course::instance($this->courseid); $contextmodule = context_module::instance($this->cmid); $anothermodule = $this->getDataGenerator()->create_module('page', array('course' => $this->courseid)); // Add blog associations with a course. $blog = new blog_entry($this->postid); $blog->add_association($contextmodule->id); // There is no entry associated with a course. $bloglisting = new blog_listing(array('course' => $this->courseid)); $this->assertCount(0, $bloglisting->get_entries()); // There is one entry associated with a module. $bloglisting = new blog_listing(array('module' => $this->cmid)); $this->assertCount(1, $bloglisting->get_entries()); // There is no entry associated with a wrong module. $bloglisting = new blog_listing(array('module' => $anothermodule->cmid)); $this->assertCount(0, $bloglisting->get_entries()); // There is one entry associated with a site (id is ignored). $bloglisting = new blog_listing(array('site' => 12345)); $this->assertCount(1, $bloglisting->get_entries()); // There is one entry associated with course context (module is a subcontext of a course). $bloglisting = new blog_listing(array('context' => $coursecontext->id)); $this->assertCount(1, $bloglisting->get_entries()); }
/** * Returns posts tagged with a specified tag. * * @param core_tag_tag $tag * @param bool $exclusivemode if set to true it means that no other entities tagged with this tag * are displayed on the page and the per-page limit may be bigger * @param int $fromctx context id where the link was displayed, may be used by callbacks * to display items in the same context first * @param int $ctx context id where to search for records * @param bool $rec search in subcontexts as well * @param int $page 0-based number of page being displayed * @return \core_tag\output\tagindex */ function blog_get_tagged_posts($tag, $exclusivemode = false, $fromctx = 0, $ctx = 0, $rec = true, $page = 0) { global $CFG, $OUTPUT; require_once $CFG->dirroot . '/user/lib.php'; $systemcontext = context_system::instance(); $perpage = $exclusivemode ? 20 : 5; $context = $ctx ? context::instance_by_id($ctx) : context_system::instance(); $content = ''; if (empty($CFG->enableblogs) || !has_capability('moodle/blog:view', $systemcontext)) { // Blogs are not enabled or are not visible to the current user. $totalpages = 0; } else { if ($context->contextlevel != CONTEXT_SYSTEM && empty($CFG->useblogassociations)) { // No blog entries can be associated to the non-system context. $totalpages = 0; } else { if (!$rec && $context->contextlevel != CONTEXT_COURSE && $context->contextlevel != CONTEXT_MODULE) { // No blog entries can be associated with category or block context. $totalpages = 0; } else { require_once $CFG->dirroot . '/blog/locallib.php'; $filters = array('tag' => $tag->id); if ($rec) { if ($context->contextlevel != CONTEXT_SYSTEM) { $filters['context'] = $context->id; } } else { if ($context->contextlevel == CONTEXT_COURSE) { $filters['course'] = $context->instanceid; } else { if ($context->contextlevel == CONTEXT_MODULE) { $filters['module'] = $context->instanceid; } } } $bloglisting = new blog_listing($filters); $blogs = $bloglisting->get_entries($page * $perpage, $perpage); $totalcount = $bloglisting->count_entries(); $totalpages = ceil($totalcount / $perpage); if (!empty($blogs)) { $tagfeed = new core_tag\output\tagfeed(); foreach ($blogs as $blog) { $user = fullclone($blog); $user->id = $blog->userid; $user->deleted = 0; $img = $OUTPUT->user_picture($user, array('size' => 35)); $subject = format_string($blog->subject); if ($blog->publishstate == 'draft') { $class = 'dimmed'; } else { $class = ''; } $url = new moodle_url('/blog/index.php', array('entryid' => $blog->id)); $subject = html_writer::link($url, $subject, array('class' => $class)); $fullname = fullname($user); if (user_can_view_profile($user)) { $profilelink = new moodle_url('/user/view.php', array('id' => $blog->userid)); $fullname = html_writer::link($profilelink, $fullname); } $details = $fullname . ', ' . userdate($blog->created); $tagfeed->add($img, $subject, $details); } $items = $tagfeed->export_for_template($OUTPUT); $content = $OUTPUT->render_from_template('core_tag/tagfeed', $items); $urlparams = array('tagid' => $tag->id); if ($context->contextlevel == CONTEXT_COURSE) { $urlparams['courseid'] = $context->instanceid; } else { if ($context->contextlevel == CONTEXT_MODULE) { $urlparams['modid'] = $context->instanceid; } } $allblogsurl = new moodle_url('/blog/index.php', $urlparams); $rv = new core_tag\output\tagindex($tag, 'core', 'post', $content, $exclusivemode, $fromctx, $ctx, $rec, $page, $totalpages); $rv->exclusiveurl = $allblogsurl; return $rv; } } } } $rv = new core_tag\output\tagindex($tag, 'core', 'post', $content, $exclusivemode, $fromctx, $ctx, $rec, $page, $totalpages); $rv->exclusiveurl = null; return $rv; }