/** * 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(); }
// 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
$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'];
/** * 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']; }
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); }