change in publish states
[moodle.git] / blog / edit.php
1 <?php //$Id$
3 require_once('../config.php');
4 include_once('lib.php');
5 include_once('class.BlogInfo.php');
6 require_login();
7 // detemine where the user is coming from in case we need to send them back there
8 if (isset($_SERVER['HTTP_REFERER'])) {
9     $referrer = $_SERVER['HTTP_REFERER'];
10 } else {
11     $referrer = $CFG->wwwroot;
12 }
14 //first verify that user is not a guest
15 if (isguest()) {
16     error(get_string('noguestpost', 'blog'), $referrer);
17 }
19 $userid = optional_param('userid', 0, PARAM_INT);
20 $editid = optional_param('editid', 0, PARAM_INT);
22 //check to see if there is a requested blog to edit
23 if (!empty($userid) && $userid != 0) {
24     if (blog_isLoggedIn() && $userid == $USER->id ) {
25         ; // Daryl Hawes note: is this a placeholder for missing functionality?
26     }
27 } else if ( blog_isLoggedIn() ) {
28     //the user is logged in and have not specified a blog - so they will be editing their own
29     $tempBlogInfo = blog_user_bloginfo();
30     $userid = $tempBlogInfo->userid;
31     unset($tempBlogInfo); //free memory from temp object - bloginfo will be created again in the included header
32 } else {
33     error(get_string('noblogspecified', 'blog') .'<a href="'. $CFG->blog_blogurl .'">' .get_string('viewentries', 'blog') .'</a>');
34 }
36 $pageNavigation = 'edit';
38 include($CFG->dirroot .'/blog/header.php');
40 //print_object($PAGE->bloginfo); //debug
42 //check if user is in blog's acl
43 if ( !blog_user_has_rights($PAGE->bloginfo) ) {
44     if ($editid != '') {
45         $blogEntry = $PAGE->bloginfo->get_blog_entry_by_id($editid);
46         if (! (isteacher($blogEntry->$entryCourseId)) ) {
47 //            error( get_string('notallowedtoedit'.' You do not teach in this course.', 'blog'), $CFG->wwwroot .'/login/index.php');
48             error( get_string('notallowedtoedit', 'blog'), $CFG->wwwroot .'/login/index.php');
49         }
50     } else {
51         error( get_string('notallowedtoedit', 'blog'), $CFG->wwwroot .'/login/index.php');
52     }
53 }
55 //////////// SECURITY AND SETUP COMPLETE - NOW PAGE LOGIC ///////////////////
57 if (isset($act) && $act == 'del' && confirm_sesskey())
58 {
59     $postid = required_param('postid', PARAM_INT);
60     if (optional_param('confirm',0,PARAM_INT)) {
61         do_delete($PAGE->bloginfo, $postid);
62     } else {
63     /// prints blog entry and what confirmation form
64         echo '<div align="center"><form method="GET" action="edit.php">';
65         echo '<input type="hidden" name="act" value="del" />';
66         echo '<input type="hidden" name="confirm" value="1" />';
67         echo '<input type="hidden" name="postid" value="'.$postid.'" />';
68         echo '<input type="hidden" name="sesskey" value="'.sesskey().'" />';
69         print_string('blogdeleteconfirm', 'blog');
70         
71         $post = get_record('post', 'id', $postid);
72         $entry = new BlogEntry($post);
73         blog_print_entry($entry);
74         echo '<br />';
75         echo '<input type="submit" value="'.get_string('delete').'" /> ';
76         echo ' <input type="button" value="'.get_string('cancel').'" onclick="javascript:history.go(-1)" />';
77         echo '</form></div>';
78         print_footer($course);
79         die;
80     }
81 }
82 if ($usehtmleditor = can_use_richtext_editor()) {
83     $defaultformat = FORMAT_HTML;
84     $onsubmit = '';
85 } else {
86     $defaultformat = FORMAT_MOODLE;
87     $onsubmit = '';
88 }
90 if (($post = data_submitted( get_referer() )) && confirm_sesskey()) {
91     if (!empty($post->editform)) { //make sure we're processing the edit form here
92         //print_object($post); //debug
94         ///these varaibles needs to be changed because of the javascript hack
95         ///post->courseid
96         ///post->groupid
97         $post->courseid = $post->realcourse;   //might not need either, if javascript re-written
98         $post->groupid = $post->realgroup;   //might not need
99         $courseid = $post->realcourse;
100         //end of yu's code
101         
102         if (!$post->etitle or !$post->body) {
103             $post->error = get_string('emptymessage', 'forum');
104         }
105         if ($post->act == 'save') {
106             do_save($post, $PAGE->bloginfo);
107         } else if ($post->act == 'update') {
108             do_update($post, $PAGE->bloginfo);
109         } else if ($post->act == 'del') {
110             require_variable($postid);
111             do_delete($PAGE->bloginfo, $postid);
112         }
113     }
114 } else {
116     //no post data yet, so load up the post array with default information
117     $post->etitle = '';
118     $post->userid = $USER->id;
119     $post->body = '';
120     $post->format = $defaultformat;
121     $post->categoryid = array(1);
122     $post->publishstate = 'draft';
123     $post->courseid  = $courseid;
127 if ($editid != '') {  // User is editing a post
128     // ensure that editing is allowed first - admin users can edit any posts
130     $blogEntry = $PAGE->bloginfo->get_blog_entry_by_id($editid);
132     //using an unformatted entry body here so that extra formatting information is not stored in the db
133     $post->body = $blogEntry->get_unformatted_entry_body();
134     $post->etitle = $blogEntry->entryTitle;    
135     $post->postid = $editid;
136     $post->userid = $PAGE->bloginfo->userid;
137     $post->categoryid = $blogEntry->entryCategoryIds;
138     $post->format = $blogEntry->entryFormat;
139     $post->publishstate = $blogEntry->entryPublishState;
142 if (isset($post->postid) && ($post->postid != -1) ) {
144     $formHeading = get_string('updateentrywithid', 'blog');
146 } else {
147     $formHeading = get_string('addnewentry', 'blog');
150 if (isset($post->error)) {
151     notify($post->error);
154 print_simple_box_start("center");
155 require('edit.html');
156 print_simple_box_end();
158     // Janne comment: Let's move this in here
159     // so IE gets more time to load the
160     // Page.
161     if ($usehtmleditor) {
162         // Janne comment: there are two text fields in form
163         // so lets try to replace them both with
164         // HTMLArea editors
165         use_html_editor();
166     }
168 include($CFG->dirroot .'/blog/footer.php');
171 /*****************************   edit.php functions  ***************************/
172 /*
173 * do_delete
174 * takes $bloginfo_arg argument as reference to a blogInfo object.
175 * also takes the postid - the id of the entry to be removed
176 */
177 function do_delete(&$bloginfo_arg, $postid) {
178     global $CFG;
179     // make sure this user is authorized to delete this entry.
180     // cannot use $post->pid because it may not have been initialized yet. Also the pid may be in get format rather than post.
181     if ($bloginfo_arg->delete_blog_entry_by_id($postid)) {
182         //echo "bloginfo_arg:"; //debug
183         print_object($bloginfo_arg); //debug
184         //echo "pid to delete:".$postid; //debug
185         delete_records('blog_tag_instance', 'entryid', $postid);
186         print '<strong>'. get_string('entrydeleted', 'blog') .'</strong><p>';
188         //record a log message of this entry deletion
189         if ($site = get_site()) {
190             add_to_log($site->id, 'blog', 'delete', 'index.php?userid='. $bloginfo_arg->userid, 'deleted blog entry with entry id# '. $postid);
191         }
192     } else {
193         error(get_string('entryerrornotyours', 'blog'));
194     }
196     //comment out this redirect to debug the deletion of entries
197     redirect($CFG->wwwroot .'/blog/index.php?userid='. $bloginfo_arg->userid);
200 /**
201 *  do_save
203 * @param object $post argument is a reference to the post object which is used to store information for the form
204 * @param object $bloginfo_arg argument is reference to a blogInfo object.
205 */
206 function do_save(&$post, &$bloginfo_arg) {
207     global $USER, $CFG;
208 //    echo 'Debug: Post object in do_save function of edit.php<br />'; //debug
209 //    print_object($post); //debug
211     if ($post->body == '') {
212         $post->error =  get_string('nomessagebodyerror', 'blog');
213     } else {
215         // Insert the new blog entry.
216         $entryID = $bloginfo_arg->insert_blog_entry($post->etitle, $post->body, $USER->id, $post->format, $post->publishstate, $courseid, $groupid);
218 //        print 'Debug: created a new entry - entryId = '.$entryID.'<br />'; //debug
219 //        echo 'Debug: do_save() in edit.php calling blog_do_*back_pings<br />'."\n"; //debug
220         $otags = optional_param('otags','', PARAM_INT);
221         $ptags = optional_param('ptags','', PARAM_INT);
223         /// Add tags information
224         foreach ($otags as $otag) {
225             $tag->entryid = $entryID;
226             $tag->tagid = $otag;
227             $tag->groupid = $groupid;
228             $tag->courseid = $courseid;
229             $tag->userid = $USER->id;
231             insert_record('blog_tag_instance',$tag);
232         }
233         
234         foreach ($ptags as $ptag) {
235             $tag->entryid = $entryID;
236             $tag->tagid = $ptag;
237             $tag->groupid = $groupid;
238             $tag->courseid = $courseid;
239             $tag->userid = $USER->id;
241             insert_record('blog_tag_instance',$tag);
242         }
244         print '<strong>'. get_string('entrysaved', 'blog') .'</strong><br />';
245         //record a log message of this entry addition
246         if ($site = get_site()) {
247             add_to_log($site->id, 'blog', 'add', 'archive.php?userid='. $bloginfo_arg->userid .'&postid='. $entryID, 'created new blog entry with entry id# '. $entryID);
248         }
249         //to debug this save function comment out the following redirect code
250         if ($courseid == SITEID || $courseid == 0 || $courseid == '') {
251             redirect($CFG->wwwroot .'/blog/index.php?userid='. $bloginfo_arg->userid);
252         } else {
253             redirect($CFG->wwwroot .'/course/view.php?id='. $courseid);
254         }
255     }
258 /**
259  * @param . $post argument is a reference to the post object which is used to store information for the form
260  * @param . $bloginfo_arg argument is reference to a blogInfo object.
261  * @todo complete documenting this function. enable trackback and pingback between entries on the same server
262  */
263 function do_update(&$post, &$bloginfo) {
265     global $CFG, $USER;
266     
267     $blogentry = $bloginfo->get_blog_entry_by_id($post->postid);
268     echo "id id ".$post->postid;
269 //  print_object($blogentry);  //debug
271     $blogentry->set_body($post->body);
272     $blogentry->set_format($post->format);
273     $blogentry->set_publishstate($post->publishstate); //we don't care about the return value here
275     if ( !$error = $blogentry->save() ) {
276 //        echo 'Debug: do_update in edit.php calling do_pings<br />'."\n"; //debug
277         delete_records('blog_tag_instance', 'entryid', $blogentry->entryId);
279         $otags = optional_param('otags','', PARAM_INT);
280         $ptags = optional_param('ptags','', PARAM_INT);
281         /// Add tags information
282         foreach ($otags as $otag) {
283             $tag->entryid = $blogentry->entryId;
284             $tag->tagid = $otag;
285             $tag->groupid = $groupid;
286             $tag->courseid = $courseid;
287             $tag->userid = $USER->id;
289             insert_record('blog_tag_instance',$tag);
290         }
292         foreach ($ptags as $ptag) {
293             $tag->entryid = $blogentry->entryId;
294             $tag->tagid = $ptag;
295             $tag->groupid = $groupid;
296             $tag->courseid = $courseid;
297             $tag->userid = $USER->id;
299             insert_record('blog_tag_instance',$tag);
300         }
301         // only do pings if the entry is published to the world
302         // Daryl Hawes note - eventually should check if it's on the same server
303         // and if so allow pb/tb as well - especially now that moderation is in place
304         print '<strong>'. get_string('entryupdated', 'blog') .'</strong><p>';
306         //record a log message of this entry update action
307         if ($site = get_site()) {
308             add_to_log($site->id, 'blog', 'update', 'archive.php?userid='. $bloginfo->userid .'&postid='. $post->postid, 'updated existing blog entry with entry id# '. $post->postid);
309         }
311         redirect($CFG->wwwroot .'/blog/index.php?userid='. $bloginfo->userid);
312     } else {
313 //        get_string('', 'blog') //Daryl Hawes note: localize this line
314         $post->error =  'There was an error updating this post in the database: '. $error;
315     }
317 ?>