示例#1
0
 /**
  * Alter multiple topics at once
  *
  * @return	@e void		[Outputs to screen]
  */
 protected function _multiAlterTopics($mod_action = "", $sql = "")
 {
     if (!$mod_action) {
         $this->_showError('mod_um_what_now', 103109);
     }
     $this->_genericPermissionCheck($mod_action);
     //-----------------------------------------
     // Make sure we can moderate EACH topic
     //-----------------------------------------
     $topics = array();
     $forums = array();
     $this->DB->build(array('select' => 'tid, forum_id, title', 'from' => 'topics', 'where' => 'tid IN (' . implode(",", $this->tids) . ')'));
     $this->DB->execute();
     while ($r = $this->DB->fetch()) {
         $topics[$r['tid']] = $r;
     }
     foreach ($topics as $topic) {
         $forums[$topic['forum_id']] = $topic['forum_id'];
         $this->_resetModerator($topic['forum_id']);
         $this->_genericPermissionCheck($mod_action);
     }
     if ($mod_action != 'delete_topic') {
         $this->DB->buildAndFetch(array('update' => 'topics', 'set' => $sql, 'where' => "tid IN(" . implode(",", $this->tids) . ") AND state!='link'"));
         $this->_addModeratorLog(sprintf($this->lang->words['acp_altered_topics'], $sql, implode(", ", $this->tids)));
         if ($mod_action == 'topic_q' and trim($sql) == 'approved=1') {
             $this->modLibrary->clearModQueueTable('topic', $this->tids, true);
         }
     } else {
         $this->modLibrary->topicDelete($this->tids);
         foreach ($this->tids as $_tid) {
             $this->request['t'] = $_tid;
             $this->request['f'] = $topics[$_tid]['forum_id'];
             $this->topic['title'] = $topics[$_tid]['title'];
             $this->_addModeratorLog(sprintf($this->lang->words['acp_deleted_topics'], $_tid));
         }
         $this->request['t'] = 0;
         $this->request['f'] = 0;
         $this->topic['title'] = '';
         $this->modLibrary->clearModQueueTable('topic', $this->tids);
     }
     if ($mod_action == 'delete_topic' or $mod_action == 'topic_q') {
         foreach ($forums as $forum) {
             $this->registry->class_forums->allForums[$forum]['_update_deletion'] = 1;
             $this->modLibrary->forumRecount($forum);
         }
         $this->cache->rebuildCache('stats', 'global');
     }
     /* Tags */
     if ($mod_action == 'topic_q') {
         if ($sql == 'approved=1') {
             $this->registry->tags->updateVisibilityByMetaId($this->tids, 1);
         } else {
             $this->registry->tags->updateVisibilityByMetaId($this->tids, 0);
         }
     }
 }
示例#2
0
 /**
  * Class entry point
  *
  * @param	object		Registry reference
  * @return	@e void		[Outputs to screen/redirects]
  */
 public function doExecute(ipsRegistry $registry)
 {
     //-----------------------------------------
     // Load modules...
     //-----------------------------------------
     ipsRegistry::getClass('class_localization')->loadLanguageFile(array('public_mod'));
     $classToLoad = IPSLib::loadLibrary(IPSLib::getAppDir('forums') . '/sources/classes/moderate.php', 'moderatorLibrary', 'forums');
     $this->modLibrary = new $classToLoad($this->registry);
     //-----------------------------------------
     // Clean the incoming
     //-----------------------------------------
     $this->request['t'] = intval($this->request['t']);
     $this->mm_id = intval($this->request['mm_id']);
     if ($this->request['t'] < 0) {
         $this->registry->output->showError('multimod_no_topic', 103121, null, null, 404);
     }
     //-----------------------------------------
     // Get the topic id / forum id
     //-----------------------------------------
     $this->topic = $this->DB->buildAndFetch(array('select' => '*', 'from' => 'topics', 'where' => "tid=" . intval($this->request['t'])));
     $this->forum = $this->registry->class_forums->allForums[$this->topic['forum_id']];
     //-----------------------------------------
     // Error out if we can not find the topic
     //-----------------------------------------
     if (!$this->topic['tid']) {
         $this->registry->output->showError('multimod_no_topic', 103122, null, null, 404);
     }
     //-----------------------------------------
     // Error out if we can not find the forum
     //-----------------------------------------
     if (!$this->forum['id']) {
         $this->registry->output->showError('multimod_no_topic', 103123, null, null, 404);
     }
     //-----------------------------------------
     // Are we a moderator?
     //-----------------------------------------
     if ($this->memberData['member_id'] && !$this->memberData['g_is_supmod']) {
         /**
          * @link	http://community.invisionpower.com/tracker/issue-37736-multi-moderationsecondary-group-permissions/
          */
         $this->moderator = empty($this->memberData['forumsModeratorData'][$this->forum['id']]) ? array() : $this->memberData['forumsModeratorData'][$this->forum['id']];
         /*$this->moderator = $this->DB->buildAndFetch( array( 'select' => '*',
         			'from'   => 'moderators',
         			'where'  => "forum_id LIKE '%,{$this->forum['id']},%' AND (member_id=" . $this->memberData['member_id'] . " OR (is_group=1 AND group_id='" . $this->memberData['member_group_id'] . "'))" 
         		)		);*/
     }
     //-----------------------------------------
     // Init modfunc module
     //-----------------------------------------
     $this->modLibrary->init($this->forum, $this->topic, $this->moderator);
     //-----------------------------------------
     // Do we have permission?
     //-----------------------------------------
     if ($this->modLibrary->mmAuthorize() != TRUE) {
         $this->registry->output->showError('multimod_no_perms', 2038, null, null, 403);
     }
     //-----------------------------------------
     // Get MM data
     //-----------------------------------------
     $this->mm_data = $this->caches['multimod'][$this->mm_id];
     if (!$this->mm_data['mm_id']) {
         $this->registry->output->showError('multimod_not_found', 103124);
     }
     //-----------------------------------------
     // Does this forum have this mm_id
     //-----------------------------------------
     if ($this->modLibrary->mmCheckIdInForum($this->forum['id'], $this->mm_data) != TRUE) {
         $this->registry->output->showError('multimod_no_perms', 2039, null, null, 403);
     }
     $this->modLibrary->stmInit();
     //-----------------------------------------
     // Open close?
     //-----------------------------------------
     if ($this->mm_data['topic_state'] != 'leave') {
         if ($this->mm_data['topic_state'] == 'close') {
             $this->modLibrary->stmAddClose();
         } else {
             if ($this->mm_data['topic_state'] == 'open') {
                 $this->modLibrary->stmAddOpen();
             }
         }
     }
     //-----------------------------------------
     // pin no-pin?
     //-----------------------------------------
     if ($this->mm_data['topic_pin'] != 'leave') {
         if ($this->mm_data['topic_pin'] == 'pin') {
             $this->modLibrary->stmAddPin();
         } else {
             if ($this->mm_data['topic_pin'] == 'unpin') {
                 $this->modLibrary->stmAddUnpin();
             }
         }
     }
     //-----------------------------------------
     // Approve / Unapprove
     //-----------------------------------------
     if ($this->mm_data['topic_approve']) {
         if ($this->mm_data['topic_approve'] == 1) {
             $this->modLibrary->stmAddApprove();
             /* Bug #36869: Approving a topic doesn't increment user post count */
             $this->modLibrary->clearModQueueTable('topic', $this->topic['tid'], true);
         } else {
             if ($this->mm_data['topic_approve'] == 2) {
                 $this->modLibrary->stmAddUnapprove();
             }
         }
     }
     //-----------------------------------------
     // Topic title
     // Regexes clean title up
     //-----------------------------------------
     $title = $this->topic['title'];
     if ($this->mm_data['topic_title_st']) {
         $title = preg_replace("/^" . preg_quote($this->mm_data['topic_title_st'], '/') . "/", "", $title);
     }
     if ($this->mm_data['topic_title_end']) {
         $title = preg_replace("/" . preg_quote($this->mm_data['topic_title_end'], '/') . "\$/", "", $title);
     }
     $this->modLibrary->stmAddTitle(IPSText::UNhtmlspecialchars($this->mm_data['topic_title_st']) . $title . IPSText::UNhtmlspecialchars($this->mm_data['topic_title_end']));
     //-----------------------------------------
     // Update what we have so far...
     //-----------------------------------------
     $this->modLibrary->stmExec($this->topic['tid']);
     //-----------------------------------------
     // Add reply?
     //-----------------------------------------
     if ($this->mm_data['topic_reply'] and $this->mm_data['topic_reply_content']) {
         IPSText::getTextClass('bbcode')->parse_smilies = 1;
         IPSText::getTextClass('bbcode')->parse_bbcode = 1;
         IPSText::getTextClass('bbcode')->parse_html = 1;
         IPSText::getTextClass('bbcode')->parse_nl2br = 1;
         IPSText::getTextClass('bbcode')->parsing_section = 'topics';
         $this->modLibrary->topicAddReply(IPSText::getTextClass('bbcode')->preDbParse(str_replace(array("\n", "\r"), '', nl2br($this->mm_data['topic_reply_content']))), array(0 => array($this->topic['tid'], $this->forum['id'])), $this->mm_data['topic_reply_postcount']);
     }
     //-----------------------------------------
     // Move topic?
     //-----------------------------------------
     if ($this->mm_data['topic_move']) {
         //-----------------------------------------
         // Move to forum still exist?
         //-----------------------------------------
         $r = $this->registry->class_forums->allForums[$this->mm_data['topic_move']];
         if ($r['id']) {
             if ($r['sub_can_post'] != 1) {
                 $this->DB->update('topic_mmod', array('topic_move' => 0), 'mm_id=' . $this->mm_id);
             } else {
                 if ($r['id'] != $this->forum['id']) {
                     $this->modLibrary->topicMove($this->topic['tid'], $this->forum['id'], $r['id'], $this->mm_data['topic_move_link']);
                     $this->modLibrary->forumRecount($r['id']);
                 }
             }
         } else {
             $this->DB->update('topic_mmod', array('topic_move' => 0), 'mm_id=' . $this->mm_id);
         }
     }
     //-----------------------------------------
     // Recount root forum
     //-----------------------------------------
     $this->modLibrary->forumRecount($this->forum['id']);
     $this->cache->rebuildCache('stats', 'global');
     //-----------------------------------------
     // Add mod log
     //-----------------------------------------
     $this->modLibrary->addModerateLog($this->forum['id'], $this->topic['tid'], "", $this->topic['title'], "Applied multi-mod: " . $this->mm_data['mm_title']);
     //-----------------------------------------
     // Redirect back with nice fluffy message
     //-----------------------------------------
     $this->registry->output->redirectScreen(sprintf($this->lang->words['mm_applied'], $this->mm_data['mm_title']), $this->settings['base_url'] . "showforum=" . $this->forum['id'], $this->forum['name_seo'], 'showforum');
 }
 /**
  * Complete the topic move
  *
  * @access	private
  * @return	void		[Outputs to screen]
  */
 private function _multiCompleteCheckedMove()
 {
     $this->_genericPermissionCheck('move_topic');
     $add_link = $this->request['leave'] == 'y' ? 1 : 0;
     $dest_id = intval($this->request['df']);
     $source_id = $this->forum['id'];
     //-----------------------------------------
     // Make sure we can moderate EACH topic
     //-----------------------------------------
     $this->DB->build(array('select' => 'tid, forum_id', 'from' => 'topics', 'where' => 'tid IN (' . implode(",", $this->tids) . ')', 'order' => 'start_date asc'));
     $this->DB->execute();
     while ($r = $this->DB->fetch()) {
         $topics[] = $r;
     }
     foreach ($topics as $topic) {
         $this->_resetModerator($topic['forum_id']);
         $this->_genericPermissionCheck('move_topic');
     }
     //-----------------------------------------
     // Check for input..
     //-----------------------------------------
     if (!$source_id or !$dest_id or $dest_id == -1) {
         $this->_showError('mod_no_forum_move', 103110);
     }
     if ($source_id == $dest_id) {
         $this->_showError('mod_no_move_save', 103111);
     }
     //-----------------------------------------
     $this->DB->build(array('select' => 'id, sub_can_post, name, redirect_on', 'from' => 'forums', 'where' => "id IN(" . $source_id . ',' . $dest_id . ")"));
     $this->DB->execute();
     if ($this->DB->getTotalRows() != 2) {
         $this->_showError('mod_no_move_save', 103112);
     }
     $source_name = "";
     $dest_name = "";
     //-----------------------------------------
     // Check for an attempt to move into a subwrap forum
     //-----------------------------------------
     while ($f = $this->DB->fetch()) {
         if ($f['id'] == $source_id) {
             $source_name = $f['name'];
         } else {
             $dest_name = $f['name'];
         }
         if ($f['sub_can_post'] != 1 or $f['redirect_on'] == 1) {
             $this->_showError('mod_forum_no_posts', 103113);
         }
     }
     $this->modLibrary->topicMove($this->tids, $source_id, $dest_id, $add_link);
     if ($dest_id == $this->settings['forum_trash_can_id']) {
         $this->modLibrary->clearModQueueTable('topic', $this->tids);
     }
     //-----------------------------------------
     // Resync the forums..
     //-----------------------------------------
     $this->registry->class_forums->allForums[$source_id]['_update_deletion'] = 1;
     $this->registry->class_forums->allForums[$dest_id]['_update_deletion'] = 1;
     $this->modLibrary->forumRecount($source_id);
     $this->modLibrary->forumRecount($dest_id);
     $this->_addModeratorLog(sprintf($this->lang->words['acp_moved_topics'], $source_name, $dest_name));
 }