PHPFusion\PrivateMessages::send_pm PHP Метод

send_pm() публичный статический Метод

public static send_pm ( $to, $from, $subject, $message, $smileys = 'y', $to_group = FALSE, $save_sent = TRUE )
    public static function send_pm($to, $from, $subject, $message, $smileys = 'y', $to_group = FALSE, $save_sent = TRUE)
    {
        include LOCALE . LOCALESET . "messages.php";
        require_once INCLUDES . "sendmail_include.php";
        require_once INCLUDES . "flood_include.php";
        $strict = FALSE;
        $group_name = getgroupname($to);
        $to = isnum($to) || !empty($group_name) ? $to : 0;
        $from = isnum($from) ? $from : 0;
        $smileys = preg_match("#(\\[code\\](.*?)\\[/code\\]|\\[geshi=(.*?)\\](.*?)\\[/geshi\\]|\\[php\\](.*?)\\[/php\\])#si", $message) ? "n" : $smileys;
        if (!$to_group) {
            // send to user
            $pmStatus = self::get_pm_settings($to);
            $myStatus = self::get_pm_settings($from);
            if (!flood_control("message_datestamp", DB_MESSAGES, "message_from='" . intval($from) . "'")) {
                // find receipient
                $result = dbquery("SELECT u.user_id, u.user_name, u.user_email, u.user_level,\n\t\tCOUNT(m.message_id) 'message_count'\n\t\tFROM " . DB_USERS . " u\n\t\tLEFT JOIN " . DB_MESSAGES . " m ON m.message_user=u.user_id and message_folder='0'\n\t\tWHERE u.user_id='" . intval($to) . "' GROUP BY u.user_id\n\t\t");
                if (dbrows($result) > 0) {
                    $data = dbarray($result);
                    $result2 = dbquery("SELECT user_id, user_name FROM " . DB_USERS . " WHERE user_id='" . intval($from) . "'");
                    if (dbrows($result2) > 0) {
                        $userdata = dbarray($result2);
                        if ($to != $from) {
                            if ($data['user_id'] == 1 || $data['user_level'] < USER_LEVEL_MEMBER || !$pmStatus['user_inbox'] || $data['message_count'] + 1 <= $pmStatus['user_inbox']) {
                                $inputData = array("message_id" => 0, "message_to" => $to, "message_user" => $to, "message_from" => $from, "message_subject" => $subject, "message_message" => $message, "message_smileys" => $smileys, "message_read" => 0, "message_datestamp" => time(), "message_folder" => 0);
                                dbquery_insert(DB_MESSAGES, $inputData, "save");
                                // this will flood the inbox when message is sent to group. -- fixed
                                if ($myStatus['user_pm_save_sent'] == '2' && $save_sent == TRUE) {
                                    // user_outbox.
                                    $cdata = dbarray(dbquery("SELECT COUNT(message_id) AS outbox_count, MIN(message_id) AS last_message FROM\n\t\t\t\t\t\t\t" . DB_MESSAGES . " WHERE message_to='" . $userdata['user_id'] . "' AND message_user='" . $userdata['user_id'] . "' AND message_folder='1' GROUP BY message_to"));
                                    // check my outbox limit and if surpass, remove oldest message
                                    if ($myStatus['user_outbox'] != "0" && $cdata['outbox_count'] + 1 > $myStatus['user_outbox']) {
                                        dbquery("DELETE FROM " . DB_MESSAGES . " WHERE message_id='" . $cdata['last_message'] . "' AND message_to='" . $userdata['user_id'] . "'");
                                    }
                                    $inputData['message_user'] = $userdata['user_id'];
                                    $inputData['message_folder'] = 1;
                                    $inputData['message_from'] = $to;
                                    $inputData['message_to'] = $userdata['user_id'];
                                    dbquery_insert(DB_MESSAGES, $inputData, "save");
                                }
                                $send_email = $pmStatus['user_pm_email_notify'];
                                if ($send_email == "2") {
                                    $message_content = str_replace("[SUBJECT]", $subject, $locale['626']);
                                    $message_content = str_replace("[USER]", $userdata['user_name'], $message_content);
                                    $template_result = dbquery("SELECT template_key, template_active FROM " . DB_EMAIL_TEMPLATES . " WHERE template_key='PM' LIMIT 1");
                                    if (dbrows($template_result)) {
                                        $template_data = dbarray($template_result);
                                        if ($template_data['template_active'] == "1") {
                                            sendemail_template("PM", $subject, trimlink($message, 150), $userdata['user_name'], $data['user_name'], "", $data['user_email']);
                                        } else {
                                            sendemail($data['user_name'], $data['user_email'], fusion_get_settings("siteusername"), fusion_get_settings("siteemail"), $locale['625'], $data['user_name'] . $message_content);
                                        }
                                    } else {
                                        sendemail($data['user_name'], $data['user_email'], fusion_get_settings("siteusername"), fusion_get_settings("siteemail"), $locale['625'], $data['user_name'] . $message_content);
                                    }
                                }
                            } else {
                                // Inbox is full
                                if ($strict) {
                                    die("User inbox is full. Try delete it or upgrade it to 102 or 103 status");
                                }
                                \defender::stop();
                                addNotice("danger", $locale['628']);
                            }
                        }
                    } else {
                        // Sender does not exist in DB
                        if ($strict) {
                            die("Sender User ID does not exist in DB. Sequence Aborted.");
                        }
                        \defender::stop();
                        addNotice("danger", $locale['482']);
                    }
                } else {
                    \defender::stop();
                    if ($strict) {
                        die("Message Recepient User ID is invalid");
                    }
                    addNotice("danger", $locale['482']);
                }
            } else {
                if ($strict) {
                    die("You are flooding, send_pm halted");
                }
                \defender::stop();
                addNotice("danger", sprintf($locale['487'], fusion_get_settings("flood_interval")));
            }
        } else {
            $result = NULL;
            if ($to <= -101 && $to >= -103) {
                // -101, -102, -103 only
                $result = dbquery("SELECT user_id from " . DB_USERS . " WHERE user_level <='" . intval($to) . "' AND user_status='0'");
            } else {
                $result = dbquery("SELECT user_id FROM " . DB_USERS . " WHERE " . in_group("user_groups", $to) . " AND user_status='0'");
            }
            if (dbrows($result) > 0) {
                while ($data = dbarray($result)) {
                    self::send_pm($data['user_id'], $from, $subject, $message, $smileys, FALSE, FALSE);
                }
            } else {
                \defender::stop();
                addNotice("danger", $locale['492']);
            }
        }
    }

Usage Example

Пример #1
0
 /**
  * Send PM to a user or group
  *
  * @param        $to - Recepient Either group_id or user_id
  * @param        $from - Sender's user id
  * @param        $subject - Message subject
  * @param        $message - Message body
  * @param string $smileys - use smileys or not
  * @param bool   $to_group - set to true if sending to the entire user group's members
  */
 function send_pm($to, $from, $subject, $message, $smileys = "y", $to_group = false)
 {
     \PHPFusion\PrivateMessages::send_pm($to, $from, $subject, $message, $smileys, $to_group);
 }