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);
     }
 }
Exemplo n.º 2
0
 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);
         }
     }
 }
Exemplo n.º 4
0
 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);
 }
Exemplo n.º 5
0
 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);
 }
Exemplo n.º 6
0
 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);
 }
Exemplo n.º 7
0
 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__]);
     }
 }
Exemplo n.º 8
0
 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);
 }
Exemplo n.º 9
0
 /**
  * @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;
 }
Exemplo n.º 10
0
$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";
Exemplo n.º 11
0
$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();
}
Exemplo n.º 12
0
 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());
 }