示例#1
0
 public function pm_send()
 {
     // Незарегистрированный пользователь не может отправлять личные сообщения
     if (!isset($_SESSION['user'])) {
         redirect('/');
     }
     // Обрезаем лишние пробелы
     $toUser = trim($_POST['toUser']);
     $subject = !empty($_POST['subject']) ? trim($_POST['subject']) : '';
     $message = trim($_POST['mainText']);
     // Если пользователь хочет посмотреть на сообщение перед отправкой
     if (isset($_POST['viewMessage']) && !isset($_REQUEST['ajax'])) {
         $_SESSION['viewMessage'] = array();
         $_SESSION['viewMessage']['toUser'] = $toUser;
         $_SESSION['viewMessage']['subject'] = $subject;
         $_SESSION['viewMessage']['message'] = $message;
         redirect('/users/pm_send_form/');
     }
     // Проверяем, заполнены ли обязательные поля
     $errors = $this->Register['Validate']->check($this->Register['action']);
     // Проверяем, есть ли такой пользователь
     if (!empty($toUser)) {
         $to = preg_replace("#[^- _0-9a-zА-Яа-я]#iu", '', $toUser);
         $res = $this->Model->getCollection(array('name' => $toUser), array('limit' => 1));
         if (empty($res[0])) {
             $errors[] = sprintf(__('No user with this name'), $to);
         }
         if (count($res) && is_array($res) && $res[0]->getId() == $_SESSION['user']['id']) {
             $errors[] = __('You can not send message to yourself');
         }
         //chek max count messages
         if ($res[0]) {
             $id_to = (int) $res[0]->getId();
             $id_from = (int) $_SESSION['user']['id'];
             $className = $this->Register['ModManager']->getModelName('Messages');
             $model = new $className();
             $cnt_to = $model->getTotal(array('cond' => array("(`to_user` = '{$id_to}' OR `from_user` = '{$id_to}') AND `id_rmv` != '{$id_to}'")));
             $cnt_from = $model->getTotal(array('cond' => array("(`to_user` = '{$id_from}' OR `from_user` = '{$id_from}') AND `id_rmv` != '{$id_from}'")));
             if (!empty($cnt_to) && $cnt_to >= Config::read('max_count_mess', 'users')) {
                 $errors[] = __('This user has full  messagebox');
             }
             if (!empty($cnt_from) && $cnt_from >= Config::read('max_count_mess', 'users')) {
                 $errors[] = __('You have full  messagebox');
             }
         }
     }
     // Errors
     if (!empty($errors)) {
         $_SESSION['FpsForm'] = array();
         $_SESSION['FpsForm']['errors'] = $errors;
         $_SESSION['FpsForm']['toUser'] = $toUser;
         $_SESSION['FpsForm']['subject'] = $subject;
         $_SESSION['FpsForm']['message'] = $message;
         if (isset($_REQUEST['ajax'])) {
             $data = $_SESSION['FpsForm'];
             unset($_SESSION['FpsForm']);
             $this->showAjaxResponse($data);
         } else {
             redirect('/users/pm_send_form/');
         }
     }
     // Все поля заполнены правильно - "посылаем" сообщение
     $toUser = $res[0];
     $to = $toUser->getId();
     $from = $_SESSION['user']['id'];
     $data = array('to_user' => $to, 'from_user' => $from, 'sendtime' => new Expr('NOW()'), 'subject' => $subject, 'message' => $message, 'id_rmv' => 0, 'viewed' => 0);
     $className = $this->Register['ModManager']->getEntityName('Messages');
     $message = new $className($data);
     $last_id = $message->save();
     if ($last_id) {
         if (Config::read('new_pm_mail', $this->module) == 1 && $toUser->getEmail_notification()) {
             $context = array('from_user' => $_SESSION['user'], 'user' => $toUser, 'link' => get_url('/' . $this->module . '/pm_view/' . $_SESSION['user']['id']));
             $mailer = new AtmMail(ROOT . '/sys/settings/email_templates/');
             $mailer->prepare('new_pm_message');
             $mailer->sendMail($toUser->getEmail(), __('New PM on forum'), $context);
         }
     }
     /* clean DB cache */
     $this->Register['DB']->cleanSqlCache();
     if ($this->Log) {
         $this->Log->write('adding pm message', 'message id(' . $last_id . ')');
     }
     if (isset($_REQUEST['ajax'])) {
         $message = $this->Model->getDialog($from, $to, array("`id` < '" . $last_id . "'"));
         $id = !empty($message[0]) ? $message[0]->getId() : $last_id;
         $this->pm_view_update($id);
     }
     return $this->showInfoMessage(__('Message successfully send'), '/' . $this->module . '/pm_view/' . $to);
 }
    $message_text = '';
}
if (isset($_POST['send'])) {
    if (!empty($_POST['message']) && !empty($_POST['subject']) && !empty($_POST['groups']) && count($_POST['groups']) > 0) {
        $status_ids = array();
        foreach ($_POST['groups'] as $group) {
            $status_ids[] = intval($group);
        }
        $status_ids = array_unique($status_ids);
        $status_ids = implode(', ', $status_ids);
        $mail_list = $FpsDB->select('users', DB_ALL, array('cond' => array('`status` IN (' . $status_ids . ')')));
        if (count($mail_list) > 0) {
            $from = !empty($_POST['from']) ? trim($_POST['from']) : Config::read('admin_email');
            $subject = trim($_POST['subject']);
            $headers = "Precedence: bulk\n";
            $mailer = new AtmMail($email_templates_path);
            $mailer->prepare(false, $from, $headers);
            $mailer->setBody($_POST['message']);
            $n = 0;
            $start_time = getMicroTime();
            foreach ($mail_list as $result) {
                // Send password in email is deny
                unset($result['passw']);
                $context = array('user' => $result);
                if ($mailer->sendMail($result['email'], $subject, $context)) {
                    $n++;
                }
            }
            if (empty($error)) {
                $_SESSION['message'] = __('Mails are sent') . ': ' . $n . '<br>Времени потрачено: ' . round(getMicroTime($start_time), 4) . ' сек.';
            }