93355f76b11f87a3e05ba2d5861150738dfa377a
[moodle.git] / blog / edit.php
1 <?php //$Id$
3 require_once('../config.php');
4 include_once('lib.php');
5 require_login();
7 $courseid = optional_param('courseid', SITEID, PARAM_INT);
8 $act = optional_param('act','',PARAM_ALPHA);
10 // detemine where the user is coming from in case we need to send them back there
11 if (!$referrer = optional_param('referrer','', PARAM_URL)) {
12     if (isset($_SERVER['HTTP_REFERER'])) {
13         $referrer = $_SERVER['HTTP_REFERER'];
14     } else {
15         $referrer = $CFG->wwwroot;
16     }
17 }
20 $context = get_context_instance(CONTEXT_SYSTEM, SITEID);
21 if (!has_capability('moodle/blog:readentries', $context)) {
22     error(get_string('nopost', 'blog'), $referrer);
23 }
26 // Make sure that the person trying to edit have access right
27 if ($editid = optional_param('editid', 0, PARAM_INT)) {
29     $blogEntry = get_record('post', 'id', $editid);
31     if (!blog_user_can_edit_post($blogEntry, $context)) {
32         error( get_string('notallowedtoedit', 'blog'), $CFG->wwwroot .'/login/index.php');
33     }
34 }
36 // Check to see if there is a requested blog to edit
37 if (isloggedin() && !isguest()) {
38     $userid = $USER->id;
39 } else {
40     error(get_string('noblogspecified', 'blog') .'<a href="'. $CFG->blog_blogurl .'">' .get_string('viewentries', 'blog') .'</a>');
41 }
43 // If we are trying to delete an non-existing blog entry
44 if (isset($act) && ($act == 'del') && (empty($blogEntry))) {
45     error ('the entry you are trying to delete does not exist');
46 }
49 $pageNavigation = 'edit';
50 include($CFG->dirroot .'/blog/header.php');
52 //////////// SECURITY AND SETUP COMPLETE - NOW PAGE LOGIC ///////////////////
54 if (isset($act) && ($act == 'del') && confirm_sesskey())
55 {
56     $postid = required_param('editid', PARAM_INT);
57     if (optional_param('confirm',0,PARAM_INT)) {
58         do_delete($postid);
59     } else {
61     /// prints blog entry and what confirmation form
62         echo '<div align="center"><form method="GET" action="edit.php">';
63         echo '<input type="hidden" name="act" value="del" />';
64         echo '<input type="hidden" name="confirm" value="1" />';
65         echo '<input type="hidden" name="editid" value="'.$postid.'" />';
66         echo '<input type="hidden" name="sesskey" value="'.sesskey().'" />';
68         print_string('blogdeleteconfirm', 'blog');
69         blog_print_entry($blogEntry);
71         echo '<br />';
72         echo '<input type="submit" value="'.get_string('delete').'" /> ';
73         echo ' <input type="button" value="'.get_string('cancel').'" onclick="javascript:history.go(-1)" />';
74         echo '</form></div>';
75         print_footer($course);
76         exit;
77     }
78 }
80 if ($usehtmleditor = can_use_richtext_editor()) {
81     $defaultformat = FORMAT_HTML;
82     $onsubmit = '';
83 } else {
84     $defaultformat = FORMAT_MOODLE;
85     $onsubmit = '';
86 }
88 if (($post = data_submitted( get_referer() )) && confirm_sesskey()) {
89     if (!empty($post->editform)) { //make sure we're processing the edit form here
90         //print_object($post); //debug
92         if (!$post->etitle or !$post->body) {
93             $post->error = get_string('emptymessage', 'forum');
94         }
95         if ($post->act == 'save') {
96             do_save($post);
97         } else if ($post->act == 'update') {
98             do_update($post);
99         } else if ($post->act == 'del') {
100             $postid = required_param('postid', PARAM_INT);
101             do_delete($postid);
102         }
103     }
104 } else {
106     //no post data yet, so load up the post array with default information
107     $post->etitle = '';
108     $post->userid = $USER->id;
109     $post->body = '';
110     $post->format = $defaultformat;
111     $post->publishstate = 'draft';
114 if ($editid) {  // User is editing a post
115     // ensure that editing is allowed first - admin users can edit any posts
117     $blogEntry = get_record('post','id',$editid);
119     //using an unformatted entry body here so that extra formatting information is not stored in the db
120     $post->body = stripslashes_safe($blogEntry->summary);
121     $post->etitle = stripslashes_safe($blogEntry->subject);
122     $post->postid = $editid;
123     $post->userid = $blogEntry->userid;
124     $post->format = $blogEntry->format;
125     $post->publishstate = $blogEntry->publishstate;
128 if (isset($post->postid) && ($post->postid != -1) ) {
129     $formHeading = get_string('updateentrywithid', 'blog');
130 } else {
131     $formHeading = get_string('addnewentry', 'blog');
134 if (isset($post->error)) {
135     notify($post->error);
138 print_simple_box_start("center");
139 require('edit.html');
140 print_simple_box_end();
142 include($CFG->dirroot .'/blog/footer.php');
145 /*****************************   edit.php functions  ***************************/
146 /*
147 * do_delete
148 * takes $bloginfo_arg argument as reference to a blogInfo object.
149 * also takes the postid - the id of the entry to be removed
150 */
151 function do_delete($postid) {
152     global $CFG, $USER, $referrer;
153     // make sure this user is authorized to delete this entry.
154     // cannot use $post->pid because it may not have been initialized yet. Also the pid may be in get format rather than post.
155     // check ownership
156     $blogEntry = get_record('post','id',$postid);
158     if (blog_user_can_edit_post($blogEntry, $context->id)) {          /// XXX TODO
159         
160         if (delete_records('post','id',$postid)) {
161             //echo "bloginfo_arg:"; //debug
162             //print_object($bloginfo_arg); //debug
163             //echo "pid to delete:".$postid; //debug
164             delete_records('blog_tag_instance', 'entryid', $postid);
165             print '<strong>'. get_string('entrydeleted', 'blog') .'</strong><p>';
167             //record a log message of this entry deletion
168             if ($site = get_site()) {
169                 add_to_log($site->id, 'blog', 'delete', 'index.php?userid='. $blogEntry->userid, 'deleted blog entry with entry id# '. $postid);
170             }
171         }
172     }
173     else {
174         error(get_string('entryerrornotyours', 'blog'));
175     }
177     //comment out this redirect to debug the deletion of entries
179     redirect($CFG->wwwroot .'/blog/index.php?userid='. $blogEntry->userid);
182 /**
183 *  do_save
185 * @param object $post argument is a reference to the post object which is used to store information for the form
186 * @param object $bloginfo_arg argument is reference to a blogInfo object.
187 */
188 function do_save($post) {
189     global $USER, $CFG, $referrer;
190 //    echo 'Debug: Post object in do_save function of edit.php<br />'; //debug
191 //    print_object($post); //debug
193     if ($post->body == '') {
194         $post->error =  get_string('nomessagebodyerror', 'blog');
195     } else {
197         /// Write a blog entry into database
198         $blogEntry = new object;
199         $blogEntry->subject = addslashes($post->etitle);
200         $blogEntry->summary = addslashes($post->body);
201         $blogEntry->module = 'blog';
202         $blogEntry->userid = $USER->id;
203         $blogEntry->format = $post->format;
204         $blogEntry->publishstate = $post->publishstate;
205         $blogEntry->lastmodified = time();
206         $blogEntry->created = time();
208         // Insert the new blog entry.
209         $entryID = insert_record('post',$blogEntry);
211 //        print 'Debug: created a new entry - entryId = '.$entryID.'<br />'; //debug
212 //        echo 'Debug: do_save() in edit.php calling blog_do_*back_pings<br />'."\n"; //debug
213         if ($entryID) {
215             /// Creates a unique hash. I don't know what this is for (Yu)
216             $dataobject = new object;
217             $dataobject->uniquehash = md5($blogEntry->userid.$CFG->wwwroot.$entryID);
218             update_record('post', $dataobject);
220             /// Associate tags with entries
221             
222             $tag = NULL;
223             $tag->entryid = $entryID;
224             $tag->userid = $USER->id;
225             $tag->timemodified = time();
227             /// Add tags information
228             if ($otags = optional_param('otags','', PARAM_INT)) {
229                 foreach ($otags as $otag) {
230                     $tag->tagid = $otag;
231                     insert_record('blog_tag_instance',$tag);
232                 }
233             }
235             if ($ptags = optional_param('ptags','', PARAM_INT)) {
236                 foreach ($ptags as $ptag) {
237                     $tag->tagid = $ptag;
238                     insert_record('blog_tag_instance',$tag);
239                 }
240             }
242             print '<strong>'. get_string('entrysaved', 'blog') .'</strong><br />';
243         }
244         //record a log message of this entry addition
245         if ($site = get_site()) {
246             add_to_log($site->id, 'blog', 'add', 'index.php?userid='. $blogEntry->userid .'&postid='. $entryID, $blogEntry->subject);
247         }
248         
249         redirect($referrer);
250         /*
251         //to debug this save function comment out the following redirect code
252         if ($courseid == SITEID || $courseid == 0 || $courseid == '') {
253             redirect($CFG->wwwroot .'/blog/index.php?userid='. $blogEntry->userid);
254         } else {
255             redirect($CFG->wwwroot .'/course/view.php?id='. $courseid);
256         }*/
257     }
260 /**
261  * @param . $post argument is a reference to the post object which is used to store information for the form
262  * @param . $bloginfo_arg argument is reference to a blogInfo object.
263  * @todo complete documenting this function. enable trackback and pingback between entries on the same server
264  */
265 function do_update($post) {
266     // here post = data_submitted();
267     global $CFG, $USER, $referrer;
268     $blogEntry = get_record('post','id',$post->postid);
269 //  echo "id id ".$post->postid;
270 //  print_object($blogentry);  //debug
272     $blogEntry->subject = addslashes($post->etitle);
273     $blogEntry->summary = addslashes($post->body);
274     if ($blogEntry->summary == '<br />') {
275         $blogEntry->summary = '';
276     }
277     $blogEntry->format = $post->format;
278     $blogEntry->publishstate = $post->publishstate; //we don't care about the return value here
280     if ( update_record('post',$blogEntry)) {
281         delete_records('blog_tag_instance', 'entryid', $blogEntry->id);
283         $tag = NULL;
284         $tag->entryid = $blogEntry->id;
285         $tag->userid = $USER->id;
286         $tag->timemodified = time();
287         
288         /// Add tags information
289         if ($otags = optional_param('otags','', PARAM_INT)) {
290             foreach ($otags as $otag) {
291                 $tag->tagid = $otag;
292                 insert_record('blog_tag_instance',$tag);
293             }
294         }
296         if ($ptags = optional_param('ptags','', PARAM_INT)) {
297             foreach ($ptags as $ptag) {
298                 $tag->tagid = $ptag;
299                 insert_record('blog_tag_instance',$tag);
300             }
301         }
302         
303         // only do pings if the entry is published to the world
304         // Daryl Hawes note - eventually should check if it's on the same server
305         // and if so allow pb/tb as well - especially now that moderation is in place
306         print '<strong>'. get_string('entryupdated', 'blog') .'</strong><p>';
308         //record a log message of this entry update action
309         if ($site = get_site()) {
310             add_to_log($site->id, 'blog', 'update', 'index.php?userid='. $blogEntry->userid .'&postid='. $post->postid, $blogEntry->subject);
311         }
312         
313         redirect($referrer);
314         //to debug this save function comment out the following redirect code
315 /*
316         if ($courseid == SITEID || $courseid == 0 || $courseid == '') {
317             redirect($CFG->wwwroot .'/blog/index.php?userid='. $blogEntry->userid);
318         } else {
319             redirect($CFG->wwwroot .'/course/view.php?id='. $courseid);
320         }*/
321     } else {
322 //        get_string('', 'blog') //Daryl Hawes note: localize this line
323         $post->error =  'There was an error updating this post in the database';
324     }
326 ?>