public static function authentication($username_or_email, $password, $by = 'username') { import('system/share/network/session'); Session::start(); if (self::is_authenticated() && self::$info && $_SESSION[self::SESSION_NAME]) { return self::$info; } if (!in_array($by, array('username', 'email'))) { return false; } try { DatabaseBackend::load_model('system/contrib/auth'); $user = Doctrine_Query::create()->select('*')->from('User u')->leftJoin('u.Group g')->where(sprintf('u.%s="%s"', $by, $username_or_email))->fetchOne(); if (!$user) { return _('Username or email does not exits'); } list($func, $random, $encryped) = explode('$', $user->password); if ($user->password && $user->password === self::generate_password($password, $random, $func)) { self::$is_authenticated = true; self::$info = $_SESSION[self::SESSION_NAME] = array('id' => $user->id, 'username' => $user->username, 'group' => array('id' => $user->Group->id, 'name' => $user->Group->name)); if ($user->Role) { foreach ($user->Role as $role) { self::$info['role'][] = $_SESSION[self::SESSION_NAME]['role'][] = array('id' => $role->id, 'name' => $role->name, 'alias' => $role->alias); } } } else { return _("Password doesn't match"); } } catch (Doctrine_Query_Exception $e) { return _('System error'); } return $user ? $user : _('Username or email does not exits'); }
protected function __load__model__($model, $init_connect = true, $dsn = null) { import('system/bin/doctrine'); $tmp = explode('.', $model); DatabaseBackend::init($dsn, $init_connect); DatabaseBackend::load_model($tmp[0], $tmp[1]); }