Example #1
0
 /**
  * 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>']];
 }