source: pro-violet-viettel/sourcecode/api.violet.vn/www/apps/platform/modules/user/actions/actions.class.php

Last change on this file was 289, 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    $result = $us_id;
128    $ip = myUtility::getRealIpAddr();
129    myUtility::log("$ip get from $src".($tbluser? '': ' failed'), 'apiuser.log');
130    return $this->renderText($result);
131  }
132
133  public function executeUpdate() {
134    $src = $this->getRequestParameter('src');
135    $us_id = $this->getRequestParameter('us_id');
136    $username = $this->getRequestParameter('username');
137    $password = $this->getRequestParameter('password');
138    $fullname = $this->getRequestParameter('fullname');
139    $gender = $this->getRequestParameter('gender');
140    $email = $this->getRequestParameter('email');
141    $phone = $this->getRequestParameter('phone');
142    $school = $this->getRequestParameter('school');
143    $province = $this->getRequestParameter('province');
144    $token = $this->getRequestParameter('token');
145    $sendmail = $this->getRequestParameter('sendmail');
146    $oldpass = $this->getRequestParameter('oldpass');
147
148    if ($src == null) return $this->renderText('status=10');
149    if ($this->validateData($fullname, $email, $phone, $error)) return $this->renderText('status=7&errMsg='.$error);
150
151    if ($us_id == null) {
152      if ($token != md5($username.self::TOKENPW)) return $this->renderText('status=10');
153      if (!$username || !$password || !$fullname) return $this->renderText('status=1&errMsg=Not enough data');
154      if ($this->getUserField(TbluserPeer::US_USERNAME, $username)) return $this->renderText('status=2&errMsg=Username has existed');
155      if ($this->getUserField(TbluserPeer::US_EMAIL, $email)) return $this->renderText('status=3&errMsg=Email has existed');
156      if ($this->getUserField(TbluserPeer::US_PHONE, $phone)) return $this->renderText('status=4&errMsg=Phone number has existed');
157      $tbluser = new Tbluser();
158    } else {
159      if ($token != md5($us_id.self::TOKENPW)) return $this->renderText('status=10');
160      $tbluser = TbluserPeer::retrieveByPK($us_id);
161      if ($tbluser == null) return $this->renderText('status=5&errMsg=User not found');
162      if (($username != null || $password != null) && md5($oldpass) != $tbluser->getUsPassword()) return $this->renderText('status=6&errMsg=Incorrect old password');
163      if ($email != null && $email != $tbluser->getUsEmail()) $tbluser->setEmailConfirm(0);
164      if ($phone != null && $phone != $tbluser->getUsPhone()) $tbluser->setMobileConfirm(0);
165    }
166
167    if ($username != null) $tbluser->setUsUsername($username);
168    if ($password != null) $tbluser->setUsPassword(md5($password));
169    if ($fullname != null) $tbluser->setUsFullname($fullname);
170    if ($gender != null) $tbluser->setUsSex($gender=='male'? 1: 2);
171    if ($email != null) $tbluser->setUsEmail($email);
172    if ($phone != null) $tbluser->setUsPhone($phone);
173    if ($school != null) $tbluser->setUsSchool($school);
174    if ($province != null) $tbluser->setUsProvince($province);
175    $tbluser->save();
176
177    if ($sendmail == 'true') userMessage::sendConfirmEmail($this->tbluser, $password);
178    $ip = myUtility::getRealIpAddr();
179    $act = ($us_id == null? 'create': 'update');
180    myUtility::log("$ip $act from $src".($tbluser? '': ' failed'), 'apiuser.log');
181    return $this->renderText('status=0&id='.$tbluser->getUsId());
182  }
183
184  public function executeForgotpassword() {
185    $src = $this->getRequestParameter('src');
186    $email = $this->getRequestParameter('email');
187    $token = $this->getRequestParameter('token');
188    if ($src != null && $email != null && $token == md5($email.self::TOKENPW)) {
189      $c = new Criteria();
190      $c->add(TbluserPeer::US_EMAIL, trim($email));
191      $tbluser = TbluserPeer::doSelectOne($c);
192      if ($tbluser != null) {
193        $res = userMessage::sendForgotPassEmail($tbluser);
194        $ip = myUtility::getRealIpAddr();
195        $acc = $tbluser->getUsUsername();
196        myUtility::log("$ip from $src get password for $acc".($res?'':' failed'), 'apiuser.log');
197        return $this->renderText('status=0');
198      }
199      return $this->renderText('status=1&errMsg=Email not found');
200    }
201    return $this->renderText('status=10');
202  }
203
204  public function executeGetonlineuser() {
205    return sfView::NONE;
206  }
207
208  public function executeActivate() {
209    $arParams['access_key']   = $this->getRequestParameter('access_key', 'no_access_key');
210    $arParams['command']      = $this->getRequestParameter('command', 'no_command');
211    $arParams['mo_message']   = $this->getRequestParameter('mo_message', 'no_mo_message');
212    $arParams['msisdn']       = $this->getRequestParameter('msisdn', 'no_msisdn');
213    $arParams['request_id']   = $this->getRequestParameter('request_id', 'no_request_id');
214    $arParams['request_time'] = $this->getRequestParameter('request_time', 'no_request_time');
215    $arParams['short_code']   = $this->getRequestParameter('short_code', 'no_short_code');
216    $arParams['signature']    = $this->getRequestParameter('signature', 'no_signature');
217
218    $data  = "access_key=" . $arParams['access_key'] . "&command=" . $arParams['command'] . "&mo_message=" . $arParams['mo_message'] . "&msisdn=" . $arParams['msisdn'];
219    $data .= "&request_id=" . $arParams['request_id'] . "&request_time=" . $arParams['request_time'] . "&short_code=" . $arParams['short_code'];
220    $secret = 'evvx931itxysfnp9m94rf2vxd101zegr';
221    $signature = hash_hmac("sha256", $data, $secret);
222
223    if ($arParams['signature'] == $signature) {
224      $phone = preg_replace('/^84/', '0', $arParams['msisdn']);
225      $tbluser = $tbluser = $this->getUserField(TbluserPeer::US_PHONE, $phone);
226      if ($tbluser != null) {
227        if ($tbluser->getMobileConfirm() == 0) {
228          $tbluser->setMobileConfirm(1);
229          $tbluser->save();
230          $arResponse['sms'] = 'Kich hoat thanh cong tai khoan '.$tbluser->getUsUsername();
231        } else {
232          $arResponse['sms'] = 'Tai khoan '.$tbluser->getUsUsername().' da duoc kich hoat';
233        }
234      } else {
235        $arResponse['sms'] = 'Khong tim thay so dien thoai tren Violet.vn';
236      }
237    } else {
238      $arResponse['sms'] = 'Sai chu ky';
239    }
240
241    $arResponse['status'] = 1;
242    $arResponse['type'] = 'text';
243    myUtility::log($arParams['msisdn'].': '.$arParams['mo_message'].' -> '.$arParams['short_code'].' | '.$arResponse['sms'], 'sms.log');
244    return $this->renderText(json_encode($arResponse));
245  }
246}
Note: See TracBrowser for help on using the repository browser.