" . POST_ANNOUNCE . " AND p.post_id = t.topic_last_post_id"; if ( $prune_date != "" ) { $sql .= " AND p.post_time < $prune_date"; } if ( !($result = $db->sql_query($sql)) ) { message_die(GENERAL_ERROR, "Couldn't obtain lists of topics to prune.", "", __LINE__, __FILE__, $sql); } $sql_topics = ""; while( $row = $db->sql_fetchrow($result) ) { $sql_topics .= ( ( $sql_topics != "" ) ? ", " : "" ) . $row['topic_id']; } if( $sql_topics != "" ) { $sql = "SELECT post_id FROM " . POSTS_TABLE . " WHERE forum_id = $forum_id AND topic_id IN ($sql_topics)"; if ( !($result = $db->sql_query($sql)) ) { message_die(GENERAL_ERROR, "Couldn't obtain list of posts to prune.", "", __LINE__, __FILE__, $sql); } $sql_post = ""; while ( $row = $db->sql_fetchrow($result) ) { $sql_post .= ( ( $sql_post != "" ) ? ", " : "" ) . $row['post_id']; } if ( $sql_post != "" ) { $sql = "DELETE FROM " . TOPICS_TABLE . " WHERE topic_id IN ($sql_topics)"; if ( !($result = $db->sql_query($sql, BEGIN_TRANSACTION)) ) { message_die(GENERAL_ERROR, "Couldn't delete topics during prune.", "", __LINE__, __FILE__, $sql); } $pruned_topics = $db->sql_affectedrows(); $sql = "DELETE FROM " . POSTS_TABLE . " WHERE post_id IN ($sql_post)"; if ( !($result = $db->sql_query($sql)) ) { message_die(GENERAL_ERROR, "Couldn't delete post_text during prune.", "", __LINE__, __FILE__, $sql); } $pruned_posts = $db->sql_affectedrows(); $sql = "DELETE FROM " . POSTS_TEXT_TABLE . " WHERE post_id IN ($sql_post)"; if ( !($result = $db->sql_query($sql)) ) { message_die(GENERAL_ERROR, "Couldn't delete post during prune.", "", __LINE__, __FILE__, $sql); } $sql = "DELETE FROM " . SEARCH_MATCH_TABLE . " WHERE post_id IN ($sql_post)"; if ( !($result = $db->sql_query($sql)) ) { message_die(GENERAL_ERROR, "Couldn't delete search matches", "", __LINE__, __FILE__, $sql); } remove_unmatched_words(); $sql = "UPDATE " . FORUMS_TABLE . " SET forum_topics = forum_topics - $pruned_topics, forum_posts = forum_posts - $pruned_posts WHERE forum_id = $forum_id"; if ( !($result = $db->sql_query($sql)) ) { message_die(GENERAL_ERROR, "Couldn't update forum data after prune.", "", __LINE__, __FILE__, $sql); } return array ("topics" => $pruned_topics, "posts" => $pruned_posts); } } return array("topics" => 0, "posts" => 0); } /***************************************************************************\ * * Function auto_prune(), this function will read the configuration data from * the auto_prune table and call the prune function with the necessary info. * ****************************************************************************/ function auto_prune($forum_id = 0) { global $db, $lang; $sql = "SELECT * FROM " . PRUNE_TABLE . " WHERE forum_id = $forum_id"; if ( !($result = $db->sql_query($sql)) ) { message_die(GENERAL_ERROR, "Auto-Prune: Couldn't read auto_prune table.", __LINE__, __FILE__); } if ( $row = $db->sql_fetchrow($result) ) { if ( $row['prune_freq'] && $row['prune_days'] ) { $prune_date = time() - ( $row['prune_days'] * 86400 ); prune($forum_id, $prune_date); $next_prune = time() + ( $row['prune_freq'] * 86400 ); $sql = "UPDATE " . FORUMS_TABLE . " SET prune_next = $next_prune WHERE forum_id = $forum_id"; if ( !$db->sql_query($sql) ) { message_die(GENERAL_ERROR, "Auto-Prune: Couldn't update forum table.", __LINE__, __FILE__); } } } return; } ?>