function ipb_send_pm($ipb_sender = 0, $ipb_recepient, $ipb_subject, $ipb_msg, $system = false) { global $ipb_prefix, $THIS_BASEPATH, $btit_settings, $TABLE_PREFIX, $registry; if ($ipb_sender == 0) { $system = true; if (isset($btit_settings["ipb_autoposter"]) && $btit_settings["ipb_autoposter"] != 0) { $ipb_sender = (int) (0 + $btit_settings["ipb_autoposter"]); } else { return false; } $get = get_result("SELECT `ipb_fid` `recipient` FROM `{$TABLE_PREFIX}users` WHERE `id`=" . $ipb_recepient); } else { $get = get_result("SELECT (SELECT `ipb_fid` FROM `{$TABLE_PREFIX}users` WHERE `id`=" . $ipb_sender . ") `sender`, (SELECT `ipb_fid` FROM `{$TABLE_PREFIX}users` WHERE `id`=" . $ipb_recepient . ") `recipient`"); $ipb_sender = (int) (0 + $get[0]["sender"]); } $ipb_recepient = (int) (0 + $get[0]["recipient"]); if ($ipb_sender == 0 || $ipb_recepient == 0 || $ipb_sender == $ipb_recipient) { // Something is not right. fail return false; } if (!isset($THIS_BASEPATH) || empty($THIS_BASEPATH)) { $THIS_BASEPATH = str_replace(array("\\", "/include"), array("/", ""), dirname(__FILE__)); } if (!defined('IPS_ENFORCE_ACCESS')) { define('IPS_ENFORCE_ACCESS', true); } if (!defined('IPB_THIS_SCRIPT')) { define('IPB_THIS_SCRIPT', 'public'); } if (!isset($registry) || empty($registry)) { require_once $THIS_BASEPATH . '/ipb/initdata.php'; require_once IPS_ROOT_PATH . 'sources/base/ipsRegistry.php'; require_once IPS_ROOT_PATH . 'sources/base/ipsController.php'; $registry = ipsRegistry::instance(); $registry->init(); } require_once IPSLib::getAppDir('members') . '/sources/classes/messaging/messengerFunctions.php'; $clean_subj = trim($ipb_subject, "'"); $clean_post = trim($ipb_msg, "'"); $classMessage = new messengerFunctions($registry); // Reciever, Sender, array of other users to invite (Display Name), Subject, Message, Is system message $classMessage->sendNewPersonalTopic($ipb_recepient, $ipb_sender, array(), $clean_subj, $clean_post, $system === true ? array("isSystem" => true, "forcePm" => 1) : array("forcePm" => 1)); }
/** * Add a new arn entry * * @access private * @return void [Outputs to screen/redirects] */ private function _doWarn() { //----------------------------------------- // INIT //----------------------------------------- $save = array(); $err = 0; $topicPosts_type = trim($this->request['topicPosts_type']); $topicPosts_topics = intval($this->request['topicPosts_topics']); $topicPosts_replies = intval($this->request['topicPosts_replies']); $topicPosts_lastx = intval($this->request['topicPosts_lastx']); $topicPosts_lastxunits = trim($this->request['topicPosts_lastxunits']); $level_custom = intval($this->request['level_custom']); $ban_indef = intval($this->request['ban_indef']); $member_banned = intval($this->warn_member['member_banned']); $warn_level = intval($this->warn_member['warn_level']); //----------------------------------------- // Load Mod Squad //----------------------------------------- require_once IPSLib::getAppDir('forums') . '/sources/classes/moderate.php'; $moderatorLibrary = new moderatorLibrary($this->registry); //----------------------------------------- // Security checks //----------------------------------------- if ($this->type == 'member') { $this->registry->output->showError('warn_member_notes', 2028); } //----------------------------------------- // Check security fang //----------------------------------------- if ($this->request['key'] != $this->member->form_hash) { $this->registry->output->showError('warn_bad_key', 3020); } //----------------------------------------- // As Celine Dion once squawked, "Show me the reason" //----------------------------------------- if (trim($this->request['reason']) == "") { $this->_showForm('we_no_reason'); return; } //----------------------------------------- // Other checks //----------------------------------------- if (!$this->settings['warn_past_max'] && $this->request['level'] != 'nochange') { if ($this->request['level'] == 'custom') { if ($level_custom > $this->settings['warn_max']) { $err = 1; } else { if ($level_custom < $this->settings['warn_min']) { $err = 2; } } } else { if ($this->request['level'] == 'add') { if ($warn_level >= $this->settings['warn_max']) { $err = 1; } } else { if ($warn_level <= $this->settings['warn_min']) { $err = 2; } } } if ($err) { $this->registry->output->showError($err == 1 ? 'warn_past_max_high' : 'warn_past_max_low', 10251); } } //----------------------------------------- // Plussy - minussy? //----------------------------------------- if ($this->request['level'] == 'nochange') { $save['wlog_type'] = 'nochan'; } else { $save['wlog_type'] = $this->request['level'] == 'custom' ? 'custom' : ($this->request['level'] == 'add' ? 'neg' : 'pos'); } $save['wlog_date'] = time(); //----------------------------------------- // Contacting the member? //----------------------------------------- $test_content = trim(IPSText::br2nl($_POST['contact'])); if ($test_content != "") { if (trim($this->request['subject']) == "") { $this->_showForm('we_no_subject'); return; } unset($test_content); if (IPSText::getTextClass('editor')->method == 'rte') { $this->request['contact'] = IPSText::getTextClass('editor')->processRawPost('contact'); } IPSText::getTextClass('bbcode')->parse_smilies = 1; IPSText::getTextClass('bbcode')->parse_html = 0; IPSText::getTextClass('bbcode')->parse_bbcode = 1; IPSText::getTextClass('bbcode')->parsing_section = 'warn'; $save['wlog_contact'] = $this->request['contactmethod']; $save['wlog_contact_content'] = "<subject>" . $this->request['subject'] . "</subject><content>" . $this->request['contact'] . "</content>"; $save['wlog_contact_content'] = IPSText::getTextClass('bbcode')->preDbParse($save['wlog_contact_content']); if ($this->request['contactmethod'] == 'email') { IPSText::getTextClass('bbcode')->parse_smilies = 0; IPSText::getTextClass('bbcode')->parse_html = 1; IPSText::getTextClass('bbcode')->parse_bbcode = 1; IPSText::getTextClass('bbcode')->parsing_section = 'warn'; IPSText::getTextClass('bbcode')->parsing_mgroup = $this->memberData['member_group_id']; IPSText::getTextClass('bbcode')->parsing_mgroup_others = $this->memberData['mgroup_others']; $this->request['contact'] = IPSText::getTextClass('bbcode')->preDisplayParse(IPSText::getTextClass('bbcode')->preDbParse($this->request['contact'])); //----------------------------------------- // Send the email //----------------------------------------- IPSText::getTextClass('email')->getTemplate("email_member"); IPSText::getTextClass('email')->buildMessage(array('MESSAGE' => IPSText::br2nl($this->request['contact']), 'MEMBER_NAME' => $this->warn_member['members_display_name'], 'FROM_NAME' => $this->memberData['members_display_name'])); IPSText::getTextClass('email')->subject = $this->request['subject']; IPSText::getTextClass('email')->to = $this->warn_member['email']; IPSText::getTextClass('email')->from = $this->settings['email_out']; IPSText::getTextClass('email')->sendMail(); } else { //----------------------------------------- // Grab PM class //----------------------------------------- require_once IPSLib::getAppDir('members') . '/sources/classes/messaging/messengerFunctions.php'; $messengerFunctions = new messengerFunctions($this->registry); try { $messengerFunctions->sendNewPersonalTopic($this->warn_member['member_id'], $this->memberData['member_id'], array(), $this->request['subject'], IPSText::getTextClass('editor')->method == 'rte' ? nl2br($_POST['contact']) : $_POST['contact'], array('origMsgID' => 0, 'fromMsgID' => 0, 'postKey' => md5(microtime()), 'trackMsg' => 0, 'addToSentFolder' => 0, 'hideCCUser' => 0, 'forcePm' => 1)); } catch (Exception $error) { $msg = $error->getMessage(); $toMember = IPSMember::load($this->warn_member['member_id'], 'core'); if (strstr($msg, 'BBCODE_')) { $msg = str_replace('BBCODE_', '', $msg); $this->registry->output->showError($msg, 10252); } else { if (isset($this->lang->words['err_' . $msg])) { $this->lang->words['err_' . $msg] = $this->lang->words['err_' . $msg]; $this->lang->words['err_' . $msg] = str_replace('#NAMES#', implode(",", $messengerFunctions->exceptionData), $this->lang->words['err_' . $msg]); $this->lang->words['err_' . $msg] = str_replace('#TONAME#', $toMember['members_display_name'], $this->lang->words['err_' . $msg]); $this->lang->words['err_' . $msg] = str_replace('#FROMNAME#', $this->memberData['members_display_name'], $this->lang->words['err_' . $msg]); $this->registry->output->showError('err_' . $msg, 10253); } else { if ($msg != 'CANT_SEND_TO_SELF') { $_msgString = $this->lang->words['err_UNKNOWN'] . ' ' . $msg; $this->registry->output->showError($_msgString, 10254); } } } } } } else { unset($test_content); } //----------------------------------------- // Right - is we banned or wha? //----------------------------------------- $restrict_post = ''; $mod_queue = ''; $susp = ''; $_notes = array(); $_notes['content'] = $this->request['reason']; $_notes['mod'] = $this->request['mod_value']; $_notes['post'] = $this->request['post_value']; $_notes['susp'] = $this->request['susp_value']; $_notes['ban'] = $ban_indef; $_notes['topicPosts_type'] = $topicPosts_type; $_notes['topicPosts_topics'] = $topicPosts_topics; $_notes['topicPosts_replies'] = $topicPosts_replies; $_notes['topicPosts_lastx'] = $topicPosts_lastx; $_notes['topicPosts_lastxunits'] = $topicPosts_lastxunits; $save['wlog_notes'] = serialize($_notes); //----------------------------------------- // Member Content //----------------------------------------- if ($topicPosts_type == 'unapprove' or $topicPosts_type == 'approve') { $time = $topicPosts_lastxunits == 'd' ? $topicPosts_lastx * 24 : $topicPosts_lastx; $approve = $topicPosts_type == 'approve' ? TRUE : FALSE; if ($topicPosts_topics and $this->canApproveTopics and ($topicPosts_replies and $this->canApprovePosts)) { $moderatorLibrary->toggleApproveMemberContent($this->warn_member['member_id'], $approve, 'all', $time); } else { if ($topicPosts_topics and $this->canApproveTopics) { $moderatorLibrary->toggleApproveMemberContent($this->warn_member['member_id'], $approve, 'topics', $time); } else { if ($topicPosts_replies and $this->canApprovePosts) { $moderatorLibrary->toggleApproveMemberContent($this->warn_member['member_id'], $approve, 'replies', $time); } } } } else { if ($topicPosts_type == 'delete') { $time = $topicPosts_lastxunits == 'd' ? $topicPosts_lastx * 24 : $topicPosts_lastx; if ($topicPosts_topics and $this->canDeleteTopics and ($topicPosts_replies and $this->canDeletePosts)) { $moderatorLibrary->deleteMemberContent($this->warn_member['member_id'], 'all', $time); } else { if ($topicPosts_topics and $this->canDeleteTopics) { $moderatorLibrary->deleteMemberContent($this->warn_member['member_id'], 'topics', $time); } else { if ($topicPosts_replies and $this->canDeletePosts) { $moderatorLibrary->deleteMemberContent($this->warn_member['member_id'], 'replies', $time); } } } } } //----------------------------------------- // Member Suspension //----------------------------------------- if ($this->canModQueue) { if ($this->request['mod_indef'] == 1) { $mod_queue = 1; } elseif ($this->request['mod_value'] > 0) { $mod_queue = IPSMember::processBanEntry(array('timespan' => intval($this->request['mod_value']), 'unit' => $this->request['mod_unit'])); } } if ($this->canRemovePostAbility) { if ($this->request['post_indef'] == 1) { $restrict_post = 1; } elseif ($this->request['post_value'] > 0) { $restrict_post = IPSMember::processBanEntry(array('timespan' => intval($this->request['post_value']), 'unit' => $this->request['post_unit'])); } } if ($this->canSuspend) { if ($ban_indef) { $member_banned = 1; } else { if ($this->request['susp_value'] > 0) { $susp = IPSMember::processBanEntry(array('timespan' => intval($this->request['susp_value']), 'unit' => $this->request['susp_unit'])); } } /* Were banned but now unticked? */ if (!$ban_indef and $member_banned) { $member_banned = 0; } } $save['wlog_mid'] = $this->warn_member['member_id']; $save['wlog_addedby'] = $this->memberData['member_id']; //----------------------------------------- // Enter into warn loggy poos (eeew - poo) //----------------------------------------- $this->DB->insert('warn_logs', $save); //----------------------------------------- // Update member //----------------------------------------- if ($this->request['level'] != 'nochange') { if ($this->request['level'] == 'custom') { $warn_level = $level_custom; } else { if ($this->request['level'] == 'add') { $warn_level++; } else { $warn_level--; } } if ($warn_level > $this->settings['warn_max']) { $warn_level = $this->settings['warn_max']; } if ($warn_level < intval($this->settings['warn_min'])) { $warn_level = intval($this->settings['warn_min']); } } IPSMember::save($this->warn_member['member_id'], array('core' => array('mod_posts' => $mod_queue, 'restrict_post' => $restrict_post, 'temp_ban' => $susp, 'member_banned' => $member_banned, 'warn_level' => $warn_level, 'warn_lastwarn' => time()))); //----------------------------------------- // Now what? Show success screen, that's what!! //----------------------------------------- $this->lang->words['w_done_te'] = sprintf($this->lang->words['w_done_te'], $this->warn_member['members_display_name']); $tid = intval($this->request['t']); $topic = array(); if ($tid > 0) { $topic = $this->DB->buildAndFetch(array('select' => 't.tid, t.title, t.title_seo', 'from' => array('topics' => 't'), 'where' => "t.tid={$tid}", 'add_join' => array(array('select' => 'f.id, f.name, f.name_seo', 'from' => array('forums' => 'f'), 'where' => 'f.id=t.forum_id', 'type' => 'left')))); } $this->output .= $this->registry->getClass('output')->getTemplate('mod')->warn_success($topic); }