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); } } }
/** * {@inheritdoc} */ public function handleRequest(ChainContainer $chain) { $users = DI::get()->getUsers(); $user = $chain->getFrom(); $this->sendNickname($user); $this->handleHistory($user); $this->notifyChat($user, $users); $online = OnlineDAO::create(); $online->setOnlineList($user->getChannelId()); }
private function detacher(User $user, Logger $logger) { return function () use($user, $logger) { $clients = DI::get()->getUsers(); $clients->detach($user); $logger->info("OnClose closure:\n closed userId = {$user->getId()},\n connId = {$user->getConnectionId()}\n Total user count {$clients->getTotalCount()}\n", [__CLASS__]); $this->notifyOnClose($user, $clients); $this->cleanPendingQueue($user); ChannelsCollection::get()->clean($user); $props = $user->getProperties(); $props->setOnlineCount(time() - $user->getLoginTime() + $props->getOnlineCount()); $online = OnlineDAO::create(); $online->setOnlineList($user->getChannelId()); $user->save(); //update access time $sessionHandler = DI::get()->getSession(); $sessionHandler->store($user->getToken(), $user->getId()); unset($clients); unset($sessionHandler); unset($user); }; }
private function importProperties(User $user, $request) { $this->handleNameChange($user, $request); $properties = $user->getProperties(); $properties->setUserId($user->getId())->setName($request[PropertiesDAO::NAME])->setAbout(strip_tags(trim($request[PropertiesDAO::ABOUT])))->setTim(TimEnum::create($request[PropertiesDAO::TIM]))->setSex(SexEnum::create($request[PropertiesDAO::SEX]))->setCity($request[PropertiesDAO::CITY])->setBirthday($request[PropertiesDAO::BIRTH])->setSubscription($request[PropertiesDAO::IS_SUBSCRIBED])->setOptions([PropertiesDAO::CENSOR => $request[PropertiesDAO::CENSOR], PropertiesDAO::LINE_BREAK_TYPE => $request[PropertiesDAO::LINE_BREAK_TYPE], PropertiesDAO::NOTIFY_VISUAL => $request[PropertiesDAO::NOTIFY_VISUAL], PropertiesDAO::NOTIFY_SOUND => $request[PropertiesDAO::NOTIFY_SOUND], PropertiesDAO::ONLINE_NOTIFICATION => $request[PropertiesDAO::ONLINE_NOTIFICATION], PropertiesDAO::ONLINE_NOTIFICATION_LAST => $properties->getOnlineNotificationLast(), PropertiesDAO::MESSAGE_ANIMATION_TYPE => $request[PropertiesDAO::MESSAGE_ANIMATION_TYPE]]); $properties->save(false); $online = OnlineDAO::create(); $online->setOnlineList($user->getChannelId()); }