/** * ULogin registration and authorization * * @param NCModule $module * @param \Service\Render\Theme $theme * @param \Service\Application\Translate $translate * @return array|\System\Engine\NCBlock[] */ static function globalize($module, $theme, $translate) { // Gravatar $theme->twig->addFilter(new \Twig_SimpleFilter('avatar', function ($user, $default = null) { return $user['avatar'] ? $user['avatar'] : User::get_gravatar_url($user['email'], 256, $default); })); // Refer host $theme->twig->addFilter(new \Twig_SimpleFilter('host', function ($url, $default = 1) { $data = parse_url($url); if (isset($data['host'])) { return $data['host']; } if ($default === 1) { return $url; } return $default; })); // URL Decode $theme->twig->addFilter(new \Twig_SimpleFilter('url_decode', function ($url) { return urldecode($url); })); // ULogin authentication if (!$module->user && Env::$request->isMethod('post') && isset($_POST['token'])) { $s = file_get_contents('http://ulogin.ru/token.php?token=' . $_POST['token'] . '&host=' . $_SERVER['HTTP_HOST']); $data = new Options(json_decode($s, true)); $hash = User::encrypt(User::encrypt($data->get('network') . $data->get('identity'))); if ($user = $module->auth->authenticate_by_hash($hash)) { $module->auth->login($user); } else { $user = User::create(['username' => $data['first_name'] . ' ' . $data['last_name'], 'password' => $hash, 'email' => $data->get('email', $data->get('identity')), 'avatar' => $data->get('photo', ''), 'group_id' => $module->settings->get('users_group')]); } if (isset($user) && $user instanceof User) { $module->auth->login($user); Env::$response->sendHeaders(); return static::redirect_response('/'); } } /* * Last 5 users */ $last_users = function () { return \User::as_array(User::find('all', ['conditions' => ['ban_time = 0 OR ban_time IS NULL'], 'order' => 'register_date DESC', 'limit' => 5])); }; return ['_user' => lazy_arr('users', ['$last' => $last_users]), 'ulogin' => ['small' => '<script src="//ulogin.ru/js/ulogin.js"></script><div id="uLogin" data-ulogin="******"></div>', 'panel' => '<script src="//ulogin.ru/js/ulogin.js"></script><div id="uLogin" data-ulogin="******"></div>']]; }