singletonIf('users.user.avatar', function () { return new static(); }); /** @var static $i */ $i = bff('users.user.avatar'); $i->setRecordID($userID); return $i; } public function initSettings() { $this->path = $this->app->path('avatars', 'images'); $this->pathTmp = $this->app->path('tmp', 'images'); $this->url = $this->app->url('avatars', 'images'); $this->urlTmp = $this->app->url('tmp', 'images'); $this->table = Users::TABLE_USERS; $this->fieldID = 'user_id'; $this->fieldImage = 'avatar'; $this->filenameLetters = 6; $this->folderByID = true; $this->maxSize = $this->config('users.avatar.maxsize', 2097152, TYPE_UINT); # 2мб $this->minWidth = $this->config('users.avatar.width.min', 100, TYPE_UINT); $this->minHeight = $this->config('users.avatar.height.min', 100, TYPE_UINT); $this->maxWidth = $this->config('users.avatar.width.max', 1000, TYPE_UINT); $this->maxHeight = $this->config('users.avatar.height.max', 1000, TYPE_UINT); $this->sizes = $this->app->filter('users.avatar.sizes', [ static::szNormal => ['width' => 130, 'height' => 130], ], $this); $this->extensionsAllowed[] = 'svg'; } /** * Avatar view block * @param int $id user id * @param array $data user data * @param string $size avatar size * @return AvatarBlock */ public static function block($id, array $data, $size = self::szNormal) { return new AvatarBlock([ 'userId' => $id, 'user' => $data, 'avatarSize' => $size, ]); } /** * Формирование ссылки (URL) на аватар пользователя * @param int $userID ID пользователя * @param string $fileName название файла * @param string $size ключ размера * @param int $sex пол пользователя * @param bool $temp ссылка на временный аватар (загруженный в профиле но еще не сохраненный) * @return string URL */ public static function url($userID, string $fileName, ?string $size = null, int $sex = 0, bool $temp = false): string { $i = static::i($userID); $size = $size ?? static::szNormal; if (empty($fileName)) { return $i->urlDefault($size, $sex); } return $i->getURL($fileName, $size, $temp); } /** * Формирование ссылки URL на аватар пользователя по умолчанию (стандартный) * @param string $size ключ размера * @param int $sex пол пользователя * @return string URL */ public function urlDefault(string $size, int $sex = 0): string { return $this->url . $size . '.svg'; } /** * Загрузка аватара из соц. сети * @param int $socialProviderID ID провайдера * @param string $providerAvatarURL URL аватара в соц. сети * @param bool $newUserAccount true - вновь созданный аккаунт пользователя * @return void */ public function uploadSocial(int $socialProviderID, string $providerAvatarURL, bool $newUserAccount = true) { $this->setAssignErrors(false); # todo if ($socialProviderID == Social::PROVIDER_ODNOKLASSNIKI && stripos($providerAvatarURL, 'stub_') !== false) { # Ссылка на аватар у Одноклассников.ру # пустой - http://usd12.odnoklassniki.ru/res/stub_128x96.gif # загруженный - http://usd5.odnoklassniki.ru/getImage?photoId=000000000000&photoType=2 } else { # сбрасываем ограничение по ширине/высоте $this->setDimensions(0, 0, 0, 0); # загружаем $this->uploadURL($providerAvatarURL, !$newUserAccount, true); } } }