MDL-6805 Fix redirects in blog - edit button now properly redirects to self
[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 $courserecord = NULL;
13     var $courseid = NULL;
14     
15     // Mandatory; should return our identifier.
16     function get_type() {
17         global $CFG;
18         require_once($CFG->dirroot .'/blog/lib.php');
19         return PAGE_BLOG_VIEW;
20     }
21     
22     // we have no format type, use 'blog'
23     //I think it's a bug, but if this is left the default NULL value then pages can
24     //fail to load completely
25     function get_format_name() {
26         global $CFG;
27         require_once($CFG->dirroot .'/blog/lib.php');
28         return PAGE_BLOG_VIEW;
29     }
31     // Do any validation of the officially recognized bits of the data and forward to parent.
32     // Do NOT load up "expensive" resouces (e.g. SQL data) here!
33     function init_quick($data) {
34         parent::init_quick($data);
35         if (empty($data->pageid)) {
36             //if no pageid then the user is viewing a collection of blog entries
37             $this->id = 0; //set blog id to 0
38         }
39     }
40     
41     // Here you should load up all heavy-duty data for your page. Basically everything that
42     // does not NEED to be loaded for the class to make basic decisions should NOT be loaded
43     // in init_quick() and instead deferred here. Of course this function had better recognize
44     // $this->full_init_done to prevent wasteful multiple-time data retrieval.
45     function init_full() {
46         if ($this->full_init_done) {
47             return;
48         }
49         // I need to determine how best to utilize this function. Most init
50         // is already done before we get here in blogFilter and blogInfo
52         if ($this->courseid == 0 || $this->courseid == 1 || !is_numeric($this->courseid) ) {
53             $this->courseid = '';
54             $courserecord = NULL;
55         } else {
56             if (! ($courserecord = get_record('course', 'id', $this->courseid)) ) {
57                 error( 'You are tring to view an invalid course. Id: ('. $this->courseid .')' );
58             }
59         }
60         $this->full_init_done = true;
61     }    
63     // For this test page, only admins are going to be allowed editing (for simplicity).
64     function user_allowed_editing() {
65         if (isloggedin() && !isguest()) {
66             return true;
67         }
68         return false;
69     }
71     // Also, admins are considered to have "always on" editing (I wanted to avoid duplicating
72     // the code that turns editing on/off here; you can roll your own or copy course/view.php).
73     function user_is_editing() {
74          if (isloggedin() && !isguest()) {
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,online_users,blog_menu';
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;
166         $editformstring = '';        
167         if (isloggedin() && !isguest()) {
168             if (!empty($SESSION->blog_editing_enabled) && ($SESSION->blog_editing_enabled)) {
169                 $editingString = get_string('turneditingoff');
170             } else {
171                 $editingString = get_string('turneditingon');
172             }
173             $url = $this->url_get_full(); 
174             $editval = empty($SESSION->blog_editing_enabled) ? 1 : 0;
175             $editformstring = '<form target="'. $CFG->framename .'" method="get" action="'.$url.'/blog/index.php">'.
176                 '<input type="hidden" name="edit" value="'.$editval.'" />'.
177                 '<input type="submit" value="'. $editingString .'" /></form>';
178         }
180         return $editformstring;        
181     }    
183 ?>