Îðëà
Îáëàñòè
Êîìïàíèé
Ïîëüçîâàòåëè
Ãàëåðåÿ
Ôèêñèðîâàííûå íîâîñòè
Îðëà
Îòçûâû î ôèðìàõ
Òàðèôû
Ïîëüçîâàòåëè
Îáëàñòè
Áàíêîìàòû
Òîðãîâûå òî÷êè
Äîñêà îáúÿâëåíèé
Êóðñû âàëþò
Ñêèäêè
îðãàíèçàöèè Îðëà
îðãàíèçàöèè îáëàñòè
òîâàðû
ñàéòû
ñàéòû Îðåë
Äàííûå
Ðàçäåëû
Ïîèñê
Ïîèñê çàïðîñû
Ñòàòèñòèêà
Ïîêàçû êàòàëîãà îðãàíèçàöèé
Ñòàòèñòèêà êëèåíòû
Ïîëüçîâàòåëè
Ñàéòû
Óïðàâëåíèå ñàéòîì
Àíêåòà
Àïòåêè
Àôèøà
Àôèøà íîâàÿ
Áàííåðû
Áèçíåñ >
Âèêòîðèíà
Ãîëîñîâàíèå
Ãîñòü íà ñàéòå
Èñòîðèè
Êàëåíäàðü ñîáûòèé
Êàòàëîãè >
Êîíêóðñ êðàñîòû
Êîíêóðñ àóäèî
Êîíñóëüòàöèè
Ìåíþ
Íîâîå íà ñàéòå
Íîâîñòè >
Îðãàíèçàöèè >
Ïðîãðàììà ÒÂ
Ïóáëèêàöèè
Ðàçäåëû ñàéòà
Ðàññûëêà
Ðåñòîðàíû
Ñåêðåò ôèðìû >
Ñåðâèñû >
Ññûëêè
Òåñòû
Ôàéëîâûé ìåíåäæåð
Ôîðóì
Ôîòîãàëåðåÿ
Îáðàòíàÿ ñâÿçü
Íåäâèæèìîñòü
Íîâûé ãîä
Òåêñòû
Ïîëüçîâàòåëè
Þðèäè÷åñêèé ðåéòèíã
Îòçûâû íà òîâàðû
Áàí ïîëüçîâàòåëåé
Æàëîáû
Íîâûå òåñòû
Êîðîíàâèðóñ
Ôàéëîâûé ìåíåäæåð
Èìÿ ôàéëà
BaseExternalUser.php~
Ñîäåðæèìîå
<?php namespace app\users\external; use App; use app\core\exceptions\BaseException; use app\core\models\Expression; use app\core\storage\FileUploader; use app\core\storage\ImageDownloader; use app\users\User; /** * Ð�бÑ�трактный клаÑ�Ñ� длÑ� реализации взаимодейÑ�твиÑ� между каким-то внешним API, например вконтакте, facebook * и пользователÑ�ми Ñ�иÑ�темы Infoorel.ru * * ПроцеÑ�Ñ� региÑ�трации обычно проиÑ�ходит Ñ�ледующим образом: * Ð’Ñ‹ должны получить от какой-то внешней Ñ�ети имÑ� пользователÑ�, аватарку, затем проверить, * еÑ�ть ли такой пользователь в Ñ�иÑ�теме или нет. Предварительно Ñ�оздав клаÑ�Ñ� длÑ� Ñ�той Ñ�оциальной Ñ�ети. * ПредÑ�тавим, что мы пишем Ñ�то длÑ� Vk: * * ```php * class VkExternalUser extends BaseExternalUser * { * public function getExternalSiteCode() * { * return 'vk'; * } * } * ``` * * ДальнейшаÑ� реализациÑ� методов API Ñ�оциальной Ñ�ети завиÑ�ит лишь от программиÑ�та, программиÑ�Ñ‚ лишь должен * передавать в базовый клаÑ�Ñ� (в Ñ�тот клаÑ�Ñ�) лишь необходимые входные параметры функции. * * Class BaseExternalUser * @package app\users */ abstract class BaseExternalUser { /** * ФункциÑ� возвращает какой-то уникальный код Ñ�айта, например длÑ� Вконтакте Ñ�то vk, длÑ� facebook Ñ�то fb. * Служит длÑ� идентификации API. * Ðтот метод необходимо обÑ�зательно переопределÑ�ть в дочернем клаÑ�Ñ�е! * @throws \Exception */ public static function getExternalSiteCode() { throw new \Exception("Method not support!"); } /** * ФункциÑ� возвращает уникальное имÑ� Ñ�оциальной Ñ�ети, к примеру Вконтакте. * ПереопределÑ�ть в дочернем клаÑ�Ñ�е * @throws \Exception */ public static function getExternalSiteName() { throw new \Exception("Method not support!"); } /** * ФункциÑ� выполнÑ�ет проверку, Ñ�ущеÑ�твует ли такой пользователь или нет. * @param mixed $externalUserId - уникальный идентификатор внешнего пользователÑ�. Ð�апример, * пользователÑ� Ñ�оциальной Ñ�ети Вконтакте или Facebook. * * @return boolean */ public static function isExistUser($externalUserId) { return App::$command ->createCommand(' SELECT COUNT(id) as total FROM `user_tokens` WHERE type = :type AND type_user_id = :type_user_id ') ->bindValue(':type', static::getExternalSiteCode()) ->bindValue(':type_user_id', $externalUserId) ->queryOne('total', 0) > 0; } /** * ФункциÑ� Ñ�оздает нового пользователÑ�. * * @param $externalUserId - ID пользователÑ� из Ñ�оциальной Ñ�ети, например из Вконтакте или Facebook * @param $userName - ФИО пользователÑ� * @param $userBirthday - дата рождениÑ� пользователÑ� * @param $userEmail - Email адреÑ� пользователÑ� * @param $avatar - аватар пользователÑ� * @param $sex - пол пользователÑ�. * * @return int|false - функциÑ� возвращает положительное чиÑ�ло, которое Ñ�влÑ�етÑ�Ñ� уникальным идентификатором * пользователÑ� в Ñ�иÑ�теме или false, еÑ�ли пользователÑ� не удалоÑ�ÑŒ Ñ�оздать. * @throws \Exception */ public static function createUser($externalUserId, $userName, $userBirthday, $userEmail, $avatar, $sex = 1, $onlyExternalAuth = 0) { $fullName = $userName; $attempt = 0; while (true) { if (App::$user->isExistUserByLogin($userName)) { if ($attempt == 0) { $userFragment = explode(' ', $userName); $family = $attempt; if (isset($userFragment[1])) { $family = mb_substr($userFragment[1], 0, 1, 'UTF-8'); } $userName = $userFragment[0] . ' ' . $family; } else { $userName = $userName . ' ' . $attempt; } $attempt++; } else { break; } } // Ñ�мотрим макÑ�имальную длину имени if (mb_strlen($userName) > 50) { $userName = mb_substr($userName, 0, 40); while (true) { if (App::$user->isExistUserByLogin($userName)) { $userName = $userName . ' ' . rand(1, 100); } else { break; } } } // Создаем пользователÑ�. $user = new User(); $user->name = htmlspecialchars($userName); $user->name_full = htmlspecialchars($fullName); $user->pass = ''; $user->mail = filter_var($userEmail, FILTER_VALIDATE_EMAIL) == true ? $userEmail : ''; $user->date_registr = new Expression('NOW()'); $user->id_ranks = 7; $user->ip_last = \App::$request->getIp(); $user->ip2_last = \App::$request->getIpFromProxy(); $user->dinamic_ip = 0; $user->sex = $sex; $user->only_external_auth = $onlyExternalAuth; if ($userEmail != null) { $user->active = 1; } if ($userBirthday != null) { $user->berstday = date('Y-m-d', strtotime($userBirthday)); } if ($user->save() == false) { throw new BaseException("Ð�е удалоÑ�ÑŒ Ñ�оздать пользователÑ� Ñ� данными: {$externalUserId}, {$userName}, {$userBirthday}, {$userEmail}"); } // Ñ�охранÑ�ем аватар пользователÑ� if ($avatar != null) { static::saveAvatarByUser($avatar, $user->id); } return $user->id; } public static function assignUser($userId, $externalType, $externalUserId) { $model = new UserTokens(); $model->type = $externalType; $model->type_user_id = $externalUserId; $model->user_id = $userId; return $model->save(); } /** * ФункциÑ� проверÑ�ет подтвержден ли пользователь или нет. * Ñ�та функциÑ� обычно иÑ�пользуетÑ�Ñ� в Ñ�вÑ�зке Ñ� static::getUserIdByExternalEmail() * еÑ�ли предыдущаÑ� функциÑ� возвращает Email пользователÑ�, то мы обÑ�заны проверить, * подтвердил ли пользователь вход длÑ� Ñ�того пользователÑ� Ñ� Ñ�тим Id, еÑ�ли подтвердил, то авторизовываем, * а еÑ�ли не подтвердил, то отправлÑ�ем уведомление на Ñ�лектронную почту. * * @param $type * @param $externalUserId * @return bool */ public static function isUserConfirmed($type, $externalUserId) { $data = App::$command ->createCommand(' SELECT confirm FROM user_tokens WHERE type_user_id = :type_user_id AND type = :type ') ->bindValue(':type_user_id', $externalUserId) ->bindValue(':type', $type) ->queryOne('confirm', 0); return $data > 0; } public static function confirmUserId($type, $externalUserId) { App::$command ->createCommand(' UPDATE user_tokens SET confirm = 1 WHERE type = :type AND type_user_id = :type_user_id ') ->bindValue(':type', $type) ->bindValue(':type_user_id', $externalUserId) ->query(); } public static function generateUserHashCode($type, $externalUserId) { $hash = md5(time() . 'xcoww223') . md5('xzcsdasd1231asd' . rand(0, 99999)); App::$command ->createCommand(' UPDATE `user_tokens` SET code = :code WHERE type = :type AND type_user_id = :type_user_id ') ->bindValue(':code', $hash) ->bindValue(':type', $type) ->bindValue(':type_user_id', $externalUserId) ->query(); return $hash; } public static function notifyUser(array $user, $hash) { require_once($_SERVER['DOCUMENT_ROOT'] . '/PHPMailer/PHPMailerAutoload.php'); $mailer = new \PHPMailer(); $mailer->From = 'noreply@infoorel.ru'; $mailer->FromName = App::$config['lang']['cities'][0].". Твой город в интернете "; $mailer->CharSet = 'utf-8'; $mailer->Subject = 'ПривÑ�зка аккаунта на InfoOrel.ru'; $mailer->Body = " ЗдравÑ�твуйте, {$user['name']}<br> Ð’Ñ‹ пытаетеÑ�ÑŒ привÑ�зать Ñ�оциальную Ñ�еть ".static::getExternalSiteName()." к Ñ�воему аккаунту. <br> Чтобы подтвердить дейÑ�твие, перейдите по Ñ�Ñ�ылке:<br> http://www.infoorel.ru/oauth_user_confirm.php?code={$hash} "; $mailer->IsHTML(true); $mailer->AddAddress($user['mail']); $mailer->Send(); } /** * ФункциÑ� ищет реальный ID пользователÑ�, знаÑ� его ID из какого-либо Ñ�ервиÑ�а, например * из Ñ�оциальной Ñ�ети Вконтакте или Facebook. * * @param $userId - ID пользователÑ� из внешнего Ñ�ервиÑ�а. * @return int|null - ID пользователÑ� в Ñ�иÑ�теме. */ public static function getUserIdByExternalId($userId) { $user = UserTokens::findOne([ 'type_user_id' => $userId ]); //---- if ($user == null) { return null; } return $user->user_id; } /** * ФункциÑ� Ñ�охранÑ�ет аватар пользователÑ� Ñ� удаленного Ñ�ервера, * например Ñ� Ñ�ерверов Вконтакте или Facebook. * * Функцию можно вызывать каждый раз, когда требуетÑ�Ñ� обновить аватар пользователÑ�. * * @param $avatarImageUrl * @param $realUserId * @throws BaseException * @return string - путь к изображению, внутренний */ public static function saveAvatarByUser($avatarImageUrl, $realUserId) { if (App::$user->isExist($realUserId) == false) { throw new BaseException("BaseExternalUser.php saveAvatarByUser. ПользователÑ� {$realUserId} не Ñ�ущеÑ�твует в базе"); } // директориÑ� Ñ� аватарками пользователей $baseAvatarDir = App::$config['user']['avatarDirectory'] . '/'; // название файла без раÑ�ширениÑ� .jpg $baseAvatarFileName = md5(time()) . md5(rand(1000, 99999)); // Ñ�охранÑ�ем изображение на Ñ�ервер, как временное // потом мы Ñ�оханим его Ñ� нормальными размерами. $imageDownloader = new ImageDownloader(); $imageDownloader->setUrl($avatarImageUrl); $imageDownloader->setFilePath(App::getDirectory() . '/' . $baseAvatarDir . $baseAvatarFileName . '.jpg'); $imageDownloader->save(); // переÑ�охранÑ�ем изображение Ñ� нормальными размерами $uploader = new FileUploader(App::getDirectory() . '/' . $baseAvatarDir); $uploader->setSourceImageFilePath($imageDownloader->getFilePath()); $uploader->asJpg(); $uploader->setFileName($baseAvatarFileName); $uploader->crop(App::$config['user']['avatarWidth'], App::$config['user']['avatarHeight']); if ($uploader->save()) { $user = User::findOne($realUserId); $user->avatar = $baseAvatarDir . $baseAvatarFileName . '.jpg'; $user->save(); } return $baseAvatarDir . $baseAvatarFileName . '.jpg'; } }
/app/users/external/
Èìÿ
Äàòà
Ðàçìåð
..
2019-02-25
BaseExternalUser.php
2023-09-12
13 êá.
BaseExternalUser.php~
2019-02-01
13 êá.
FbUser.php
2017-07-03
413 áàéò
GoogleUser.php
2017-07-03
979 áàéò
OkUser.php
2017-07-03
1 êá.
TwitterUser.php
2016-12-20
84 áàéò
UserTokenEmailQueue.php
2017-07-03
134 áàéò
UserTokens.php
2017-07-03
619 áàéò
VkUser.php
2019-02-01
2 êá.
VkUserInterface.php
2019-01-31
131 áàéò
/app/users/external
Çàãðóçèòü ôàéëû
Ôàéë 1
Ôàéë 2
Ôàéë 3