/** * Регистрирует новое личное сообщение. * * @param int $user_id id пользователя-отправителя * @param string $target_login логин пользователя-получателя * @param string $text текст сообщения * @param array $files прикрепленные файлы * @param int $force разрешение/отказ ответа на письмо (1/0) * @param bool $skip_mail Если TRUE - не отправлять уведомление о новом сообщении на емайл. * @param string $attachedfiles_session ID сессии загруженных файлов * * @return mixed сообщение об ошибке и флаг ошибки в случае ее возниконовения */ public function Add($user_id, $target_login, $text, $files, $force = 0, $skip_mail = false, $attachedfiles_session = null, &$message_id = 0) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/ignor.php'; $users = new users(); $login = $users->GetName($user_id, $err); $tar_id = $users->GetUid($err, $target_login); if ((ignor::CheckIgnored($tar_id, $user_id) || in_array($target_login, array('admin', 'Anonymous'))) && !$force) { $error = 'Пользователь запретил отправлять ему сообщения'; } else { if ($files) { if (count($files) > self::MAX_FILES) { $alert[1] = 'Вы не можете прикрепить больше ' . self::MAX_FILES . ' файлов к сообщению.'; } else { $max_file_size = self::MAX_FILE_SIZE; foreach ($files as $file) { $ext = $file->getext(); $file->max_size = $max_file_size; $max_file_size -= $file->size; if (!in_array($ext, $GLOBALS['disallowed_array'])) { $f_name = $file->MoveUploadedFile($login['login'] . '/contacts'); if (!isNulArray($file->error)) { if ($max_file_size < 0) { $alert[1] = 'Вы превысили максимально допустимый размер файлов'; } else { $alert[1] = $GLOBALS['PDA'] ? 'Файл не удовлетворяет условиям загрузки' : 'Один или несколько файлов не удовлетворяют условиям загрузки.'; } break; } } else { $alert[1] = $GLOBALS['PDA'] ? 'Файл не удовлетворяет условиям загрузки' : 'Один или несколько файлов имеют неправильный формат.'; } } } } if (empty($alert) && empty($error)) { $memBuff = new memBuff(); // автоматические папки для массовых рассылок личных менеджеров global $aPmUserUids; if (in_array($tar_id, $aPmUserUids) || SERVER === 'local' || SERVER === 'beta' || SERVER === 'alpha') { $DBproxy = new DB(); $nRecId = $DBproxy->val('SELECT mess_pm_ustf_add(?i, ?i)', $tar_id, $user_id); if ($nRecId) { $memBuff->delete('pmAutoFolder' . $tar_id . '_' . $nRecId); } } //--------------------------------------------- $DB = new DB(); $f = array(); if ($files) { foreach ($files as $file) { $f[] = $file->id; } } require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/attachedfiles.php'; $attachedfiles = new attachedfiles($attachedfiles_session); $attachedfiles_files = $attachedfiles->getFiles(); if ($attachedfiles_files) { foreach ($attachedfiles_files as $attachedfiles_file) { $cFile = new CFile($attachedfiles_file['id']); $cFile->table = 'file'; $ext = $cFile->getext(); $tmp_dir = 'users/' . substr($login['login'], 0, 2) . '/' . $login['login'] . '/contacts/'; $tmp_name = $cFile->secure_tmpname($tmp_dir, '.' . $ext); $tmp_name = substr_replace($tmp_name, '', 0, strlen($tmp_dir)); $cFile->_remoteCopy($tmp_dir . $tmp_name, true); $f[] = $cFile->id; } } $attachedfiles->clear(); $aNoMod = array_merge($GLOBALS['aContactsNoMod'], $GLOBALS['aPmUserUids']); //$bNoMod = hasPermissions('streamnomod', $user_id) || hasPermissions('streamnomod', $tar_id) || is_pro(true, $user_id) || is_pro(true, $tar_id) || in_array($user_id, $aNoMod); $bNoMod = true; // #0022344: Убрать из потоков личку $message_id = $DB->val('SELECT messages_add(?i, ?i, ?, ?b, ?a, ?b)', $user_id, $tar_id, $text, $skip_mail, $f, $bNoMod); if ($user_id % 2 == $tar_id % 2) { $memBuff->delete(self::MEMBUFF_CHAT_PREFIX . $tar_id); } if ($message_id && !$skip_mail && !QChat::active($tar_id)) { $mail = new pmail(); $mail->NewMessage($user_id, $tar_id, stripslashes($text)); } if ($message_id) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/external/base.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/external/api/api.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/external/api/mobile.php'; externalApi_Mobile::addPushMsg($tar_id, 'message', array('from_user_id' => get_uid(false), 'text' => stripslashes($text))); } } } return array($alert, $error); }
/** * Комментарии к предложениям конкурсов. Утверждение/удаление записи * * @param string $stream_id идентификатор потока * @param int $user_id идентификатор модератора * @param int $from_id идентификатор пользователя * @param int $rec_id идентификатор записи * @param int $rec_type тип записи * @param int $action действие: 1 - утверждено, 2 - удалено * @param string $is_sent было ли отправлено уведомление * @param string $reason причина удаления */ function resolveContestCom($stream_id = '', $user_id = 0, $from_id = 0, $rec_id = 0, $rec_type = 0, $action = 1, $is_sent = '', $reason = '') { $bRet = false; $sQuery = 'UPDATE moderation SET moder_num = ?i, status = ?i WHERE rec_id = ?i AND rec_type = ?i AND stream_id = ? RETURNING rec_id'; $sRecId = $GLOBALS['DB']->val($sQuery, $this->nResolveCnt, $action, $rec_id, self::MODER_CONTEST_COM, $stream_id); if ($sRecId) { $bRet = true; $aData = array('moderator_status' => $user_id); if ($action == 1 && $is_sent == 'f') { // отправка уведомления о новом сообщении require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/pmail.php'; $pmail = new pmail(); $pmail->ContestNewComment($rec_id); $aData['is_sent'] = true; // устанавливаем флаг отправки } $sDeluserId = $GLOBALS['DB']->val('SELECT deluser_id FROM projects_contest_msgs WHERE id = ?i', $rec_id); if ($action == 1 && $sDeluserId && $sDeluserId != $from_id) { $aData['deleted'] = null; $aData['deluser_id'] = null; $aData['deleted_reason'] = ''; } elseif ($action == 2 && $sDeluserId != $from_id) { $aData['deleted'] = date('Y-m-d H:i:s'); $aData['deluser_id'] = $user_id; $aData['deleted_reason'] = $reason; } $GLOBALS['DB']->update('projects_contest_msgs', $aData, 'id = ?i', $rec_id); } return $bRet; }
/** * Удаление пользователя из избранного по его логину * * @param integer $user_id id пользователя в избранном которого нужно удалить пользователя * @param string $target_login login пользователя, которого нужно удалить * @return string текст ошибки операции или пустая строка */ function teamsDelFavoritesByLogin($user_id, $target_login) { $DB = new DB(); $error = ''; if ($user_id && ($target_id = users::GetUid($error, $target_login))) { $DB->query("SELECT teams_del(?i, ?i)", $user_id, $target_id); require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/pmail.php"; $mail = new pmail(); $mail->delTeamPeople($user_id, $target_id); } else { $error = "Юзер не определен"; } return $error; }
/** * Новое сообщение в заказе ТУ * * @global type $orderModel * @param type $order_id * @param type $message * @param type $sess * @return \xajaxResponse */ function tservicesOrdersNewMessage($order_id, $message, $sess) { global $orderModel; $uid = get_uid(false); $objResponse =& new xajaxResponse(); $orderModel->attributes(array('is_adm' => hasPermissions('tservices'))); $orderData = $orderModel->getCard($order_id, $uid); //Если не существует или статус не подходящий if (!$orderData) { return $objResponse; } $author_id = $uid; $reciever_id = is_emp() ? $orderData['frl_id'] : $orderData['emp_id']; //@todo: Зачем делаем reformat? это только функция ворматирования! //@todo: где валидация на кол-во симолов? //@todo: "reformat(htmlspecialchars(strip_tags(" это для кучи? //если есть теги то нужно показвать их а не вырезать $text = reformat(htmlspecialchars(strip_tags($message)), 30); $modelMsg = TServiceMsgModel::model(); $mes_id = $modelMsg->add($order_id, $uid, $reciever_id, $text); if (!$mes_id) { return $objResponse; } TServiceOrderModel::touchOrder($order_id, is_emp()); $modelMsg->addAttached($sess, $mes_id); $message = $modelMsg->getCard($mes_id); if (!$message) { return $objResponse; } $attachedfiles = new attachedfiles(); $sess = $attachedfiles->getSession(); $objResponse->script("TServices_Order_Messages.updateAttachSession('{$sess}');"); $sHtml = Template::render(ABS_PATH . '/tu/tpl.order-msg.php', array('messages' => array($message), 'order' => $orderData)); $mail = new pmail(); if ($uid != $orderData['frl_id']) { $mail->NewTserviceMessage($uid, $orderData['frl_id'], $orderData, stripslashes($text)); } if ($uid != $orderData['emp_id']) { $mail->NewTserviceMessage($uid, $orderData['emp_id'], $orderData, stripslashes($text)); } $objResponse->script("\$('messages').getElements('div.b-layout').removeClass('b-layout_margbot_10')" . ".removeClass('b-fon')" . ".removeClass('b-fon_bg_e4faeb')" . ".removeClass('b-fon_pad_10')" . ".addClass('b-layout_margbot_20');"); $objResponse->prepend('messages', 'innerHTML', $sHtml); return $objResponse; }