/**
  * Empty a forum
  *
  * @access	public
  * @return	void		Outputs to screen
  **/
 public function doEmpty()
 {
     /* INI */
     $this->request['f'] = intval($this->request['f']);
     //-----------------------------------------
     // Get module
     //-----------------------------------------
     require_once IPSLib::getAppDir('forums') . '/sources/classes/moderate.php';
     $modfunc = new moderatorLibrary($this->registry);
     if ($this->request['f'] == "") {
         $this->registry->output->showError($this->lang->words['for_noid_source'], 1139);
     }
     //-----------------------------------------
     // Check to make sure its a valid forum.
     //-----------------------------------------
     $this->DB->build(array('select' => 'id, posts, topics', 'from' => 'forums', 'where' => "id=" . $this->request['f']));
     $this->DB->execute();
     if (!($forum = $this->DB->fetch())) {
         $this->registry->output->showError($this->lang->words['for_nodetails'], 11310);
     }
     $this->DB->build(array('select' => 'tid', 'from' => 'topics', 'where' => "forum_id=" . $this->request['f']));
     $outer = $this->DB->execute();
     //-----------------------------------------
     // What to do..
     //-----------------------------------------
     while ($t = $this->DB->fetch($outer)) {
         $modfunc->topicDelete($t['tid']);
     }
     //-----------------------------------------
     // Rebuild stats
     //-----------------------------------------
     $modfunc->forumRecount($this->request['f']);
     $modfunc->statsRecount();
     //-----------------------------------------
     // Rebuild forum cache
     //-----------------------------------------
     $this->recacheForums();
     $this->registry->adminFunctions->saveAdminLog(sprintf($this->lang->words['for_emptiedlog'], $this->request['name']));
     $this->request['f'] = $this->forum_functions->forum_by_id[$this->request['f']]['parent_id'];
     $this->registry->output->global_message = $this->lang->words['for_emptied'];
     $this->showForums();
 }
 /**
  * Delete a member's posts [process]
  *
  * @access	private
  * @return	void		[Outputs to screen]
  */
 private function _deletePostsDo()
 {
     //-----------------------------------------
     // INIT
     //-----------------------------------------
     $member_id = intval($this->request['member_id']);
     $delete_posts = intval($this->request['dposts']);
     $delete_topics = intval($this->request['dtopics']);
     $end = intval($this->request['dpergo']) ? intval($this->request['dpergo']) : 50;
     $init = intval($this->request['init']);
     $done = 0;
     $start = intval($this->request['st']) >= 0 ? intval($this->request['st']) : 0;
     $forums_affected = array();
     $topics_affected = array();
     $img = '<img src="' . $this->settings['skin_acp_url'] . '/images/aff_tick_small.png" border="0" alt="-" /> ';
     $posts_deleted = 0;
     $topics_deleted = 0;
     //--------------------------------------------
     // NOT INIT YET?
     //--------------------------------------------
     if (!$init) {
         $url = $this->settings['base_url'] . '&' . $this->form_code_js . "&do=deleteposts_process&dpergo=" . $this->request['dpergo'] . "&st=0" . "&init=1" . "&dposts={$delete_posts}" . "&dtopics={$delete_topics}" . "&use_trash_can=" . intval($this->request['use_trash_can']) . "&member_id={$member_id}";
         $this->registry->output->multipleRedirectInit($url);
     }
     //--------------------------------------------
     // Not loaded the func?
     //--------------------------------------------
     if (!is_object($mod_func)) {
         require_once IPS_ROOT_PATH . 'sources/classes/itemmarking/classItemMarking.php';
         $this->registry->setClass('classItemMarking', new classItemMarking($this->registry));
         require_once IPSLib::getAppDir('forums') . '/sources/classes/moderate.php';
         $mod_func = new moderatorLibrary($this->registry);
     }
     //-----------------------------------------
     // Trash-can set up
     //-----------------------------------------
     $trash_append = '';
     if ($this->settings['forum_trash_can_enable'] and $this->settings['forum_trash_can_id']) {
         if ($this->registry->class_forums->forum_by_id[$this->settings['forum_trash_can_id']]['sub_can_post']) {
             if ($this->request['use_trash_can']) {
                 $this->trash_forum = $this->settings['forum_trash_can_id'];
                 $trash_append = " AND forum_id<>{$this->trash_forum}";
             }
         }
     }
     //-----------------------------------------
     // Get member
     //-----------------------------------------
     $member = IPSMember::load($member_id, 'core');
     //-----------------------------------------
     // Avoid limit...
     //-----------------------------------------
     $this->DB->build(array('select' => 'p.*', 'from' => array('posts' => 'p'), 'where' => "p.author_id={$member_id}{$trash_append}", 'order' => 'p.pid ASC', 'limit' => array($start, $end), 'add_join' => array(array('select' => 't.*', 'from' => array('topics' => 't'), 'where' => 't.tid=p.topic_id', 'type' => 'left'))));
     $outer = $this->DB->execute();
     //-----------------------------------------
     // Process...
     //-----------------------------------------
     while ($r = $this->DB->fetch($outer)) {
         //-----------------------------------------
         // Copy record to topic array
         //-----------------------------------------
         $topic = $r;
         //-----------------------------------------
         // No longer a topic?
         //-----------------------------------------
         if (!$topic['tid']) {
             continue;
         }
         $done++;
         //-----------------------------------------
         // Get number of MID posters
         //-----------------------------------------
         $topic_i_posted = $this->DB->buildAndFetch(array('select' => 'COUNT(*) as count', 'from' => 'posts', 'where' => 'author_id=' . $member_id . ' AND topic_id=' . $r['topic_id']));
         //-----------------------------------------
         // Aready deleted this topic?
         //-----------------------------------------
         if (!$topic_i_posted['count']) {
             continue;
         }
         //-----------------------------------------
         // First check: Our topic and no other replies?
         //-----------------------------------------
         if ($topic['starter_id'] == $member_id and $topic_i_posted['count'] == $topic['posts'] + 1) {
             //-----------------------------------------
             // Ok, deleting topics or posts?
             //-----------------------------------------
             if (($delete_posts or $delete_topics) and ($this->trash_forum and $this->trash_forum != $topic['forum_id'])) {
                 //-----------------------------------------
                 // Move, don't delete
                 //-----------------------------------------
                 $mod_func->topicMove($r['topic_id'], $topic['forum_id'], $this->trash_forum);
                 $forums_affected[$topic['forum_id']] = $topic['forum_id'];
                 $forums_affected[$this->trash_forum] = $this->trash_forum;
                 $topics_deleted++;
                 $posts_deleted += $topic_i_posted['count'];
             } else {
                 if ($delete_posts or $delete_topics) {
                     $this->DB->delete('posts', 'author_id=' . $member_id . ' AND topic_id=' . $r['topic_id']);
                     $this->DB->delete('topics', 'tid=' . $r['topic_id']);
                     $forums_affected[$topic['forum_id']] = $topic['forum_id'];
                     $topics_deleted++;
                     $posts_deleted += $topic_i_posted['count'];
                 }
             }
         } else {
             if ($topic['starter_id'] == $member_id and $delete_topics) {
                 if ($this->trash_forum and $this->trash_forum != $topic['forum_id']) {
                     //-----------------------------------------
                     // Move, don't delete
                     //-----------------------------------------
                     $mod_func->topicMove($r['topic_id'], $topic['forum_id'], $this->trash_forum);
                     $forums_affected[$topic['forum_id']] = $topic['forum_id'];
                     $forums_affected[$this->trash_forum] = $this->trash_forum;
                     $topics_deleted++;
                     $posts_deleted += $topic_i_posted['count'];
                 } else {
                     $this->DB->delete('posts', 'topic_id=' . $r['topic_id']);
                     $this->DB->delete('topics', 'tid=' . $r['topic_id']);
                     $forums_affected[$topic['forum_id']] = $topic['forum_id'];
                     $topics_deleted++;
                     $posts_deleted += $topic['posts'] + 1;
                 }
             } else {
                 if ($delete_posts and !$r['new_topic']) {
                     if ($this->trash_forum and $this->trash_forum != $topic['forum_id']) {
                         //-----------------------------------------
                         // Set up and pass to split topic handler
                         //-----------------------------------------
                         $new_title = $this->lang->words['acp_posts_deleted_from'] . $topic['title'];
                         $new_desc = $this->lang->words['acp_posts_deleted_from_tid'] . $topic['tid'];
                         //-----------------------------------------
                         // Is first post queued?
                         //-----------------------------------------
                         $topic_approved = 1;
                         $first_post = $this->DB->buildAndFetch(array('select' => 'pid, queued', 'from' => 'posts', 'where' => "pid=" . $r['pid']));
                         if ($first_post['queued']) {
                             $topic_approved = 0;
                             $this->DB->update('posts', array('queued' => 0), 'pid=' . $first_post['pid']);
                         }
                         //-----------------------------------------
                         // Complete a new dummy topic
                         //-----------------------------------------
                         $this->DB->insert('topics', array('title' => $new_title, 'description' => $new_desc, 'state' => 'open', 'posts' => 0, 'starter_id' => $member_id, 'starter_name' => $member['members_display_name'], 'start_date' => time(), 'last_poster_id' => $member_id, 'last_poster_name' => $member['members_display_name'], 'last_post' => time(), 'icon_id' => 0, 'author_mode' => 1, 'poll_state' => 0, 'last_vote' => 0, 'views' => 0, 'forum_id' => $this->trash_forum, 'approved' => $topic_approved, 'pinned' => 0));
                         $new_topic_id = $this->DB->getInsertId();
                         //-----------------------------------------
                         // Move the posts
                         //-----------------------------------------
                         $this->DB->update('posts', array('topic_id' => $new_topic_id, 'new_topic' => 0, 'queued' => 0), "pid={$r['pid']}");
                         $this->DB->update('posts', array('new_topic' => 0), "topic_id={$topic['tid']}");
                         $forums_affected[$topic['forum_id']] = $topic['forum_id'];
                         $forums_affected[$this->trash_forum] = $this->trash_forum;
                         $topics_affected[$topic['tid']] = $topic['tid'];
                         $topics_affected[$new_topic_id] = $new_topic_id;
                         $posts_deleted++;
                     } else {
                         $this->DB->delete('posts', 'pid=' . $r['pid']);
                         $forums_affected[$topic['forum_id']] = $topic['forum_id'];
                         $topics_affected[$topic['tid']] = $topic['tid'];
                         $posts_deleted++;
                     }
                 }
             }
         }
     }
     //-----------------------------------------
     // Rebuild topics and forums
     //-----------------------------------------
     if (count($topics_affected)) {
         foreach ($topics_affected as $tid) {
             $mod_func->rebuildTopic($tid, 0);
         }
     }
     if (count($forums_affected)) {
         foreach ($forums_affected as $fid) {
             $mod_func->forumRecount($fid);
         }
     }
     //-----------------------------------------
     // Finish - or more?...
     //-----------------------------------------
     if (!$done) {
         //-----------------------------------------
         // Recount stats..
         //-----------------------------------------
         $mod_func->statsRecount();
         //-----------------------------------------
         // Reset member's posts
         //-----------------------------------------
         $forums = array();
         foreach ($this->registry->class_forums->forum_by_id as $data) {
             if (!$data['inc_postcount']) {
                 $forums[] = $data['id'];
             }
         }
         if (!count($forums)) {
             $count = $this->DB->buildAndFetch(array('select' => 'count(*) as count', 'from' => 'posts', 'where' => 'queued != 1 AND author_id=' . $member_id));
         } else {
             $count = $this->DB->buildAndFetch(array('select' => 'count(p.pid) as count', 'from' => array('posts' => 'p'), 'where' => 'p.queued <> 1 AND p.author_id=' . $member_id . ' AND t.forum_id NOT IN (' . implode(",", $forums) . ')', 'add_join' => array(array('type' => 'left', 'from' => array('topics' => 't'), 'where' => 't.tid=p.topic_id'))));
         }
         $new_post_count = intval($count['count']);
         $this->registry->adminFunctions->saveAdminLog(sprintf($this->lang->words['member_posts_deleted'], $member['members_display_name']));
         IPSMember::save($member_id, array('core' => array('posts' => $new_post_count)));
         $this->registry->output->multipleRedirectFinish($this->lang->words['mem_posts_process_done']);
     } else {
         //-----------------------------------------
         // More..
         //-----------------------------------------
         $next = $start + $end;
         $url = $this->settings['base_url'] . '&' . $this->form_code_js . "&do=deleteposts_process&dpergo={$end}" . "&st={$next}" . "&init=1" . "&dposts={$delete_posts}" . "&dtopics={$delete_topics}" . "&use_trash_can=" . intval($this->request['use_trash_can']) . "&member_id={$member_id}";
         $text = sprintf($this->lang->words['mem_posts_process_more'], $end, $posts_deleted, $topics_deleted);
         $this->registry->output->multipleRedirectHit($url, $img . ' ' . $text);
     }
 }