/**
  * 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';
         // 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;
     }
 }
 /**
  * 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("UPDATE " . 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
     $this->registry->db->query_write("\n\t\t\tDELETE FROM " . TABLE_PREFIX . "socialgrouppicture\n\t\t\tWHERE groupid = " . intval($this->fetch_field('groupid')) . "\n\t\t");
     $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'];
     }
     $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("DELETE " . TABLE_PREFIX . "groupmessage\n\t\t\t\t\t\t\t\t\t\t\tFROM " . TABLE_PREFIX . "groupmessage\n\t\t\t\t\t\t\t\t\t\t\tLEFT JOIN " . TABLE_PREFIX . "discussion\n\t\t\t\t\t\t\t\t\t\t\t ON (" . TABLE_PREFIX . "discussion.discussionid = " . TABLE_PREFIX . "groupmessage.discussionid)\n\t\t\t\t\t\t\t\t\t\t\tWHERE " . TABLE_PREFIX . "discussion.groupid = " . $this->fetch_field('groupid'));
     }
     // 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\n\t\t\t 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");
     // 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']);
     ($hook = vBulletinHook::fetch_hook('socgroupdata_delete')) ? eval($hook) : false;
 }
Пример #3
0
        unset($socialgroupmemberdm);
        // Send pm
        $pmdm =& datamanager_init('PM', $vbulletin, ERRTYPE_ARRAY);
        $pmdm->set_info('is_automated', true);
        // implies overridequota
        $pmdm->set('fromuserid', $vbulletin->userinfo['userid']);
        $pmdm->set('fromusername', $vbulletin->userinfo['username']);
        $pmdm->setr('title', construct_phrase($vbphrase['pm_request_to_take_ownership_of_social_group_accepted_title'], fetch_word_wrapped_string(fetch_censored_text($group['name']))));
        $pmdm->set_recipients($group['creatorusername'], $vbulletin->userinfo['permissions'], 'cc');
        $pmdm->setr('message', construct_phrase($vbphrase['pm_request_to_take_ownership_of_social_group_accepted_message'], $vbulletin->userinfo['username'], $vbulletin->options['bburl'], $group['groupid'], fetch_word_wrapped_string(fetch_censored_text($group['name']))));
        $pmdm->set('dateline', TIMENOW);
        $pmdm->set('allowsmilie', 0);
        $pmdm->pre_save();
        $pmdm->save();
        update_owner_pending_gm_count($group['creatoruserid']);
        update_owner_pending_gm_count($vbulletin->userinfo['userid']);
        $group['creatoruserid'] = $vbulletin->userinfo['userid'];
        $group['creatorusername'] = $vbulletin->userinfo['username'];
        exec_header_redirect('group.php?' . $vbulletin->session->vars['sessionurl'] . 'groupid=' . $group['groupid']);
    } else {
        $vbulletin->db->query_write("\n\t\t\tUPDATE " . TABLE_PREFIX . "socialgroup\n\t\t\tSET transferowner = 0\n\t\t\tWHERE groupid = {$group['groupid']}\n\t\t");
        eval(print_standard_redirect('group_ownership_request_rejected'));
    }
}
// #######################################################################
if ($_REQUEST['do'] == 'accepttransfer') {
    $navbits = array('group.php' . $vbulletin->session->vars['sessionurl_q'] => $vbphrase['social_groups'], 'group.php?' . $vbulletin->session->vars['sessionurl'] . 'cat=' . $group['socialgroupcategoryid'] => $group['categoryname'], 'group.php?' . $vbulletin->session->vars['sessionurl'] . 'groupid=' . $group['groupid'] => $group['name'], '' => $vbphrase['transfer_group_ownership']);
    $url = $vbulletin->url;
    $templatename = 'socialgroups_accepttransfer';
}
// #######################################################################
Пример #4
0
     $dataman->delete();
     unset($dataman);
 }
 // build discussion counters seperately from groups so we don't rebuild groups for every discussion
 foreach (array_keys($discussionlist) as $discussionid) {
     if (!isset($discussionarray["{$discussionid}"])) {
         build_discussion_counters($discussionid);
     }
 }
 // group counters are only built from current discussion counters
 foreach (array_keys($grouplist) as $groupid) {
     build_group_counters($groupid);
 }
 // update owner moderation count
 foreach (array_keys($ownerlist) as $owner) {
     update_owner_pending_gm_count($owner);
 }
 foreach ($discussionarray as $discussion) {
     if (!$discussion['is_group_owner']) {
         log_moderator_action($discussion, $physicaldel ? 'discussion_by_x_for_y_removed' : 'discussion_by_x_for_y_soft_deleted', array($discussion['postusername'], $discussion['group_name']));
     }
 }
 foreach ($messagearray as $message) {
     if (!$message['is_group_owner']) {
         log_moderator_action($message, $physicaldel ? 'gm_by_x_in_y_for_z_removed' : 'gm_by_x_in_y_for_z_soft_deleted', array($message['postusername'], $message['discussion_name'], $message['group_name']));
     }
 }
 // empty cookie
 setcookie($inline_cookie, '', TIMENOW - 3600, '/');
 if ($physicaldel and !$inline_discussion) {
     parse_str($vbulletin->input->parse_url($vbulletin->url, PHP_URL_QUERY), $args);
Пример #5
0
 /**
  *
  * @param	boolean	Do the query?
  */
 function post_save_once($doquery = true)
 {
     $gmid = intval($this->fetch_field('gmid'));
     $discussionid = intval($this->fetch_field('discussionid'));
     if (!$this->condition) {
         if ($this->fetch_field('discussionid')) {
             $this->insert_dupehash($this->fetch_field('discussionid'));
         }
         // Update last post info on parent discussion
         if ($this->info['discussion']) {
             $dataman =& datamanager_init('Discussion', $this->registry, ERRTYPE_SILENT);
             $dataman->set_existing($this->info['discussion']);
             // Give group info to discussion
             if ($this->info['group']) {
                 $dataman->setr_info('group', $this->info['group']);
             }
             if ($this->fetch_field('state') == 'visible' and $this->fetch_field('dateline') == TIMENOW) {
                 $dataman->set('lastpost', TIMENOW);
                 $dataman->set('lastposter', $this->fetch_field('postusername'));
                 $dataman->set('lastposterid', $this->fetch_field('postuserid'));
                 $dataman->set('lastpostid', $gmid);
                 $dataman->set_info('lastposttitle', $this->info['discussion']['title']);
             }
             if ($this->fetch_field('state') == 'visible') {
                 $dataman->set('visible', 'visible + 1', false);
             } else {
                 if ($this->fetch_field('state') == 'moderation') {
                     $dataman->set('moderation', 'moderation + 1', false);
                 }
             }
             $dataman->save();
             unset($dataman);
             $activity = new vB_ActivityStream_Manage('socialgroup', 'groupmessage');
             $activity->set('contentid', $gmid);
             $activity->set('userid', $this->fetch_field('postuserid'));
             $activity->set('dateline', $this->fetch_field('dateline'));
             $activity->set('action', 'create');
             $activity->save();
         }
     }
     if ($this->fetch_field('state') == 'moderation') {
         /*insert query*/
         $this->dbobject->query_write("INSERT IGNORE INTO " . TABLE_PREFIX . "moderation (primaryid, type, dateline) VALUES ({$gmid}, 'groupmessage', " . TIMENOW . ")");
     } else {
         if ($this->fetch_field('state') == 'visible' and $this->existing['state'] == 'moderation') {
             // message was made visible, remove the moderation record
             $this->dbobject->query_write("\n\t\t\t\tDELETE FROM " . TABLE_PREFIX . "moderation\n\t\t\t\tWHERE primaryid = {$gmid} AND type = 'groupmessage'\n\t\t\t");
         }
     }
     if ($this->info['group']) {
         update_owner_pending_gm_count($this->info['group']['creatoruserid']);
     }
     ($hook = vBulletinHook::fetch_hook('groupmessagedata_postsave')) ? eval($hook) : false;
 }
Пример #6
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;
     }
 }
Пример #7
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';

			/*
			 
			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 
				 FROM $groupmessage_table   
				 LEFT JOIN $deletionlog_table  
				  ON $deletionlog_table.primaryid = $groupmessage_table.gmid 
				  AND $deletionlog_table.type = 'groupmessage' 
				 LEFT JOIN $moderation_table 
				  ON $moderation_table.primaryid = $groupmessage_table.gmid 
				  AND $moderation_table.type = 'groupmessage' 
				 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("
				DELETE FROM " . TABLE_PREFIX . "discussionread 
				WHERE " . TABLE_PREFIX . "discussionread.discussionid = $discussionid
			");
			
			// delete subscriptions
			$this->registry->db->query_write("
				DELETE FROM " . TABLE_PREFIX . "subscribediscussion 
				WHERE " . TABLE_PREFIX . "subscribediscussion.discussionid = $discussionid
			");
			
			// update moderation count for owner
			update_owner_pending_gm_count($this->info['group']['creatoruserid']);
		
 			($hook = vBulletinHook::fetch_hook('discussiondata_delete')) ? eval($hook) : false;
		}
	}