/** * Sends the reply notification to users subscribed to this issue. * * @param array Info about this issue * @param array Info about this note (including text) */ function send_issue_reply_notification($issue, $issuenote) { global $vbulletin, $db, $vbphrase; if ($issuenote['type'] != 'user' and $issuenote['type'] != 'petition') { // only send if the note is a "normal" note type return; } $project = fetch_project_info($issue['projectid']); $previousnote = $db->query_first("\r\n\t\tSELECT MAX(dateline) AS dateline\r\n\t\tFROM " . TABLE_PREFIX . "pt_issuenote AS issuenote\r\n\t\tWHERE issuenote.issueid = {$issue['issueid']}\r\n\t\t\tAND issuenote.dateline < {$issuenote['dateline']}\r\n\t\t\tAND issuenote.visible = 'visible'\r\n\t\t\tAND issuenote.type IN ('user', 'petition')\r\n\t"); $notifications = $db->query_read_slave("\r\n\t\tSELECT user.*\r\n\t\tFROM " . TABLE_PREFIX . "pt_issuesubscribe AS issuesubscribe\r\n\t\tINNER JOIN " . TABLE_PREFIX . "user AS user ON (issuesubscribe.userid = user.userid)\r\n\t\tLEFT JOIN " . TABLE_PREFIX . "usergroup AS usergroup ON (usergroup.usergroupid = user.usergroupid)\r\n\t\tLEFT JOIN " . TABLE_PREFIX . "usertextfield AS usertextfield ON (usertextfield.userid = user.userid)\r\n\t\tWHERE issuesubscribe.issueid = {$issue['issueid']}\r\n\t\t\tAND issuesubscribe.subscribetype = 'instant'\r\n\t\t\tAND (usergroup.genericoptions & " . $vbulletin->bf_ugp_genericoptions['isnotbannedgroup'] . ")\r\n\t\t\t" . ($issuenote['userid'] ? "AND CONCAT(' ', IF(usertextfield.ignorelist IS NULL, '', usertextfield.ignorelist), ' ') NOT LIKE ' " . intval($issuenote['userid']) . " '" : '') . "\r\n\t\t\tAND user.userid <> {$issuenote['userid']}\r\n\t\t\tAND user.lastactivity >= " . intval($previousnote['dateline']) . "\r\n\t"); if ($db->num_rows($notifications) == 0) { return; } require_once DIR . '/includes/functions_misc.php'; 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(); $email_texts = $vbulletin->db->query_read_slave("\r\n\t\tSELECT text, languageid, fieldname\r\n\t\tFROM " . TABLE_PREFIX . "phrase\r\n\t\tWHERE fieldname IN ('emailsubject', 'emailbody') AND varname = 'notify_pt'\r\n\t"); while ($email_text = $vbulletin->db->fetch_array($email_texts)) { $emails["{$email_text['languageid']}"]["{$email_text['fieldname']}"] = $email_text['text']; } 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 . '"; '; } vbmail_start(); while ($notification = $vbulletin->db->fetch_array($notifications)) { // check that this user has the correct permissions to view if (verify_issue_perms($issue, $notification) === false or verify_issue_note_perms($issue, $issuenote, $notification) === false) { continue; } $notification['username'] = unhtmlspecialchars($notification['username']); $notification['languageid'] = iif($notification['languageid'] == 0, $vbulletin->options['languageid'], $notification['languageid']); // parse the page text into plain text, taking selected language into account if (!isset($pagetext_cache["{$notification['languageid']}"])) { $plaintext_parser->set_parsing_language($notification['languageid']); $pagetext_cache["{$notification['languageid']}"] = $plaintext_parser->parse($issuenote['pagetext'], 'pt'); } $pagetext = $pagetext_cache["{$notification['languageid']}"]; eval(empty($evalemail["{$notification['languageid']}"]) ? $evalemail["-1"] : $evalemail["{$notification['languageid']}"]); vbmail($notification['email'], $subject, $message); } unset($plaintext_parser, $pagetext_cache); vbmail_end(); }
/** * Fetches the moderators affected by this report * * @return null|array The moderators affected. * */ function fetch_affected_moderators() { $projectid = $this->extrainfo['issue']['projectid']; $issuetypeid = $this->extrainfo['issue']['issuetypeid']; if (isset($this->registry->pt_report_users) and !empty($this->registry->pt_report_users[$projectid]) and !empty($this->registry->pt_report_users[$projectid][$issuetypeid])) { $users = $this->registry->pt_report_users[$projectid][$issuetypeid]; if (empty($users)) { return; } $users_check = $this->registry->db->query_read_slave("\r\n\t\t\t\tSELECT userid, usergroupid, membergroupids, infractiongroupids\r\n\t\t\t\tFROM " . TABLE_PREFIX . "user AS user\r\n\t\t\t\tWHERE userid IN (" . implode(',', array_keys($users)) . ")\r\n\t\t\t"); while ($user_check = $this->registry->db->fetch_array($users_check)) { // check that the user can actually see the state in order to do something with it. if (!verify_issue_note_perms($this->extrainfo['issue'], $this->extrainfo['issue_note'], $user_check)) { unset($users[$user_check['userid']]); } } if (!empty($users)) { return $this->registry->db->query_read_slave("\r\n\t\t\t\t\tSELECT DISTINCT user.email, user.languageid, user.userid, user.username\r\n\t\t\t\t\tFROM " . TABLE_PREFIX . "user AS user\r\n\t\t\t\t\tWHERE userid IN (" . implode(',', array_keys($users)) . ")\r\n\t\t\t\t"); } } }
eval(standard_error(fetch_error('emaildisabled'))); } $userinfo = fetch_userinfo($issuenote['userid']); $reportobj =& new vB_ReportItem_Pt_IssueNote($vbulletin); $reportobj->set_extrainfo('user', $userinfo); $reportobj->set_extrainfo('issue', $issue); $reportobj->set_extrainfo('issue_note', $issuenote); $reportobj->set_extrainfo('project', $project); $perform_floodcheck = $reportobj->need_floodcheck(); if ($perform_floodcheck) { $reportobj->perform_floodcheck_precommit(); } if (!$issuenote or $issuenote['type'] != 'user' and $issuenote['type'] != 'petition') { eval(standard_error(fetch_error('invalidid', $vbphrase['message'], $vbulletin->options['contactuslink']))); } if (!verify_issue_note_perms($issue, $issuenote, $vbulletin->userinfo)) { eval(standard_error(fetch_error('invalidid', $vbphrase['issue_note'], $vbulletin->options['contactuslink']))); } ($hook = vBulletinHook::fetch_hook('project_report_start')) ? eval($hook) : false; if ($_REQUEST['do'] == 'report') { $navbits = array('project.php' . $vbulletin->session->vars['sessionurl_q'] => $vbphrase['projects'], "project.php?" . $vbulletin->session->vars['sessionurl'] . "projectid={$project['projectid']}" => $project['title_clean'], 'project.php?' . $vbulletin->session->vars['sessionurl'] . "issueid={$issue['issueid']}" => $issue['title'], '' => $vbphrase['report_issue_note']); $navbits = construct_navbits($navbits); require_once DIR . '/includes/functions_editor.php'; $textareacols = fetch_textarea_width(); eval('$usernamecode = "' . fetch_template('newpost_usernamecode') . '";'); eval('$navbar = "' . fetch_template('navbar') . '";'); $url =& $vbulletin->url; ($hook = vBulletinHook::fetch_hook('project_report_form_start')) ? eval($hook) : false; $forminfo = $reportobj->set_forminfo($issuenote); eval('print_output("' . fetch_template('reportitem') . '");'); }