blog (development code)
[moodle.git] / blog / blogpage.php
1 <?php  // $Id$
3 /**
4 * Definition of blog page type.
5  */
6 define('PAGE_BLOG_VIEW', 'blog-view');
8 // Blog class derived from moodle's page class
9 class page_blog extends page_base {
11     var $editing = false;
12     var $bloginfo = NULL;
13     var $courserecord = NULL;
14     var $courseid = NULL;
15     
16     // Mandatory; should return our identifier.
17     function get_type() {
18         global $CFG;
19         require_once($CFG->dirroot .'/blog/lib.php');
20         return PAGE_BLOG_VIEW;
21     }
22     
23     // we have no format type, use 'blog'
24     //I think it's a bug, but if this is left the default NULL value then pages can
25     //fail to load completely
26     function get_format_name() {
27         global $CFG;
28         require_once($CFG->dirroot .'/blog/lib.php');
29         return PAGE_BLOG_VIEW;
30     }
32     // Do any validation of the officially recognized bits of the data and forward to parent.
33     // Do NOT load up "expensive" resouces (e.g. SQL data) here!
34     function init_quick($data) {
35         parent::init_quick($data);
36         if (empty($data->pageid)) {
37             //if no pageid then the user is viewing a collection of blog entries
38             $this->id = 0; //set blog id to 0
39         }
40     }
41     
42     // Here you should load up all heavy-duty data for your page. Basically everything that
43     // does not NEED to be loaded for the class to make basic decisions should NOT be loaded
44     // in init_quick() and instead deferred here. Of course this function had better recognize
45     // $this->full_init_done to prevent wasteful multiple-time data retrieval.
46     function init_full() {
47         if ($this->full_init_done) {
48             return;
49         }
50         // I need to determine how best to utilize this function. Most init
51         // is already done before we get here in blogFilter and blogInfo
52         $this->bloginfo =& new BlogInfo($this->id);
53         if ($this->courseid == 0 || $this->courseid == 1 || !is_numeric($this->courseid) ) {
54             $this->courseid = '';
55             $courserecord = NULL;
56         } else {
57             if (! ($courserecord = get_record('course', 'id', $this->courseid)) ) {
58                 error( 'You are tring to view an invalid course. Id: ('. $this->courseid .')' );
59             }
60         }
61         $this->full_init_done = true;
62     }    
64     // For this test page, only admins are going to be allowed editing (for simplicity).
65     function user_allowed_editing() {
66         if (isadmin() || ((isset($this->bloginfo) && blog_user_has_rights($this->bloginfo))) || ($this->courseid != '' && isteacher($this->courseid)) ) {
67             return true;
68         }
69         return false;
70     }
72     // Also, admins are considered to have "always on" editing (I wanted to avoid duplicating
73     // the code that turns editing on/off here; you can roll your own or copy course/view.php).
74     function user_is_editing() {
75         if (isadmin() || ((isset($this->bloginfo) && blog_user_has_rights($this->bloginfo))) || ($this->courseid != '' && isteacher($this->courseid)) ) {
76             global $SESSION;
77             if (empty($SESSION->blog_editing_enabled)) {
78                 $SESSION->blog_editing_enabled = false;
79             }
80             $this->editing = $SESSION->blog_editing_enabled;
81             return $this->editing;
82         }
83         return false;
84     }
86     //over-ride parent method's print_header because blog already passes more than just the title along
87     function print_header($pageTitle='', $pageHeading='', $pageNavigation='', $pageFocus='', $pageMeta='') {
88         global $USER;
89         $this->init_full();
90         $extraheader = '';
91         if (!empty($USER) && !empty($USER->id)) {
92             $extraheader = $this->get_extra_header_string();
93         }
94         print_header($pageTitle, $pageHeading, $pageNavigation, $pageFocus, $pageMeta, true, $extraheader );
95     }
96     
97     // This should point to the script that displays us
98     function url_get_path() {
99         global $CFG;
100         return $CFG->wwwroot .'/blog/index.php';
101     }
103     function url_get_parameters() {
104         $array = array();
105         if (!$this->full_init_done) {
106             $array['userid'] = $this->id;
107             return $array;
108         }
110         //I should likely just bring blog filter in here and return 
111         //the output of a filter method like get_params
112         //instead let's simply return the userid and courseid        
113         $array['userid'] = $this->id;
114         if (!empty($this->courseid)) {
115             $array['courseid'] = $this->courseid;
116         }
117         return $array;
118     }
121     // Having defined all identifiers we need, here we declare which block positions we are
122     // going to support.
123     function blocks_get_positions() {
124         return array(BLOCK_POS_LEFT, BLOCK_POS_RIGHT);
125     }
126     
127     // When a new block is created in this page, which position should it go to?
128     function blocks_default_position() {
129         return BLOCK_POS_RIGHT;
130     }
132     // When we are creating a new page, use the data at your disposal to provide a textual representation of the
133     // blocks that are going to get added to this new page. Delimit block names with commas (,) and use double
134     // colons (:) to delimit between block positions in the page. See blocks_get_positions() for additional info.
135     function blocks_get_default() {
136         global $CFG;
137         
138         $this->init_full();
139         
140         // It's a normal blog page
141         if (!empty($CFG->{'defaultblocks_'. $this->get_type()})) {
142             $blocknames = $CFG->{'defaultblocks_'. $this->get_type()};
143         } else {
144             /// Failsafe - in case nothing was defined.
145             $blocknames = 'admin,calendar_month,blog_member_list:login,online_users,blog_menu,blog_categories,blog_recent_entries,blog_news_feeds';
146         }
147         
148         return $blocknames;
149     }    
151     // And finally, a little block move logic. Given a block's previous position and where
152     // we want to move it to, return its new position. Pretty self-documenting.
153     function blocks_move_position(&$instance, $move) {
154         if ($instance->position == BLOCK_POS_LEFT && $move == BLOCK_MOVE_RIGHT) {
155             return BLOCK_POS_RIGHT;
156         } else if ($instance->position == BLOCK_POS_RIGHT && $move == BLOCK_MOVE_LEFT) {
157             return BLOCK_POS_LEFT;
158         }
159         return $instance->position;
160     }
162     /////////// Blog page specific functions
163     function get_extra_header_string() {
164         global $SESSION, $CFG, $USER;
165         $editformstring = '';        
166         if (!empty($SESSION->blog_editing_enabled) && ($SESSION->blog_editing_enabled)) {
167             $editingString = get_string('turneditingoff');
168         } else {
169             $editingString = get_string('turneditingon');
170         }
171         $editformstring = '<form target="'. $CFG->framename .'" method="get" action="'. $CFG->wwwroot .'/blog/set_session_vars.php">'.
172             '<input type="hidden" name="referrer" value="'. me() .'" />'.
173             '<input type="hidden" name="var" value="showediting" />'.
174             '<input type="submit" value="'. $editingString .'" /></form>';
175        
176         return $editformstring;        
177     }    
179 ?>