/**
  * Отправляет пользователю сообщение о добавлении его в друзья
  *
  * @param ModuleUser_EntityUser $oUserTo
  * @param ModuleUser_EntityUser $oUserFrom
  * @param string $sText
  */
 public function SendUserMarkImageNew(ModuleUser_EntityUser $oUserTo, ModuleUser_EntityUser $oUserFrom, $sText)
 {
     /**
      * Если в конфигураторе указан отложенный метод отправки,
      * то добавляем задание в массив. В противном случае,
      * сразу отсылаем на email
      */
     if (Config::Get('module.notify.delayed')) {
         $oNotifyTask = Engine::GetEntity('Notify_Task', array('user_mail' => $oUserTo->getMail(), 'user_login' => $oUserTo->getLogin(), 'notify_text' => $sText, 'notify_subject' => $this->Lang_Get('plugin.lsgallery.lsgallery_marked_subject'), 'date_created' => date("Y-m-d H:i:s"), 'notify_task_status' => self::NOTIFY_TASK_STATUS_NULL));
         if (Config::Get('module.notify.insert_single')) {
             $this->aTask[] = $oNotifyTask;
         } else {
             $this->oMapper->AddTask($oNotifyTask);
         }
     } else {
         /**
          * Отправляем мыло
          */
         $this->Mail_SetAdress($oUserTo->getMail(), $oUserTo->getLogin());
         $this->Mail_SetSubject($this->Lang_Get('plugin.lsgallery.lsgallery_marked_subject'));
         $this->Mail_SetBody($sText);
         $this->Mail_setHTML();
         $this->Mail_Send();
     }
 }
예제 #2
0
 /**
  * Обработка завершения работу экшена
  */
 public function EventShutdown()
 {
     if (!$this->oUserCurrent) {
         return;
     }
     $this->Viewer_Assign('oAceUserProfile', $this->PluginAceadminpanel_Admin_GetUserByLogin($this->oUserCurrent->getLogin()));
     $iCountTalkFavourite = $this->Talk_GetCountTalksFavouriteByUserId($this->oUserCurrent->getId());
     $this->Viewer_Assign('iCountTalkFavourite', $iCountTalkFavourite);
     $iCountTopicFavourite = $this->Topic_GetCountTopicsFavouriteByUserId($this->oUserCurrent->getId());
     $iCountTopicUser = $this->Topic_GetCountTopicsPersonalByUser($this->oUserCurrent->getId(), 1);
     $iCountCommentUser = $this->Comment_GetCountCommentsByUserId($this->oUserCurrent->getId(), 'topic');
     $iCountCommentFavourite = $this->Comment_GetCountCommentsFavouriteByUserId($this->oUserCurrent->getId());
     $iCountNoteUser = $this->User_GetCountUserNotesByUserId($this->oUserCurrent->getId());
     $this->Viewer_Assign('oUserProfile', $this->oUserCurrent);
     $this->Viewer_Assign('iCountWallUser', $this->Wall_GetCountWall(array('wall_user_id' => $this->oUserCurrent->getId(), 'pid' => null)));
     /**
      * Общее число публикация и избранного
      */
     $this->Viewer_Assign('iCountCreated', $iCountNoteUser + $iCountTopicUser + $iCountCommentUser);
     $this->Viewer_Assign('iCountFavourite', $iCountCommentFavourite + $iCountTopicFavourite);
     $this->Viewer_Assign('iCountFriendsUser', $this->User_GetCountUsersFriend($this->oUserCurrent->getId()));
     $this->Viewer_Assign('sMenuSubItemSelect', $this->sMenuSubItemSelect);
     /**
      * Передаем во вьевер константы состояний участников разговора
      */
     $this->Viewer_Assign('TALK_USER_ACTIVE', ModuleTalk::TALK_USER_ACTIVE);
     $this->Viewer_Assign('TALK_USER_DELETE_BY_SELF', ModuleTalk::TALK_USER_DELETE_BY_SELF);
     $this->Viewer_Assign('TALK_USER_DELETE_BY_AUTHOR', ModuleTalk::TALK_USER_DELETE_BY_AUTHOR);
 }
 /**
  * Добавляет юзера
  *
  * @param ModuleUser_EntityUser $oUser Объект пользователя
  * @return int|bool
  */
 public function Add(ModuleUser_EntityUser $oUser)
 {
     $sql = "INSERT INTO " . Config::Get('db.table.user') . "\n      (user_login,\n      user_password,\n      user_mail,\n      user_date_register,\n      user_ip_register,\n      user_activate,\n      user_activate_key\n      )\n      VALUES(?,  ?,  ?,  ?,  ?,  ?,  ?)\n    ";
     if ($iId = $this->oDb->query($sql, $oUser->getLogin(), $oUser->getPassword(), $oUser->getMail(), $oUser->getDateRegister(), $oUser->getIpRegister(), $oUser->getActivate(), $oUser->getActivateKey())) {
         return $iId;
     }
     return false;
 }
예제 #4
0
 /**
  * Авторизовывает юзера
  *
  * @param ModuleUser_EntityUser $oUser	Объект пользователя
  * @param bool $bRemember	Запоминать пользователя или нет
  * @param string $sKey	Ключ авторизации для куков
  * @return bool
  */
 public function Authorization(ModuleUser_EntityUser $oUser, $bRemember = true, $sKey = null)
 {
     if (!Config::Get('plugin.blacklist.check_authorization') || $oUser && $oUser->isAdministrator() || $oUser && !$this->PluginBlacklist_ModuleBlacklist_blackMail($oUser->getMail(), $oUser->getLogin())) {
         return parent::Authorization($oUser, $bRemember, $sKey);
     }
     $this->Message_AddErrorSingle($this->Lang_Get(Config::Get('plugin.blacklist.check_ip_exact') ? 'plugin.blacklist.user_in_exact_blacklist' : 'plugin.blacklist.user_in_blacklist'));
     return false;
 }
 /**
  * Удаление пользователя из друзей
  */
 public function EventAjaxFriendDelete()
 {
     /**
      * Устанавливаем формат Ajax ответа
      */
     $this->Viewer_SetResponseAjax('json');
     $sUserId = getRequestStr('idUser', null, 'post');
     /**
      * Если пользователь не авторизирован, возвращаем ошибку
      */
     if (!$this->User_IsAuthorization()) {
         $this->Message_AddErrorSingle($this->Lang_Get('common.error.need_authorization'), $this->Lang_Get('common.error.error'));
         return;
     }
     $this->oUserCurrent = $this->User_GetUserCurrent();
     /**
      * При попытке добавить в друзья себя, возвращаем ошибку
      */
     if ($this->oUserCurrent->getId() == $sUserId) {
         return $this->EventErrorDebug();
     }
     /**
      * Если пользователь не найден, возвращаем ошибку
      */
     if (!($oUser = $this->User_GetUserById($sUserId))) {
         $this->Message_AddErrorSingle($this->Lang_Get('user.friends.notices.not_found'), $this->Lang_Get('common.error.error'));
         return;
     }
     $this->oUserProfile = $oUser;
     /**
      * Получаем статус дружбы между пользователями.
      * Если статус не определен, или отличается от принятой заявки,
      * возвращаем ошибку
      */
     $oFriend = $this->User_GetFriend($oUser->getId(), $this->oUserCurrent->getId());
     $aAllowedFriendStatus = array(ModuleUser::USER_FRIEND_ACCEPT + ModuleUser::USER_FRIEND_OFFER, ModuleUser::USER_FRIEND_ACCEPT + ModuleUser::USER_FRIEND_ACCEPT);
     if (!$oFriend || !in_array($oFriend->getFriendStatus(), $aAllowedFriendStatus)) {
         $this->Message_AddErrorSingle($this->Lang_Get('user.friends.notices.not_found'), $this->Lang_Get('common.error.error'));
         return;
     }
     /**
      * Удаляем из друзей
      */
     if ($this->User_DeleteFriend($oFriend)) {
         $this->Message_AddNoticeSingle($this->Lang_Get('user.friends.notices.remove_success'), $this->Lang_Get('common.attention'));
         /**
          * Отправляем пользователю сообщение об удалении дружеской связи
          */
         if (Config::Get('module.user.friend_notice.delete')) {
             $sText = $this->Lang_Get('user.friends.messages.deleted.text', array('login' => $this->oUserCurrent->getLogin()));
             $oTalk = $this->Talk_SendTalk($this->Lang_Get('user.friends.messages.deleted.title'), $sText, $this->oUserCurrent, array($oUser), false, false);
             $this->Talk_DeleteTalkUserByArray($oTalk->getId(), $this->oUserCurrent->getId());
         }
         return;
     } else {
         return $this->EventErrorDebug();
     }
 }
예제 #6
0
 /**
  * Выполняет отправку приглашения в блог
  * (по внутренней почте и на email)
  *
  * @param ModuleBlog_EntityBlog $oBlog
  * @param ModuleUser_EntityUser $oUser
  */
 protected function SendBlogInvite($oBlog, $oUser)
 {
     $sTitle = E::ModuleLang()->Get('blog_user_invite_title', array('blog_title' => $oBlog->getTitle()));
     F::IncludeLib('XXTEA/encrypt.php');
     //  Формируем код подтверждения в URL
     $sCode = $oBlog->getId() . '_' . $oUser->getId();
     $sCode = rawurlencode(base64_encode(xxtea_encrypt($sCode, Config::Get('module.blog.encrypt'))));
     $aPath = array('accept' => R::GetPath('blog') . 'invite/accept/?code=' . $sCode, 'reject' => R::GetPath('blog') . 'invite/reject/?code=' . $sCode);
     // Сформируем название типа блога на языке приложения.
     // Это может быть либо название, либо текстовка.
     $sBlogType = mb_strtolower(preg_match('~^\\{\\{(.*)\\}\\}$~', $sBlogType = $oBlog->getBlogType()->getTypeName(), $aMatches) ? E::ModuleLang()->Get($aMatches[1]) : $sBlogType, 'UTF-8');
     $sText = E::ModuleLang()->Get('blog_user_invite_text', array('login' => $this->oUserCurrent->getLogin(), 'accept_path' => $aPath['accept'], 'reject_path' => $aPath['reject'], 'blog_title' => $oBlog->getTitle(), 'blog_type' => $sBlogType));
     $oTalk = E::ModuleTalk()->SendTalk($sTitle, $sText, $this->oUserCurrent, array($oUser), false, false);
     //  Отправляем пользователю заявку
     E::ModuleNotify()->SendBlogUserInvite($oUser, $this->oUserCurrent, $oBlog, R::GetPath('talk') . 'read/' . $oTalk->getId() . '/');
     //  Удаляем отправляющего юзера из переписки
     E::ModuleTalk()->DeleteTalkUserByArray($oTalk->getId(), $this->oUserCurrent->getId());
 }
예제 #7
0
 /**
  * Обработка подтверждения нового емайла при смене старого
  */
 public function EventChangemailConfirmTo()
 {
     if (!($oChangemail = $this->User_GetUserChangemailByCodeTo($this->GetParamEventMatch(1, 0)))) {
         return parent::EventNotFound();
     }
     if (!$oChangemail->getConfirmFrom() or $oChangemail->getConfirmTo() or strtotime($oChangemail->getDateExpired()) < time()) {
         return parent::EventNotFound();
     }
     $oChangemail->setConfirmTo(1);
     $oChangemail->setDateUsed(date("Y-m-d H:i:s"));
     $this->User_UpdateUserChangemail($oChangemail);
     $oUser = $this->User_GetUserById($oChangemail->getUserId());
     $oUser->setMail($oChangemail->getMailTo());
     $this->User_Update($oUser);
     $this->Viewer_Assign('oAceUserProfile', $this->PluginAceadminpanel_Admin_GetUserByLogin($this->oUserProfile->getLogin()));
     $this->Viewer_Assign('sText', $this->Lang_Get('settings_profile_mail_change_ok', array('mail' => htmlspecialchars($oChangemail->getMailTo()))));
     $this->SetTemplateAction('changemail_confirm');
 }
예제 #8
0
 /**
  * Выполняет отправку приглашения в блог
  * (по внутренней почте и на email)
  *
  * @param ModuleBlog_EntityBlog $oBlog
  * @param ModuleUser_EntityUser $oUser
  */
 protected function SendBlogInvite($oBlog, $oUser)
 {
     $sTitle = $this->Lang_Get('blog_user_invite_title', array('blog_title' => $oBlog->getTitle()));
     require_once Config::Get('path.root.engine') . '/lib/external/XXTEA/encrypt.php';
     /**
      * Формируем код подтверждения в URL
      */
     $sCode = $oBlog->getId() . '_' . $oUser->getId();
     $sCode = rawurlencode(base64_encode(xxtea_encrypt($sCode, Config::Get('module.blog.encrypt'))));
     $aPath = array('accept' => Router::GetPath('blog') . 'invite/accept/?code=' . $sCode, 'reject' => Router::GetPath('blog') . 'invite/reject/?code=' . $sCode);
     $sText = $this->Lang_Get('blog_user_invite_text', array('login' => $this->oUserCurrent->getLogin(), 'accept_path' => $aPath['accept'], 'reject_path' => $aPath['reject'], 'blog_title' => $oBlog->getTitle()));
     $oTalk = $this->Talk_SendTalk($sTitle, $sText, $this->oUserCurrent, array($oUser), false, false);
     /**
      * Отправляем пользователю заявку
      */
     $this->Notify_SendBlogUserInvite($oUser, $this->oUserCurrent, $oBlog, Router::GetPath('talk') . 'read/' . $oTalk->getId() . '/');
     /**
      * Удаляем отправляющего юзера из переписки
      */
     $this->Talk_DeleteTalkUserByArray($oTalk->getId(), $this->oUserCurrent->getId());
 }
 /**
  * Выполняется при завершении работы экшена
  *
  */
 public function EventShutdown()
 {
     $this->Viewer_Assign('oAceUserProfile', $this->PluginAceadminpanel_Admin_GetUserByLogin($this->oUserCurrent->getLogin()));
     $iCountTopicFavourite = $this->Topic_GetCountTopicsFavouriteByUserId($this->oUserCurrent->getId());
     $iCountTopicUser = $this->Topic_GetCountTopicsPersonalByUser($this->oUserCurrent->getId(), 1);
     $iCountCommentUser = $this->Comment_GetCountCommentsByUserId($this->oUserCurrent->getId(), 'topic');
     $iCountCommentFavourite = $this->Comment_GetCountCommentsFavouriteByUserId($this->oUserCurrent->getId());
     $iCountNoteUser = $this->User_GetCountUserNotesByUserId($this->oUserCurrent->getId());
     $this->Viewer_Assign('oUserProfile', $this->oUserCurrent);
     $this->Viewer_Assign('iCountWallUser', $this->Wall_GetCountWall(array('wall_user_id' => $this->oUserCurrent->getId(), 'pid' => null)));
     /**
      * Общее число публикация и избранного
      */
     $this->Viewer_Assign('iCountCreated', $iCountNoteUser + $iCountTopicUser + $iCountCommentUser);
     $this->Viewer_Assign('iCountFavourite', $iCountCommentFavourite + $iCountTopicFavourite);
     $this->Viewer_Assign('iCountFriendsUser', $this->User_GetCountUsersFriend($this->oUserCurrent->getId()));
     /**
      * Загружаем в шаблон необходимые переменные
      */
     $this->Viewer_Assign('sMenuItemSelect', $this->sMenuItemSelect);
     $this->Viewer_Assign('sMenuSubItemSelect', $this->sMenuSubItemSelect);
     $this->Hook_Run('action_shutdown_settings');
 }
예제 #10
0
 /**
  * Авторизовывает юзера
  *
  * @param ModuleUser_EntityUser $oUser
  * @return unknown
  */
 public function Authorization(ModuleUser_EntityUser $oUser, $bRemember = true, $sKey = null)
 {
     if (!$oUser->getId() or !$oUser->getActivate()) {
         return false;
     }
     /**
      * Генерим новый ключ авторизаии для куков
      */
     if (is_null($sKey)) {
         $sKey = md5(func_generator() . time() . $oUser->getLogin());
     }
     /**
      * Создаём новую сессию
      */
     if (!$this->CreateSession($oUser, $sKey)) {
         return false;
     }
     /**
      * Запоминаем в сесси юзера
      */
     $this->Session_Set('user_id', $oUser->getId());
     $this->oUserCurrent = $oUser;
     /**
      * Ставим куку
      */
     if ($bRemember) {
         setcookie('key', $sKey, time() + 60 * 60 * 24 * 3, Config::Get('sys.cookie.path'), Config::Get('sys.cookie.host'));
     }
 }
예제 #11
0
 /**
  * Добавление нового участника разговора (ajax)
  *
  */
 public function AjaxAddTalkUser()
 {
     /**
      * Устанавливаем формат Ajax ответа
      */
     $this->Viewer_SetResponseAjax('json');
     $aUsers = getRequest('users', null, 'post');
     $idTalk = getRequestStr('target_id', null, 'post');
     /**
      * Валидация
      */
     if (!is_array($aUsers)) {
         return $this->EventErrorDebug();
     }
     /**
      * Если пользователь не авторизирован, возвращаем ошибку
      */
     if (!$this->User_IsAuthorization()) {
         $this->Message_AddErrorSingle($this->Lang_Get('common.error.need_authorization'), $this->Lang_Get('common.error.error'));
         return;
     }
     /**
      * Если разговор не найден, или пользователь не является его автором (или админом), возвращаем ошибку
      */
     if (!($oTalk = $this->Talk_GetTalkById($idTalk)) || $oTalk->getUserId() != $this->oUserCurrent->getId() && !$this->oUserCurrent->isAdministrator()) {
         $this->Message_AddErrorSingle($this->Lang_Get('talk.notices.not_found'), $this->Lang_Get('common.error.error'));
         return;
     }
     /**
      * Получаем список всех участников разговора
      */
     $aTalkUsers = $oTalk->getTalkUsers();
     /**
      * Получаем список пользователей, которые не принимают письма
      */
     $aUserInBlacklist = $this->Talk_GetBlacklistByTargetId($this->oUserCurrent->getId());
     /**
      * Ограничения на максимальное число участников разговора
      */
     if (count($aTalkUsers) >= Config::Get('module.talk.max_users') and !$this->oUserCurrent->isAdministrator()) {
         $this->Message_AddError($this->Lang_Get('talk.add.notices.users_error_many'), $this->Lang_Get('common.error.error'));
         return;
     }
     /**
      * Обрабатываем добавление по каждому переданному логину пользователя
      */
     foreach ($aUsers as $sUser) {
         $sUser = trim($sUser);
         if ($sUser == '') {
             continue;
         }
         /**
          * Попытка добавить себя
          */
         if (strtolower($sUser) == strtolower($this->oUserCurrent->getLogin())) {
             $aResult[] = array('bStateError' => true, 'sMsgTitle' => $this->Lang_Get('common.error.error'), 'sMsg' => $this->Lang_Get('user_list_add.notices.error_self'));
             continue;
         }
         if (($oUser = $this->User_GetUserByLogin($sUser)) && $oUser->getActivate() == 1) {
             if (!in_array($oUser->getId(), $aUserInBlacklist)) {
                 if (array_key_exists($oUser->getId(), $aTalkUsers)) {
                     switch ($aTalkUsers[$oUser->getId()]->getUserActive()) {
                         /**
                          * Если пользователь ранее был удален админом разговора, то добавляем его снова
                          */
                         case ModuleTalk::TALK_USER_DELETE_BY_AUTHOR:
                             if ($this->Talk_AddTalkUser(Engine::GetEntity('Talk_TalkUser', array('talk_id' => $idTalk, 'user_id' => $oUser->getId(), 'date_last' => null, 'talk_user_active' => ModuleTalk::TALK_USER_ACTIVE)))) {
                                 $this->Talk_SendNotifyTalkNew($oUser, $this->oUserCurrent, $oTalk);
                                 $oViewer = $this->Viewer_GetLocalViewer();
                                 $oViewer->Assign('user', $oUser, true);
                                 $oViewer->Assign('showActions', true, true);
                                 $aResult[] = array('bStateError' => false, 'sMsgTitle' => $this->Lang_Get('common.attention'), 'sMsg' => $this->Lang_Get('user_list_add.notices.success_add', array('login', htmlspecialchars($sUser))), 'user_id' => $oUser->getId(), 'user_login' => $oUser->getLogin(), 'html' => $oViewer->Fetch("component@talk.participants-item"));
                                 $bState = true;
                             } else {
                                 $aResult[] = array('bStateError' => true, 'sMsgTitle' => $this->Lang_Get('common.error.error'), 'sMsg' => $this->Lang_Get('common.error.system.base'));
                             }
                             break;
                             /**
                              * Если пользователь является активным участником разговора, возвращаем ошибку
                              */
                         /**
                          * Если пользователь является активным участником разговора, возвращаем ошибку
                          */
                         case ModuleTalk::TALK_USER_ACTIVE:
                             $aResult[] = array('bStateError' => true, 'sMsgTitle' => $this->Lang_Get('common.error.error'), 'sMsg' => $this->Lang_Get('user_list_add.notices.error_already_added', array('login' => htmlspecialchars($sUser))));
                             break;
                             /**
                              * Если пользователь удалил себя из разговора самостоятельно, то блокируем повторное добавление
                              */
                         /**
                          * Если пользователь удалил себя из разговора самостоятельно, то блокируем повторное добавление
                          */
                         case ModuleTalk::TALK_USER_DELETE_BY_SELF:
                             $aResult[] = array('bStateError' => true, 'sMsgTitle' => $this->Lang_Get('common.error.error'), 'sMsg' => $this->Lang_Get('talk.users.notices.deleted', array('login' => htmlspecialchars($sUser))));
                             break;
                         default:
                             $aResult[] = array('bStateError' => true, 'sMsgTitle' => $this->Lang_Get('common.error.error'), 'sMsg' => $this->Lang_Get('common.error.system.base'));
                     }
                 } elseif ($this->Talk_AddTalkUser(Engine::GetEntity('Talk_TalkUser', array('talk_id' => $idTalk, 'user_id' => $oUser->getId(), 'date_last' => null, 'talk_user_active' => ModuleTalk::TALK_USER_ACTIVE)))) {
                     $this->Talk_SendNotifyTalkNew($oUser, $this->oUserCurrent, $oTalk);
                     $oViewer = $this->Viewer_GetLocalViewer();
                     $oViewer->Assign('user', $oUser, true);
                     $oViewer->Assign('showActions', true, true);
                     $aResult[] = array('bStateError' => false, 'sMsgTitle' => $this->Lang_Get('common.attention'), 'sMsg' => $this->Lang_Get('user_list_add.notices.success_add', array('login', htmlspecialchars($sUser))), 'user_id' => $oUser->getId(), 'html' => $oViewer->Fetch("component@talk.participants-item"));
                     $bState = true;
                 } else {
                     $aResult[] = array('bStateError' => true, 'sMsgTitle' => $this->Lang_Get('common.error.error'), 'sMsg' => $this->Lang_Get('common.error.system.base'));
                 }
             } else {
                 /**
                  * Добавляем пользователь не принимает сообщения
                  */
                 $aResult[] = array('bStateError' => true, 'sMsgTitle' => $this->Lang_Get('common.error.error'), 'sMsg' => $this->Lang_Get('talk.blacklist.notices.blocked', array('login' => htmlspecialchars($sUser))));
             }
         } else {
             /**
              * Пользователь не найден в базе данных или не активен
              */
             $aResult[] = array('bStateError' => true, 'sMsgTitle' => $this->Lang_Get('common.error.error'), 'sMsg' => $this->Lang_Get('user.notices.not_found', array('login' => htmlspecialchars($sUser))));
         }
     }
     /**
      * Передаем во вьевер массив результатов обработки по каждому пользователю
      */
     $this->Viewer_AssignAjax('users', $aResult);
 }
예제 #12
0
 /**
  * Добавляет юзера
  *
  * @param ModuleUser_EntityUser $oUser    Объект пользователя
  *
  * @return int|bool
  */
 public function Add(ModuleUser_EntityUser $oUser)
 {
     $sql = "INSERT INTO ?_user\n\t\t\t(user_login,\n\t\t\tuser_password,\n\t\t\tuser_mail,\n\t\t\tuser_date_register,\n\t\t\tuser_ip_register,\n\t\t\tuser_activate,\n\t\t\tuser_activate_key\n\t\t\t)\n\t\t\tVALUES(?, ?, ?, ?, ?, ?, ?)\n\t\t";
     $nUserId = $this->oDb->query($sql, $oUser->getLogin(), $oUser->getPassword(), $oUser->getMail(), $oUser->getDateRegister(), $oUser->getIpRegister(), $oUser->getActivate(), $oUser->getActivationKey());
     return $nUserId ? $nUserId : false;
 }
예제 #13
0
 protected function _eventUsersCmdMessageSeparate()
 {
     $bOk = true;
     $sTitle = F::GetRequest('talk_title');
     $sText = E::ModuleText()->Parser(F::GetRequest('talk_text'));
     $sDate = date(F::Now());
     $sIp = F::GetUserIp();
     if ($sUsers = $this->GetPost('users_list')) {
         $aUsers = explode(',', str_replace(' ', '', $sUsers));
     } else {
         $aUsers = array();
     }
     if ($aUsers) {
         // Если указано, то шлем самому себе со списком получателей
         if (F::GetRequest('send_copy_self')) {
             $oSelfTalk = E::GetEntity('Talk_Talk');
             $oSelfTalk->setUserId($this->oUserCurrent->getId());
             $oSelfTalk->setUserIdLast($this->oUserCurrent->getId());
             $oSelfTalk->setTitle($sTitle);
             $oSelfTalk->setText(E::ModuleText()->Parser('To: <i>' . $sUsers . '</i>' . "\n\n" . 'Msg: ' . $this->GetPost('talk_text')));
             $oSelfTalk->setDate($sDate);
             $oSelfTalk->setDateLast($sDate);
             $oSelfTalk->setUserIp($sIp);
             if ($oSelfTalk = E::ModuleTalk()->AddTalk($oSelfTalk)) {
                 $oTalkUser = E::GetEntity('Talk_TalkUser');
                 $oTalkUser->setTalkId($oSelfTalk->getId());
                 $oTalkUser->setUserId($this->oUserCurrent->getId());
                 $oTalkUser->setDateLast($sDate);
                 E::ModuleTalk()->AddTalkUser($oTalkUser);
                 // уведомление по e-mail
                 $oUserToMail = $this->oUserCurrent;
                 E::ModuleNotify()->SendTalkNew($oUserToMail, $this->oUserCurrent, $oSelfTalk);
             } else {
                 $bOk = false;
             }
         }
         if ($bOk) {
             // теперь рассылаем остальным - каждому отдельное сообщение
             foreach ($aUsers as $sUserLogin) {
                 if ($sUserLogin && $sUserLogin != $this->oUserCurrent->getLogin() && ($oUserRecipient = E::ModuleUser()->GetUserByLogin($sUserLogin))) {
                     $oTalk = E::GetEntity('Talk_Talk');
                     $oTalk->setUserId($this->oUserCurrent->getId());
                     $oTalk->setUserIdLast($this->oUserCurrent->getId());
                     $oTalk->setTitle($sTitle);
                     $oTalk->setText($sText);
                     $oTalk->setDate($sDate);
                     $oTalk->setDateLast($sDate);
                     $oTalk->setUserIp($sIp);
                     if ($oTalk = E::ModuleTalk()->AddTalk($oTalk)) {
                         $oTalkUser = E::GetEntity('Talk_TalkUser');
                         $oTalkUser->setTalkId($oTalk->getId());
                         $oTalkUser->setUserId($oUserRecipient->GetId());
                         $oTalkUser->setDateLast(null);
                         E::ModuleTalk()->AddTalkUser($oTalkUser);
                         // Отправка самому себе, чтобы можно было читать ответ
                         $oTalkUser = E::GetEntity('Talk_TalkUser');
                         $oTalkUser->setTalkId($oTalk->getId());
                         $oTalkUser->setUserId($this->oUserCurrent->getId());
                         $oTalkUser->setDateLast($sDate);
                         E::ModuleTalk()->AddTalkUser($oTalkUser);
                         // Отправляем уведомления
                         $oUserToMail = E::ModuleUser()->GetUserById($oUserRecipient->GetId());
                         E::ModuleNotify()->SendTalkNew($oUserToMail, $this->oUserCurrent, $oTalk);
                     } else {
                         $bOk = false;
                         break;
                     }
                 }
             }
         }
     }
     if ($bOk) {
         E::ModuleMessage()->AddNotice(E::ModuleLang()->Get('action.admin.msg_sent_ok'), null, true);
     } else {
         E::ModuleMessage()->AddError(E::ModuleLang()->Get('system_error'), null, true);
     }
 }
예제 #14
0
 /**
  * Универсальный метод отправки уведомлений на email
  *
  * @param ModuleUser_EntityUser|string $oUserTo Кому отправляем (пользователь или email)
  * @param string $sTemplate Шаблон для отправки
  * @param string $sSubject Тема письма
  * @param array $aAssign Ассоциативный массив для загрузки переменных в шаблон письма
  * @param string|null $sPluginName Плагин из которого происходит отправка
  */
 public function Send($oUserTo, $sTemplate, $sSubject, $aAssign = array(), $sPluginName = null)
 {
     if ($oUserTo instanceof ModuleUser_EntityUser) {
         $sMail = $oUserTo->getMail();
         $sName = $oUserTo->getLogin();
     } else {
         $sMail = $oUserTo;
         $sName = '';
     }
     /**
      * Передаём в шаблон переменные
      */
     foreach ($aAssign as $k => $v) {
         $this->oViewerLocal->Assign($k, $v);
     }
     /**
      * Формируем шаблон
      */
     $sBody = $this->oViewerLocal->Fetch($this->GetTemplatePath($sTemplate, $sPluginName));
     /**
      * Если в конфигураторе указан отложенный метод отправки,
      * то добавляем задание в массив. В противном случае,
      * сразу отсылаем на email
      */
     if (Config::Get('module.notify.delayed')) {
         $oNotifyTask = Engine::GetEntity('Notify_Task', array('user_mail' => $sMail, 'user_login' => $sName, 'notify_text' => $sBody, 'notify_subject' => $sSubject, 'date_created' => date("Y-m-d H:i:s"), 'notify_task_status' => self::NOTIFY_TASK_STATUS_NULL));
         if (Config::Get('module.notify.insert_single')) {
             $this->aTask[] = $oNotifyTask;
         } else {
             $this->oMapper->AddTask($oNotifyTask);
         }
     } else {
         /**
          * Отправляем мыло
          */
         $this->Mail_SetAdress($sMail, $sName);
         $this->Mail_SetSubject($sSubject);
         $this->Mail_SetBody($sBody);
         $this->Mail_setHTML();
         $this->Mail_Send();
     }
 }
예제 #15
0
 /**
  * Добавление нового участника разговора (ajax)
  *
  */
 public function AjaxAddTalkUser()
 {
     // * Устанавливаем формат Ajax ответа
     E::ModuleViewer()->SetResponseAjax('json');
     $sUsers = F::GetRequestStr('users', null, 'post');
     $idTalk = F::GetRequestStr('idTalk', null, 'post');
     // * Если пользователь не авторизирован, возвращаем ошибку
     if (!E::ModuleUser()->IsAuthorization()) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('need_authorization'), E::ModuleLang()->Get('error'));
         return;
     }
     // * Если разговор не найден, или пользователь не является его автором (или админом), возвращаем ошибку
     if (!($oTalk = E::ModuleTalk()->GetTalkById($idTalk)) || $oTalk->getUserId() != $this->oUserCurrent->getId() && !$this->oUserCurrent->isAdministrator()) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('talk_not_found'), E::ModuleLang()->Get('error'));
         return;
     }
     // * Получаем список всех участников разговора
     $aTalkUsers = $oTalk->getTalkUsers();
     $aUsers = explode(',', $sUsers);
     // * Получаем список пользователей, которые не принимают письма
     $aUserInBlacklist = E::ModuleTalk()->GetBlacklistByTargetId($this->oUserCurrent->getId());
     // * Ограничения на максимальное число участников разговора
     if (count($aTalkUsers) >= Config::Get('module.talk.max_users') && !$this->oUserCurrent->isAdministrator()) {
         E::ModuleMessage()->AddError(E::ModuleLang()->Get('talk_create_users_error_many'), E::ModuleLang()->Get('error'));
         return;
     }
     // * Обрабатываем добавление по каждому переданному логину пользователя
     foreach ($aUsers as $sUser) {
         $sUser = trim($sUser);
         if ($sUser == '') {
             continue;
         }
         // * Попытка добавить себя
         if (strtolower($sUser) == strtolower($this->oUserCurrent->getLogin())) {
             $aResult[] = array('bStateError' => true, 'sMsgTitle' => E::ModuleLang()->Get('error'), 'sMsg' => E::ModuleLang()->Get('talk_speaker_add_self'));
             continue;
         }
         if (($oUser = E::ModuleUser()->GetUserByLogin($sUser)) && $oUser->getActivate() == 1) {
             if (!in_array($oUser->getId(), $aUserInBlacklist)) {
                 if (array_key_exists($oUser->getId(), $aTalkUsers)) {
                     switch ($aTalkUsers[$oUser->getId()]->getUserActive()) {
                         // * Если пользователь ранее был удален админом разговора, то добавляем его снова
                         case ModuleTalk::TALK_USER_DELETE_BY_AUTHOR:
                             if (E::ModuleTalk()->AddTalkUser(E::GetEntity('Talk_TalkUser', array('talk_id' => $idTalk, 'user_id' => $oUser->getId(), 'date_last' => null, 'talk_user_active' => ModuleTalk::TALK_USER_ACTIVE)))) {
                                 E::ModuleNotify()->SendTalkNew($oUser, $this->oUserCurrent, $oTalk);
                                 $aResult[] = array('bStateError' => false, 'sMsgTitle' => E::ModuleLang()->Get('attention'), 'sMsg' => E::ModuleLang()->Get('talk_speaker_add_ok', array('login', htmlspecialchars($sUser))), 'sUserId' => $oUser->getId(), 'sUserLogin' => $oUser->getLogin(), 'sUserLink' => $oUser->getUserWebPath(), 'sUserWebPath' => $oUser->getUserWebPath(), 'sUserAvatar48' => $oUser->getAvatarUrl(48));
                                 $bState = true;
                             } else {
                                 $aResult[] = array('bStateError' => true, 'sMsgTitle' => E::ModuleLang()->Get('error'), 'sMsg' => E::ModuleLang()->Get('system_error'));
                             }
                             break;
                             // * Если пользователь является активным участником разговора, возвращаем ошибку
                         // * Если пользователь является активным участником разговора, возвращаем ошибку
                         case ModuleTalk::TALK_USER_ACTIVE:
                             $aResult[] = array('bStateError' => true, 'sMsgTitle' => E::ModuleLang()->Get('error'), 'sMsg' => E::ModuleLang()->Get('talk_speaker_user_already_exist', array('login' => htmlspecialchars($sUser))));
                             break;
                             // * Если пользователь удалил себя из разговора самостоятельно, то блокируем повторное добавление
                         // * Если пользователь удалил себя из разговора самостоятельно, то блокируем повторное добавление
                         case ModuleTalk::TALK_USER_DELETE_BY_SELF:
                             $aResult[] = array('bStateError' => true, 'sMsgTitle' => E::ModuleLang()->Get('error'), 'sMsg' => E::ModuleLang()->Get('talk_speaker_delete_by_self', array('login' => htmlspecialchars($sUser))));
                             break;
                         default:
                             $aResult[] = array('bStateError' => true, 'sMsgTitle' => E::ModuleLang()->Get('error'), 'sMsg' => E::ModuleLang()->Get('system_error'));
                     }
                 } elseif (E::ModuleTalk()->AddTalkUser(E::GetEntity('Talk_TalkUser', array('talk_id' => $idTalk, 'user_id' => $oUser->getId(), 'date_last' => null, 'talk_user_active' => ModuleTalk::TALK_USER_ACTIVE)))) {
                     E::ModuleNotify()->SendTalkNew($oUser, $this->oUserCurrent, $oTalk);
                     $aResult[] = array('bStateError' => false, 'sMsgTitle' => E::ModuleLang()->Get('attention'), 'sMsg' => E::ModuleLang()->Get('talk_speaker_add_ok', array('login', htmlspecialchars($sUser))), 'sUserId' => $oUser->getId(), 'sUserLogin' => $oUser->getLogin(), 'sUserLink' => $oUser->getUserWebPath(), 'sUserWebPath' => $oUser->getUserWebPath(), 'sUserAvatar48' => $oUser->getAvatarUrl(48));
                     $bState = true;
                 } else {
                     $aResult[] = array('bStateError' => true, 'sMsgTitle' => E::ModuleLang()->Get('error'), 'sMsg' => E::ModuleLang()->Get('system_error'));
                 }
             } else {
                 // * Добавляем пользователь не принимает сообщения
                 $aResult[] = array('bStateError' => true, 'sMsgTitle' => E::ModuleLang()->Get('error'), 'sMsg' => E::ModuleLang()->Get('talk_user_in_blacklist', array('login' => htmlspecialchars($sUser))));
             }
         } else {
             // * Пользователь не найден в базе данных или не активен
             $aResult[] = array('bStateError' => true, 'sMsgTitle' => E::ModuleLang()->Get('error'), 'sMsg' => E::ModuleLang()->Get('user_not_found', array('login' => htmlspecialchars($sUser))));
         }
     }
     // * Передаем во вьевер массив результатов обработки по каждому пользователю
     E::ModuleViewer()->AssignAjax('aUsers', $aResult);
 }
예제 #16
0
 /**
  * Удаление пользователя из друзей
  */
 public function EventAjaxFriendDelete()
 {
     /**
      * Устанавливаем формат Ajax ответа
      */
     E::ModuleViewer()->SetResponseAjax('json');
     $sUserId = F::GetRequestStr('idUser', null, 'post');
     /**
      * Если пользователь не авторизирован, возвращаем ошибку
      */
     if (!E::ModuleUser()->IsAuthorization()) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('need_authorization'), E::ModuleLang()->Get('error'));
         return;
     }
     $this->oUserCurrent = E::ModuleUser()->GetUserCurrent();
     /**
      * При попытке добавить в друзья себя, возвращаем ошибку
      */
     if ($this->oUserCurrent->getId() == $sUserId) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('user_friend_add_self'), E::ModuleLang()->Get('error'));
         return;
     }
     /**
      * Если пользователь не найден, возвращаем ошибку
      */
     if (!($oUser = E::ModuleUser()->GetUserById($sUserId))) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('user_friend_del_no'), E::ModuleLang()->Get('error'));
         return;
     }
     $this->oUserProfile = $oUser;
     /**
      * Получаем статус дружбы между пользователями.
      * Если статус не определен, или отличается от принятой заявки,
      * возвращаем ошибку
      */
     $oFriend = E::ModuleUser()->GetFriend($oUser->getId(), $this->oUserCurrent->getId());
     $aAllowedFriendStatus = array(ModuleUser::USER_FRIEND_ACCEPT + ModuleUser::USER_FRIEND_OFFER, ModuleUser::USER_FRIEND_ACCEPT + ModuleUser::USER_FRIEND_ACCEPT);
     if (!$oFriend || !in_array($oFriend->getFriendStatus(), $aAllowedFriendStatus)) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('user_friend_del_no'), E::ModuleLang()->Get('error'));
         return;
     }
     /**
      * Удаляем из друзей
      */
     if (E::ModuleUser()->DeleteFriend($oFriend)) {
         E::ModuleMessage()->AddNoticeSingle(E::ModuleLang()->Get('user_friend_del_ok'), E::ModuleLang()->Get('attention'));
         $oViewerLocal = $this->GetViewerLocal();
         $oViewerLocal->Assign('oUserFriend', $oFriend);
         E::ModuleViewer()->AssignAjax('sToggleText', $oViewerLocal->Fetch('actions/profile/action.profile.friend_item.tpl'));
         /**
          * Отправляем пользователю сообщение об удалении дружеской связи
          */
         if (Config::Get('module.user.friend_notice.delete')) {
             $sText = E::ModuleLang()->Get('user_friend_del_notice_text', array('login' => $this->oUserCurrent->getLogin()));
             $oTalk = E::ModuleTalk()->SendTalk(E::ModuleLang()->Get('user_friend_del_notice_title'), $sText, $this->oUserCurrent, array($oUser), false, false);
             E::ModuleTalk()->DeleteTalkUserByArray($oTalk->getId(), $this->oUserCurrent->getId());
         }
         return;
     } else {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
         return;
     }
 }
예제 #17
0
 /**
  * Универсальный метод отправки уведомлений на email
  *
  * @param ModuleUser_EntityUser|string $oUserTo Кому отправляем (пользователь или email)
  * @param string $sTemplate Шаблон для отправки
  * @param string $sSubject Тема письма
  * @param array $aAssign Ассоциативный массив для загрузки переменных в шаблон письма
  * @param string|null $sPluginName Плагин из которого происходит отправка
  * @param bool $bForceSend Отправлять сразу, даже при опции module.notify.delayed = true
  */
 public function Send($oUserTo, $sTemplate, $sSubject, $aAssign = array(), $sPluginName = null, $bForceSend = false)
 {
     if ($oUserTo instanceof ModuleUser_EntityUser) {
         $sMail = $oUserTo->getMail();
         $sName = $oUserTo->getLogin();
     } else {
         $sMail = $oUserTo;
         $sName = '';
     }
     /**
      * Передаём в шаблон переменные
      */
     foreach ($aAssign as $k => $v) {
         $this->oViewerLocal->Assign($k, $v);
     }
     /**
      * Формируем шаблон
      */
     $sBody = $this->oViewerLocal->Fetch($this->GetTemplatePath($sTemplate, $sPluginName));
     /**
      * Если в конфигураторе указан отложенный метод отправки,
      * то добавляем задание в массив. В противном случае,
      * сразу отсылаем на email
      */
     $oNotifyTask = Engine::GetEntity('Notify_Task');
     $oNotifyTask->setUserMail($sMail);
     $oNotifyTask->setUserLogin($sName);
     $oNotifyTask->setNotifyText($sBody);
     $oNotifyTask->setNotifySubject($sSubject);
     $oNotifyTask->setDateCreated(date("Y-m-d H:i:s"));
     $oNotifyTask->setNotifyTaskStatus(self::NOTIFY_TASK_STATUS_NULL);
     if (Config::Get('module.notify.delayed') and !$bForceSend) {
         if (Config::Get('module.notify.insert_single')) {
             $this->aTask[] = $oNotifyTask;
         } else {
             $this->oMapper->AddTask($oNotifyTask);
         }
     } else {
         /**
          * Отправляем мыло
          */
         $this->SendTask($oNotifyTask);
     }
 }
예제 #18
0
 /**
  * Универсальный метод отправки уведомлений на email
  *
  * @param ModuleUser_EntityUser|string $xUserTo     Кому отправляем (пользователь или email)
  * @param string                       $sTemplate   Шаблон для отправки
  * @param string                       $sSubject    Тема письма
  * @param array                        $aAssign     Ассоциативный массив для загрузки переменных в шаблон письма
  * @param string|null                  $sPluginName Плагин из которого происходит отправка
  * @param bool                         $bForceSend  Отправлять сразу, даже при опции module.notify.delayed = true
  *
  * @return bool
  */
 public function Send($xUserTo, $sTemplate, $sSubject, $aAssign = array(), $sPluginName = null, $bForceSend = false)
 {
     if ($xUserTo instanceof ModuleUser_EntityUser) {
         $sMail = $xUserTo->getMail();
         $sName = $xUserTo->getLogin();
     } else {
         $sMail = $xUserTo;
         $sName = '';
     }
     /**
      * Передаём в шаблон переменные
      */
     foreach ($aAssign as $sVarName => $sValue) {
         $this->oViewerLocal->Assign($sVarName, $sValue);
     }
     /**
      * Формируем шаблон
      */
     $sTemplate = $this->sPrefix . $sTemplate;
     $sBody = $this->oViewerLocal->Fetch($this->GetTemplatePath($sTemplate, $sPluginName));
     /**
      * Если в конфигураторе указан отложенный метод отправки,
      * то добавляем задание в массив. В противном случае,
      * сразу отсылаем на email
      */
     if (Config::Get('module.notify.delayed') && !$bForceSend) {
         $oNotifyTask = E::GetEntity('Notify_Task', array('user_mail' => $sMail, 'user_login' => $sName, 'notify_text' => $sBody, 'notify_subject' => $sSubject, 'date_created' => F::Now(), 'notify_task_status' => self::NOTIFY_TASK_STATUS_NULL));
         if (Config::Get('module.notify.insert_single')) {
             $this->aTask[] = $oNotifyTask;
             $bResult = true;
         } else {
             $bResult = $this->oMapper->AddTask($oNotifyTask);
         }
     } else {
         // * Отправляем e-mail
         E::ModuleMail()->SetAdress($sMail, $sName);
         E::ModuleMail()->SetSubject($sSubject);
         E::ModuleMail()->SetBody($sBody);
         E::ModuleMail()->SetHTML();
         $bResult = E::ModuleMail()->Send();
     }
     return $bResult;
 }
예제 #19
0
 /**
  * Создаёт персональный блог
  *
  * @param ModuleUser_EntityUser $oUser	Пользователь
  * @return ModuleBlog_EntityBlog|bool
  */
 public function CreatePersonalBlog(ModuleUser_EntityUser $oUser)
 {
     $oBlog = Engine::GetEntity('Blog');
     $oBlog->setOwnerId($oUser->getId());
     $oBlog->setTitle($this->Lang_Get('blogs_personal_title') . ' ' . $oUser->getLogin());
     $oBlog->setType('personal');
     $oBlog->setDescription($this->Lang_Get('blogs_personal_description'));
     $oBlog->setDateAdd(date("Y-m-d H:i:s"));
     $oBlog->setLimitRatingTopic(-1000);
     $oBlog->setUrl(null);
     $oBlog->setAvatar(null);
     return $this->AddBlog($oBlog);
 }