Example #1
0
 /**
  * Additional data to update after a delete call (such as denormalized values in other tables).
  *
  * @param	boolean	Do the query?
  */
 function post_delete($doquery = true)
 {
     $types = vB_Types::instance();
     $contenttypeid = intval($types->getContentTypeID('vBForum_Album'));
     $attachmentids = array();
     $attachdata =& datamanager_init('Attachment', $this->registry, ERRTYPE_STANDARD, 'attachment');
     $picture_sql = $this->registry->db->query_read("\n\t\t\tSELECT\n\t\t\t\ta.attachmentid, a.filedataid, a.userid\n\t\t\tFROM " . TABLE_PREFIX . "attachment AS a\n\t\t\tWHERE\n\t\t\t\ta.contentid = " . $this->fetch_field('albumid') . "\n\t\t\t\t\tAND\n\t\t\t\ta.contenttypeid = {$contenttypeid}\n\t\t");
     while ($picture = $this->registry->db->fetch_array($picture_sql)) {
         $attachdata->set_existing($picture);
         $attachdata->delete(true, false, 'album', 'photo');
         $attachmentids[] = $picture['attachmentid'];
     }
     $this->registry->db->free_result($picture_sql);
     $this->remove_usercss_background_image();
     ($hook = vBulletinHook::fetch_hook('albumdata_delete')) ? eval($hook) : false;
     $activity = new vB_ActivityStream_Manage('album', 'album');
     $activity->set('contentid', $this->fetch_field('albumid'));
     $activity->delete();
     return true;
 }
Example #2
0
function delete_post($postid, $countposts = true, $threadid = 0, $physicaldel = true, $delinfo = NULL, $dolog = true)
{
    global $vbulletin, $vbphrase, $threadinfo;
    $postid = intval($postid);
    $threadid = intval($threadid);
    if (!is_array($delinfo)) {
        $delinfo = array('userid' => $vbulletin->userinfo['userid'], 'username' => $vbulletin->userinfo['username'], 'reason' => '', 'keepattachments' => false);
    } else {
        if (!$delinfo['userid']) {
            $delinfo['userid'] = $vbulletin->userinfo['userid'];
        }
        if (!$delinfo['username']) {
            $delinfo['username'] = $vbulletin->userinfo['username'];
        }
    }
    if ($postinfo = fetch_postinfo($postid)) {
        $threadinfo = fetch_threadinfo($postinfo['threadid']);
        if (!$physicaldel and $postinfo['visible'] == 2) {
            // post is already soft deleted
            return;
        }
        if ($threadinfo['firstpostid'] == $postid) {
            if (!$physicaldel and $threadinfo['visible'] == 2) {
                // thread is already soft deleted
                return;
            }
            // delete thread
            $threadman =& datamanager_init('Thread', $vbulletin, ERRTYPE_SILENT, 'threadpost');
            $threadman->set_existing($threadinfo);
            $threadman->delete($countposts, $physicaldel, $delinfo);
            unset($threadman);
            return;
        }
        if (can_moderate() and $dolog) {
            fetch_phrase_group('threadmanage');
            if (!$physicaldel) {
                $type = 'post_x_by_y_softdeleted';
            } else {
                $type = 'post_x_by_y_removed';
            }
            $postinfo['forumid'] = $threadinfo['forumid'];
            require_once DIR . '/includes/functions_log_error.php';
            log_moderator_action($postinfo, $type, array($postinfo['title'], $postinfo['username']));
        }
        if ($countposts and $postinfo['visible'] == 1 and $threadinfo['visible'] == 1 and $postinfo['userid']) {
            // deleted posts have already been decremented and hidden posts were never incremented (as of 3.5 at least)
            // init user data manager
            $userdata =& datamanager_init('User', $vbulletin, ERRTYPE_SILENT);
            $userdata->set_existing($postinfo);
            $userdata->set('posts', 'IF(posts > 1, posts - 1, 0)', false);
            $userdata->set_ladder_usertitle_relative(-1);
            $userdata->save();
            unset($userdata);
        }
        if ($postinfo['attach']) {
            if ($physicaldel or !$delinfo['keepattachments'] and can_moderate($threadinfo['forumid'], 'canremoveposts')) {
                $types = vB_Types::instance();
                $contenttypeid = intval($types->getContentTypeID('vBForum_Post'));
                $attachdata =& datamanager_init('Attachment', $vbulletin, ERRTYPE_SILENT, 'attachment');
                $attachdata->condition = "a.contentid = " . intval($postinfo['postid']) . " AND a.contenttypeid = " . intval($contenttypeid);
                $attachdata->delete(true, false);
            }
        }
        if (!$physicaldel) {
            $deletionman =& datamanager_init('Deletionlog_ThreadPost', $vbulletin, ERRTYPE_SILENT, 'deletionlog');
            $deletionman->set('primaryid', $postinfo['postid']);
            $deletionman->set('type', 'post');
            $deletionman->set('userid', $delinfo['userid']);
            $deletionman->set('username', $delinfo['username']);
            $deletionman->set('reason', $delinfo['reason']);
            $deletionman->save();
            unset($deletionman);
            $postman =& datamanager_init('Post', $vbulletin, ERRTYPE_SILENT, 'threadpost');
            $postman->set_existing($postinfo);
            $postman->set('visible', 2);
            $postman->save();
            unset($postman);
            if (!$postinfo['visible']) {
                // only posts that are already moderated need tidied up
                $vbulletin->db->query_write("DELETE FROM " . TABLE_PREFIX . "moderation WHERE primaryid = {$postinfo['postid']} AND type = 'reply'");
                $vbulletin->db->query_write("DELETE FROM " . TABLE_PREFIX . "spamlog WHERE postid = {$postinfo['postid']}");
            }
            return;
        }
        // Sending the cookie below in rapid fire fashion for 300 posts deleted via inline mod seems to blowup IE but we don't need to set this cookie when using inlinemod
        if (THIS_SCRIPT != 'inlinemod') {
            // Delete any postid entries from the inline moderation cookie
            $vbulletin->input->clean_array_gpc('c', array('vbulletin_inlinepost' => TYPE_STR));
            if (!empty($vbulletin->GPC['vbulletin_inlinepost']) and !headers_sent()) {
                $newcookie = array();
                $found = false;
                $temp = explode('-', $vbulletin->GPC['vbulletin_inlinepost']);
                foreach ($temp as $inlinepostid) {
                    if ($inlinepostid == $postid) {
                        $found = true;
                    } else {
                        $newcookie[] = $inlinepostid;
                    }
                }
                // this post is in the inline post cookie so delete it by rewriting cookie without it
                if ($found) {
                    setcookie('vbulletin_inlinepost', implode('-', $newcookie), TIMENOW + 3600, '/');
                }
            }
        }
        // delete post hash when physically deleting a post - last argument is type
        $dupehash = md5($threadinfo['forumid'] . $postinfo['title'] . $postinfo['pagetext'] . $postinfo['userid'] . 'reply');
        $vbulletin->db->query_write("\n\t\t\tDELETE FROM " . TABLE_PREFIX . "posthash\n\t\t\tWHERE userid = {$postinfo['userid']} AND\n\t\t\tdupehash = '" . $vbulletin->db->escape_string($dupehash) . "' AND\n\t\t\tdateline > " . (TIMENOW - 300));
        // Hook this post's children up to it's parent so they aren't orphaned. Foster parents I guess.
        if ($postinfo['parentid'] == 0) {
            if ($firstchild = $vbulletin->db->query_first("\n\t\t\t\tSELECT *\n\t\t\t\tFROM " . TABLE_PREFIX . "post\n\t\t\t\tWHERE threadid = {$postinfo['threadid']} AND\n\t\t\t\tparentid = {$postid}\n\t\t\t\tORDER BY dateline\n\t\t\t\tLIMIT 1\n\t\t\t")) {
                $postman =& datamanager_init('Post', $vbulletin, ERRTYPE_SILENT, 'threadpost');
                $postman->set_existing($firstchild);
                $postman->set('parentid', 0);
                $postman->save();
                unset($postman);
                $postinfo['parentid'] = $firstchild['postid'];
            }
        }
        $vbulletin->db->query_write("\n\t\t\tUPDATE " . TABLE_PREFIX . "post SET\n\t\t\t\tparentid = " . intval($postinfo['parentid']) . "\n\t\t\tWHERE threadid = {$postinfo['threadid']}\n\t\t\t\tAND parentid = {$postid}\n\t\t");
        $deletiondata =& datamanager_init('Deletionlog_ThreadPost', $vbulletin, ERRTYPE_SILENT, 'deletionlog');
        $deletioninfo = array('type' => 'post', 'primaryid' => $postid);
        $deletiondata->set_existing($deletioninfo);
        $deletiondata->delete();
        unset($deletiondata, $deletioninfo);
        $vbulletin->db->query_write("DELETE FROM " . TABLE_PREFIX . "post WHERE postid = {$postid}");
        $vbulletin->db->query_write("DELETE FROM " . TABLE_PREFIX . "postparsed WHERE postid = {$postid}");
        $vbulletin->db->query_write("DELETE FROM " . TABLE_PREFIX . "editlog WHERE postid = {$postid}");
        $vbulletin->db->query_write("DELETE FROM " . TABLE_PREFIX . "postedithistory WHERE postid = {$postid}");
        //$vbulletin->db->query_write("DELETE FROM " . TABLE_PREFIX . "reputation WHERE postid = $postid");
        $vbulletin->db->query_write("DELETE FROM " . TABLE_PREFIX . "moderation WHERE primaryid = {$postid} AND type = 'reply'");
        $vbulletin->db->query_write("DELETE FROM " . TABLE_PREFIX . "spamlog WHERE postid = {$postid}");
        $activity = new vB_ActivityStream_Manage('forum', 'post');
        $activity->set('contentid', $postid);
        $activity->delete();
        $activity = new vB_ActivityStream_Manage('cms', 'comment');
        $activity->set('contentid', $postid);
        $activity->delete();
    }
}
Example #3
0
 /**
  * Additional data to update after a delete call (such as denormalized values in other tables).
  *
  * @param	boolean	Do the query?
  */
 function post_delete($doquery = true)
 {
     $activity = new vB_ActivityStream_Manage('calendar', 'event');
     $activity->set('contentid', intval($this->fetch_field('eventid')));
     $activity->delete();
     $this->dbobject->query_write("DELETE FROM " . TABLE_PREFIX . "subscribeevent WHERE eventid = " . intval($this->fetch_field('eventid')));
     require_once DIR . '/includes/functions_calendar.php';
     build_events();
     ($hook = vBulletinHook::fetch_hook('eventdata_delete')) ? eval($hook) : false;
     return true;
 }
 /**
  * Code to delete a Visitor Message
  *
  * @param 	Added for PHP 5.4 Strict Standards compliance
  *
  * @return	Whether this code successfully completed
  *
  */
 function delete($doquery = true)
 {
     if ($vmid = $this->existing['vmid']) {
         $db =& $this->registry->db;
         if ($this->info['hard_delete']) {
             $db->query_write("DELETE FROM " . TABLE_PREFIX . "deletionlog WHERE primaryid = {$vmid} AND type = 'visitormessage'");
             $db->query_write("DELETE FROM " . TABLE_PREFIX . "visitormessage WHERE vmid = {$vmid}");
             $db->query_write("DELETE FROM " . TABLE_PREFIX . "moderation WHERE primaryid = {$vmid} AND type = 'visitormessage'");
             $activity = new vB_ActivityStream_Manage('forum', 'visitormessage');
             $activity->set('contentid', $vmid);
             $activity->delete();
             // Logging?
             //let's update the index
             vB_Search_Indexcontroller_Queue::indexQueue('vBForum', 'VisitorMessage', 'delete', $vmid);
         } else {
             $this->set('state', 'deleted');
             $this->save();
             $deletionman =& datamanager_init('Deletionlog_VisitorMessage', $this->registry, ERRTYPE_SILENT, 'deletionlog');
             $deletionman->set('primaryid', $vmid);
             $deletionman->set('type', 'visitormessage');
             $deletionman->set('userid', $this->registry->userinfo['userid']);
             $deletionman->set('username', $this->registry->userinfo['username']);
             $deletionman->set('reason', $this->info['reason']);
             $deletionman->save();
             unset($deletionman);
         }
         if (!$this->info['profileuser']) {
             $this->info['profileuser'] = fetch_userinfo($this->existing['userid']);
         }
         if ($this->info['profileuser']) {
             build_visitor_message_counters($this->info['profileuser']['userid']);
         }
         $db->query_write("\n\t\t\t\tDELETE FROM " . TABLE_PREFIX . "moderation WHERE primaryid = {$vmid} AND type = 'visitormessage'\n\t\t\t");
         vB_Search_Indexcontroller_Queue::indexQueue('vBForum', 'VisitorMessage', 'index', $vmid);
         return true;
     }
     return false;
 }
Example #5
0
 function post_save_each($doquery = true)
 {
     $this->insert_moderator_log();
     if (!$this->condition and $this->fetch_field('visible') == 1 and $this->info['forum']) {
         $forumdata =& datamanager_init('Forum', $this->registry, ERRTYPE_SILENT);
         $forumdata->set_existing($this->info['forum']);
         $forumdata->set_info('disable_cache_rebuild', true);
         if (!empty($this->info['coventry']) and $this->info['coventry']['in_coventry'] == 1) {
             $forumdata->set_info('coventry', $this->info['coventry']);
         }
         $forumdata->set('threadcount', 'threadcount + 1', false);
         $forumdata->save();
     }
     if (!$this->condition and !$this->info['skip_activitystream']) {
         $activity = new vB_ActivityStream_Manage('forum', 'thread');
         $activity->set('contentid', $this->fetch_field('threadid'));
         $activity->set('userid', $this->fetch_field('postuserid'));
         $activity->set('dateline', $this->fetch_field('dateline'));
         $activity->set('action', 'create');
         $activity->save();
     }
     if ($this->condition and $fpid = $this->fetch_field('firstpostid')) {
         if ($this->existing['visible'] == 0 and $this->fetch_field('visible') == 1) {
             $this->akismet_mark_as_ham($fpid);
         }
         if (!$this->info['skip_first_post_update']) {
             // if we're updating the title/iconid of an existing thread, update the first post
             if ((isset($this->thread['title']) or isset($this->thread['iconid'])) and $fp = fetch_postinfo($fpid)) {
                 $postdata =& datamanager_init('Post', $this->registry, ERRTYPE_SILENT, 'threadpost');
                 $postdata->set_existing($fp);
                 if (isset($this->thread['title'])) {
                     $postdata->set('title', $this->thread['title'], true, false);
                     // don't clean it -- already been cleaned
                 }
                 if (isset($this->thread['iconid'])) {
                     $postdata->set('iconid', $this->thread['iconid'], true, false);
                 }
                 $postdata->save();
             }
         }
     }
     if ($this->condition and $this->thread['title'] and $this->existing['title']) {
         // we're updating the title of a thread, so update redirect titles as well if the redirect title is the same
         $this->dbobject->query_write("\n\t\t\t\tUPDATE " . TABLE_PREFIX . "thread SET\n\t\t\t\t\ttitle = '" . $this->dbobject->escape_string($this->thread['title']) . "'\n\t\t\t\tWHERE\n\t\t\t\t\topen = 10 AND\n\t\t\t\t\tpollid = " . intval($this->fetch_field('threadid')) . " AND\n\t\t\t\t\ttitle = '" . $this->dbobject->escape_string($this->existing['title']) . "'\n\t\t\t");
     }
     if (!empty($this->info['coventry']) and $this->info['coventry']['in_coventry'] == 1 and $this->setfields['replycount']) {
         $this->dbobject->query_read("SELECT * FROM " . TABLE_PREFIX . "tachythreadcounter WHERE userid = " . $this->info['coventry']['userid'] . " AND threadid = " . $this->fetch_field('threadid'));
         if ($this->dbobject->affected_rows() > 0) {
             $tachyupdate = 'replycount = ' . $this->tachythreadcounter['replycount'];
             $this->dbobject->query_write("\n\t\t\t\t\tUPDATE " . TABLE_PREFIX . "tachythreadcounter SET " . $tachyupdate . " WHERE userid = " . $this->info['coventry']['userid'] . " AND threadid = " . $this->fetch_field('threadid'));
         } else {
             $this->tachythreadcounter['replycount'] = 1;
             $this->tachythreadcounter['userid'] = $this->info['coventry']['userid'];
             $this->tachythreadcounter['threadid'] = $this->fetch_field('threadid');
             $this->dbobject->query_write("\n\t\t\t\t\tREPLACE INTO " . TABLE_PREFIX . "tachythreadcounter\n\t\t\t\t\t\t(userid, threadid, replycount)\n\t\t\t\t\tVALUES\n\t\t\t\t\t\t(" . intval($this->tachythreadcounter['userid']) . ",\n\t\t\t\t\t\t" . intval($this->tachythreadcounter['threadid']) . ",\n\t\t\t\t\t\t" . intval($this->tachythreadcounter['replycount']) . ")\n\t\t\t\t");
         }
     }
     if (empty($this->info['rebuild']) and $this->setfields['lastpost']) {
         if (!empty($this->info['coventry']) and $this->info['coventry']['in_coventry'] == 1) {
             $this->tachythreadpost['userid'] = $this->info['coventry']['userid'];
             $this->tachythreadpost['threadid'] = $this->fetch_field('threadid');
             $this->dbobject->query_write("\n\t\t\t\t\tREPLACE INTO " . TABLE_PREFIX . "tachythreadpost\n\t\t\t\t\t\t(userid, threadid, lastpost, lastposter, lastposterid, lastpostid)\n\t\t\t\t\tVALUES\n\t\t\t\t\t\t(" . intval($this->tachythreadpost['userid']) . ",\n\t\t\t\t\t\t" . intval($this->tachythreadpost['threadid']) . ",\n\t\t\t\t\t\t" . intval($this->tachythreadpost['lastpost']) . ",\n\t\t\t\t\t\t'" . $this->dbobject->escape_string($this->tachythreadpost['lastposter']) . "',\n\t\t\t\t\t\t" . intval($this->tachythreadpost['lastposterid']) . ",\n\t\t\t\t\t\t" . intval($this->tachythreadpost['lastpostid']) . ")\n\t\t\t\t");
         } else {
             $this->dbobject->query_write("\n\t\t\t\t\t\tDELETE FROM " . TABLE_PREFIX . "tachythreadpost\n\t\t\t\t\t\tWHERE threadid = " . intval($this->fetch_field('threadid')));
         }
     }
     if ($this->condition and $this->fetch_field('open') == 10) {
         $activity = new vB_ActivityStream_Manage('forum', 'thread');
         $activity->set('contentid', $this->fetch_field('threadid'));
         $activity->delete();
     }
     ($hook = vBulletinHook::fetch_hook('threaddata_postsave')) ? eval($hook) : false;
 }
Example #6
0
 /**
  * Delete from the attachment table
  *
  */
 public function delete($doquery = true, $checkperms = true, $activitysection = '', $activitytype = '')
 {
     if (!$this->pre_delete($doquery, $checkperms) or empty($this->lists['attachmentids'])) {
         return false;
     }
     $this->registry->db->query_write("\n\t\t\tDELETE FROM " . TABLE_PREFIX . "attachment\n\t\t\tWHERE attachmentid IN (" . implode(", ", $this->lists['attachmentids']) . ")\n\t\t");
     if ($activitysection and $activitytype) {
         $activity = new vB_ActivityStream_Manage($activitysection, $activitytype);
         $activity->set('contentid', $this->lists['attachmentids']);
         $activity->delete();
     }
     $this->post_delete($doquery);
     return true;
 }
Example #7
0
 /**
  * Deleted a SG Message
  * 
  * @param 	bool, added for PHP 5.4 Strict Standards compliance
  * @return	boolean	Was this message deleted successfully?
  */
 function delete($doquery = true)
 {
     if ($gmid = $this->existing['gmid']) {
         $db =& $this->registry->db;
         // Search index maintenance - Remove for a hard delete.
         require_once DIR . '/vb/search/core.php';
         if ($this->info['hard_delete']) {
             $db->query_write("DELETE FROM " . TABLE_PREFIX . "deletionlog WHERE primaryid = {$gmid} AND type = 'groupmessage'");
             $db->query_write("DELETE FROM " . TABLE_PREFIX . "groupmessage WHERE gmid = {$gmid}");
             $db->query_write("DELETE FROM " . TABLE_PREFIX . "moderation WHERE primaryid = {$gmid} AND type = 'groupmessage'");
             vb_Search_Indexcontroller_Queue::indexQueue('vBForum', 'SocialGroupMessage', 'delete', $gmid);
             $activity = new vB_ActivityStream_Manage('socialgroup', 'groupmessage');
             $activity->set('contentid', $gmid);
             $activity->delete();
             // Logging?
         } else {
             $this->set('state', 'deleted');
             $this->save();
             vb_Search_Indexcontroller_Queue::indexQueue('vBForum', 'SocialGroupMessage', 'index', $gmid);
             $deletionman =& datamanager_init('Deletionlog_GroupMessage', $this->registry, ERRTYPE_SILENT, 'deletionlog');
             $deletionman->set('primaryid', $gmid);
             $deletionman->set('type', 'groupmessage');
             $deletionman->set('userid', $this->registry->userinfo['userid']);
             $deletionman->set('username', $this->registry->userinfo['username']);
             $deletionman->set('reason', $this->info['reason']);
             $deletionman->save();
             unset($deletionman);
         }
         $db->query_write("\n\t\t\t\tDELETE FROM " . TABLE_PREFIX . "moderation WHERE primaryid = {$gmid} AND type = 'groupmessage'\n\t\t\t");
         if (!$this->info['skip_build_counters']) {
             require_once DIR . '/includes/functions_socialgroup.php';
             build_discussion_counters($this->existing['discussionid']);
             build_group_counters($this->info['group']['groupid']);
         }
         $this->post_delete();
         return true;
     }
     return false;
 }
Example #8
0
 /**
  * Any code to run after deleting
  *
  * @access protected
  * 
  * @param boolean $doquery					Do the query?
  */
 function post_delete($doquery = true)
 {
     if (empty($this->info['group'])) {
         $this->info['group'] = fetch_socialgroupinfo($this->fetch_field('groupid'));
     }
     if ($this->info['hard_delete']) {
         // prepare table names for MySQL 4.0.x
         $discussionid = intval($this->existing['discussionid']);
         $groupmessage_table = TABLE_PREFIX . 'groupmessage';
         $deletionlog_table = TABLE_PREFIX . 'deletionlog';
         $moderation_table = TABLE_PREFIX . 'moderation';
         $activity = new vB_ActivityStream_Manage('socialgroup', 'discussion');
         $activity->set('contentid', $this->existing['discussionid']);
         $activity->delete();
         $idlist = array();
         $ids = $this->registry->db->query_read("\n\t\t\t\tSELECT gmid\n\t\t\t\tFROM " . TABLE_PREFIX . "groupmessage\n\t\t\t\tWHERE discussionid = {$this->existing['discussionid']}\n\t\t\t");
         while ($id = $this->registry->db->fetch_array($ids)) {
             $idlist[] = $id['gmid'];
         }
         if ($idlist) {
             $activity = new vB_ActivityStream_Manage('socialgroup', 'groupmessage');
             $activity->set('contentid', $idlist);
             $activity->delete();
         }
         /*
          
         KEVIN :  Need to add SocialGroup ? So this can all be done in one ?
          
         // Search index maintenance - Remove for a hard delete.
         require_once(DIR . '/vb/search/core.php');
         $indexer = vB_Search_Core::get_instance()->get_index_controller('vBForum', 'SocialGroup');			
         $indexer->delete($discussionid);		
         */
         require_once DIR . '/vb/search/core.php';
         $indexer = vB_Search_Core::get_instance()->get_index_controller('vBForum', 'SocialGroupMessage');
         $result = $this->registry->db->query("SELECT gmid FROM " . TABLE_PREFIX . "groupmessage WHERE discussionid={$discussionid}");
         while ($row = $this->registry->db->fetch_row($result)) {
             $indexer->delete($row[0]);
         }
         // delete all messages and their deletion logs and moderation
         $this->registry->db->query_write("DELETE {$groupmessage_table}, {$deletionlog_table}, {$moderation_table} \n\t\t\t\t FROM {$groupmessage_table}   \n\t\t\t\t LEFT JOIN {$deletionlog_table}  \n\t\t\t\t  ON {$deletionlog_table}.primaryid = {$groupmessage_table}.gmid \n\t\t\t\t  AND {$deletionlog_table}.type = 'groupmessage' \n\t\t\t\t LEFT JOIN {$moderation_table} \n\t\t\t\t  ON {$moderation_table}.primaryid = {$groupmessage_table}.gmid \n\t\t\t\t  AND {$moderation_table}.type = 'groupmessage' \n\t\t\t\t WHERE {$groupmessage_table}.discussionid = {$discussionid}");
         if (!$this->info['skip_build_counters']) {
             require_once DIR . '/includes/functions_socialgroup.php';
             build_group_counters($this->existing['groupid']);
         }
         // delete read marking
         $this->registry->db->query_write("\n\t\t\t\tDELETE FROM " . TABLE_PREFIX . "discussionread \n\t\t\t\tWHERE " . TABLE_PREFIX . "discussionread.discussionid = {$discussionid}\n\t\t\t");
         // delete subscriptions
         $this->registry->db->query_write("\n\t\t\t\tDELETE FROM " . TABLE_PREFIX . "subscribediscussion \n\t\t\t\tWHERE " . TABLE_PREFIX . "subscribediscussion.discussionid = {$discussionid}\n\t\t\t");
         // update moderation count for owner
         update_owner_pending_gm_count($this->info['group']['creatoruserid']);
         ($hook = vBulletinHook::fetch_hook('discussiondata_delete')) ? eval($hook) : false;
     }
 }
Example #9
0
 /**
  * Any code to run after deleting
  *
  * @param	Boolean Do the query?
  */
 function post_delete($doquery = true)
 {
     if (!defined('MYSQL_VERSION')) {
         $mysqlversion = $this->registry->db->query_first("SELECT version() AS version");
         define('MYSQL_VERSION', $mysqlversion['version']);
     }
     $enginetype = version_compare(MYSQL_VERSION, '4.0.18', '<') ? 'TYPE' : 'ENGINE';
     $tabletype = version_compare(MYSQL_VERSION, '4.1', '<') ? 'HEAP' : 'MEMORY';
     $aggtable = 'aaggregate_temp_' . $this->registry->userinfo['userid'] . '_' . $this->fetch_field('groupid') . '_' . TIMENOW;
     $this->registry->db->query_write("\n\t\t\tCREATE TABLE IF NOT EXISTS " . TABLE_PREFIX . "{$aggtable} (\n\t\t\t\tuserid INT UNSIGNED NOT NULL DEFAULT '0',\n\t\t\t\tPRIMARY KEY (userid)\n\t\t\t) {$enginetype} = {$tabletype}\n\t\t");
     if ($this->registry->options['usemailqueue'] == 2) {
         $this->registry->db->lock_tables(array($aggtable => 'WRITE', 'socialgroupmember' => 'WRITE'));
     }
     $this->registry->db->query_write("\n\t\t\tINSERT IGNORE INTO " . TABLE_PREFIX . "{$aggtable}\n\t\t\tSELECT userid\n\t\t\tFROM " . TABLE_PREFIX . "socialgroupmember\n\t\t\tWHERE groupid = " . $this->fetch_field('groupid') . "\n\t\t\t\tAND type = 'invited'\n\t\t");
     // A user's 'type' doesn't seem to change when a group's type is changed. Why is this?
     // e.g. a 'moderated' user doesn't become a member if a moderated group is made public
     $result = array();
     if ($this->fetch_field('creatoruserid')) {
         $result = $this->registry->db->query_first("\n\t\t\t\tSELECT COUNT(*) AS count\n\t\t\t\tFROM " . TABLE_PREFIX . "socialgroupmember\n\t\t\t\tWHERE groupid = " . $this->fetch_field('groupid') . "\n\t\t\t\t\tAND type = 'moderated'\n\t\t\t");
     }
     if ($this->registry->options['usemailqueue'] == 2) {
         $this->registry->db->unlock_tables();
     }
     $this->registry->db->query_write("DELETE FROM " . TABLE_PREFIX . "socialgroupmember WHERE groupid = " . $this->fetch_field('groupid'));
     $this->registry->db->query_write("\n\t\t\tUPDATE " . TABLE_PREFIX . "user AS user," . TABLE_PREFIX . "{$aggtable} AS aggregate\n\t\t\tSET socgroupinvitecount = IF(socgroupinvitecount > 0, socgroupinvitecount - 1, 0)\n\t\t\tWHERE user.userid = aggregate.userid\n\t\t");
     if ($result['count']) {
         $this->registry->db->query_write("\n\t\t\t\tUPDATE " . TABLE_PREFIX . "user\n\t\t\t\tSET socgroupreqcount = IF(socgroupreqcount >= {$result['count']}, socgroupreqcount - {$result['count']}, 0)\n\t\t\t\tWHERE userid = " . $this->fetch_field('creatoruserid') . "\n\t\t\t");
     }
     $this->registry->db->query_write("DROP TABLE IF EXISTS " . TABLE_PREFIX . $aggtable);
     // delete picture references
     $contenttypeid = vB_Types::instance()->getContentTypeID('vBForum_SocialGroup');
     $attachids = array();
     $ids = $this->registry->db->query_read("\n\t\t\tSELECT attachmentid\n\t\t\tFROM " . TABLE_PREFIX . "attachment\n\t\t\tWHERE contentid = " . intval($this->fetch_field('groupid')) . " AND\n\t\t\t\tcontenttypeid = {$contenttypeid}\t\n\t\t");
     while ($id = $this->registry->db->fetch_array($ids)) {
         $attachids[] = $id['attachmentid'];
     }
     if ($attachids) {
         $this->registry->db->query_write("\n\t\t\t\tDELETE FROM " . TABLE_PREFIX . "attachment\n\t\t\t\tWHERE attachmentid IN (" . implode(",", $attachids) . ")\n\t\t\t");
         $activity = new vB_ActivityStream_Manage('socialgroup', 'photo');
         $activity->set('contentid', $attachids);
         $activity->delete();
     }
     vb_Search_Indexcontroller_Queue::indexQueue('vBForum', 'SocialGroup', 'delete', $this->fetch_field('groupid'));
     $gms_to_delete = array();
     $gmids = $this->registry->db->query_read("SELECT gmid FROM " . TABLE_PREFIX . "discussion AS discussion\n\t\t\t INNER JOIN " . TABLE_PREFIX . "groupmessage AS gm\n\t\t\t  ON (gm.discussionid = discussion.discussionid)\n\t\t\t WHERE discussion.groupid = " . intval($this->fetch_field('groupid')));
     while ($gmid = $this->registry->db->fetch_array($gmids)) {
         $gms_to_delete[] = $gmid['gmid'];
         vb_Search_Indexcontroller_Queue::indexQueue('vBForum', 'SocialGroupMessage', 'delete', $gmid['gmid']);
     }
     $this->registry->db->free_result($gmids);
     if (!empty($gms_to_delete)) {
         $this->registry->db->query_write("\n\t\t\t\tDELETE FROM " . TABLE_PREFIX . "moderation\n\t\t\t\tWHERE type = 'groupmessage'\n\t\t\t\t\tAND primaryid IN (" . implode(', ', $gms_to_delete) . ")\n\t\t\t");
         $this->registry->db->query_write("\n\t\t\t\tDELETE FROM " . TABLE_PREFIX . "deletionlog\n\t\t\t\tWHERE type = 'groupmessage'\n\t\t\t\t\tAND primaryid IN (" . implode(', ', $gms_to_delete) . ")\n\t\t\t");
         $this->registry->db->query_write("\n\t\t\t\tDELETE " . TABLE_PREFIX . "groupmessage\n\t\t\t\tFROM " . TABLE_PREFIX . "groupmessage\n\t\t\t\tLEFT JOIN " . TABLE_PREFIX . "discussion ON (" . TABLE_PREFIX . "discussion.discussionid = " . TABLE_PREFIX . "groupmessage.discussionid)\n\t\t\t\tWHERE " . TABLE_PREFIX . "discussion.groupid = " . $this->fetch_field('groupid'));
         $activity = new vB_ActivityStream_Manage('socialgroup', 'groupmessage');
         $activity->set('contentid', $gms_to_delete);
         $activity->delete();
     }
     // delete subscribed discussions
     $this->registry->db->query_write("\n\t\t\tDELETE " . TABLE_PREFIX . "subscribediscussion\n\t\t\tFROM " . TABLE_PREFIX . "subscribediscussion\n\t\t\tINNER JOIN " . TABLE_PREFIX . "discussion ON (" . TABLE_PREFIX . "discussion.discussionid = " . TABLE_PREFIX . "subscribediscussion.discussionid)\n\t\t\t AND " . TABLE_PREFIX . "discussion.groupid = " . intval($this->fetch_field('groupid')) . "\n\t\t");
     // delete discussion readmarking
     $this->registry->db->query_write("\n\t\t\tDELETE " . TABLE_PREFIX . "discussionread\n\t\t\tFROM " . TABLE_PREFIX . "discussionread\n\t\t\tINNER JOIN " . TABLE_PREFIX . "discussion\n\t\t\t ON (" . TABLE_PREFIX . "discussion.discussionid = " . TABLE_PREFIX . "discussionread.discussionid)\n\t\t\t AND " . TABLE_PREFIX . "discussion.groupid = " . intval($this->fetch_field('groupid')) . "\n\t\t");
     $idlist = array();
     $ids = $this->registry->db->query_read("\n\t\t\tSELECT discussionid\n\t\t\tFROM " . TABLE_PREFIX . "discussion\n\t\t\tWHERE groupid = " . intval($this->fetch_field('groupid')));
     while ($id = $this->registry->db->fetch_array($ids)) {
         $idlist[] = $id['discussionid'];
     }
     if ($idlist) {
         $activity = new vB_ActivityStream_Manage('socialgroup', 'discussion');
         $activity->set('contentid', $idlist);
         $activity->delete();
     }
     // delete discussions
     $this->registry->db->query_write("\n\t\t\tDELETE FROM " . TABLE_PREFIX . "discussion\n\t\t\tWHERE groupid = " . intval($this->fetch_field('groupid')));
     // delete group subscriptions
     $this->registry->db->query_write("\n\t\t\tDELETE FROM " . TABLE_PREFIX . "subscribegroup\n\t\t\tWHERE " . TABLE_PREFIX . "subscribegroup.groupid = " . intval($this->fetch_field('groupid')) . "\n\t\t");
     // delete readmarking
     $this->registry->db->query_write("\n\t\t\tDELETE FROM " . TABLE_PREFIX . "groupread\n\t\t\tWHERE " . TABLE_PREFIX . "groupread.groupid = " . intval($this->fetch_field('groupid')) . "\n\t\t");
     // delete group icon
     $groupicon =& datamanager_init('SocialGroupIcon', $this->registry, ERRTYPE_STANDARD);
     $groupicon->condition = "groupid = " . intval($this->fetch_field('groupid'));
     $groupicon->delete();
     unset($groupicon);
     // update moderation count for owner
     update_owner_pending_gm_count($this->fetch_field('creatoruserid'));
     // update category cloud
     fetch_socialgroup_category_cloud(true);
     // update newest groups
     fetch_socialgroup_newest_groups(true, false, !$this->registry->options['sg_enablesocialgroupicons']);
     $activity = new vB_ActivityStream_Manage('socialgroup', 'group');
     $activity->set('contentid', $this->fetch_field('groupid'));
     $activity->delete();
     ($hook = vBulletinHook::fetch_hook('socgroupdata_delete')) ? eval($hook) : false;
 }
Example #10
0
 /**
  * Code to run to delete a picture comment
  *
  * @param	boolean Do the query?
  *
  * @return	boolean	Whether this code executed correctly
  *
  */
 function delete($doquery = true)
 {
     if ($commentid = $this->existing['commentid']) {
         $db =& $this->registry->db;
         if ($this->info['hard_delete']) {
             $db->query_write("DELETE FROM " . TABLE_PREFIX . "deletionlog WHERE primaryid = {$commentid} AND type = 'picturecomment'");
             $db->query_write("DELETE FROM " . TABLE_PREFIX . "picturecomment WHERE commentid = {$commentid}");
             $db->query_write("DELETE FROM " . TABLE_PREFIX . "moderation WHERE primaryid = {$commentid} AND type = 'picturecomment'");
             // Albums and Social Group photos share comments
             $activity = new vB_ActivityStream_Manage('socialgroup', 'photocomment');
             $activity->set('contentid', $commentid);
             $activity->delete();
             $activity = new vB_ActivityStream_Manage('album', 'comment');
             $activity->set('contentid', $commentid);
             $activity->delete();
             // Logging?
         } else {
             $this->set('state', 'deleted');
             $this->save();
             $deletionman =& datamanager_init('Deletionlog_PictureComment', $this->registry, ERRTYPE_SILENT, 'deletionlog');
             $deletionman->set('primaryid', $commentid);
             $deletionman->set('type', 'picturecomment');
             $deletionman->set('userid', $this->registry->userinfo['userid']);
             $deletionman->set('username', $this->registry->userinfo['username']);
             $deletionman->set('reason', $this->info['reason']);
             $deletionman->save();
             unset($deletionman);
         }
         if (!$this->info['pictureuser']) {
             $this->info['profileuser'] = fetch_userinfo($this->existing['userid']);
         }
         if ($this->info['pictureuser']) {
             build_picture_comment_counters($this->info['picteuser']['userid']);
         }
         $db->query_write("\n\t\t\t\tDELETE FROM " . TABLE_PREFIX . "moderation WHERE primaryid = {$commentid} AND type = 'picturecomment'\n\t\t\t");
         return true;
     }
     $this->post_delete();
     return false;
 }