/**
 * Rebuilds discussion counter info, including first and last post information.
 *
 * @param integer								The id of the discussion
 */
function build_discussion_counters($discussionid)
{
    global $vbulletin;
    if (!($discussionid = intval($discussionid))) {
        return;
    }
    // Get message counters
    $messages = $vbulletin->db->query_first("\n\t\tSELECT\n\t\t\tSUM(IF(state = 'visible', 1, 0)) AS visible,\n\t\t\tSUM(IF(state = 'deleted', 1, 0)) AS deleted,\n\t\t\tSUM(IF(state = 'moderation', 1, 0)) AS moderation\n\t\tFROM " . TABLE_PREFIX . "groupmessage\n\t\tWHERE discussionid = {$discussionid}\n\t");
    // Get last post info
    $lastpost = $vbulletin->db->query_first("\n\t\tSELECT user.username, gm.postuserid, gm.dateline, gm.gmid\n\t\tFROM " . TABLE_PREFIX . "groupmessage AS gm\n\t\tLEFT JOIN " . TABLE_PREFIX . "user AS user ON (user.userid = gm.postuserid)\n\t\tWHERE gm.discussionid = {$discussionid}\n\t\tAND gm.state = 'visible'\n\t\tORDER BY gm.dateline DESC\n\t\tLIMIT 1\n\t");
    $discussion = fetch_socialdiscussioninfo($discussionid);
    $dataman =& datamanager_init('Discussion', $vbulletin, vB_DataManager_Constants::ERRTYPE_ARRAY);
    $dataman->set_existing($discussion);
    if ($lastpost['gmid']) {
        $dataman->set('lastpost', $lastpost['dateline']);
        $dataman->set('lastposter', $lastpost['username']);
        $dataman->set('lastposterid', $lastpost['postuserid']);
        $dataman->set('lastpostid', $lastpost['gmid']);
    }
    $messages['visible'] = $messages['visible'] ? $messages['visible'] : 1;
    $dataman->set('visible', $messages['visible']);
    $dataman->set('deleted', $messages['deleted']);
    $dataman->set('moderation', $messages['moderation']);
    // Legacy Hook 'discussion_build_counters' Removed //
    $dataman->save();
    unset($dataman);
}
/**
 * Sends email notifications for discussions.
 *
 * @param int		$discussion		- The discussion being updated
 * @param int		$messageid		- Id of the message that triggered the update
 * @param string	$postusername	- Optional username displayed on post
 */
function exec_send_sg_notification($discussionid, $gmid = false, $postusername = false)
{
    global $vbulletin;
    if (!$vbulletin->options['enableemail']) {
        return;
    }
    $discussion = fetch_socialdiscussioninfo($discussionid);
    // if there are no subscribers, no need to send notifications
    if (!$discussion['subscribers']) {
        return;
    }
    // if the discussion is moderated or deleted, don't send notification
    if ('deleted' == $discussion['state'] or 'moderation' == $discussion['state']) {
        return;
    }
    $group = fetch_socialgroupinfo($discussion['groupid']);
    if (!$gmid) {
        // get last gmid from discussion
        $gmid = $vbulletin->db->query_first("\n\t\t\tSELECT MAX(gmid) AS gmid\n\t\t\tFROM " . TABLE_PREFIX . "groupmessage AS groupmessage\n\t\t\tWHERE discussionid = {$discussion['discussionid']}\n\t\t\t\tAND state = 'visible'\n\t\t");
        $gmid = $gmid['gmid'];
    }
    // get message details
    $gmessage = fetch_groupmessageinfo($gmid);
    if (!$gmessage) {
        return;
    }
    // get post time of previous message - if a user hasn't been active since then we won't resend a notification
    $lastposttime = ($lastposttime = $vbulletin->db->query_first("\n\t\t\tSELECT MAX(dateline) AS dateline\n\t\t\tFROM " . TABLE_PREFIX . "groupmessage AS groupmessage\n\t\t\tWHERE discussionid = {$discussion['discussionid']}\n\t\t\t\tAND dateline < {$gmessage['dateline']}\n\t\t\t\tAND state = 'visible'\n\t")) ? $lastposttime['dateline'] : $gmessage['dateline'];
    $discussion['title'] = unhtmlspecialchars($discussion['title']);
    $group['name'] = unhtmlspecialchars($group['name']);
    // temporarily use postusername in userinfo
    if (!$postusername) {
        // get current user name if user exists
        if ($gmessage['postuserid'] and $userinfo = fetch_userinfo($gmessage['postuserid'])) {
            $postusername = $userinfo['username'];
        } else {
            $postusername = $gmessage['postusername'];
        }
    }
    $postusername = unhtmlspecialchars($postusername);
    $userid = $gmessage['postuserid'];
    ($hook = vBulletinHook::fetch_hook('newpost_sg_notification_start')) ? eval($hook) : false;
    $useremails = $vbulletin->db->query_read_slave("\n\t\tSELECT user.*, subscribediscussion.emailupdate, subscribediscussion.subscribediscussionid, IF(socialgroupmember.userid IS NOT NULL,1,0) ismember\n\t\tFROM " . TABLE_PREFIX . "subscribediscussion AS subscribediscussion\n\t\tINNER JOIN " . TABLE_PREFIX . "user AS user ON (subscribediscussion.userid = user.userid)\n\t\tLEFT JOIN " . TABLE_PREFIX . "usergroup AS usergroup ON (usergroup.usergroupid = user.usergroupid)\n\t\tLEFT JOIN " . TABLE_PREFIX . "usertextfield AS usertextfield ON (usertextfield.userid = user.userid)\n\t\tLEFT JOIN " . TABLE_PREFIX . "socialgroupmember AS socialgroupmember ON (socialgroupmember.userid = user.userid AND socialgroupmember.groupid = {$group['groupid']})\n\t\tWHERE subscribediscussion.discussionid = {$discussion['discussionid']}\n\t\t AND subscribediscussion.emailupdate = 1\n\t\t AND " . ($gmessage['postuserid'] ? " CONCAT(' ', IF(usertextfield.ignorelist IS NULL, '', usertextfield.ignorelist), ' ') NOT LIKE ' " . intval($userid) . " '" : '') . "\n\t\t AND user.usergroupid <> 3\n\t\t AND user.userid <> " . intval($userid) . "\n\t\t AND user.lastactivity >= " . intval($lastposttime) . "\n\t\t AND (usergroup.genericoptions & " . $vbulletin->bf_ugp_genericoptions['isnotbannedgroup'] . ")\n\t");
    vbmail_start();
    // parser for plaintexting the message pagetext
    require_once DIR . '/includes/class_bbcode_alt.php';
    $plaintext_parser =& new vB_BbCodeParser_PlainText($vbulletin, fetch_tag_list());
    $pagetext_cache = array();
    // used to cache the results per languageid for speed
    $evalemail = array();
    while ($touser = $vbulletin->db->fetch_array($useremails)) {
        // check user can view discussion
        $permissions = cache_permissions($touser, false);
        if (!($vbulletin->usergroupcache["{$touser['usergroupid']}"]['genericoptions'] & $vbulletin->bf_ugp_genericoptions['isnotbannedgroup']) or !($permissions['forumpermissions'] & $vbulletin->bf_ugp_forumpermissions['canview']) or !($permissions['socialgrouppermissions'] & $vbulletin->bf_ugp_socialgrouppermissions['canviewgroups']) or $group['options'] & $vbulletin->bf_misc_socialgroupoptions['join_to_view'] and !$touser['ismember'] and !($permissions['socialgrouppermissions'] & $vbulletin->bf_ugp_socialgrouppermissions['canalwayscreatediscussion']) and !($permissions['socialgrouppermissions'] & $vbulletin->bf_ugp_socialgrouppermissions['canalwayspostmessage'])) {
            continue;
        }
        $touser['username'] = unhtmlspecialchars($touser['username']);
        $touser['languageid'] = iif($touser['languageid'] == 0, $vbulletin->options['languageid'], $touser['languageid']);
        $touser['auth'] = md5($touser['userid'] . $touser['subscribediscussionid'] . $touser['salt'] . COOKIE_SALT);
        if (empty($evalemail)) {
            $email_texts = $vbulletin->db->query_read_slave("\n\t\t\t\tSELECT text, languageid, fieldname\n\t\t\t\tFROM " . TABLE_PREFIX . "phrase\n\t\t\t\tWHERE fieldname IN ('emailsubject', 'emailbody') AND varname = 'notify_discussion'\n\t\t\t");
            while ($email_text = $vbulletin->db->fetch_array($email_texts)) {
                $emails["{$email_text['languageid']}"]["{$email_text['fieldname']}"] = $email_text['text'];
            }
            require_once DIR . '/includes/functions_misc.php';
            foreach ($emails as $languageid => $email_text) {
                // lets cycle through our array of notify phrases
                $text_message = str_replace("\\'", "'", addslashes(iif(empty($email_text['emailbody']), $emails['-1']['emailbody'], $email_text['emailbody'])));
                $text_message = replace_template_variables($text_message);
                $text_subject = str_replace("\\'", "'", addslashes(iif(empty($email_text['emailsubject']), $emails['-1']['emailsubject'], $email_text['emailsubject'])));
                $text_subject = replace_template_variables($text_subject);
                $evalemail["{$languageid}"] = '
					$message = "' . $text_message . '";
					$subject = "' . $text_subject . '";
				';
            }
        }
        // parse the page text into plain text, taking selected language into account
        if (!isset($pagetext_cache["{$touser['languageid']}"])) {
            $plaintext_parser->set_parsing_language($touser['languageid']);
            $pagetext_cache["{$touser['languageid']}"] = $plaintext_parser->parse($gmessage['pagetext']);
        }
        $pagetext = $pagetext_cache["{$touser['languageid']}"];
        ($hook = vBulletinHook::fetch_hook('new_sg_message_notification_message')) ? eval($hook) : false;
        eval(iif(empty($evalemail["{$touser['languageid']}"]), $evalemail["-1"], $evalemail["{$touser['languageid']}"]));
        vbmail($touser['email'], $subject, $message);
    }
    $vbulletin->db->free_result($useremails);
    unset($plaintext_parser, $pagetext_cache);
    vbmail_end();
}
예제 #3
0
 // Remove approval if we are viewing deleted
 if ($type == 'deleted') {
     $show['approve'] = false;
 } else {
     if ($type != 'new') {
         $show['undelete'] = false;
         $show['unapprove'] = false;
     }
 }
 // Create bit factory
 $bitfactory = new vB_Group_Bit_Factory($vbulletin, $itemtype);
 // Build message bits for all items
 $messagebits = '';
 while ($item = $collection->fetch_item()) {
     if (!$do_discussions) {
         $discussion = fetch_socialdiscussioninfo($item['discussionid']);
         $group = fetch_socialgroupinfo($discussion['groupid']);
     } else {
         $group = fetch_socialgroupinfo($item['groupid']);
     }
     // add group name to message
     $group['name'] = fetch_word_wrapped_string(fetch_censored_text($group['name']));
     // force items to be visible
     if ('new' != $type) {
         $item['state'] = 'visible';
     }
     $bit =& $bitfactory->create($item, $group);
     $messagebits .= $bit->construct();
 }
 unset($bitfactory, $bit);
 // Set counts for view
예제 #4
0
                $vbulletin->url = fetch_seo_url('group', $messagearray[$args['gmid']], 'groupid', 'group_name');
            }
        }
    }
    ($hook = vBulletinHook::fetch_hook('group_inlinemod_dodelete')) ? eval($hook) : false;
    $redirect_message = $inline_discussion ? 'redirect_inline_deleteddiscussions' : 'redirect_inline_deletedmessages';
    print_standard_redirect($redirect_message, true, $forceredirect);
}
// #######################################################################
if ($_POST['do'] == 'inlineundelete') {
    // Validate Messages
    $messages = $inline_discussion ? verify_discussions($messageids, false, false, true) : verify_messages($messageids, false, false, true);
    require_once DIR . '/vb/search/indexcontroller/queue.php';
    if ($messages) {
        while ($message = $db->fetch_array($messages)) {
            $discussion = fetch_socialdiscussioninfo($message['discussionid']);
            $group = fetch_socialgroupinfo($discussion['groupid']);
            $message['is_group_owner'] = $group['creatoruserid'] == $vbulletin->userinfo['userid'];
            if ($message['gmid'] == $discussion['firstpostid']) {
                if (!fetch_socialgroup_modperm('canundeletediscussions')) {
                    standard_error(fetch_error('you_do_not_have_permission_to_manage_deleted_discussions'));
                }
                $message['firstpost'] = true;
            } else {
                if (!fetch_socialgroup_modperm('canundeletegroupmessages', $group)) {
                    standard_error(fetch_error('you_do_not_have_permission_to_manage_deleted_messages'));
                }
                $message['firstpost'] = false;
            }
            $message['group_name'] = $group['name'];
            $message['discussion_name'] = $discussion['title'];
예제 #5
0
 /**
  * Sets up different display variables for the Group Message
  *
  * @access protected
  */
 function process_display()
 {
     global $show;
     $this->discussion = fetch_socialdiscussioninfo($this->item['discussionid']);
     $this->group = fetch_socialgroupinfo($this->discussion['groupid']);
     $this->item['is_discussion'] = $this->item['gmid'] == $this->discussion['firstpostid'];
     $show['moderation'] = $this->item['state'] == 'moderation';
     if ($this->show_moderation_tools and !$this->force_inline_selection) {
         if ($this->item['is_discussion']) {
             $this->item['inlinemod'] = (($this->item['state'] != 'moderation' or fetch_socialgroup_modperm('canmoderatediscussions', $this->group)) and ($this->item['state'] != 'deleted' or fetch_socialgroup_modperm('canundeletediscussions', $this->group)) and (fetch_socialgroup_modperm('canmoderatediscussions') or fetch_socialgroup_modperm('candeletediscussions', $this->group) or fetch_socialgroup_modperm('canremovediscussions', $this->group)));
         } else {
             $this->item['inlinemod'] = (($this->item['state'] != 'deleted' or fetch_socialgroup_modperm('canundeletegroupmessages', $this->group)) and ($this->item['state'] != 'moderated' or fetch_socialgroup_modperm('canmoderategroupmessages', $this->group)) and (fetch_socialgroup_modperm('canmoderategroupmessages', $this->group) or fetch_socialgroup_modperm('canundeletegroupmessages', $this->group) or fetch_socialgroup_modperm('canremovegroupmessages', $this->group)));
         }
     } else {
         $this->item['inlinemod'] = $this->force_inline_selection;
     }
     if ($this->show_moderation_tools) {
         if ($this->item['is_discussion']) {
             $this->item['edit'] = (can_edit_group_discussion($this->discussion) or can_edit_group_message($this->item, $this->group));
         } else {
             $this->item['edit'] = can_edit_group_message($this->item, $this->group);
         }
     } else {
         $show['edit'] = $this->item['edit'] = false;
     }
     // legacy
     $show['inlinemod'] = $this->item['inlinemod'];
     $show['edit'] = $this->item['edit'];
 }
예제 #6
0
 public function report_item($reason)
 {
     require_once DIR . '/includes/functions_socialgroup.php';
     $discussion = fetch_socialdiscussioninfo($this->item['discussionid']);
     $group = fetch_socialgroupinfo($discussion['groupid']);
     require_once DIR . '/includes/class_reportitem.php';
     $reportobj = new vB_ReportItem_GroupMessage($vbulletin);
     $reportobj->set_extrainfo('group', $group);
     $reportobj->set_extrainfo('discussion', $discussion);
     $reportobj->do_report($reason, $this->item);
 }