source: platform/modules/user/actions/actions.class.php @ 1

Last change on this file since 1 was 1, checked in by dungnv, 11 years ago
File size: 11.2 KB
Line 
1<?php
2
3/**
4 * user actions.
5 *
6 * @package    violetspace
7 * @subpackage user
8 * @author     Your name here
9 * @version    SVN: $Id: actions.class.php 2692 2006-11-15 21:03:55Z fabien $
10 */
11class userActions extends sfActions
12{
13  const TOKENPW = 'violet';
14
15  /**
16   * Executes index action
17   *
18   */
19  public function executeIndex()
20  {
21    $this->forward('default', 'module');
22  }
23
24  private function getUserField($fieldName, $value) {
25    $c = new Criteria();
26    $c->add($fieldName, $value);
27    return TbluserPeer::doSelectOne($c);
28  }
29
30  private function validateData($name, $email, $phone, &$error) {
31    return
32    ($name != null && !myUtility::validate('sfFilterValidator', $name, $error)) ||
33    ($name != null && !myUtility::validate('sfFullnameValidator', $name, $error)) ||
34    ($email != null && !myUtility::validate('sfEmailValidator', $email, $error)) ||
35    ($phone != null && !myUtility::validate('sfPhoneValidator', $phone, $error));
36  }
37
38  private function getUserInfo($tbluser) {
39    $result  = 'us_id='.$tbluser->getUsId();
40    $result .= '&username='.$tbluser->getUsUsername();
41    $result .= '&fullname='.$tbluser->getUsFullname();
42    $result .= '&gender='.($tbluser->getUsSex()==1? 'male': 'female');
43    $result .= '&email='.$tbluser->getUsEmail();
44    $result .= '&phone='.$tbluser->getUSPhone();
45    $result .= '&school='.$tbluser->getUsSchool();
46    $result .= '&province='.$tbluser->getUsProvince();
47    return $result;
48  }
49
50  private function getLicenseLevel($tbluser) {
51    $productId = $this->getRequestParameter('product');
52    $version = $this->getRequestParameter('version');
53    if ($productId == null) return 0;
54
55    $c = new Criteria();
56    $c->add(TblprolicensePeer::LI_TYPE, 1);
57    $c->add(TblprolicensePeer::LI_CUSTOMER, $tbluser->getUsId());
58    $c->add(TblprolicensePeer::LI_PRODUCT, $productId);
59    $c->add(TblprolicensePeer::LI_VERSION, $version, Criteria::GREATER_EQUAL);
60    $c->add(TblprolicensePeer::LI_EXPIREDATE, date('Y-m-d H:i:s'), Criteria::GREATER_EQUAL);
61    $license = TblprolicensePeer::doSelectOne($c);
62    $userdetail = TblblogcheckinfoPeer::retrieveByPk($tbluser->getUsId());
63    if ($license == null && $userdetail != null) {
64      $c = new Criteria();
65      $c->add(TblprolicensePeer::LI_TYPE, 2);
66      $c->add(TblprolicensePeer::LI_CUSTOMER, $userdetail->getCiSchool());
67      $c->add(TblprolicensePeer::LI_PRODUCT, $productId);
68      $c->add(TblprolicensePeer::LI_VERSION, $version, Criteria::GREATER_EQUAL);
69      $c->add(TblprolicensePeer::LI_EXPIREDATE, date('Y-m-d H:i:s'), Criteria::GREATER_EQUAL);
70      $license = TblprolicensePeer::doSelectOne($c);
71    }
72    if ($license == null) return 0;
73    return $license->getLiLevel();
74  }
75
76  public function executeLogin() {
77    $src = $this->getRequestParameter('src');
78    $token = $this->getRequestParameter('token');
79    $account = $this->getRequestParameter('username');
80    $password = $this->getRequestParameter('password');
81    if ($account == null || $password == null) return $this->renderText('status=1&errMsg=Not enough data');
82    if ($src == null || $token != md5($account.self::TOKENPW)) return $this->renderText('status=10');
83
84    $tbluser = $this->getUserField(TbluserPeer::US_USERNAME, $account);
85    if (!$tbluser) $tbluser = $this->getUserField(TbluserPeer::US_EMAIL, $account);
86    if (!$tbluser) $tbluser = $this->getUserField(TbluserPeer::US_PHONE, $account);
87    if (!$tbluser) return $this->renderText('status=2&errMsg=User not found');
88    if ($tbluser->getUsPassword() != md5($password)) return $this->renderText('status=3&errMsg=Incorrect password');
89
90    $loginResult = $this->getUserInfo($tbluser);
91    if ($tbluser->getUsStatus() == 0) return $this->renderText($loginResult.'&status=4&errMsg=Account is not activated');
92    $loginResult .= '&level='.$this->getLicenseLevel($tbluser);
93    $loginResult .= '&status=0';
94
95    try {
96      $this->getUser()->signIn($tbluser);
97    } catch (Exception $e) {
98      return $this->renderText('&status=5&errMsg='.$e->getMessage());
99    }
100    $ip = myUtility::getRealIpAddr();
101    myUtility::log("$ip login from $src, account: $account", 'apiuser.log');
102    return $this->renderText($loginResult);
103  }
104
105  public function executeLogout() {
106    $this->getUser()->signOut();
107    return sfView::NONE;
108  }
109
110  public function executeGetinfo() {
111    $src = $this->getRequestParameter('src');
112    $us_id = $this->getRequestParameter('us_id');
113    $uname = $this->getRequestParameter('username');
114    $email = $this->getRequestParameter('email');
115    $phone = $this->getRequestParameter('phone');
116    $token = $this->getRequestParameter('token');
117    if ($src == null) return sfView::NONE;
118
119    if ($us_id && $token==md5($us_id.self::TOKENPW)) $tbluser = $this->getUserField(TbluserPeer::US_ID, $us_id);
120    if ($uname && $token==md5($uname.self::TOKENPW)) $tbluser = $this->getUserField(TbluserPeer::US_USERNAME, $uname);
121    if ($email && $token==md5($email.self::TOKENPW)) $tbluser = $this->getUserField(TbluserPeer::US_EMAIL, $email);
122    if ($phone && $token==md5($phone.self::TOKENPW)) $tbluser = $this->getUserField(TbluserPeer::US_PHONE, $phone);
123
124    if ($tbluser) $result = $this->getUserInfo($tbluser);
125    else return sfView::NONE;
126
127    $ip = myUtility::getRealIpAddr();
128    myUtility::log("$ip get from $src".($tbluser? '': ' failed'), 'apiuser.log');
129    return $this->renderText($result);
130  }
131
132  public function executeUpdate() {
133    $src = $this->getRequestParameter('src');
134    $us_id = $this->getRequestParameter('us_id');
135    $username = $this->getRequestParameter('username');
136    $password = $this->getRequestParameter('password');
137    $fullname = $this->getRequestParameter('fullname');
138    $gender = $this->getRequestParameter('gender');
139    $email = $this->getRequestParameter('email');
140    $phone = $this->getRequestParameter('phone');
141    $school = $this->getRequestParameter('school');
142    $province = $this->getRequestParameter('province');
143    $token = $this->getRequestParameter('token');
144    $sendmail = $this->getRequestParameter('sendmail');
145    $oldpass = $this->getRequestParameter('oldpass');
146
147    if ($src == null) return $this->renderText('status=10');
148    if ($this->validateData($fullname, $email, $phone, $error)) return $this->renderText('status=7&errMsg='.$error);
149
150    if ($us_id == null) {
151      if ($token != md5($username.self::TOKENPW)) return $this->renderText('status=10');
152      if (!$username || !$password || !$fullname) return $this->renderText('status=1&errMsg=Not enough data');
153      if ($this->getUserField(TbluserPeer::US_USERNAME, $username)) return $this->renderText('status=2&errMsg=Username has existed');
154      if ($this->getUserField(TbluserPeer::US_EMAIL, $email)) return $this->renderText('status=3&errMsg=Email has existed');
155      if ($this->getUserField(TbluserPeer::US_PHONE, $phone)) return $this->renderText('status=4&errMsg=Phone number has existed');
156      $tbluser = new Tbluser();
157    } else {
158      if ($token != md5($us_id.self::TOKENPW)) return $this->renderText('status=10');
159      $tbluser = TbluserPeer::retrieveByPK($us_id);
160      if ($tbluser == null) return $this->renderText('status=5&errMsg=User not found');
161      if (($username != null || $password != null) && md5($oldpass) != $tbluser->getUsPassword()) return $this->renderText('status=6&errMsg=Incorrect old password');
162      if ($email != null && $email != $tbluser->getUsEmail()) $tbluser->setEmailConfirm(0);
163      if ($phone != null && $phone != $tbluser->getUsPhone()) $tbluser->setMobileConfirm(0);
164    }
165
166    if ($username != null) $tbluser->setUsUsername($username);
167    if ($password != null) $tbluser->setUsPassword(md5($password));
168    if ($fullname != null) $tbluser->setUsFullname($fullname);
169    if ($gender != null) $tbluser->setUsSex($gender=='male'? 1: 2);
170    if ($email != null) $tbluser->setUsEmail($email);
171    if ($phone != null) $tbluser->setUsPhone($phone);
172    if ($school != null) $tbluser->setUsSchool($school);
173    if ($province != null) $tbluser->setUsProvince($province);
174    $tbluser->save();
175
176    if ($sendmail == 'true') userMessage::sendConfirmEmail($this->tbluser, $password);
177    $ip = myUtility::getRealIpAddr();
178    $act = ($us_id == null? 'create': 'update');
179    myUtility::log("$ip $act from $src".($tbluser? '': ' failed'), 'apiuser.log');
180    return $this->renderText('status=0&id='.$tbluser->getUsId());
181  }
182
183  public function executeForgotpassword() {
184    $src = $this->getRequestParameter('src');
185    $email = $this->getRequestParameter('email');
186    $token = $this->getRequestParameter('token');
187    if ($src != null && $email != null && $token == md5($email.self::TOKENPW)) {
188      $c = new Criteria();
189      $c->add(TbluserPeer::US_EMAIL, trim($email));
190      $tbluser = TbluserPeer::doSelectOne($c);
191      if ($tbluser != null) {
192        $res = userMessage::sendForgotPassEmail($tbluser);
193        $ip = myUtility::getRealIpAddr();
194        $acc = $tbluser->getUsUsername();
195        myUtility::log("$ip from $src get password for $acc".($res?'':' failed'), 'apiuser.log');
196        return $this->renderText('status=0');
197      }
198      return $this->renderText('status=1&errMsg=Email not found');
199    }
200    return $this->renderText('status=10');
201  }
202
203  public function executeGetonlineuser() {
204    return sfView::NONE;
205  }
206
207  public function executeActivate() {
208    $arParams['access_key']   = $this->getRequestParameter('access_key', 'no_access_key');
209    $arParams['command']      = $this->getRequestParameter('command', 'no_command');
210    $arParams['mo_message']   = $this->getRequestParameter('mo_message', 'no_mo_message');
211    $arParams['msisdn']       = $this->getRequestParameter('msisdn', 'no_msisdn');
212    $arParams['request_id']   = $this->getRequestParameter('request_id', 'no_request_id');
213    $arParams['request_time'] = $this->getRequestParameter('request_time', 'no_request_time');
214    $arParams['short_code']   = $this->getRequestParameter('short_code', 'no_short_code');
215    $arParams['signature']    = $this->getRequestParameter('signature', 'no_signature');
216
217    $data  = "access_key=" . $arParams['access_key'] . "&command=" . $arParams['command'] . "&mo_message=" . $arParams['mo_message'] . "&msisdn=" . $arParams['msisdn'];
218    $data .= "&request_id=" . $arParams['request_id'] . "&request_time=" . $arParams['request_time'] . "&short_code=" . $arParams['short_code'];
219    $secret = 'evvx931itxysfnp9m94rf2vxd101zegr';
220    $signature = hash_hmac("sha256", $data, $secret);
221
222    if ($arParams['signature'] == $signature) {
223      $phone = preg_replace('/^84/', '0', $arParams['msisdn']);
224      $tbluser = $tbluser = $this->getUserField(TbluserPeer::US_PHONE, $phone);
225      if ($tbluser != null) {
226        if ($tbluser->getMobileConfirm() == 0) {
227          $tbluser->setMobileConfirm(1);
228          $tbluser->save();
229          $arResponse['sms'] = 'Kich hoat thanh cong tai khoan '.$tbluser->getUsUsername();
230        } else {
231          $arResponse['sms'] = 'Tai khoan '.$tbluser->getUsUsername().' da duoc kich hoat';
232        }
233      } else {
234        $arResponse['sms'] = 'Khong tim thay so dien thoai tren Violet.vn';
235      }
236    } else {
237      $arResponse['sms'] = 'Sai chu ky';
238    }
239
240    $arResponse['status'] = 1;
241    $arResponse['type'] = 'text';
242    myUtility::log($arParams['msisdn'].': '.$arParams['mo_message'].' -> '.$arParams['short_code'].' | '.$arResponse['sms'], 'sms.log');
243    return $this->renderText(json_encode($arResponse));
244  }
245}
Note: See TracBrowser for help on using the repository browser.