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) . ' сек.'; }