65bf431ddec084159bf0c92a99c9f09f201637ff
[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:view', $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, $context);
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, $context);
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, $context) {
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)) {
159         if (delete_records('post', 'id', $postid)) {
160             //echo "bloginfo_arg:"; //debug
161             //print_object($bloginfo_arg); //debug
162             //echo "pid to delete:".$postid; //debug
163             delete_records('blog_tag_instance', 'entryid', $postid);
164             print '<strong>'. get_string('entrydeleted', 'blog') .'</strong><p>';
166             //record a log message of this entry deletion
167             if ($site = get_site()) {
168                 add_to_log($site->id, 'blog', 'delete', 'index.php?userid='. $blogEntry->userid, 'deleted blog entry with entry id# '. $postid);
169             }
170         }
171     }
172     else {
173         error(get_string('entryerrornotyours', 'blog'));
174     }
176     //comment out this redirect to debug the deletion of entries
178     redirect($CFG->wwwroot .'/blog/index.php?userid='. $blogEntry->userid);
181 /**
182 *  do_save
184 * @param object $post argument is a reference to the post object which is used to store information for the form
185 * @param object $bloginfo_arg argument is reference to a blogInfo object.
186 */
187 function do_save($post) {
188     global $USER, $CFG, $referrer;
189 //    echo 'Debug: Post object in do_save function of edit.php<br />'; //debug
190 //    print_object($post); //debug
192     if ($post->body == '') {
193         $post->error =  get_string('nomessagebodyerror', 'blog');
194     } else {
196         /// Write a blog entry into database
197         $blogEntry = new object;
198         $blogEntry->subject = addslashes($post->etitle);
199         $blogEntry->summary = addslashes($post->body);
200         $blogEntry->module = 'blog';
201         $blogEntry->userid = $USER->id;
202         $blogEntry->format = $post->format;
203         $blogEntry->publishstate = $post->publishstate;
204         $blogEntry->lastmodified = time();
205         $blogEntry->created = time();
207         // Insert the new blog entry.
208         $entryID = insert_record('post',$blogEntry);
210 //        print 'Debug: created a new entry - entryId = '.$entryID.'<br />'; //debug
211 //        echo 'Debug: do_save() in edit.php calling blog_do_*back_pings<br />'."\n"; //debug
212         if ($entryID) {
214             /// Creates a unique hash. I don't know what this is for (Yu)
215             $dataobject = new object;
216             $dataobject->uniquehash = md5($blogEntry->userid.$CFG->wwwroot.$entryID);
217             update_record('post', $dataobject);
219             /// Associate tags with entries
220             
221             $tag = NULL;
222             $tag->entryid = $entryID;
223             $tag->userid = $USER->id;
224             $tag->timemodified = time();
226             /// Add tags information
227             if ($otags = optional_param('otags','', PARAM_INT)) {
228                 foreach ($otags as $otag) {
229                     $tag->tagid = $otag;
230                     insert_record('blog_tag_instance',$tag);
231                 }
232             }
234             if ($ptags = optional_param('ptags','', PARAM_INT)) {
235                 foreach ($ptags as $ptag) {
236                     $tag->tagid = $ptag;
237                     insert_record('blog_tag_instance',$tag);
238                 }
239             }
241             print '<strong>'. get_string('entrysaved', 'blog') .'</strong><br />';
242         }
243         //record a log message of this entry addition
244         if ($site = get_site()) {
245             add_to_log($site->id, 'blog', 'add', 'index.php?userid='. $blogEntry->userid .'&postid='. $entryID, $blogEntry->subject);
246         }
247         
248         redirect($referrer);
249         /*
250         //to debug this save function comment out the following redirect code
251         if ($courseid == SITEID || $courseid == 0 || $courseid == '') {
252             redirect($CFG->wwwroot .'/blog/index.php?userid='. $blogEntry->userid);
253         } else {
254             redirect($CFG->wwwroot .'/course/view.php?id='. $courseid);
255         }*/
256     }
259 /**
260  * @param . $post argument is a reference to the post object which is used to store information for the form
261  * @param . $bloginfo_arg argument is reference to a blogInfo object.
262  * @todo complete documenting this function. enable trackback and pingback between entries on the same server
263  */
264 function do_update($post) {
265     // here post = data_submitted();
266     global $CFG, $USER, $referrer;
267     $blogEntry = get_record('post','id',$post->postid);
268 //  echo "id id ".$post->postid;
269 //  print_object($blogentry);  //debug
271     $blogEntry->subject = addslashes($post->etitle);
272     $blogEntry->summary = addslashes($post->body);
273     if ($blogEntry->summary == '<br />') {
274         $blogEntry->summary = '';
275     }
276     $blogEntry->format = $post->format;
277     $blogEntry->publishstate = $post->publishstate; //we don't care about the return value here
279     if ( update_record('post',$blogEntry)) {
280         delete_records('blog_tag_instance', 'entryid', $blogEntry->id);
282         $tag = NULL;
283         $tag->entryid = $blogEntry->id;
284         $tag->userid = $USER->id;
285         $tag->timemodified = time();
286         
287         /// Add tags information
288         if ($otags = optional_param('otags','', PARAM_INT)) {
289             foreach ($otags as $otag) {
290                 $tag->tagid = $otag;
291                 insert_record('blog_tag_instance',$tag);
292             }
293         }
295         if ($ptags = optional_param('ptags','', PARAM_INT)) {
296             foreach ($ptags as $ptag) {
297                 $tag->tagid = $ptag;
298                 insert_record('blog_tag_instance',$tag);
299             }
300         }
301         
302         // only do pings if the entry is published to the world
303         // Daryl Hawes note - eventually should check if it's on the same server
304         // and if so allow pb/tb as well - especially now that moderation is in place
305         print '<strong>'. get_string('entryupdated', 'blog') .'</strong><p>';
307         //record a log message of this entry update action
308         if ($site = get_site()) {
309             add_to_log($site->id, 'blog', 'update', 'index.php?userid='. $blogEntry->userid .'&postid='. $post->postid, $blogEntry->subject);
310         }
311         
312         redirect($referrer);
313         //to debug this save function comment out the following redirect code
314 /*
315         if ($courseid == SITEID || $courseid == 0 || $courseid == '') {
316             redirect($CFG->wwwroot .'/blog/index.php?userid='. $blogEntry->userid);
317         } else {
318             redirect($CFG->wwwroot .'/course/view.php?id='. $courseid);
319         }*/
320     } else {
321 //        get_string('', 'blog') //Daryl Hawes note: localize this line
322         $post->error =  'There was an error updating this post in the database';
323     }
325 ?>