private function unbanResponse(User $user, UserDAO $unBanUserDAO) { $response = (new MessageResponse())->setMsg(MsgToken::create('UserIsUnbanned', $unBanUserDAO->getPropeties()->getName()))->setTime(null)->setChannelId($user->getChannelId())->setGuests(DI::get()->getUsers()->getUsersByChatId($user->getChannelId())); (new UserCollection())->attach($user)->setResponse($response)->notify(false); if ($unBanUser = DI::get()->getUsers()->getClientById($unBanUserDAO->getId())) { $response = (new MessageResponse())->setMsg(MsgToken::create('UserUnbannedYou', $user->getProperties()->getName()))->setChannelId($unBanUser->getChannelId())->setTime(null); (new UserCollection())->attach($unBanUser)->setResponse($response)->notify(false); } }
public function run(User $user, $args) { $args = explode(' ', $args, 2); $userName = $args[0]; if (!isset($args[1])) { RespondError::make($user, ['msg' => 'Вы не ввели сообщения']); return; } $text = $args[1]; $properties = PropertiesDAO::create()->getByUserName($userName); if (!$properties->getId()) { RespondError::make($user, ['msg' => "{$userName} не зарегистрирован или имя введено не верно"]); return; } $address = UserDAO::create()->getById($properties->getUserId()); $permissions = new UserActions($user->getUserDAO()); $actions = $permissions->getAllowed($address); if (!in_array(UserActions::MAIL, $actions)) { RespondError::make($user, ['msg' => $user->getLang()->getPhrase('NoPermission')]); return; } //@TODO сделать отправку по крону //также надо ограничить частоту отправки $config = DI::get()->getConfig(); $mailerName = 'СоциоЧат'; $headers = "MIME-Version: 1.0 \n" . "From: " . mb_encode_mimeheader($mailerName) . "<" . $config->adminEmail . "> \n" . "Reply-To: " . mb_encode_mimeheader($mailerName) . "<" . $config->adminEmail . "> \n" . "Content-Type: text/html;charset=UTF-8\n"; $topic = 'Для вас есть сообщение'; $msg = "<h2>Вам пришло сообщение от пользователя {$user->getProperties()->getName()}</h2>"; $msg .= '<p>' . htmlentities(strip_tags($text)) . '</p>'; $msg .= '<hr>'; $msg .= 'Вернуться в <a href="' . $config->domain->protocol . $config->domain->web . '">СоциоЧат</a>'; mb_send_mail($address->getEmail(), $topic, $msg, $headers); RespondError::make($user, ['msg' => 'Сообщение отправлено!']); return ['Сообщение отправлено!', true]; }
public function run() { $config = DI::get()->getConfig(); $timeOut = $config->onlineMonitoringTimeout; // Let it be simple for a while $channelId = 1; /** @var PropertiesDAO $props */ foreach (PropertiesDAO::create()->getRegisteredList() as $props) { if (!($limit = $props->getOnlineNotificationLimit())) { continue; } $online = OnlineDAO::create(); if ($online->isUserOnline($channelId, $props->getUserId())) { continue; } $onlineCount = $online->getOnlineCount($channelId); if (time() - $timeOut < strtotime($props->getOnlineNotificationLast())) { continue; } if ($onlineCount >= $limit) { $user = UserDAO::create()->getById($props->getUserId()); $list = ''; foreach ($online->getOnlineList($channelId) as $userId => $userName) { $list .= "<li>{$userName}</li>"; } $msg = "<h2>Достижение заданного онлайна в SocioChat.Me</h2>\n<p>Вы получили данное письмо, потому что пожелали уведомить вас, когда в чате будет более {$limit} человек.</p>\n<p>Сейчас на основном канале общается {$onlineCount} человек</p>\n<ul>{$list}</ul>\n<p><a href=\"" . $config->domain->protocol . $config->domain->web . "\">Присоединяйтесь</a>!</p>"; $message = MailQueueDAO::create(); $message->setEmail($user->getEmail())->setTopic('SocioChat.Me - Заходите к нам!')->setMessage($msg); $message->save(); $props->setOnlineNotificationLast(DbQueryHelper::timestamp2date()); $props->save(false); } } }
public function getObsoleteUserIds($deadLine) { if (!($unregisteredList = UserDAO::create()->getUnregisteredUserIds())) { return []; } $queryParams = array_merge([$deadLine], $unregisteredList); return $this->db->query("SELECT " . self::USER_ID . " FROM {$this->dbTable} WHERE " . self::ACCESS_TIME . " < :0 AND " . self::USER_ID . " IN (" . DbQueryHelper::commaSeparatedHolders($unregisteredList, 1) . ")", $queryParams, PDO::FETCH_COLUMN); }
public function updateSessionId(User $user, $oldUserId) { SessionDAO::create()->dropByUserId($oldUserId); $session = SessionDAO::create()->getByUserId($user->getId()); $session->setSessionId($user->getWSRequest()->getCookie('token'))->setAccessTime(date(self::TIMESTAMP))->setUserId($user->getId()); $session->save(); PropertiesDAO::create()->dropByUserId($oldUserId); UserBlacklistDAO::create()->dropByUserId($oldUserId); NameChangeDAO::create()->dropByUserId($oldUserId); UserDAO::create()->dropById($oldUserId); }
public function getAllowed(UserDAO $guest) { $actions = $this->actions; if (!$guest->getEmail()) { unset($actions[self::MAIL]); } if ($this->user->getBlacklist()->isBanned($guest->getId())) { unset($actions[self::BAN]); unset($actions[self::INVITE]); unset($actions[self::MAIL]); } elseif ($guest->getId() == $this->user->getId()) { $actions = [self::KARMA => self::KARMA]; } elseif (!$this->user->getEmail()) { unset($actions[self::KARMA_MINUS]); unset($actions[self::KARMA_PLUS]); unset($actions[self::MAIL]); } else { unset($actions[self::UNBAN]); } return array_keys($actions); }
public function save($fullSave = true) { try { if ($fullSave) { $properties = $this->getProperties(); $properties->save(); $blacklist = $this->getBlacklist(); $blacklist->save(); } $this->userDAO->save(); } catch (\PDOException $e) { DI::get()->getLogger()->alert($e->getMessage() . ': ' . $e->getTraceAsString(), [__CLASS__]); } }
protected function processSave(ChainContainer $chain) { $request = $chain->getRequest(); $user = $chain->getFrom(); if (!($notedUser = UserDAO::create()->getById($request[UserNotesDAO::USER_ID]))) { RespondError::make($user, ['user_id' => $user->getLang()->getPhrase('ThatUserNotFound')]); return; } if ($notedUser->getId() == $user->getId()) { RespondError::make($user, ['user_id' => $user->getLang()->getPhrase('CantDoToYourself')]); return; } $dao = $user->getUserNotes()->setUserId($user->getId())->setNotedUserId($notedUser->getId())->setNote($this->filterInput($request[UserNotesDAO::NOTE])); $dao->save(); $this->guestResponse($user); }
/** * @param Lang $lang * @param Logger $logger * @param User $newUserWrapper * @param Request $socketRequest * @return UserDAO */ private function createNewUser(Lang $lang, Logger $logger, User $newUserWrapper, Request $socketRequest) { $user = UserDAO::create()->setChatId(1)->setDateRegister(DbQueryHelper::timestamp2date())->setRole(UserRoleEnum::USER)->setBanned(false)->setImprint(null); try { $user->save(); } catch (\PDOException $e) { $logger->error("PDO Exception: " . $e->getMessage() . ': ' . $e->getTraceAsString(), [__METHOD__]); } $id = $user->getId(); $guestName = $lang->getPhrase('Guest') . $id; if (PropertiesDAO::create()->getByUserName($guestName)->getName()) { $guestName = $lang->getPhrase('Guest') . ' ' . $id; } $properties = $user->getPropeties(); $properties->setUserId($user->getId())->setName($guestName)->setSex(SexEnum::create(SexEnum::ANONYM))->setTim(TimEnum::create(TimEnum::ANY))->setBirthday(Rules::LOWEST_YEAR)->setOptions([PropertiesDAO::CENSOR => true])->setOnlineCount(0)->setMusicCount(0)->setWordsCount(0)->setRudeCount(0)->setKarma(0)->setMessagesCount(0)->setSubscription(true); try { $properties->save(); } catch (\PDOException $e) { $logger->error("PDO Exception: " . $e->getTraceAsString(), [__CLASS__]); } if ($refUserId = $socketRequest->getCookie('refUserId')) { $ref = ReferralDAO::create()->getByUserId($user->getId(), $refUserId); if (!$ref) { $ref = ReferralDAO::create()->setUserId($user->getId())->setRefUserId($refUserId)->setDateRegister(DbQueryHelper::timestamp2date()); $ref->save(); $logger->info('Found referral userId ' . $refUserId . ' for guest userId ' . $user->getId()); } } $logger->info("Created new user with id = {$id} for connectionId = {$newUserWrapper->getConnectionId()}", [__CLASS__]); return $user; }
$activation = $result[0]; /* @var $activation ActivationsDAO */ if (!$activation->getId() || $activation->getIsUsed()) { $heading = 'Ошибка!'; $message = 'Извините, но код невалиден.'; require_once "pages/common_page.php"; exit; } if ($activation->getCode() != $code) { $heading = 'Ошибка!'; $message = 'Извините, но код невалиден.'; require_once "pages/common_page.php"; exit; } if (strtotime($activation->getTimestamp()) + $config->activationTTL < time()) { $activation->setIsUsed(true); $activation->save(); $heading = 'Ошибка!'; $message = 'Извините, но валидационный код просрочен.'; require_once "pages/common_page.php"; exit; } $user = UserDAO::create()->getByEmail($email); $props = \SocioChat\DAO\PropertiesDAO::create()->getByUserId($user->getId()); $props->setSubscription(false); $props->save(false); $activation->setIsUsed(true); $activation->save(false); $heading = 'Готово!'; $message = 'Ваша учётная запись удалена из рассылки!'; require_once "pages/common_page.php";
$httpAcceptLanguage = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? mb_substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) : 'en'; $lang = $container->get('lang')->setLangByCode($httpAcceptLanguage); /* @var $lang Lang */ $userId = isset($_GET['id']) ? (int) $_GET['id'] : ''; if (!$userId) { http_response_code(400); return; } /** @var SessionDAO $session */ $session = $container->get('session')->read($_COOKIE['token']); if (!$session->getUserId()) { http_response_code(400); return json_encode(['error' => 'Unauthorized']); } $owner = \SocioChat\DAO\UserDAO::create()->getById($session->getUserId()); $user = \SocioChat\DAO\UserDAO::create()->getById($userId); if (!$user->getId()) { http_response_code(400); return json_encode(['error' => 'No user found']); } $props = $user->getPropeties(); $avatarDir = DI::get()->getConfig()->uploads->avatars->wwwfolder . DIRECTORY_SEPARATOR; $note = $owner->getUserNotes()->getNote($user->getId()); $total = $props->getTotal(); $dtF = new DateTime("@0"); $dtT = new DateTime("@" . $props->getOnlineCount()); $names = []; foreach (NameChangeDAO::create()->getHistoryByUserId($user->getId()) as $name) { /** @var NameChangeDAO $name */ $names[] = $name->getName(); }
private function checkReferral(User $user) { $ref = ReferralDAO::create()->getFirstRefByUserId($user->getId()); if (!$ref) { return; } $users = DI::get()->getUsers(); if ($refUserOnline = $users->getClientById($ref->getRefUserId())) { $refUser = $refUserOnline->getUserDAO(); } else { $refUser = UserDAO::create()->getById($ref->getRefUserId()); } if (!$refUser->getId()) { return; } $mark = UserKarmaDAO::create()->setUserId($refUser->getId())->setEvaluator($user)->setMark(5)->setDateRegister(DbQueryHelper::timestamp2date()); $mark->save(); $props = $refUser->getPropeties(); $props->setKarma($props->getKarma() + 5); if ($refUserOnline) { $refUserOnline->save(); $response = (new MessageResponse())->setGuests($users->getUsersByChatId($refUserOnline->getChannelId()))->setChannelId($refUserOnline->getChannelId())->setTime(null); $users->setResponse($response)->notify(); $response = (new MessageResponse())->setMsg(MsgToken::create('profile.referralKarma'))->setChannelId($refUserOnline->getChannelId())->setTime(null); (new UserCollection())->attach($refUserOnline)->setResponse($response)->notify(false); } else { $props->save(false); } DI::get()->getLogger()->info('Added karma to referral userId ' . $props->getUserId()); }