moodle_page: MDL-12212 reimplement user_is_editing, deprecate isediting
[moodle.git] / blog / index.php
1 <?php // $Id$
3 /**
4  * file index.php
5  * index page to view blogs. if no blog is specified then site wide entries are shown
6  * if a blog id is specified then the latest entries from that blog are shown
7  */
9 require_once('../config.php');
10 require_once($CFG->dirroot .'/blog/lib.php');
11 require_once($CFG->libdir .'/blocklib.php');
13 $id           = optional_param('id', 0, PARAM_INT);
14 $start        = optional_param('formstart', 0, PARAM_INT);
15 $userid       = optional_param('userid', 0, PARAM_INT);
16 $tag          = optional_param('tag', '', PARAM_NOTAGS);
17 $tagid        = optional_param('tagid', 0, PARAM_INT);
18 $postid       = optional_param('postid', 0, PARAM_INT);
19 $filtertype   = optional_param('filtertype', '', PARAM_ALPHA);
20 $filterselect = optional_param('filterselect', 0, PARAM_INT);
22 $edit         = optional_param('edit', -1, PARAM_BOOL);
23 $courseid     = optional_param('courseid', 0, PARAM_INT); // needed for user tabs and course tracking
26 if (empty($CFG->bloglevel)) {
27     print_error('blogdisable', 'blog');
28 }
30 $sitecontext = get_context_instance(CONTEXT_SYSTEM);
32 // change block edit staus if not guest and logged in
33 if (isloggedin() and !isguest() and $edit != -1) {
34     $USER->editing = $edit;
35 }
37 if (empty($filtertype)) {
38     if ($userid) {    // default to user if specified
39         $filtertype = 'user';
40         $filterselect = $userid;
41     } else if (has_capability('moodle/blog:view', $sitecontext) and $CFG->bloglevel > BLOG_USER_LEVEL) {
42         if ($postid) {
43             $filtertype = 'user';
44             if (!$postobject = $DB->get_record('post', array('module'=>'blog', 'id'=>$postid))) {
45                 print_error('nosuchentry', 'blog');
46             }
47             $filterselect = $postobject->userid;
48         } else {
49             $filtertype = 'site';
50             $filterselect = '';
51         }
52     } else {
53         // user might have capability to write blogs, but not read blogs at site level
54         // users might enter this url manually without parameters
55         $filtertype = 'user';
56         $filterselect = $USER->id;
57     }
58 }
59 /// check access and prepare filters
61 switch ($filtertype) {
63     case 'site':
64         if ($CFG->bloglevel < BLOG_SITE_LEVEL) {
65             print_error('siteblogdisable', 'blog');
66         }
67         if ($CFG->bloglevel < BLOG_GLOBAL_LEVEL) {
68             require_login();
69         }
70         if (!has_capability('moodle/blog:view', $sitecontext)) {
71             print_error('cannotviewsiteblog', 'blog');
72         }
73     break;
75     case 'course':
76         if ($CFG->bloglevel < BLOG_COURSE_LEVEL) {
77             print_error('courseblogdisable', 'blog');
78         }
79         if (!$course = $DB->get_record('course', array('id'=>$filterselect))) {
80             print_error('invalidcourseid');
81         }
82         $courseid = $course->id;
83         $coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
84         require_login($course);
85         if (!has_capability('moodle/blog:view', $coursecontext)) {
86             print_error('cannotviewcourseblog', 'blog');
87         }
88     break;
90     case 'group':
91         if ($CFG->bloglevel < BLOG_GROUP_LEVEL) {
92             print_error('groupblogdisable', 'blog');
93         }
94         
95         // fix for MDL-9268
96         if (! $group = groups_get_group($filterselect)) { //TODO:check.
97             print_error('invalidgroupid');
98         }
99         if (!$course = $DB->get_record('course', array('id'=>$group->courseid))) {
100             print_error('invalidcourseid');
101         }
102         $coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
103         $courseid = $course->id;
104         require_login($course);
105         if (!has_capability('moodle/blog:view', $coursecontext)) {
106             print_error('cannotviewcourseorgroupblog', 'blog');
107         }
108         if (groups_get_course_groupmode($course) == SEPARATEGROUPS
109           and !has_capability('moodle/site:accessallgroups', $coursecontext)) {
110             if (!groups_is_member($filterselect)) {
111                 print_error('notmemberofgroup');
112             }
113         }
115     break;
117     case 'user':
118         if ($CFG->bloglevel < BLOG_USER_LEVEL) {
119             print_error('blogdisable', 'blog');
120         }
121         if (!$user = $DB->get_record('user', array('id'=>$filterselect))) {
122             print_error('invaliduserid');
123         }
124         if ($user->deleted) {
125             print_header();
126             print_heading(get_string('userdeleted'));
127             print_footer();
128             die;
129         }
131         if ($USER->id == $filterselect) {
132             if (!has_capability('moodle/blog:create', $sitecontext)
133               and !has_capability('moodle/blog:view', $sitecontext)) {
134                 print_error('donothaveblog', 'blog');
135             }
136         } else {
137             $personalcontext = get_context_instance(CONTEXT_USER, $filterselect);
138             if (!has_capability('moodle/blog:view', $sitecontext) 
139               and !has_capability('moodle/user:readuserblogs', $personalcontext)) {
140                 print_error('cannotviewuserblog', 'blog');
141             }
142             if (!blog_user_can_view_user_post($filterselect)) {
143                 print_error('cannotviewcourseblog', 'blog');
144             }
145         }
146         $userid = $filterselect;
148         if (!empty($courseid)) {
149             require_login($courseid);
150         }
152     break;
154     default:
155         print_error('incorrectblogfilter', 'blog');
156     break;
159 if (empty($courseid)) {
160     $courseid = SITEID;
163 include($CFG->dirroot .'/blog/header.php');
165 blog_print_html_formatted_entries($postid, $filtertype, $filterselect, $tagid, $tag);
167 add_to_log($courseid, 'blog', 'view', 'index.php?filtertype='.$filtertype.'&amp;filterselect='.$filterselect.'&amp;postid='.$postid.'&amp;tagid='.$tagid.'&amp;tag='.$tag, 'view blog entry');
169 include($CFG->dirroot .'/blog/footer.php');
172 ?>