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 run() { $mail = new Mail(); /** @var MailQueueDAO $message */ foreach (MailQueueDAO::create()->getAllList() as $message) { $mail->send($message->getEmail(), $message->getTopic(), $message->getMessage()); $message->dropById($message->getId()); } }
if (!$email || !$token) { showFirst($email); exit; } $form = new Form(); $form->import($_POST); $form->addRule(ActivationsDAO::EMAIL, Rules::email(), 'email в таком формате не может существовать.', 'emailPattern')->addRule(ActivationsDAO::EMAIL, function ($val) { $user = UserDAO::create()->getByEmail($val); return (bool) $user->getId(); }, 'Такой email не найден в системе.', 'userSearch'); $validation = $form->validate(); if (!$validation || $sessionToken != $token) { showFirst($email, $validation, $form); exit; } // Поиск прежних активаций и аннуляция $activation = ActivationsDAO::create(); $activation->getByEmail($email); if ($activation->getId() && !$activation->getIsUsed()) { $activation->setIsUsed(true); $activation->save(); } // Делаем активационный код $activation = ActivationsDAO::create(); $activation->fillParams([ActivationsDAO::EMAIL => $email, ActivationsDAO::CODE => substr(base64_encode(PasswordUtils::get(64)), 0, 64), ActivationsDAO::TIMESTAMP => date('Y-m-d H:i:s'), ActivationsDAO::USED => false]); $activation->save(); $msg = "<h2>Восстановление пароля в СоциоЧате</h2>\n<p>Была произведена процедура восстановления пароля с использованием вашего email.</p>\n<p>Для подтверждения сброса пароля перейдите по <a href=\"" . $config->domain->protocol . $config->domain->web . "/activation.php?email={$email}&code=" . $activation->getCode() . "\">ссылке</a></p>\n<p>Данная ссылка действительна до " . date('Y-m-d H:i', time() + $config->activationTTL) . "</p>"; $mailer = \SocioChat\DAO\MailQueueDAO::create(); $mailer->setEmail($email)->setTopic('Sociochat.me - Восстановление пароля')->setMessage($msg); $mailer->save(); require_once "pages/recovery/recovery2.php";