2009-09-04 00:36:43 +00:00
< ? php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Core global functions for Blog .
*
* @ package moodlecore
* @ subpackage blog
* @ copyright 2009 Nicolas Connault
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
2010-07-30 20:51:01 +00:00
defined ( 'MOODLE_INTERNAL' ) || die ();
2009-09-04 00:36:43 +00:00
/**
* Library of functions and constants for blog
*/
require_once ( $CFG -> dirroot . '/blog/rsslib.php' );
require_once ( $CFG -> dirroot . '/tag/lib.php' );
/**
* User can edit a blog entry if this is their own blog entry and they have
* the capability moodle / blog : create , or if they have the capability
* moodle / blog : manageentries .
*
* This also applies to deleting of entries .
*/
2009-10-30 07:25:50 +00:00
function blog_user_can_edit_entry ( $blogentry ) {
global $USER ;
2006-04-12 08:58:49 +00:00
2009-09-04 00:36:43 +00:00
$sitecontext = get_context_instance ( CONTEXT_SYSTEM );
2006-03-10 06:53:01 +00:00
2009-09-04 00:36:43 +00:00
if ( has_capability ( 'moodle/blog:manageentries' , $sitecontext )) {
return true ; // can edit any blog entry
}
2006-04-12 02:05:46 +00:00
2009-10-30 07:25:50 +00:00
if ( $blogentry -> userid == $USER -> id && has_capability ( 'moodle/blog:create' , $sitecontext )) {
2009-09-04 00:36:43 +00:00
return true ; // can edit own when having blog:create capability
}
2006-03-10 06:53:01 +00:00
2009-09-04 00:36:43 +00:00
return false ;
}
2007-08-23 14:58:15 +00:00
2009-08-07 01:41:27 +00:00
2009-09-04 00:36:43 +00:00
/**
* Checks to see if a user can view the blogs of another user .
* Only blog level is checked here , the capabilities are enforced
* in blog / index . php
*/
2009-10-30 07:25:50 +00:00
function blog_user_can_view_user_entry ( $targetuserid , $blogentry = null ) {
2009-09-04 00:36:43 +00:00
global $CFG , $USER , $DB ;
2006-04-12 02:05:46 +00:00
2009-09-04 00:36:43 +00:00
if ( empty ( $CFG -> bloglevel )) {
return false ; // blog system disabled
}
2010-09-17 11:21:36 +00:00
if ( isloggedin () && $USER -> id == $targetuserid ) {
2009-09-04 00:36:43 +00:00
return true ; // can view own entries in any case
}
$sitecontext = get_context_instance ( CONTEXT_SYSTEM );
if ( has_capability ( 'moodle/blog:manageentries' , $sitecontext )) {
return true ; // can manage all entries
}
2006-04-12 02:05:46 +00:00
2009-09-04 00:36:43 +00:00
// coming for 1 entry, make sure it's not a draft
2009-10-30 07:25:50 +00:00
if ( $blogentry && $blogentry -> publishstate == 'draft' && ! has_capability ( 'moodle/blog:viewdrafts' , $sitecontext )) {
2009-09-04 00:36:43 +00:00
return false ; // can not view draft of others
}
2010-12-22 13:24:55 +08:00
// coming for 0 entry, make sure user is logged in, if not a public blog
2009-10-30 07:25:50 +00:00
if ( $blogentry && $blogentry -> publishstate != 'public' && ! isloggedin ()) {
2009-09-04 00:36:43 +00:00
return false ;
}
2007-08-23 14:58:15 +00:00
2009-09-04 00:36:43 +00:00
switch ( $CFG -> bloglevel ) {
case BLOG_GLOBAL_LEVEL :
return true ;
break ;
2006-04-12 02:05:46 +00:00
2009-09-04 00:36:43 +00:00
case BLOG_SITE_LEVEL :
2010-03-31 07:41:31 +00:00
if ( isloggedin ()) { // not logged in viewers forbidden
2009-09-04 00:36:43 +00:00
return true ;
2006-04-12 02:05:46 +00:00
}
2009-09-04 00:36:43 +00:00
return false ;
break ;
2007-08-23 14:58:15 +00:00
2009-09-04 00:36:43 +00:00
case BLOG_USER_LEVEL :
default :
$personalcontext = get_context_instance ( CONTEXT_USER , $targetuserid );
return has_capability ( 'moodle/user:readuserblogs' , $personalcontext );
break ;
2006-03-10 06:53:01 +00:00
2009-09-04 00:36:43 +00:00
}
}
/**
* remove all associations for the blog entries of a particular user
* @ param int userid - id of user whose blog associations will be deleted
*/
function blog_remove_associations_for_user ( $userid ) {
2009-10-30 07:25:50 +00:00
global $DB ;
2010-09-17 11:22:51 +00:00
throw new coding_exception ( 'function blog_remove_associations_for_user() is not finished' );
/*
2009-10-30 07:25:50 +00:00
$blogentries = blog_fetch_entries ( array ( 'user' => $userid ), 'lasmodified DESC' );
foreach ( $blogentries as $entry ) {
if ( blog_user_can_edit_entry ( $entry )) {
blog_remove_associations_for_entry ( $entry -> id );
}
2009-09-09 03:26:18 +00:00
}
2010-09-17 11:22:51 +00:00
*/
2009-09-04 00:36:43 +00:00
}
/**
2009-10-30 07:25:50 +00:00
* remove all associations for the blog entries of a particular course
* @ param int courseid - id of user whose blog associations will be deleted
2009-09-04 00:36:43 +00:00
*/
2009-10-30 07:25:50 +00:00
function blog_remove_associations_for_course ( $courseid ) {
global $DB ;
$context = get_context_instance ( CONTEXT_COURSE , $courseid );
$DB -> delete_records ( 'blog_association' , array ( 'contextid' => $context -> id ));
2009-09-04 00:36:43 +00:00
}
/**
* Given a record in the { blog_external } table , checks the blog ' s URL
2010-12-27 15:56:58 +01:00
* for new entries not yet copied into Moodle .
2010-12-20 14:58:02 +08:00
* Also attempts to identify and remove deleted blog entries
2009-09-04 00:36:43 +00:00
*
2009-10-30 07:25:50 +00:00
* @ param object $externalblog
* @ return boolean False if the Feed is invalid
2009-09-04 00:36:43 +00:00
*/
2009-10-30 07:25:50 +00:00
function blog_sync_external_entries ( $externalblog ) {
2009-09-04 00:36:43 +00:00
global $CFG , $DB ;
2009-09-04 07:09:45 +00:00
require_once ( $CFG -> libdir . '/simplepie/moodle_simplepie.php' );
2006-03-10 06:53:01 +00:00
2009-10-30 07:25:50 +00:00
$rssfile = new moodle_simplepie_file ( $externalblog -> url );
$filetest = new SimplePie_Locator ( $rssfile );
if ( ! $filetest -> is_feed ( $rssfile )) {
$externalblog -> failedlastsync = 1 ;
$DB -> update_record ( 'blog_external' , $externalblog );
return false ;
2010-06-29 03:19:22 +00:00
} else if ( ! empty ( $externalblog -> failedlastsync )) {
2009-10-30 07:25:50 +00:00
$externalblog -> failedlastsync = 0 ;
$DB -> update_record ( 'blog_external' , $externalblog );
2006-04-12 02:05:46 +00:00
}
2006-03-10 06:53:01 +00:00
2009-10-30 07:25:50 +00:00
$rss = new moodle_simplepie ( $externalblog -> url );
2006-04-12 02:05:46 +00:00
2009-09-04 07:09:45 +00:00
if ( empty ( $rss -> data )) {
2009-09-04 00:36:43 +00:00
return null ;
}
2010-12-20 14:58:02 +08:00
//used to identify blog posts that have been deleted from the source feed
2010-12-20 11:16:11 +08:00
$oldesttimestamp = null ;
2010-12-20 14:58:02 +08:00
$uniquehashes = array ();
2006-05-01 05:33:47 +00:00
2009-09-04 07:09:45 +00:00
foreach ( $rss -> get_items () as $entry ) {
2009-10-30 07:25:50 +00:00
// If filtertags are defined, use them to filter the entries by RSS category
if ( ! empty ( $externalblog -> filtertags )) {
$containsfiltertag = false ;
$categories = $entry -> get_categories ();
$filtertags = explode ( ',' , $externalblog -> filtertags );
$filtertags = array_map ( 'trim' , $filtertags );
$filtertags = array_map ( 'strtolower' , $filtertags );
foreach ( $categories as $category ) {
if ( in_array ( trim ( strtolower ( $category -> term )), $filtertags )) {
$containsfiltertag = true ;
}
}
if ( ! $containsfiltertag ) {
continue ;
2006-04-12 02:05:46 +00:00
}
}
2010-12-22 13:27:46 +08:00
2010-12-20 14:58:02 +08:00
$uniquehashes [] = $entry -> get_permalink ();
2009-10-30 07:25:50 +00:00
2010-09-21 08:11:06 +00:00
$newentry = new stdClass ();
2009-10-30 07:25:50 +00:00
$newentry -> userid = $externalblog -> userid ;
$newentry -> module = 'blog_external' ;
$newentry -> content = $externalblog -> id ;
$newentry -> uniquehash = $entry -> get_permalink ();
$newentry -> publishstate = 'site' ;
$newentry -> format = FORMAT_HTML ;
$newentry -> subject = $entry -> get_title ();
$newentry -> summary = $entry -> get_description ();
2010-12-22 13:27:46 +08:00
2010-12-16 16:21:41 +08:00
//used to decide whether to insert or update
//uses enty permalink plus creation date if available
2010-12-22 13:24:55 +08:00
$existingpostconditions = array ( 'uniquehash' => $entry -> get_permalink ());
2010-11-15 03:56:12 +00:00
2010-12-16 16:21:41 +08:00
//our DB doesnt allow null creation or modified timestamps so check the external blog supplied one
2010-11-15 03:56:12 +00:00
$entrydate = $entry -> get_date ( 'U' );
2010-12-17 09:46:46 +08:00
if ( ! empty ( $entrydate )) {
$existingpostconditions [ 'created' ] = $entrydate ;
}
2010-12-22 13:27:46 +08:00
2010-12-27 16:20:39 +01:00
//the post ID or false if post not found in DB
2010-12-17 09:46:46 +08:00
$postid = $DB -> get_field ( 'post' , 'id' , $existingpostconditions );
2010-12-22 13:27:46 +08:00
2010-12-17 09:46:46 +08:00
$timestamp = null ;
2010-11-15 03:56:12 +00:00
if ( empty ( $entrydate )) {
2010-12-17 09:46:46 +08:00
$timestamp = time ();
2010-11-15 03:56:12 +00:00
} else {
2010-12-17 09:46:46 +08:00
$timestamp = $entrydate ;
2010-11-15 03:56:12 +00:00
}
2010-12-22 13:27:46 +08:00
2010-12-17 09:46:46 +08:00
//only set created if its a new post so we retain the original creation timestamp if the post is edited
2010-12-22 13:24:55 +08:00
if ( $postid === false ) {
2010-12-17 09:46:46 +08:00
$newentry -> created = $timestamp ;
}
$newentry -> lastmodified = $timestamp ;
2010-12-22 13:29:01 +08:00
2010-12-22 13:24:55 +08:00
if ( empty ( $oldesttimestamp ) || $timestamp < $oldesttimestamp ) {
2010-12-20 11:16:11 +08:00
//found an older post
$oldesttimestamp = $timestamp ;
}
2009-10-30 07:25:50 +00:00
2010-10-27 05:25:00 +00:00
$textlib = textlib_get_instance ();
2010-10-27 05:59:31 +00:00
if ( $textlib -> strlen ( $newentry -> uniquehash ) > 255 ) {
2010-10-27 05:25:00 +00:00
// The URL for this item is too long for the field. Rather than add
// the entry without the link we will skip straight over it.
// RSS spec says recommended length 500, we use 255.
debugging ( 'External blog entry skipped because of oversized URL' , DEBUG_DEVELOPER );
continue ;
}
2010-12-22 13:24:55 +08:00
if ( $postid === false ) {
2010-12-16 16:21:41 +08:00
$id = $DB -> insert_record ( 'post' , $newentry );
2009-10-30 07:25:50 +00:00
2010-12-16 16:21:41 +08:00
// Set tags
if ( $tags = tag_get_tags_array ( 'blog_external' , $externalblog -> id )) {
tag_set ( 'post' , $id , $tags );
}
} else {
$newentry -> id = $postid ;
2010-12-17 09:46:46 +08:00
$DB -> update_record ( 'post' , $newentry );
2009-10-30 07:25:50 +00:00
}
2009-09-04 00:36:43 +00:00
}
2010-12-22 13:27:46 +08:00
2010-12-20 14:58:02 +08:00
//Look at the posts we have in the database to check if any of them have been deleted from the feed.
2010-12-27 15:56:58 +01:00
//Only checking posts within the time frame returned by the rss feed. Older items may have been deleted or
2010-12-20 14:58:02 +08:00
//may just not be returned anymore. We cant tell the difference so we leave older posts alone.
2010-12-24 09:31:58 +08:00
$dbposts = $DB -> get_records_select ( 'post' , 'created > :ts' , array ( 'ts' => $oldesttimestamp ), '' , 'id, uniquehash' );
2010-12-20 14:58:02 +08:00
$todelete = array ();
foreach ( $dbposts as $dbpost ) {
2010-12-24 09:31:58 +08:00
if ( ! in_array ( $dbpost -> uniquehash , $uniquehashes ) ) {
2010-12-20 14:58:02 +08:00
$todelete [] = $dbpost -> id ;
}
}
$DB -> delete_records_list ( 'post' , 'id' , $todelete );
2006-04-12 02:05:46 +00:00
2010-12-27 16:20:39 +01:00
$DB -> update_record ( 'blog_external' , array ( 'id' => $externalblog -> id , 'timefetched' => time ()));
2009-10-30 07:25:50 +00:00
}
/**
* Given an external blog object , deletes all related blog entries from the post table .
* NOTE : The external blog ' s id is saved as post . content , a field that is not oterhwise used by blog entries .
* @ param object $externablog
*/
function blog_delete_external_entries ( $externalblog ) {
global $DB ;
require_capability ( 'moodle/blog:manageexternal' , get_context_instance ( CONTEXT_SYSTEM ));
2010-11-19 21:57:15 +00:00
$DB -> delete_records_select ( 'post' ,
" module='blog_external' AND " . $DB -> sql_compare_text ( 'content' ) . " = ? " ,
array ( $externalblog -> id ));
2009-09-04 00:36:43 +00:00
}
2007-08-23 14:58:15 +00:00
2009-09-04 00:36:43 +00:00
/**
* Returns a URL based on the context of the current page .
* This URL points to blog / index . php and includes filter parameters appropriate for the current page .
*
* @ param stdclass $context
* @ return string
*/
function blog_get_context_url ( $context = null ) {
global $CFG ;
2006-04-12 02:05:46 +00:00
2010-01-16 15:39:56 +00:00
$viewblogentriesurl = new moodle_url ( '/blog/index.php' );
2006-04-12 02:05:46 +00:00
2009-09-04 00:36:43 +00:00
if ( empty ( $context )) {
global $PAGE ;
2009-12-17 14:04:15 +00:00
$context = $PAGE -> context ;
2009-09-04 00:36:43 +00:00
}
2006-04-12 02:05:46 +00:00
2009-09-04 00:36:43 +00:00
// Change contextlevel to SYSTEM if viewing the site course
if ( $context -> contextlevel == CONTEXT_COURSE && $context -> instanceid == SITEID ) {
$context -> contextlevel = CONTEXT_SYSTEM ;
}
2006-04-12 02:05:46 +00:00
2009-09-04 00:36:43 +00:00
$filterparam = '' ;
$strlevel = '' ;
2006-04-12 02:05:46 +00:00
2009-09-04 00:36:43 +00:00
switch ( $context -> contextlevel ) {
case CONTEXT_SYSTEM :
case CONTEXT_BLOCK :
case CONTEXT_COURSECAT :
2006-04-12 02:05:46 +00:00
break ;
2009-09-04 00:36:43 +00:00
case CONTEXT_COURSE :
$filterparam = 'courseid' ;
$strlevel = get_string ( 'course' );
2006-04-12 02:05:46 +00:00
break ;
2009-09-04 00:36:43 +00:00
case CONTEXT_MODULE :
$filterparam = 'modid' ;
$strlevel = print_context_name ( $context );
2006-04-12 02:05:46 +00:00
break ;
2009-09-04 00:36:43 +00:00
case CONTEXT_USER :
$filterparam = 'userid' ;
$strlevel = get_string ( 'user' );
2006-04-12 02:05:46 +00:00
break ;
2006-03-17 07:38:08 +00:00
}
2009-09-04 00:36:43 +00:00
if ( ! empty ( $filterparam )) {
2009-09-09 03:26:18 +00:00
$viewblogentriesurl -> param ( $filterparam , $context -> instanceid );
2009-09-04 00:36:43 +00:00
}
2006-08-08 05:13:06 +00:00
2009-09-09 03:26:18 +00:00
return $viewblogentriesurl ;
2009-09-04 00:36:43 +00:00
}
2010-04-23 04:05:16 +00:00
/**
2010-05-01 14:33:07 +00:00
* This function checks that blogs are enabled , and that the user can see blogs at all
2010-04-23 04:05:16 +00:00
* @ return bool
*/
function blog_is_enabled_for_user () {
global $CFG ;
2010-05-01 14:33:07 +00:00
//return (!empty($CFG->bloglevel) && $CFG->bloglevel <= BLOG_GLOBAL_LEVEL && isloggedin() && !isguestuser());
return ( ! empty ( $CFG -> bloglevel ) && ( isloggedin () || ( $CFG -> bloglevel == BLOG_GLOBAL_LEVEL )));
2010-04-23 04:05:16 +00:00
}
/**
* This function gets all of the options available for the current user in respect
* to blogs .
2010-07-15 18:09:11 +00:00
*
2010-04-23 04:05:16 +00:00
* It loads the following if applicable :
* - Module options { @ see blog_get_options_for_module }
* - Course options { @ see blog_get_options_for_course }
* - User specific options { @ see blog_get_options_for_user }
* - General options ( BLOG_LEVEL_GLOBAL )
*
* @ param moodle_page $page The page to load for ( normally $PAGE )
* @ param stdClass $userid Load for a specific user
* @ return array An array of options organised by type .
*/
function blog_get_all_options ( moodle_page $page , stdClass $userid = null ) {
global $CFG , $DB , $USER ;
$options = array ();
// If blogs are enabled and the user is logged in and not a guest
if ( blog_is_enabled_for_user ()) {
// If the context is the user then assume we want to load for the users context
if ( is_null ( $userid ) && $page -> context -> contextlevel == CONTEXT_USER ) {
$userid = $page -> context -> instanceid ;
}
// Check the userid var
if ( ! is_null ( $userid ) && $userid !== $USER -> id ) {
// Load the user from the userid... it MUST EXIST throw a wobbly if it doesn't!
$user = $DB -> get_record ( 'user' , array ( 'id' => $userid ), '*' , MUST_EXIST );
} else {
$user = null ;
}
if ( $CFG -> useblogassociations && $page -> cm !== null ) {
// Load for the module associated with the page
$options [ CONTEXT_MODULE ] = blog_get_options_for_module ( $page -> cm , $user );
} else if ( $CFG -> useblogassociations && $page -> course -> id != SITEID ) {
// Load the options for the course associated with the page
$options [ CONTEXT_COURSE ] = blog_get_options_for_course ( $page -> course , $user );
}
// Get the options for the user
if ( $user !== null ) {
// Load for the requested user
$options [ CONTEXT_USER + 1 ] = blog_get_options_for_user ( $user );
}
// Load for the current user
$options [ CONTEXT_USER ] = blog_get_options_for_user ();
}
// If blog level is global then display a link to view all site entries
if ( ! empty ( $CFG -> bloglevel ) && $CFG -> bloglevel >= BLOG_GLOBAL_LEVEL && has_capability ( 'moodle/blog:view' , get_context_instance ( CONTEXT_SYSTEM ))) {
$options [ CONTEXT_SYSTEM ] = array ( 'viewsite' => array (
'string' => get_string ( 'viewsiteentries' , 'blog' ),
'link' => new moodle_url ( '/blog/index.php' )
));
}
// Return the options
return $options ;
}
/**
* Get all of the blog options that relate to the passed user .
*
* If no user is passed the current user is assumed .
*
* @ staticvar array $useroptions Cache so we don ' t have to regenerate multiple times
* @ param stdClass $user
* @ return array The array of options for the requested user
*/
function blog_get_options_for_user ( stdClass $user = null ) {
global $CFG , $USER ;
// Cache
static $useroptions = array ();
$options = array ();
// Blogs must be enabled and the user must be logged in
if ( ! blog_is_enabled_for_user ()) {
return $options ;
}
// Sort out the user var
if ( $user === null || $user -> id == $USER -> id ) {
$user = $USER ;
$iscurrentuser = true ;
} else {
$iscurrentuser = false ;
}
// If we've already generated serve from the cache
if ( array_key_exists ( $user -> id , $useroptions )) {
return $useroptions [ $user -> id ];
}
$sitecontext = get_context_instance ( CONTEXT_SYSTEM );
$canview = has_capability ( 'moodle/blog:view' , $sitecontext );
if ( ! $iscurrentuser && $canview && ( $CFG -> bloglevel >= BLOG_SITE_LEVEL )) {
// Not the current user, but we can view and its blogs are enabled for SITE or GLOBAL
$options [ 'userentries' ] = array (
'string' => get_string ( 'viewuserentries' , 'blog' , fullname ( $user )),
'link' => new moodle_url ( '/blog/index.php' , array ( 'userid' => $user -> id ))
);
} else {
// It's the current user
if ( $canview ) {
// We can view our own blogs .... BIG surprise
$options [ 'view' ] = array (
'string' => get_string ( 'viewallmyentries' , 'blog' ),
'link' => new moodle_url ( '/blog/index.php' , array ( 'userid' => $USER -> id ))
);
}
if ( has_capability ( 'moodle/blog:create' , $sitecontext )) {
// We can add to our own blog
$options [ 'add' ] = array (
'string' => get_string ( 'addnewentry' , 'blog' ),
'link' => new moodle_url ( '/blog/edit.php' , array ( 'action' => 'add' ))
);
}
}
// Cache the options
$useroptions [ $user -> id ] = $options ;
// Return the options
return $options ;
}
/**
* Get the blog options that relate to the given course for the given user .
*
* @ staticvar array $courseoptions A cache so we can save regenerating multiple times
* @ param stdClass $course The course to load options for
* @ param stdClass $user The user to load options for null == current user
* @ return array The array of options
*/
function blog_get_options_for_course ( stdClass $course , stdClass $user = null ) {
global $CFG , $USER ;
// Cache
static $courseoptions = array ();
2010-07-15 18:09:11 +00:00
2010-04-23 04:05:16 +00:00
$options = array ();
// User must be logged in and blogs must be enabled
if ( ! blog_is_enabled_for_user ()) {
return $options ;
}
// Check that the user can associate with the course
$sitecontext = get_context_instance ( CONTEXT_SYSTEM );
if ( ! has_capability ( 'moodle/blog:associatecourse' , $sitecontext )) {
return $options ;
}
// Generate the cache key
$key = $course -> id . ':' ;
if ( ! empty ( $user )) {
$key .= $user -> id ;
} else {
$key .= $USER -> id ;
}
// Serve from the cache if we've already generated for this course
if ( array_key_exists ( $key , $courseoptions )) {
2010-04-23 04:08:28 +00:00
return $courseoptions [ $key ];
2010-04-23 04:05:16 +00:00
}
2010-07-15 18:09:11 +00:00
2010-04-23 04:05:16 +00:00
if ( has_capability ( 'moodle/blog:view' , get_context_instance ( CONTEXT_COURSE , $course -> id ))) {
// We can view!
if ( $CFG -> bloglevel >= BLOG_SITE_LEVEL ) {
// View entries about this course
$options [ 'courseview' ] = array (
'string' => get_string ( 'viewcourseblogs' , 'blog' ),
'link' => new moodle_url ( '/blog/index.php' , array ( 'courseid' => $course -> id ))
);
}
// View MY entries about this course
$options [ 'courseviewmine' ] = array (
'string' => get_string ( 'viewmyentriesaboutcourse' , 'blog' ),
'link' => new moodle_url ( '/blog/index.php' , array ( 'courseid' => $course -> id , 'userid' => $USER -> id ))
);
if ( ! empty ( $user ) && ( $CFG -> bloglevel >= BLOG_SITE_LEVEL )) {
// View the provided users entries about this course
$options [ 'courseviewuser' ] = array (
'string' => get_string ( 'viewentriesbyuseraboutcourse' , 'blog' , fullname ( $user )),
'link' => new moodle_url ( '/blog/index.php' , array ( 'courseid' => $course -> id , 'userid' => $user -> id ))
);
}
}
if ( has_capability ( 'moodle/blog:create' , $sitecontext )) {
// We can blog about this course
$options [ 'courseadd' ] = array (
2010-11-26 09:42:02 +00:00
'string' => get_string ( 'blogaboutthiscourse' , 'blog' ),
2010-04-23 04:05:16 +00:00
'link' => new moodle_url ( '/blog/edit.php' , array ( 'action' => 'add' , 'courseid' => $course -> id ))
);
}
// Cache the options for this course
$courseoptions [ $key ] = $options ;
// Return the options
return $options ;
}
/**
* Get the blog options relating to the given module for the given user
*
* @ staticvar array $moduleoptions Cache
* @ param stdClass $module The module to get options for
* @ param stdClass $user The user to get options for null == currentuser
* @ return array
*/
function blog_get_options_for_module ( stdClass $module , stdClass $user = null ) {
global $CFG , $USER ;
// Cache
static $moduleoptions = array ();
$options = array ();
// User must be logged in, blogs must be enabled
if ( ! blog_is_enabled_for_user ()) {
return $options ;
}
// Check the user can associate with the module
$sitecontext = get_context_instance ( CONTEXT_SYSTEM );
if ( ! has_capability ( 'moodle/blog:associatemodule' , $sitecontext )) {
return $options ;
}
// Generate the cache key
$key = $module -> id . ':' ;
if ( ! empty ( $user )) {
$key .= $user -> id ;
} else {
$key .= $USER -> id ;
}
if ( array_key_exists ( $key , $moduleoptions )) {
// Serve from the cache so we don't have to regenerate
return $moduleoptions [ $module -> id ];
}
if ( has_capability ( 'moodle/blog:view' , get_context_instance ( CONTEXT_MODULE , $module -> id ))) {
// We can view!
if ( $CFG -> bloglevel >= BLOG_SITE_LEVEL ) {
// View all entries about this module
$a = new stdClass ;
$a -> type = $module -> modname ;
$options [ 'moduleview' ] = array (
'string' => get_string ( 'viewallmodentries' , 'blog' , $a ),
'link' => new moodle_url ( '/blog/index.php' , array ( 'modid' => $module -> id ))
);
}
// View MY entries about this module
$options [ 'moduleviewmine' ] = array (
'string' => get_string ( 'viewmyentriesaboutmodule' , 'blog' , $module -> modname ),
'link' => new moodle_url ( '/blog/index.php' , array ( 'modid' => $module -> id , 'userid' => $USER -> id ))
);
if ( ! empty ( $user ) && ( $CFG -> bloglevel >= BLOG_SITE_LEVEL )) {
// View the given users entries about this module
$a = new stdClass ;
$a -> mod = $module -> modname ;
$a -> user = fullname ( $user );
$options [ 'moduleviewuser' ] = array (
'string' => get_string ( 'blogentriesbyuseraboutmodule' , 'blog' , $a ),
'link' => new moodle_url ( '/blog/index.php' , array ( 'modid' => $module -> id , 'userid' => $user -> id ))
);
}
}
if ( has_capability ( 'moodle/blog:create' , $sitecontext )) {
// The user can blog about this module
$options [ 'moduleadd' ] = array (
'string' => get_string ( 'blogaboutthismodule' , 'blog' , $module -> modname ),
'link' => new moodle_url ( '/blog/edit.php' , array ( 'action' => 'add' , 'modid' => $module -> id ))
);
}
// Cache the options
$moduleoptions [ $key ] = $options ;
// Return the options
return $options ;
}
2009-09-04 00:36:43 +00:00
/**
* This function encapsulates all the logic behind the complex
* navigation , titles and headings of the blog listing page , depending
2009-10-30 07:25:50 +00:00
* on URL params . It looks at URL params and at the current context level .
* It builds and returns an array containing :
*
* 1. heading : The heading displayed above the blog entries
* 2. stradd : The text to be used as the " Add entry " link
* 3. strview : The text to be used as the " View entries " link
* 4. url : The moodle_url object used as the base for add and view links
* 5. filters : An array of parameters used to filter blog listings . Used by index . php and the Recent blogs block
2009-09-04 00:36:43 +00:00
*
2009-09-04 03:40:01 +00:00
* All other variables are set directly in $PAGE
2009-09-04 00:36:43 +00:00
*
* It uses the current URL to build these variables .
* A number of mutually exclusive use cases are used to structure this function .
*
* @ return array
*/
2010-07-30 03:16:14 +00:00
function blog_get_headers ( $courseid = null , $groupid = null , $userid = null , $tagid = null ) {
2009-09-04 00:36:43 +00:00
global $CFG , $PAGE , $DB , $USER ;
2009-09-08 03:05:09 +00:00
$id = optional_param ( 'id' , null , PARAM_INT );
2009-09-04 00:36:43 +00:00
$tag = optional_param ( 'tag' , null , PARAM_NOTAGS );
2010-07-30 03:16:14 +00:00
$tagid = optional_param ( 'tagid' , $tagid , PARAM_INT );
$userid = optional_param ( 'userid' , $userid , PARAM_INT );
2009-09-04 00:36:43 +00:00
$modid = optional_param ( 'modid' , null , PARAM_INT );
$entryid = optional_param ( 'entryid' , null , PARAM_INT );
2010-07-30 03:16:14 +00:00
$groupid = optional_param ( 'groupid' , $groupid , PARAM_INT );
$courseid = optional_param ( 'courseid' , $courseid , PARAM_INT );
2009-09-04 00:36:43 +00:00
$search = optional_param ( 'search' , null , PARAM_RAW );
$action = optional_param ( 'action' , null , PARAM_ALPHA );
$confirm = optional_param ( 'confirm' , false , PARAM_BOOL );
2009-10-30 07:25:50 +00:00
// Ignore userid when action == add
if ( $action == 'add' && $userid ) {
unset ( $userid );
$PAGE -> url -> remove_params ( array ( 'userid' ));
} else if ( $action == 'add' && $entryid ) {
unset ( $entryid );
$PAGE -> url -> remove_params ( array ( 'entryid' ));
}
$headers = array ( 'title' => '' , 'heading' => '' , 'cm' => null , 'filters' => array ());
2009-09-04 00:36:43 +00:00
2010-01-16 15:39:56 +00:00
$blogurl = new moodle_url ( '/blog/index.php' );
2009-10-30 07:25:50 +00:00
// If the title is not yet set, it's likely that the context isn't set either, so skip this part
2009-11-01 16:48:45 +00:00
$pagetitle = $PAGE -> title ;
2009-10-30 07:25:50 +00:00
if ( ! empty ( $pagetitle )) {
$contexturl = blog_get_context_url ();
// Look at the context URL, it may have additional params that are not in the current URL
if ( ! $blogurl -> compare ( $contexturl )) {
$blogurl = $contexturl ;
if ( empty ( $courseid )) {
$courseid = $blogurl -> param ( 'courseid' );
}
if ( empty ( $modid )) {
$modid = $blogurl -> param ( 'modid' );
}
}
}
$headers [ 'stradd' ] = get_string ( 'addnewentry' , 'blog' );
$headers [ 'strview' ] = null ;
2009-09-04 00:36:43 +00:00
2009-10-30 07:25:50 +00:00
$site = $DB -> get_record ( 'course' , array ( 'id' => SITEID ));
$sitecontext = get_context_instance ( CONTEXT_SYSTEM );
2009-09-04 00:36:43 +00:00
// Common Lang strings
$strparticipants = get_string ( " participants " );
$strblogentries = get_string ( " blogentries " , 'blog' );
// Prepare record objects as needed
if ( ! empty ( $courseid )) {
2009-10-30 07:25:50 +00:00
$headers [ 'filters' ][ 'course' ] = $courseid ;
2009-09-04 00:36:43 +00:00
$course = $DB -> get_record ( 'course' , array ( 'id' => $courseid ));
}
2006-10-06 10:11:52 +00:00
2009-09-04 00:36:43 +00:00
if ( ! empty ( $userid )) {
2009-10-30 07:25:50 +00:00
$headers [ 'filters' ][ 'user' ] = $userid ;
2009-09-04 00:36:43 +00:00
$user = $DB -> get_record ( 'user' , array ( 'id' => $userid ));
2006-03-17 07:38:08 +00:00
}
2006-08-08 05:13:06 +00:00
2009-09-04 00:36:43 +00:00
if ( ! empty ( $groupid )) { // groupid always overrides courseid
2009-10-30 07:25:50 +00:00
$headers [ 'filters' ][ 'group' ] = $groupid ;
2009-09-04 00:36:43 +00:00
$group = $DB -> get_record ( 'groups' , array ( 'id' => $groupid ));
$course = $DB -> get_record ( 'course' , array ( 'id' => $group -> courseid ));
}
2006-08-08 05:13:06 +00:00
2010-07-15 18:09:11 +00:00
$PAGE -> set_pagelayout ( 'standard' );
2010-04-23 04:05:16 +00:00
2009-10-30 07:25:50 +00:00
if ( ! empty ( $modid ) && $CFG -> useblogassociations && has_capability ( 'moodle/blog:associatemodule' , $sitecontext )) { // modid always overrides courseid, so the $course object may be reset here
$headers [ 'filters' ][ 'module' ] = $modid ;
2009-09-04 00:36:43 +00:00
// A groupid param may conflict with this coursemod's courseid. Ignore groupid in that case
2009-10-30 07:25:50 +00:00
$courseid = $DB -> get_field ( 'course_modules' , 'course' , array ( 'id' => $modid ));
$course = $DB -> get_record ( 'course' , array ( 'id' => $courseid ));
2009-09-04 00:36:43 +00:00
$cm = $DB -> get_record ( 'course_modules' , array ( 'id' => $modid ));
$cm -> modname = $DB -> get_field ( 'modules' , 'name' , array ( 'id' => $cm -> module ));
$cm -> name = $DB -> get_field ( $cm -> modname , 'name' , array ( 'id' => $cm -> instance ));
2010-09-21 08:11:06 +00:00
$a = new stdClass ();
2009-10-30 07:25:50 +00:00
$a -> type = get_string ( 'modulename' , $cm -> modname );
2009-09-04 03:40:01 +00:00
$PAGE -> set_cm ( $cm , $course );
2009-10-30 07:25:50 +00:00
$headers [ 'stradd' ] = get_string ( 'blogaboutthis' , 'blog' , $a );
$headers [ 'strview' ] = get_string ( 'viewallmodentries' , 'blog' , $a );
2009-09-04 00:36:43 +00:00
}
2009-09-16 10:05:34 +00:00
2009-10-30 07:25:50 +00:00
// Case 1: No entry, mod, course or user params: all site entries to be shown (filtered by search and tag/tagid)
// Note: if action is set to 'add' or 'edit', we do this at the end
if ( empty ( $entryid ) && empty ( $modid ) && empty ( $courseid ) && empty ( $userid ) && ! in_array ( $action , array ( 'edit' , 'add' ))) {
$PAGE -> navbar -> add ( $strblogentries , $blogurl );
2009-09-11 07:00:43 +00:00
$PAGE -> set_title ( " $site->shortname : " . get_string ( 'blog' , 'blog' ));
$PAGE -> set_heading ( " $site->shortname : " . get_string ( 'blog' , 'blog' ));
2010-05-14 02:50:43 +00:00
$headers [ 'heading' ] = get_string ( 'siteblog' , 'blog' , $site -> shortname );
2009-10-30 07:25:50 +00:00
// $headers['strview'] = get_string('viewsiteentries', 'blog');
2009-09-11 07:00:43 +00:00
}
2006-04-12 02:05:46 +00:00
2009-10-30 07:25:50 +00:00
// Case 2: only entryid is requested, ignore all other filters. courseid is used to give more contextual information
2009-09-04 00:36:43 +00:00
if ( ! empty ( $entryid )) {
2009-10-30 07:25:50 +00:00
$headers [ 'filters' ][ 'entry' ] = $entryid ;
$sql = 'SELECT u.* FROM {user} u, {post} p WHERE p.id = ? AND p.userid = u.id' ;
2009-09-04 00:36:43 +00:00
$user = $DB -> get_record_sql ( $sql , array ( $entryid ));
2009-10-30 07:25:50 +00:00
$entry = $DB -> get_record ( 'post' , array ( 'id' => $entryid ));
2006-04-12 02:05:46 +00:00
2009-10-30 07:25:50 +00:00
$blogurl -> param ( 'userid' , $user -> id );
2006-04-12 02:05:46 +00:00
2009-09-04 00:36:43 +00:00
if ( ! empty ( $course )) {
2009-09-08 03:05:09 +00:00
$mycourseid = $course -> id ;
2009-10-30 07:25:50 +00:00
$blogurl -> param ( 'courseid' , $mycourseid );
2006-04-12 02:05:46 +00:00
} else {
2009-09-08 03:05:09 +00:00
$mycourseid = $site -> id ;
2006-04-12 02:05:46 +00:00
}
2009-09-04 07:09:45 +00:00
2009-10-30 07:25:50 +00:00
$PAGE -> navbar -> add ( $strblogentries , $blogurl );
$blogurl -> remove_params ( 'userid' );
$PAGE -> navbar -> add ( $entry -> subject , $blogurl );
2009-09-04 03:40:01 +00:00
$PAGE -> set_title ( " $site->shortname : " . fullname ( $user ) . " : $entry->subject " );
$PAGE -> set_heading ( " $site->shortname : " . fullname ( $user ) . " : $entry->subject " );
2009-09-04 00:36:43 +00:00
$headers [ 'heading' ] = get_string ( 'blogentrybyuser' , 'blog' , fullname ( $user ));
// We ignore tag and search params
2009-10-30 07:25:50 +00:00
if ( empty ( $action ) || ! $CFG -> useblogassociations ) {
$headers [ 'url' ] = $blogurl ;
2009-09-08 03:05:09 +00:00
return $headers ;
}
2006-04-12 02:05:46 +00:00
}
2008-04-13 01:17:30 +00:00
2009-10-30 07:25:50 +00:00
// Case 3: A user's blog entries
if ( ! empty ( $userid ) && empty ( $entryid ) && (( empty ( $courseid ) && empty ( $modid )) || ! $CFG -> useblogassociations )) {
$blogurl -> param ( 'userid' , $userid );
2009-09-04 03:40:01 +00:00
$PAGE -> set_title ( " $site->shortname : " . fullname ( $user ) . " : " . get_string ( 'blog' , 'blog' ));
$PAGE -> set_heading ( " $site->shortname : " . fullname ( $user ) . " : " . get_string ( 'blog' , 'blog' ));
2009-09-04 00:36:43 +00:00
$headers [ 'heading' ] = get_string ( 'userblog' , 'blog' , fullname ( $user ));
2010-04-23 04:05:16 +00:00
$headers [ 'strview' ] = get_string ( 'viewuserentries' , 'blog' , fullname ( $user ));
2009-10-30 07:25:50 +00:00
} else
2009-09-04 00:36:43 +00:00
2009-10-30 07:25:50 +00:00
// Case 4: No blog associations, no userid
if ( ! $CFG -> useblogassociations && empty ( $userid ) && ! in_array ( $action , array ( 'edit' , 'add' ))) {
$PAGE -> set_title ( " $site->shortname : " . get_string ( 'blog' , 'blog' ));
$PAGE -> set_heading ( " $site->shortname : " . get_string ( 'blog' , 'blog' ));
2010-05-14 02:50:43 +00:00
$headers [ 'heading' ] = get_string ( 'siteblog' , 'blog' , $site -> shortname );
2009-09-04 00:36:43 +00:00
} else
2009-10-30 07:25:50 +00:00
// Case 5: Blog entries associated with an activity by a specific user (courseid ignored)
2009-09-08 03:05:09 +00:00
if ( ! empty ( $userid ) && ! empty ( $modid ) && empty ( $entryid )) {
2009-10-30 07:25:50 +00:00
$blogurl -> param ( 'userid' , $userid );
$blogurl -> param ( 'modid' , $modid );
2009-09-04 00:36:43 +00:00
// Course module navigation is handled by build_navigation as the second param
$headers [ 'cm' ] = $cm ;
2009-09-04 03:40:01 +00:00
$PAGE -> navbar -> add ( fullname ( $user ), " $CFG->wwwroot /user/view.php?id= $user->id " );
2009-10-30 07:25:50 +00:00
$PAGE -> navbar -> add ( $strblogentries , $blogurl );
2009-09-04 00:36:43 +00:00
2009-09-04 03:40:01 +00:00
$PAGE -> set_title ( " $site->shortname : $cm->name : " . fullname ( $user ) . ': ' . get_string ( 'blogentries' , 'blog' ));
$PAGE -> set_heading ( " $site->shortname : $cm->name : " . fullname ( $user ) . ': ' . get_string ( 'blogentries' , 'blog' ));
2009-09-04 00:36:43 +00:00
2010-09-21 08:11:06 +00:00
$a = new stdClass ();
2009-09-04 00:36:43 +00:00
$a -> user = fullname ( $user );
$a -> mod = $cm -> name ;
2009-10-30 07:25:50 +00:00
$a -> type = get_string ( 'modulename' , $cm -> modname );
2009-09-04 00:36:43 +00:00
$headers [ 'heading' ] = get_string ( 'blogentriesbyuseraboutmodule' , 'blog' , $a );
2009-10-30 07:25:50 +00:00
$headers [ 'stradd' ] = get_string ( 'blogaboutthis' , 'blog' , $a );
$headers [ 'strview' ] = get_string ( 'viewallmodentries' , 'blog' , $a );
2009-09-04 00:36:43 +00:00
} else
2009-10-30 07:25:50 +00:00
// Case 6: Blog entries associated with a course by a specific user
2009-09-08 03:05:09 +00:00
if ( ! empty ( $userid ) && ! empty ( $courseid ) && empty ( $modid ) && empty ( $entryid )) {
2009-10-30 07:25:50 +00:00
$blogurl -> param ( 'userid' , $userid );
$blogurl -> param ( 'courseid' , $courseid );
2010-09-17 11:21:36 +00:00
2009-10-30 07:25:50 +00:00
$PAGE -> navbar -> add ( $strblogentries , $blogurl );
2009-09-04 00:36:43 +00:00
2009-09-04 03:40:01 +00:00
$PAGE -> set_title ( " $site->shortname : $course->shortname : " . fullname ( $user ) . ': ' . get_string ( 'blogentries' , 'blog' ));
$PAGE -> set_heading ( " $site->shortname : $course->shortname : " . fullname ( $user ) . ': ' . get_string ( 'blogentries' , 'blog' ));
2009-09-04 00:36:43 +00:00
2010-09-21 08:11:06 +00:00
$a = new stdClass ();
2009-09-04 00:36:43 +00:00
$a -> user = fullname ( $user );
$a -> course = $course -> fullname ;
2009-10-30 07:25:50 +00:00
$a -> type = get_string ( 'course' );
2009-09-04 00:36:43 +00:00
$headers [ 'heading' ] = get_string ( 'blogentriesbyuseraboutcourse' , 'blog' , $a );
2009-10-30 07:25:50 +00:00
$headers [ 'stradd' ] = get_string ( 'blogaboutthis' , 'blog' , $a );
$headers [ 'strview' ] = get_string ( 'viewblogentries' , 'blog' , $a );
// Remove the userid from the URL to inform the blog_menu block correctly
$blogurl -> remove_params ( array ( 'userid' ));
2009-09-04 00:36:43 +00:00
} else
2009-10-30 07:25:50 +00:00
// Case 7: Blog entries by members of a group, associated with that group's course
2009-09-08 03:05:09 +00:00
if ( ! empty ( $groupid ) && empty ( $modid ) && empty ( $entryid )) {
2009-10-30 07:25:50 +00:00
$blogurl -> param ( 'courseid' , $course -> id );
2009-09-04 07:09:45 +00:00
2009-10-30 07:25:50 +00:00
$PAGE -> navbar -> add ( $strblogentries , $blogurl );
$blogurl -> remove_params ( array ( 'courseid' ));
$blogurl -> param ( 'groupid' , $groupid );
$PAGE -> navbar -> add ( $group -> name , $blogurl );
2009-09-04 00:36:43 +00:00
2009-09-04 03:40:01 +00:00
$PAGE -> set_title ( " $site->shortname : $course->shortname : " . get_string ( 'blogentries' , 'blog' ) . " : $group->name " );
$PAGE -> set_heading ( " $site->shortname : $course->shortname : " . get_string ( 'blogentries' , 'blog' ) . " : $group->name " );
2009-09-04 00:36:43 +00:00
2010-09-21 08:11:06 +00:00
$a = new stdClass ();
2009-09-04 00:36:43 +00:00
$a -> group = $group -> name ;
$a -> course = $course -> fullname ;
2009-10-30 07:25:50 +00:00
$a -> type = get_string ( 'course' );
2009-09-04 00:36:43 +00:00
$headers [ 'heading' ] = get_string ( 'blogentriesbygroupaboutcourse' , 'blog' , $a );
2009-10-30 07:25:50 +00:00
$headers [ 'stradd' ] = get_string ( 'blogaboutthis' , 'blog' , $a );
$headers [ 'strview' ] = get_string ( 'viewblogentries' , 'blog' , $a );
2009-09-04 00:36:43 +00:00
} else
2009-10-30 07:25:50 +00:00
// Case 8: Blog entries by members of a group, associated with an activity in that course
2009-09-08 03:05:09 +00:00
if ( ! empty ( $groupid ) && ! empty ( $modid ) && empty ( $entryid )) {
2009-09-04 00:36:43 +00:00
$headers [ 'cm' ] = $cm ;
2009-10-30 07:25:50 +00:00
$blogurl -> param ( 'modid' , $modid );
$PAGE -> navbar -> add ( $strblogentries , $blogurl );
2009-09-04 00:36:43 +00:00
2009-10-30 07:25:50 +00:00
$blogurl -> param ( 'groupid' , $groupid );
$PAGE -> navbar -> add ( $group -> name , $blogurl );
2009-09-04 00:36:43 +00:00
2009-09-04 03:40:01 +00:00
$PAGE -> set_title ( " $site->shortname : $course->shortname : $cm->name : " . get_string ( 'blogentries' , 'blog' ) . " : $group->name " );
$PAGE -> set_heading ( " $site->shortname : $course->shortname : $cm->name : " . get_string ( 'blogentries' , 'blog' ) . " : $group->name " );
2009-09-04 00:36:43 +00:00
2010-09-21 08:11:06 +00:00
$a = new stdClass ();
2009-09-04 00:36:43 +00:00
$a -> group = $group -> name ;
$a -> mod = $cm -> name ;
2009-10-30 07:25:50 +00:00
$a -> type = get_string ( 'modulename' , $cm -> modname );
2009-09-04 00:36:43 +00:00
$headers [ 'heading' ] = get_string ( 'blogentriesbygroupaboutmodule' , 'blog' , $a );
2009-10-30 07:25:50 +00:00
$headers [ 'stradd' ] = get_string ( 'blogaboutthis' , 'blog' , $a );
$headers [ 'strview' ] = get_string ( 'viewallmodentries' , 'blog' , $a );
2009-09-04 00:36:43 +00:00
} else
2009-10-30 07:25:50 +00:00
// Case 9: All blog entries associated with an activity
2009-09-08 03:05:09 +00:00
if ( ! empty ( $modid ) && empty ( $userid ) && empty ( $groupid ) && empty ( $entryid )) {
2009-09-04 03:40:01 +00:00
$PAGE -> set_cm ( $cm , $course );
2009-10-30 07:25:50 +00:00
$blogurl -> param ( 'modid' , $modid );
$PAGE -> navbar -> add ( $strblogentries , $blogurl );
2009-09-04 03:40:01 +00:00
$PAGE -> set_title ( " $site->shortname : $course->shortname : $cm->name : " . get_string ( 'blogentries' , 'blog' ));
$PAGE -> set_heading ( " $site->shortname : $course->shortname : $cm->name : " . get_string ( 'blogentries' , 'blog' ));
2009-09-04 00:36:43 +00:00
$headers [ 'heading' ] = get_string ( 'blogentriesabout' , 'blog' , $cm -> name );
2010-09-21 08:11:06 +00:00
$a = new stdClass ();
2009-10-30 07:25:50 +00:00
$a -> type = get_string ( 'modulename' , $cm -> modname );
$headers [ 'stradd' ] = get_string ( 'blogaboutthis' , 'blog' , $a );
$headers [ 'strview' ] = get_string ( 'viewallmodentries' , 'blog' , $a );
2009-09-04 00:36:43 +00:00
} else
2009-10-30 07:25:50 +00:00
// Case 10: All blog entries associated with a course
2009-09-08 03:05:09 +00:00
if ( ! empty ( $courseid ) && empty ( $userid ) && empty ( $groupid ) && empty ( $modid ) && empty ( $entryid )) {
2009-10-30 07:25:50 +00:00
$blogurl -> param ( 'courseid' , $courseid );
$PAGE -> navbar -> add ( $strblogentries , $blogurl );
2009-09-04 03:40:01 +00:00
$PAGE -> set_title ( " $site->shortname : $course->shortname : " . get_string ( 'blogentries' , 'blog' ));
$PAGE -> set_heading ( " $site->shortname : $course->shortname : " . get_string ( 'blogentries' , 'blog' ));
2010-09-21 08:11:06 +00:00
$a = new stdClass ();
2009-10-30 07:25:50 +00:00
$a -> type = get_string ( 'course' );
2009-09-04 00:36:43 +00:00
$headers [ 'heading' ] = get_string ( 'blogentriesabout' , 'blog' , $course -> fullname );
2009-10-30 07:25:50 +00:00
$headers [ 'stradd' ] = get_string ( 'blogaboutthis' , 'blog' , $a );
$headers [ 'strview' ] = get_string ( 'viewblogentries' , 'blog' , $a );
$blogurl -> remove_params ( array ( 'userid' ));
}
if ( ! in_array ( $action , array ( 'edit' , 'add' ))) {
// Append Tag info
if ( ! empty ( $tagid )) {
$headers [ 'filters' ][ 'tag' ] = $tagid ;
$blogurl -> param ( 'tagid' , $tagid );
$tagrec = $DB -> get_record ( 'tag' , array ( 'id' => $tagid ));
$PAGE -> navbar -> add ( $tagrec -> name , $blogurl );
} elseif ( ! empty ( $tag )) {
$blogurl -> param ( 'tag' , $tag );
$PAGE -> navbar -> add ( get_string ( 'tagparam' , 'blog' , $tag ), $blogurl );
}
2008-04-13 01:17:30 +00:00
2009-10-30 07:25:50 +00:00
// Append Search info
if ( ! empty ( $search )) {
$headers [ 'filters' ][ 'search' ] = $search ;
$blogurl -> param ( 'search' , $search );
$PAGE -> navbar -> add ( get_string ( 'searchterm' , 'blog' , $search ), $blogurl -> out ());
}
2009-09-10 07:05:50 +00:00
}
2009-09-04 00:36:43 +00:00
// Append edit mode info
if ( ! empty ( $action ) && $action == 'add' ) {
2010-08-19 05:56:57 +00:00
2009-09-04 00:36:43 +00:00
} else if ( ! empty ( $action ) && $action == 'edit' ) {
2009-09-04 03:40:01 +00:00
$PAGE -> navbar -> add ( get_string ( 'editentry' , 'blog' ));
2008-04-13 01:17:30 +00:00
}
2009-09-10 07:05:50 +00:00
2009-10-30 07:25:50 +00:00
if ( empty ( $headers [ 'url' ])) {
$headers [ 'url' ] = $blogurl ;
}
2009-09-04 00:36:43 +00:00
return $headers ;
}
2009-09-15 07:57:54 +00:00
2009-10-30 07:25:50 +00:00
/**
* Shortcut function for getting a count of blog entries associated with a course or a module
* @ param int $courseid The ID of the course
* @ param int $cmid The ID of the course_modules
* @ return string The number of associated entries
*/
function blog_get_associated_count ( $courseid , $cmid = null ) {
global $DB ;
$context = get_context_instance ( CONTEXT_COURSE , $courseid );
if ( $cmid ) {
$context = get_context_instance ( CONTEXT_MODULE , $cmid );
}
return $DB -> count_records ( 'blog_association' , array ( 'contextid' => $context -> id ));
2010-05-01 14:33:07 +00:00
}