2006-03-10 06:53:01 +00:00
< ? php //$Id$
2006-04-12 02:05:46 +00:00
/**
* Library of functions and constants for blog
*/
require_once ( $CFG -> libdir . '/blocklib.php' );
require_once ( $CFG -> libdir . '/pagelib.php' );
2006-10-06 10:11:52 +00:00
require_once ( $CFG -> dirroot . '/blog/rsslib.php' );
2006-04-12 02:05:46 +00:00
require_once ( $CFG -> dirroot . '/blog/blogpage.php' );
2007-08-27 08:46:00 +00:00
include_once ( $CFG -> dirroot . '/tag/lib.php' );
2006-08-08 05:13:06 +00:00
2006-04-12 02:05:46 +00:00
/**
* Definition of blogcourse page type ( blog page with course id present ) .
*/
//not used at the moment, and may not need to be
define ( 'PAGE_BLOG_COURSE_VIEW' , 'blog_course-view' );
2006-10-06 10:11:52 +00:00
/**
2006-08-08 05:13:06 +00:00
* Checks to see if user has visited blogpages before , if not , install 2
* default blocks ( blog_menu and blog_tags ) .
*/
2006-04-20 06:35:39 +00:00
function blog_check_and_install_blocks () {
global $USER ;
if ( isloggedin () && ! isguest ()) {
// if this user has not visited this page before
if ( ! get_user_preferences ( 'blogpagesize' )) {
// find the correct ids for blog_menu and blog_from blocks
$menublock = get_record ( 'block' , 'name' , 'blog_menu' );
$tagsblock = get_record ( 'block' , 'name' , 'blog_tags' );
// add those 2 into block_instance page
// add blog_menu block
2006-10-06 10:11:52 +00:00
$newblock = new object ();
2007-08-23 14:58:15 +00:00
$newblock -> blockid = $menublock -> id ;
$newblock -> pageid = $USER -> id ;
$newblock -> pagetype = 'blog-view' ;
$newblock -> position = 'r' ;
$newblock -> weight = 0 ;
$newblock -> visible = 1 ;
2006-04-20 06:35:39 +00:00
insert_record ( 'block_instance' , $newblock );
// add blog_tags menu
$newblock -> blockid = $tagsblock -> id ;
2006-10-06 10:11:52 +00:00
$newblock -> weight = 1 ;
2006-04-20 06:35:39 +00:00
insert_record ( 'block_instance' , $newblock );
// finally we set the page size pref
2006-10-06 10:11:52 +00:00
set_user_preference ( 'blogpagesize' , 10 );
2006-04-20 06:35:39 +00:00
}
}
}
2006-04-12 02:05:46 +00:00
/**
* Adaptation of isediting in moodlelib . php for blog module
* @ return bool
*/
function blog_isediting () {
global $SESSION ;
2006-10-06 10:11:52 +00:00
return ! empty ( $SESSION -> blog_editing_enabled );
2006-03-16 07:47:37 +00:00
}
2006-08-08 05:13:06 +00:00
2006-04-12 02:05:46 +00:00
/**
* This function is in lib and not in BlogInfo because entries being searched
* might be found in any number of blogs rather than just one .
*
2006-04-12 08:58:49 +00:00
* $ @ param ...
2006-04-12 02:05:46 +00:00
*/
2006-10-06 10:11:52 +00:00
function blog_print_html_formatted_entries ( $postid , $filtertype , $filterselect , $tagid , $tag ) {
2006-04-12 08:58:49 +00:00
2006-04-12 02:05:46 +00:00
global $CFG , $USER ;
2006-03-10 06:53:01 +00:00
2006-10-06 10:11:52 +00:00
$blogpage = optional_param ( 'blogpage' , 0 , PARAM_INT );
$bloglimit = optional_param ( 'limit' , get_user_preferences ( 'blogpagesize' , 10 ), PARAM_INT );
$start = $blogpage * $bloglimit ;
2006-04-12 02:05:46 +00:00
2006-10-06 10:11:52 +00:00
$sitecontext = get_context_instance ( CONTEXT_SYSTEM , SITEID );
2006-03-10 06:53:01 +00:00
2006-04-12 02:05:46 +00:00
$morelink = '<br /> ' ;
2007-08-23 14:58:15 +00:00
2006-11-02 05:54:01 +00:00
$totalentries = get_viewable_entry_count ( $postid , $bloglimit , $start , $filtertype , $filterselect , $tagid , $tag , $sort = 'lastmodified DESC' );
2006-10-06 10:11:52 +00:00
$blogEntries = fetch_entries ( $postid , $bloglimit , $start , $filtertype , $filterselect , $tagid , $tag , $sort = 'lastmodified DESC' , true );
2006-11-02 05:54:01 +00:00
print_paging_bar ( $totalentries , $blogpage , $bloglimit , get_baseurl ( $filtertype , $filterselect ), 'blogpage' );
2006-04-12 02:05:46 +00:00
2006-04-12 06:04:06 +00:00
if ( $CFG -> enablerssfeeds ) {
blog_rss_print_link ( $filtertype , $filterselect , $tag );
}
2006-04-12 02:05:46 +00:00
2006-10-06 10:11:52 +00:00
if ( has_capability ( 'moodle/blog:create' , $sitecontext )) {
2006-04-12 02:05:46 +00:00
//the user's blog is enabled and they are viewing their own blog
2007-02-06 08:24:37 +00:00
$addlink = '<div class="addbloglink">' ;
2006-10-06 10:11:52 +00:00
$addlink .= '<a href="' . $CFG -> wwwroot . '/blog/edit.php?action=add' . '">' . get_string ( 'addnewentry' , 'blog' ) . '</a>' ;
$addlink .= '</div>' ;
2006-04-12 02:05:46 +00:00
echo $addlink ;
2006-03-10 06:53:01 +00:00
}
2006-04-21 02:37:28 +00:00
if ( $blogEntries ) {
2006-04-12 02:05:46 +00:00
$count = 0 ;
foreach ( $blogEntries as $blogEntry ) {
blog_print_entry ( $blogEntry , 'list' , $filtertype , $filterselect ); //print this entry.
$count ++ ;
}
2007-08-23 14:58:15 +00:00
2006-11-02 05:54:01 +00:00
print_paging_bar ( $totalentries , $blogpage , $bloglimit , get_baseurl ( $filtertype , $filterselect ), 'blogpage' );
2007-08-23 14:58:15 +00:00
2006-04-12 02:05:46 +00:00
if ( ! $count ) {
2007-02-08 03:04:41 +00:00
print '<br /><div style="text-align:center">' . get_string ( 'noentriesyet' , 'blog' ) . '</div><br />' ;
2006-04-12 02:05:46 +00:00
}
2007-08-23 14:58:15 +00:00
2006-04-12 02:05:46 +00:00
print $morelink . '<br />' . " \n " ;
return ;
2006-03-10 06:53:01 +00:00
}
2007-02-08 03:04:41 +00:00
$output = '<br /><div style="text-align:center">' . get_string ( 'noentriesyet' , 'blog' ) . '</div><br />' ;
2007-08-23 14:58:15 +00:00
print $output ;
2006-11-02 05:54:01 +00:00
2006-03-10 06:53:01 +00:00
}
2006-08-08 05:13:06 +00:00
2006-04-12 02:05:46 +00:00
/**
2006-08-08 05:13:06 +00:00
* This function is in lib and not in BlogInfo because entries being searched
* might be found in any number of blogs rather than just one .
2006-04-12 02:05:46 +00:00
*
* This function builds an array which can be used by the included
* template file , making predefined and nicely formatted variables available
* to the template . Template creators will not need to become intimate
* with the internal objects and vars of moodle blog nor will they need to worry
* about properly formatting their data
*
* @ param BlogEntry blogEntry - a hopefully fully populated BlogEntry object
* @ param string viewtype Default is 'full' . If 'full' then display this blog entry
* in its complete form ( eg . archive page ) . If anything other than 'full'
* display the entry in its abbreviated format ( eg . index page )
*/
function blog_print_entry ( $blogEntry , $viewtype = 'full' , $filtertype = '' , $filterselect = '' , $mode = 'loud' ) {
2006-10-06 10:11:52 +00:00
global $USER , $CFG , $COURSE , $ME ;
2006-04-12 02:05:46 +00:00
2006-10-08 08:52:15 +00:00
$template [ 'body' ] = format_text ( $blogEntry -> summary , $blogEntry -> format );
2007-02-06 08:24:37 +00:00
//$template['title'] = '<a name="'. $blogEntry->subject .'"></a>';
2006-04-12 02:05:46 +00:00
//enclose the title in nolink tags so that moodle formatting doesn't autolink the text
2007-02-06 08:24:37 +00:00
$template [ 'title' ] = '<span class="nolink">' . $blogEntry -> subject . '</span>' ;
2006-04-12 02:05:46 +00:00
$template [ 'userid' ] = $blogEntry -> userid ;
$template [ 'author' ] = fullname ( get_record ( 'user' , 'id' , $blogEntry -> userid ));
$template [ 'lastmod' ] = userdate ( $blogEntry -> lastmodified );
$template [ 'created' ] = userdate ( $blogEntry -> created );
2006-04-12 06:04:06 +00:00
$template [ 'publishstate' ] = $blogEntry -> publishstate ;
2006-04-12 03:02:53 +00:00
/// preventing user to browse blogs that they aren't supposed to see
2006-04-12 08:58:49 +00:00
/// This might not be too good since there are multiple calls per page
/*
2006-04-12 03:02:53 +00:00
if ( ! blog_user_can_view_user_post ( $template [ 'userid' ])) {
error ( 'you can not view this post' );
2006-04-12 08:58:49 +00:00
} */
2006-04-12 02:05:46 +00:00
$stredit = get_string ( 'edit' );
$strdelete = get_string ( 'delete' );
2006-03-10 06:53:01 +00:00
2006-04-12 02:05:46 +00:00
$user = get_record ( 'user' , 'id' , $template [ 'userid' ]);
2006-03-10 06:53:01 +00:00
2006-04-12 06:04:06 +00:00
/// Start printing of the blog
2006-04-24 03:36:02 +00:00
echo '<table cellspacing="0" class="forumpost blogpost blog' . $template [ 'publishstate' ] . '" width="100%">' ;
2006-03-10 06:53:01 +00:00
2006-04-12 02:05:46 +00:00
echo '<tr class="header"><td class="picture left">' ;
print_user_picture ( $template [ 'userid' ], SITEID , $user -> picture );
echo '</td>' ;
2006-03-10 06:53:01 +00:00
2006-04-12 02:05:46 +00:00
echo '<td class="topic starter"><div class="subject">' . $template [ 'title' ] . '</div><div class="author">' ;
2006-08-08 05:13:06 +00:00
$fullname = fullname ( $user , $template [ 'userid' ]);
2006-10-06 10:11:52 +00:00
$by = new object ();
2006-04-12 02:05:46 +00:00
$by -> name = '<a href="' . $CFG -> wwwroot . '/user/view.php?id=' .
2006-10-06 10:11:52 +00:00
$user -> id . '&course=' . $COURSE -> id . '">' . $fullname . '</a>' ;
2006-04-12 02:05:46 +00:00
$by -> date = $template [ 'lastmod' ];
print_string ( 'bynameondate' , 'forum' , $by );
echo '</div></td></tr>' ;
2006-03-10 06:53:01 +00:00
2006-04-12 02:05:46 +00:00
echo '<tr><td class="left side">' ;
2006-03-10 06:53:01 +00:00
2006-04-12 02:05:46 +00:00
/// Actual content
2006-03-10 06:53:01 +00:00
2006-04-12 02:05:46 +00:00
echo '</td><td class="content">' . " \n " ;
2007-08-23 14:58:15 +00:00
2006-11-20 08:31:48 +00:00
if ( $blogEntry -> attachment ) {
echo '<div class="attachments">' ;
$attachedimages = blog_print_attachments ( $blogEntry );
echo '</div>' ;
} else {
$attachedimages = '' ;
}
2006-03-10 06:53:01 +00:00
2006-04-18 01:59:13 +00:00
switch ( $template [ 'publishstate' ]) {
case 'draft' :
$blogtype = get_string ( 'publishtonoone' , 'blog' );
break ;
case 'site' :
$blogtype = get_string ( 'publishtosite' , 'blog' );
break ;
case 'public' :
$blogtype = get_string ( 'publishtoworld' , 'blog' );
break ;
default :
2006-05-01 03:12:17 +00:00
$blogtype = '' ;
2006-04-18 01:59:13 +00:00
break ;
2006-10-06 10:11:52 +00:00
}
2006-04-18 01:59:13 +00:00
2006-10-06 10:11:52 +00:00
echo '<div class="audience">' . $blogtype . '</div>' ;
2006-04-18 01:59:13 +00:00
2006-04-12 02:05:46 +00:00
// Print whole message
echo format_text ( $template [ 'body' ]);
2007-08-23 14:58:15 +00:00
2006-11-20 08:31:48 +00:00
/// Print attachments
echo $attachedimages ;
2006-04-12 02:05:46 +00:00
/// Links to tags
2007-08-27 08:46:00 +00:00
/*
2006-04-12 02:05:46 +00:00
if ( $blogtags = get_records_sql ( 'SELECT t.* FROM ' . $CFG -> prefix . 'tags t, ' . $CFG -> prefix . ' blog_tag_instance ti
WHERE t . id = ti . tagid
2006-04-12 06:04:06 +00:00
AND ti . entryid = ' . $blogEntry -> id )) {
2007-08-27 08:46:00 +00:00
*/
2007-08-30 09:13:36 +00:00
if ( ! empty ( $CFG -> usetags ) && ( $blogtags = get_item_tags ( 'blog' , $blogEntry -> id ))) {
2006-05-01 03:12:17 +00:00
echo '<div class="tags">' ;
if ( $blogtags ) {
print_string ( 'tags' );
echo ': ' ;
foreach ( $blogtags as $key => $blogtag ) {
2007-08-31 02:25:29 +00:00
//$taglist[] = '<a href="index.php?filtertype='.$filtertype.'&filterselect='.$filterselect.'&tagid='.$blogtag->id.'">'.tag_display_name($blogtag).'</a>'; // Blog tag only
$taglist [] = '<a href="' . $CFG -> wwwroot . '/tag/index.php?id=' . $blogtag -> id . '">' . tag_display_name ( $blogtag ) . '</a>' ; // General tag link
2006-05-01 03:12:17 +00:00
}
echo implode ( ', ' , $taglist );
2006-04-12 02:05:46 +00:00
}
2006-05-01 03:12:17 +00:00
echo '</div>' ;
2006-04-12 02:05:46 +00:00
}
2006-03-10 06:53:01 +00:00
2006-04-12 02:05:46 +00:00
/// Commands
2006-03-10 06:53:01 +00:00
2006-04-12 02:05:46 +00:00
echo '<div class="commands">' ;
2006-03-10 06:53:01 +00:00
2006-10-06 10:11:52 +00:00
if ( blog_user_can_edit_post ( $blogEntry )) {
echo '<a href="' . $CFG -> wwwroot . '/blog/edit.php?action=edit&id=' . $blogEntry -> id . '">' . $stredit . '</a>' ;
echo '| <a href="' . $CFG -> wwwroot . '/blog/edit.php?action=delete&id=' . $blogEntry -> id . '">' . $strdelete . '</a>' ;
2006-03-10 06:53:01 +00:00
}
2006-04-12 02:05:46 +00:00
echo '</div>' ;
2006-04-24 03:36:02 +00:00
echo '</td></tr></table>' . " \n \n " ;
2006-04-12 06:04:06 +00:00
2006-03-10 06:53:01 +00:00
}
2007-08-23 14:58:15 +00:00
2006-11-20 08:31:48 +00:00
function blog_file_area_name ( $blogentry ) {
// Creates a directory file name, suitable for make_upload_directory()
global $CFG ;
// $CFG->dataroot/blog/attachments/xxxx/file.jpg
return " blog/attachments/ $blogentry->id " ;
}
2006-03-10 06:53:01 +00:00
2006-11-20 08:31:48 +00:00
function blog_file_area ( $blogentry ) {
return make_upload_directory ( blog_file_area_name ( $blogentry ) );
}
2007-03-19 07:52:29 +00:00
function blog_delete_old_attachments ( $post , $exception = " " ) {
// Deletes all the user files in the attachments area for a post
// EXCEPT for any file named $exception
if ( $basedir = blog_file_area ( $post )) {
if ( $files = get_directory_list ( $basedir )) {
foreach ( $files as $file ) {
if ( $file != $exception ) {
unlink ( " $basedir / $file " );
notify ( " Existing file ' $file ' has been deleted! " );
}
}
}
if ( ! $exception ) { // Delete directory as well, if empty
rmdir ( " $basedir " );
}
}
}
2006-11-20 08:31:48 +00:00
function blog_print_attachments ( $blogentry , $return = NULL ) {
// if return=html, then return a html string.
// if return=text, then return a text-only string.
// otherwise, print HTML for non-images, and return image HTML
global $CFG ;
$filearea = blog_file_area_name ( $blogentry );
$imagereturn = " " ;
$output = " " ;
if ( $basedir = blog_file_area ( $blogentry )) {
if ( $files = get_directory_list ( $basedir )) {
$strattachment = get_string ( " attachment " , " forum " );
foreach ( $files as $file ) {
include_once ( $CFG -> libdir . '/filelib.php' );
$icon = mimeinfo ( " icon " , $file );
2006-12-28 21:21:44 +00:00
$type = mimeinfo ( " type " , $file );
2006-11-20 08:31:48 +00:00
if ( $CFG -> slasharguments ) {
$ffurl = " $CFG->wwwroot /file.php/ $filearea / $file " ;
} else {
$ffurl = " $CFG->wwwroot /file.php?file=/ $filearea / $file " ;
}
2007-01-08 09:14:05 +00:00
$image = " <img src= \" $CFG->pixpath /f/ $icon\ " class = \ " icon \" alt= \" \" /> " ;
2006-11-20 08:31:48 +00:00
if ( $return == " html " ) {
$output .= " <a href= \" $ffurl\ " > $image </ a > " ;
$output .= " <a href= \" $ffurl\ " > $file </ a >< br /> " ;
} else if ( $return == " text " ) {
$output .= " $strattachment $file : \n $ffurl\n " ;
} else {
2006-12-28 21:21:44 +00:00
if ( in_array ( $type , array ( 'image/gif' , 'image/jpeg' , 'image/png' ))) { // Image attachments don't get printed as links
2006-11-20 08:31:48 +00:00
$imagereturn .= " <br /><img src= \" $ffurl\ " alt = \ " \" /> " ;
} else {
echo " <a href= \" $ffurl\ " > $image </ a > " ;
echo filter_text ( " <a href= \" $ffurl\ " > $file </ a >< br /> " );
}
}
}
}
}
if ( $return ) {
return $output ;
}
return $imagereturn ;
}
2006-08-08 05:13:06 +00:00
2006-04-12 02:05:46 +00:00
/**
* Use this function to retrieve a list of publish states available for
* the currently logged in user .
*
* @ return array This function returns an array ideal for sending to moodles '
* choose_from_menu function .
*/
function blog_applicable_publish_states ( $courseid = '' ) {
2006-04-12 08:58:49 +00:00
2006-04-12 02:05:46 +00:00
global $CFG ;
// everyone gets draft access
2006-10-19 06:41:49 +00:00
if ( $CFG -> bloglevel >= BLOG_USER_LEVEL ) {
$options = array ( 'draft' => get_string ( 'publishtonoone' , 'blog' ) );
}
2007-08-23 14:58:15 +00:00
2006-10-19 06:41:49 +00:00
if ( $CFG -> bloglevel > BLOG_USER_LEVEL ) {
$options [ 'site' ] = get_string ( 'publishtosite' , 'blog' );
}
2007-08-23 14:58:15 +00:00
2006-10-19 06:41:49 +00:00
if ( $CFG -> bloglevel >= BLOG_GLOBAL_LEVEL ) {
$options [ 'public' ] = get_string ( 'publishtoworld' , 'blog' );
}
2006-04-12 02:05:46 +00:00
return $options ;
}
2006-04-12 08:58:49 +00:00
2006-08-08 05:13:06 +00:00
/**
* User can edit a blog entry if this is their own blog post and they have
2006-10-02 20:50:49 +00:00
* the capability moodle / blog : create , or if they have the capability
2006-08-08 05:13:06 +00:00
* moodle / blog : manageentries .
2006-10-06 10:11:52 +00:00
*
* This also applies to deleting of posts .
2006-08-08 05:13:06 +00:00
*/
2006-10-06 10:11:52 +00:00
function blog_user_can_edit_post ( $blogEntry ) {
2006-04-12 08:58:49 +00:00
global $CFG , $USER ;
2006-10-06 10:11:52 +00:00
$sitecontext = get_context_instance ( CONTEXT_SYSTEM , SITEID );
if ( has_capability ( 'moodle/blog:manageentries' , $sitecontext )) {
return true ; // can edit any blog post
}
if ( $blogEntry -> userid == $USER -> id
and has_capability ( 'moodle/blog:create' , $sitecontext )) {
return true ; // can edit own when having blog:create capability
}
return false ;
2006-04-12 08:58:49 +00:00
}
2006-04-12 02:05:46 +00:00
2006-03-10 06:53:01 +00:00
2006-08-08 05:13:06 +00:00
/**
* Checks to see if a user can view the blogs of another user .
2006-10-06 10:11:52 +00:00
* Only blog level is checked here , the capabilities are enforced
* in blog / index . php
2006-08-08 05:13:06 +00:00
*/
function blog_user_can_view_user_post ( $targetuserid , $blogEntry = null ) {
global $CFG , $USER ;
2006-10-06 10:11:52 +00:00
if ( empty ( $CFG -> bloglevel )) {
return false ; // blog system disabled
2006-04-12 08:58:49 +00:00
}
2006-10-06 10:11:52 +00:00
if ( ! empty ( $USER -> id ) and $USER -> id == $targetuserid ) {
return true ; // can view own posts in any case
2006-04-12 08:58:49 +00:00
}
2006-10-06 10:11:52 +00:00
$sitecontext = get_context_instance ( CONTEXT_SYSTEM , SITEID );
if ( has_capability ( 'moodle/blog:manageentries' , $sitecontext )) {
return true ; // can manage all posts
2006-04-12 02:05:46 +00:00
}
2007-08-23 14:58:15 +00:00
2007-03-15 06:13:12 +00:00
// coming for 1 post, make sure it's not a draft
2006-10-06 10:11:52 +00:00
if ( $blogEntry and $blogEntry -> publishstate == 'draft' ) {
return false ; // can not view draft of others
2006-03-10 06:53:01 +00:00
}
2007-08-23 14:58:15 +00:00
2007-03-15 06:13:12 +00:00
// coming for 1 post, make sure user is logged in, if not a public blog
if ( $blogEntry && $blogEntry -> publishstate != 'public' && ! isloggedin ()) {
2007-08-23 14:58:15 +00:00
return false ;
2007-03-15 06:13:12 +00:00
}
2006-04-12 02:05:46 +00:00
2006-10-06 10:11:52 +00:00
switch ( $CFG -> bloglevel ) {
case BLOG_GLOBAL_LEVEL :
return true ;
break ;
2006-03-10 06:53:01 +00:00
2006-10-06 10:11:52 +00:00
case BLOG_SITE_LEVEL :
if ( ! empty ( $USER -> id )) { // not logged in viewers forbidden
return true ;
}
return false ;
break ;
case BLOG_COURSE_LEVEL :
2007-07-26 02:47:44 +00:00
$mycourses = array_keys ( get_my_courses ( $USER -> id ));
2006-10-06 10:11:52 +00:00
$usercourses = array_keys ( get_my_courses ( $targetuserid ));
$shared = array_intersect ( $mycourses , $usercourses );
if ( ! empty ( $shared )) {
return true ;
}
return false ;
break ;
case BLOG_GROUP_LEVEL :
2007-07-26 02:47:44 +00:00
$mycourses = array_keys ( get_my_courses ( $USER -> id ));
2006-10-06 10:11:52 +00:00
$usercourses = array_keys ( get_my_courses ( $targetuserid ));
$shared = array_intersect ( $mycourses , $usercourses );
foreach ( $shared as $courseid ) {
$coursecontext = get_context_instance ( CONTEXT_COURSE , $courseid );
if ( has_capability ( 'moodle/site:accessallgroups' , $coursecontext )
or groupmode ( $courseid ) != SEPARATEGROUPS ) {
return true ;
} else {
2007-08-15 20:21:01 +00:00
if ( $usergroups = groups_get_all_groups ( $courseid , $targetuserid )) {
2006-10-06 10:11:52 +00:00
foreach ( $usergroups as $usergroup ) {
2007-08-15 20:21:01 +00:00
if ( groups_is_member ( $usergroup -> id )) {
2006-10-06 10:11:52 +00:00
return true ;
}
}
}
}
}
return false ;
break ;
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
2006-04-12 02:05:46 +00:00
}
}
2006-03-10 06:53:01 +00:00
2006-04-12 02:05:46 +00:00
2006-08-08 05:13:06 +00:00
/**
* Main filter function .
*/
2006-10-06 10:11:52 +00:00
function fetch_entries ( $postid = '' , $fetchlimit = 10 , $fetchstart = '' , $filtertype = '' , $filterselect = '' , $tagid = '' , $tag = '' , $sort = 'lastmodified DESC' , $limit = true ) {
2006-04-12 02:05:46 +00:00
global $CFG , $USER ;
2007-08-23 14:58:15 +00:00
2007-01-04 02:51:21 +00:00
/// the post table will be used for other things too
2007-08-23 14:58:15 +00:00
$typesql = " AND p.module = 'blog' " ;
2006-04-12 02:05:46 +00:00
/// set the tag id for searching
if ( $tagid ) {
$tag = $tagid ;
} else if ( $tag ) {
2007-08-27 08:46:00 +00:00
if ( $tagrec = get_record_sql ( 'SELECT * FROM ' . $CFG -> prefix . 'tag WHERE name LIKE "' . $tag . '"' )) {
2006-04-12 02:05:46 +00:00
$tag = $tagrec -> id ;
} else {
$tag = - 1 ; //no records found
2006-03-17 07:38:08 +00:00
}
2006-04-12 02:05:46 +00:00
}
// If we have specified an ID
// Just return 1 entry
2006-05-01 05:33:47 +00:00
2006-04-12 02:05:46 +00:00
if ( $postid ) {
if ( $post = get_record ( 'post' , 'id' , $postid )) {
2007-03-15 06:13:12 +00:00
if ( blog_user_can_view_user_post ( $post -> userid , $post )) {
2006-04-12 02:05:46 +00:00
2006-05-01 06:23:41 +00:00
if ( $user = get_record ( 'user' , 'id' , $post -> userid )) {
$post -> email = $user -> email ;
$post -> firstname = $user -> firstname ;
$post -> lastname = $user -> lastname ;
}
$retarray [] = $post ;
return $retarray ;
} else {
return null ;
}
2006-10-06 10:11:52 +00:00
2006-05-01 05:33:47 +00:00
} else { // bad postid
return null ;
2006-04-12 02:05:46 +00:00
}
}
if ( $tag ) {
2007-08-27 08:46:00 +00:00
$tagtablesql = $CFG -> prefix . 'tag_instance ti, ' ;
2007-08-31 05:17:35 +00:00
$tagquerysql = ' AND ti.itemid = p.id AND ti.tagid = ' . $tag . ' AND ti.itemtype = \'blog\' ' ;
2006-03-17 07:38:08 +00:00
} else {
2006-04-12 02:05:46 +00:00
$tagtablesql = '' ;
$tagquerysql = '' ;
}
2007-03-23 01:42:52 +00:00
if ( isloggedin () && ! has_capability ( 'moodle/legacy:guest' , get_context_instance ( CONTEXT_SYSTEM , SITEID ), $USER -> id , false )) {
2007-04-05 06:00:10 +00:00
$permissionsql = 'AND (p.publishstate = \'site\' OR p.publishstate = \'public\' OR p.userid = ' . $USER -> id . ')' ;
2006-11-03 08:43:54 +00:00
} else {
2007-04-05 06:00:10 +00:00
$permissionsql = 'AND p.publishstate = \'public\'' ;
}
2007-08-23 14:58:15 +00:00
2007-04-05 06:00:10 +00:00
// fix for MDL-9165, use with readuserblogs capability in a user context can read that user's private blogs
// admins can see all blogs regardless of publish states, as described on the help page
if ( has_capability ( 'moodle/user:readuserblogs' , get_context_instance ( CONTEXT_SYSTEM , SITEID ))) {
2007-08-23 14:58:15 +00:00
$permissionsql = '' ;
2007-04-05 06:00:10 +00:00
} else if ( $filtertype == 'user' && has_capability ( 'moodle/user:readuserblogs' , get_context_instance ( CONTEXT_USER , $filterselect ))) {
2007-08-23 14:58:15 +00:00
$permissionsql = '' ;
2006-11-03 08:43:54 +00:00
}
2006-04-12 02:05:46 +00:00
/****************************************
* depending on the type , there are 4 *
* different possible sqls *
****************************************/
$requiredfields = 'p.*, u.firstname,u.lastname,u.email' ;
2006-11-03 08:43:54 +00:00
if ( $filtertype == 'course' && $filterselect == SITEID ) { // Really a site
$filtertype = 'site' ;
}
2006-04-12 02:05:46 +00:00
switch ( $filtertype ) {
case 'site' :
2006-11-03 08:43:54 +00:00
$SQL = 'SELECT ' . $requiredfields . ' FROM ' . $CFG -> prefix . 'post p, ' . $tagtablesql
. $CFG -> prefix . ' user u
WHERE p . userid = u . id '.$tagquerysql.'
AND u . deleted = 0
2007-04-05 06:00:10 +00:00
' . $permissionsql . $typesql ;
2006-04-12 02:05:46 +00:00
break ;
case 'course' :
2006-11-03 08:43:54 +00:00
// all users with a role assigned
$context = get_context_instance ( CONTEXT_COURSE , $filterselect );
2007-08-23 14:58:15 +00:00
2007-08-17 08:16:11 +00:00
// MDL-10037, hidden users' blogs should not appear
if ( has_capability ( 'moodle/role:viewhiddenassigns' , $context )) {
2007-08-23 14:58:15 +00:00
$hiddensql = '' ;
} else {
$hiddensql = ' AND ra.hidden = 0 ' ;
2007-08-17 08:16:11 +00:00
}
2006-04-12 02:05:46 +00:00
2006-11-03 08:43:54 +00:00
$SQL = 'SELECT ' . $requiredfields . ' FROM ' . $CFG -> prefix . 'post p, ' . $tagtablesql
. $CFG -> prefix . 'role_assignments ra, ' . $CFG -> prefix . ' user u
WHERE p . userid = ra . userid '.$tagquerysql.'
AND ra . contextid '.get_related_contexts_string($context).'
AND u . id = p . userid
AND u . deleted = 0
2007-08-17 08:16:11 +00:00
' . $hiddensql . $permissionsql . $typesql ;
2006-04-12 02:05:46 +00:00
break ;
case 'group' :
2006-09-20 20:31:09 +00:00
$SQL = 'SELECT ' . $requiredfields . ' FROM ' . $CFG -> prefix . 'post p, ' . $tagtablesql
2007-08-15 19:28:11 +00:00
. $CFG -> prefix . 'groups_members gm, ' . $CFG -> prefix . ' user u
2007-08-31 05:38:46 +00:00
WHERE p . userid = gm . userid AND u . id = p . userid '.$tagquerysql.'
2007-08-15 19:28:11 +00:00
AND gm . groupid = '.$filterselect.'
AND u . deleted = 0
' . $permissionsql . $typesql ;
2006-04-12 02:05:46 +00:00
break ;
case 'user' :
2006-10-06 10:11:52 +00:00
2006-11-03 08:43:54 +00:00
$SQL = 'SELECT ' . $requiredfields . ' FROM ' . $CFG -> prefix . 'post p, ' . $tagtablesql
. $CFG -> prefix . ' user u
WHERE p . userid = u . id '.$tagquerysql.'
AND u . id = '.$filterselect.'
AND u . deleted = 0
2007-04-05 06:00:10 +00:00
' . $permissionsql . $typesql ;
2006-04-12 02:05:46 +00:00
break ;
}
2006-10-23 23:00:18 +00:00
$limitfrom = 0 ;
$limitnum = 0 ;
2006-04-12 02:05:46 +00:00
if ( $fetchstart !== '' && $limit ) {
2006-10-23 23:00:18 +00:00
$limitfrom = $fetchstart ;
$limitnum = $fetchlimit ;
2006-03-17 07:38:08 +00:00
}
2006-04-12 02:05:46 +00:00
$orderby = ' ORDER BY ' . $sort . ' ' ;
2006-11-03 08:43:54 +00:00
//global $db; $db->debug = true;
2006-10-23 23:00:18 +00:00
$records = get_records_sql ( $SQL . $orderby , $limitfrom , $limitnum );
2006-11-03 08:43:54 +00:00
//$db->debug = false;
2006-04-12 02:05:46 +00:00
if ( empty ( $records )) {
return array ();
}
return $records ;
2006-03-17 07:38:08 +00:00
}
2006-08-08 05:13:06 +00:00
2006-04-12 02:05:46 +00:00
/**
* get the count of viewable entries , easiest way is to count fetch_entries
* this is used for print_paging_bar
2006-04-12 08:58:49 +00:00
* this is not ideal , but because of the UNION in the sql in fetch_entries ,
* it is hard to use count_records_sql
2006-04-12 02:05:46 +00:00
*/
2006-10-06 10:11:52 +00:00
function get_viewable_entry_count ( $postid = '' , $fetchlimit = 10 ,
2006-08-08 05:13:06 +00:00
$fetchstart = '' , $filtertype = '' , $filterselect = '' , $tagid = '' ,
$tag = '' , $sort = 'lastmodified DESC' ) {
2006-04-12 02:05:46 +00:00
2006-10-06 10:11:52 +00:00
$blogEntries = fetch_entries ( $postid , $fetchlimit ,
2006-08-08 05:13:06 +00:00
$fetchstart , $filtertype , $filterselect , $tagid , $tag ,
$sort = 'lastmodified DESC' , false );
2006-10-06 10:11:52 +00:00
2006-04-12 02:05:46 +00:00
return count ( $blogEntries );
2006-03-17 07:38:08 +00:00
}
2006-08-08 05:13:06 +00:00
2006-04-12 08:58:49 +00:00
/// Find the base url from $_GET variables, for print_paging_bar
2006-04-12 02:05:46 +00:00
function get_baseurl ( $filtertype , $filterselect ) {
$getcopy = $_GET ;
unset ( $getcopy [ 'blogpage' ]);
$strippedurl = strip_querystring ( qualified_me ());
if ( ! empty ( $getcopy )) {
$first = false ;
$querystring = '' ;
foreach ( $getcopy as $var => $val ) {
if ( ! $first ) {
$first = true ;
if ( $var != 'filterselect' && $var != 'filtertype' ) {
$querystring .= '?' . $var . '=' . $val ;
$hasparam = true ;
} else {
$querystring .= '?' ;
}
} else {
if ( $var != 'filterselect' && $var != 'filtertype' ) {
$querystring .= '&' . $var . '=' . $val ;
$hasparam = true ;
}
}
}
if ( isset ( $hasparam )) {
$querystring .= '&' ;
} else {
$querystring = '?' ;
}
} else {
$querystring = '?' ;
}
2006-03-17 07:38:08 +00:00
2006-08-08 05:13:06 +00:00
return strip_querystring ( qualified_me ()) . $querystring . 'filtertype=' .
$filtertype . '&filterselect=' . $filterselect . '&' ;
2006-04-12 02:05:46 +00:00
}
2006-08-14 05:55:40 +00:00
?>