/** * Отправляет пользователю сообщение о добавлении его в друзья * * @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(); } }
/** * Обработка завершения работу экшена */ 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; }
/** * Авторизовывает юзера * * @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(); } }
/** * Выполняет отправку приглашения в блог * (по внутренней почте и на 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()); }
/** * Обработка подтверждения нового емайла при смене старого */ 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'); }
/** * Выполняет отправку приглашения в блог * (по внутренней почте и на 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'); }
/** * Авторизовывает юзера * * @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')); } }
/** * Добавление нового участника разговора (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); }
/** * Добавляет юзера * * @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; }
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); } }
/** * Универсальный метод отправки уведомлений на 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(); } }
/** * Добавление нового участника разговора (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); }
/** * Удаление пользователя из друзей */ 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; } }
/** * Универсальный метод отправки уведомлений на 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); } }
/** * Универсальный метод отправки уведомлений на 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; }
/** * Создаёт персональный блог * * @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); }