예제 #1
0
 /**
  * Регистрирует новое личное сообщение.
  *
  * @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);
 }
예제 #2
0
 /**
  * Комментарии к предложениям конкурсов. Утверждение/удаление записи
  * 
  * @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;
 }
예제 #3
0
파일: teams.php 프로젝트: amage/fl-ru-damp
 /**
  * Удаление пользователя из избранного по его логину
  *
  * @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;
}