Zeile 6 | Zeile 6 |
---|
* Website: http://mybb.com * License: http://mybb.com/about/license *
|
* Website: http://mybb.com * License: http://mybb.com/about/license *
|
* $Id: pm.php 5756 2012-03-09 15:05:12Z Tomm $
| * $Id$
|
*/
// Disallow direct access to this file for security reasons
| */
// Disallow direct access to this file for security reasons
|
Zeile 34 | Zeile 34 |
---|
* @var string */ public $language_prefix = 'pmdata';
|
* @var string */ public $language_prefix = 'pmdata';
|
|
|
/** * Array of data inserted in to a private message. * * @var array */ public $pm_insert_data = array();
|
/** * Array of data inserted in to a private message. * * @var array */ public $pm_insert_data = array();
|
|
|
/** * Array of data used to update a private message. * * @var array */ public $pm_update_data = array();
|
/** * Array of data used to update a private message. * * @var array */ public $pm_update_data = array();
|
|
|
/** * PM ID currently being manipulated by the datahandlers. */
|
/** * PM ID currently being manipulated by the datahandlers. */
|
public $pmid = 0;
| public $pmid = 0;
|
/** * Verifies a private message subject.
| /** * Verifies a private message subject.
|
Zeile 62 | Zeile 62 |
---|
function verify_subject() { $subject = &$this->data['subject'];
|
function verify_subject() { $subject = &$this->data['subject'];
|
| $subject = utf8_handle_4byte_string($subject);
|
// Subject is over 85 characters, too long. if(my_strlen($subject) > 85) { $this->set_error("too_long_subject");
|
// Subject is over 85 characters, too long. if(my_strlen($subject) > 85) { $this->set_error("too_long_subject");
|
return false;
| return false;
|
} // No subject, apply the default [no subject] if(!trim_blank_chrs($subject))
| } // No subject, apply the default [no subject] if(!trim_blank_chrs($subject))
|
Zeile 86 | Zeile 88 |
---|
function verify_message() { $message = &$this->data['message'];
|
function verify_message() { $message = &$this->data['message'];
|
| $message = utf8_handle_4byte_string($message);
|
// No message, return an error. if(trim_blank_chrs($message) == '')
| // No message, return an error. if(trim_blank_chrs($message) == '')
|
Zeile 162 | Zeile 166 |
---|
if(!is_array($pm[$recipient_type])) { $pm[$recipient_type] = array($pm[$recipient_type]);
|
if(!is_array($pm[$recipient_type])) { $pm[$recipient_type] = array($pm[$recipient_type]);
|
} foreach($pm[$recipient_type] as $username) { $username = trim($username); if(empty($username)) { continue; } // Check that this recipient actually exists $query = $db->simple_select("users", "*", "username='".$db->escape_string($username)."'"); $user = $db->fetch_array($query); if($recipient_type == "bcc") { $user['bcc'] = 1; } if($user['uid']) { $recipients[] = $user;
| }
$recipientUsernames = array_map('trim', $pm[$recipient_type]); $recipientUsernames = array_filter($recipientUsernames); $recipientUsernames = array_map(array($db, 'escape_string'), $recipientUsernames); $recipientUsernames = "'".implode("','", $recipientUsernames)."'";
$query = $db->simple_select('users', '*', 'username IN('.$recipientUsernames.')');
$validUsernames = array();
while ($user = $db->fetch_array($query)) { if ($recipient_type == "bcc") { $user['bcc'] = 1;
|
}
|
}
|
else {
| $recipients[] = $user; $validUsernames[] = $user['username']; }
foreach ($pm[$recipient_type] as $username) { if (!in_array($username, $validUsernames) AND trim($username)) {
|
$invalid_recipients[] = $username; } }
| $invalid_recipients[] = $username; } }
|
Zeile 200 | Zeile 205 |
---|
} if(is_array($pm[$recipient_type])) {
|
} if(is_array($pm[$recipient_type])) {
|
foreach($pm[$recipient_type] as $uid) { // Check that this recipient actually exists $query = $db->simple_select("users", "*", "uid='".intval($uid)."'"); $user = $db->fetch_array($query); if($recipient_type == "bccid") {
| $recipientUids = array_map('intval', $pm[$recipient_type]); $recipientUids = array_filter($recipientUids); $recipientUids = "'".implode("','", $recipientUids)."'";
$query = $db->simple_select('users', '*', 'uid IN('.$recipientUids.')');
$validUids = array();
while ($user = $db->fetch_array($query)) { if ($recipient_type == "bcc") {
|
$user['bcc'] = 1; }
|
$user['bcc'] = 1; }
|
if($user['uid']) { $recipients[] = $user; } else {
| $recipients[] = $user; $validUids[] = $user['uid']; }
foreach ($pm[$recipient_type] as $uid) { if (!in_array($uid, $validUids) AND trim($uid)) {
|
$invalid_recipients[] = $uid; } }
| $invalid_recipients[] = $uid; } }
|
Zeile 228 | Zeile 237 |
---|
$invalid_recipients = implode(", ", array_map("htmlspecialchars_uni", $invalid_recipients)); $this->set_error("invalid_recipients", array($invalid_recipients)); return false;
|
$invalid_recipients = implode(", ", array_map("htmlspecialchars_uni", $invalid_recipients)); $this->set_error("invalid_recipients", array($invalid_recipients)); return false;
|
}
$sender_permissions = user_permissions($pm['fromid']);
| }
$sender_permissions = user_permissions($pm['fromid']);
|
// Are we trying to send this message to more users than the permissions allow? if($sender_permissions['maxpmrecipients'] > 0 && count($recipients) > $sender_permissions['maxpmrecipients'] && $this->admin_override != true) { $this->set_error("too_many_recipients", array($sender_permissions['maxpmrecipients'])); }
|
// Are we trying to send this message to more users than the permissions allow? if($sender_permissions['maxpmrecipients'] > 0 && count($recipients) > $sender_permissions['maxpmrecipients'] && $this->admin_override != true) { $this->set_error("too_many_recipients", array($sender_permissions['maxpmrecipients'])); }
|
|
|
// Now we're done with that we loop through each recipient foreach($recipients as $user) { // Collect group permissions for this recipient. $recipient_permissions = user_permissions($user['uid']);
|
// Now we're done with that we loop through each recipient foreach($recipients as $user) { // Collect group permissions for this recipient. $recipient_permissions = user_permissions($user['uid']);
|
|
|
// See if the sender is on the recipients ignore list and that either // - admin_override is set or // - sender is an administrator
| // See if the sender is on the recipients ignore list and that either // - admin_override is set or // - sender is an administrator
|
Zeile 254 | Zeile 263 |
---|
{ $this->set_error("recipient_is_ignoring", array($user['username'])); }
|
{ $this->set_error("recipient_is_ignoring", array($user['username'])); }
|
|
|
// Is the recipient only allowing private messages from their buddy list? if($mybb->settings['allowbuddyonly'] == 1 && $user['receivefrombuddy'] == 1) {
| // Is the recipient only allowing private messages from their buddy list? if($mybb->settings['allowbuddyonly'] == 1 && $user['receivefrombuddy'] == 1) {
|
Zeile 264 | Zeile 273 |
---|
$this->set_error("recipient_has_buddy_only", array(htmlspecialchars_uni($user['username']))); } }
|
$this->set_error("recipient_has_buddy_only", array(htmlspecialchars_uni($user['username']))); } }
|
|
|
// Can the recipient actually receive private messages based on their permissions or user setting? if(($user['receivepms'] == 0 || $recipient_permissions['canusepms'] == 0) && !$pm['saveasdraft']) { $this->set_error("recipient_pms_disabled", array($user['username'])); return false;
|
// Can the recipient actually receive private messages based on their permissions or user setting? if(($user['receivepms'] == 0 || $recipient_permissions['canusepms'] == 0) && !$pm['saveasdraft']) { $this->set_error("recipient_pms_disabled", array($user['username'])); return false;
|
} }
| } }
|
// Check to see if the user has reached their private message quota - if they have, email them. if($recipient_permissions['pmquota'] != "0" && $user['totalpms'] >= $recipient_permissions['pmquota'] && $recipient_permissions['cancp'] != 1 && $sender_permissions['cancp'] != 1 && !$pm['saveasdraft'] && !$this->admin_override) { if(trim($user['language']) != '' && $lang->language_exists($user['language'])) { $uselang = trim($user['language']);
|
// Check to see if the user has reached their private message quota - if they have, email them. if($recipient_permissions['pmquota'] != "0" && $user['totalpms'] >= $recipient_permissions['pmquota'] && $recipient_permissions['cancp'] != 1 && $sender_permissions['cancp'] != 1 && !$pm['saveasdraft'] && !$this->admin_override) { if(trim($user['language']) != '' && $lang->language_exists($user['language'])) { $uselang = trim($user['language']);
|
}
| }
|
elseif($mybb->settings['bblanguage']) { $uselang = $mybb->settings['bblanguage'];
| elseif($mybb->settings['bblanguage']) { $uselang = $mybb->settings['bblanguage'];
|
Zeile 292 | Zeile 301 |
---|
{ $emailsubject = $lang->emailsubject_reachedpmquota; $emailmessage = $lang->email_reachedpmquota;
|
{ $emailsubject = $lang->emailsubject_reachedpmquota; $emailmessage = $lang->email_reachedpmquota;
|
}
| }
|
else { $userlang = new MyLanguage;
| else { $userlang = new MyLanguage;
|
Zeile 315 | Zeile 324 |
---|
$db->insert_query("mailqueue", $new_email); $cache->update_mailqueue();
|
$db->insert_query("mailqueue", $new_email); $cache->update_mailqueue();
|
|
|
if($this->admin_override != true) { $this->set_error("recipient_reached_quota", array($user['username'])); } }
|
if($this->admin_override != true) { $this->set_error("recipient_reached_quota", array($user['username'])); } }
|
|
|
// Everything looks good, assign some specifics about the recipient $pm['recipients'][$user['uid']] = array( "uid" => $user['uid'],
| // Everything looks good, assign some specifics about the recipient $pm['recipients'][$user['uid']] = array( "uid" => $user['uid'],
|
Zeile 332 | Zeile 341 |
---|
"pmnotify" => $user['pmnotify'], "language" => $user['language'] );
|
"pmnotify" => $user['pmnotify'], "language" => $user['language'] );
|
|
|
// If this recipient is defined as a BCC recipient, save it if($user['bcc'] == 1) { $pm['recipients'][$user['uid']]['bcc'] = 1;
|
// If this recipient is defined as a BCC recipient, save it if($user['bcc'] == 1) { $pm['recipients'][$user['uid']]['bcc'] = 1;
|
} } return true; } /**
| } } return true; }
/**
|
* Verify that the user is not flooding the system. * * @return boolean True
| * Verify that the user is not flooding the system. * * @return boolean True
|
Zeile 350 | Zeile 359 |
---|
function verify_pm_flooding() { global $mybb, $db;
|
function verify_pm_flooding() { global $mybb, $db;
|
|
|
$pm = &$this->data;
|
$pm = &$this->data;
|
|
|
// Check if post flooding is enabled within MyBB or if the admin override option is specified. if($mybb->settings['pmfloodsecs'] > 0 && $pm['fromid'] != 0 && $this->admin_override == false) { // Fetch the senders profile data. $sender = get_user($pm['fromid']);
|
// Check if post flooding is enabled within MyBB or if the admin override option is specified. if($mybb->settings['pmfloodsecs'] > 0 && $pm['fromid'] != 0 && $this->admin_override == false) { // Fetch the senders profile data. $sender = get_user($pm['fromid']);
|
|
|
// Calculate last post $query = $db->simple_select("privatemessages", "dateline", "fromid='".$db->escape_string($pm['fromid'])."' AND toid != '0'", array('order_by' => 'dateline', 'order_dir' => 'desc', 'limit' => 1)); $sender['lastpm'] = $db->fetch_field($query, "dateline");
| // Calculate last post $query = $db->simple_select("privatemessages", "dateline", "fromid='".$db->escape_string($pm['fromid'])."' AND toid != '0'", array('order_by' => 'dateline', 'order_dir' => 'desc', 'limit' => 1)); $sender['lastpm'] = $db->fetch_field($query, "dateline");
|
Zeile 400 | Zeile 409 |
---|
if(isset($options['readreceipt']) && $options['readreceipt'] == 1) { $options['readreceipt'] = 1;
|
if(isset($options['readreceipt']) && $options['readreceipt'] == 1) { $options['readreceipt'] = 1;
|
} else
| } else
|
{ $options['readreceipt'] = 0; }
| { $options['readreceipt'] = 0; }
|
Zeile 418 | Zeile 427 |
---|
global $plugins;
$pm = &$this->data;
|
global $plugins;
$pm = &$this->data;
|
|
|
if(!$pm['savedraft']) { $this->verify_pm_flooding(); }
|
if(!$pm['savedraft']) { $this->verify_pm_flooding(); }
|
|
|
// Verify all PM assets. $this->verify_subject();
|
// Verify all PM assets. $this->verify_subject();
|
|
|
$this->verify_sender();
|
$this->verify_sender();
|
|
|
$this->verify_recipient();
|
$this->verify_recipient();
|
|
|
$this->verify_message();
$this->verify_options();
| $this->verify_message();
$this->verify_options();
|
Zeile 510 | Zeile 519 |
---|
} } }
|
} } }
|
$recipient_list = serialize($recipient_list);
| |
$this->pm_insert_data = array( 'fromid' => intval($pm['sender']['uid']),
| $this->pm_insert_data = array( 'fromid' => intval($pm['sender']['uid']),
|
Zeile 524 | Zeile 532 |
---|
'smilieoff' => $pm['options']['disablesmilies'], 'receipt' => intval($pm['options']['readreceipt']), 'readtime' => 0,
|
'smilieoff' => $pm['options']['disablesmilies'], 'receipt' => intval($pm['options']['readreceipt']), 'readtime' => 0,
|
'recipients' => $db->escape_string($recipient_list)
| 'recipients' => $db->escape_string(serialize($recipient_list))
|
);
// Check if we're updating a draft or not.
| );
// Check if we're updating a draft or not.
|
Zeile 599 | Zeile 607 |
---|
$emailsubject = $userlang->emailsubject_newpm; $emailmessage = $userlang->email_newpm; }
|
$emailsubject = $userlang->emailsubject_newpm; $emailmessage = $userlang->email_newpm; }
|
|
|
if(!$pm['sender']['username']) { $pm['sender']['username'] = $lang->mybb_engine; }
|
if(!$pm['sender']['username']) { $pm['sender']['username'] = $lang->mybb_engine; }
|
|
|
$emailmessage = $lang->sprintf($emailmessage, $recipient['username'], $pm['sender']['username'], $mybb->settings['bbname'], $mybb->settings['bburl']); $emailsubject = $lang->sprintf($emailsubject, $mybb->settings['bbname']);
|
$emailmessage = $lang->sprintf($emailmessage, $recipient['username'], $pm['sender']['username'], $mybb->settings['bbname'], $mybb->settings['bburl']); $emailsubject = $lang->sprintf($emailsubject, $mybb->settings['bbname']);
|
|
|
$new_email = array( "mailto" => $db->escape_string($recipient['email']), "mailfrom" => '',
| $new_email = array( "mailto" => $db->escape_string($recipient['email']), "mailfrom" => '',
|