1: <?php
2: 3: 4: 5: 6: 7: 8: 9:
10:
11: namespace Kotchasan;
12:
13: use Kotchasan\Http\Request;
14:
15: 16: 17: 18: 19: 20: 21:
22: class Login extends \Kotchasan\KBase
23: {
24: 25: 26: 27: 28: 29: 30:
31: public static $from_submit = false;
32: 33: 34: 35: 36: 37:
38: public static $login_input;
39: 40: 41: 42: 43:
44: public static $login_message;
45: 46: 47: 48: 49: 50:
51: public static $login_params = array();
52:
53: 54: 55: 56: 57: 58: 59: 60:
61: public function checkLogin($params)
62: {
63: $field_name = reset(self::$cfg->login_fields);
64: if ($params['username'] !== self::$cfg->get($field_name)) {
65: self::$login_input = $field_name;
66: return Language::get('not a registered user');
67: } elseif ($params['password'] !== self::$cfg->get('password')) {
68: self::$login_input = 'password';
69: return Language::get('password incorrect');
70: } else {
71: return array(
72: 'id' => 1,
73: $field_name => $params['username'],
74: 'password' => $params['password'],
75: 'status' => 1,
76: );
77: }
78: return 'not a registered user';
79: }
80:
81: 82: 83: 84: 85: 86: 87: 88:
89: public static function create()
90: {
91:
92: $login = new static();
93:
94: $field_name = reset(self::$cfg->login_fields);
95: try {
96:
97: self::$login_params['username'] = self::$request->post('login_username')->username();
98: if (empty(self::$login_params['username'])) {
99: if (isset($_SESSION['login']) && isset($_SESSION['login'][$field_name])) {
100:
101: self::$login_params['username'] = Text::username($_SESSION['login'][$field_name]);
102: if (isset($_SESSION['login']['token'])) {
103: self::$login_params['token'] = $_SESSION['login']['token'];
104: } elseif (isset($_SESSION['login']['password'])) {
105: self::$login_params['password'] = $_SESSION['login']['password'];
106: }
107: } else {
108: self::$login_params['username'] = null;
109: }
110: self::$from_submit = self::$request->post('login_username')->exists();
111: } elseif (self::$request->post('login_password')->exists()) {
112: self::$login_params['password'] = self::$request->post('login_password')->password();
113: self::$from_submit = true;
114: }
115: $action = self::$request->request('action')->toString();
116:
117: if ($action === 'logout' && !self::$from_submit) {
118:
119: unset($_SESSION['login']);
120: self::$login_message = Language::get('Logout successful');
121: } elseif ($action === 'forgot') {
122:
123: $login = $login->forgot(self::$request);
124: } else {
125:
126: if (empty(self::$login_params['username'])) {
127: if (self::$from_submit) {
128: self::$login_message = 'Please fill in';
129: self::$login_input = 'login_username';
130: }
131: } elseif (empty(self::$login_params['password']) && self::$from_submit) {
132: self::$login_message = 'Please fill in';
133: self::$login_input = 'login_password';
134: } elseif (!self::$from_submit || (self::$from_submit && self::$request->isReferer())) {
135:
136: $login_result = $login->checkLogin(self::$login_params);
137: if (is_array($login_result)) {
138:
139: $_SESSION['login'] = $login_result;
140: } else {
141: if (is_string($login_result)) {
142:
143: self::$login_input = self::$login_input == 'password' ? 'login_password' : 'login_username';
144: self::$login_message = $login_result;
145: }
146:
147: unset($_SESSION['login']);
148: }
149: }
150: }
151: } catch (InputItemException $e) {
152: self::$login_message = $e->getMessage();
153: }
154: return $login;
155: }
156:
157: 158: 159:
160: public function forgot(Request $request)
161: {
162: return $this;
163: }
164:
165: 166: 167: 168: 169: 170:
171: public static function isAdmin()
172: {
173: $login = self::isMember();
174: return isset($login['status']) && $login['status'] == 1 ? $login : null;
175: }
176:
177: 178: 179: 180: 181: 182:
183: public static function isMember()
184: {
185: return empty($_SESSION['login']) ? null : $_SESSION['login'];
186: }
187:
188: 189: 190: 191: 192: 193: 194: 195: 196: 197:
198: public static function checkStatus($login, $statuses)
199: {
200: if (!empty($login)) {
201: if ($login['status'] == 1) {
202:
203: return $login;
204: } elseif (is_array($statuses)) {
205: if (in_array($login['status'], $statuses)) {
206: return $login;
207: }
208: } elseif ($login['status'] == $statuses) {
209: return $login;
210: }
211: }
212:
213: return null;
214: }
215: }
216: