Cheetah
Login.php
Go to the documentation of this file.
1 <?php
2 
8 // login | join functions
9 
10 class Login extends ThingPage
11 {
12  // join form fields
13  var $f_join = array (
14  'username' => array (
15  'value' => '',
16  'type' => 'text',
17  'title' => '[L[Username]]',
18  'regexp' => '/^[A-Za-z0-9_]{4,12}$/',
19  'err' => '[L[Join Login Username Error]]',
20  'attributes' => array ('class' => 'sh'),
21  ),
22  'email' => array (
23  'value' => '',
24  'type' => 'text',
25  'title' => '[L[Email]]',
26  'regexp' => '/^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/',
27  'err' => '[L[Join Email Error]]',
28  'attributes' => array ('class' => 'sh'),
29  ),
30  );
31 
32  // login form fields
33  var $f_login = array (
34  'username' => array (
35  'value' => '',
36  'type' => 'text',
37  'title' => '[L[Username]]',
38  'regexp' => '/^[A-Za-z0-9_]{4,12}$/',
39  'err' => '[L[Join Login Username Error]]',
40  'attributes' => array ('class' => 'sh'),
41  ),
42  'pwd' => array (
43  'value' => '',
44  'type' => 'password',
45  'title' => '[L[Password]]',
46  'regexp' => '/^[A-Za-z0-9_]+$/',
47  'err' => '[L[Login Password Error]]',
48  'attributes' => array ('class' => 'sh'),
49  ),
50  );
51 
55  function __construct ()
56  {
57 
58  }
59 
63  function getJoinForm ()
64  {
65  $cu = $this->getUrlsXml ();
66  return "<root>$cu<join><join_form>" . array2xml ($this->f_join) . "</join_form></join></root>";
67  }
68 
72  function getLoginForm ()
73  {
74  $cu = $this->getUrlsXml ();
75  return "<root>$cu<login><login_form>" . array2xml ($this->f_login) . "</login_form></login></root>";
76  }
77 
82  function joinSubmit ($p)
83  {
84  $js = '';
85 
86  // check input values
87  foreach ($this->f_join as $name => $a) {
88  if ($a['regexp'])
89  if (!preg_match($a['regexp'], $p[$name]))
90  $js .= $this->_getJsErr($name, $a['err']);
91 
92  switch ($name) {
93  case 'username':
94  if (!$this->_checkUniqUser($p[$name]))
95  $js .= $this->_getJsErr($name, '[L[Username must be uniq]]');
96  break;
97  case 'email':
98  if (!$this->_checkUniqEmail($p[$name]))
99  $js .= $this->_getJsErr($name, '[L[Email must be uniq]]');
100  break;
101  }
102  }
103 
104  // add user
105  if (!$js) {
106  $db = new DbLogin();
107 
108  $p['pwd'] = $this->_genPwd();
109 
110  prepare_to_db ($p['username'], 0);
111  prepare_to_db ($p['email'], 0);
112 
113  if (!$db->insertUser($p)) {
114  $js .= $this->_getJsErr('email', '[L[Database error]]');
115  }
116 
117  // send activation mail
118  $mail = new ChMail ();
119  if (!$mail->sendActivationMail($p)) {
120  $js .= $this->_getJsErr('email', '[L[Send mail failed]]');
121  }
122  }
123 
124  return '<js>' . $js . '</js>';
125  }
126 
131  function loginSubmit ($p)
132  {
133  $js = '';
134 
135  // check input values
136  foreach ($this->f_login as $name => $a) {
137  if ($a['regexp'])
138  if (!preg_match($a['regexp'], $p[$name]))
139  $js .= $this->_getJsErr($name, $a['err']);
140 
141  }
142 
143  // process login
144  if (!$js) {
145  $db = new DbLogin();
146 
147  $p['pwd'] = md5($p['pwd']);
148 
149  if (!$db->checkLogin($p)) {
150  $js .= $this->_getJsErr('pwd', '[L[password or login is incorrect]]');
151  } else {
152  setcookie ('orca_user', $p['username']);
153  if (!setcookie ('orca_pwd', $p['pwd']))
154  $js .= $this->_getJsErr('pwd', '[L[Cookies must be enabled to process login]]');
155  }
156  }
157 
158  return '<js>' . $js . '</js>';
159  }
160 
161  // private functions
162 
163  function _getJsErr ($name, $err)
164  {
165  return <<<EOS
166  {
167  var e = document.getElementById('f_err_$name');
168  e.innerHTML = '$err';
169  e.style.display = 'inline';
170  }
171 EOS;
172 
173  }
174 
175  function _checkUniqUser($s)
176  {
177  $db = new DbLogin();
178  return $db->getUserByName (filter_to_db($s)) == $s ? false : true;
179  }
180 
181  function _checkUniqEmail($s)
182  {
183  $db = new DbLogin();
184  return $db->getUserByEmail (filter_to_db($s)) == $s ? false : true;
185  }
186 
187  function _genPwd ()
188  {
189  $ret = '';
190  list($usec, $sec) = explode(' ', microtime());
191  $seed = (float) $sec + ((float) $usec * 100000);
192  srand($seed);
193 
194  for ($i=0; $i < 8; ++$i) {
195 
196  switch (rand(1,3)) {
197  case 1:
198  $c = chr(rand(ord('a'),ord('z')));
199  break;
200  case 2:
201  $c = chr(rand(ord('A'),ord('Z')));
202  break;
203  case 3:
204  $c = chr(rand(ord('0'),ord('9')));
205  break;
206  }
207  $ret .= $c;
208  }
209  return $ret;
210  }
211 
212 }
document
Output SortAttr HTML Purifier will sort attributes by name before writing them back to the document
Definition: Output.SortAttr.txt:8
Login\$f_join
$f_join
Definition: Login.php:13
Login\getJoinForm
getJoinForm()
Definition: Login.php:63
Login\$f_login
$f_login
Definition: Login.php:33
Login\_genPwd
_genPwd()
Definition: Login.php:187
$db
if(!defined("DB_HOST")) define("DB_HOST" $db['host']
Definition: header.inc.php:18
$ret
$ret
Definition: index.php:39
array2xml
array2xml($arr, $tag=false)
Definition: util.inc.php:60
php
DbLogin
Definition: DbLogin.php:13
filter_to_db
filter_to_db($s, $iAllowHTML=0)
Definition: util.inc.php:123
Login\_checkUniqUser
_checkUniqUser($s)
Definition: Login.php:175
ThingPage\getUrlsXml
getUrlsXml()
Definition: ThingPage.php:43
Login\getLoginForm
getLoginForm()
Definition: Login.php:72
Login\joinSubmit
joinSubmit($p)
Definition: Login.php:82
Login
Definition: Login.php:11
ChMail
Definition: ChMail.php:11
$s
$s
Definition: embed.php:13
Login\loginSubmit
loginSubmit($p)
Definition: Login.php:131
ThingPage
Definition: ThingPage.php:11
Login\_getJsErr
_getJsErr($name, $err)
Definition: Login.php:163
as
as
Definition: Filter.ExtractStyleBlocks.Escaping.txt:10
prepare_to_db
prepare_to_db(&$s, $iAllowHTML=1)
Definition: util.inc.php:110
Login\__construct
__construct()
Definition: Login.php:55
false
if(!defined("FALSE_VAL")) define("FALSE_VAL" false
Definition: constants.inc.php:9
Login\_checkUniqEmail
_checkUniqEmail($s)
Definition: Login.php:181