Edit post library | > Module written by Matt Mecham | > Date started: 19th February 2002 | | > Module Version Number: 1.0.0 +-------------------------------------------------------------------------- */ class post_functions extends Post { var $nav = array(); var $title = ""; var $post = array(); var $topic = array(); var $upload = array(); var $moderator = array( 'member_id' => 0, 'member_name' => "", 'edit_post' => 0 ); var $orig_post = array(); var $edit_title = 0; function post_functions($class) { global $ibforums, $std, $DB; //------------------------------------------------- // Lets load the topic from the database before we do anything else. //------------------------------------------------- $DB->query("SELECT * FROM ibf_topics WHERE tid=".intval($ibforums->input['t'])); $this->topic = $DB->fetch_row(); //------------------------------------------------- // Is it legitimate? //------------------------------------------------- if (! $this->topic['tid']) { $std->Error( array( LEVEL => 1, MSG => 'missing_files') ); } //------------------------------------------------- // Load the old post //------------------------------------------------- $DB->query("SELECT * FROM ibf_posts WHERE pid=".intval($ibforums->input['p'])); $this->orig_post = $DB->fetch_row(); if (! $this->orig_post['pid']) { $std->Error( array( LEVEL => 1, MSG => 'missing_files') ); } //------------------------------------------------- // Load the moderator //------------------------------------------------- if ($ibforums->member['id']) { $DB->query("SELECT member_id, member_name, mid, edit_post, edit_topic FROM ibf_moderators WHERE forum_id=".$class->forum['id']." AND (member_id=".$ibforums->member['id']." OR (is_group=1 AND group_id='".$ibforums->member['mgroup']."'))"); $this->moderator = $DB->fetch_row(); } //------------------------------------------------- // Lets do some tests to make sure that we are // allowed to edit this topic //------------------------------------------------- $can_edit = 0; if ($ibforums->member['g_is_supmod']) { $can_edit = 1; } if ($this->moderator['edit_post']) { $can_edit = 1; } if ( ($this->orig_post['author_id'] == $ibforums->member['id']) and ($ibforums->member['g_edit_posts']) ) { // Have we set a time limit? if ($ibforums->member['g_edit_cutoff'] > 0) { if ( $this->orig_post['post_date'] > ( time() - ( intval($ibforums->member['g_edit_cutoff']) * 60 ) ) ) { $can_edit = 1; } } else { $can_edit = 1; } } if ($can_edit != 1) { $std->Error( array( LEVEL => 1, MSG => 'not_op') ); } //----------------------------- // Is the topic locked? //----------------------------- if (($this->topic['state'] != 'open') and (!$ibforums->member['g_is_supmod'])) { if ($ibforums->member['g_post_closed'] != 1) { $std->Error( array( LEVEL => 1, MSG => 'locked_topic') ); } } //----------------------------- // // Do we have edit topic abilities? //----------------------------- if ( $this->orig_post['new_topic'] == 1 ) { if ($ibforums->member['g_is_supmod'] == 1) { $this->edit_title = 1; } else if ($this->moderator['edit_topic'] == 1) { if ( $ibforums->member['id'] == $this->topic['starter_id'] ) { $this->edit_title = 1; } } else if ($ibforums->member['g_edit_topic'] == 1 ) { $this->edit_title = 1; } } } function process($class) { global $ibforums, $std, $DB, $print; //------------------------------------------------- // Parse the post, and check for any errors. // overwrites saved post intentionally //------------------------------------------------- $this->post = $class->compile_post(); if ( ($class->obj['post_errors'] != "") or ($class->obj['preview_post'] != "") ) { // Show the form again $this->show_form($class); } else { $this->complete_edit($class); } } function complete_edit($class) { global $ibforums, $std, $DB, $print, $HTTP_POST_FILES; $time = $std->get_date( time(), 'LONG' ); //------------------------------------------------- // Reset some data //------------------------------------------------- // Do we have to adjust the attachments? if ($this->orig_post['attach_id']) { if ( isset($ibforums->input['editupload']) AND ($ibforums->input['editupload'] != 'keep') ) { // We're either uploading a new attachment, or deleting one, so lets // remove the old attachment first eh? if (is_file($ibforums->vars['upload_dir']."/".$this->orig_post['attach_id'])) { @unlink($ibforums->vars['upload_dir']."/".$this->orig_post['attach_id']); } if ($ibforums->input['editupload'] == 'new') { // w00t, we're uploading a new ..um.. upload $new_upload = $class->process_upload(); if ( $class->obj['post_errors'] != "") { $this->show_form($class); } $this->post['attach_id'] = $new_upload['attach_id']; $this->post['attach_type'] = $new_upload['attach_type']; $this->post['attach_hits'] = $new_upload['attach_hits']; $this->post['attach_file'] = $new_upload['attach_file']; } else if ($ibforums->input['editupload'] == 'delete') { // Simply remove the DB data as we've already removed the file $this->post['attach_id'] = ""; $this->post['attach_type'] = ""; $this->post['attach_hits'] = ""; $this->post['attach_file'] = ""; } } else { // We are keeping the old attachment $this->post['attach_id'] = $this->orig_post['attach_id']; $this->post['attach_type'] = $this->orig_post['attach_type']; $this->post['attach_hits'] = $this->orig_post['attach_hits']; $this->post['attach_file'] = $this->orig_post['attach_file']; } } else { // Is there a new attachment? $new_upload = $class->process_upload(); if ( $class->obj['post_errors'] != "") { $this->show_form($class); } if ( $new_upload['attach_id'] ) { $this->post['attach_id'] = $new_upload['attach_id']; $this->post['attach_type'] = $new_upload['attach_type']; $this->post['attach_hits'] = $new_upload['attach_hits']; $this->post['attach_file'] = $new_upload['attach_file']; } } $this->post['ip_address'] = $this->orig_post['ip_address']; $this->post['topic_id'] = $this->orig_post['topic_id']; $this->post['author_id'] = $this->orig_post['author_id']; $this->post['pid'] = $this->orig_post['pid']; $this->post['post_date'] = $this->orig_post['post_date']; $this->post['author_name'] = $this->orig_post['author_name']; $this->post['queued'] = $this->orig_post['queued']; $this->post['edit_time'] = time(); $this->post['edit_name'] = $ibforums->member['name']; //------------------------------------------------- // If the post icon has changed, update the topic post icon //------------------------------------------------- if ($this->orig_post['new_topic'] == 1) { if ($this->post['icon_id'] != $this->orig_post['icon_id']) { $DB->query("UPDATE ibf_topics SET icon_id='".$this->post['icon_id']."' WHERE tid=".$this->topic['tid']); } } //------------------------------------------------- // Update topic title? //------------------------------------------------- if ( $this->edit_title == 1 ) { if ($ibforums->vars['etfilter_punct']) { $ibforums->input['TopicTitle'] = preg_replace( "/\?{1,}/" , "?" , $ibforums->input['TopicTitle'] ); $ibforums->input['TopicTitle'] = preg_replace( "/(!){1,}/" , "!", $ibforums->input['TopicTitle'] ); } if ($ibforums->vars['etfilter_shout']) { $ibforums->input['TopicTitle'] = ucwords(strtolower($ibforums->input['TopicTitle'])); } $ibforums->input['TopicTitle'] = trim( $class->parser->bad_words( $ibforums->input['TopicTitle'] ) ); $ibforums->input['TopicDesc'] = trim( $class->parser->bad_words( $ibforums->input['TopicDesc'] ) ); if ( $ibforums->input['TopicTitle'] != "" ) { if ( ($ibforums->input['TopicTitle'] != $this->topic['title']) or ($ibforums->input['TopicDesc'] != $this->topic['description']) ) { $dbs = $DB->compile_db_update_string( array( 'title' => $ibforums->input['TopicTitle'], 'description' => $ibforums->input['TopicDesc'] ) ); $DB->query("UPDATE ibf_topics SET $dbs WHERE tid=".$this->topic['tid']); if ($this->topic['tid'] == $class->forum['last_id']) { $DB->query("UPDATE ibf_forums SET last_title='{$ibforums->input['TopicTitle']}' WHERE id='".$class->forum['id']."'"); } if ( ($this->moderator['edit_topic'] == 1) OR ( $ibforums->member['g_is_supmod'] == 1 ) ) { $db_string = $std->compile_db_string( array ( 'forum_id' => $class->forum['id'], 'topic_id' => $this->topic['tid'], 'post_id' => $this->post['pid'], 'member_id' => $ibforums->member['id'], 'member_name' => $ibforums->member['name'], 'ip_address' => $ibforums->input['IP_ADDRESS'], 'http_referer'=> $HTTP_REFERER, 'ctime' => time(), 'topic_title' => $this->topic['title'], 'action' => "Edited topic title or description '{$this->topic['title']}' to '{$ibforums->input['TopicTitle']}' via post form", 'query_string'=> $QUERY_STRING, ) ); $DB->query("INSERT INTO ibf_moderator_logs (" .$db_string['FIELD_NAMES']. ") VALUES (". $db_string['FIELD_VALUES'] .")"); } } } } //------------------------------------------------- // Update the database (ib_forum_post) //------------------------------------------------- $this->post['append_edit'] = 1; if ($ibforums->member['g_append_edit']) { if ($ibforums->input['add_edit'] != 1) { $this->post['append_edit'] = 0; } } $db_string = $DB->compile_db_update_string( $this->post ); $DB->query("UPDATE ibf_posts SET $db_string WHERE pid='".$this->post['pid']."'"); //------------------------------------------------- // Redirect them back to the topic //------------------------------------------------- $print->redirect_screen( $ibforums->lang['post_edited'], "act=ST&f={$class->forum['id']}&t={$this->topic['tid']}&st={$ibforums->input['st']}#entry{$this->post['pid']}"); } function show_form($class) { global $ibforums, $std, $DB, $print, $HTTP_POST_VARS; //------------------------------------------------- // Sort out the "raw" textarea input and make it safe incase // we have a